Examples of sets#
- class sage.categories.examples.sets_cat.PrimeNumbers[source]#
Bases:
UniqueRepresentation
,Parent
An example of parent in the category of sets: the set of prime numbers.
The elements are represented as plain integers in \(\ZZ\) (facade implementation).
This is a minimal implementations. For more advanced examples of implementations, see also:
sage: P = Sets().example("facade") sage: P = Sets().example("inherits") sage: P = Sets().example("wrapper")
>>> from sage.all import * >>> P = Sets().example("facade") >>> P = Sets().example("inherits") >>> P = Sets().example("wrapper")
EXAMPLES:
sage: P = Sets().example() sage: P(12) Traceback (most recent call last): ... AssertionError: 12 is not a prime number sage: a = P.an_element() sage: a.parent() Integer Ring sage: x = P(13); x 13 sage: type(x) <class 'sage.rings.integer.Integer'> sage: x.parent() Integer Ring sage: 13 in P True sage: 12 in P False sage: y = x+1; y 14 sage: type(y) <class 'sage.rings.integer.Integer'> sage: TestSuite(P).run(verbose=True) running ._test_an_element() . . . pass running ._test_cardinality() . . . pass running ._test_category() . . . pass running ._test_construction() . . . pass running ._test_elements() . . . Running the test suite of self.an_element() running ._test_category() . . . pass running ._test_eq() . . . pass running ._test_new() . . . pass running ._test_nonzero_equal() . . . pass running ._test_not_implemented_methods() . . . pass running ._test_pickling() . . . pass pass running ._test_elements_eq_reflexive() . . . pass running ._test_elements_eq_symmetric() . . . pass running ._test_elements_eq_transitive() . . . pass running ._test_elements_neq() . . . pass running ._test_eq() . . . pass running ._test_new() . . . pass running ._test_not_implemented_methods() . . . pass running ._test_pickling() . . . pass running ._test_some_elements() . . . pass
>>> from sage.all import * >>> P = Sets().example() >>> P(Integer(12)) Traceback (most recent call last): ... AssertionError: 12 is not a prime number >>> a = P.an_element() >>> a.parent() Integer Ring >>> x = P(Integer(13)); x 13 >>> type(x) <class 'sage.rings.integer.Integer'> >>> x.parent() Integer Ring >>> Integer(13) in P True >>> Integer(12) in P False >>> y = x+Integer(1); y 14 >>> type(y) <class 'sage.rings.integer.Integer'> >>> TestSuite(P).run(verbose=True) running ._test_an_element() . . . pass running ._test_cardinality() . . . pass running ._test_category() . . . pass running ._test_construction() . . . pass running ._test_elements() . . . Running the test suite of self.an_element() running ._test_category() . . . pass running ._test_eq() . . . pass running ._test_new() . . . pass running ._test_nonzero_equal() . . . pass running ._test_not_implemented_methods() . . . pass running ._test_pickling() . . . pass pass running ._test_elements_eq_reflexive() . . . pass running ._test_elements_eq_symmetric() . . . pass running ._test_elements_eq_transitive() . . . pass running ._test_elements_neq() . . . pass running ._test_eq() . . . pass running ._test_new() . . . pass running ._test_not_implemented_methods() . . . pass running ._test_pickling() . . . pass running ._test_some_elements() . . . pass
- an_element()[source]#
Implements
Sets.ParentMethods.an_element()
.
- class sage.categories.examples.sets_cat.PrimeNumbers_Abstract[source]#
Bases:
UniqueRepresentation
,Parent
This class shows how to write a parent while keeping the choice of the datastructure for the children open. Different class with fixed datastructure will then be constructed by inheriting from
PrimeNumbers_Abstract
.This is used by:
sage: P = Sets().example("facade") sage: P = Sets().example("inherits") sage: P = Sets().example("wrapper")
>>> from sage.all import * >>> P = Sets().example("facade") >>> P = Sets().example("inherits") >>> P = Sets().example("wrapper")
- class Element[source]#
Bases:
Element
- is_prime()[source]#
Return whether
self
is a prime number.EXAMPLES:
sage: P = Sets().example("inherits") sage: x = P.an_element() sage: P.an_element().is_prime() True
>>> from sage.all import * >>> P = Sets().example("inherits") >>> x = P.an_element() >>> P.an_element().is_prime() True
- next()[source]#
Return the next prime number.
EXAMPLES:
sage: P = Sets().example("inherits") sage: p = P.an_element(); p 47 sage: p.next() 53
>>> from sage.all import * >>> P = Sets().example("inherits") >>> p = P.an_element(); p 47 >>> p.next() 53
Note
This method is not meant to implement the protocol iterator, and thus not subject to Python 2 vs Python 3 incompatibilities.
- an_element()[source]#
Implements
Sets.ParentMethods.an_element()
.
- next(i)[source]#
Return the next prime number.
EXAMPLES:
sage: P = Sets().example("inherits") sage: x = P.next(P.an_element()); x 53 sage: x.parent() Set of prime numbers
>>> from sage.all import * >>> P = Sets().example("inherits") >>> x = P.next(P.an_element()); x 53 >>> x.parent() Set of prime numbers
- class sage.categories.examples.sets_cat.PrimeNumbers_Facade[source]#
Bases:
PrimeNumbers_Abstract
An example of parent in the category of sets: the set of prime numbers.
In this alternative implementation, the elements are represented as plain integers in \(\ZZ\) (facade implementation).
EXAMPLES:
sage: P = Sets().example("facade") sage: P(12) Traceback (most recent call last): ... ValueError: 12 is not a prime number sage: a = P.an_element() sage: a.parent() Integer Ring sage: x = P(13); x 13 sage: type(x) <class 'sage.rings.integer.Integer'> sage: x.parent() Integer Ring sage: 13 in P True sage: 12 in P False sage: y = x+1; y 14 sage: type(y) <class 'sage.rings.integer.Integer'> sage: z = P.next(x); z 17 sage: type(z) <class 'sage.rings.integer.Integer'> sage: z.parent() Integer Ring
>>> from sage.all import * >>> P = Sets().example("facade") >>> P(Integer(12)) Traceback (most recent call last): ... ValueError: 12 is not a prime number >>> a = P.an_element() >>> a.parent() Integer Ring >>> x = P(Integer(13)); x 13 >>> type(x) <class 'sage.rings.integer.Integer'> >>> x.parent() Integer Ring >>> Integer(13) in P True >>> Integer(12) in P False >>> y = x+Integer(1); y 14 >>> type(y) <class 'sage.rings.integer.Integer'> >>> z = P.next(x); z 17 >>> type(z) <class 'sage.rings.integer.Integer'> >>> z.parent() Integer Ring
The disadvantage of this implementation is that the elements do not know that they are prime, so that prime testing is slow:
sage: pf = Sets().example("facade").an_element() sage: timeit("pf.is_prime()") # random 625 loops, best of 3: 4.1 us per loop
>>> from sage.all import * >>> pf = Sets().example("facade").an_element() >>> timeit("pf.is_prime()") # random 625 loops, best of 3: 4.1 us per loop
compared to the other implementations where prime testing is only done if needed during the construction of the element, and later on the elements “know” that they are prime:
sage: pw = Sets().example("wrapper").an_element() sage: timeit("pw.is_prime()") # random 625 loops, best of 3: 859 ns per loop sage: pi = Sets().example("inherits").an_element() sage: timeit("pw.is_prime()") # random 625 loops, best of 3: 854 ns per loop
>>> from sage.all import * >>> pw = Sets().example("wrapper").an_element() >>> timeit("pw.is_prime()") # random 625 loops, best of 3: 859 ns per loop >>> pi = Sets().example("inherits").an_element() >>> timeit("pw.is_prime()") # random 625 loops, best of 3: 854 ns per loop
Note also that the
next
method for the elements does not exist:sage: pf.next() Traceback (most recent call last): ... AttributeError: 'sage.rings.integer.Integer' object has no attribute 'next'...
>>> from sage.all import * >>> pf.next() Traceback (most recent call last): ... AttributeError: 'sage.rings.integer.Integer' object has no attribute 'next'...
unlike in the other implementations:
sage: pw.next() 53 sage: pi.next() 53
>>> from sage.all import * >>> pw.next() 53 >>> pi.next() 53
- class sage.categories.examples.sets_cat.PrimeNumbers_Inherits[source]#
Bases:
PrimeNumbers_Abstract
An example of parent in the category of sets: the set of prime numbers. In this implementation, the element are stored as object of a new class which inherits from the class Integer (technically
IntegerWrapper
).EXAMPLES:
sage: P = Sets().example("inherits") sage: P Set of prime numbers sage: P(12) Traceback (most recent call last): ... ValueError: 12 is not a prime number sage: a = P.an_element() sage: a.parent() Set of prime numbers sage: x = P(13); x 13 sage: x.is_prime() True sage: type(x) <class 'sage.categories.examples.sets_cat.PrimeNumbers_Inherits_with_category.element_class'> sage: x.parent() Set of prime numbers sage: P(13) in P True sage: y = x+1; y 14 sage: type(y) <class 'sage.rings.integer.Integer'> sage: y.parent() Integer Ring sage: type(P(13)+P(17)) <class 'sage.rings.integer.Integer'> sage: type(P(2)+P(3)) <class 'sage.rings.integer.Integer'> sage: z = P.next(x); z 17 sage: type(z) <class 'sage.categories.examples.sets_cat.PrimeNumbers_Inherits_with_category.element_class'> sage: z.parent() Set of prime numbers sage: TestSuite(P).run(verbose=True) running ._test_an_element() . . . pass running ._test_cardinality() . . . pass running ._test_category() . . . pass running ._test_construction() . . . pass running ._test_elements() . . . Running the test suite of self.an_element() running ._test_category() . . . pass running ._test_eq() . . . pass running ._test_new() . . . pass running ._test_not_implemented_methods() . . . pass running ._test_pickling() . . . pass pass running ._test_elements_eq_reflexive() . . . pass running ._test_elements_eq_symmetric() . . . pass running ._test_elements_eq_transitive() . . . pass running ._test_elements_neq() . . . pass running ._test_eq() . . . pass running ._test_new() . . . pass running ._test_not_implemented_methods() . . . pass running ._test_pickling() . . . pass running ._test_some_elements() . . . pass
>>> from sage.all import * >>> P = Sets().example("inherits") >>> P Set of prime numbers >>> P(Integer(12)) Traceback (most recent call last): ... ValueError: 12 is not a prime number >>> a = P.an_element() >>> a.parent() Set of prime numbers >>> x = P(Integer(13)); x 13 >>> x.is_prime() True >>> type(x) <class 'sage.categories.examples.sets_cat.PrimeNumbers_Inherits_with_category.element_class'> >>> x.parent() Set of prime numbers >>> P(Integer(13)) in P True >>> y = x+Integer(1); y 14 >>> type(y) <class 'sage.rings.integer.Integer'> >>> y.parent() Integer Ring >>> type(P(Integer(13))+P(Integer(17))) <class 'sage.rings.integer.Integer'> >>> type(P(Integer(2))+P(Integer(3))) <class 'sage.rings.integer.Integer'> >>> z = P.next(x); z 17 >>> type(z) <class 'sage.categories.examples.sets_cat.PrimeNumbers_Inherits_with_category.element_class'> >>> z.parent() Set of prime numbers >>> TestSuite(P).run(verbose=True) running ._test_an_element() . . . pass running ._test_cardinality() . . . pass running ._test_category() . . . pass running ._test_construction() . . . pass running ._test_elements() . . . Running the test suite of self.an_element() running ._test_category() . . . pass running ._test_eq() . . . pass running ._test_new() . . . pass running ._test_not_implemented_methods() . . . pass running ._test_pickling() . . . pass pass running ._test_elements_eq_reflexive() . . . pass running ._test_elements_eq_symmetric() . . . pass running ._test_elements_eq_transitive() . . . pass running ._test_elements_neq() . . . pass running ._test_eq() . . . pass running ._test_new() . . . pass running ._test_not_implemented_methods() . . . pass running ._test_pickling() . . . pass running ._test_some_elements() . . . pass
See also:
sage: P = Sets().example("facade") sage: P = Sets().example("inherits") sage: P = Sets().example("wrapper")
>>> from sage.all import * >>> P = Sets().example("facade") >>> P = Sets().example("inherits") >>> P = Sets().example("wrapper")
- class Element(parent, p)[source]#
Bases:
IntegerWrapper
,Element
- class sage.categories.examples.sets_cat.PrimeNumbers_Wrapper[source]#
Bases:
PrimeNumbers_Abstract
An example of parent in the category of sets: the set of prime numbers.
In this second alternative implementation, the prime integer are stored as a attribute of a sage object by inheriting from
ElementWrapper
. In this case we need to ensure conversion and coercion from this parent and its element toZZ
andInteger
.EXAMPLES:
sage: P = Sets().example("wrapper") sage: P(12) Traceback (most recent call last): ... ValueError: 12 is not a prime number sage: a = P.an_element() sage: a.parent() Set of prime numbers (wrapper implementation) sage: x = P(13); x 13 sage: type(x) <class 'sage.categories.examples.sets_cat.PrimeNumbers_Wrapper_with_category.element_class'> sage: x.parent() Set of prime numbers (wrapper implementation) sage: 13 in P True sage: 12 in P False sage: y = x+1; y 14 sage: type(y) <class 'sage.rings.integer.Integer'> sage: z = P.next(x); z 17 sage: type(z) <class 'sage.categories.examples.sets_cat.PrimeNumbers_Wrapper_with_category.element_class'> sage: z.parent() Set of prime numbers (wrapper implementation)
>>> from sage.all import * >>> P = Sets().example("wrapper") >>> P(Integer(12)) Traceback (most recent call last): ... ValueError: 12 is not a prime number >>> a = P.an_element() >>> a.parent() Set of prime numbers (wrapper implementation) >>> x = P(Integer(13)); x 13 >>> type(x) <class 'sage.categories.examples.sets_cat.PrimeNumbers_Wrapper_with_category.element_class'> >>> x.parent() Set of prime numbers (wrapper implementation) >>> Integer(13) in P True >>> Integer(12) in P False >>> y = x+Integer(1); y 14 >>> type(y) <class 'sage.rings.integer.Integer'> >>> z = P.next(x); z 17 >>> type(z) <class 'sage.categories.examples.sets_cat.PrimeNumbers_Wrapper_with_category.element_class'> >>> z.parent() Set of prime numbers (wrapper implementation)
- class Element[source]#
Bases:
ElementWrapper
,Element
- ElementWrapper[source]#
alias of
ElementWrapper