passagemath-ntl 10.6.33__cp313-cp313-musllinux_1_2_x86_64.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.
Potentially problematic release.
This version of passagemath-ntl might be problematic. Click here for more details.
- passagemath_ntl-10.6.33.dist-info/METADATA +122 -0
- passagemath_ntl-10.6.33.dist-info/RECORD +163 -0
- passagemath_ntl-10.6.33.dist-info/WHEEL +5 -0
- passagemath_ntl-10.6.33.dist-info/top_level.txt +2 -0
- passagemath_ntl.libs/libgcc_s-0cd532bd.so.1 +0 -0
- passagemath_ntl.libs/libgf2x-9e30c3e3.so.3.0.0 +0 -0
- passagemath_ntl.libs/libgmp-0e7fc84e.so.10.5.0 +0 -0
- passagemath_ntl.libs/libmpfi-2153e8c2.so.0.0.0 +0 -0
- passagemath_ntl.libs/libmpfr-aaecbfc0.so.6.2.1 +0 -0
- passagemath_ntl.libs/libntl-26885ca2.so.44.0.1 +0 -0
- passagemath_ntl.libs/libstdc++-5d72f927.so.6.0.33 +0 -0
- sage/all__sagemath_ntl.py +7 -0
- sage/libs/all__sagemath_ntl.py +3 -0
- sage/libs/mpfi/__init__.pxd +287 -0
- sage/libs/mpfi/types.pxd +10 -0
- sage/libs/ntl/GF2.pxd +18 -0
- sage/libs/ntl/GF2E.pxd +28 -0
- sage/libs/ntl/GF2EX.pxd +12 -0
- sage/libs/ntl/GF2X.pxd +81 -0
- sage/libs/ntl/ZZ.pxd +93 -0
- sage/libs/ntl/ZZX.pxd +85 -0
- sage/libs/ntl/ZZ_p.pxd +28 -0
- sage/libs/ntl/ZZ_pE.pxd +37 -0
- sage/libs/ntl/ZZ_pEX.pxd +106 -0
- sage/libs/ntl/ZZ_pX.pxd +122 -0
- sage/libs/ntl/__init__.py +4 -0
- sage/libs/ntl/all.py +72 -0
- sage/libs/ntl/conversion.pxd +106 -0
- sage/libs/ntl/convert.cpython-313-x86_64-linux-musl.so +0 -0
- sage/libs/ntl/convert.pxd +7 -0
- sage/libs/ntl/convert.pyx +38 -0
- sage/libs/ntl/decl.pxi +18 -0
- sage/libs/ntl/error.cpython-313-x86_64-linux-musl.so +0 -0
- sage/libs/ntl/error.pyx +63 -0
- sage/libs/ntl/lzz_p.pxd +20 -0
- sage/libs/ntl/lzz_pX.pxd +59 -0
- sage/libs/ntl/mat_GF2.pxd +30 -0
- sage/libs/ntl/mat_GF2E.pxd +30 -0
- sage/libs/ntl/mat_ZZ.pxd +59 -0
- sage/libs/ntl/misc.pxi +33 -0
- sage/libs/ntl/ntl_GF2.cpython-313-x86_64-linux-musl.so +0 -0
- sage/libs/ntl/ntl_GF2.pxd +5 -0
- sage/libs/ntl/ntl_GF2.pyx +281 -0
- sage/libs/ntl/ntl_GF2E.cpython-313-x86_64-linux-musl.so +0 -0
- sage/libs/ntl/ntl_GF2E.pxd +8 -0
- sage/libs/ntl/ntl_GF2E.pyx +488 -0
- sage/libs/ntl/ntl_GF2EContext.cpython-313-x86_64-linux-musl.so +0 -0
- sage/libs/ntl/ntl_GF2EContext.pxd +9 -0
- sage/libs/ntl/ntl_GF2EContext.pyx +134 -0
- sage/libs/ntl/ntl_GF2EX.cpython-313-x86_64-linux-musl.so +0 -0
- sage/libs/ntl/ntl_GF2EX.pxd +10 -0
- sage/libs/ntl/ntl_GF2EX.pyx +251 -0
- sage/libs/ntl/ntl_GF2X.cpython-313-x86_64-linux-musl.so +0 -0
- sage/libs/ntl/ntl_GF2X.pxd +5 -0
- sage/libs/ntl/ntl_GF2X.pyx +771 -0
- sage/libs/ntl/ntl_GF2X_linkage.pxi +404 -0
- sage/libs/ntl/ntl_ZZ.cpython-313-x86_64-linux-musl.so +0 -0
- sage/libs/ntl/ntl_ZZ.pxd +7 -0
- sage/libs/ntl/ntl_ZZ.pyx +541 -0
- sage/libs/ntl/ntl_ZZX.cpython-313-x86_64-linux-musl.so +0 -0
- sage/libs/ntl/ntl_ZZX.pxd +7 -0
- sage/libs/ntl/ntl_ZZX.pyx +1206 -0
- sage/libs/ntl/ntl_ZZ_p.cpython-313-x86_64-linux-musl.so +0 -0
- sage/libs/ntl/ntl_ZZ_p.pxd +10 -0
- sage/libs/ntl/ntl_ZZ_p.pyx +509 -0
- sage/libs/ntl/ntl_ZZ_pContext.cpython-313-x86_64-linux-musl.so +0 -0
- sage/libs/ntl/ntl_ZZ_pContext.pxd +22 -0
- sage/libs/ntl/ntl_ZZ_pContext.pyx +201 -0
- sage/libs/ntl/ntl_ZZ_pE.cpython-313-x86_64-linux-musl.so +0 -0
- sage/libs/ntl/ntl_ZZ_pE.pxd +11 -0
- sage/libs/ntl/ntl_ZZ_pE.pyx +349 -0
- sage/libs/ntl/ntl_ZZ_pEContext.cpython-313-x86_64-linux-musl.so +0 -0
- sage/libs/ntl/ntl_ZZ_pEContext.pxd +23 -0
- sage/libs/ntl/ntl_ZZ_pEContext.pyx +226 -0
- sage/libs/ntl/ntl_ZZ_pEX.cpython-313-x86_64-linux-musl.so +0 -0
- sage/libs/ntl/ntl_ZZ_pEX.pxd +10 -0
- sage/libs/ntl/ntl_ZZ_pEX.pyx +1255 -0
- sage/libs/ntl/ntl_ZZ_pEX_linkage.pxi +420 -0
- sage/libs/ntl/ntl_ZZ_pX.cpython-313-x86_64-linux-musl.so +0 -0
- sage/libs/ntl/ntl_ZZ_pX.pxd +17 -0
- sage/libs/ntl/ntl_ZZ_pX.pyx +1532 -0
- sage/libs/ntl/ntl_lzz_p.cpython-313-x86_64-linux-musl.so +0 -0
- sage/libs/ntl/ntl_lzz_p.pxd +8 -0
- sage/libs/ntl/ntl_lzz_p.pyx +440 -0
- sage/libs/ntl/ntl_lzz_pContext.cpython-313-x86_64-linux-musl.so +0 -0
- sage/libs/ntl/ntl_lzz_pContext.pxd +7 -0
- sage/libs/ntl/ntl_lzz_pContext.pyx +137 -0
- sage/libs/ntl/ntl_lzz_pX.cpython-313-x86_64-linux-musl.so +0 -0
- sage/libs/ntl/ntl_lzz_pX.pxd +10 -0
- sage/libs/ntl/ntl_lzz_pX.pyx +902 -0
- sage/libs/ntl/ntl_mat_GF2.cpython-313-x86_64-linux-musl.so +0 -0
- sage/libs/ntl/ntl_mat_GF2.pxd +8 -0
- sage/libs/ntl/ntl_mat_GF2.pyx +612 -0
- sage/libs/ntl/ntl_mat_GF2E.cpython-313-x86_64-linux-musl.so +0 -0
- sage/libs/ntl/ntl_mat_GF2E.pxd +10 -0
- sage/libs/ntl/ntl_mat_GF2E.pyx +752 -0
- sage/libs/ntl/ntl_mat_ZZ.cpython-313-x86_64-linux-musl.so +0 -0
- sage/libs/ntl/ntl_mat_ZZ.pxd +6 -0
- sage/libs/ntl/ntl_mat_ZZ.pyx +1523 -0
- sage/libs/ntl/ntl_tools.pxd +3 -0
- sage/libs/ntl/ntlwrap.h +53 -0
- sage/libs/ntl/ntlwrap_impl.h +743 -0
- sage/libs/ntl/types.pxd +157 -0
- sage/libs/ntl/vec_GF2.pxd +26 -0
- sage/libs/ntl/vec_GF2E.pxd +2 -0
- sage/matrix/all__sagemath_ntl.py +1 -0
- sage/matrix/matrix_modn_dense_double.pxd +10 -0
- sage/matrix/matrix_modn_dense_float.pxd +9 -0
- sage/matrix/matrix_modn_dense_template.pxi +3257 -0
- sage/matrix/matrix_modn_dense_template_header.pxi +15 -0
- sage/matrix/matrix_modn_sparse.pxd +8 -0
- sage/misc/all__sagemath_ntl.py +1 -0
- sage/rings/all__sagemath_ntl.py +7 -0
- sage/rings/bernmm.cpython-313-x86_64-linux-musl.so +0 -0
- sage/rings/bernmm.pyx +161 -0
- sage/rings/bernoulli_mod_p.cpython-313-x86_64-linux-musl.so +0 -0
- sage/rings/bernoulli_mod_p.pyx +313 -0
- sage/rings/finite_rings/all__sagemath_ntl.py +1 -0
- sage/rings/finite_rings/finite_field_ntl_gf2e.py +305 -0
- sage/rings/finite_rings/residue_field_ntl_gf2e.cpython-313-x86_64-linux-musl.so +0 -0
- sage/rings/finite_rings/residue_field_ntl_gf2e.pyx +140 -0
- sage/rings/padics/all__sagemath_ntl.py +5 -0
- sage/rings/padics/padic_ZZ_pX_CA_element.cpython-313-x86_64-linux-musl.so +0 -0
- sage/rings/padics/padic_ZZ_pX_CA_element.pxd +25 -0
- sage/rings/padics/padic_ZZ_pX_CA_element.pyx +2368 -0
- sage/rings/padics/padic_ZZ_pX_CR_element.cpython-313-x86_64-linux-musl.so +0 -0
- sage/rings/padics/padic_ZZ_pX_CR_element.pxd +33 -0
- sage/rings/padics/padic_ZZ_pX_CR_element.pyx +3277 -0
- sage/rings/padics/padic_ZZ_pX_FM_element.cpython-313-x86_64-linux-musl.so +0 -0
- sage/rings/padics/padic_ZZ_pX_FM_element.pxd +12 -0
- sage/rings/padics/padic_ZZ_pX_FM_element.pyx +1739 -0
- sage/rings/padics/padic_ZZ_pX_element.cpython-313-x86_64-linux-musl.so +0 -0
- sage/rings/padics/padic_ZZ_pX_element.pxd +6 -0
- sage/rings/padics/padic_ZZ_pX_element.pyx +919 -0
- sage/rings/padics/padic_ext_element.cpython-313-x86_64-linux-musl.so +0 -0
- sage/rings/padics/padic_ext_element.pxd +38 -0
- sage/rings/padics/padic_ext_element.pyx +512 -0
- sage/rings/padics/pow_computer_ext.cpython-313-x86_64-linux-musl.so +0 -0
- sage/rings/padics/pow_computer_ext.pxd +107 -0
- sage/rings/padics/pow_computer_ext.pyx +2401 -0
- sage/rings/polynomial/all__sagemath_ntl.py +1 -0
- sage/rings/polynomial/evaluation_ntl.cpython-313-x86_64-linux-musl.so +0 -0
- sage/rings/polynomial/evaluation_ntl.pxd +7 -0
- sage/rings/polynomial/evaluation_ntl.pyx +70 -0
- sage/rings/polynomial/polynomial_gf2x.cpython-313-x86_64-linux-musl.so +0 -0
- sage/rings/polynomial/polynomial_gf2x.pxd +10 -0
- sage/rings/polynomial/polynomial_gf2x.pyx +364 -0
- sage/rings/polynomial/polynomial_integer_dense_ntl.cpython-313-x86_64-linux-musl.so +0 -0
- sage/rings/polynomial/polynomial_integer_dense_ntl.pxd +8 -0
- sage/rings/polynomial/polynomial_integer_dense_ntl.pyx +1128 -0
- sage/rings/polynomial/polynomial_modn_dense_ntl.cpython-313-x86_64-linux-musl.so +0 -0
- sage/rings/polynomial/polynomial_modn_dense_ntl.pxd +36 -0
- sage/rings/polynomial/polynomial_modn_dense_ntl.pyx +2049 -0
- sage/rings/polynomial/polynomial_template.pxi +842 -0
- sage/rings/polynomial/polynomial_template_header.pxi +11 -0
- sage/rings/polynomial/polynomial_zz_pex.cpython-313-x86_64-linux-musl.so +0 -0
- sage/rings/polynomial/polynomial_zz_pex.pxd +12 -0
- sage/rings/polynomial/polynomial_zz_pex.pyx +778 -0
- sage/rings/real_mpfi.pxd +50 -0
- sage/schemes/all__sagemath_ntl.py +1 -0
- sage/schemes/hyperelliptic_curves/all__sagemath_ntl.py +1 -0
- sage/schemes/hyperelliptic_curves/hypellfrob.cpython-313-x86_64-linux-musl.so +0 -0
- sage/schemes/hyperelliptic_curves/hypellfrob.pyx +252 -0
|
@@ -0,0 +1,404 @@
|
|
|
1
|
+
# sage_setup: distribution = sagemath-ntl
|
|
2
|
+
r"""
|
|
3
|
+
Linkage for arithmetic with NTL's GF2X elements.
|
|
4
|
+
|
|
5
|
+
This file provides the backend for \class{Polynomial_GF2X} via
|
|
6
|
+
templating.
|
|
7
|
+
|
|
8
|
+
AUTHOR:
|
|
9
|
+
-- Martin Albrecht (2008-10): initial version
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
#*****************************************************************************
|
|
13
|
+
# Copyright (C) 2008 Martin Albrecht <M.R.Albrecht@rhul.ac.uk>
|
|
14
|
+
#
|
|
15
|
+
# This program is free software: you can redistribute it and/or modify
|
|
16
|
+
# it under the terms of the GNU General Public License as published by
|
|
17
|
+
# the Free Software Foundation, either version 2 of the License, or
|
|
18
|
+
# (at your option) any later version.
|
|
19
|
+
# http://www.gnu.org/licenses/
|
|
20
|
+
#*****************************************************************************
|
|
21
|
+
|
|
22
|
+
from cysignals.signals cimport sig_on, sig_off
|
|
23
|
+
|
|
24
|
+
from sage.libs.ntl.GF2 cimport *
|
|
25
|
+
from sage.libs.ntl.GF2X cimport *
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
cdef GF2X_c *celement_new(long parent) noexcept:
|
|
29
|
+
"""
|
|
30
|
+
EXAMPLES::
|
|
31
|
+
|
|
32
|
+
sage: P.<x> = GF(2)[]
|
|
33
|
+
"""
|
|
34
|
+
return new GF2X_c()
|
|
35
|
+
|
|
36
|
+
cdef int celement_delete(GF2X_c *e, long parent) noexcept:
|
|
37
|
+
"""
|
|
38
|
+
EXAMPLES::
|
|
39
|
+
|
|
40
|
+
sage: P.<x> = GF(2)[]
|
|
41
|
+
sage: del x
|
|
42
|
+
"""
|
|
43
|
+
del e
|
|
44
|
+
|
|
45
|
+
cdef int celement_construct(GF2X_c *e, long parent) noexcept:
|
|
46
|
+
"""
|
|
47
|
+
EXAMPLES::
|
|
48
|
+
|
|
49
|
+
sage: P.<x> = GF(2)[]
|
|
50
|
+
"""
|
|
51
|
+
pass
|
|
52
|
+
|
|
53
|
+
cdef int celement_destruct(GF2X_c *e, long parent) noexcept:
|
|
54
|
+
"""
|
|
55
|
+
EXAMPLES::
|
|
56
|
+
|
|
57
|
+
sage: P.<x> = GF(2)[]
|
|
58
|
+
sage: del x
|
|
59
|
+
"""
|
|
60
|
+
pass
|
|
61
|
+
|
|
62
|
+
cdef int celement_gen(GF2X_c *e, long i, long parent) except -2:
|
|
63
|
+
"""
|
|
64
|
+
EXAMPLES::
|
|
65
|
+
|
|
66
|
+
sage: P.<x> = GF(2)[]
|
|
67
|
+
"""
|
|
68
|
+
cdef unsigned char g = 2
|
|
69
|
+
GF2XFromBytes(e[0], <unsigned char *>(&g), 1)
|
|
70
|
+
|
|
71
|
+
cdef object celement_repr(GF2X_c *e, long parent):
|
|
72
|
+
"""
|
|
73
|
+
We ignore NTL's printing.
|
|
74
|
+
|
|
75
|
+
EXAMPLES::
|
|
76
|
+
|
|
77
|
+
sage: P.<x> = GF(2)[]
|
|
78
|
+
sage: x
|
|
79
|
+
x
|
|
80
|
+
"""
|
|
81
|
+
raise NotImplementedError
|
|
82
|
+
|
|
83
|
+
cdef inline int celement_set(GF2X_c* res, GF2X_c* a, long parent) except -2:
|
|
84
|
+
"""
|
|
85
|
+
EXAMPLES::
|
|
86
|
+
|
|
87
|
+
sage: P.<x> = GF(2)[]
|
|
88
|
+
sage: y = x; y
|
|
89
|
+
x
|
|
90
|
+
"""
|
|
91
|
+
res[0] = a[0]
|
|
92
|
+
|
|
93
|
+
cdef inline int celement_set_si(GF2X_c* res, long i, long parent) except -2:
|
|
94
|
+
"""
|
|
95
|
+
EXAMPLES::
|
|
96
|
+
|
|
97
|
+
sage: P.<x> = GF(2)[]
|
|
98
|
+
sage: P(0)
|
|
99
|
+
0
|
|
100
|
+
sage: P(2)
|
|
101
|
+
0
|
|
102
|
+
sage: P(1)
|
|
103
|
+
1
|
|
104
|
+
"""
|
|
105
|
+
GF2X_conv_long(res[0], i)
|
|
106
|
+
|
|
107
|
+
cdef inline long celement_get_si(GF2X_c* res, long parent) except -2:
|
|
108
|
+
raise NotImplementedError
|
|
109
|
+
|
|
110
|
+
cdef inline bint celement_is_zero(GF2X_c* a, long parent) except -2:
|
|
111
|
+
"""
|
|
112
|
+
EXAMPLES::
|
|
113
|
+
|
|
114
|
+
sage: P.<x> = GF(2)[]
|
|
115
|
+
sage: bool(x), x.is_zero()
|
|
116
|
+
(True, False)
|
|
117
|
+
sage: bool(P(0)), P(0).is_zero()
|
|
118
|
+
(False, True)
|
|
119
|
+
"""
|
|
120
|
+
return GF2X_IsZero(a[0])
|
|
121
|
+
|
|
122
|
+
cdef inline bint celement_is_one(GF2X_c *a, long parent) except -2:
|
|
123
|
+
"""
|
|
124
|
+
EXAMPLES::
|
|
125
|
+
|
|
126
|
+
sage: P.<x> = GF(2)[]
|
|
127
|
+
sage: x.is_one()
|
|
128
|
+
False
|
|
129
|
+
sage: P(1).is_one()
|
|
130
|
+
True
|
|
131
|
+
"""
|
|
132
|
+
return GF2X_IsOne(a[0])
|
|
133
|
+
|
|
134
|
+
cdef inline bint celement_equal(GF2X_c *a, GF2X_c *b, long parent) except -2:
|
|
135
|
+
"""
|
|
136
|
+
EXAMPLES::
|
|
137
|
+
|
|
138
|
+
sage: P.<x> = GF(2)[]
|
|
139
|
+
sage: x == x
|
|
140
|
+
True
|
|
141
|
+
sage: y = x; x == y
|
|
142
|
+
True
|
|
143
|
+
sage: x^2 + 1 == x^2 + x
|
|
144
|
+
False
|
|
145
|
+
"""
|
|
146
|
+
return a[0] == b[0]
|
|
147
|
+
|
|
148
|
+
cdef inline int celement_cmp(GF2X_c *a, GF2X_c *b, long parent) except -2:
|
|
149
|
+
"""
|
|
150
|
+
EXAMPLES::
|
|
151
|
+
|
|
152
|
+
sage: P.<x> = GF(2)[]
|
|
153
|
+
sage: x != 1
|
|
154
|
+
True
|
|
155
|
+
sage: x < 1
|
|
156
|
+
False
|
|
157
|
+
sage: x > 1
|
|
158
|
+
True
|
|
159
|
+
|
|
160
|
+
sage: f = x^64 + x^20 + 1
|
|
161
|
+
sage: g = x^63 + x^20 + 1
|
|
162
|
+
sage: f > g
|
|
163
|
+
True
|
|
164
|
+
|
|
165
|
+
sage: f = x^64 + x^10 + 1
|
|
166
|
+
sage: g = x^64 + x^20 + 1
|
|
167
|
+
sage: f < g
|
|
168
|
+
True
|
|
169
|
+
|
|
170
|
+
sage: f = x^64 + x^20
|
|
171
|
+
sage: g = x^64 + x^20 + 1
|
|
172
|
+
sage: f < g
|
|
173
|
+
True
|
|
174
|
+
"""
|
|
175
|
+
cdef bint t
|
|
176
|
+
cdef long diff
|
|
177
|
+
cdef long ca, cb
|
|
178
|
+
diff = GF2X_NumBits(a[0]) - GF2X_NumBits(b[0])
|
|
179
|
+
if diff > 0:
|
|
180
|
+
return 1
|
|
181
|
+
elif diff < 0:
|
|
182
|
+
return -1
|
|
183
|
+
else:
|
|
184
|
+
for i in range(GF2X_NumBits(a[0])-1, -1, -1):
|
|
185
|
+
ca = GF2_conv_to_long(GF2X_coeff(a[0], i))
|
|
186
|
+
cb = GF2_conv_to_long(GF2X_coeff(b[0], i))
|
|
187
|
+
if ca < cb:
|
|
188
|
+
return -1
|
|
189
|
+
elif ca > cb:
|
|
190
|
+
return 1
|
|
191
|
+
return 0
|
|
192
|
+
|
|
193
|
+
cdef long celement_len(GF2X_c *a, long parent) except -2:
|
|
194
|
+
"""
|
|
195
|
+
EXAMPLES::
|
|
196
|
+
|
|
197
|
+
sage: P.<x> = GF(2)[]
|
|
198
|
+
sage: x.degree()
|
|
199
|
+
1
|
|
200
|
+
sage: (x+1).degree()
|
|
201
|
+
1
|
|
202
|
+
"""
|
|
203
|
+
return int(GF2X_NumBits(a[0]))
|
|
204
|
+
|
|
205
|
+
cdef inline int celement_add(GF2X_c *res, GF2X_c *a, GF2X_c *b, long parent) except -2:
|
|
206
|
+
"""
|
|
207
|
+
EXAMPLES::
|
|
208
|
+
|
|
209
|
+
sage: P.<x> = GF(2)[]
|
|
210
|
+
sage: x + 1
|
|
211
|
+
x + 1
|
|
212
|
+
"""
|
|
213
|
+
GF2X_add(res[0], a[0], b[0])
|
|
214
|
+
|
|
215
|
+
cdef inline int celement_sub(GF2X_c* res, GF2X_c* a, GF2X_c* b, long parent) except -2:
|
|
216
|
+
"""
|
|
217
|
+
EXAMPLES::
|
|
218
|
+
|
|
219
|
+
sage: P.<x> = GF(2)[]
|
|
220
|
+
sage: x - 1
|
|
221
|
+
x + 1
|
|
222
|
+
"""
|
|
223
|
+
GF2X_sub(res[0], a[0], b[0])
|
|
224
|
+
|
|
225
|
+
cdef inline int celement_neg(GF2X_c* res, GF2X_c* a, long parent) except -2:
|
|
226
|
+
"""
|
|
227
|
+
EXAMPLES::
|
|
228
|
+
|
|
229
|
+
sage: P.<x> = GF(2)[]
|
|
230
|
+
sage: -x
|
|
231
|
+
x
|
|
232
|
+
"""
|
|
233
|
+
res[0] = a[0]
|
|
234
|
+
|
|
235
|
+
cdef inline int celement_mul_scalar(GF2X_c* res, GF2X_c* p, object c,
|
|
236
|
+
long parent) except -1:
|
|
237
|
+
"""
|
|
238
|
+
TESTS::
|
|
239
|
+
|
|
240
|
+
sage: P.<x> = GF(2)[]
|
|
241
|
+
sage: p = P.random_element()
|
|
242
|
+
sage: 0*p
|
|
243
|
+
0
|
|
244
|
+
sage: 1*p == p
|
|
245
|
+
True
|
|
246
|
+
sage: (3^97)*p == p
|
|
247
|
+
True
|
|
248
|
+
"""
|
|
249
|
+
if int(c) == 0:
|
|
250
|
+
GF2X_conv_long(res[0], 0)
|
|
251
|
+
else:
|
|
252
|
+
res[0] = p[0]
|
|
253
|
+
|
|
254
|
+
cdef inline int celement_mul(GF2X_c* res, GF2X_c* a, GF2X_c* b, long parent) except -2:
|
|
255
|
+
"""
|
|
256
|
+
EXAMPLES::
|
|
257
|
+
|
|
258
|
+
sage: P.<x> = GF(2)[]
|
|
259
|
+
sage: x*(x+1)
|
|
260
|
+
x^2 + x
|
|
261
|
+
"""
|
|
262
|
+
GF2X_mul(res[0], a[0], b[0])
|
|
263
|
+
|
|
264
|
+
cdef inline int celement_truncate(GF2X_c* res, GF2X_c* a, long len, long parent) except -2:
|
|
265
|
+
"""
|
|
266
|
+
EXAMPLES::
|
|
267
|
+
|
|
268
|
+
sage: P.<x> = GF(2)[]
|
|
269
|
+
sage: p = x^5 + x^3 + x^2 + x + 1
|
|
270
|
+
sage: p.truncate(2) # indirect doctest
|
|
271
|
+
x + 1
|
|
272
|
+
"""
|
|
273
|
+
GF2X_trunc(res[0], a[0], len)
|
|
274
|
+
|
|
275
|
+
cdef inline int celement_div(GF2X_c* res, GF2X_c* a, GF2X_c* b, long parent) except -2:
|
|
276
|
+
"""
|
|
277
|
+
EXAMPLES::
|
|
278
|
+
|
|
279
|
+
sage: P.<x> = GF(2)[]
|
|
280
|
+
"""
|
|
281
|
+
return GF2X_divide(res[0], a[0], b[0])
|
|
282
|
+
|
|
283
|
+
cdef inline int celement_floordiv(GF2X_c* res, GF2X_c* a, GF2X_c* b, long parent) except -2:
|
|
284
|
+
"""
|
|
285
|
+
EXAMPLES::
|
|
286
|
+
|
|
287
|
+
sage: P.<x> = GF(2)[]
|
|
288
|
+
sage: x//(x + 1)
|
|
289
|
+
1
|
|
290
|
+
sage: (x + 1)//x
|
|
291
|
+
1
|
|
292
|
+
"""
|
|
293
|
+
GF2X_div(res[0], a[0], b[0])
|
|
294
|
+
|
|
295
|
+
cdef inline int celement_mod(GF2X_c* res, GF2X_c* a, GF2X_c* b, long parent) except -2:
|
|
296
|
+
"""
|
|
297
|
+
EXAMPLES::
|
|
298
|
+
|
|
299
|
+
sage: P.<x> = GF(2)[]
|
|
300
|
+
sage: (x^2 + 1) % x^2
|
|
301
|
+
1
|
|
302
|
+
"""
|
|
303
|
+
GF2X_rem(res[0], a[0], b[0])
|
|
304
|
+
|
|
305
|
+
cdef inline int celement_quorem(GF2X_c* q, GF2X_c* r, GF2X_c* a, GF2X_c* b, long parent) except -2:
|
|
306
|
+
"""
|
|
307
|
+
EXAMPLES::
|
|
308
|
+
|
|
309
|
+
sage: P.<x> = GF(2)[]
|
|
310
|
+
sage: f = x^2 + x + 1
|
|
311
|
+
sage: f.quo_rem(x + 1)
|
|
312
|
+
(x, 1)
|
|
313
|
+
"""
|
|
314
|
+
GF2X_DivRem(q[0], r[0], a[0], b[0])
|
|
315
|
+
|
|
316
|
+
cdef inline int celement_inv(GF2X_c* res, GF2X_c* a, long parent) except -2:
|
|
317
|
+
"""
|
|
318
|
+
We ignore NTL here and use the fraction field constructor.
|
|
319
|
+
|
|
320
|
+
EXAMPLES::
|
|
321
|
+
|
|
322
|
+
sage: P.<x> = GF(2)[]
|
|
323
|
+
"""
|
|
324
|
+
raise NotImplementedError
|
|
325
|
+
|
|
326
|
+
cdef inline int celement_pow(GF2X_c* res, GF2X_c* x, long e, GF2X_c *modulus, long parent) except -2:
|
|
327
|
+
"""
|
|
328
|
+
EXAMPLES::
|
|
329
|
+
|
|
330
|
+
sage: P.<x> = GF(2)[]
|
|
331
|
+
sage: x^1000
|
|
332
|
+
x^1000
|
|
333
|
+
sage: (x+1)^2
|
|
334
|
+
x^2 + 1
|
|
335
|
+
sage: (x+1)^(-2)
|
|
336
|
+
1/(x^2 + 1)
|
|
337
|
+
sage: f = x^9 + x^7 + x^6 + x^5 + x^4 + x^2 + x
|
|
338
|
+
sage: h = x^10 + x^7 + x^6 + x^5 + x^4 + x^3 + x^2 + 1
|
|
339
|
+
sage: (f^2) % h
|
|
340
|
+
x^9 + x^8 + x^7 + x^5 + x^3
|
|
341
|
+
sage: pow(f, 2, h)
|
|
342
|
+
x^9 + x^8 + x^7 + x^5 + x^3
|
|
343
|
+
sage: pow(x, 1000, h)
|
|
344
|
+
x^8 + x^7 + x^4
|
|
345
|
+
|
|
346
|
+
Check that deg x >= deg modulus works (:issue:`35324`)::
|
|
347
|
+
|
|
348
|
+
sage: pow(x+1, 2, x^2+x+1)
|
|
349
|
+
x
|
|
350
|
+
sage: pow(x^2+1, 2, x^2+x+1)
|
|
351
|
+
x + 1
|
|
352
|
+
"""
|
|
353
|
+
cdef GF2XModulus_c mod
|
|
354
|
+
cdef GF2X_c xmod
|
|
355
|
+
|
|
356
|
+
if modulus == NULL:
|
|
357
|
+
if GF2X_IsX(x[0]):
|
|
358
|
+
GF2X_LeftShift(res[0], x[0], e - 1)
|
|
359
|
+
else:
|
|
360
|
+
do_sig = GF2X_deg(x[0]) > 1e5
|
|
361
|
+
if do_sig:
|
|
362
|
+
sig_on()
|
|
363
|
+
GF2X_power(res[0], x[0], e)
|
|
364
|
+
if do_sig:
|
|
365
|
+
sig_off()
|
|
366
|
+
else:
|
|
367
|
+
GF2X_rem(xmod, x[0], modulus[0])
|
|
368
|
+
GF2XModulus_build(mod, modulus[0])
|
|
369
|
+
if GF2X_IsX(xmod):
|
|
370
|
+
GF2X_PowerXMod_long_pre(res[0], e, mod)
|
|
371
|
+
else:
|
|
372
|
+
do_sig = GF2X_deg(x[0]) > 1e5
|
|
373
|
+
if do_sig:
|
|
374
|
+
sig_on()
|
|
375
|
+
GF2X_PowerMod_long_pre(res[0], xmod, e, mod)
|
|
376
|
+
if do_sig:
|
|
377
|
+
sig_off()
|
|
378
|
+
|
|
379
|
+
|
|
380
|
+
cdef inline int celement_gcd(GF2X_c* res, GF2X_c* a, GF2X_c *b, long parent) except -2:
|
|
381
|
+
"""
|
|
382
|
+
EXAMPLES::
|
|
383
|
+
|
|
384
|
+
sage: P.<x> = GF(2)[]
|
|
385
|
+
sage: f = x*(x+1)
|
|
386
|
+
sage: f.gcd(x+1)
|
|
387
|
+
x + 1
|
|
388
|
+
sage: f.gcd(x^2)
|
|
389
|
+
x
|
|
390
|
+
"""
|
|
391
|
+
GF2X_GCD(res[0], a[0], b[0])
|
|
392
|
+
|
|
393
|
+
cdef inline int celement_xgcd(GF2X_c* res, GF2X_c* s, GF2X_c *t, GF2X_c* a, GF2X_c *b, long parent) except -2:
|
|
394
|
+
"""
|
|
395
|
+
EXAMPLES::
|
|
396
|
+
|
|
397
|
+
sage: P.<x> = GF(2)[]
|
|
398
|
+
sage: f = x*(x+1)
|
|
399
|
+
sage: f.xgcd(x+1)
|
|
400
|
+
(x + 1, 0, 1)
|
|
401
|
+
sage: f.xgcd(x^2)
|
|
402
|
+
(x, 1, 1)
|
|
403
|
+
"""
|
|
404
|
+
GF2X_XGCD(res[0], s[0], t[0], a[0], b[0])
|
|
Binary file
|