TESTS:
sage: S = species.SetSpecies()
sage: F = S * S
sage: a = F.structures(['a','b','c']).random_element()
sage: a == loads(dumps(a))
True
Returns the string representation of this object.
EXAMPLES:
sage: S = species.SetSpecies()
sage: (S*S).structures(['a','b','c']).random_element()
{}*{'a', 'b', 'c'}
sage: (S*S*S).structures(['a','b','c']).random_element()
({'c'}*{'a'})*{'b'}
EXAMPLES:
sage: p = PermutationGroupElement((2,3))
sage: S = species.SetSpecies()
sage: F = S * S
sage: a = F.structures([1,2,3,4]).random_element(); a
{1}*{2, 3, 4}
sage: a.automorphism_group()
Permutation Group with generators [(2,3), (2,3,4)]
sage: [a.transport(g) for g in a.automorphism_group()]
[{1}*{2, 3, 4},
{1}*{2, 3, 4},
{1}*{2, 3, 4},
{1}*{2, 3, 4},
{1}*{2, 3, 4},
{1}*{2, 3, 4}]
sage: a = F.structures([1,2,3,4]).random_element(); a
{2, 3}*{1, 4}
sage: [a.transport(g) for g in a.automorphism_group()]
[{2, 3}*{1, 4}, {2, 3}*{1, 4}, {2, 3}*{1, 4}, {2, 3}*{1, 4}]
EXAMPLES:
sage: S = species.SetSpecies()
sage: F = S * S
sage: S = F.structures(['a','b','c']).list(); S
[{}*{'a', 'b', 'c'},
{'a'}*{'b', 'c'},
{'b'}*{'a', 'c'},
{'c'}*{'a', 'b'},
{'a', 'b'}*{'c'},
{'a', 'c'}*{'b'},
{'b', 'c'}*{'a'},
{'a', 'b', 'c'}*{}]
sage: F.isotypes(['a','b','c']).cardinality()
4
sage: [s.canonical_label() for s in S]
[{}*{'a', 'b', 'c'},
{'a'}*{'b', 'c'},
{'a'}*{'b', 'c'},
{'a'}*{'b', 'c'},
{'a', 'b'}*{'c'},
{'a', 'b'}*{'c'},
{'a', 'b'}*{'c'},
{'a', 'b', 'c'}*{}]
EXAMPLES:
sage: S = species.SetSpecies()
sage: F = S * S
sage: a = F.structures(['a','b','c']).random_element(); a
{}*{'a', 'b', 'c'}
sage: a.change_labels([1,2,3])
{}*{1, 2, 3}
EXAMPLES:
sage: p = PermutationGroupElement((2,3))
sage: S = species.SetSpecies()
sage: F = S * S
sage: a = F.structures(['a','b','c'])[4]; a
{'a', 'b'}*{'c'}
sage: a.transport(p)
{'a', 'c'}*{'b'}
EXAMPLES:
sage: P = species.PermutationSpecies()
sage: F = P * P; F
Product of (Permutation species) and (Permutation species)
sage: F == loads(dumps(F))
True
sage: F._check()
True
EXAMPLES:
sage: P = species.PermutationSpecies()
sage: F = P * P
sage: F.cycle_index_series().coefficients(5)
[p[],
2*p[1],
3*p[1, 1] + 2*p[2],
4*p[1, 1, 1] + 4*p[2, 1] + 2*p[3],
5*p[1, 1, 1, 1] + 6*p[2, 1, 1] + 3*p[2, 2] + 4*p[3, 1] + 2*p[4]]
Returns the right hand side of an algebraic equation satisfied by this species. This is a utility function called by the algebraic_equation_system method.
EXAMPLES:
sage: X = species.SingletonSpecies()
sage: S = X * X
sage: S.algebraic_equation_system()
[node0 - z^2]
EXAMPLES:
sage: P = species.PermutationSpecies()
sage: F = P * P
sage: F.generating_series().coefficients(5)
[1, 2, 3, 4, 5]
EXAMPLES:
sage: S = species.SetSpecies()
sage: F = S * S
sage: F.isotypes([1,2,3]).list()
[{}*{1, 2, 3}, {1}*{2, 3}, {1, 2}*{3}, {1, 2, 3}*{}]
EXAMPLES:
sage: P = species.PermutationSpecies()
sage: F = P * P
sage: F.isotype_generating_series().coefficients(5)
[1, 2, 5, 10, 20]
Note that we use a function to return the name of this species because we can’t do it in the __init__ method due to it requiring that self._F and self._G already be unpickled.
EXAMPLES:
sage: P = species.PermutationSpecies()
sage: F = P * P
sage: F._name()
'Product of (Permutation species) and (Permutation species)'
EXAMPLES:
sage: S = species.SetSpecies()
sage: F = S * S
sage: F.structures([1,2]).list()
[{}*{1, 2}, {1}*{2}, {2}*{1}, {1, 2}*{}]
EXAMPLES:
sage: S = species.SetSpecies()
sage: F = S * S
sage: list(F._times_gen(F._default_structure_class, 'structures',[1,2]))
[{}*{1, 2}, {1}*{2}, {2}*{1}, {1, 2}*{}]
Returns the weight ring for this species. This is determined by asking Sage’s coercion model what the result is when you multiply (and add) elements of the weight rings for each of the operands.
EXAMPLES:
sage: S = species.SetSpecies()
sage: C = S*S
sage: C.weight_ring()
Rational Field
sage: S = species.SetSpecies(weight=QQ['t'].gen())
sage: C = S*S
sage: C.weight_ring()
Univariate Polynomial Ring in t over Rational Field
sage: S = species.SetSpecies()
sage: C = (S*S).weighted(QQ['t'].gen())
sage: C.weight_ring()
Univariate Polynomial Ring in t over Rational Field