def SimpleGraphSpecies(): """ Returns the species of simple graphs. EXAMPLES:: sage: S = species.SimpleGraphSpecies() sage: S.generating_series().counts(10) [1, 1, 2, 8, 64, 1024, 32768, 2097152, 268435456, 68719476736] sage: S.cycle_index_series().coefficients(5) [p[], p[1], p[1, 1] + p[2], 4/3*p[1, 1, 1] + 2*p[2, 1] + 2/3*p[3], 8/3*p[1, 1, 1, 1] + 4*p[2, 1, 1] + 2*p[2, 2] + 4/3*p[3, 1] + p[4]] sage: S.isotype_generating_series().coefficients(6) [1, 1, 2, 4, 11, 34] TESTS:: sage: seq = S.isotype_generating_series().counts(6)[1:] sage: oeis(seq)[0] # optional -- internet A000088: Number of graphs on n unlabeled nodes. :: sage: seq = S.generating_series().counts(10)[1:] sage: oeis(seq)[0] # optional -- internet A006125: a(n) = 2^(n(n-1)/2). """ E = SetSpecies() E2 = SetSpecies(size=2) WP = SubsetSpecies() P2 = E2*E return WP.functorial_composition(P2)
def SimpleGraphSpecies(): """ Returns the species of simple graphs. EXAMPLES:: sage: S = species.SimpleGraphSpecies() sage: S.generating_series().counts(10) [1, 1, 2, 8, 64, 1024, 32768, 2097152, 268435456, 68719476736] sage: S.cycle_index_series().coefficients(5) [p[], p[1], p[1, 1] + p[2], 4/3*p[1, 1, 1] + 2*p[2, 1] + 2/3*p[3], 8/3*p[1, 1, 1, 1] + 4*p[2, 1, 1] + 2*p[2, 2] + 4/3*p[3, 1] + p[4]] sage: S.isotype_generating_series().coefficients(6) [1, 1, 2, 4, 11, 34] TESTS:: sage: seq = S.isotype_generating_series().counts(6)[1:] sage: oeis(seq)[0] # optional -- internet A000088: Number of graphs on n unlabeled nodes. :: sage: seq = S.generating_series().counts(10)[1:] sage: oeis(seq)[0] # optional -- internet A006125: a(n) = 2^(n(n-1)/2). """ E = SetSpecies() E2 = SetSpecies(size=2) WP = SubsetSpecies() P2 = E2 * E return WP.functorial_composition(P2)
def _times_gen(self, structure_class, attr, labels): """ 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}*{}] """ c = lambda F, n: F.generating_series().coefficient(n) S = SubsetSpecies() for u in getattr(S, attr)(labels): vl = u.complement().labels() ul = u.labels() if c(self._F, len(ul)) == 0 or c(self._G, len(vl)) == 0: continue for x in getattr(self._F, attr)(ul): for y in getattr(self._G, attr)(vl): yield structure_class(self, labels, u, x, y)