Ah, thanks! On Thursday, August 11, 2022 at 4:12:34 PM UTC-4 trevor...@gmail.com wrote:
> There is a description/proposed fix of the problem on this trac ticket: > https://trac.sagemath.org/ticket/34292 > > On Thursday, August 11, 2022 at 12:44:59 PM UTC-7 keirh...@gmail.com > wrote: > >> This code: >> >> >> >> >> *H = PermutationGroup([ [(1,2), (3,4)], [(5,6,7),(12,14,18)] ])kH = >> H.algebra(GF(2))[a, b] = H.gens()* >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> *# Produces no coercion errorprint((kH(a) + kH(b) + H.one())^2)# Produces >> a coercion error in all cases belowtry: print((kH(a) + kH(b) + >> kH(kH.one()))^2)except: print("Fail 1") passtry: print((kH(a) + >> kH(b) + kH.one())^2)except: print("Fail 2") passtry: print((kH(a) >> + kH(b) + kH.group().one())^2)except: print("Fail 3") passtry: >> print((kH(a) + kH(b) + kH(kH.group().one()))^2)except: print("Fail 4") >> pass* >> >> produces the output: >> >> *(5,7,6)(12,18,14)* >> *Fail 1* >> *Fail 2* >> *Fail 3* >> *Fail 4* >> >> The thing that's irritating is that using H.one() in the sum is fine; >> using kH.group().one() is not. But I fully admit that I may just not >> understand what the right behavior should be. >> On Saturday, August 6, 2022 at 11:40:03 PM UTC-4 trevor...@gmail.com >> wrote: >> >>> Is the x you give in these examples the same x as above? I’m worried >>> (maybe needlessly) about if the x you give includes a summand of kH.one(). >>> If the x you give does not include a summand of one, then the behavior you >>> described is consistent with what I think the problem is. If the x in the >>> new example doesn’t have a summand of kH.one() then I’m misunderstanding >>> something. >>> >>> On Sat, Aug 6, 2022 at 6:00 PM keirh...@gmail.com <keirh...@gmail.com> >>> wrote: >>> >>>> Thanks for this workaround. I was passing the group algebra to a >>>> function and then accessing the base group like so: >>>> >>>> kH.group() >>>> >>>> Both of the following cause the coercion error: >>>> >>>> kH.one() * x >>>> kH.group().one() * x >>>> >>>> But this works fine: >>>> >>>> H.one()*x >>>> >>>> I will just have to pass the original group along as well. >>>> >>>> --Keir >>>> >>>> On Saturday, August 6, 2022 at 2:06:51 PM UTC-4 trevor...@gmail.com >>>> wrote: >>>> >>>>> I can reproduce this on 9.7.beta7. >>>>> >>>>> The problem is that the parent is not understood to be the same (even >>>>> though it clearly is). A workaround is: >>>>> >>>>> sage: x = kH(a) + kH(b) + kH(H.one()); x >>>>> >>>>> () + (5,6,7)(12,14,18) + (1,2)(3,4) >>>>> >>>>> sage: x*x >>>>> >>>>> (5,7,6)(12,18,14) >>>>> >>>>> >>>>> Here H.one() puts the one in the right parent for the coercion >>>>> framework, but this definitely looks like a bug to me, because >>>>> >>>>> sage: kH(a).parent() >>>>> >>>>> Algebra of Permutation Group with generators [(5,6,7)(12,14,18), >>>>> (1,2)(3,4)] over Finite Field of size 2 >>>>> >>>>> sage: kH.one().parent() >>>>> >>>>> Algebra of Permutation Group with generators [(5,6,7)(12,14,18), >>>>> (1,2)(3,4)] over Finite Field of size 2 >>>>> >>>>> sage: kH(a).parent() is kH.one().parent() >>>>> >>>>> True >>>>> >>>>> >>>>> Reproducing the bug with messages on 9.7.beta7: >>>>> >>>>> sage: H = PermutationGroup([[(*1*,*2*), (*3*,*4*)], [(*5*,*6*,*7*),( >>>>> *12*,*14*,*18*)]]) >>>>> >>>>> sage: kH = H.algebra(GF(*2*)) >>>>> >>>>> sage: H.gens() >>>>> >>>>> ((5,6,7)(12,14,18), (1,2)(3,4)) >>>>> >>>>> sage: a, b = H.gens() >>>>> >>>>> sage: x = kH(a) + kH(b) + kH.one(); x >>>>> >>>>> (5,6,7)(12,14,18) + (1,2)(3,4) + () >>>>> >>>>> sage: x*x >>>>> >>>>> >>>>> --------------------------------------------------------------------------- >>>>> >>>>> RuntimeError Traceback (most recent call >>>>> last) >>>>> >>>>> Input In [7], in <cell line: 1>() >>>>> >>>>> ----> 1 x*x >>>>> >>>>> >>>>> File ~/Applications/sage/src/sage/structure/element.pyx:1514, in >>>>> sage.structure.element.Element.__mul__() >>>>> >>>>> * 1512* cdef int cl = classify_elements(left, right) >>>>> >>>>> * 1513* if HAVE_SAME_PARENT(cl): >>>>> >>>>> -> 1514 return (<Element>left)._mul_(right) >>>>> >>>>> * 1515* if BOTH_ARE_ELEMENT(cl): >>>>> >>>>> * 1516* return coercion_model.bin_op(left, right, mul) >>>>> >>>>> >>>>> File ~/Applications/sage/src/sage/structure/element.pyx:1560, in >>>>> sage.structure.element.Element._mul_() >>>>> >>>>> * 1558* raise bin_op_exception('*', self, other) >>>>> >>>>> * 1559* else: >>>>> >>>>> -> 1560 return python_op(other) >>>>> >>>>> * 1561* >>>>> >>>>> * 1562* cdef _mul_long(self, long n): >>>>> >>>>> >>>>> File ~/Applications/sage/src/sage/categories/coercion_methods.pyx:53, >>>>> in sage.categories.coercion_methods._mul_parent() >>>>> >>>>> * 51* True >>>>> >>>>> * 52* """ >>>>> >>>>> ---> 53 return (<Element>self)._parent.product(self, other) >>>>> >>>>> >>>>> File ~/Applications/sage/src/sage/categories/magmatic_algebras.py:215, >>>>> in >>>>> MagmaticAlgebras.WithBasis.ParentMethods._product_from_product_on_basis_multiply(self, >>>>> >>>>> left, right) >>>>> >>>>> * 201* *def* _product_from_product_on_basis_multiply( self, left, >>>>> right ): >>>>> >>>>> * 202* r*"""* >>>>> >>>>> * 203* * Compute the product of two elements by extending* >>>>> >>>>> * 204* * bilinearly the method :meth:`product_on_basis`.* >>>>> >>>>> (...) >>>>> >>>>> * 213* >>>>> >>>>> * 214* * """* >>>>> >>>>> --> 215 *return* >>>>> self.linear_combination((self.product_on_basis(mon_left, mon_right), >>>>> coeff_left * coeff_right ) >>>>> >>>>> * 216* *for* (mon_left, >>>>> coeff_left) *in* left.monomial_coefficients().items() >>>>> >>>>> * 217* *for* (mon_right, >>>>> coeff_right) *in* right.monomial_coefficients().items() ) >>>>> >>>>> >>>>> File ~/Applications/sage/src/sage/combinat/free_module.py:969, in >>>>> CombinatorialFreeModule.linear_combination(self, iter_of_elements_coeff, >>>>> factor_on_left) >>>>> >>>>> * 945* *def* linear_combination(self, iter_of_elements_coeff, >>>>> factor_on_left=*True*): >>>>> >>>>> * 946* r*"""* >>>>> >>>>> * 947* * Return the linear combination `\lambda_1 v_1 + \cdots >>>>> +* >>>>> >>>>> * 948* * \lambda_k v_k` (resp. the linear combination `v_1 >>>>> \lambda_1 +* >>>>> >>>>> (...) >>>>> >>>>> * 967* * 20*B[1] + 20*B[2]* >>>>> >>>>> * 968* * """* >>>>> >>>>> --> 969 *return* >>>>> self._from_dict(blas.linear_combination(((element._monomial_coefficients, >>>>> coeff) >>>>> >>>>> * 970* *for* >>>>> element, coeff *in* iter_of_elements_coeff), >>>>> >>>>> * 971* >>>>> factor_on_left=factor_on_left), >>>>> >>>>> * 972* remove_zeros=*False*) >>>>> >>>>> >>>>> File ~/Applications/sage/src/sage/data_structures/blas_dict.pyx:313, >>>>> in sage.data_structures.blas_dict.linear_combination() >>>>> >>>>> * 311* return remove_zeros(result) >>>>> >>>>> * 312* >>>>> >>>>> --> 313 cpdef dict linear_combination(dict_factor_iter, bint >>>>> factor_on_left=True): >>>>> >>>>> * 314* r""" >>>>> >>>>> * 315* Return the pointwise addition of dictionaries with >>>>> coefficients. >>>>> >>>>> >>>>> File ~/Applications/sage/src/sage/data_structures/blas_dict.pyx:348, >>>>> in sage.data_structures.blas_dict.linear_combination() >>>>> >>>>> * 346* cdef dict D >>>>> >>>>> * 347* >>>>> >>>>> --> 348 for D, a in dict_factor_iter: >>>>> >>>>> * 349* if not a: # We multiply by 0, so nothing to do >>>>> >>>>> * 350* continue >>>>> >>>>> >>>>> File ~/Applications/sage/src/sage/combinat/free_module.py:969, in >>>>> <genexpr>(.0) >>>>> >>>>> * 945* *def* linear_combination(self, iter_of_elements_coeff, >>>>> factor_on_left=*True*): >>>>> >>>>> * 946* r*"""* >>>>> >>>>> * 947* * Return the linear combination `\lambda_1 v_1 + \cdots >>>>> +* >>>>> >>>>> * 948* * \lambda_k v_k` (resp. the linear combination `v_1 >>>>> \lambda_1 +* >>>>> >>>>> (...) >>>>> >>>>> * 967* * 20*B[1] + 20*B[2]* >>>>> >>>>> * 968* * """* >>>>> >>>>> --> 969 *return* >>>>> self._from_dict(blas.linear_combination(((element._monomial_coefficients, >>>>> coeff) >>>>> >>>>> * 970* *for* >>>>> element, coeff *in* iter_of_elements_coeff), >>>>> >>>>> * 971* >>>>> factor_on_left=factor_on_left), >>>>> >>>>> * 972* remove_zeros=*False*) >>>>> >>>>> >>>>> File ~/Applications/sage/src/sage/categories/magmatic_algebras.py:215, >>>>> in <genexpr>(.0) >>>>> >>>>> * 201* *def* _product_from_product_on_basis_multiply( self, left, >>>>> right ): >>>>> >>>>> * 202* r*"""* >>>>> >>>>> * 203* * Compute the product of two elements by extending* >>>>> >>>>> * 204* * bilinearly the method :meth:`product_on_basis`.* >>>>> >>>>> (...) >>>>> >>>>> * 213* >>>>> >>>>> * 214* * """* >>>>> >>>>> --> 215 *return* >>>>> self.linear_combination((self.product_on_basis(mon_left, mon_right), >>>>> coeff_left * coeff_right ) >>>>> >>>>> * 216* *for* (mon_left, >>>>> coeff_left) *in* left.monomial_coefficients().items() >>>>> >>>>> * 217* *for* (mon_right, >>>>> coeff_right) *in* right.monomial_coefficients().items() ) >>>>> >>>>> >>>>> File ~/Applications/sage/src/sage/categories/semigroups.py:957, in >>>>> Semigroups.Algebras.ParentMethods.product_on_basis(self, g1, g2) >>>>> >>>>> * 939* *def* product_on_basis(self, g1, g2): >>>>> >>>>> * 940* r*"""* >>>>> >>>>> * 941* * Product, on basis elements, as per* >>>>> >>>>> * 942* * >>>>> :meth:`MagmaticAlgebras.WithBasis.ParentMethods.product_on_basis()* >>>>> >>>>> (...) >>>>> >>>>> * 955* * B['ab'] + B['bdc']* >>>>> >>>>> * 956* * """* >>>>> >>>>> --> 957 *return* self.monomial(g1 * g2) >>>>> >>>>> >>>>> File >>>>> ~/Applications/sage/src/sage/groups/perm_gps/permgroup_element.pyx:1295, >>>>> in >>>>> sage.groups.perm_gps.permgroup_element.PermutationGroupElement.__mul__() >>>>> >>>>> * 1293* return prod >>>>> >>>>> * 1294* >>>>> >>>>> -> 1295 return coercion_model.bin_op(left, right, operator.mul) >>>>> >>>>> * 1296* >>>>> >>>>> * 1297* cpdef _mul_(left, _right): >>>>> >>>>> >>>>> File ~/Applications/sage/src/sage/structure/coerce.pyx:1200, in >>>>> sage.structure.coerce.CoercionModel.bin_op() >>>>> >>>>> * 1198* # Now coerce to a common parent and do the operation there >>>>> >>>>> * 1199* try: >>>>> >>>>> -> 1200 xy = self.canonical_coercion(x, y) >>>>> >>>>> * 1201* except TypeError: >>>>> >>>>> * 1202* self._record_exception() >>>>> >>>>> >>>>> File ~/Applications/sage/src/sage/structure/coerce.pyx:1332, in >>>>> sage.structure.coerce.CoercionModel.canonical_coercion() >>>>> >>>>> * 1330* if x_elt._parent is y_elt._parent: >>>>> >>>>> * 1331* return x_elt,y_elt >>>>> >>>>> -> 1332 self._coercion_error(x, x_map, x_elt, y, y_map, y_elt) >>>>> >>>>> * 1333* >>>>> >>>>> * 1334* cdef bint x_numeric = isinstance(x, (int, long, float, >>>>> complex)) >>>>> >>>>> >>>>> File ~/Applications/sage/src/sage/structure/coerce.pyx:2031, in >>>>> sage.structure.coerce.CoercionModel._coercion_error() >>>>> >>>>> * 2029* <class 'str'> 'g' >>>>> >>>>> * 2030* """ >>>>> >>>>> -> 2031 raise RuntimeError("""There is a bug in the coercion >>>>> code in Sage. >>>>> >>>>> * 2032* Both x (=%r) and y (=%r) are supposed to have identical >>>>> parents but they don't. >>>>> >>>>> * 2033* In fact, x has parent '%s' >>>>> >>>>> >>>>> RuntimeError: There is a bug in the coercion code in Sage. >>>>> >>>>> Both x (=()) and y (=(5,6,7)(12,14,18)) are supposed to have identical >>>>> parents but they don't. >>>>> >>>>> In fact, x has parent 'Permutation Group with generators >>>>> [(5,6,7)(12,14,18), (1,2)(3,4)]' >>>>> >>>>> whereas y has parent 'Permutation Group with generators >>>>> [(5,6,7)(12,14,18), (1,2)(3,4)]' >>>>> >>>>> Original elements () (parent Permutation Group with generators >>>>> [(5,6,7)(12,14,18), (1,2)(3,4)]) and (5,6,7)(12,14,18) (parent >>>>> Permutation >>>>> Group with generators [(5,6,7)(12,14,18), (1,2)(3,4)]) and maps >>>>> >>>>> <class 'NoneType'> None >>>>> >>>>> <class 'sage.structure.coerce_maps.DefaultConvertMap_unique'> (map >>>>> internal to coercion system -- copy before use) >>>>> >>>>> Coercion map: >>>>> >>>>> From: Permutation Group with generators [(5,6,7)(12,14,18), >>>>> (1,2)(3,4)] >>>>> >>>>> To: Permutation Group with generators [(5,6,7)(12,14,18), >>>>> (1,2)(3,4)] >>>>> On Friday, August 5, 2022 at 4:21:09 PM UTC-7 keirh...@gmail.com >>>>> wrote: >>>>> >>>>>> The Sage version I was using is 9.6. >>>>>> >>>>>> On Friday, August 5, 2022 at 7:19:48 PM UTC-4 keirh...@gmail.com >>>>>> wrote: >>>>>> >>>>>>> When I do this: >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> *H = PermutationGroup([ [(1,2), (3,4)], [(5,6,7),(12,14,18)] ])kH = >>>>>>> H.algebra(GF(2))[a, b] = H.gens()x = kH(a) + kH(b) + kH.one(); >>>>>>> print(x)x*x* >>>>>>> >>>>>>> I get an error caused by the last computation: "RuntimeError: There >>>>>>> is a bug in the coercion code in Sage." (I was working in Cocalc, but >>>>>>> you >>>>>>> can cut and paste the code above into a SageMathCell and reproduce the >>>>>>> error.) >>>>>>> >>>>>>> Is this really a bug, or should I be doing this differently? (I >>>>>>> found the problem working with a larger group, but this simpler example >>>>>>> above has the same issue.) >>>>>>> >>>>>>> Thanks -- >>>>>>> >>>>>>> Keir >>>>>>> >>>>>> -- >>>> You received this message because you are subscribed to a topic in the >>>> Google Groups "sage-support" group. >>>> To unsubscribe from this topic, visit >>>> https://groups.google.com/d/topic/sage-support/WVMuik1TICg/unsubscribe. >>>> To unsubscribe from this group and all its topics, send an email to >>>> sage-support...@googlegroups.com. >>>> To view this discussion on the web visit >>>> https://groups.google.com/d/msgid/sage-support/d7fbbb32-5ea3-45d8-8ca6-6c5da0088bban%40googlegroups.com >>>> >>>> <https://groups.google.com/d/msgid/sage-support/d7fbbb32-5ea3-45d8-8ca6-6c5da0088bban%40googlegroups.com?utm_medium=email&utm_source=footer> >>>> . >>>> >>> -- >>> Best, >>> >>> Trevor >>> >> -- You received this message because you are subscribed to the Google Groups "sage-support" group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-support+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/sage-support/e9a5e3c5-3f3e-4d53-a8d0-4b63ebf55f09n%40googlegroups.com.