passagemath-categories 10.6.31rc3__cp314-cp314-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.
Files changed (717) hide show
  1. passagemath_categories-10.6.31rc3.dist-info/METADATA +156 -0
  2. passagemath_categories-10.6.31rc3.dist-info/RECORD +717 -0
  3. passagemath_categories-10.6.31rc3.dist-info/WHEEL +6 -0
  4. passagemath_categories-10.6.31rc3.dist-info/top_level.txt +2 -0
  5. passagemath_categories.dylibs/libgmp.10.dylib +0 -0
  6. sage/all__sagemath_categories.py +28 -0
  7. sage/arith/all.py +38 -0
  8. sage/arith/constants.pxd +27 -0
  9. sage/arith/functions.cpython-314-darwin.so +0 -0
  10. sage/arith/functions.pxd +4 -0
  11. sage/arith/functions.pyx +221 -0
  12. sage/arith/misc.py +6552 -0
  13. sage/arith/multi_modular.cpython-314-darwin.so +0 -0
  14. sage/arith/multi_modular.pxd +39 -0
  15. sage/arith/multi_modular.pyx +994 -0
  16. sage/arith/rational_reconstruction.cpython-314-darwin.so +0 -0
  17. sage/arith/rational_reconstruction.pxd +4 -0
  18. sage/arith/rational_reconstruction.pyx +115 -0
  19. sage/arith/srange.cpython-314-darwin.so +0 -0
  20. sage/arith/srange.pyx +571 -0
  21. sage/calculus/all__sagemath_categories.py +2 -0
  22. sage/calculus/functional.py +481 -0
  23. sage/calculus/functions.py +151 -0
  24. sage/categories/additive_groups.py +73 -0
  25. sage/categories/additive_magmas.py +1044 -0
  26. sage/categories/additive_monoids.py +114 -0
  27. sage/categories/additive_semigroups.py +184 -0
  28. sage/categories/affine_weyl_groups.py +238 -0
  29. sage/categories/algebra_ideals.py +95 -0
  30. sage/categories/algebra_modules.py +96 -0
  31. sage/categories/algebras.py +349 -0
  32. sage/categories/algebras_with_basis.py +377 -0
  33. sage/categories/all.py +160 -0
  34. sage/categories/aperiodic_semigroups.py +29 -0
  35. sage/categories/associative_algebras.py +47 -0
  36. sage/categories/bialgebras.py +101 -0
  37. sage/categories/bialgebras_with_basis.py +414 -0
  38. sage/categories/bimodules.py +206 -0
  39. sage/categories/chain_complexes.py +268 -0
  40. sage/categories/classical_crystals.py +480 -0
  41. sage/categories/coalgebras.py +405 -0
  42. sage/categories/coalgebras_with_basis.py +232 -0
  43. sage/categories/coercion_methods.cpython-314-darwin.so +0 -0
  44. sage/categories/coercion_methods.pyx +52 -0
  45. sage/categories/commutative_additive_groups.py +104 -0
  46. sage/categories/commutative_additive_monoids.py +45 -0
  47. sage/categories/commutative_additive_semigroups.py +48 -0
  48. sage/categories/commutative_algebra_ideals.py +87 -0
  49. sage/categories/commutative_algebras.py +94 -0
  50. sage/categories/commutative_ring_ideals.py +58 -0
  51. sage/categories/commutative_rings.py +736 -0
  52. sage/categories/complete_discrete_valuation.py +293 -0
  53. sage/categories/complex_reflection_groups.py +145 -0
  54. sage/categories/complex_reflection_or_generalized_coxeter_groups.py +1249 -0
  55. sage/categories/coxeter_group_algebras.py +186 -0
  56. sage/categories/coxeter_groups.py +3402 -0
  57. sage/categories/crystals.py +2628 -0
  58. sage/categories/cw_complexes.py +216 -0
  59. sage/categories/dedekind_domains.py +137 -0
  60. sage/categories/discrete_valuation.py +325 -0
  61. sage/categories/distributive_magmas_and_additive_magmas.py +100 -0
  62. sage/categories/division_rings.py +114 -0
  63. sage/categories/domains.py +95 -0
  64. sage/categories/drinfeld_modules.py +789 -0
  65. sage/categories/dual.py +42 -0
  66. sage/categories/enumerated_sets.py +1146 -0
  67. sage/categories/euclidean_domains.py +271 -0
  68. sage/categories/examples/algebras_with_basis.py +102 -0
  69. sage/categories/examples/all.py +1 -0
  70. sage/categories/examples/commutative_additive_monoids.py +130 -0
  71. sage/categories/examples/commutative_additive_semigroups.py +199 -0
  72. sage/categories/examples/coxeter_groups.py +8 -0
  73. sage/categories/examples/crystals.py +236 -0
  74. sage/categories/examples/cw_complexes.py +163 -0
  75. sage/categories/examples/facade_sets.py +187 -0
  76. sage/categories/examples/filtered_algebras_with_basis.py +204 -0
  77. sage/categories/examples/filtered_modules_with_basis.py +154 -0
  78. sage/categories/examples/finite_coxeter_groups.py +252 -0
  79. sage/categories/examples/finite_dimensional_algebras_with_basis.py +148 -0
  80. sage/categories/examples/finite_dimensional_lie_algebras_with_basis.py +495 -0
  81. sage/categories/examples/finite_enumerated_sets.py +208 -0
  82. sage/categories/examples/finite_monoids.py +150 -0
  83. sage/categories/examples/finite_semigroups.py +190 -0
  84. sage/categories/examples/finite_weyl_groups.py +191 -0
  85. sage/categories/examples/graded_connected_hopf_algebras_with_basis.py +152 -0
  86. sage/categories/examples/graded_modules_with_basis.py +168 -0
  87. sage/categories/examples/graphs.py +122 -0
  88. sage/categories/examples/hopf_algebras_with_basis.py +145 -0
  89. sage/categories/examples/infinite_enumerated_sets.py +190 -0
  90. sage/categories/examples/lie_algebras.py +352 -0
  91. sage/categories/examples/lie_algebras_with_basis.py +196 -0
  92. sage/categories/examples/magmas.py +162 -0
  93. sage/categories/examples/manifolds.py +94 -0
  94. sage/categories/examples/monoids.py +144 -0
  95. sage/categories/examples/posets.py +178 -0
  96. sage/categories/examples/semigroups.py +580 -0
  97. sage/categories/examples/semigroups_cython.cpython-314-darwin.so +0 -0
  98. sage/categories/examples/semigroups_cython.pyx +221 -0
  99. sage/categories/examples/semirings.py +249 -0
  100. sage/categories/examples/sets_cat.py +706 -0
  101. sage/categories/examples/sets_with_grading.py +101 -0
  102. sage/categories/examples/with_realizations.py +542 -0
  103. sage/categories/fields.py +991 -0
  104. sage/categories/filtered_algebras.py +63 -0
  105. sage/categories/filtered_algebras_with_basis.py +548 -0
  106. sage/categories/filtered_hopf_algebras_with_basis.py +138 -0
  107. sage/categories/filtered_modules.py +210 -0
  108. sage/categories/filtered_modules_with_basis.py +1209 -0
  109. sage/categories/finite_complex_reflection_groups.py +1506 -0
  110. sage/categories/finite_coxeter_groups.py +1138 -0
  111. sage/categories/finite_crystals.py +103 -0
  112. sage/categories/finite_dimensional_algebras_with_basis.py +1860 -0
  113. sage/categories/finite_dimensional_bialgebras_with_basis.py +33 -0
  114. sage/categories/finite_dimensional_coalgebras_with_basis.py +33 -0
  115. sage/categories/finite_dimensional_graded_lie_algebras_with_basis.py +231 -0
  116. sage/categories/finite_dimensional_hopf_algebras_with_basis.py +38 -0
  117. sage/categories/finite_dimensional_lie_algebras_with_basis.py +2774 -0
  118. sage/categories/finite_dimensional_modules_with_basis.py +1407 -0
  119. sage/categories/finite_dimensional_nilpotent_lie_algebras_with_basis.py +167 -0
  120. sage/categories/finite_dimensional_semisimple_algebras_with_basis.py +270 -0
  121. sage/categories/finite_enumerated_sets.py +769 -0
  122. sage/categories/finite_fields.py +252 -0
  123. sage/categories/finite_groups.py +256 -0
  124. sage/categories/finite_lattice_posets.py +242 -0
  125. sage/categories/finite_monoids.py +316 -0
  126. sage/categories/finite_permutation_groups.py +339 -0
  127. sage/categories/finite_posets.py +1994 -0
  128. sage/categories/finite_semigroups.py +136 -0
  129. sage/categories/finite_sets.py +93 -0
  130. sage/categories/finite_weyl_groups.py +39 -0
  131. sage/categories/finitely_generated_lambda_bracket_algebras.py +112 -0
  132. sage/categories/finitely_generated_lie_conformal_algebras.py +114 -0
  133. sage/categories/finitely_generated_magmas.py +57 -0
  134. sage/categories/finitely_generated_semigroups.py +214 -0
  135. sage/categories/function_fields.py +76 -0
  136. sage/categories/g_sets.py +77 -0
  137. sage/categories/gcd_domains.py +65 -0
  138. sage/categories/generalized_coxeter_groups.py +94 -0
  139. sage/categories/graded_algebras.py +85 -0
  140. sage/categories/graded_algebras_with_basis.py +258 -0
  141. sage/categories/graded_bialgebras.py +32 -0
  142. sage/categories/graded_bialgebras_with_basis.py +32 -0
  143. sage/categories/graded_coalgebras.py +65 -0
  144. sage/categories/graded_coalgebras_with_basis.py +51 -0
  145. sage/categories/graded_hopf_algebras.py +41 -0
  146. sage/categories/graded_hopf_algebras_with_basis.py +169 -0
  147. sage/categories/graded_lie_algebras.py +91 -0
  148. sage/categories/graded_lie_algebras_with_basis.py +44 -0
  149. sage/categories/graded_lie_conformal_algebras.py +74 -0
  150. sage/categories/graded_modules.py +133 -0
  151. sage/categories/graded_modules_with_basis.py +329 -0
  152. sage/categories/graphs.py +138 -0
  153. sage/categories/group_algebras.py +430 -0
  154. sage/categories/groupoid.py +94 -0
  155. sage/categories/groups.py +667 -0
  156. sage/categories/h_trivial_semigroups.py +64 -0
  157. sage/categories/hecke_modules.py +185 -0
  158. sage/categories/highest_weight_crystals.py +980 -0
  159. sage/categories/hopf_algebras.py +219 -0
  160. sage/categories/hopf_algebras_with_basis.py +309 -0
  161. sage/categories/infinite_enumerated_sets.py +115 -0
  162. sage/categories/integral_domains.py +203 -0
  163. sage/categories/j_trivial_semigroups.py +29 -0
  164. sage/categories/kac_moody_algebras.py +82 -0
  165. sage/categories/kahler_algebras.py +203 -0
  166. sage/categories/l_trivial_semigroups.py +63 -0
  167. sage/categories/lambda_bracket_algebras.py +280 -0
  168. sage/categories/lambda_bracket_algebras_with_basis.py +107 -0
  169. sage/categories/lattice_posets.py +89 -0
  170. sage/categories/left_modules.py +49 -0
  171. sage/categories/lie_algebras.py +1070 -0
  172. sage/categories/lie_algebras_with_basis.py +261 -0
  173. sage/categories/lie_conformal_algebras.py +350 -0
  174. sage/categories/lie_conformal_algebras_with_basis.py +147 -0
  175. sage/categories/lie_groups.py +73 -0
  176. sage/categories/loop_crystals.py +1290 -0
  177. sage/categories/magmas.py +1189 -0
  178. sage/categories/magmas_and_additive_magmas.py +149 -0
  179. sage/categories/magmatic_algebras.py +365 -0
  180. sage/categories/manifolds.py +352 -0
  181. sage/categories/matrix_algebras.py +40 -0
  182. sage/categories/metric_spaces.py +387 -0
  183. sage/categories/modular_abelian_varieties.py +78 -0
  184. sage/categories/modules.py +989 -0
  185. sage/categories/modules_with_basis.py +2794 -0
  186. sage/categories/monoid_algebras.py +38 -0
  187. sage/categories/monoids.py +739 -0
  188. sage/categories/noetherian_rings.py +87 -0
  189. sage/categories/number_fields.py +242 -0
  190. sage/categories/ore_modules.py +189 -0
  191. sage/categories/partially_ordered_monoids.py +49 -0
  192. sage/categories/permutation_groups.py +63 -0
  193. sage/categories/pointed_sets.py +42 -0
  194. sage/categories/polyhedra.py +74 -0
  195. sage/categories/poor_man_map.py +270 -0
  196. sage/categories/posets.py +722 -0
  197. sage/categories/principal_ideal_domains.py +270 -0
  198. sage/categories/quantum_group_representations.py +543 -0
  199. sage/categories/quotient_fields.py +728 -0
  200. sage/categories/r_trivial_semigroups.py +45 -0
  201. sage/categories/regular_crystals.py +898 -0
  202. sage/categories/regular_supercrystals.py +170 -0
  203. sage/categories/right_modules.py +49 -0
  204. sage/categories/ring_ideals.py +74 -0
  205. sage/categories/rings.py +1904 -0
  206. sage/categories/rngs.py +175 -0
  207. sage/categories/schemes.py +393 -0
  208. sage/categories/semigroups.py +1060 -0
  209. sage/categories/semirings.py +71 -0
  210. sage/categories/semisimple_algebras.py +114 -0
  211. sage/categories/sets_with_grading.py +235 -0
  212. sage/categories/shephard_groups.py +43 -0
  213. sage/categories/signed_tensor.py +120 -0
  214. sage/categories/simplicial_complexes.py +134 -0
  215. sage/categories/simplicial_sets.py +1206 -0
  216. sage/categories/super_algebras.py +149 -0
  217. sage/categories/super_algebras_with_basis.py +144 -0
  218. sage/categories/super_hopf_algebras_with_basis.py +126 -0
  219. sage/categories/super_lie_conformal_algebras.py +193 -0
  220. sage/categories/super_modules.py +229 -0
  221. sage/categories/super_modules_with_basis.py +193 -0
  222. sage/categories/supercommutative_algebras.py +99 -0
  223. sage/categories/supercrystals.py +406 -0
  224. sage/categories/tensor.py +110 -0
  225. sage/categories/topological_spaces.py +170 -0
  226. sage/categories/triangular_kac_moody_algebras.py +439 -0
  227. sage/categories/tutorial.py +58 -0
  228. sage/categories/unique_factorization_domains.py +318 -0
  229. sage/categories/unital_algebras.py +426 -0
  230. sage/categories/vector_bundles.py +159 -0
  231. sage/categories/vector_spaces.py +357 -0
  232. sage/categories/weyl_groups.py +853 -0
  233. sage/combinat/all__sagemath_categories.py +34 -0
  234. sage/combinat/backtrack.py +180 -0
  235. sage/combinat/combinat.py +2269 -0
  236. sage/combinat/combinat_cython.cpython-314-darwin.so +0 -0
  237. sage/combinat/combinat_cython.pxd +6 -0
  238. sage/combinat/combinat_cython.pyx +390 -0
  239. sage/combinat/combination.py +796 -0
  240. sage/combinat/combinatorial_map.py +416 -0
  241. sage/combinat/composition.py +2192 -0
  242. sage/combinat/dlx.py +510 -0
  243. sage/combinat/integer_lists/__init__.py +7 -0
  244. sage/combinat/integer_lists/base.cpython-314-darwin.so +0 -0
  245. sage/combinat/integer_lists/base.pxd +16 -0
  246. sage/combinat/integer_lists/base.pyx +713 -0
  247. sage/combinat/integer_lists/invlex.cpython-314-darwin.so +0 -0
  248. sage/combinat/integer_lists/invlex.pxd +4 -0
  249. sage/combinat/integer_lists/invlex.pyx +1650 -0
  250. sage/combinat/integer_lists/lists.py +328 -0
  251. sage/combinat/integer_lists/nn.py +48 -0
  252. sage/combinat/integer_vector.py +1818 -0
  253. sage/combinat/integer_vector_weighted.py +413 -0
  254. sage/combinat/matrices/all__sagemath_categories.py +5 -0
  255. sage/combinat/matrices/dancing_links.cpython-314-darwin.so +0 -0
  256. sage/combinat/matrices/dancing_links.pyx +1159 -0
  257. sage/combinat/matrices/dancing_links_c.h +380 -0
  258. sage/combinat/matrices/dlxcpp.py +136 -0
  259. sage/combinat/partition.py +10070 -0
  260. sage/combinat/partitions.cpython-314-darwin.so +0 -0
  261. sage/combinat/partitions.pyx +743 -0
  262. sage/combinat/permutation.py +10168 -0
  263. sage/combinat/permutation_cython.cpython-314-darwin.so +0 -0
  264. sage/combinat/permutation_cython.pxd +11 -0
  265. sage/combinat/permutation_cython.pyx +407 -0
  266. sage/combinat/q_analogues.py +1090 -0
  267. sage/combinat/ranker.py +268 -0
  268. sage/combinat/subset.py +1561 -0
  269. sage/combinat/subsets_hereditary.py +202 -0
  270. sage/combinat/subsets_pairwise.py +184 -0
  271. sage/combinat/tools.py +63 -0
  272. sage/combinat/tuple.py +348 -0
  273. sage/data_structures/all.py +2 -0
  274. sage/data_structures/all__sagemath_categories.py +2 -0
  275. sage/data_structures/binary_matrix.pxd +138 -0
  276. sage/data_structures/binary_search.cpython-314-darwin.so +0 -0
  277. sage/data_structures/binary_search.pxd +3 -0
  278. sage/data_structures/binary_search.pyx +66 -0
  279. sage/data_structures/bitset.cpython-314-darwin.so +0 -0
  280. sage/data_structures/bitset.pxd +40 -0
  281. sage/data_structures/bitset.pyx +2385 -0
  282. sage/data_structures/bitset_base.cpython-314-darwin.so +0 -0
  283. sage/data_structures/bitset_base.pxd +926 -0
  284. sage/data_structures/bitset_base.pyx +117 -0
  285. sage/data_structures/bitset_intrinsics.h +487 -0
  286. sage/data_structures/blas_dict.cpython-314-darwin.so +0 -0
  287. sage/data_structures/blas_dict.pxd +12 -0
  288. sage/data_structures/blas_dict.pyx +469 -0
  289. sage/data_structures/list_of_pairs.cpython-314-darwin.so +0 -0
  290. sage/data_structures/list_of_pairs.pxd +16 -0
  291. sage/data_structures/list_of_pairs.pyx +122 -0
  292. sage/data_structures/mutable_poset.py +3312 -0
  293. sage/data_structures/pairing_heap.cpython-314-darwin.so +0 -0
  294. sage/data_structures/pairing_heap.h +346 -0
  295. sage/data_structures/pairing_heap.pxd +88 -0
  296. sage/data_structures/pairing_heap.pyx +1464 -0
  297. sage/data_structures/sparse_bitset.pxd +62 -0
  298. sage/data_structures/stream.py +5070 -0
  299. sage/databases/all__sagemath_categories.py +7 -0
  300. sage/databases/sql_db.py +2236 -0
  301. sage/ext/all__sagemath_categories.py +3 -0
  302. sage/ext/fast_callable.cpython-314-darwin.so +0 -0
  303. sage/ext/fast_callable.pxd +4 -0
  304. sage/ext/fast_callable.pyx +2746 -0
  305. sage/ext/fast_eval.cpython-314-darwin.so +0 -0
  306. sage/ext/fast_eval.pxd +1 -0
  307. sage/ext/fast_eval.pyx +102 -0
  308. sage/ext/interpreters/__init__.py +1 -0
  309. sage/ext/interpreters/all__sagemath_categories.py +2 -0
  310. sage/ext/interpreters/wrapper_el.cpython-314-darwin.so +0 -0
  311. sage/ext/interpreters/wrapper_el.pxd +18 -0
  312. sage/ext/interpreters/wrapper_el.pyx +148 -0
  313. sage/ext/interpreters/wrapper_py.cpython-314-darwin.so +0 -0
  314. sage/ext/interpreters/wrapper_py.pxd +17 -0
  315. sage/ext/interpreters/wrapper_py.pyx +133 -0
  316. sage/functions/airy.py +937 -0
  317. sage/functions/all.py +97 -0
  318. sage/functions/bessel.py +2102 -0
  319. sage/functions/error.py +784 -0
  320. sage/functions/exp_integral.py +1529 -0
  321. sage/functions/gamma.py +1087 -0
  322. sage/functions/generalized.py +672 -0
  323. sage/functions/hyperbolic.py +747 -0
  324. sage/functions/hypergeometric.py +1156 -0
  325. sage/functions/jacobi.py +1705 -0
  326. sage/functions/log.py +1402 -0
  327. sage/functions/min_max.py +338 -0
  328. sage/functions/orthogonal_polys.py +3106 -0
  329. sage/functions/other.py +2303 -0
  330. sage/functions/piecewise.py +1505 -0
  331. sage/functions/prime_pi.cpython-314-darwin.so +0 -0
  332. sage/functions/prime_pi.pyx +262 -0
  333. sage/functions/special.py +1212 -0
  334. sage/functions/spike_function.py +278 -0
  335. sage/functions/transcendental.py +690 -0
  336. sage/functions/trig.py +1062 -0
  337. sage/functions/wigner.py +726 -0
  338. sage/geometry/abc.cpython-314-darwin.so +0 -0
  339. sage/geometry/abc.pyx +82 -0
  340. sage/geometry/all__sagemath_categories.py +1 -0
  341. sage/groups/all__sagemath_categories.py +11 -0
  342. sage/groups/generic.py +1733 -0
  343. sage/groups/groups_catalog.py +113 -0
  344. sage/groups/perm_gps/all__sagemath_categories.py +1 -0
  345. sage/groups/perm_gps/partn_ref/all.py +1 -0
  346. sage/groups/perm_gps/partn_ref/all__sagemath_categories.py +1 -0
  347. sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.cpython-314-darwin.so +0 -0
  348. sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.pxd +52 -0
  349. sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.pyx +906 -0
  350. sage/groups/perm_gps/partn_ref/canonical_augmentation.cpython-314-darwin.so +0 -0
  351. sage/groups/perm_gps/partn_ref/canonical_augmentation.pxd +85 -0
  352. sage/groups/perm_gps/partn_ref/canonical_augmentation.pyx +534 -0
  353. sage/groups/perm_gps/partn_ref/data_structures.cpython-314-darwin.so +0 -0
  354. sage/groups/perm_gps/partn_ref/data_structures.pxd +576 -0
  355. sage/groups/perm_gps/partn_ref/data_structures.pyx +1792 -0
  356. sage/groups/perm_gps/partn_ref/double_coset.cpython-314-darwin.so +0 -0
  357. sage/groups/perm_gps/partn_ref/double_coset.pxd +45 -0
  358. sage/groups/perm_gps/partn_ref/double_coset.pyx +739 -0
  359. sage/groups/perm_gps/partn_ref/refinement_lists.cpython-314-darwin.so +0 -0
  360. sage/groups/perm_gps/partn_ref/refinement_lists.pxd +18 -0
  361. sage/groups/perm_gps/partn_ref/refinement_lists.pyx +82 -0
  362. sage/groups/perm_gps/partn_ref/refinement_python.cpython-314-darwin.so +0 -0
  363. sage/groups/perm_gps/partn_ref/refinement_python.pxd +16 -0
  364. sage/groups/perm_gps/partn_ref/refinement_python.pyx +564 -0
  365. sage/groups/perm_gps/partn_ref/refinement_sets.cpython-314-darwin.so +0 -0
  366. sage/groups/perm_gps/partn_ref/refinement_sets.pxd +60 -0
  367. sage/groups/perm_gps/partn_ref/refinement_sets.pyx +858 -0
  368. sage/interfaces/abc.py +140 -0
  369. sage/interfaces/all.py +58 -0
  370. sage/interfaces/all__sagemath_categories.py +1 -0
  371. sage/interfaces/expect.py +1643 -0
  372. sage/interfaces/interface.py +1682 -0
  373. sage/interfaces/process.cpython-314-darwin.so +0 -0
  374. sage/interfaces/process.pxd +5 -0
  375. sage/interfaces/process.pyx +288 -0
  376. sage/interfaces/quit.py +167 -0
  377. sage/interfaces/sage0.py +604 -0
  378. sage/interfaces/sagespawn.cpython-314-darwin.so +0 -0
  379. sage/interfaces/sagespawn.pyx +308 -0
  380. sage/interfaces/tab_completion.py +101 -0
  381. sage/misc/all__sagemath_categories.py +78 -0
  382. sage/misc/allocator.cpython-314-darwin.so +0 -0
  383. sage/misc/allocator.pxd +6 -0
  384. sage/misc/allocator.pyx +47 -0
  385. sage/misc/binary_tree.cpython-314-darwin.so +0 -0
  386. sage/misc/binary_tree.pxd +29 -0
  387. sage/misc/binary_tree.pyx +537 -0
  388. sage/misc/callable_dict.cpython-314-darwin.so +0 -0
  389. sage/misc/callable_dict.pyx +89 -0
  390. sage/misc/citation.cpython-314-darwin.so +0 -0
  391. sage/misc/citation.pyx +159 -0
  392. sage/misc/converting_dict.py +293 -0
  393. sage/misc/defaults.py +129 -0
  394. sage/misc/derivative.cpython-314-darwin.so +0 -0
  395. sage/misc/derivative.pyx +223 -0
  396. sage/misc/functional.py +2005 -0
  397. sage/misc/html.py +589 -0
  398. sage/misc/latex.py +2673 -0
  399. sage/misc/latex_macros.py +236 -0
  400. sage/misc/latex_standalone.py +1833 -0
  401. sage/misc/map_threaded.py +38 -0
  402. sage/misc/mathml.py +76 -0
  403. sage/misc/method_decorator.py +88 -0
  404. sage/misc/mrange.py +755 -0
  405. sage/misc/multireplace.py +41 -0
  406. sage/misc/object_multiplexer.py +92 -0
  407. sage/misc/parser.cpython-314-darwin.so +0 -0
  408. sage/misc/parser.pyx +1107 -0
  409. sage/misc/random_testing.py +264 -0
  410. sage/misc/rest_index_of_methods.py +377 -0
  411. sage/misc/search.cpython-314-darwin.so +0 -0
  412. sage/misc/search.pxd +2 -0
  413. sage/misc/search.pyx +68 -0
  414. sage/misc/stopgap.cpython-314-darwin.so +0 -0
  415. sage/misc/stopgap.pyx +95 -0
  416. sage/misc/table.py +853 -0
  417. sage/monoids/all__sagemath_categories.py +1 -0
  418. sage/monoids/indexed_free_monoid.py +1071 -0
  419. sage/monoids/monoid.py +82 -0
  420. sage/numerical/all__sagemath_categories.py +1 -0
  421. sage/numerical/backends/all__sagemath_categories.py +1 -0
  422. sage/numerical/backends/generic_backend.cpython-314-darwin.so +0 -0
  423. sage/numerical/backends/generic_backend.pxd +61 -0
  424. sage/numerical/backends/generic_backend.pyx +1893 -0
  425. sage/numerical/backends/generic_sdp_backend.cpython-314-darwin.so +0 -0
  426. sage/numerical/backends/generic_sdp_backend.pxd +38 -0
  427. sage/numerical/backends/generic_sdp_backend.pyx +755 -0
  428. sage/parallel/all.py +6 -0
  429. sage/parallel/decorate.py +575 -0
  430. sage/parallel/map_reduce.py +1997 -0
  431. sage/parallel/multiprocessing_sage.py +76 -0
  432. sage/parallel/ncpus.py +35 -0
  433. sage/parallel/parallelism.py +364 -0
  434. sage/parallel/reference.py +47 -0
  435. sage/parallel/use_fork.py +333 -0
  436. sage/rings/abc.cpython-314-darwin.so +0 -0
  437. sage/rings/abc.pxd +31 -0
  438. sage/rings/abc.pyx +526 -0
  439. sage/rings/algebraic_closure_finite_field.py +1154 -0
  440. sage/rings/all__sagemath_categories.py +91 -0
  441. sage/rings/big_oh.py +227 -0
  442. sage/rings/continued_fraction.py +2754 -0
  443. sage/rings/continued_fraction_gosper.py +220 -0
  444. sage/rings/factorint.cpython-314-darwin.so +0 -0
  445. sage/rings/factorint.pyx +295 -0
  446. sage/rings/fast_arith.cpython-314-darwin.so +0 -0
  447. sage/rings/fast_arith.pxd +21 -0
  448. sage/rings/fast_arith.pyx +535 -0
  449. sage/rings/finite_rings/all__sagemath_categories.py +9 -0
  450. sage/rings/finite_rings/conway_polynomials.py +542 -0
  451. sage/rings/finite_rings/element_base.cpython-314-darwin.so +0 -0
  452. sage/rings/finite_rings/element_base.pxd +12 -0
  453. sage/rings/finite_rings/element_base.pyx +1176 -0
  454. sage/rings/finite_rings/finite_field_base.cpython-314-darwin.so +0 -0
  455. sage/rings/finite_rings/finite_field_base.pxd +7 -0
  456. sage/rings/finite_rings/finite_field_base.pyx +2171 -0
  457. sage/rings/finite_rings/finite_field_constructor.py +827 -0
  458. sage/rings/finite_rings/finite_field_prime_modn.py +372 -0
  459. sage/rings/finite_rings/galois_group.py +154 -0
  460. sage/rings/finite_rings/hom_finite_field.cpython-314-darwin.so +0 -0
  461. sage/rings/finite_rings/hom_finite_field.pxd +23 -0
  462. sage/rings/finite_rings/hom_finite_field.pyx +856 -0
  463. sage/rings/finite_rings/hom_prime_finite_field.cpython-314-darwin.so +0 -0
  464. sage/rings/finite_rings/hom_prime_finite_field.pxd +15 -0
  465. sage/rings/finite_rings/hom_prime_finite_field.pyx +164 -0
  466. sage/rings/finite_rings/homset.py +357 -0
  467. sage/rings/finite_rings/integer_mod.cpython-314-darwin.so +0 -0
  468. sage/rings/finite_rings/integer_mod.pxd +56 -0
  469. sage/rings/finite_rings/integer_mod.pyx +4586 -0
  470. sage/rings/finite_rings/integer_mod_limits.h +11 -0
  471. sage/rings/finite_rings/integer_mod_ring.py +2044 -0
  472. sage/rings/finite_rings/residue_field.cpython-314-darwin.so +0 -0
  473. sage/rings/finite_rings/residue_field.pxd +30 -0
  474. sage/rings/finite_rings/residue_field.pyx +1811 -0
  475. sage/rings/finite_rings/stdint.pxd +19 -0
  476. sage/rings/fraction_field.py +1452 -0
  477. sage/rings/fraction_field_element.cpython-314-darwin.so +0 -0
  478. sage/rings/fraction_field_element.pyx +1357 -0
  479. sage/rings/function_field/all.py +7 -0
  480. sage/rings/function_field/all__sagemath_categories.py +2 -0
  481. sage/rings/function_field/constructor.py +218 -0
  482. sage/rings/function_field/element.cpython-314-darwin.so +0 -0
  483. sage/rings/function_field/element.pxd +11 -0
  484. sage/rings/function_field/element.pyx +1008 -0
  485. sage/rings/function_field/element_rational.cpython-314-darwin.so +0 -0
  486. sage/rings/function_field/element_rational.pyx +513 -0
  487. sage/rings/function_field/extensions.py +230 -0
  488. sage/rings/function_field/function_field.py +1468 -0
  489. sage/rings/function_field/function_field_rational.py +1005 -0
  490. sage/rings/function_field/ideal.py +1155 -0
  491. sage/rings/function_field/ideal_rational.py +629 -0
  492. sage/rings/function_field/jacobian_base.py +826 -0
  493. sage/rings/function_field/jacobian_hess.py +1053 -0
  494. sage/rings/function_field/jacobian_khuri_makdisi.py +1027 -0
  495. sage/rings/function_field/maps.py +1039 -0
  496. sage/rings/function_field/order.py +281 -0
  497. sage/rings/function_field/order_basis.py +586 -0
  498. sage/rings/function_field/order_rational.py +576 -0
  499. sage/rings/function_field/place.py +426 -0
  500. sage/rings/function_field/place_rational.py +181 -0
  501. sage/rings/generic.py +320 -0
  502. sage/rings/homset.py +332 -0
  503. sage/rings/ideal.py +1885 -0
  504. sage/rings/ideal_monoid.py +215 -0
  505. sage/rings/infinity.py +1890 -0
  506. sage/rings/integer.cpython-314-darwin.so +0 -0
  507. sage/rings/integer.pxd +45 -0
  508. sage/rings/integer.pyx +7871 -0
  509. sage/rings/integer_ring.cpython-314-darwin.so +0 -0
  510. sage/rings/integer_ring.pxd +8 -0
  511. sage/rings/integer_ring.pyx +1693 -0
  512. sage/rings/laurent_series_ring.py +931 -0
  513. sage/rings/laurent_series_ring_element.cpython-314-darwin.so +0 -0
  514. sage/rings/laurent_series_ring_element.pxd +11 -0
  515. sage/rings/laurent_series_ring_element.pyx +1927 -0
  516. sage/rings/lazy_series.py +7815 -0
  517. sage/rings/lazy_series_ring.py +4356 -0
  518. sage/rings/localization.py +1043 -0
  519. sage/rings/morphism.cpython-314-darwin.so +0 -0
  520. sage/rings/morphism.pxd +39 -0
  521. sage/rings/morphism.pyx +3299 -0
  522. sage/rings/multi_power_series_ring.py +1145 -0
  523. sage/rings/multi_power_series_ring_element.py +2184 -0
  524. sage/rings/noncommutative_ideals.cpython-314-darwin.so +0 -0
  525. sage/rings/noncommutative_ideals.pyx +423 -0
  526. sage/rings/number_field/all__sagemath_categories.py +1 -0
  527. sage/rings/number_field/number_field_base.cpython-314-darwin.so +0 -0
  528. sage/rings/number_field/number_field_base.pxd +8 -0
  529. sage/rings/number_field/number_field_base.pyx +507 -0
  530. sage/rings/number_field/number_field_element_base.cpython-314-darwin.so +0 -0
  531. sage/rings/number_field/number_field_element_base.pxd +6 -0
  532. sage/rings/number_field/number_field_element_base.pyx +36 -0
  533. sage/rings/number_field/number_field_ideal.py +3550 -0
  534. sage/rings/padics/all__sagemath_categories.py +4 -0
  535. sage/rings/padics/local_generic.py +1670 -0
  536. sage/rings/padics/local_generic_element.cpython-314-darwin.so +0 -0
  537. sage/rings/padics/local_generic_element.pxd +5 -0
  538. sage/rings/padics/local_generic_element.pyx +1017 -0
  539. sage/rings/padics/misc.py +256 -0
  540. sage/rings/padics/padic_generic.py +1911 -0
  541. sage/rings/padics/pow_computer.cpython-314-darwin.so +0 -0
  542. sage/rings/padics/pow_computer.pxd +38 -0
  543. sage/rings/padics/pow_computer.pyx +671 -0
  544. sage/rings/padics/precision_error.py +24 -0
  545. sage/rings/polynomial/all__sagemath_categories.py +25 -0
  546. sage/rings/polynomial/commutative_polynomial.cpython-314-darwin.so +0 -0
  547. sage/rings/polynomial/commutative_polynomial.pxd +6 -0
  548. sage/rings/polynomial/commutative_polynomial.pyx +24 -0
  549. sage/rings/polynomial/cyclotomic.cpython-314-darwin.so +0 -0
  550. sage/rings/polynomial/cyclotomic.pyx +404 -0
  551. sage/rings/polynomial/flatten.py +711 -0
  552. sage/rings/polynomial/ideal.py +102 -0
  553. sage/rings/polynomial/infinite_polynomial_element.py +1768 -0
  554. sage/rings/polynomial/infinite_polynomial_ring.py +1653 -0
  555. sage/rings/polynomial/laurent_polynomial.cpython-314-darwin.so +0 -0
  556. sage/rings/polynomial/laurent_polynomial.pxd +18 -0
  557. sage/rings/polynomial/laurent_polynomial.pyx +2190 -0
  558. sage/rings/polynomial/laurent_polynomial_ideal.py +590 -0
  559. sage/rings/polynomial/laurent_polynomial_ring.py +832 -0
  560. sage/rings/polynomial/laurent_polynomial_ring_base.py +708 -0
  561. sage/rings/polynomial/multi_polynomial.cpython-314-darwin.so +0 -0
  562. sage/rings/polynomial/multi_polynomial.pxd +12 -0
  563. sage/rings/polynomial/multi_polynomial.pyx +3082 -0
  564. sage/rings/polynomial/multi_polynomial_element.py +2570 -0
  565. sage/rings/polynomial/multi_polynomial_ideal.py +5771 -0
  566. sage/rings/polynomial/multi_polynomial_ring.py +947 -0
  567. sage/rings/polynomial/multi_polynomial_ring_base.cpython-314-darwin.so +0 -0
  568. sage/rings/polynomial/multi_polynomial_ring_base.pxd +15 -0
  569. sage/rings/polynomial/multi_polynomial_ring_base.pyx +1855 -0
  570. sage/rings/polynomial/multi_polynomial_sequence.py +2204 -0
  571. sage/rings/polynomial/polydict.cpython-314-darwin.so +0 -0
  572. sage/rings/polynomial/polydict.pxd +45 -0
  573. sage/rings/polynomial/polydict.pyx +2701 -0
  574. sage/rings/polynomial/polynomial_compiled.cpython-314-darwin.so +0 -0
  575. sage/rings/polynomial/polynomial_compiled.pxd +59 -0
  576. sage/rings/polynomial/polynomial_compiled.pyx +509 -0
  577. sage/rings/polynomial/polynomial_element.cpython-314-darwin.so +0 -0
  578. sage/rings/polynomial/polynomial_element.pxd +64 -0
  579. sage/rings/polynomial/polynomial_element.pyx +13255 -0
  580. sage/rings/polynomial/polynomial_element_generic.py +1637 -0
  581. sage/rings/polynomial/polynomial_fateman.py +97 -0
  582. sage/rings/polynomial/polynomial_quotient_ring.py +2465 -0
  583. sage/rings/polynomial/polynomial_quotient_ring_element.py +779 -0
  584. sage/rings/polynomial/polynomial_ring.py +3784 -0
  585. sage/rings/polynomial/polynomial_ring_constructor.py +1051 -0
  586. sage/rings/polynomial/polynomial_ring_homomorphism.cpython-314-darwin.so +0 -0
  587. sage/rings/polynomial/polynomial_ring_homomorphism.pxd +5 -0
  588. sage/rings/polynomial/polynomial_ring_homomorphism.pyx +121 -0
  589. sage/rings/polynomial/polynomial_singular_interface.py +549 -0
  590. sage/rings/polynomial/symmetric_ideal.py +989 -0
  591. sage/rings/polynomial/symmetric_reduction.cpython-314-darwin.so +0 -0
  592. sage/rings/polynomial/symmetric_reduction.pxd +8 -0
  593. sage/rings/polynomial/symmetric_reduction.pyx +669 -0
  594. sage/rings/polynomial/term_order.py +2279 -0
  595. sage/rings/polynomial/toy_buchberger.py +449 -0
  596. sage/rings/polynomial/toy_d_basis.py +387 -0
  597. sage/rings/polynomial/toy_variety.py +362 -0
  598. sage/rings/power_series_mpoly.cpython-314-darwin.so +0 -0
  599. sage/rings/power_series_mpoly.pxd +9 -0
  600. sage/rings/power_series_mpoly.pyx +161 -0
  601. sage/rings/power_series_poly.cpython-314-darwin.so +0 -0
  602. sage/rings/power_series_poly.pxd +10 -0
  603. sage/rings/power_series_poly.pyx +1317 -0
  604. sage/rings/power_series_ring.py +1441 -0
  605. sage/rings/power_series_ring_element.cpython-314-darwin.so +0 -0
  606. sage/rings/power_series_ring_element.pxd +12 -0
  607. sage/rings/power_series_ring_element.pyx +3028 -0
  608. sage/rings/puiseux_series_ring.py +487 -0
  609. sage/rings/puiseux_series_ring_element.cpython-314-darwin.so +0 -0
  610. sage/rings/puiseux_series_ring_element.pxd +7 -0
  611. sage/rings/puiseux_series_ring_element.pyx +1055 -0
  612. sage/rings/qqbar_decorators.py +167 -0
  613. sage/rings/quotient_ring.py +1598 -0
  614. sage/rings/quotient_ring_element.py +979 -0
  615. sage/rings/rational.cpython-314-darwin.so +0 -0
  616. sage/rings/rational.pxd +20 -0
  617. sage/rings/rational.pyx +4284 -0
  618. sage/rings/rational_field.py +1730 -0
  619. sage/rings/real_double.cpython-314-darwin.so +0 -0
  620. sage/rings/real_double.pxd +16 -0
  621. sage/rings/real_double.pyx +2215 -0
  622. sage/rings/real_lazy.cpython-314-darwin.so +0 -0
  623. sage/rings/real_lazy.pxd +30 -0
  624. sage/rings/real_lazy.pyx +1773 -0
  625. sage/rings/ring.cpython-314-darwin.so +0 -0
  626. sage/rings/ring.pxd +30 -0
  627. sage/rings/ring.pyx +850 -0
  628. sage/rings/semirings/all.py +3 -0
  629. sage/rings/semirings/non_negative_integer_semiring.py +107 -0
  630. sage/rings/semirings/tropical_mpolynomial.py +972 -0
  631. sage/rings/semirings/tropical_polynomial.py +997 -0
  632. sage/rings/semirings/tropical_semiring.cpython-314-darwin.so +0 -0
  633. sage/rings/semirings/tropical_semiring.pyx +676 -0
  634. sage/rings/semirings/tropical_variety.py +1701 -0
  635. sage/rings/sum_of_squares.cpython-314-darwin.so +0 -0
  636. sage/rings/sum_of_squares.pxd +3 -0
  637. sage/rings/sum_of_squares.pyx +336 -0
  638. sage/rings/tests.py +504 -0
  639. sage/schemes/affine/affine_homset.py +508 -0
  640. sage/schemes/affine/affine_morphism.py +1574 -0
  641. sage/schemes/affine/affine_point.py +460 -0
  642. sage/schemes/affine/affine_rational_point.py +308 -0
  643. sage/schemes/affine/affine_space.py +1264 -0
  644. sage/schemes/affine/affine_subscheme.py +592 -0
  645. sage/schemes/affine/all.py +25 -0
  646. sage/schemes/all__sagemath_categories.py +5 -0
  647. sage/schemes/generic/algebraic_scheme.py +2092 -0
  648. sage/schemes/generic/all.py +5 -0
  649. sage/schemes/generic/ambient_space.py +400 -0
  650. sage/schemes/generic/divisor.py +465 -0
  651. sage/schemes/generic/divisor_group.py +313 -0
  652. sage/schemes/generic/glue.py +84 -0
  653. sage/schemes/generic/homset.py +820 -0
  654. sage/schemes/generic/hypersurface.py +234 -0
  655. sage/schemes/generic/morphism.py +2107 -0
  656. sage/schemes/generic/point.py +237 -0
  657. sage/schemes/generic/scheme.py +1190 -0
  658. sage/schemes/generic/spec.py +199 -0
  659. sage/schemes/product_projective/all.py +6 -0
  660. sage/schemes/product_projective/homset.py +236 -0
  661. sage/schemes/product_projective/morphism.py +517 -0
  662. sage/schemes/product_projective/point.py +568 -0
  663. sage/schemes/product_projective/rational_point.py +550 -0
  664. sage/schemes/product_projective/space.py +1301 -0
  665. sage/schemes/product_projective/subscheme.py +466 -0
  666. sage/schemes/projective/all.py +24 -0
  667. sage/schemes/projective/proj_bdd_height.py +453 -0
  668. sage/schemes/projective/projective_homset.py +718 -0
  669. sage/schemes/projective/projective_morphism.py +2792 -0
  670. sage/schemes/projective/projective_point.py +1484 -0
  671. sage/schemes/projective/projective_rational_point.py +569 -0
  672. sage/schemes/projective/projective_space.py +2571 -0
  673. sage/schemes/projective/projective_subscheme.py +1574 -0
  674. sage/sets/all.py +17 -0
  675. sage/sets/cartesian_product.py +376 -0
  676. sage/sets/condition_set.py +525 -0
  677. sage/sets/disjoint_set.cpython-314-darwin.so +0 -0
  678. sage/sets/disjoint_set.pxd +36 -0
  679. sage/sets/disjoint_set.pyx +998 -0
  680. sage/sets/disjoint_union_enumerated_sets.py +625 -0
  681. sage/sets/family.cpython-314-darwin.so +0 -0
  682. sage/sets/family.pxd +12 -0
  683. sage/sets/family.pyx +1556 -0
  684. sage/sets/finite_enumerated_set.py +406 -0
  685. sage/sets/finite_set_map_cy.cpython-314-darwin.so +0 -0
  686. sage/sets/finite_set_map_cy.pxd +34 -0
  687. sage/sets/finite_set_map_cy.pyx +708 -0
  688. sage/sets/finite_set_maps.py +591 -0
  689. sage/sets/image_set.py +448 -0
  690. sage/sets/integer_range.py +829 -0
  691. sage/sets/non_negative_integers.py +241 -0
  692. sage/sets/positive_integers.py +93 -0
  693. sage/sets/primes.py +188 -0
  694. sage/sets/real_set.py +2760 -0
  695. sage/sets/recursively_enumerated_set.cpython-314-darwin.so +0 -0
  696. sage/sets/recursively_enumerated_set.pxd +31 -0
  697. sage/sets/recursively_enumerated_set.pyx +2082 -0
  698. sage/sets/set.py +2083 -0
  699. sage/sets/set_from_iterator.py +1021 -0
  700. sage/sets/totally_ordered_finite_set.py +329 -0
  701. sage/symbolic/all__sagemath_categories.py +1 -0
  702. sage/symbolic/function.cpython-314-darwin.so +0 -0
  703. sage/symbolic/function.pxd +29 -0
  704. sage/symbolic/function.pyx +1488 -0
  705. sage/symbolic/symbols.py +56 -0
  706. sage/tests/all__sagemath_categories.py +1 -0
  707. sage/tests/cython.cpython-314-darwin.so +0 -0
  708. sage/tests/cython.pyx +37 -0
  709. sage/tests/stl_vector.cpython-314-darwin.so +0 -0
  710. sage/tests/stl_vector.pyx +171 -0
  711. sage/typeset/all.py +6 -0
  712. sage/typeset/ascii_art.py +295 -0
  713. sage/typeset/character_art.py +789 -0
  714. sage/typeset/character_art_factory.py +572 -0
  715. sage/typeset/symbols.py +334 -0
  716. sage/typeset/unicode_art.py +183 -0
  717. sage/typeset/unicode_characters.py +101 -0
@@ -0,0 +1,333 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ """
3
+ Parallel iterator built using the ``fork()`` system call
4
+ """
5
+
6
+ # ****************************************************************************
7
+ # Copyright (C) 2010 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
+
17
+ import sys
18
+ from shutil import rmtree
19
+
20
+ if sys.platform != 'win32':
21
+ from cysignals.alarm import AlarmInterrupt, alarm, cancel_alarm
22
+
23
+ from sage.interfaces.process import ContainChildren
24
+ from sage.misc.timing import walltime
25
+
26
+ from sage.misc.randstate import set_random_seed
27
+ from sage.misc.prandom import getrandbits
28
+
29
+
30
+ class WorkerData:
31
+ """
32
+ Simple class which stores data about a running ``p_iter_fork``
33
+ worker.
34
+
35
+ This just stores three attributes:
36
+
37
+ - ``input`` -- the input value used by this worker
38
+
39
+ - ``starttime`` -- the walltime when this worker started
40
+
41
+ - ``failure`` -- an optional message indicating the kind of failure
42
+
43
+ EXAMPLES::
44
+
45
+ sage: from sage.parallel.use_fork import WorkerData
46
+ sage: W = WorkerData(42); W
47
+ <sage.parallel.use_fork.WorkerData object at ...>
48
+ sage: W.starttime # random
49
+ 1499330252.463206
50
+ """
51
+ def __init__(self, input_value, starttime=None, failure=""):
52
+ r"""
53
+ See the class documentation for description of the inputs.
54
+
55
+ EXAMPLES::
56
+
57
+ sage: from sage.parallel.use_fork import WorkerData
58
+ sage: W = WorkerData(42)
59
+ """
60
+ self.input = input_value
61
+ self.starttime = starttime or walltime()
62
+ self.failure = failure
63
+
64
+
65
+ class p_iter_fork:
66
+ """
67
+ A parallel iterator implemented using ``fork()``.
68
+
69
+ INPUT:
70
+
71
+ - ``ncpus`` -- the maximal number of simultaneous subprocesses to spawn
72
+ - ``timeout`` -- float (default: 0); wall time in seconds until a
73
+ subprocess is automatically killed
74
+ - ``verbose`` -- boolean (default: ``False``); whether to print anything
75
+ about what the iterator does (e.g., killing subprocesses)
76
+ - ``reset_interfaces`` -- boolean (default: ``True``); whether to reset all
77
+ pexpect interfaces
78
+ - ``reseed_rng`` -- boolean (default: ``False``); whether or not to reseed
79
+ the rng in the subprocesses
80
+
81
+ EXAMPLES::
82
+
83
+ sage: X = sage.parallel.use_fork.p_iter_fork(2,3, False); X
84
+ <sage.parallel.use_fork.p_iter_fork object at ...>
85
+ sage: X.ncpus
86
+ 2
87
+ sage: X.timeout
88
+ 3.0
89
+ sage: X.verbose
90
+ False
91
+ """
92
+ def __init__(self, ncpus, timeout=0, verbose=False, reset_interfaces=True, reseed_rng=False):
93
+ """
94
+ Create a ``fork()``-based parallel iterator.
95
+
96
+ See the class documentation for description of the inputs.
97
+
98
+ EXAMPLES::
99
+
100
+ sage: X = sage.parallel.use_fork.p_iter_fork(2,3, False); X
101
+ <sage.parallel.use_fork.p_iter_fork object at ...>
102
+ sage: X.ncpus
103
+ 2
104
+ sage: X.timeout
105
+ 3.0
106
+ sage: X.verbose
107
+ False
108
+ """
109
+ self.ncpus = int(ncpus)
110
+ if self.ncpus != ncpus: # check that there wasn't a roundoff
111
+ raise TypeError("ncpus must be an integer")
112
+ self.timeout = float(timeout) # require a float
113
+ self.verbose = verbose
114
+ self.reset_interfaces = reset_interfaces
115
+ self.reseed_rng = reseed_rng
116
+ self.worker_seed = None
117
+
118
+ def __call__(self, f, inputs):
119
+ """
120
+ Parallel iterator using ``fork()``.
121
+
122
+ INPUT:
123
+
124
+ - ``f`` -- a function (or more general, any callable)
125
+
126
+ - ``inputs`` -- list of pairs ``(args, kwds)`` to be used as
127
+ arguments to ``f``, where ``args`` is a tuple and ``kwds`` is
128
+ a dictionary
129
+
130
+ EXAMPLES::
131
+
132
+ sage: F = sage.parallel.use_fork.p_iter_fork(2,3)
133
+ sage: sorted(list( F( (lambda x: x^2), [([10],{}), ([20],{})])))
134
+ [(([10], {}), 100), (([20], {}), 400)]
135
+ sage: sorted(list( F( (lambda x, y: x^2+y), [([10],{'y':1}), ([20],{'y':2})])))
136
+ [(([10], {'y': 1}), 101), (([20], {'y': 2}), 402)]
137
+
138
+ TESTS:
139
+
140
+ The output of functions decorated with :func:`parallel` is read
141
+ as a pickle by the parent process. We intentionally break the
142
+ unpickling and demonstrate that this failure is handled
143
+ gracefully (the exception is put in the list instead of the
144
+ answer)::
145
+
146
+ sage: Polygen = parallel(polygen)
147
+ sage: list(Polygen([QQ]))
148
+ [(((Rational Field,), {}), x)]
149
+ sage: from sage.misc.persist import unpickle_override, register_unpickle_override
150
+ sage: register_unpickle_override('sage.rings.polynomial.polynomial_rational_flint', 'Polynomial_rational_flint', Integer)
151
+ sage: L = list(Polygen([QQ]))
152
+ sage: L
153
+ [(((Rational Field,), {}),
154
+ 'INVALID DATA __init__() takes at most 2 positional arguments (4 given)')]
155
+
156
+ Fix the unpickling::
157
+
158
+ sage: del unpickle_override[('sage.rings.polynomial.polynomial_rational_flint', 'Polynomial_rational_flint')]
159
+ sage: list(Polygen([QQ,QQ]))
160
+ [(((Rational Field,), {}), x), (((Rational Field,), {}), x)]
161
+ """
162
+ import os
163
+ import sys
164
+ import signal
165
+ from sage.misc.persist import loads
166
+ from sage.misc.temporary_file import tmp_dir
167
+ dir = tmp_dir()
168
+ timeout = self.timeout
169
+
170
+ n = self.ncpus
171
+ inputs = list(inputs)
172
+ if self.reseed_rng:
173
+ seeds = [getrandbits(512) for _ in range(len(inputs))]
174
+ vs = list(zip(inputs, seeds))
175
+ else:
176
+ vs = list(zip(inputs, [None]*len(inputs)))
177
+ workers = {}
178
+ try:
179
+ while vs or workers:
180
+ # Spawn up to n subprocesses
181
+ while vs and len(workers) < n:
182
+ v0, seed0 = vs.pop(0) # Input value and seed for the next subprocess
183
+ with ContainChildren():
184
+ pid = os.fork()
185
+ # The way fork works is that pid returns the
186
+ # nonzero pid of the subprocess for the master
187
+ # process and returns 0 for the subprocess.
188
+ if not pid:
189
+ # This is the subprocess.
190
+ if self.reseed_rng:
191
+ self.worker_seed = seed0
192
+ self._subprocess(f, dir, *v0)
193
+ workers[pid] = WorkerData(v0)
194
+
195
+ if len(workers) > 0:
196
+ # Now wait for one subprocess to finish and report the result.
197
+ # However, wait at most the time since the oldest process started.
198
+ T = walltime()
199
+ if timeout:
200
+ oldest = min(W.starttime for W in workers.values())
201
+ alarm(max(timeout - (T - oldest), 0.1))
202
+
203
+ try:
204
+ pid = os.wait()[0]
205
+ cancel_alarm()
206
+ W = workers.pop(pid)
207
+ except AlarmInterrupt:
208
+ # Kill workers that are too old
209
+ for pid, W in workers.items():
210
+ if T - W.starttime > timeout:
211
+ if self.verbose:
212
+ print(
213
+ "Killing subprocess %s with input %s which took too long" % (pid, W.input))
214
+ os.kill(pid, signal.SIGKILL)
215
+ W.failure = " (timed out)"
216
+ except KeyError:
217
+ # Some other process exited, not our problem...
218
+ pass
219
+ else:
220
+ # collect data from process that successfully terminated
221
+ sobj = os.path.join(dir, '%s.sobj' % pid)
222
+ try:
223
+ with open(sobj, "rb") as file:
224
+ data = file.read()
225
+ except OSError:
226
+ answer = "NO DATA" + W.failure
227
+ else:
228
+ os.unlink(sobj)
229
+ try:
230
+ answer = loads(data, compress=False)
231
+ except Exception as E:
232
+ answer = "INVALID DATA {}".format(E)
233
+
234
+ out = os.path.join(dir, '%s.out' % pid)
235
+ try:
236
+ with open(out) as file:
237
+ sys.stdout.write(file.read())
238
+ os.unlink(out)
239
+ except OSError:
240
+ pass
241
+
242
+ yield (W.input, answer)
243
+ finally:
244
+ # Send SIGKILL signal to workers that are left.
245
+ if workers:
246
+ if self.verbose:
247
+ print("Killing any remaining workers...")
248
+ sys.stdout.flush()
249
+ for pid in workers:
250
+ try:
251
+ os.kill(pid, signal.SIGKILL)
252
+ except OSError:
253
+ # If kill() failed, it is most likely because
254
+ # the process already exited.
255
+ pass
256
+ else:
257
+ try:
258
+ os.waitpid(pid, 0)
259
+ except OSError as msg:
260
+ if self.verbose:
261
+ print(msg)
262
+
263
+ # Clean up all temporary files.
264
+ rmtree(dir)
265
+
266
+ def _subprocess(self, f, dir, args, kwds={}):
267
+ """
268
+ Setup and run evaluation of ``f(*args, **kwds)``, storing the
269
+ result in the given directory ``dir``.
270
+
271
+ This method is called by each forked subprocess.
272
+
273
+ INPUT:
274
+
275
+ - ``f`` -- a function
276
+
277
+ - ``dir`` -- name of a directory
278
+
279
+ - ``args`` -- tuple with positional arguments for ``f``
280
+
281
+ - ``kwds`` -- (optional) a dict with keyword arguments for ``f``
282
+
283
+ TESTS:
284
+
285
+ The method ``_subprocess`` is really meant to be run only in a
286
+ subprocess. It doesn't print not return anything, the output is
287
+ saved in pickles. It redirects stdout, so we save and later
288
+ restore stdout in order not to break the doctester::
289
+
290
+ sage: saved_stdout = sys.stdout
291
+ sage: F = sage.parallel.use_fork.p_iter_fork(2,3)
292
+ sage: F._subprocess(operator.add, tmp_dir(), (1, 2))
293
+ sage: sys.stdout = saved_stdout
294
+ """
295
+ import os
296
+ import sys
297
+ try:
298
+ from importlib import reload
299
+ except ImportError:
300
+ from imp import reload
301
+ from sage.misc.persist import save
302
+
303
+ # Make it so all stdout is sent to a file so it can
304
+ # be displayed.
305
+ out = os.path.join(dir, '%s.out' % os.getpid())
306
+ sys.stdout = open(out, 'w')
307
+
308
+ # Run some commands to tell Sage that its
309
+ # pid has changed (forcing a reload of
310
+ # misc).
311
+ import sage.misc.misc
312
+ reload(sage.misc.misc)
313
+
314
+ # The pexpect interfaces (and objects defined in them) are
315
+ # not valid.
316
+ if self.reset_interfaces:
317
+ try:
318
+ from sage.interfaces.quit import invalidate_all
319
+ except ImportError:
320
+ pass
321
+ else:
322
+ invalidate_all()
323
+
324
+ # Reseed rng, if requested.
325
+ if self.reseed_rng:
326
+ set_random_seed(self.worker_seed)
327
+
328
+ # Now evaluate the function f.
329
+ value = f(*args, **kwds)
330
+
331
+ # And save the result to disk.
332
+ sobj = os.path.join(dir, '%s.sobj' % os.getpid())
333
+ save(value, sobj, compress=False)
Binary file
sage/rings/abc.pxd ADDED
@@ -0,0 +1,31 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ from sage.rings.ring cimport CommutativeRing, Field
3
+
4
+ cdef class RealField(Field):
5
+
6
+ pass
7
+
8
+
9
+ cdef class RealIntervalField(Field):
10
+
11
+ pass
12
+
13
+
14
+ cdef class RealDoubleField(Field):
15
+
16
+ pass
17
+
18
+
19
+ cdef class ComplexField(Field):
20
+
21
+ pass
22
+
23
+
24
+ cdef class ComplexDoubleField(Field):
25
+
26
+ pass
27
+
28
+
29
+ cdef class SymbolicRing(CommutativeRing):
30
+
31
+ pass