On Sat, Jun 28, 2008 at 11:47 AM, David Joyner <[EMAIL PROTECTED]> wrote:
>
> If you attach a file containing
>
> ##################################################################
>
> def PermutationGroupRing(R,G):
>    return PermutationGroupRing_generic(R,G)
>
> class PermutationGroupRing_generic(CombinatorialAlgebra):
>    def __init__(self, R, G):
>        self.group = G
>        self._combinatorial_class = G
>        self._one = G.identity()
>        self._name = 'Group ring of %s'%str(G)
>        self._prefix = ''
>        CombinatorialAlgebra.__init__(self, R)
>    def _multiply_basis(self, a, b):
>        c = a*b
>        return c
>    def group(self):
>        return self.group
>
>
> ##################################################################
>
> then you get the following error:
>
> sage: F = GF(11)
> sage: G = PermutationGroup([(1,2,3),(3,4,5)])
> sage: attach "/home/wdj/sagefiles/codes/group_rings.sage"
> sage: R = PermutationGroupRing(F,G)
> sage: R.basis()
> ---------------------------------------------------------------------------
> TypeError                                 Traceback (most recent call last)
>
> /home/wdj/sagefiles/sage-3.0.3.rc0/<ipython console> in <module>()
>
> /home/wdj/sagefiles/sage-3.0.3.rc0/local/lib/python2.5/site-packages/sage/combinat/combinatorial_algebra.py
> in basis(self)
>    701
>    702         """
> --> 703         return [self(x) for x in self._combinatorial_class]
>    704
>    705     def __call__(self, x):
>
> /home/wdj/sagefiles/sage-3.0.3.rc0/local/lib/python2.5/site-packages/sage/combinat/combinatorial_algebra.py
> in __call__(self, x)
>    738                 return eclass(self, dict([ (e1,R(e2)) for
> e1,e2 in x._monomial_coefficients.items()]))
>    739         #x is an element of the basis combinatorial class
> --> 740         elif isinstance(x, self._combinatorial_class.object_class):
>    741             return eclass(self, {x:R(1)})
>    742         elif x in self._combinatorial_class:
>
> TypeError: isinstance() arg 2 must be a class, type, or tuple of
> classes and types
> sage:
>
> I added the method
>
>    def object_class(self):
>        return PermutationGroup_generic
>
> to PermutationGroup_generic so now,
>
> sage: R._combinatorial_class.object_class
> <bound method PermutationGroup_generic.object_class of Permutation
> Group with generators [(1,2,3), (3,4,5)]>
> sage: R._combinatorial_class.object_class()
> <class 'sage.groups.perm_gps.permgroup.PermutationGroup_generic'>
> sage: isinstance(G,R._combinatorial_class.object_class())
> True
>
> It seems to me the traceback error indicates I've defined object_class
> incorrectly.
> Does anyone have a hint as to the right way to go here?

Maybe you should change

elif isinstance(x, self._combinatorial_class.object_class):

to

elif isinstance(x, self._combinatorial_class.object_class()):

William

>
>
>
> On Sat, Jun 28, 2008 at 12:59 PM, David Joyner <[EMAIL PROTECTED]> wrote:
>> On Sat, Jun 28, 2008 at 12:48 PM, Robert Bradshaw
>> <[EMAIL PROTECTED]> wrote:
>>>
>>> On Jun 28, 2008, at 9:33 AM, David Joyner wrote:
>>>
>>>> On Sat, Jun 28, 2008 at 11:00 AM, John Cremona
>>>> <[EMAIL PROTECTED]> wrote:
>>>>>
>>>>> It seems that what Dan Bump's instructions did not specify is what
>>>>> properties the class assigned to ._combinatorial_class must have.
>>>>> And it needs something which PermutationGroupElement does not have.
>>>>>
>>>>> Does that help?
>>>>
>>>> Okay. Maybe the best thing is to write a wrapper to GAP's GroupRing
>>>> function.
>>>
>>> I disagree, using CombinatorialAlgebra will be a much better option.
>>>
>>>>>> Can anyone explain "AttributeError: type object
>>>>>> 'sage.groups.perm_gps.permgroup_element.Permutation' has no
>>>>>> attribute
>>>>>> 'count'"
>>>>>> (in words of two syllables or less, if possible:-)?
>>>
>>> Sure. It means that it's trying to use a method called "count" but
>>> the class "Permutation" found in sage/groups/perm_gps/
>>> permgroup_element doesn't define one. What you need to do is make a
>>> method called count.
>>>
>>> Actually, looking at the code (and someone more familiar with sage-
>>> combinat should correct me) it looks like _combinatorial_class should
>>> be the Parent (i.e. the group) rather than the element. It would
>>> probably make sense to do something like
>>>
>>>> class PermutationGroupRing(CombinatorialAlgebra):
>>>>    def __init__(self, R, G):
>>>>        self.group = G
>>>>        self._combinatorial_class = G # NOTE the change
>>>>        self._one = G.identity()
>>>>        self._name = 'Group ring of %s'%str(G)
>>>>        self._prefix = ''
>>>>        CombinatorialAlgebra.__init__(self, R)
>>>>    def _multiply_basis(self, a, b):
>>>>        c = a*b
>>>>        return c
>>>
>>> and add a count method to the group class.
>>
>> That worked! Thank you!
>>
>>>
>>> - Robert
>>>
>>>
>>> >>
>>>
>>
>
> >
>



-- 
William Stein
Associate Professor of Mathematics
University of Washington
http://wstein.org

--~--~---------~--~----~------------~-------~--~----~
To post to this group, send email to sage-support@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sage-support
URLs: http://www.sagemath.org
-~----------~----~----~----~------~----~------~--~---

Reply via email to