An example of set factory¶
The goal of this module is to exemplify the use of set factories. Note that the code is intentionally kept minimal; many things and in particular several iterators could be written in a more efficient way.
See also
set_factories for an introduction to set
factories, their specifications, and examples of their use and
implementation based on this module.
We describe here a factory used to construct the set \(S\) of couples \((x,y)\) with \(x\) and \(y\) in \(I:=\{0,1,2,3,4\}\), together with the following subsets, where \((a, b)\in S\)
- class sage.structure.set_factories_example.AllPairs(policy)[source]¶
- Bases: - ParentWithSetFactory,- DisjointUnionEnumeratedSets- This parent shows how one can use set factories together with - DisjointUnionEnumeratedSets.- It is constructed as the disjoint union ( - DisjointUnionEnumeratedSets) of- Pairs_Yparents:\[S := \bigcup_{i = 0,1,..., 4} S^y\]- Warning - When writing a parent - Pas a disjoint union of a family of parents- P_i, the parents- P_imust be constructed as facade parents for- P. As a consequence, it should be passed- P.facade_policy()as policy argument. See the source code of- pairs_y()for an example.
- class sage.structure.set_factories_example.PairsX_(x, policy)[source]¶
- Bases: - ParentWithSetFactory,- UniqueRepresentation- The set of pairs \((x, 0), (x, 1), ..., (x, 4)\). 
- class sage.structure.set_factories_example.Pairs_Y(y, policy)[source]¶
- Bases: - ParentWithSetFactory,- DisjointUnionEnumeratedSets- The set of pairs \((0, y), (1, y), ..., (4, y)\). - It is constructed as the disjoint union ( - DisjointUnionEnumeratedSets) of- SingletonPairparents:\[S^y := \bigcup_{i = 0,1,..., 4} S_i^y\]- See also - AllPairsfor how to properly construct- DisjointUnionEnumeratedSetsusing- ParentWithSetFactory.- single_pair(letter)[source]¶
- Construct the singleton pair parent. - Construct a singleton pair for - (self.y, letter)as a facade parent for- self.- See also - AllPairsfor how to properly construct- DisjointUnionEnumeratedSetsusing- ParentWithSetFactory.
 
- class sage.structure.set_factories_example.XYPair(parent, value, check=True)[source]¶
- Bases: - ElementWrapper- A class for Elements \((x,y)\) with \(x\) and \(y\) in \(\{0,1,2,3,4\}\). - EXAMPLES: - sage: from sage.structure.set_factories_example import XYPair sage: p = XYPair(Parent(), (0,1)); p (0, 1) sage: p = XYPair(Parent(), (0,8)) Traceback (most recent call last): ... ValueError: numbers must be in range(5) - >>> from sage.all import * >>> from sage.structure.set_factories_example import XYPair >>> p = XYPair(Parent(), (Integer(0),Integer(1))); p (0, 1) >>> p = XYPair(Parent(), (Integer(0),Integer(8))) Traceback (most recent call last): ... ValueError: numbers must be in range(5) 
- sage.structure.set_factories_example.XYPairs(x=None, y=None, policy=None)[source]¶
- Construct the subset from constraints. - Consider the set \(S\) of couples \((x,y)\) with \(x\) and \(y\) in \(I:=\{0,1,2,3,4\}\). Returns the subsets of element of \(S\) satisfying some constraints. - INPUT: - x=a– where- ais an integer (default:- None)
- y=b– where- bis an integer (default:- None)
- policy– the policy passed to the created set
 - See also - EXAMPLES: - Let us first create the set factory: - sage: from sage.structure.set_factories_example import XYPairsFactory sage: XYPairs = XYPairsFactory() - >>> from sage.all import * >>> from sage.structure.set_factories_example import XYPairsFactory >>> XYPairs = XYPairsFactory() - One can then use the set factory to construct a set: - sage: P = XYPairs(); P.list() [(0, 0), (1, 0), (2, 0), (3, 0), (4, 0), (0, 1), (1, 1), (2, 1), (3, 1), (4, 1), (0, 2), (1, 2), (2, 2), (3, 2), (4, 2), (0, 3), (1, 3), (2, 3), (3, 3), (4, 3), (0, 4), (1, 4), (2, 4), (3, 4), (4, 4)] - >>> from sage.all import * >>> P = XYPairs(); P.list() [(0, 0), (1, 0), (2, 0), (3, 0), (4, 0), (0, 1), (1, 1), (2, 1), (3, 1), (4, 1), (0, 2), (1, 2), (2, 2), (3, 2), (4, 2), (0, 3), (1, 3), (2, 3), (3, 3), (4, 3), (0, 4), (1, 4), (2, 4), (3, 4), (4, 4)] - Note - This function is actually the - __call__method of- XYPairsFactory.
- class sage.structure.set_factories_example.XYPairsFactory[source]¶
- Bases: - SetFactory- An example of set factory, for sets of pairs of integers. - See also - set_factoriesfor an introduction to set factories.- add_constraints(cons, args_opts)[source]¶
- Add constraints to the set - consas per- SetFactory.add_constraints.- This is a crude implementation for the sake of the demonstration which should not be taken as an example. - EXAMPLES: - sage: from sage.structure.set_factories_example import XYPairs sage: XYPairs.add_constraints((3,None), ((2,), {})) Traceback (most recent call last): ... ValueError: Duplicate value for constraints 'x': was 3 now 2 sage: XYPairs.add_constraints((), ((2,), {})) (2, None) sage: XYPairs.add_constraints((), ((2,), {'y':3})) (2, 3) - >>> from sage.all import * >>> from sage.structure.set_factories_example import XYPairs >>> XYPairs.add_constraints((Integer(3),None), ((Integer(2),), {})) Traceback (most recent call last): ... ValueError: Duplicate value for constraints 'x': was 3 now 2 >>> XYPairs.add_constraints((), ((Integer(2),), {})) (2, None) >>> XYPairs.add_constraints((), ((Integer(2),), {'y':Integer(3)})) (2, 3)