passagemath-objects 10.6.44__cp314-cp314t-macosx_13_0_arm64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- passagemath_objects/.dylibs/libgmp.10.dylib +0 -0
- passagemath_objects/__init__.py +3 -0
- passagemath_objects-10.6.44.dist-info/METADATA +115 -0
- passagemath_objects-10.6.44.dist-info/RECORD +280 -0
- passagemath_objects-10.6.44.dist-info/WHEEL +6 -0
- passagemath_objects-10.6.44.dist-info/top_level.txt +3 -0
- sage/all__sagemath_objects.py +37 -0
- sage/arith/all__sagemath_objects.py +5 -0
- sage/arith/long.pxd +411 -0
- sage/arith/numerical_approx.cpython-314t-darwin.so +0 -0
- sage/arith/numerical_approx.pxd +35 -0
- sage/arith/numerical_approx.pyx +75 -0
- sage/arith/power.cpython-314t-darwin.so +0 -0
- sage/arith/power.pxd +31 -0
- sage/arith/power.pyx +127 -0
- sage/categories/action.cpython-314t-darwin.so +0 -0
- sage/categories/action.pxd +29 -0
- sage/categories/action.pyx +641 -0
- sage/categories/algebra_functor.py +745 -0
- sage/categories/all__sagemath_objects.py +33 -0
- sage/categories/basic.py +62 -0
- sage/categories/cartesian_product.py +295 -0
- sage/categories/category.py +3401 -0
- sage/categories/category_cy_helper.cpython-314t-darwin.so +0 -0
- sage/categories/category_cy_helper.pxd +8 -0
- sage/categories/category_cy_helper.pyx +322 -0
- sage/categories/category_singleton.cpython-314t-darwin.so +0 -0
- sage/categories/category_singleton.pxd +3 -0
- sage/categories/category_singleton.pyx +342 -0
- sage/categories/category_types.py +637 -0
- sage/categories/category_with_axiom.py +2876 -0
- sage/categories/covariant_functorial_construction.py +703 -0
- sage/categories/facade_sets.py +228 -0
- sage/categories/functor.cpython-314t-darwin.so +0 -0
- sage/categories/functor.pxd +7 -0
- sage/categories/functor.pyx +691 -0
- sage/categories/homset.py +1338 -0
- sage/categories/homsets.py +364 -0
- sage/categories/isomorphic_objects.py +73 -0
- sage/categories/map.cpython-314t-darwin.so +0 -0
- sage/categories/map.pxd +34 -0
- sage/categories/map.pyx +2106 -0
- sage/categories/morphism.cpython-314t-darwin.so +0 -0
- sage/categories/morphism.pxd +14 -0
- sage/categories/morphism.pyx +895 -0
- sage/categories/objects.py +167 -0
- sage/categories/primer.py +1696 -0
- sage/categories/pushout.py +4834 -0
- sage/categories/quotients.py +64 -0
- sage/categories/realizations.py +200 -0
- sage/categories/sets_cat.py +3290 -0
- sage/categories/sets_with_partial_maps.py +52 -0
- sage/categories/subobjects.py +64 -0
- sage/categories/subquotients.py +21 -0
- sage/categories/with_realizations.py +311 -0
- sage/cpython/__init__.py +19 -0
- sage/cpython/_py2_random.py +619 -0
- sage/cpython/all.py +3 -0
- sage/cpython/atexit.cpython-314t-darwin.so +0 -0
- sage/cpython/atexit.pyx +269 -0
- sage/cpython/builtin_types.cpython-314t-darwin.so +0 -0
- sage/cpython/builtin_types.pyx +7 -0
- sage/cpython/cython_metaclass.cpython-314t-darwin.so +0 -0
- sage/cpython/cython_metaclass.h +117 -0
- sage/cpython/cython_metaclass.pxd +3 -0
- sage/cpython/cython_metaclass.pyx +130 -0
- sage/cpython/debug.cpython-314t-darwin.so +0 -0
- sage/cpython/debug.pyx +302 -0
- sage/cpython/dict_del_by_value.cpython-314t-darwin.so +0 -0
- sage/cpython/dict_del_by_value.pxd +9 -0
- sage/cpython/dict_del_by_value.pyx +191 -0
- sage/cpython/dict_internal.h +245 -0
- sage/cpython/getattr.cpython-314t-darwin.so +0 -0
- sage/cpython/getattr.pxd +9 -0
- sage/cpython/getattr.pyx +439 -0
- sage/cpython/pycore_long.h +97 -0
- sage/cpython/pycore_long.pxd +10 -0
- sage/cpython/python_debug.h +44 -0
- sage/cpython/python_debug.pxd +47 -0
- sage/cpython/pyx_visit.h +13 -0
- sage/cpython/string.cpython-314t-darwin.so +0 -0
- sage/cpython/string.pxd +76 -0
- sage/cpython/string.pyx +34 -0
- sage/cpython/string_impl.h +60 -0
- sage/cpython/type.cpython-314t-darwin.so +0 -0
- sage/cpython/type.pxd +2 -0
- sage/cpython/type.pyx +40 -0
- sage/cpython/wrapperdescr.pxd +67 -0
- sage/ext/all__sagemath_objects.py +3 -0
- sage/ext/ccobject.h +64 -0
- sage/ext/cplusplus.pxd +17 -0
- sage/ext/mod_int.h +30 -0
- sage/ext/mod_int.pxd +24 -0
- sage/ext/stdsage.pxd +39 -0
- sage/groups/all__sagemath_objects.py +1 -0
- sage/groups/group.cpython-314t-darwin.so +0 -0
- sage/groups/group.pxd +14 -0
- sage/groups/group.pyx +322 -0
- sage/groups/old.cpython-314t-darwin.so +0 -0
- sage/groups/old.pxd +14 -0
- sage/groups/old.pyx +219 -0
- sage/libs/all__sagemath_objects.py +3 -0
- sage/libs/gmp/__init__.py +1 -0
- sage/libs/gmp/all.pxd +6 -0
- sage/libs/gmp/binop.pxd +23 -0
- sage/libs/gmp/misc.pxd +8 -0
- sage/libs/gmp/mpf.pxd +88 -0
- sage/libs/gmp/mpn.pxd +57 -0
- sage/libs/gmp/mpq.pxd +57 -0
- sage/libs/gmp/mpz.pxd +202 -0
- sage/libs/gmp/pylong.cpython-314t-darwin.so +0 -0
- sage/libs/gmp/pylong.pxd +12 -0
- sage/libs/gmp/pylong.pyx +150 -0
- sage/libs/gmp/random.pxd +25 -0
- sage/libs/gmp/randomize.pxd +59 -0
- sage/libs/gmp/types.pxd +53 -0
- sage/libs/gmpxx.pxd +19 -0
- sage/misc/abstract_method.py +276 -0
- sage/misc/all__sagemath_objects.py +43 -0
- sage/misc/bindable_class.py +253 -0
- sage/misc/c3_controlled.cpython-314t-darwin.so +0 -0
- sage/misc/c3_controlled.pxd +2 -0
- sage/misc/c3_controlled.pyx +1402 -0
- sage/misc/cachefunc.cpython-314t-darwin.so +0 -0
- sage/misc/cachefunc.pxd +43 -0
- sage/misc/cachefunc.pyx +3781 -0
- sage/misc/call.py +188 -0
- sage/misc/classcall_metaclass.cpython-314t-darwin.so +0 -0
- sage/misc/classcall_metaclass.pxd +14 -0
- sage/misc/classcall_metaclass.pyx +599 -0
- sage/misc/constant_function.cpython-314t-darwin.so +0 -0
- sage/misc/constant_function.pyx +130 -0
- sage/misc/decorators.py +747 -0
- sage/misc/fast_methods.cpython-314t-darwin.so +0 -0
- sage/misc/fast_methods.pxd +20 -0
- sage/misc/fast_methods.pyx +351 -0
- sage/misc/flatten.py +90 -0
- sage/misc/fpickle.cpython-314t-darwin.so +0 -0
- sage/misc/fpickle.pyx +177 -0
- sage/misc/function_mangling.cpython-314t-darwin.so +0 -0
- sage/misc/function_mangling.pxd +11 -0
- sage/misc/function_mangling.pyx +308 -0
- sage/misc/inherit_comparison.cpython-314t-darwin.so +0 -0
- sage/misc/inherit_comparison.pxd +5 -0
- sage/misc/inherit_comparison.pyx +105 -0
- sage/misc/instancedoc.cpython-314t-darwin.so +0 -0
- sage/misc/instancedoc.pyx +331 -0
- sage/misc/lazy_attribute.cpython-314t-darwin.so +0 -0
- sage/misc/lazy_attribute.pyx +607 -0
- sage/misc/lazy_format.py +135 -0
- sage/misc/lazy_import.cpython-314t-darwin.so +0 -0
- sage/misc/lazy_import.pyx +1299 -0
- sage/misc/lazy_import_cache.py +36 -0
- sage/misc/lazy_list.cpython-314t-darwin.so +0 -0
- sage/misc/lazy_list.pxd +19 -0
- sage/misc/lazy_list.pyx +1187 -0
- sage/misc/lazy_string.cpython-314t-darwin.so +0 -0
- sage/misc/lazy_string.pxd +7 -0
- sage/misc/lazy_string.pyx +546 -0
- sage/misc/misc.py +1066 -0
- sage/misc/misc_c.cpython-314t-darwin.so +0 -0
- sage/misc/misc_c.pxd +3 -0
- sage/misc/misc_c.pyx +766 -0
- sage/misc/namespace_package.py +37 -0
- sage/misc/nested_class.cpython-314t-darwin.so +0 -0
- sage/misc/nested_class.pxd +3 -0
- sage/misc/nested_class.pyx +394 -0
- sage/misc/persist.cpython-314t-darwin.so +0 -0
- sage/misc/persist.pyx +1251 -0
- sage/misc/prandom.py +418 -0
- sage/misc/randstate.cpython-314t-darwin.so +0 -0
- sage/misc/randstate.pxd +30 -0
- sage/misc/randstate.pyx +1059 -0
- sage/misc/repr.py +203 -0
- sage/misc/reset.cpython-314t-darwin.so +0 -0
- sage/misc/reset.pyx +196 -0
- sage/misc/sage_ostools.cpython-314t-darwin.so +0 -0
- sage/misc/sage_ostools.pyx +323 -0
- sage/misc/sage_timeit.py +275 -0
- sage/misc/sage_timeit_class.cpython-314t-darwin.so +0 -0
- sage/misc/sage_timeit_class.pyx +120 -0
- sage/misc/sage_unittest.py +637 -0
- sage/misc/sageinspect.py +2768 -0
- sage/misc/session.cpython-314t-darwin.so +0 -0
- sage/misc/session.pyx +392 -0
- sage/misc/superseded.py +557 -0
- sage/misc/test_nested_class.py +228 -0
- sage/misc/timing.py +264 -0
- sage/misc/unknown.py +222 -0
- sage/misc/verbose.py +253 -0
- sage/misc/weak_dict.cpython-314t-darwin.so +0 -0
- sage/misc/weak_dict.pxd +15 -0
- sage/misc/weak_dict.pyx +1231 -0
- sage/modules/all__sagemath_objects.py +1 -0
- sage/modules/module.cpython-314t-darwin.so +0 -0
- sage/modules/module.pxd +5 -0
- sage/modules/module.pyx +329 -0
- sage/rings/all__sagemath_objects.py +3 -0
- sage/rings/integer_fake.h +22 -0
- sage/rings/integer_fake.pxd +55 -0
- sage/sets/all__sagemath_objects.py +3 -0
- sage/sets/pythonclass.cpython-314t-darwin.so +0 -0
- sage/sets/pythonclass.pxd +9 -0
- sage/sets/pythonclass.pyx +247 -0
- sage/structure/__init__.py +4 -0
- sage/structure/all.py +30 -0
- sage/structure/category_object.cpython-314t-darwin.so +0 -0
- sage/structure/category_object.pxd +28 -0
- sage/structure/category_object.pyx +1087 -0
- sage/structure/coerce.cpython-314t-darwin.so +0 -0
- sage/structure/coerce.pxd +44 -0
- sage/structure/coerce.pyx +2107 -0
- sage/structure/coerce_actions.cpython-314t-darwin.so +0 -0
- sage/structure/coerce_actions.pxd +27 -0
- sage/structure/coerce_actions.pyx +988 -0
- sage/structure/coerce_dict.cpython-314t-darwin.so +0 -0
- sage/structure/coerce_dict.pxd +51 -0
- sage/structure/coerce_dict.pyx +1557 -0
- sage/structure/coerce_exceptions.py +23 -0
- sage/structure/coerce_maps.cpython-314t-darwin.so +0 -0
- sage/structure/coerce_maps.pxd +28 -0
- sage/structure/coerce_maps.pyx +718 -0
- sage/structure/debug_options.cpython-314t-darwin.so +0 -0
- sage/structure/debug_options.pxd +6 -0
- sage/structure/debug_options.pyx +54 -0
- sage/structure/dynamic_class.py +541 -0
- sage/structure/element.cpython-314t-darwin.so +0 -0
- sage/structure/element.pxd +272 -0
- sage/structure/element.pyx +4772 -0
- sage/structure/element_wrapper.cpython-314t-darwin.so +0 -0
- sage/structure/element_wrapper.pxd +12 -0
- sage/structure/element_wrapper.pyx +582 -0
- sage/structure/factorization.py +1422 -0
- sage/structure/factorization_integer.py +105 -0
- sage/structure/factory.cpython-314t-darwin.so +0 -0
- sage/structure/factory.pyx +786 -0
- sage/structure/formal_sum.py +489 -0
- sage/structure/gens_py.py +73 -0
- sage/structure/global_options.py +1743 -0
- sage/structure/indexed_generators.py +863 -0
- sage/structure/list_clone.cpython-314t-darwin.so +0 -0
- sage/structure/list_clone.pxd +65 -0
- sage/structure/list_clone.pyx +1867 -0
- sage/structure/list_clone_demo.cpython-314t-darwin.so +0 -0
- sage/structure/list_clone_demo.pyx +248 -0
- sage/structure/list_clone_timings.py +179 -0
- sage/structure/list_clone_timings_cy.cpython-314t-darwin.so +0 -0
- sage/structure/list_clone_timings_cy.pyx +86 -0
- sage/structure/mutability.cpython-314t-darwin.so +0 -0
- sage/structure/mutability.pxd +21 -0
- sage/structure/mutability.pyx +348 -0
- sage/structure/nonexact.py +69 -0
- sage/structure/parent.cpython-314t-darwin.so +0 -0
- sage/structure/parent.pxd +112 -0
- sage/structure/parent.pyx +3093 -0
- sage/structure/parent_base.cpython-314t-darwin.so +0 -0
- sage/structure/parent_base.pxd +13 -0
- sage/structure/parent_base.pyx +44 -0
- sage/structure/parent_gens.cpython-314t-darwin.so +0 -0
- sage/structure/parent_gens.pxd +22 -0
- sage/structure/parent_gens.pyx +377 -0
- sage/structure/parent_old.cpython-314t-darwin.so +0 -0
- sage/structure/parent_old.pxd +25 -0
- sage/structure/parent_old.pyx +294 -0
- sage/structure/proof/__init__.py +1 -0
- sage/structure/proof/all.py +243 -0
- sage/structure/proof/proof.py +300 -0
- sage/structure/richcmp.cpython-314t-darwin.so +0 -0
- sage/structure/richcmp.pxd +213 -0
- sage/structure/richcmp.pyx +495 -0
- sage/structure/sage_object.cpython-314t-darwin.so +0 -0
- sage/structure/sage_object.pxd +3 -0
- sage/structure/sage_object.pyx +988 -0
- sage/structure/sage_object_test.py +19 -0
- sage/structure/sequence.py +937 -0
- sage/structure/set_factories.py +1178 -0
- sage/structure/set_factories_example.py +527 -0
- sage/structure/support_view.py +179 -0
- sage/structure/test_factory.py +56 -0
- sage/structure/unique_representation.py +1359 -0
|
Binary file
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-objects
|
|
2
|
+
###############################################################################
|
|
3
|
+
# Sage: Open Source Mathematical Software
|
|
4
|
+
# Copyright (C) 2006 William Stein <wstein@gmail.com>
|
|
5
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
6
|
+
# The full text of the GPL is available at:
|
|
7
|
+
# https://www.gnu.org/licenses/
|
|
8
|
+
###############################################################################
|
|
9
|
+
|
|
10
|
+
from sage.structure.parent_old cimport Parent as Parent_old
|
|
11
|
+
|
|
12
|
+
cdef class ParentWithBase(Parent_old):
|
|
13
|
+
pass
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-objects
|
|
2
|
+
r"""
|
|
3
|
+
Base class for old-style parent objects with a base ring
|
|
4
|
+
"""
|
|
5
|
+
# ****************************************************************************
|
|
6
|
+
# Copyright (C) 2006 William Stein <wstein@gmail.com>
|
|
7
|
+
#
|
|
8
|
+
# This program is free software: you can redistribute it and/or modify
|
|
9
|
+
# it under the terms of the GNU General Public License as published by
|
|
10
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
11
|
+
# (at your option) any later version.
|
|
12
|
+
# https://www.gnu.org/licenses/
|
|
13
|
+
# ****************************************************************************
|
|
14
|
+
|
|
15
|
+
cimport sage.structure.parent as parent
|
|
16
|
+
from sage.structure.coerce_exceptions import CoercionException
|
|
17
|
+
|
|
18
|
+
cdef inline check_old_coerce(parent.Parent p):
|
|
19
|
+
if p._element_constructor is not None:
|
|
20
|
+
raise RuntimeError("%s still using old coercion framework" % p)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
cdef class ParentWithBase(Parent_old):
|
|
24
|
+
"""
|
|
25
|
+
This class is being deprecated, see parent.Parent for the new model.
|
|
26
|
+
"""
|
|
27
|
+
def __init__(self, base, *args, **kwds):
|
|
28
|
+
Parent_old.__init__(self, *args, **kwds)
|
|
29
|
+
self._base = base
|
|
30
|
+
|
|
31
|
+
cdef _coerce_c_impl(self, x):
|
|
32
|
+
check_old_coerce(self)
|
|
33
|
+
from sage.misc.superseded import deprecation
|
|
34
|
+
deprecation(33497, "_coerce_c_impl is deprecated, use coerce instead")
|
|
35
|
+
if self._base is not self:
|
|
36
|
+
return self(self._base._coerce_(x))
|
|
37
|
+
else:
|
|
38
|
+
raise TypeError("No canonical coercion found.")
|
|
39
|
+
|
|
40
|
+
# Derived class *must* define base_extend.
|
|
41
|
+
def base_extend(self, X):
|
|
42
|
+
check_old_coerce(self)
|
|
43
|
+
raise CoercionException("BUG: the base_extend method must be defined for '%s' (class '%s')" %
|
|
44
|
+
(self, type(self)))
|
|
Binary file
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-objects
|
|
2
|
+
"""
|
|
3
|
+
Parent objects with generators
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
# ***************************************************************************
|
|
7
|
+
# Copyright (C) 2005, 2006 William Stein <wstein@gmail.com>
|
|
8
|
+
#
|
|
9
|
+
# This program is free software: you can redistribute it and/or modify
|
|
10
|
+
# it under the terms of the GNU General Public License as published by
|
|
11
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
12
|
+
# (at your option) any later version.
|
|
13
|
+
# https://www.gnu.org/licenses/
|
|
14
|
+
# ***************************************************************************
|
|
15
|
+
|
|
16
|
+
from sage.structure.parent_base cimport ParentWithBase
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
cdef class ParentWithGens(ParentWithBase):
|
|
20
|
+
cdef public object _gens
|
|
21
|
+
cdef public object _latex_names
|
|
22
|
+
cdef public object _list
|
|
@@ -0,0 +1,377 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-objects
|
|
2
|
+
r"""
|
|
3
|
+
Base class for old-style parent objects with generators
|
|
4
|
+
|
|
5
|
+
.. NOTE::
|
|
6
|
+
|
|
7
|
+
This class is being deprecated, see
|
|
8
|
+
``sage.structure.parent.Parent`` and
|
|
9
|
+
``sage.structure.category_object.CategoryObject`` for the new
|
|
10
|
+
model.
|
|
11
|
+
|
|
12
|
+
Many parent objects in Sage are equipped with generators, which are
|
|
13
|
+
special elements of the object. For example, the polynomial ring
|
|
14
|
+
`\ZZ[x,y,z]` is generated by `x`, `y`, and `z`. In Sage the `i`-th
|
|
15
|
+
generator of an object ``X`` is obtained using the notation
|
|
16
|
+
``X.gen(i)``. From the Sage interactive prompt, the shorthand
|
|
17
|
+
notation ``X.i`` is also allowed.
|
|
18
|
+
|
|
19
|
+
REQUIRED: A class that derives from ParentWithGens *must* define
|
|
20
|
+
the ngens() and gen(i) methods.
|
|
21
|
+
|
|
22
|
+
OPTIONAL: It is also good if they define gens() to return all gens,
|
|
23
|
+
but this is not necessary.
|
|
24
|
+
|
|
25
|
+
The ``gens`` function returns a tuple of all generators, the
|
|
26
|
+
``ngens`` function returns the number of generators.
|
|
27
|
+
|
|
28
|
+
The ``_assign_names`` functions is for internal use only, and is
|
|
29
|
+
called when objects are created to set the generator names. It can
|
|
30
|
+
only be called once.
|
|
31
|
+
|
|
32
|
+
The following examples illustrate these functions in the context of
|
|
33
|
+
multivariate polynomial rings and free modules.
|
|
34
|
+
|
|
35
|
+
EXAMPLES::
|
|
36
|
+
|
|
37
|
+
sage: R = PolynomialRing(ZZ, 3, 'x')
|
|
38
|
+
sage: R.ngens()
|
|
39
|
+
3
|
|
40
|
+
sage: R.gen(0)
|
|
41
|
+
x0
|
|
42
|
+
sage: R.gens()
|
|
43
|
+
(x0, x1, x2)
|
|
44
|
+
sage: R.variable_names()
|
|
45
|
+
('x0', 'x1', 'x2')
|
|
46
|
+
|
|
47
|
+
This example illustrates generators for a free module over `\ZZ`.
|
|
48
|
+
|
|
49
|
+
::
|
|
50
|
+
|
|
51
|
+
sage: # needs sage.modules
|
|
52
|
+
sage: M = FreeModule(ZZ, 4)
|
|
53
|
+
sage: M
|
|
54
|
+
Ambient free module of rank 4 over the principal ideal domain Integer Ring
|
|
55
|
+
sage: M.ngens()
|
|
56
|
+
4
|
|
57
|
+
sage: M.gen(0)
|
|
58
|
+
(1, 0, 0, 0)
|
|
59
|
+
sage: M.gens()
|
|
60
|
+
((1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0, 1))
|
|
61
|
+
"""
|
|
62
|
+
|
|
63
|
+
# ****************************************************************************
|
|
64
|
+
# Copyright (C) 2005, 2006 William Stein <wstein@gmail.com>
|
|
65
|
+
#
|
|
66
|
+
# This program is free software: you can redistribute it and/or modify
|
|
67
|
+
# it under the terms of the GNU General Public License as published by
|
|
68
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
69
|
+
# (at your option) any later version.
|
|
70
|
+
# https://www.gnu.org/licenses/
|
|
71
|
+
# ****************************************************************************
|
|
72
|
+
|
|
73
|
+
cimport sage.structure.parent as parent
|
|
74
|
+
cimport sage.structure.category_object as category_object
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
cdef inline check_old_coerce(parent.Parent p):
|
|
78
|
+
if p._element_constructor is not None:
|
|
79
|
+
raise RuntimeError("%s still using old coercion framework" % p)
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
cdef class ParentWithGens(ParentWithBase):
|
|
83
|
+
# Derived class *must* call __init__ and set the base!
|
|
84
|
+
def __init__(self, base, names=None, normalize=True, category=None):
|
|
85
|
+
"""
|
|
86
|
+
EXAMPLES::
|
|
87
|
+
|
|
88
|
+
sage: from sage.structure.parent_gens import ParentWithGens
|
|
89
|
+
sage: class MyParent(ParentWithGens):
|
|
90
|
+
....: def ngens(self): return 3
|
|
91
|
+
sage: P = MyParent(base=QQ, names='a,b,c', normalize=True, category=Groups())
|
|
92
|
+
sage: P.category()
|
|
93
|
+
Category of groups
|
|
94
|
+
sage: P._names
|
|
95
|
+
('a', 'b', 'c')
|
|
96
|
+
"""
|
|
97
|
+
self._base = base
|
|
98
|
+
self._assign_names(names=names, normalize=normalize)
|
|
99
|
+
|
|
100
|
+
ParentWithBase.__init__(self, base, category=category)
|
|
101
|
+
|
|
102
|
+
# Derived class *must* define ngens method.
|
|
103
|
+
def ngens(self):
|
|
104
|
+
check_old_coerce(self)
|
|
105
|
+
raise NotImplementedError("Number of generators not known.")
|
|
106
|
+
|
|
107
|
+
# Derived class *must* define gen method.
|
|
108
|
+
def gen(self, i=0):
|
|
109
|
+
check_old_coerce(self)
|
|
110
|
+
raise NotImplementedError("i-th generator not known.")
|
|
111
|
+
|
|
112
|
+
def gens(self):
|
|
113
|
+
"""
|
|
114
|
+
Return a tuple whose entries are the generators for this
|
|
115
|
+
object, in order.
|
|
116
|
+
"""
|
|
117
|
+
cdef int i
|
|
118
|
+
if self._gens is not None:
|
|
119
|
+
return self._gens
|
|
120
|
+
self._gens = tuple(self.gen(i) for i in range(self.ngens()))
|
|
121
|
+
return self._gens
|
|
122
|
+
|
|
123
|
+
def _assign_names(self, names=None, normalize=True):
|
|
124
|
+
"""
|
|
125
|
+
Set the names of the generator of this object.
|
|
126
|
+
|
|
127
|
+
This can only be done once because objects with generators
|
|
128
|
+
are immutable, and is typically done during creation of the object.
|
|
129
|
+
|
|
130
|
+
EXAMPLES:
|
|
131
|
+
|
|
132
|
+
When we create this polynomial ring, self._assign_names is called by the constructor:
|
|
133
|
+
|
|
134
|
+
::
|
|
135
|
+
|
|
136
|
+
sage: R = QQ['x,y,abc']; R
|
|
137
|
+
Multivariate Polynomial Ring in x, y, abc over Rational Field
|
|
138
|
+
sage: R.2
|
|
139
|
+
abc
|
|
140
|
+
|
|
141
|
+
We can't rename the variables::
|
|
142
|
+
|
|
143
|
+
sage: R._assign_names(['a','b','c'])
|
|
144
|
+
Traceback (most recent call last):
|
|
145
|
+
...
|
|
146
|
+
ValueError: variable names cannot be changed after object creation.
|
|
147
|
+
"""
|
|
148
|
+
if self._element_constructor is not None:
|
|
149
|
+
return parent.Parent._assign_names(self, names=names, normalize=normalize)
|
|
150
|
+
if names is None: return
|
|
151
|
+
if normalize:
|
|
152
|
+
names = category_object.normalize_names(self.ngens(), names)
|
|
153
|
+
if self._names is not None and names != self._names:
|
|
154
|
+
raise ValueError('variable names cannot be changed after object creation.')
|
|
155
|
+
if isinstance(names, str):
|
|
156
|
+
names = (names, ) # make it a tuple
|
|
157
|
+
elif not isinstance(names, tuple):
|
|
158
|
+
raise TypeError("names must be a tuple of strings")
|
|
159
|
+
self._names = names
|
|
160
|
+
|
|
161
|
+
#################################################################################
|
|
162
|
+
# Give all objects with generators a dictionary, so that attribute setting
|
|
163
|
+
# works. It would be nice if this functionality were standard in Pyrex,
|
|
164
|
+
# i.e., just define __dict__ as an attribute and all this code gets generated.
|
|
165
|
+
#################################################################################
|
|
166
|
+
def __getstate__(self):
|
|
167
|
+
if self._element_constructor is not None:
|
|
168
|
+
return parent.Parent.__getstate__(self)
|
|
169
|
+
d = []
|
|
170
|
+
try:
|
|
171
|
+
d = list(self.__dict__.copy().iteritems()) # so we can add elements
|
|
172
|
+
except AttributeError:
|
|
173
|
+
pass
|
|
174
|
+
d = dict(d)
|
|
175
|
+
d['_base'] = self._base
|
|
176
|
+
d['_gens'] = self._gens
|
|
177
|
+
d['_list'] = self._list
|
|
178
|
+
d['_names'] = self._names
|
|
179
|
+
d['_latex_names'] = self._latex_names
|
|
180
|
+
|
|
181
|
+
return d
|
|
182
|
+
|
|
183
|
+
def __setstate__(self, d):
|
|
184
|
+
if '_element_constructor' in d:
|
|
185
|
+
return parent.Parent.__setstate__(self, d)
|
|
186
|
+
try:
|
|
187
|
+
self.__dict__.update(d)
|
|
188
|
+
except (AttributeError,KeyError):
|
|
189
|
+
pass
|
|
190
|
+
self._base = d['_base']
|
|
191
|
+
self._gens = d['_gens']
|
|
192
|
+
self._list = d['_list']
|
|
193
|
+
self._names = d['_names']
|
|
194
|
+
self._latex_names = d['_latex_names']
|
|
195
|
+
|
|
196
|
+
######################################################################
|
|
197
|
+
# Morphisms of objects with generators
|
|
198
|
+
######################################################################
|
|
199
|
+
|
|
200
|
+
def hom(self, im_gens, codomain=None, base_map=None, category=None, check=True):
|
|
201
|
+
r"""
|
|
202
|
+
Return the unique homomorphism from ``self`` to codomain that
|
|
203
|
+
sends ``self.gens()`` to the entries of ``im_gens``
|
|
204
|
+
and induces the map ``base_map`` on the base ring.
|
|
205
|
+
|
|
206
|
+
This raises a :exc:`TypeError` if there is no such homomorphism.
|
|
207
|
+
|
|
208
|
+
INPUT:
|
|
209
|
+
|
|
210
|
+
- ``im_gens`` -- the images in the codomain of the generators of
|
|
211
|
+
this object under the homomorphism
|
|
212
|
+
|
|
213
|
+
- ``codomain`` -- the codomain of the homomorphism
|
|
214
|
+
|
|
215
|
+
- ``base_map`` -- a map from the base ring of the domain into something
|
|
216
|
+
that coerces into the codomain
|
|
217
|
+
|
|
218
|
+
- ``category`` -- the category of the resulting morphism
|
|
219
|
+
|
|
220
|
+
- ``check`` -- whether to verify that the images of generators extend
|
|
221
|
+
to define a map (using only canonical coercions)
|
|
222
|
+
|
|
223
|
+
OUTPUT: a homomorphism ``self --> codomain``
|
|
224
|
+
|
|
225
|
+
.. NOTE::
|
|
226
|
+
|
|
227
|
+
As a shortcut, one can also give an object X instead of
|
|
228
|
+
``im_gens``, in which case return the (if it exists)
|
|
229
|
+
natural map to X.
|
|
230
|
+
|
|
231
|
+
EXAMPLES: Polynomial Ring
|
|
232
|
+
We first illustrate construction of a few homomorphisms
|
|
233
|
+
involving a polynomial ring.
|
|
234
|
+
|
|
235
|
+
::
|
|
236
|
+
|
|
237
|
+
sage: R.<x> = PolynomialRing(ZZ)
|
|
238
|
+
sage: f = R.hom([5], QQ)
|
|
239
|
+
sage: f(x^2 - 19)
|
|
240
|
+
6
|
|
241
|
+
|
|
242
|
+
sage: R.<x> = PolynomialRing(QQ)
|
|
243
|
+
sage: f = R.hom([5], GF(7))
|
|
244
|
+
Traceback (most recent call last):
|
|
245
|
+
...
|
|
246
|
+
ValueError: relations do not all (canonically) map to 0
|
|
247
|
+
under map determined by images of generators
|
|
248
|
+
|
|
249
|
+
sage: # needs sage.rings.finite_rings
|
|
250
|
+
sage: R.<x> = PolynomialRing(GF(7))
|
|
251
|
+
sage: f = R.hom([3], GF(49, 'a'))
|
|
252
|
+
sage: f
|
|
253
|
+
Ring morphism:
|
|
254
|
+
From: Univariate Polynomial Ring in x over Finite Field of size 7
|
|
255
|
+
To: Finite Field in a of size 7^2
|
|
256
|
+
Defn: x |--> 3
|
|
257
|
+
sage: f(x + 6)
|
|
258
|
+
2
|
|
259
|
+
sage: f(x^2 + 1)
|
|
260
|
+
3
|
|
261
|
+
|
|
262
|
+
EXAMPLES: Natural morphism
|
|
263
|
+
|
|
264
|
+
::
|
|
265
|
+
|
|
266
|
+
sage: f = ZZ.hom(GF(5))
|
|
267
|
+
sage: f(7)
|
|
268
|
+
2
|
|
269
|
+
sage: f
|
|
270
|
+
Natural morphism:
|
|
271
|
+
From: Integer Ring
|
|
272
|
+
To: Finite Field of size 5
|
|
273
|
+
|
|
274
|
+
There might not be a natural morphism, in which case a
|
|
275
|
+
:exc:`TypeError` exception is raised.
|
|
276
|
+
|
|
277
|
+
::
|
|
278
|
+
|
|
279
|
+
sage: QQ.hom(ZZ)
|
|
280
|
+
Traceback (most recent call last):
|
|
281
|
+
...
|
|
282
|
+
TypeError: natural coercion morphism from Rational Field to Integer Ring not defined
|
|
283
|
+
|
|
284
|
+
You can specify a map on the base ring::
|
|
285
|
+
|
|
286
|
+
sage: # needs sage.rings.finite_rings
|
|
287
|
+
sage: k = GF(2)
|
|
288
|
+
sage: R.<a> = k[]
|
|
289
|
+
sage: l.<a> = k.extension(a^3 + a^2 + 1)
|
|
290
|
+
sage: R.<b> = l[]
|
|
291
|
+
sage: m.<b> = l.extension(b^2 + b + a)
|
|
292
|
+
sage: n.<z> = GF(2^6)
|
|
293
|
+
sage: m.hom([z^4 + z^3 + 1], base_map=l.hom([z^5 + z^4 + z^2]))
|
|
294
|
+
Ring morphism:
|
|
295
|
+
From: Univariate Quotient Polynomial Ring in b over
|
|
296
|
+
Finite Field in a of size 2^3 with modulus b^2 + b + a
|
|
297
|
+
To: Finite Field in z of size 2^6
|
|
298
|
+
Defn: b |--> z^4 + z^3 + 1
|
|
299
|
+
with map of base ring
|
|
300
|
+
"""
|
|
301
|
+
if self._element_constructor is not None:
|
|
302
|
+
return parent.Parent.hom(self, im_gens, codomain, base_map=base_map, category=category, check=check)
|
|
303
|
+
if isinstance(im_gens, parent.Parent):
|
|
304
|
+
return self.Hom(im_gens).natural_map()
|
|
305
|
+
if codomain is None:
|
|
306
|
+
from sage.structure.all import Sequence
|
|
307
|
+
im_gens = Sequence(im_gens)
|
|
308
|
+
codomain = im_gens.universe()
|
|
309
|
+
kwds = {}
|
|
310
|
+
if check is not None:
|
|
311
|
+
kwds['check'] = check
|
|
312
|
+
if base_map is not None:
|
|
313
|
+
kwds['base_map'] = base_map
|
|
314
|
+
Hom_kwds = {} if category is None else {'category': category}
|
|
315
|
+
return self.Hom(codomain, **Hom_kwds)(im_gens, **kwds)
|
|
316
|
+
|
|
317
|
+
|
|
318
|
+
cdef class localvars:
|
|
319
|
+
r"""
|
|
320
|
+
Context manager for safely temporarily changing the variables
|
|
321
|
+
names of an object with generators.
|
|
322
|
+
|
|
323
|
+
Objects with named generators are globally unique in Sage.
|
|
324
|
+
Sometimes, though, it is very useful to be able to temporarily
|
|
325
|
+
display the generators differently. The new Python ``with``
|
|
326
|
+
statement and the localvars context manager make this easy and
|
|
327
|
+
safe (and fun!)
|
|
328
|
+
|
|
329
|
+
Suppose X is any object with generators. Write
|
|
330
|
+
|
|
331
|
+
::
|
|
332
|
+
|
|
333
|
+
with localvars(X, names[, latex_names] [,normalize=False]):
|
|
334
|
+
some code
|
|
335
|
+
...
|
|
336
|
+
|
|
337
|
+
and the indented code will be run as if the names in X are changed
|
|
338
|
+
to the new names. If you give normalize=True, then the names are
|
|
339
|
+
assumed to be a tuple of the correct number of strings.
|
|
340
|
+
|
|
341
|
+
EXAMPLES::
|
|
342
|
+
|
|
343
|
+
sage: R.<x,y> = PolynomialRing(QQ, 2)
|
|
344
|
+
sage: with localvars(R, 'z,w'):
|
|
345
|
+
....: print(x^3 + y^3 - x*y)
|
|
346
|
+
z^3 + w^3 - z*w
|
|
347
|
+
|
|
348
|
+
.. NOTE::
|
|
349
|
+
|
|
350
|
+
I wrote this because it was needed to print elements of the
|
|
351
|
+
quotient of a ring R by an ideal I using the print function for
|
|
352
|
+
elements of R. See the code in
|
|
353
|
+
``quotient_ring_element.pyx``.
|
|
354
|
+
|
|
355
|
+
AUTHOR:
|
|
356
|
+
|
|
357
|
+
- William Stein (2006-10-31)
|
|
358
|
+
"""
|
|
359
|
+
cdef object _obj
|
|
360
|
+
cdef object _names
|
|
361
|
+
cdef object _latex_names
|
|
362
|
+
cdef object _orig
|
|
363
|
+
|
|
364
|
+
def __init__(self, obj, names, latex_names=None, normalize=True):
|
|
365
|
+
self._obj = obj
|
|
366
|
+
if normalize:
|
|
367
|
+
self._names = category_object.normalize_names(obj.ngens(), names)
|
|
368
|
+
self._latex_names = latex_names
|
|
369
|
+
else:
|
|
370
|
+
self._names = names
|
|
371
|
+
self._latex_names = latex_names
|
|
372
|
+
|
|
373
|
+
def __enter__(self):
|
|
374
|
+
self._orig = self._obj._temporarily_change_names(self._names, self._latex_names)
|
|
375
|
+
|
|
376
|
+
def __exit__(self, type, value, traceback):
|
|
377
|
+
self._obj._temporarily_change_names(self._orig[0], self._orig[1])
|
|
Binary file
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-objects
|
|
2
|
+
# ****************************************************************************
|
|
3
|
+
# Copyright (C) 2006 William Stein <wstein@gmail.com>
|
|
4
|
+
#
|
|
5
|
+
# This program is free software: you can redistribute it and/or modify
|
|
6
|
+
# it under the terms of the GNU General Public License as published by
|
|
7
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
8
|
+
# (at your option) any later version.
|
|
9
|
+
# https://www.gnu.org/licenses/
|
|
10
|
+
# ****************************************************************************
|
|
11
|
+
|
|
12
|
+
cimport sage.structure.parent as parent
|
|
13
|
+
from sage.structure.coerce_dict cimport MonoDict, TripleDict
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
cdef class Parent(parent.Parent):
|
|
17
|
+
# Cache for __has_coerce_map_from_c()
|
|
18
|
+
cdef MonoDict _has_coerce_map_from
|
|
19
|
+
|
|
20
|
+
cpdef _coerce_c(self, x)
|
|
21
|
+
cdef _coerce_c_impl(self, x)
|
|
22
|
+
|
|
23
|
+
cdef __coerce_map_from_c(self, S)
|
|
24
|
+
cdef __coerce_map_from_c_impl(self, S)
|
|
25
|
+
cdef __has_coerce_map_from_c(self, S)
|