Returns the product of two species.
EXAMPLES:
sage: X = species.SingletonSpecies()
sage: A = X*X
sage: A.generating_series().coefficients(4)
[0, 0, 1, 0]
TESTS:
sage: X = species.SingletonSpecies()
sage: X*X is X*X
True
Bases: sage.combinat.species.structure.GenericSpeciesStructure
TESTS:
sage: S = species.SetSpecies()
sage: F = S * S
sage: a = F.structures(['a','b','c']).random_element()
sage: a == loads(dumps(a))
True
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'}
Bases: sage.combinat.species.species.GenericCombinatorialSpecies
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
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