def group_law(G): r""" Return a triple ``(identity, operation, inverse)`` that define the operations on the group ``G``. EXAMPLES:: sage: from sage.combinat.designs.difference_family import group_law sage: group_law(Zmod(3)) (0, <built-in function add>, <built-in function neg>) sage: group_law(SymmetricGroup(5)) ((), <built-in function mul>, <built-in function inv>) sage: group_law(VectorSpace(QQ,3)) ((0, 0, 0), <built-in function add>, <built-in function neg>) """ import operator from sage.categories.groups import Groups from sage.categories.additive_groups import AdditiveGroups if G in Groups(): # multiplicative groups return (G.one(), operator.mul, operator.inv) elif G in AdditiveGroups(): # additive groups return (G.zero(), operator.add, operator.neg) else: raise ValueError("%s does not seem to be a group" % G)
def _determine_category_(category): r""" Return the category of this imaginary group. INPUT: - ``category`` -- a category or ``None`` (in which case the output equals ``category``) OUTPUT: A category. EXAMPLES:: sage: from sage.groups.misc_gps.imaginary_groups import ImaginaryGroup sage: from sage.categories.additive_groups import AdditiveGroups sage: ImaginaryGroup._determine_category_(None) Category of commutative additive groups sage: ImaginaryGroup._determine_category_(AdditiveGroups()) Category of additive groups """ if category is None: from sage.categories.additive_groups import AdditiveGroups category = AdditiveGroups().AdditiveCommutative() return category