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
) ofPairs_Y
parents:\[S := \bigcup_{i = 0,1,..., 4} S^y\]Warning
When writing a parent
P
as a disjoint union of a family of parentsP_i
, the parentsP_i
must be constructed as facade parents forP
. As a consequence, it should be passedP.facade_policy()
as policy argument. See the source code ofpairs_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
) ofSingletonPair
parents:\[S^y := \bigcup_{i = 0,1,..., 4} S_i^y\]See also
AllPairs
for how to properly constructDisjointUnionEnumeratedSets
usingParentWithSetFactory
.- single_pair(letter)[source]#
Construct the singleton pair parent
Construct a singleton pair for
(self.y, letter)
as a facade parent forself
.See also
AllPairs
for how to properly constructDisjointUnionEnumeratedSets
usingParentWithSetFactory
.
- 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
– wherea
is an integer (default toNone
).y=b
– whereb
is an integer (default toNone
).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 ofXYPairsFactory
.
- class sage.structure.set_factories_example.XYPairsFactory[source]#
Bases:
SetFactory
An example of set factory, for sets of pairs of integers.
See also
set_factories
for an introduction to set factories.- add_constraints(cons, args_opts)[source]#
Add constraints to the set
cons
as perSetFactory.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)