passagemath-ntl 10.6.37__cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.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.

Files changed (162) hide show
  1. passagemath_ntl/__init__.py +3 -0
  2. passagemath_ntl-10.6.37.dist-info/METADATA +122 -0
  3. passagemath_ntl-10.6.37.dist-info/RECORD +162 -0
  4. passagemath_ntl-10.6.37.dist-info/WHEEL +6 -0
  5. passagemath_ntl-10.6.37.dist-info/top_level.txt +3 -0
  6. passagemath_ntl.libs/libgf2x-fbd36f80.so.3.0.0 +0 -0
  7. passagemath_ntl.libs/libgmp-93ebf16a.so.10.5.0 +0 -0
  8. passagemath_ntl.libs/libmpfi-ad12a86d.so.0.0.0 +0 -0
  9. passagemath_ntl.libs/libmpfr-9d41ebf1.so.6.2.1 +0 -0
  10. passagemath_ntl.libs/libntl-0043a3a2.so.44.0.1 +0 -0
  11. sage/all__sagemath_ntl.py +7 -0
  12. sage/libs/all__sagemath_ntl.py +3 -0
  13. sage/libs/mpfi/__init__.pxd +287 -0
  14. sage/libs/mpfi/types.pxd +10 -0
  15. sage/libs/ntl/GF2.pxd +18 -0
  16. sage/libs/ntl/GF2E.pxd +28 -0
  17. sage/libs/ntl/GF2EX.pxd +12 -0
  18. sage/libs/ntl/GF2X.pxd +81 -0
  19. sage/libs/ntl/ZZ.pxd +93 -0
  20. sage/libs/ntl/ZZX.pxd +85 -0
  21. sage/libs/ntl/ZZ_p.pxd +28 -0
  22. sage/libs/ntl/ZZ_pE.pxd +37 -0
  23. sage/libs/ntl/ZZ_pEX.pxd +106 -0
  24. sage/libs/ntl/ZZ_pX.pxd +122 -0
  25. sage/libs/ntl/__init__.py +4 -0
  26. sage/libs/ntl/all.py +72 -0
  27. sage/libs/ntl/conversion.pxd +106 -0
  28. sage/libs/ntl/convert.cpython-311-aarch64-linux-gnu.so +0 -0
  29. sage/libs/ntl/convert.pxd +7 -0
  30. sage/libs/ntl/convert.pyx +38 -0
  31. sage/libs/ntl/decl.pxi +18 -0
  32. sage/libs/ntl/error.cpython-311-aarch64-linux-gnu.so +0 -0
  33. sage/libs/ntl/error.pyx +63 -0
  34. sage/libs/ntl/lzz_p.pxd +20 -0
  35. sage/libs/ntl/lzz_pX.pxd +59 -0
  36. sage/libs/ntl/mat_GF2.pxd +30 -0
  37. sage/libs/ntl/mat_GF2E.pxd +30 -0
  38. sage/libs/ntl/mat_ZZ.pxd +59 -0
  39. sage/libs/ntl/misc.pxi +33 -0
  40. sage/libs/ntl/ntl_GF2.cpython-311-aarch64-linux-gnu.so +0 -0
  41. sage/libs/ntl/ntl_GF2.pxd +5 -0
  42. sage/libs/ntl/ntl_GF2.pyx +281 -0
  43. sage/libs/ntl/ntl_GF2E.cpython-311-aarch64-linux-gnu.so +0 -0
  44. sage/libs/ntl/ntl_GF2E.pxd +8 -0
  45. sage/libs/ntl/ntl_GF2E.pyx +488 -0
  46. sage/libs/ntl/ntl_GF2EContext.cpython-311-aarch64-linux-gnu.so +0 -0
  47. sage/libs/ntl/ntl_GF2EContext.pxd +9 -0
  48. sage/libs/ntl/ntl_GF2EContext.pyx +134 -0
  49. sage/libs/ntl/ntl_GF2EX.cpython-311-aarch64-linux-gnu.so +0 -0
  50. sage/libs/ntl/ntl_GF2EX.pxd +10 -0
  51. sage/libs/ntl/ntl_GF2EX.pyx +251 -0
  52. sage/libs/ntl/ntl_GF2X.cpython-311-aarch64-linux-gnu.so +0 -0
  53. sage/libs/ntl/ntl_GF2X.pxd +5 -0
  54. sage/libs/ntl/ntl_GF2X.pyx +771 -0
  55. sage/libs/ntl/ntl_GF2X_linkage.pxi +404 -0
  56. sage/libs/ntl/ntl_ZZ.cpython-311-aarch64-linux-gnu.so +0 -0
  57. sage/libs/ntl/ntl_ZZ.pxd +7 -0
  58. sage/libs/ntl/ntl_ZZ.pyx +541 -0
  59. sage/libs/ntl/ntl_ZZX.cpython-311-aarch64-linux-gnu.so +0 -0
  60. sage/libs/ntl/ntl_ZZX.pxd +7 -0
  61. sage/libs/ntl/ntl_ZZX.pyx +1206 -0
  62. sage/libs/ntl/ntl_ZZ_p.cpython-311-aarch64-linux-gnu.so +0 -0
  63. sage/libs/ntl/ntl_ZZ_p.pxd +10 -0
  64. sage/libs/ntl/ntl_ZZ_p.pyx +509 -0
  65. sage/libs/ntl/ntl_ZZ_pContext.cpython-311-aarch64-linux-gnu.so +0 -0
  66. sage/libs/ntl/ntl_ZZ_pContext.pxd +22 -0
  67. sage/libs/ntl/ntl_ZZ_pContext.pyx +201 -0
  68. sage/libs/ntl/ntl_ZZ_pE.cpython-311-aarch64-linux-gnu.so +0 -0
  69. sage/libs/ntl/ntl_ZZ_pE.pxd +11 -0
  70. sage/libs/ntl/ntl_ZZ_pE.pyx +349 -0
  71. sage/libs/ntl/ntl_ZZ_pEContext.cpython-311-aarch64-linux-gnu.so +0 -0
  72. sage/libs/ntl/ntl_ZZ_pEContext.pxd +23 -0
  73. sage/libs/ntl/ntl_ZZ_pEContext.pyx +226 -0
  74. sage/libs/ntl/ntl_ZZ_pEX.cpython-311-aarch64-linux-gnu.so +0 -0
  75. sage/libs/ntl/ntl_ZZ_pEX.pxd +10 -0
  76. sage/libs/ntl/ntl_ZZ_pEX.pyx +1255 -0
  77. sage/libs/ntl/ntl_ZZ_pEX_linkage.pxi +420 -0
  78. sage/libs/ntl/ntl_ZZ_pX.cpython-311-aarch64-linux-gnu.so +0 -0
  79. sage/libs/ntl/ntl_ZZ_pX.pxd +17 -0
  80. sage/libs/ntl/ntl_ZZ_pX.pyx +1532 -0
  81. sage/libs/ntl/ntl_lzz_p.cpython-311-aarch64-linux-gnu.so +0 -0
  82. sage/libs/ntl/ntl_lzz_p.pxd +8 -0
  83. sage/libs/ntl/ntl_lzz_p.pyx +440 -0
  84. sage/libs/ntl/ntl_lzz_pContext.cpython-311-aarch64-linux-gnu.so +0 -0
  85. sage/libs/ntl/ntl_lzz_pContext.pxd +7 -0
  86. sage/libs/ntl/ntl_lzz_pContext.pyx +137 -0
  87. sage/libs/ntl/ntl_lzz_pX.cpython-311-aarch64-linux-gnu.so +0 -0
  88. sage/libs/ntl/ntl_lzz_pX.pxd +10 -0
  89. sage/libs/ntl/ntl_lzz_pX.pyx +902 -0
  90. sage/libs/ntl/ntl_mat_GF2.cpython-311-aarch64-linux-gnu.so +0 -0
  91. sage/libs/ntl/ntl_mat_GF2.pxd +8 -0
  92. sage/libs/ntl/ntl_mat_GF2.pyx +612 -0
  93. sage/libs/ntl/ntl_mat_GF2E.cpython-311-aarch64-linux-gnu.so +0 -0
  94. sage/libs/ntl/ntl_mat_GF2E.pxd +10 -0
  95. sage/libs/ntl/ntl_mat_GF2E.pyx +752 -0
  96. sage/libs/ntl/ntl_mat_ZZ.cpython-311-aarch64-linux-gnu.so +0 -0
  97. sage/libs/ntl/ntl_mat_ZZ.pxd +6 -0
  98. sage/libs/ntl/ntl_mat_ZZ.pyx +1523 -0
  99. sage/libs/ntl/ntl_tools.pxd +3 -0
  100. sage/libs/ntl/ntlwrap.h +53 -0
  101. sage/libs/ntl/ntlwrap_impl.h +743 -0
  102. sage/libs/ntl/types.pxd +157 -0
  103. sage/libs/ntl/vec_GF2.pxd +26 -0
  104. sage/libs/ntl/vec_GF2E.pxd +2 -0
  105. sage/matrix/all__sagemath_ntl.py +1 -0
  106. sage/matrix/matrix_modn_dense_double.pxd +10 -0
  107. sage/matrix/matrix_modn_dense_float.pxd +9 -0
  108. sage/matrix/matrix_modn_dense_template.pxi +3257 -0
  109. sage/matrix/matrix_modn_dense_template_header.pxi +15 -0
  110. sage/matrix/matrix_modn_sparse.pxd +8 -0
  111. sage/misc/all__sagemath_ntl.py +1 -0
  112. sage/rings/all__sagemath_ntl.py +7 -0
  113. sage/rings/bernmm.cpython-311-aarch64-linux-gnu.so +0 -0
  114. sage/rings/bernmm.pyx +161 -0
  115. sage/rings/bernoulli_mod_p.cpython-311-aarch64-linux-gnu.so +0 -0
  116. sage/rings/bernoulli_mod_p.pyx +313 -0
  117. sage/rings/finite_rings/all__sagemath_ntl.py +1 -0
  118. sage/rings/finite_rings/finite_field_ntl_gf2e.py +305 -0
  119. sage/rings/finite_rings/residue_field_ntl_gf2e.cpython-311-aarch64-linux-gnu.so +0 -0
  120. sage/rings/finite_rings/residue_field_ntl_gf2e.pyx +140 -0
  121. sage/rings/padics/all__sagemath_ntl.py +5 -0
  122. sage/rings/padics/padic_ZZ_pX_CA_element.cpython-311-aarch64-linux-gnu.so +0 -0
  123. sage/rings/padics/padic_ZZ_pX_CA_element.pxd +25 -0
  124. sage/rings/padics/padic_ZZ_pX_CA_element.pyx +2368 -0
  125. sage/rings/padics/padic_ZZ_pX_CR_element.cpython-311-aarch64-linux-gnu.so +0 -0
  126. sage/rings/padics/padic_ZZ_pX_CR_element.pxd +33 -0
  127. sage/rings/padics/padic_ZZ_pX_CR_element.pyx +3277 -0
  128. sage/rings/padics/padic_ZZ_pX_FM_element.cpython-311-aarch64-linux-gnu.so +0 -0
  129. sage/rings/padics/padic_ZZ_pX_FM_element.pxd +12 -0
  130. sage/rings/padics/padic_ZZ_pX_FM_element.pyx +1739 -0
  131. sage/rings/padics/padic_ZZ_pX_element.cpython-311-aarch64-linux-gnu.so +0 -0
  132. sage/rings/padics/padic_ZZ_pX_element.pxd +6 -0
  133. sage/rings/padics/padic_ZZ_pX_element.pyx +919 -0
  134. sage/rings/padics/padic_ext_element.cpython-311-aarch64-linux-gnu.so +0 -0
  135. sage/rings/padics/padic_ext_element.pxd +38 -0
  136. sage/rings/padics/padic_ext_element.pyx +512 -0
  137. sage/rings/padics/pow_computer_ext.cpython-311-aarch64-linux-gnu.so +0 -0
  138. sage/rings/padics/pow_computer_ext.pxd +107 -0
  139. sage/rings/padics/pow_computer_ext.pyx +2401 -0
  140. sage/rings/polynomial/all__sagemath_ntl.py +1 -0
  141. sage/rings/polynomial/evaluation_ntl.cpython-311-aarch64-linux-gnu.so +0 -0
  142. sage/rings/polynomial/evaluation_ntl.pxd +7 -0
  143. sage/rings/polynomial/evaluation_ntl.pyx +70 -0
  144. sage/rings/polynomial/polynomial_gf2x.cpython-311-aarch64-linux-gnu.so +0 -0
  145. sage/rings/polynomial/polynomial_gf2x.pxd +10 -0
  146. sage/rings/polynomial/polynomial_gf2x.pyx +364 -0
  147. sage/rings/polynomial/polynomial_integer_dense_ntl.cpython-311-aarch64-linux-gnu.so +0 -0
  148. sage/rings/polynomial/polynomial_integer_dense_ntl.pxd +8 -0
  149. sage/rings/polynomial/polynomial_integer_dense_ntl.pyx +1128 -0
  150. sage/rings/polynomial/polynomial_modn_dense_ntl.cpython-311-aarch64-linux-gnu.so +0 -0
  151. sage/rings/polynomial/polynomial_modn_dense_ntl.pxd +36 -0
  152. sage/rings/polynomial/polynomial_modn_dense_ntl.pyx +2049 -0
  153. sage/rings/polynomial/polynomial_template.pxi +842 -0
  154. sage/rings/polynomial/polynomial_template_header.pxi +11 -0
  155. sage/rings/polynomial/polynomial_zz_pex.cpython-311-aarch64-linux-gnu.so +0 -0
  156. sage/rings/polynomial/polynomial_zz_pex.pxd +12 -0
  157. sage/rings/polynomial/polynomial_zz_pex.pyx +778 -0
  158. sage/rings/real_mpfi.pxd +50 -0
  159. sage/schemes/all__sagemath_ntl.py +1 -0
  160. sage/schemes/hyperelliptic_curves/all__sagemath_ntl.py +1 -0
  161. sage/schemes/hyperelliptic_curves/hypellfrob.cpython-311-aarch64-linux-gnu.so +0 -0
  162. 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])
@@ -0,0 +1,7 @@
1
+ # sage_setup: distribution = sagemath-ntl
2
+ from sage.libs.ntl.types cimport ZZ_c
3
+
4
+ cdef class ntl_ZZ():
5
+ cdef ZZ_c x
6
+ cdef int get_as_int(ntl_ZZ self) noexcept
7
+ cdef void set_from_int(ntl_ZZ self, int value) noexcept