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]¶
- Implement - 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 - selfis 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]¶
- Implement - 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 - nextmethod 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 to- ZZand- Integer.- 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