passagemath-objects 10.6.41__cp312-cp312-win_amd64.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/__init__.py +3 -0
- passagemath_objects-10.6.41.dist-info/DELVEWHEEL +2 -0
- passagemath_objects-10.6.41.dist-info/METADATA +115 -0
- passagemath_objects-10.6.41.dist-info/RECORD +281 -0
- passagemath_objects-10.6.41.dist-info/WHEEL +5 -0
- passagemath_objects-10.6.41.dist-info/top_level.txt +3 -0
- passagemath_objects.libs/libgmp-10-79b4110c7ea2b760f16cfef97e8a8a34.dll +0 -0
- sage/all__sagemath_objects.py +46 -0
- sage/arith/all__sagemath_objects.py +5 -0
- sage/arith/long.pxd +411 -0
- sage/arith/numerical_approx.cp312-win_amd64.pyd +0 -0
- sage/arith/numerical_approx.pxd +35 -0
- sage/arith/numerical_approx.pyx +75 -0
- sage/arith/power.cp312-win_amd64.pyd +0 -0
- sage/arith/power.pxd +31 -0
- sage/arith/power.pyx +127 -0
- sage/categories/action.cp312-win_amd64.pyd +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 +71 -0
- sage/categories/cartesian_product.py +295 -0
- sage/categories/category.py +3401 -0
- sage/categories/category_cy_helper.cp312-win_amd64.pyd +0 -0
- sage/categories/category_cy_helper.pxd +8 -0
- sage/categories/category_cy_helper.pyx +322 -0
- sage/categories/category_singleton.cp312-win_amd64.pyd +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 +2885 -0
- sage/categories/covariant_functorial_construction.py +703 -0
- sage/categories/facade_sets.py +228 -0
- sage/categories/functor.cp312-win_amd64.pyd +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.cp312-win_amd64.pyd +0 -0
- sage/categories/map.pxd +34 -0
- sage/categories/map.pyx +2112 -0
- sage/categories/morphism.cp312-win_amd64.pyd +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 +3228 -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 +28 -0
- sage/cpython/_py2_random.py +619 -0
- sage/cpython/all.py +3 -0
- sage/cpython/atexit.cp312-win_amd64.pyd +0 -0
- sage/cpython/atexit.pyx +269 -0
- sage/cpython/builtin_types.cp312-win_amd64.pyd +0 -0
- sage/cpython/builtin_types.pyx +7 -0
- sage/cpython/cython_metaclass.cp312-win_amd64.pyd +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.cp312-win_amd64.pyd +0 -0
- sage/cpython/debug.pyx +302 -0
- sage/cpython/dict_del_by_value.cp312-win_amd64.pyd +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.cp312-win_amd64.pyd +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.cp312-win_amd64.pyd +0 -0
- sage/cpython/string.pxd +76 -0
- sage/cpython/string.pyx +34 -0
- sage/cpython/string_impl.h +60 -0
- sage/cpython/type.cp312-win_amd64.pyd +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.cp312-win_amd64.pyd +0 -0
- sage/groups/group.pxd +14 -0
- sage/groups/group.pyx +322 -0
- sage/groups/old.cp312-win_amd64.pyd +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.cp312-win_amd64.pyd +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.cp312-win_amd64.pyd +0 -0
- sage/misc/c3_controlled.pxd +2 -0
- sage/misc/c3_controlled.pyx +1402 -0
- sage/misc/cachefunc.cp312-win_amd64.pyd +0 -0
- sage/misc/cachefunc.pxd +43 -0
- sage/misc/cachefunc.pyx +3781 -0
- sage/misc/call.py +188 -0
- sage/misc/classcall_metaclass.cp312-win_amd64.pyd +0 -0
- sage/misc/classcall_metaclass.pxd +14 -0
- sage/misc/classcall_metaclass.pyx +599 -0
- sage/misc/constant_function.cp312-win_amd64.pyd +0 -0
- sage/misc/constant_function.pyx +130 -0
- sage/misc/decorators.py +747 -0
- sage/misc/fast_methods.cp312-win_amd64.pyd +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.cp312-win_amd64.pyd +0 -0
- sage/misc/fpickle.pyx +177 -0
- sage/misc/function_mangling.cp312-win_amd64.pyd +0 -0
- sage/misc/function_mangling.pxd +11 -0
- sage/misc/function_mangling.pyx +308 -0
- sage/misc/inherit_comparison.cp312-win_amd64.pyd +0 -0
- sage/misc/inherit_comparison.pxd +5 -0
- sage/misc/inherit_comparison.pyx +105 -0
- sage/misc/instancedoc.cp312-win_amd64.pyd +0 -0
- sage/misc/instancedoc.pyx +331 -0
- sage/misc/lazy_attribute.cp312-win_amd64.pyd +0 -0
- sage/misc/lazy_attribute.pyx +607 -0
- sage/misc/lazy_format.py +135 -0
- sage/misc/lazy_import.cp312-win_amd64.pyd +0 -0
- sage/misc/lazy_import.pyx +1299 -0
- sage/misc/lazy_import_cache.py +36 -0
- sage/misc/lazy_list.cp312-win_amd64.pyd +0 -0
- sage/misc/lazy_list.pxd +19 -0
- sage/misc/lazy_list.pyx +1187 -0
- sage/misc/lazy_string.cp312-win_amd64.pyd +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.cp312-win_amd64.pyd +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.cp312-win_amd64.pyd +0 -0
- sage/misc/nested_class.pxd +3 -0
- sage/misc/nested_class.pyx +394 -0
- sage/misc/persist.cp312-win_amd64.pyd +0 -0
- sage/misc/persist.pyx +1251 -0
- sage/misc/prandom.py +418 -0
- sage/misc/randstate.cp312-win_amd64.pyd +0 -0
- sage/misc/randstate.pxd +30 -0
- sage/misc/randstate.pyx +1059 -0
- sage/misc/repr.py +203 -0
- sage/misc/reset.cp312-win_amd64.pyd +0 -0
- sage/misc/reset.pyx +196 -0
- sage/misc/sage_ostools.cp312-win_amd64.pyd +0 -0
- sage/misc/sage_ostools.pyx +323 -0
- sage/misc/sage_timeit.py +276 -0
- sage/misc/sage_timeit_class.cp312-win_amd64.pyd +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.cp312-win_amd64.pyd +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.cp312-win_amd64.pyd +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.cp312-win_amd64.pyd +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.cp312-win_amd64.pyd +0 -0
- sage/sets/pythonclass.pxd +9 -0
- sage/sets/pythonclass.pyx +247 -0
- sage/structure/__init__.py +13 -0
- sage/structure/all.py +30 -0
- sage/structure/category_object.cp312-win_amd64.pyd +0 -0
- sage/structure/category_object.pxd +28 -0
- sage/structure/category_object.pyx +1087 -0
- sage/structure/coerce.cp312-win_amd64.pyd +0 -0
- sage/structure/coerce.pxd +44 -0
- sage/structure/coerce.pyx +2107 -0
- sage/structure/coerce_actions.cp312-win_amd64.pyd +0 -0
- sage/structure/coerce_actions.pxd +27 -0
- sage/structure/coerce_actions.pyx +988 -0
- sage/structure/coerce_dict.cp312-win_amd64.pyd +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.cp312-win_amd64.pyd +0 -0
- sage/structure/coerce_maps.pxd +28 -0
- sage/structure/coerce_maps.pyx +718 -0
- sage/structure/debug_options.cp312-win_amd64.pyd +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.cp312-win_amd64.pyd +0 -0
- sage/structure/element.pxd +272 -0
- sage/structure/element.pyx +4772 -0
- sage/structure/element_wrapper.cp312-win_amd64.pyd +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.cp312-win_amd64.pyd +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.cp312-win_amd64.pyd +0 -0
- sage/structure/list_clone.pxd +65 -0
- sage/structure/list_clone.pyx +1867 -0
- sage/structure/list_clone_demo.cp312-win_amd64.pyd +0 -0
- sage/structure/list_clone_demo.pyx +248 -0
- sage/structure/list_clone_timings.py +179 -0
- sage/structure/list_clone_timings_cy.cp312-win_amd64.pyd +0 -0
- sage/structure/list_clone_timings_cy.pyx +86 -0
- sage/structure/mutability.cp312-win_amd64.pyd +0 -0
- sage/structure/mutability.pxd +21 -0
- sage/structure/mutability.pyx +348 -0
- sage/structure/nonexact.py +69 -0
- sage/structure/parent.cp312-win_amd64.pyd +0 -0
- sage/structure/parent.pxd +112 -0
- sage/structure/parent.pyx +3093 -0
- sage/structure/parent_base.cp312-win_amd64.pyd +0 -0
- sage/structure/parent_base.pxd +13 -0
- sage/structure/parent_base.pyx +44 -0
- sage/structure/parent_gens.cp312-win_amd64.pyd +0 -0
- sage/structure/parent_gens.pxd +22 -0
- sage/structure/parent_gens.pyx +377 -0
- sage/structure/parent_old.cp312-win_amd64.pyd +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.cp312-win_amd64.pyd +0 -0
- sage/structure/richcmp.pxd +213 -0
- sage/structure/richcmp.pyx +495 -0
- sage/structure/sage_object.cp312-win_amd64.pyd +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
sage/misc/call.py
ADDED
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-objects
|
|
2
|
+
"""
|
|
3
|
+
Attribute and method calling
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
# ****************************************************************************
|
|
7
|
+
# Copyright (C) 2008 Mike Hansen
|
|
8
|
+
# Copyright (C) 2010, 2013 Nicolas M. Thiery
|
|
9
|
+
# Copyright (C) 2018 Frédéric Chapoton
|
|
10
|
+
#
|
|
11
|
+
# This program is free software: you can redistribute it and/or modify
|
|
12
|
+
# it under the terms of the GNU General Public License as published by
|
|
13
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
14
|
+
# (at your option) any later version.
|
|
15
|
+
# https://www.gnu.org/licenses/
|
|
16
|
+
# ****************************************************************************
|
|
17
|
+
|
|
18
|
+
#############################################
|
|
19
|
+
# Operators
|
|
20
|
+
#############################################
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class AttrCallObject:
|
|
24
|
+
def __init__(self, name, args, kwds):
|
|
25
|
+
"""
|
|
26
|
+
TESTS::
|
|
27
|
+
|
|
28
|
+
sage: f = attrcall('core', 3); f
|
|
29
|
+
*.core(3)
|
|
30
|
+
sage: TestSuite(f).run()
|
|
31
|
+
"""
|
|
32
|
+
self.name = name
|
|
33
|
+
self.args = args
|
|
34
|
+
self.kwds = kwds
|
|
35
|
+
|
|
36
|
+
def __call__(self, x, *args):
|
|
37
|
+
"""
|
|
38
|
+
Get the ``self.name`` method from ``x``, calls it with
|
|
39
|
+
``self.args`` and ``args`` as positional parameters and
|
|
40
|
+
``self.kwds`` as keyword parameters, and returns the result.
|
|
41
|
+
|
|
42
|
+
EXAMPLES::
|
|
43
|
+
|
|
44
|
+
sage: core = attrcall('core', 3)
|
|
45
|
+
sage: core(Partition([4,2]))
|
|
46
|
+
[4, 2]
|
|
47
|
+
|
|
48
|
+
sage: series = attrcall('series', x) # needs sage.symbolic
|
|
49
|
+
sage: series(sin(x), 4) # needs sage.symbolic
|
|
50
|
+
1*x + (-1/6)*x^3 + Order(x^4)
|
|
51
|
+
"""
|
|
52
|
+
return getattr(x, self.name)(*(self.args + args), **self.kwds)
|
|
53
|
+
|
|
54
|
+
def __repr__(self):
|
|
55
|
+
"""
|
|
56
|
+
Return a string representation of this object.
|
|
57
|
+
|
|
58
|
+
The star in the output represents the object passed into ``self``.
|
|
59
|
+
|
|
60
|
+
EXAMPLES::
|
|
61
|
+
|
|
62
|
+
sage: attrcall('core', 3)
|
|
63
|
+
*.core(3)
|
|
64
|
+
sage: attrcall('hooks', flatten=True)
|
|
65
|
+
*.hooks(flatten=True)
|
|
66
|
+
sage: attrcall('hooks', 3, flatten=True)
|
|
67
|
+
*.hooks(3, flatten=True)
|
|
68
|
+
"""
|
|
69
|
+
s = "*.%s(%s" % (self.name, ", ".join(map(repr, self.args)))
|
|
70
|
+
if self.kwds:
|
|
71
|
+
if self.args:
|
|
72
|
+
s += ", "
|
|
73
|
+
s += ", ".join("%s=%s" % keyvalue for keyvalue in self.kwds.items())
|
|
74
|
+
s += ")"
|
|
75
|
+
return s
|
|
76
|
+
|
|
77
|
+
def __eq__(self, other):
|
|
78
|
+
"""
|
|
79
|
+
Equality testing.
|
|
80
|
+
|
|
81
|
+
EXAMPLES::
|
|
82
|
+
|
|
83
|
+
sage: attrcall('core', 3, flatten = True) == attrcall('core', 3, flatten = True)
|
|
84
|
+
True
|
|
85
|
+
sage: attrcall('core', 2) == attrcall('core', 3)
|
|
86
|
+
False
|
|
87
|
+
sage: attrcall('core', 2) == 1
|
|
88
|
+
False
|
|
89
|
+
"""
|
|
90
|
+
return self.__class__ == other.__class__ and self.__dict__ == other.__dict__
|
|
91
|
+
|
|
92
|
+
def __ne__(self, other):
|
|
93
|
+
"""
|
|
94
|
+
Equality testing.
|
|
95
|
+
|
|
96
|
+
EXAMPLES::
|
|
97
|
+
|
|
98
|
+
sage: attrcall('core', 3, flatten = True) != attrcall('core', 3, flatten = True)
|
|
99
|
+
False
|
|
100
|
+
sage: attrcall('core', 2) != attrcall('core', 3)
|
|
101
|
+
True
|
|
102
|
+
sage: attrcall('core', 2) != 1
|
|
103
|
+
True
|
|
104
|
+
"""
|
|
105
|
+
return not self == other
|
|
106
|
+
|
|
107
|
+
def __hash__(self):
|
|
108
|
+
"""
|
|
109
|
+
Hash value.
|
|
110
|
+
|
|
111
|
+
This method tries to ensure that, when two ``attrcall``
|
|
112
|
+
objects are equal, they have the same hash value.
|
|
113
|
+
|
|
114
|
+
.. warning::
|
|
115
|
+
|
|
116
|
+
dicts are not hashable, so we instead hash their
|
|
117
|
+
items; however the order of those items might differ. The
|
|
118
|
+
proper fix would be to use a frozen dict for ``kwds``, when
|
|
119
|
+
frozen dicts will be available in Python.
|
|
120
|
+
|
|
121
|
+
EXAMPLES::
|
|
122
|
+
|
|
123
|
+
sage: x = attrcall('core', 3, flatten = True, blah = 1)
|
|
124
|
+
sage: hash(x) # random # indirect doctest
|
|
125
|
+
210434060
|
|
126
|
+
sage: type(hash(x))
|
|
127
|
+
<class 'int'>
|
|
128
|
+
sage: y = attrcall('core', 3, blah = 1, flatten = True)
|
|
129
|
+
sage: hash(y) == hash(x)
|
|
130
|
+
True
|
|
131
|
+
sage: y = attrcall('core', 3, flatten = True, blah = 2)
|
|
132
|
+
sage: hash(y) != hash(x)
|
|
133
|
+
True
|
|
134
|
+
sage: hash(attrcall('core', 2)) != hash(attrcall('core', 3))
|
|
135
|
+
True
|
|
136
|
+
sage: hash(attrcall('core', 2)) != hash(1)
|
|
137
|
+
True
|
|
138
|
+
|
|
139
|
+
Note: a missing ``__hash__`` method here used to break the
|
|
140
|
+
unique representation of parents taking ``attrcall`` objects
|
|
141
|
+
as input; see :issue:`8911`.
|
|
142
|
+
"""
|
|
143
|
+
return hash((self.args, tuple(sorted(self.kwds.items()))))
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
def attrcall(name, *args, **kwds):
|
|
147
|
+
"""
|
|
148
|
+
Return a callable which takes in an object, gets the method named
|
|
149
|
+
name from that object, and calls it with the specified arguments
|
|
150
|
+
and keywords.
|
|
151
|
+
|
|
152
|
+
INPUT:
|
|
153
|
+
|
|
154
|
+
- ``name`` -- string of the name of the method you
|
|
155
|
+
want to call
|
|
156
|
+
|
|
157
|
+
- ``args, kwds`` -- arguments and keywords to be passed
|
|
158
|
+
to the method
|
|
159
|
+
|
|
160
|
+
EXAMPLES::
|
|
161
|
+
|
|
162
|
+
sage: f = attrcall('core', 3); f
|
|
163
|
+
*.core(3)
|
|
164
|
+
sage: [f(p) for p in Partitions(5)]
|
|
165
|
+
[[2], [1, 1], [1, 1], [3, 1, 1], [2], [2], [1, 1]]
|
|
166
|
+
"""
|
|
167
|
+
return AttrCallObject(name, args, kwds)
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
def call_method(obj, name, *args, **kwds):
|
|
171
|
+
"""
|
|
172
|
+
Call the method ``name`` on ``obj``.
|
|
173
|
+
|
|
174
|
+
This has to exist somewhere in Python!!!
|
|
175
|
+
|
|
176
|
+
.. SEEALSO:: :func:`operator.methodcaller` :func:`attrcal`
|
|
177
|
+
|
|
178
|
+
EXAMPLES::
|
|
179
|
+
|
|
180
|
+
sage: from sage.misc.call import call_method
|
|
181
|
+
sage: call_method(1, "__add__", 2)
|
|
182
|
+
3
|
|
183
|
+
"""
|
|
184
|
+
return getattr(obj, name)(*args, **kwds)
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
from sage.misc.persist import register_unpickle_override
|
|
188
|
+
register_unpickle_override("sage.misc.misc", "call_method", call_method)
|
|
Binary file
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-objects
|
|
2
|
+
# ****************************************************************************
|
|
3
|
+
# Copyright (C) 2012 Florent Hivert <Florent.Hivert at lri.fr>
|
|
4
|
+
#
|
|
5
|
+
# Distributed under the terms of the GNU General Public License (GPL)
|
|
6
|
+
# https://www.gnu.org/licenses/
|
|
7
|
+
# ****************************************************************************
|
|
8
|
+
|
|
9
|
+
from sage.misc.nested_class cimport NestedClassMetaclass
|
|
10
|
+
|
|
11
|
+
cdef class ClasscallMetaclass(NestedClassMetaclass):
|
|
12
|
+
cdef object classcall
|
|
13
|
+
cdef object classget
|
|
14
|
+
cdef object classcontains
|