2019-01-09 13:01:43 -0600 received badge ● Notable Question (source) 2019-01-04 05:20:48 -0600 commented answer Quaternion * integer you must do something like: if isinstance(other, Integer): ... return something elif isinstance(other, quater): ... return something else else: raise TypeError('multiplication with other(={}) not defined'.format(other))  2019-01-03 10:31:45 -0600 commented answer Documentation erratum simplify_full exists so that it appears under tab completion on E.simplify. full_simplify exists maybe because sometimes people use this name (in maple?, in mathematica? for instance) 2019-01-03 10:26:41 -0600 answered a question Quaternion * integer by defining a method def __mul__(self, other): in your class called quater. Something like this: def __mul__(self, other): if isinstance(other, Integer): ... return something elif isinstance(other, quater): ... return something else else: raise TypeError('multiplication with other(={}) not defined'.format(other))  2019-01-03 05:20:42 -0600 commented answer Sage Floyd algorithm in Cython Are you welling to add algorithm='Floyd-Warshall-scipy', algorithm='Floyd-Warshall-numpy' to the method shortest_path_all_pairs in Sage and even improve the Sage pure python implementation? That would be awesome. 2018-12-03 03:40:58 -0600 commented answer Error in finding the closest vector in a sublattice of Z^n "one of the main things I want to do is simply orthogonally project a vector onto a subspace spanned by the columns of a matrix, which is functionality Sage also seems not to have built-in anywhere I can find it." Orthogonal projection can be made with multiplication of matrices, and I think that you can multiply matrices in Sage. In the wikipedia page Projection (linear algebra), you will find a formula of the form: sage: P_A = A*(A.transpose()*A).inverse()*A.transpose()  which gives you a matrix which does the orthogonal projection with respect to the column of the matrix A. 2018-12-01 01:55:47 -0600 marked best answer Can make doc use less memory? Running make doc works fine during the night on my computer because I am not using it. But running make doc is really annoying during the day when let's say I want to use firefox at the same time: the computer gets swapping and becomes unusable. 2018-10-25 09:17:20 -0600 commented answer Is there anything in Sage which solves #SAT ? For an small typical example I have, sage: p Boolean Program (maximization, 275 variables, 65 constraints) sage: p.polyhedron(backend=backend) # takes forever  2018-10-24 10:45:27 -0600 received badge ● Nice Question (source) 2018-10-22 10:40:06 -0600 commented answer Is there anything in Sage which solves #SAT ? Thank you for your idea of using integral_points_count. I will compare the speed with dancing links which was the only way I knew to count solutions. 2018-10-19 04:29:29 -0600 asked a question Is there anything in Sage which solves #SAT ? For example using sharpsat or relsat or Dsharp? 2018-10-18 08:04:43 -0600 commented question Change binary Operation in Monoid/Semigroup Rings Maybe you need to create a new category for the algebra you need. Maybe you will find information on how to do this in the four documentation pages in the section Parents/Elements, Categories and algebraic structures of the thematic tutorials. 2018-09-09 13:56:39 -0600 answered a question Is there a sage command to compute complex numbers? I get: sage: z = 1 + I sage: sqrt(1/z) sqrt(-1/2*I + 1/2)  If you want the real and imaginary parts, you may do: sage: s = sqrt(1/z) sage: s.real().simplify() 1/4*2^(3/4)*sqrt(sqrt(2) + 2) sage: s.imag().simplify() -1/4*2^(3/4)*sqrt(-sqrt(2) + 2)  2018-09-03 03:30:23 -0600 received badge ● Nice Answer (source) 2018-09-03 02:15:55 -0600 answered a question Setting relations between variables You may create a dictionary of variables: import itertools S = {} for i,j,k,l in itertools.product([1..4], repeat=4): S[(i,j,k,l)] = var('S_{}{}{}{}'.format(i,j,k,l))  which then allows you to create a loop to set your relations. Alternatively, you may create only the variable S_ijkl in the loop above and add a line for the others: for i,j,k,l in itertools.product([1..4], repeat=4): if j>i or l>k: continue S[(i,j,k,l)] = var('S_{}{}{}{}'.format(i,j,k,l)) S[(j,i,k,l)] = S[(i,j,l,k)] = S[(j,i,l,k)]  2018-08-29 09:10:55 -0600 commented answer Wrong result from integral(log(1+1/(x**2+1)), x, -oo, oo) So where should we fix this? 2018-08-28 07:49:45 -0600 received badge ● Nice Answer (source) 2018-08-28 04:03:40 -0600 asked a question Why .45 // .28 does not work? Taking modulo works with Python float and Sage float: sage: .45r % .28r 0.16999999999999998 sage: .45 % .28 -0.110000000000000  The quotient works with Python float: sage: .45r // .28r 1.0  But why should it not work with Sage float as well? sage: .45 // .28 Traceback (most recent call last): ... TypeError: unsupported operand parent(s) for //: 'Real Field with 53 bits of precision' and 'Real Field with 53 bits of precision'  2018-08-27 15:48:31 -0600 answered a question Wrong result from integral(log(1+1/(x**2+1)), x, -oo, oo) By default, Sage uses Maxima which indeed gets it wrong. sage: integrate(log(1 + 1/(x**2 + 1)), x, -oo, oo, algorithm='maxima') 2*pi - 2*sqrt(2)*pi  Nonetheless, Sympy and Giac both get it right: sage: integrate(log(1 + 1/(x**2 + 1)), x, -oo, oo, algorithm='sympy') -2*pi + 2*sqrt(2)*pi sage: integrate(log(1 + 1/(x**2 + 1)), x, -oo, oo, algorithm='giac') 2*pi*(sqrt(2) - 1)  2018-08-26 13:18:10 -0600 received badge ● Nice Answer (source) 2018-08-22 08:20:07 -0600 answered a question su2 matrix exponentiation Using sympy, it seems to work: sage: a,b,c,d = [a._sympy_() for a in G.list()] sage: from sympy import Matrix as SympyMatrix sage: G_sympy = SympyMatrix([[a,b], [c,d]]) sage: G_sympy_exp = G_sympy.exp() sage: G_sympy_exp.simplify() sage: G_sympy_exp Matrix([ [(-(cos(theta) - 1)*exp(2*I*t) + cos(theta) + 1)*exp(-I*t)/2, I*(I*sin(phi) - cos(phi))*sin(t)*sin(t heta)], [ (-exp(2*I*t) + 1)*exp(I*phi)*exp(-I*t)*sin(theta)/2, ((cos(theta) + 1)*exp(2*I*t) - cos(theta) + 1)*exp(-I *t)/2]])  Then using copy-paste, I am able to construct the matrix G_exp as a Sage object: sage: G_sympy_exp.tolist() [[(-(cos(theta) - 1)*exp(2*I*t) + cos(theta) + 1)*exp(-I*t)/2, I*(I*sin(phi) - cos(phi))*sin(t)*sin(theta)], [(-exp(2*I*t) + 1)*exp(I*phi)*exp(-I*t)*sin(theta)/2, ((cos(theta) + 1)*exp(2*I*t) - cos(theta) + 1)*exp(-I*t)/2]] sage: G_exp = matrix([[(-(cos(theta) - 1)*exp(2*I*t) + cos(theta) + 1)*exp(-I*t)/2, ....: I*(I*sin(phi) - cos(phi))*sin(t)*sin(theta)], ....: [(-exp(2*I*t) + 1)*exp(I*phi)*exp(-I*t)*sin(theta)/2, ....: ((cos(theta) + 1)*exp(2*I*t) - cos(theta) + 1)*exp(-I*t)/2]] ....: ) sage: G_exp [-1/2*((cos(theta) - 1)*e^(2*I*t) - cos(theta) - 1)*e^(-I*t) (-I*cos(phi) - sin(phi))*sin(t)*sin(theta)] [ -1/2*(e^(2*I*t) - 1)*e^(I*phi - I*t)*sin(theta) 1/2*((cos(theta) + 1)*e^(2*I*t) - cos(theta) + 1)*e^(-I*t)]  Note: I was expecting that G._sympy_() would return the equivalent matrix in Sympy but this method does not exist. It would be nice to add it. Also, there must be an easier way to convert the sympy G_sympy_exp back to a sage matrix instead of the copy-paste I am doing above. 2018-08-17 08:59:28 -0600 answered a question How can I compute the orbits of an automorphism group? Let's say that you are considering the automorphism group of a graph. Then, you do: sage: edges = [(0,1), (1,2), (2,3), (3,4), (4,5), (5,3)] sage: G = Graph(edges, format='list_of_edges') sage: group = G.automorphism_group() sage: group Permutation Group with generators [(4,5)] sage: group.orbits() [[0], [1], [2], [3], [4, 5]]  You may also get both the automorphism group and the orbits from the graph: sage: group, orbits = G.automorphism_group(orbits=True) sage: group Permutation Group with generators [(4,5)] sage: orbits [[0], [1], [2], [3], [4, 5]]  2018-08-07 02:13:42 -0600 answered a question No module named coin_backend You need to run make after the installation of cbc or at least rebuild sagelib. The documentation on MILP solvers says to install cbc like this: sage -i cbc sagelib  2018-08-05 17:43:26 -0600 received badge ● Nice Answer (source) 2018-08-04 08:30:18 -0600 answered a question Words avoiding patterns You may use RecursivelyEnumeratedSet in Sage to do these kind of thing: sage: def non_rep_words(alphabet): ....: def children(w): ....: return [w+(a,) for a in alphabet if not w or w[-1] != a] ....: seeds = [tuple()] ....: R = RecursivelyEnumeratedSet(seeds, children, structure='forest') ....: return R ....: sage: Rab = non_rep_words(['a','b']) sage: Rab An enumerated set with a forest structure sage: it = Rab.breadth_first_search_iterator() sage: [next(it) for _ in range(6)] [(), ('a',), ('b',), ('a', 'b'), ('b', 'a'), ('a', 'b', 'a')] sage: list(Rab.elements_of_depth_iterator(3)) [('a', 'b', 'a'), ('b', 'a', 'b')] sage: list(Rab.elements_of_depth_iterator(4)) [('a', 'b', 'a', 'b'), ('b', 'a', 'b', 'a')] sage: list(Rab.elements_of_depth_iterator(5)) [('a', 'b', 'a', 'b', 'a'), ('b', 'a', 'b', 'a', 'b')]  2018-07-22 06:47:36 -0600 commented answer Finding the frequency of each number in a string Instead of using defaultdict(int), one may use Counter also from collections: >>> from collections import Counter >>> c = Counter() >>> c['a'] += 1 >>> c[2] += 1 >>> c[2] += 1 >>> c Counter({2: 2, 'a': 1})  or even better: >>> Counter([2,2,'a']) Counter({2: 2, 'a': 1})  2018-07-19 15:43:25 -0600 received badge ● Critic (source) 2018-07-18 14:53:29 -0600 received badge ● Nice Answer (source) 2018-07-12 00:48:26 -0600 received badge ● Nice Answer (source) 2018-07-11 02:49:07 -0600 answered a question Why is the Subwords class separated from FiniteWord? The module subword.py was created in 2007 during the translation by Mike Hansen of 30k lines of code from Mupad-Combinat to sage. Around the same time, in 2008, the module sage/combinat/words was created and nothing has ever been done to merge the two. Notice that the code in subword.py is based on itertools.combinations and no wiser algorithm is coded to enumerate distinct subwords. sage: s = Subwords('aaaaa', 3) sage: s.__iter__?? ... iterator = itertools.combinations(self._w, self._k) ... sage: list(s) ['aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa']  If you know the existence of a better algorithm, you are welcome to add it to the finite_word.py file which contains already 3 methods related to subwords: sage: w = Word('abc') sage: w.*subword*? w.is_subword_of w.longest_common_subword w.nb_subword_occurrences_in  2018-07-09 16:45:27 -0600 commented question Using sagemath on windows 10 : impossible to attach file Did you try absolute paths and write \ instead of /? sage: attach('/home/Javier/C:\Users\Javier\Desktop\current\height1/height1.sage') sage: attach('/home/Javier/C:\Users\Javier\Desktop\current\height1\height1.sage')  2018-06-26 08:29:21 -0600 received badge ● Popular Question (source) 2018-06-25 15:00:09 -0600 received badge ● Nice Answer (source) 2018-06-12 14:19:56 -0600 received badge ● Good Answer (source) 2018-06-12 13:44:14 -0600 received badge ● Nice Answer (source) 2018-06-12 11:14:17 -0600 answered a question Running several commands from command line One way is to concatenate the commands with a ; in between: \$ sage -c "m=matrix(2,2,range(4));print(m^10)" [ 44726 79647] [159294 283667]  2018-06-07 13:57:53 -0600 commented question pdflatex not available from Jupyter in SageMath-8.1.app See also this question : https://ask.sagemath.org/question/104... 2018-06-06 21:05:09 -0600 received badge ● Nice Answer (source)