passagemath-categories 10.6.32__cp314-cp314t-musllinux_1_2_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.
Files changed (719) hide show
  1. passagemath_categories-10.6.32.dist-info/METADATA +156 -0
  2. passagemath_categories-10.6.32.dist-info/RECORD +719 -0
  3. passagemath_categories-10.6.32.dist-info/WHEEL +5 -0
  4. passagemath_categories-10.6.32.dist-info/top_level.txt +2 -0
  5. passagemath_categories.libs/libgcc_s-2d945d6c.so.1 +0 -0
  6. passagemath_categories.libs/libgmp-28992bcb.so.10.5.0 +0 -0
  7. passagemath_categories.libs/libstdc++-85f2cd6d.so.6.0.33 +0 -0
  8. sage/all__sagemath_categories.py +28 -0
  9. sage/arith/all.py +38 -0
  10. sage/arith/constants.pxd +27 -0
  11. sage/arith/functions.cpython-314t-aarch64-linux-musl.so +0 -0
  12. sage/arith/functions.pxd +4 -0
  13. sage/arith/functions.pyx +221 -0
  14. sage/arith/misc.py +6552 -0
  15. sage/arith/multi_modular.cpython-314t-aarch64-linux-musl.so +0 -0
  16. sage/arith/multi_modular.pxd +39 -0
  17. sage/arith/multi_modular.pyx +994 -0
  18. sage/arith/rational_reconstruction.cpython-314t-aarch64-linux-musl.so +0 -0
  19. sage/arith/rational_reconstruction.pxd +4 -0
  20. sage/arith/rational_reconstruction.pyx +115 -0
  21. sage/arith/srange.cpython-314t-aarch64-linux-musl.so +0 -0
  22. sage/arith/srange.pyx +571 -0
  23. sage/calculus/all__sagemath_categories.py +2 -0
  24. sage/calculus/functional.py +481 -0
  25. sage/calculus/functions.py +151 -0
  26. sage/categories/additive_groups.py +73 -0
  27. sage/categories/additive_magmas.py +1044 -0
  28. sage/categories/additive_monoids.py +114 -0
  29. sage/categories/additive_semigroups.py +184 -0
  30. sage/categories/affine_weyl_groups.py +238 -0
  31. sage/categories/algebra_ideals.py +95 -0
  32. sage/categories/algebra_modules.py +96 -0
  33. sage/categories/algebras.py +349 -0
  34. sage/categories/algebras_with_basis.py +377 -0
  35. sage/categories/all.py +160 -0
  36. sage/categories/aperiodic_semigroups.py +29 -0
  37. sage/categories/associative_algebras.py +47 -0
  38. sage/categories/bialgebras.py +101 -0
  39. sage/categories/bialgebras_with_basis.py +414 -0
  40. sage/categories/bimodules.py +206 -0
  41. sage/categories/chain_complexes.py +268 -0
  42. sage/categories/classical_crystals.py +480 -0
  43. sage/categories/coalgebras.py +405 -0
  44. sage/categories/coalgebras_with_basis.py +232 -0
  45. sage/categories/coercion_methods.cpython-314t-aarch64-linux-musl.so +0 -0
  46. sage/categories/coercion_methods.pyx +52 -0
  47. sage/categories/commutative_additive_groups.py +104 -0
  48. sage/categories/commutative_additive_monoids.py +45 -0
  49. sage/categories/commutative_additive_semigroups.py +48 -0
  50. sage/categories/commutative_algebra_ideals.py +87 -0
  51. sage/categories/commutative_algebras.py +94 -0
  52. sage/categories/commutative_ring_ideals.py +58 -0
  53. sage/categories/commutative_rings.py +736 -0
  54. sage/categories/complete_discrete_valuation.py +293 -0
  55. sage/categories/complex_reflection_groups.py +145 -0
  56. sage/categories/complex_reflection_or_generalized_coxeter_groups.py +1249 -0
  57. sage/categories/coxeter_group_algebras.py +186 -0
  58. sage/categories/coxeter_groups.py +3402 -0
  59. sage/categories/crystals.py +2628 -0
  60. sage/categories/cw_complexes.py +216 -0
  61. sage/categories/dedekind_domains.py +137 -0
  62. sage/categories/discrete_valuation.py +325 -0
  63. sage/categories/distributive_magmas_and_additive_magmas.py +100 -0
  64. sage/categories/division_rings.py +114 -0
  65. sage/categories/domains.py +95 -0
  66. sage/categories/drinfeld_modules.py +789 -0
  67. sage/categories/dual.py +42 -0
  68. sage/categories/enumerated_sets.py +1146 -0
  69. sage/categories/euclidean_domains.py +271 -0
  70. sage/categories/examples/algebras_with_basis.py +102 -0
  71. sage/categories/examples/all.py +1 -0
  72. sage/categories/examples/commutative_additive_monoids.py +130 -0
  73. sage/categories/examples/commutative_additive_semigroups.py +199 -0
  74. sage/categories/examples/coxeter_groups.py +8 -0
  75. sage/categories/examples/crystals.py +236 -0
  76. sage/categories/examples/cw_complexes.py +163 -0
  77. sage/categories/examples/facade_sets.py +187 -0
  78. sage/categories/examples/filtered_algebras_with_basis.py +204 -0
  79. sage/categories/examples/filtered_modules_with_basis.py +154 -0
  80. sage/categories/examples/finite_coxeter_groups.py +252 -0
  81. sage/categories/examples/finite_dimensional_algebras_with_basis.py +148 -0
  82. sage/categories/examples/finite_dimensional_lie_algebras_with_basis.py +495 -0
  83. sage/categories/examples/finite_enumerated_sets.py +208 -0
  84. sage/categories/examples/finite_monoids.py +150 -0
  85. sage/categories/examples/finite_semigroups.py +190 -0
  86. sage/categories/examples/finite_weyl_groups.py +191 -0
  87. sage/categories/examples/graded_connected_hopf_algebras_with_basis.py +152 -0
  88. sage/categories/examples/graded_modules_with_basis.py +168 -0
  89. sage/categories/examples/graphs.py +122 -0
  90. sage/categories/examples/hopf_algebras_with_basis.py +145 -0
  91. sage/categories/examples/infinite_enumerated_sets.py +190 -0
  92. sage/categories/examples/lie_algebras.py +352 -0
  93. sage/categories/examples/lie_algebras_with_basis.py +196 -0
  94. sage/categories/examples/magmas.py +162 -0
  95. sage/categories/examples/manifolds.py +94 -0
  96. sage/categories/examples/monoids.py +144 -0
  97. sage/categories/examples/posets.py +178 -0
  98. sage/categories/examples/semigroups.py +580 -0
  99. sage/categories/examples/semigroups_cython.cpython-314t-aarch64-linux-musl.so +0 -0
  100. sage/categories/examples/semigroups_cython.pyx +221 -0
  101. sage/categories/examples/semirings.py +249 -0
  102. sage/categories/examples/sets_cat.py +706 -0
  103. sage/categories/examples/sets_with_grading.py +101 -0
  104. sage/categories/examples/with_realizations.py +542 -0
  105. sage/categories/fields.py +991 -0
  106. sage/categories/filtered_algebras.py +63 -0
  107. sage/categories/filtered_algebras_with_basis.py +548 -0
  108. sage/categories/filtered_hopf_algebras_with_basis.py +138 -0
  109. sage/categories/filtered_modules.py +210 -0
  110. sage/categories/filtered_modules_with_basis.py +1209 -0
  111. sage/categories/finite_complex_reflection_groups.py +1506 -0
  112. sage/categories/finite_coxeter_groups.py +1138 -0
  113. sage/categories/finite_crystals.py +103 -0
  114. sage/categories/finite_dimensional_algebras_with_basis.py +1860 -0
  115. sage/categories/finite_dimensional_bialgebras_with_basis.py +33 -0
  116. sage/categories/finite_dimensional_coalgebras_with_basis.py +33 -0
  117. sage/categories/finite_dimensional_graded_lie_algebras_with_basis.py +231 -0
  118. sage/categories/finite_dimensional_hopf_algebras_with_basis.py +38 -0
  119. sage/categories/finite_dimensional_lie_algebras_with_basis.py +2774 -0
  120. sage/categories/finite_dimensional_modules_with_basis.py +1407 -0
  121. sage/categories/finite_dimensional_nilpotent_lie_algebras_with_basis.py +167 -0
  122. sage/categories/finite_dimensional_semisimple_algebras_with_basis.py +270 -0
  123. sage/categories/finite_enumerated_sets.py +769 -0
  124. sage/categories/finite_fields.py +252 -0
  125. sage/categories/finite_groups.py +256 -0
  126. sage/categories/finite_lattice_posets.py +242 -0
  127. sage/categories/finite_monoids.py +316 -0
  128. sage/categories/finite_permutation_groups.py +339 -0
  129. sage/categories/finite_posets.py +1994 -0
  130. sage/categories/finite_semigroups.py +136 -0
  131. sage/categories/finite_sets.py +93 -0
  132. sage/categories/finite_weyl_groups.py +39 -0
  133. sage/categories/finitely_generated_lambda_bracket_algebras.py +112 -0
  134. sage/categories/finitely_generated_lie_conformal_algebras.py +114 -0
  135. sage/categories/finitely_generated_magmas.py +57 -0
  136. sage/categories/finitely_generated_semigroups.py +214 -0
  137. sage/categories/function_fields.py +76 -0
  138. sage/categories/g_sets.py +77 -0
  139. sage/categories/gcd_domains.py +65 -0
  140. sage/categories/generalized_coxeter_groups.py +94 -0
  141. sage/categories/graded_algebras.py +85 -0
  142. sage/categories/graded_algebras_with_basis.py +258 -0
  143. sage/categories/graded_bialgebras.py +32 -0
  144. sage/categories/graded_bialgebras_with_basis.py +32 -0
  145. sage/categories/graded_coalgebras.py +65 -0
  146. sage/categories/graded_coalgebras_with_basis.py +51 -0
  147. sage/categories/graded_hopf_algebras.py +41 -0
  148. sage/categories/graded_hopf_algebras_with_basis.py +169 -0
  149. sage/categories/graded_lie_algebras.py +91 -0
  150. sage/categories/graded_lie_algebras_with_basis.py +44 -0
  151. sage/categories/graded_lie_conformal_algebras.py +74 -0
  152. sage/categories/graded_modules.py +133 -0
  153. sage/categories/graded_modules_with_basis.py +329 -0
  154. sage/categories/graphs.py +138 -0
  155. sage/categories/group_algebras.py +430 -0
  156. sage/categories/groupoid.py +94 -0
  157. sage/categories/groups.py +667 -0
  158. sage/categories/h_trivial_semigroups.py +64 -0
  159. sage/categories/hecke_modules.py +185 -0
  160. sage/categories/highest_weight_crystals.py +980 -0
  161. sage/categories/hopf_algebras.py +219 -0
  162. sage/categories/hopf_algebras_with_basis.py +309 -0
  163. sage/categories/infinite_enumerated_sets.py +115 -0
  164. sage/categories/integral_domains.py +203 -0
  165. sage/categories/j_trivial_semigroups.py +29 -0
  166. sage/categories/kac_moody_algebras.py +82 -0
  167. sage/categories/kahler_algebras.py +203 -0
  168. sage/categories/l_trivial_semigroups.py +63 -0
  169. sage/categories/lambda_bracket_algebras.py +280 -0
  170. sage/categories/lambda_bracket_algebras_with_basis.py +107 -0
  171. sage/categories/lattice_posets.py +89 -0
  172. sage/categories/left_modules.py +49 -0
  173. sage/categories/lie_algebras.py +1070 -0
  174. sage/categories/lie_algebras_with_basis.py +261 -0
  175. sage/categories/lie_conformal_algebras.py +350 -0
  176. sage/categories/lie_conformal_algebras_with_basis.py +147 -0
  177. sage/categories/lie_groups.py +73 -0
  178. sage/categories/loop_crystals.py +1290 -0
  179. sage/categories/magmas.py +1189 -0
  180. sage/categories/magmas_and_additive_magmas.py +149 -0
  181. sage/categories/magmatic_algebras.py +365 -0
  182. sage/categories/manifolds.py +352 -0
  183. sage/categories/matrix_algebras.py +40 -0
  184. sage/categories/metric_spaces.py +387 -0
  185. sage/categories/modular_abelian_varieties.py +78 -0
  186. sage/categories/modules.py +989 -0
  187. sage/categories/modules_with_basis.py +2794 -0
  188. sage/categories/monoid_algebras.py +38 -0
  189. sage/categories/monoids.py +739 -0
  190. sage/categories/noetherian_rings.py +87 -0
  191. sage/categories/number_fields.py +242 -0
  192. sage/categories/ore_modules.py +189 -0
  193. sage/categories/partially_ordered_monoids.py +49 -0
  194. sage/categories/permutation_groups.py +63 -0
  195. sage/categories/pointed_sets.py +42 -0
  196. sage/categories/polyhedra.py +74 -0
  197. sage/categories/poor_man_map.py +270 -0
  198. sage/categories/posets.py +722 -0
  199. sage/categories/principal_ideal_domains.py +270 -0
  200. sage/categories/quantum_group_representations.py +543 -0
  201. sage/categories/quotient_fields.py +728 -0
  202. sage/categories/r_trivial_semigroups.py +45 -0
  203. sage/categories/regular_crystals.py +898 -0
  204. sage/categories/regular_supercrystals.py +170 -0
  205. sage/categories/right_modules.py +49 -0
  206. sage/categories/ring_ideals.py +74 -0
  207. sage/categories/rings.py +1904 -0
  208. sage/categories/rngs.py +175 -0
  209. sage/categories/schemes.py +393 -0
  210. sage/categories/semigroups.py +1060 -0
  211. sage/categories/semirings.py +71 -0
  212. sage/categories/semisimple_algebras.py +114 -0
  213. sage/categories/sets_with_grading.py +235 -0
  214. sage/categories/shephard_groups.py +43 -0
  215. sage/categories/signed_tensor.py +120 -0
  216. sage/categories/simplicial_complexes.py +134 -0
  217. sage/categories/simplicial_sets.py +1206 -0
  218. sage/categories/super_algebras.py +149 -0
  219. sage/categories/super_algebras_with_basis.py +144 -0
  220. sage/categories/super_hopf_algebras_with_basis.py +126 -0
  221. sage/categories/super_lie_conformal_algebras.py +193 -0
  222. sage/categories/super_modules.py +229 -0
  223. sage/categories/super_modules_with_basis.py +193 -0
  224. sage/categories/supercommutative_algebras.py +99 -0
  225. sage/categories/supercrystals.py +406 -0
  226. sage/categories/tensor.py +110 -0
  227. sage/categories/topological_spaces.py +170 -0
  228. sage/categories/triangular_kac_moody_algebras.py +439 -0
  229. sage/categories/tutorial.py +58 -0
  230. sage/categories/unique_factorization_domains.py +318 -0
  231. sage/categories/unital_algebras.py +426 -0
  232. sage/categories/vector_bundles.py +159 -0
  233. sage/categories/vector_spaces.py +357 -0
  234. sage/categories/weyl_groups.py +853 -0
  235. sage/combinat/all__sagemath_categories.py +34 -0
  236. sage/combinat/backtrack.py +180 -0
  237. sage/combinat/combinat.py +2269 -0
  238. sage/combinat/combinat_cython.cpython-314t-aarch64-linux-musl.so +0 -0
  239. sage/combinat/combinat_cython.pxd +6 -0
  240. sage/combinat/combinat_cython.pyx +390 -0
  241. sage/combinat/combination.py +796 -0
  242. sage/combinat/combinatorial_map.py +416 -0
  243. sage/combinat/composition.py +2192 -0
  244. sage/combinat/dlx.py +510 -0
  245. sage/combinat/integer_lists/__init__.py +7 -0
  246. sage/combinat/integer_lists/base.cpython-314t-aarch64-linux-musl.so +0 -0
  247. sage/combinat/integer_lists/base.pxd +16 -0
  248. sage/combinat/integer_lists/base.pyx +713 -0
  249. sage/combinat/integer_lists/invlex.cpython-314t-aarch64-linux-musl.so +0 -0
  250. sage/combinat/integer_lists/invlex.pxd +4 -0
  251. sage/combinat/integer_lists/invlex.pyx +1650 -0
  252. sage/combinat/integer_lists/lists.py +328 -0
  253. sage/combinat/integer_lists/nn.py +48 -0
  254. sage/combinat/integer_vector.py +1818 -0
  255. sage/combinat/integer_vector_weighted.py +413 -0
  256. sage/combinat/matrices/all__sagemath_categories.py +5 -0
  257. sage/combinat/matrices/dancing_links.cpython-314t-aarch64-linux-musl.so +0 -0
  258. sage/combinat/matrices/dancing_links.pyx +1159 -0
  259. sage/combinat/matrices/dancing_links_c.h +380 -0
  260. sage/combinat/matrices/dlxcpp.py +136 -0
  261. sage/combinat/partition.py +10070 -0
  262. sage/combinat/partitions.cpython-314t-aarch64-linux-musl.so +0 -0
  263. sage/combinat/partitions.pyx +743 -0
  264. sage/combinat/permutation.py +10168 -0
  265. sage/combinat/permutation_cython.cpython-314t-aarch64-linux-musl.so +0 -0
  266. sage/combinat/permutation_cython.pxd +11 -0
  267. sage/combinat/permutation_cython.pyx +407 -0
  268. sage/combinat/q_analogues.py +1090 -0
  269. sage/combinat/ranker.py +268 -0
  270. sage/combinat/subset.py +1561 -0
  271. sage/combinat/subsets_hereditary.py +202 -0
  272. sage/combinat/subsets_pairwise.py +184 -0
  273. sage/combinat/tools.py +63 -0
  274. sage/combinat/tuple.py +348 -0
  275. sage/data_structures/all.py +2 -0
  276. sage/data_structures/all__sagemath_categories.py +2 -0
  277. sage/data_structures/binary_matrix.pxd +138 -0
  278. sage/data_structures/binary_search.cpython-314t-aarch64-linux-musl.so +0 -0
  279. sage/data_structures/binary_search.pxd +3 -0
  280. sage/data_structures/binary_search.pyx +66 -0
  281. sage/data_structures/bitset.cpython-314t-aarch64-linux-musl.so +0 -0
  282. sage/data_structures/bitset.pxd +40 -0
  283. sage/data_structures/bitset.pyx +2385 -0
  284. sage/data_structures/bitset_base.cpython-314t-aarch64-linux-musl.so +0 -0
  285. sage/data_structures/bitset_base.pxd +926 -0
  286. sage/data_structures/bitset_base.pyx +117 -0
  287. sage/data_structures/bitset_intrinsics.h +487 -0
  288. sage/data_structures/blas_dict.cpython-314t-aarch64-linux-musl.so +0 -0
  289. sage/data_structures/blas_dict.pxd +12 -0
  290. sage/data_structures/blas_dict.pyx +469 -0
  291. sage/data_structures/list_of_pairs.cpython-314t-aarch64-linux-musl.so +0 -0
  292. sage/data_structures/list_of_pairs.pxd +16 -0
  293. sage/data_structures/list_of_pairs.pyx +122 -0
  294. sage/data_structures/mutable_poset.py +3312 -0
  295. sage/data_structures/pairing_heap.cpython-314t-aarch64-linux-musl.so +0 -0
  296. sage/data_structures/pairing_heap.h +346 -0
  297. sage/data_structures/pairing_heap.pxd +88 -0
  298. sage/data_structures/pairing_heap.pyx +1464 -0
  299. sage/data_structures/sparse_bitset.pxd +62 -0
  300. sage/data_structures/stream.py +5070 -0
  301. sage/databases/all__sagemath_categories.py +7 -0
  302. sage/databases/sql_db.py +2236 -0
  303. sage/ext/all__sagemath_categories.py +3 -0
  304. sage/ext/fast_callable.cpython-314t-aarch64-linux-musl.so +0 -0
  305. sage/ext/fast_callable.pxd +4 -0
  306. sage/ext/fast_callable.pyx +2746 -0
  307. sage/ext/fast_eval.cpython-314t-aarch64-linux-musl.so +0 -0
  308. sage/ext/fast_eval.pxd +1 -0
  309. sage/ext/fast_eval.pyx +102 -0
  310. sage/ext/interpreters/__init__.py +1 -0
  311. sage/ext/interpreters/all__sagemath_categories.py +2 -0
  312. sage/ext/interpreters/wrapper_el.cpython-314t-aarch64-linux-musl.so +0 -0
  313. sage/ext/interpreters/wrapper_el.pxd +18 -0
  314. sage/ext/interpreters/wrapper_el.pyx +148 -0
  315. sage/ext/interpreters/wrapper_py.cpython-314t-aarch64-linux-musl.so +0 -0
  316. sage/ext/interpreters/wrapper_py.pxd +17 -0
  317. sage/ext/interpreters/wrapper_py.pyx +133 -0
  318. sage/functions/airy.py +937 -0
  319. sage/functions/all.py +97 -0
  320. sage/functions/bessel.py +2102 -0
  321. sage/functions/error.py +784 -0
  322. sage/functions/exp_integral.py +1529 -0
  323. sage/functions/gamma.py +1087 -0
  324. sage/functions/generalized.py +672 -0
  325. sage/functions/hyperbolic.py +747 -0
  326. sage/functions/hypergeometric.py +1156 -0
  327. sage/functions/jacobi.py +1705 -0
  328. sage/functions/log.py +1402 -0
  329. sage/functions/min_max.py +338 -0
  330. sage/functions/orthogonal_polys.py +3106 -0
  331. sage/functions/other.py +2303 -0
  332. sage/functions/piecewise.py +1505 -0
  333. sage/functions/prime_pi.cpython-314t-aarch64-linux-musl.so +0 -0
  334. sage/functions/prime_pi.pyx +262 -0
  335. sage/functions/special.py +1212 -0
  336. sage/functions/spike_function.py +278 -0
  337. sage/functions/transcendental.py +690 -0
  338. sage/functions/trig.py +1062 -0
  339. sage/functions/wigner.py +726 -0
  340. sage/geometry/abc.cpython-314t-aarch64-linux-musl.so +0 -0
  341. sage/geometry/abc.pyx +82 -0
  342. sage/geometry/all__sagemath_categories.py +1 -0
  343. sage/groups/all__sagemath_categories.py +11 -0
  344. sage/groups/generic.py +1733 -0
  345. sage/groups/groups_catalog.py +113 -0
  346. sage/groups/perm_gps/all__sagemath_categories.py +1 -0
  347. sage/groups/perm_gps/partn_ref/all.py +1 -0
  348. sage/groups/perm_gps/partn_ref/all__sagemath_categories.py +1 -0
  349. sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.cpython-314t-aarch64-linux-musl.so +0 -0
  350. sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.pxd +52 -0
  351. sage/groups/perm_gps/partn_ref/automorphism_group_canonical_label.pyx +906 -0
  352. sage/groups/perm_gps/partn_ref/canonical_augmentation.cpython-314t-aarch64-linux-musl.so +0 -0
  353. sage/groups/perm_gps/partn_ref/canonical_augmentation.pxd +85 -0
  354. sage/groups/perm_gps/partn_ref/canonical_augmentation.pyx +534 -0
  355. sage/groups/perm_gps/partn_ref/data_structures.cpython-314t-aarch64-linux-musl.so +0 -0
  356. sage/groups/perm_gps/partn_ref/data_structures.pxd +576 -0
  357. sage/groups/perm_gps/partn_ref/data_structures.pyx +1792 -0
  358. sage/groups/perm_gps/partn_ref/double_coset.cpython-314t-aarch64-linux-musl.so +0 -0
  359. sage/groups/perm_gps/partn_ref/double_coset.pxd +45 -0
  360. sage/groups/perm_gps/partn_ref/double_coset.pyx +739 -0
  361. sage/groups/perm_gps/partn_ref/refinement_lists.cpython-314t-aarch64-linux-musl.so +0 -0
  362. sage/groups/perm_gps/partn_ref/refinement_lists.pxd +18 -0
  363. sage/groups/perm_gps/partn_ref/refinement_lists.pyx +82 -0
  364. sage/groups/perm_gps/partn_ref/refinement_python.cpython-314t-aarch64-linux-musl.so +0 -0
  365. sage/groups/perm_gps/partn_ref/refinement_python.pxd +16 -0
  366. sage/groups/perm_gps/partn_ref/refinement_python.pyx +564 -0
  367. sage/groups/perm_gps/partn_ref/refinement_sets.cpython-314t-aarch64-linux-musl.so +0 -0
  368. sage/groups/perm_gps/partn_ref/refinement_sets.pxd +60 -0
  369. sage/groups/perm_gps/partn_ref/refinement_sets.pyx +858 -0
  370. sage/interfaces/abc.py +140 -0
  371. sage/interfaces/all.py +58 -0
  372. sage/interfaces/all__sagemath_categories.py +1 -0
  373. sage/interfaces/expect.py +1643 -0
  374. sage/interfaces/interface.py +1682 -0
  375. sage/interfaces/process.cpython-314t-aarch64-linux-musl.so +0 -0
  376. sage/interfaces/process.pxd +5 -0
  377. sage/interfaces/process.pyx +288 -0
  378. sage/interfaces/quit.py +167 -0
  379. sage/interfaces/sage0.py +604 -0
  380. sage/interfaces/sagespawn.cpython-314t-aarch64-linux-musl.so +0 -0
  381. sage/interfaces/sagespawn.pyx +308 -0
  382. sage/interfaces/tab_completion.py +101 -0
  383. sage/misc/all__sagemath_categories.py +78 -0
  384. sage/misc/allocator.cpython-314t-aarch64-linux-musl.so +0 -0
  385. sage/misc/allocator.pxd +6 -0
  386. sage/misc/allocator.pyx +47 -0
  387. sage/misc/binary_tree.cpython-314t-aarch64-linux-musl.so +0 -0
  388. sage/misc/binary_tree.pxd +29 -0
  389. sage/misc/binary_tree.pyx +537 -0
  390. sage/misc/callable_dict.cpython-314t-aarch64-linux-musl.so +0 -0
  391. sage/misc/callable_dict.pyx +89 -0
  392. sage/misc/citation.cpython-314t-aarch64-linux-musl.so +0 -0
  393. sage/misc/citation.pyx +159 -0
  394. sage/misc/converting_dict.py +293 -0
  395. sage/misc/defaults.py +129 -0
  396. sage/misc/derivative.cpython-314t-aarch64-linux-musl.so +0 -0
  397. sage/misc/derivative.pyx +223 -0
  398. sage/misc/functional.py +2005 -0
  399. sage/misc/html.py +589 -0
  400. sage/misc/latex.py +2673 -0
  401. sage/misc/latex_macros.py +236 -0
  402. sage/misc/latex_standalone.py +1833 -0
  403. sage/misc/map_threaded.py +38 -0
  404. sage/misc/mathml.py +76 -0
  405. sage/misc/method_decorator.py +88 -0
  406. sage/misc/mrange.py +755 -0
  407. sage/misc/multireplace.py +41 -0
  408. sage/misc/object_multiplexer.py +92 -0
  409. sage/misc/parser.cpython-314t-aarch64-linux-musl.so +0 -0
  410. sage/misc/parser.pyx +1107 -0
  411. sage/misc/random_testing.py +264 -0
  412. sage/misc/rest_index_of_methods.py +377 -0
  413. sage/misc/search.cpython-314t-aarch64-linux-musl.so +0 -0
  414. sage/misc/search.pxd +2 -0
  415. sage/misc/search.pyx +68 -0
  416. sage/misc/stopgap.cpython-314t-aarch64-linux-musl.so +0 -0
  417. sage/misc/stopgap.pyx +95 -0
  418. sage/misc/table.py +853 -0
  419. sage/monoids/all__sagemath_categories.py +1 -0
  420. sage/monoids/indexed_free_monoid.py +1071 -0
  421. sage/monoids/monoid.py +82 -0
  422. sage/numerical/all__sagemath_categories.py +1 -0
  423. sage/numerical/backends/all__sagemath_categories.py +1 -0
  424. sage/numerical/backends/generic_backend.cpython-314t-aarch64-linux-musl.so +0 -0
  425. sage/numerical/backends/generic_backend.pxd +61 -0
  426. sage/numerical/backends/generic_backend.pyx +1893 -0
  427. sage/numerical/backends/generic_sdp_backend.cpython-314t-aarch64-linux-musl.so +0 -0
  428. sage/numerical/backends/generic_sdp_backend.pxd +38 -0
  429. sage/numerical/backends/generic_sdp_backend.pyx +755 -0
  430. sage/parallel/all.py +6 -0
  431. sage/parallel/decorate.py +575 -0
  432. sage/parallel/map_reduce.py +1997 -0
  433. sage/parallel/multiprocessing_sage.py +76 -0
  434. sage/parallel/ncpus.py +35 -0
  435. sage/parallel/parallelism.py +364 -0
  436. sage/parallel/reference.py +47 -0
  437. sage/parallel/use_fork.py +333 -0
  438. sage/rings/abc.cpython-314t-aarch64-linux-musl.so +0 -0
  439. sage/rings/abc.pxd +31 -0
  440. sage/rings/abc.pyx +526 -0
  441. sage/rings/algebraic_closure_finite_field.py +1154 -0
  442. sage/rings/all__sagemath_categories.py +91 -0
  443. sage/rings/big_oh.py +227 -0
  444. sage/rings/continued_fraction.py +2754 -0
  445. sage/rings/continued_fraction_gosper.py +220 -0
  446. sage/rings/factorint.cpython-314t-aarch64-linux-musl.so +0 -0
  447. sage/rings/factorint.pyx +295 -0
  448. sage/rings/fast_arith.cpython-314t-aarch64-linux-musl.so +0 -0
  449. sage/rings/fast_arith.pxd +21 -0
  450. sage/rings/fast_arith.pyx +535 -0
  451. sage/rings/finite_rings/all__sagemath_categories.py +9 -0
  452. sage/rings/finite_rings/conway_polynomials.py +542 -0
  453. sage/rings/finite_rings/element_base.cpython-314t-aarch64-linux-musl.so +0 -0
  454. sage/rings/finite_rings/element_base.pxd +12 -0
  455. sage/rings/finite_rings/element_base.pyx +1176 -0
  456. sage/rings/finite_rings/finite_field_base.cpython-314t-aarch64-linux-musl.so +0 -0
  457. sage/rings/finite_rings/finite_field_base.pxd +7 -0
  458. sage/rings/finite_rings/finite_field_base.pyx +2171 -0
  459. sage/rings/finite_rings/finite_field_constructor.py +827 -0
  460. sage/rings/finite_rings/finite_field_prime_modn.py +372 -0
  461. sage/rings/finite_rings/galois_group.py +154 -0
  462. sage/rings/finite_rings/hom_finite_field.cpython-314t-aarch64-linux-musl.so +0 -0
  463. sage/rings/finite_rings/hom_finite_field.pxd +23 -0
  464. sage/rings/finite_rings/hom_finite_field.pyx +856 -0
  465. sage/rings/finite_rings/hom_prime_finite_field.cpython-314t-aarch64-linux-musl.so +0 -0
  466. sage/rings/finite_rings/hom_prime_finite_field.pxd +15 -0
  467. sage/rings/finite_rings/hom_prime_finite_field.pyx +164 -0
  468. sage/rings/finite_rings/homset.py +357 -0
  469. sage/rings/finite_rings/integer_mod.cpython-314t-aarch64-linux-musl.so +0 -0
  470. sage/rings/finite_rings/integer_mod.pxd +56 -0
  471. sage/rings/finite_rings/integer_mod.pyx +4586 -0
  472. sage/rings/finite_rings/integer_mod_limits.h +11 -0
  473. sage/rings/finite_rings/integer_mod_ring.py +2044 -0
  474. sage/rings/finite_rings/residue_field.cpython-314t-aarch64-linux-musl.so +0 -0
  475. sage/rings/finite_rings/residue_field.pxd +30 -0
  476. sage/rings/finite_rings/residue_field.pyx +1811 -0
  477. sage/rings/finite_rings/stdint.pxd +19 -0
  478. sage/rings/fraction_field.py +1452 -0
  479. sage/rings/fraction_field_element.cpython-314t-aarch64-linux-musl.so +0 -0
  480. sage/rings/fraction_field_element.pyx +1357 -0
  481. sage/rings/function_field/all.py +7 -0
  482. sage/rings/function_field/all__sagemath_categories.py +2 -0
  483. sage/rings/function_field/constructor.py +218 -0
  484. sage/rings/function_field/element.cpython-314t-aarch64-linux-musl.so +0 -0
  485. sage/rings/function_field/element.pxd +11 -0
  486. sage/rings/function_field/element.pyx +1008 -0
  487. sage/rings/function_field/element_rational.cpython-314t-aarch64-linux-musl.so +0 -0
  488. sage/rings/function_field/element_rational.pyx +513 -0
  489. sage/rings/function_field/extensions.py +230 -0
  490. sage/rings/function_field/function_field.py +1468 -0
  491. sage/rings/function_field/function_field_rational.py +1005 -0
  492. sage/rings/function_field/ideal.py +1155 -0
  493. sage/rings/function_field/ideal_rational.py +629 -0
  494. sage/rings/function_field/jacobian_base.py +826 -0
  495. sage/rings/function_field/jacobian_hess.py +1053 -0
  496. sage/rings/function_field/jacobian_khuri_makdisi.py +1027 -0
  497. sage/rings/function_field/maps.py +1039 -0
  498. sage/rings/function_field/order.py +281 -0
  499. sage/rings/function_field/order_basis.py +586 -0
  500. sage/rings/function_field/order_rational.py +576 -0
  501. sage/rings/function_field/place.py +426 -0
  502. sage/rings/function_field/place_rational.py +181 -0
  503. sage/rings/generic.py +320 -0
  504. sage/rings/homset.py +332 -0
  505. sage/rings/ideal.py +1885 -0
  506. sage/rings/ideal_monoid.py +215 -0
  507. sage/rings/infinity.py +1890 -0
  508. sage/rings/integer.cpython-314t-aarch64-linux-musl.so +0 -0
  509. sage/rings/integer.pxd +45 -0
  510. sage/rings/integer.pyx +7874 -0
  511. sage/rings/integer_ring.cpython-314t-aarch64-linux-musl.so +0 -0
  512. sage/rings/integer_ring.pxd +8 -0
  513. sage/rings/integer_ring.pyx +1693 -0
  514. sage/rings/laurent_series_ring.py +931 -0
  515. sage/rings/laurent_series_ring_element.cpython-314t-aarch64-linux-musl.so +0 -0
  516. sage/rings/laurent_series_ring_element.pxd +11 -0
  517. sage/rings/laurent_series_ring_element.pyx +1927 -0
  518. sage/rings/lazy_series.py +7815 -0
  519. sage/rings/lazy_series_ring.py +4356 -0
  520. sage/rings/localization.py +1043 -0
  521. sage/rings/morphism.cpython-314t-aarch64-linux-musl.so +0 -0
  522. sage/rings/morphism.pxd +39 -0
  523. sage/rings/morphism.pyx +3299 -0
  524. sage/rings/multi_power_series_ring.py +1145 -0
  525. sage/rings/multi_power_series_ring_element.py +2184 -0
  526. sage/rings/noncommutative_ideals.cpython-314t-aarch64-linux-musl.so +0 -0
  527. sage/rings/noncommutative_ideals.pyx +423 -0
  528. sage/rings/number_field/all__sagemath_categories.py +1 -0
  529. sage/rings/number_field/number_field_base.cpython-314t-aarch64-linux-musl.so +0 -0
  530. sage/rings/number_field/number_field_base.pxd +8 -0
  531. sage/rings/number_field/number_field_base.pyx +507 -0
  532. sage/rings/number_field/number_field_element_base.cpython-314t-aarch64-linux-musl.so +0 -0
  533. sage/rings/number_field/number_field_element_base.pxd +6 -0
  534. sage/rings/number_field/number_field_element_base.pyx +36 -0
  535. sage/rings/number_field/number_field_ideal.py +3550 -0
  536. sage/rings/padics/all__sagemath_categories.py +4 -0
  537. sage/rings/padics/local_generic.py +1670 -0
  538. sage/rings/padics/local_generic_element.cpython-314t-aarch64-linux-musl.so +0 -0
  539. sage/rings/padics/local_generic_element.pxd +5 -0
  540. sage/rings/padics/local_generic_element.pyx +1017 -0
  541. sage/rings/padics/misc.py +256 -0
  542. sage/rings/padics/padic_generic.py +1911 -0
  543. sage/rings/padics/pow_computer.cpython-314t-aarch64-linux-musl.so +0 -0
  544. sage/rings/padics/pow_computer.pxd +38 -0
  545. sage/rings/padics/pow_computer.pyx +671 -0
  546. sage/rings/padics/precision_error.py +24 -0
  547. sage/rings/polynomial/all__sagemath_categories.py +25 -0
  548. sage/rings/polynomial/commutative_polynomial.cpython-314t-aarch64-linux-musl.so +0 -0
  549. sage/rings/polynomial/commutative_polynomial.pxd +6 -0
  550. sage/rings/polynomial/commutative_polynomial.pyx +24 -0
  551. sage/rings/polynomial/cyclotomic.cpython-314t-aarch64-linux-musl.so +0 -0
  552. sage/rings/polynomial/cyclotomic.pyx +404 -0
  553. sage/rings/polynomial/flatten.py +711 -0
  554. sage/rings/polynomial/ideal.py +102 -0
  555. sage/rings/polynomial/infinite_polynomial_element.py +1768 -0
  556. sage/rings/polynomial/infinite_polynomial_ring.py +1653 -0
  557. sage/rings/polynomial/laurent_polynomial.cpython-314t-aarch64-linux-musl.so +0 -0
  558. sage/rings/polynomial/laurent_polynomial.pxd +18 -0
  559. sage/rings/polynomial/laurent_polynomial.pyx +2190 -0
  560. sage/rings/polynomial/laurent_polynomial_ideal.py +590 -0
  561. sage/rings/polynomial/laurent_polynomial_ring.py +832 -0
  562. sage/rings/polynomial/laurent_polynomial_ring_base.py +708 -0
  563. sage/rings/polynomial/multi_polynomial.cpython-314t-aarch64-linux-musl.so +0 -0
  564. sage/rings/polynomial/multi_polynomial.pxd +12 -0
  565. sage/rings/polynomial/multi_polynomial.pyx +3082 -0
  566. sage/rings/polynomial/multi_polynomial_element.py +2570 -0
  567. sage/rings/polynomial/multi_polynomial_ideal.py +5771 -0
  568. sage/rings/polynomial/multi_polynomial_ring.py +947 -0
  569. sage/rings/polynomial/multi_polynomial_ring_base.cpython-314t-aarch64-linux-musl.so +0 -0
  570. sage/rings/polynomial/multi_polynomial_ring_base.pxd +15 -0
  571. sage/rings/polynomial/multi_polynomial_ring_base.pyx +1855 -0
  572. sage/rings/polynomial/multi_polynomial_sequence.py +2204 -0
  573. sage/rings/polynomial/polydict.cpython-314t-aarch64-linux-musl.so +0 -0
  574. sage/rings/polynomial/polydict.pxd +45 -0
  575. sage/rings/polynomial/polydict.pyx +2701 -0
  576. sage/rings/polynomial/polynomial_compiled.cpython-314t-aarch64-linux-musl.so +0 -0
  577. sage/rings/polynomial/polynomial_compiled.pxd +59 -0
  578. sage/rings/polynomial/polynomial_compiled.pyx +509 -0
  579. sage/rings/polynomial/polynomial_element.cpython-314t-aarch64-linux-musl.so +0 -0
  580. sage/rings/polynomial/polynomial_element.pxd +64 -0
  581. sage/rings/polynomial/polynomial_element.pyx +13255 -0
  582. sage/rings/polynomial/polynomial_element_generic.py +1637 -0
  583. sage/rings/polynomial/polynomial_fateman.py +97 -0
  584. sage/rings/polynomial/polynomial_quotient_ring.py +2465 -0
  585. sage/rings/polynomial/polynomial_quotient_ring_element.py +779 -0
  586. sage/rings/polynomial/polynomial_ring.py +3784 -0
  587. sage/rings/polynomial/polynomial_ring_constructor.py +1051 -0
  588. sage/rings/polynomial/polynomial_ring_homomorphism.cpython-314t-aarch64-linux-musl.so +0 -0
  589. sage/rings/polynomial/polynomial_ring_homomorphism.pxd +5 -0
  590. sage/rings/polynomial/polynomial_ring_homomorphism.pyx +121 -0
  591. sage/rings/polynomial/polynomial_singular_interface.py +549 -0
  592. sage/rings/polynomial/symmetric_ideal.py +989 -0
  593. sage/rings/polynomial/symmetric_reduction.cpython-314t-aarch64-linux-musl.so +0 -0
  594. sage/rings/polynomial/symmetric_reduction.pxd +8 -0
  595. sage/rings/polynomial/symmetric_reduction.pyx +669 -0
  596. sage/rings/polynomial/term_order.py +2279 -0
  597. sage/rings/polynomial/toy_buchberger.py +449 -0
  598. sage/rings/polynomial/toy_d_basis.py +387 -0
  599. sage/rings/polynomial/toy_variety.py +362 -0
  600. sage/rings/power_series_mpoly.cpython-314t-aarch64-linux-musl.so +0 -0
  601. sage/rings/power_series_mpoly.pxd +9 -0
  602. sage/rings/power_series_mpoly.pyx +161 -0
  603. sage/rings/power_series_poly.cpython-314t-aarch64-linux-musl.so +0 -0
  604. sage/rings/power_series_poly.pxd +10 -0
  605. sage/rings/power_series_poly.pyx +1317 -0
  606. sage/rings/power_series_ring.py +1441 -0
  607. sage/rings/power_series_ring_element.cpython-314t-aarch64-linux-musl.so +0 -0
  608. sage/rings/power_series_ring_element.pxd +12 -0
  609. sage/rings/power_series_ring_element.pyx +3028 -0
  610. sage/rings/puiseux_series_ring.py +487 -0
  611. sage/rings/puiseux_series_ring_element.cpython-314t-aarch64-linux-musl.so +0 -0
  612. sage/rings/puiseux_series_ring_element.pxd +7 -0
  613. sage/rings/puiseux_series_ring_element.pyx +1055 -0
  614. sage/rings/qqbar_decorators.py +167 -0
  615. sage/rings/quotient_ring.py +1598 -0
  616. sage/rings/quotient_ring_element.py +979 -0
  617. sage/rings/rational.cpython-314t-aarch64-linux-musl.so +0 -0
  618. sage/rings/rational.pxd +20 -0
  619. sage/rings/rational.pyx +4284 -0
  620. sage/rings/rational_field.py +1730 -0
  621. sage/rings/real_double.cpython-314t-aarch64-linux-musl.so +0 -0
  622. sage/rings/real_double.pxd +16 -0
  623. sage/rings/real_double.pyx +2218 -0
  624. sage/rings/real_lazy.cpython-314t-aarch64-linux-musl.so +0 -0
  625. sage/rings/real_lazy.pxd +30 -0
  626. sage/rings/real_lazy.pyx +1773 -0
  627. sage/rings/ring.cpython-314t-aarch64-linux-musl.so +0 -0
  628. sage/rings/ring.pxd +30 -0
  629. sage/rings/ring.pyx +850 -0
  630. sage/rings/semirings/all.py +3 -0
  631. sage/rings/semirings/non_negative_integer_semiring.py +107 -0
  632. sage/rings/semirings/tropical_mpolynomial.py +972 -0
  633. sage/rings/semirings/tropical_polynomial.py +997 -0
  634. sage/rings/semirings/tropical_semiring.cpython-314t-aarch64-linux-musl.so +0 -0
  635. sage/rings/semirings/tropical_semiring.pyx +676 -0
  636. sage/rings/semirings/tropical_variety.py +1701 -0
  637. sage/rings/sum_of_squares.cpython-314t-aarch64-linux-musl.so +0 -0
  638. sage/rings/sum_of_squares.pxd +3 -0
  639. sage/rings/sum_of_squares.pyx +336 -0
  640. sage/rings/tests.py +504 -0
  641. sage/schemes/affine/affine_homset.py +508 -0
  642. sage/schemes/affine/affine_morphism.py +1574 -0
  643. sage/schemes/affine/affine_point.py +460 -0
  644. sage/schemes/affine/affine_rational_point.py +308 -0
  645. sage/schemes/affine/affine_space.py +1264 -0
  646. sage/schemes/affine/affine_subscheme.py +592 -0
  647. sage/schemes/affine/all.py +25 -0
  648. sage/schemes/all__sagemath_categories.py +5 -0
  649. sage/schemes/generic/algebraic_scheme.py +2092 -0
  650. sage/schemes/generic/all.py +5 -0
  651. sage/schemes/generic/ambient_space.py +400 -0
  652. sage/schemes/generic/divisor.py +465 -0
  653. sage/schemes/generic/divisor_group.py +313 -0
  654. sage/schemes/generic/glue.py +84 -0
  655. sage/schemes/generic/homset.py +820 -0
  656. sage/schemes/generic/hypersurface.py +234 -0
  657. sage/schemes/generic/morphism.py +2107 -0
  658. sage/schemes/generic/point.py +237 -0
  659. sage/schemes/generic/scheme.py +1190 -0
  660. sage/schemes/generic/spec.py +199 -0
  661. sage/schemes/product_projective/all.py +6 -0
  662. sage/schemes/product_projective/homset.py +236 -0
  663. sage/schemes/product_projective/morphism.py +517 -0
  664. sage/schemes/product_projective/point.py +568 -0
  665. sage/schemes/product_projective/rational_point.py +550 -0
  666. sage/schemes/product_projective/space.py +1301 -0
  667. sage/schemes/product_projective/subscheme.py +466 -0
  668. sage/schemes/projective/all.py +24 -0
  669. sage/schemes/projective/proj_bdd_height.py +453 -0
  670. sage/schemes/projective/projective_homset.py +718 -0
  671. sage/schemes/projective/projective_morphism.py +2792 -0
  672. sage/schemes/projective/projective_point.py +1484 -0
  673. sage/schemes/projective/projective_rational_point.py +569 -0
  674. sage/schemes/projective/projective_space.py +2571 -0
  675. sage/schemes/projective/projective_subscheme.py +1574 -0
  676. sage/sets/all.py +17 -0
  677. sage/sets/cartesian_product.py +376 -0
  678. sage/sets/condition_set.py +525 -0
  679. sage/sets/disjoint_set.cpython-314t-aarch64-linux-musl.so +0 -0
  680. sage/sets/disjoint_set.pxd +36 -0
  681. sage/sets/disjoint_set.pyx +998 -0
  682. sage/sets/disjoint_union_enumerated_sets.py +625 -0
  683. sage/sets/family.cpython-314t-aarch64-linux-musl.so +0 -0
  684. sage/sets/family.pxd +12 -0
  685. sage/sets/family.pyx +1556 -0
  686. sage/sets/finite_enumerated_set.py +406 -0
  687. sage/sets/finite_set_map_cy.cpython-314t-aarch64-linux-musl.so +0 -0
  688. sage/sets/finite_set_map_cy.pxd +34 -0
  689. sage/sets/finite_set_map_cy.pyx +708 -0
  690. sage/sets/finite_set_maps.py +591 -0
  691. sage/sets/image_set.py +448 -0
  692. sage/sets/integer_range.py +829 -0
  693. sage/sets/non_negative_integers.py +241 -0
  694. sage/sets/positive_integers.py +93 -0
  695. sage/sets/primes.py +188 -0
  696. sage/sets/real_set.py +2760 -0
  697. sage/sets/recursively_enumerated_set.cpython-314t-aarch64-linux-musl.so +0 -0
  698. sage/sets/recursively_enumerated_set.pxd +31 -0
  699. sage/sets/recursively_enumerated_set.pyx +2082 -0
  700. sage/sets/set.py +2083 -0
  701. sage/sets/set_from_iterator.py +1021 -0
  702. sage/sets/totally_ordered_finite_set.py +329 -0
  703. sage/symbolic/all__sagemath_categories.py +1 -0
  704. sage/symbolic/function.cpython-314t-aarch64-linux-musl.so +0 -0
  705. sage/symbolic/function.pxd +29 -0
  706. sage/symbolic/function.pyx +1488 -0
  707. sage/symbolic/symbols.py +56 -0
  708. sage/tests/all__sagemath_categories.py +1 -0
  709. sage/tests/cython.cpython-314t-aarch64-linux-musl.so +0 -0
  710. sage/tests/cython.pyx +37 -0
  711. sage/tests/stl_vector.cpython-314t-aarch64-linux-musl.so +0 -0
  712. sage/tests/stl_vector.pyx +171 -0
  713. sage/typeset/all.py +6 -0
  714. sage/typeset/ascii_art.py +295 -0
  715. sage/typeset/character_art.py +789 -0
  716. sage/typeset/character_art_factory.py +572 -0
  717. sage/typeset/symbols.py +334 -0
  718. sage/typeset/unicode_art.py +183 -0
  719. sage/typeset/unicode_characters.py +101 -0
sage/functions/trig.py ADDED
@@ -0,0 +1,1062 @@
1
+ # sage_setup: distribution = sagemath-categories
2
+ r"""
3
+ Trigonometric functions
4
+
5
+ TESTS:
6
+
7
+ Check that :issue:`35696` is fixed::
8
+
9
+ sage: # needs sage.symbolic
10
+ sage: sin(x*(x+1)-x^2-x)
11
+ 0
12
+ sage: cos(x*(x+1)-x^2-x)
13
+ 1
14
+ sage: tan(x*(x+1)-x^2-x)
15
+ 0
16
+ sage: csc(x*(x+1)-x^2-x)
17
+ Infinity
18
+ sage: sec(x*(x+1)-x^2-x)
19
+ 1
20
+ sage: cot(x*(x+1)-x^2-x)
21
+ Infinity
22
+ """
23
+ import math
24
+
25
+ from sage.symbolic.function import GinacFunction
26
+
27
+
28
+ class Function_sin(GinacFunction):
29
+ def __init__(self):
30
+ r"""
31
+ The sine function.
32
+
33
+ EXAMPLES::
34
+
35
+ sage: # needs sage.symbolic
36
+ sage: sin(0)
37
+ 0
38
+ sage: sin(x).subs(x==0)
39
+ 0
40
+ sage: sin(2).n(100)
41
+ 0.90929742682568169539601986591
42
+ sage: sin(x)._sympy_() # needs sympy
43
+ sin(x)
44
+
45
+ We can prevent evaluation using the ``hold`` parameter::
46
+
47
+ sage: sin(0, hold=True) # needs sage.symbolic
48
+ sin(0)
49
+
50
+ To then evaluate again, we currently must use Maxima via
51
+ :meth:`sage.symbolic.expression.Expression.simplify`::
52
+
53
+ sage: a = sin(0, hold=True); a.simplify() # needs sage.symbolic
54
+ 0
55
+
56
+ If possible, the argument is also reduced modulo the
57
+ period length `2\pi`, and well-known identities are
58
+ directly evaluated::
59
+
60
+ sage: k = var('k', domain='integer') # needs sage.symbolic
61
+ sage: sin(1 + 2*k*pi) # needs sage.symbolic
62
+ sin(1)
63
+ sage: sin(k*pi) # needs sage.symbolic
64
+ 0
65
+
66
+ TESTS::
67
+
68
+ sage: loads(dumps(sin))
69
+ sin
70
+
71
+ sage: conjugate(sin(x)) # needs sage.symbolic
72
+ sin(conjugate(x))
73
+ sage: sin(complex(1,1)) # rel tol 1e-15
74
+ (1.2984575814159773+0.6349639147847361j)
75
+
76
+ sage: # needs sage.symbolic
77
+ sage: sin(pi/5)
78
+ 1/4*sqrt(-2*sqrt(5) + 10)
79
+ sage: sin(pi/8)
80
+ 1/2*sqrt(-sqrt(2) + 2)
81
+ sage: sin(pi/24)
82
+ 1/4*sqrt(-2*sqrt(6) - 2*sqrt(2) + 8)
83
+ sage: sin(pi/30)
84
+ -1/8*sqrt(5) + 1/4*sqrt(-3/2*sqrt(5) + 15/2) - 1/8
85
+ sage: sin(104*pi/105)
86
+ sin(1/105*pi)
87
+ sage: cos(pi/8)
88
+ 1/2*sqrt(sqrt(2) + 2)
89
+ sage: cos(pi/10)
90
+ 1/4*sqrt(2*sqrt(5) + 10)
91
+ sage: cos(pi/12)
92
+ 1/4*sqrt(6) + 1/4*sqrt(2)
93
+ sage: cos(pi/15)
94
+ 1/8*sqrt(5) + 1/4*sqrt(3/2*sqrt(5) + 15/2) - 1/8
95
+ sage: cos(pi/24)
96
+ 1/4*sqrt(2*sqrt(6) + 2*sqrt(2) + 8)
97
+ sage: cos(104*pi/105)
98
+ -cos(1/105*pi)
99
+ sage: tan(pi/5)
100
+ sqrt(-2*sqrt(5) + 5)
101
+ sage: tan(pi/8)
102
+ sqrt(2) - 1
103
+ sage: tan(pi/10)
104
+ 1/5*sqrt(-10*sqrt(5) + 25)
105
+ sage: tan(pi/16)
106
+ -sqrt(2) + sqrt(2*sqrt(2) + 4) - 1
107
+ sage: tan(pi/20)
108
+ sqrt(5) - sqrt(2*sqrt(5) + 5) + 1
109
+ sage: tan(pi/24)
110
+ sqrt(6) - sqrt(3) + sqrt(2) - 2
111
+ sage: tan(104*pi/105)
112
+ -tan(1/105*pi)
113
+ sage: cot(104*pi/105)
114
+ -cot(1/105*pi)
115
+ sage: sec(104*pi/105)
116
+ -sec(1/105*pi)
117
+ sage: csc(104*pi/105)
118
+ csc(1/105*pi)
119
+
120
+ sage: all(sin(rat*pi).n(200) - sin(rat*pi, hold=True).n(200) < 1e-30 # needs sage.symbolic
121
+ ....: for rat in [1/5, 2/5, 1/30, 7/30, 11/30, 13/30,
122
+ ....: 1/8, 3/8, 1/24, 5/24, 7/24, 11/24])
123
+ True
124
+ sage: all(cos(rat*pi).n(200)-cos(rat*pi, hold=True).n(200) < 1e-30 # needs sage.symbolic
125
+ ....: for rat in [1/10, 3/10, 1/12, 5/12, 1/15, 2/15, 4/15, 7/15,
126
+ ....: 1/8, 3/8, 1/24, 5/24, 11/24])
127
+ True
128
+ sage: all(tan(rat*pi).n(200)-tan(rat*pi, hold=True).n(200) < 1e-30 # needs sage.symbolic
129
+ ....: for rat in [1/5, 2/5, 1/10, 3/10, 1/20, 3/20, 7/20, 9/20,
130
+ ....: 1/8, 3/8, 1/16, 3/16, 5/16, 7/16, 1/24, 5/24, 7/24, 11/24])
131
+ True
132
+
133
+ Check that :issue:`20456` is fixed::
134
+
135
+ sage: assume(x > 0) # needs sage.symbolic
136
+ sage: sin(pi*x) # needs sage.symbolic
137
+ sin(pi*x)
138
+ sage: forget() # needs sage.symbolic
139
+
140
+ Check that :issue:`20752` is fixed::
141
+
142
+ sage: sin(3*pi + 41/42*pi) # needs sage.symbolic
143
+ -sin(1/42*pi)
144
+ sage: sin(-5*pi + 1/42*pi) # needs sage.symbolic
145
+ -sin(1/42*pi)
146
+ sage: sin(pi - 1/42*pi) # needs sage.symbolic
147
+ sin(1/42*pi)
148
+ """
149
+ GinacFunction.__init__(self, 'sin', latex_name=r"\sin",
150
+ conversions=dict(maxima='sin', mathematica='Sin',
151
+ giac='sin', fricas='sin', sympy='sin'))
152
+
153
+
154
+ sin = Function_sin()
155
+
156
+
157
+ class Function_cos(GinacFunction):
158
+ def __init__(self):
159
+ r"""
160
+ The cosine function.
161
+
162
+ EXAMPLES::
163
+
164
+ sage: # needs sage.symbolic
165
+ sage: cos(pi)
166
+ -1
167
+ sage: cos(x).subs(x==pi)
168
+ -1
169
+ sage: cos(2).n(100)
170
+ -0.41614683654714238699756822950
171
+ sage: cos(x)._sympy_() # needs sympy
172
+ cos(x)
173
+
174
+ We can prevent evaluation using the ``hold`` parameter::
175
+
176
+ sage: cos(0, hold=True) # needs sage.symbolic
177
+ cos(0)
178
+
179
+ To then evaluate again, we currently must use Maxima via
180
+ :meth:`sage.symbolic.expression.Expression.simplify`::
181
+
182
+ sage: a = cos(0, hold=True); a.simplify() # needs sage.symbolic
183
+ 1
184
+
185
+ If possible, the argument is also reduced modulo the
186
+ period length `2\pi`, and well-known identities are
187
+ directly evaluated::
188
+
189
+ sage: # needs sage.symbolic
190
+ sage: k = var('k', domain='integer')
191
+ sage: cos(1 + 2*k*pi)
192
+ cos(1)
193
+ sage: cos(k*pi)
194
+ cos(pi*k)
195
+ sage: cos(pi/3 + 2*k*pi)
196
+ 1/2
197
+
198
+ TESTS::
199
+
200
+ sage: loads(dumps(cos))
201
+ cos
202
+
203
+ sage: conjugate(cos(x)) # needs sage.symbolic
204
+ cos(conjugate(x))
205
+ sage: cos(complex(1,1)) # rel tol 1e-15
206
+ (0.8337300251311491-0.9888977057628651j)
207
+
208
+ Check that :issue:`20752` is fixed::
209
+
210
+ sage: cos(3*pi + 41/42*pi) # needs sage.symbolic
211
+ cos(1/42*pi)
212
+ sage: cos(-5*pi + 1/42*pi) # needs sage.symbolic
213
+ -cos(1/42*pi)
214
+ sage: cos(pi - 1/42*pi) # needs sage.symbolic
215
+ -cos(1/42*pi)
216
+ """
217
+ GinacFunction.__init__(self, 'cos', latex_name=r"\cos",
218
+ conversions=dict(maxima='cos', mathematica='Cos',
219
+ giac='cos', fricas='cos', sympy='cos'))
220
+
221
+
222
+ cos = Function_cos()
223
+
224
+
225
+ class Function_tan(GinacFunction):
226
+ def __init__(self):
227
+ r"""
228
+ The tangent function.
229
+
230
+ EXAMPLES::
231
+
232
+ sage: # needs sage.rings.real_mpfr
233
+ sage: tan(3.1415)
234
+ -0.0000926535900581913
235
+ sage: tan(3.1415/4)
236
+ 0.999953674278156
237
+
238
+ sage: # needs sage.symbolic
239
+ sage: tan(pi)
240
+ 0
241
+ sage: tan(pi/4)
242
+ 1
243
+ sage: tan(1/2)
244
+ tan(1/2)
245
+ sage: RR(tan(1/2))
246
+ 0.546302489843790
247
+
248
+ We can prevent evaluation using the ``hold`` parameter::
249
+
250
+ sage: tan(pi/4, hold=True) # needs sage.symbolic
251
+ tan(1/4*pi)
252
+
253
+ To then evaluate again, we currently must use Maxima via
254
+ :meth:`sage.symbolic.expression.Expression.simplify`::
255
+
256
+ sage: a = tan(pi/4, hold=True); a.simplify() # needs sage.symbolic
257
+ 1
258
+
259
+ If possible, the argument is also reduced modulo the
260
+ period length `\pi`, and well-known identities are
261
+ directly evaluated::
262
+
263
+ sage: k = var('k', domain='integer') # needs sage.symbolic
264
+ sage: tan(1 + 2*k*pi) # needs sage.symbolic
265
+ tan(1)
266
+ sage: tan(k*pi) # needs sage.symbolic
267
+ 0
268
+
269
+ TESTS::
270
+
271
+ sage: tan(x)._sympy_() # needs sympy sage.symbolic
272
+ tan(x)
273
+ sage: conjugate(tan(x)) # needs sage.symbolic
274
+ tan(conjugate(x))
275
+ sage: tan(complex(1,1)) # rel tol 1e-15
276
+ (0.2717525853195118+1.0839233273386946j)
277
+
278
+ Check that :issue:`19791` is fixed::
279
+
280
+ sage: tan(2+I).imag().n() # needs sage.symbolic
281
+ 1.16673625724092
282
+ """
283
+ GinacFunction.__init__(self, 'tan', latex_name=r"\tan",
284
+ conversions=dict(maxima='tan', mathematica='Tan',
285
+ giac='tan', fricas='tan', sympy='tan'))
286
+
287
+
288
+ tan = Function_tan()
289
+
290
+
291
+ class Function_cot(GinacFunction):
292
+ def __init__(self):
293
+ r"""
294
+ The cotangent function.
295
+
296
+ EXAMPLES::
297
+
298
+ sage: # needs sage.symbolic
299
+ sage: cot(pi/4)
300
+ 1
301
+ sage: RR(cot(pi/4))
302
+ 1.00000000000000
303
+ sage: cot(1/2)
304
+ cot(1/2)
305
+ sage: cot(0.5)
306
+ 1.83048772171245
307
+
308
+ sage: latex(cot(x)) # needs sage.symbolic
309
+ \cot\left(x\right)
310
+ sage: cot(x)._sympy_() # needs sympy sage.symbolic
311
+ cot(x)
312
+
313
+ We can prevent evaluation using the ``hold`` parameter::
314
+
315
+ sage: cot(pi/4, hold=True) # needs sage.symbolic
316
+ cot(1/4*pi)
317
+
318
+ To then evaluate again, we currently must use Maxima via
319
+ :meth:`sage.symbolic.expression.Expression.simplify`::
320
+
321
+ sage: a = cot(pi/4, hold=True); a.simplify() # needs sage.symbolic
322
+ 1
323
+
324
+ EXAMPLES::
325
+
326
+ sage: # needs sage.symbolic
327
+ sage: cot(pi/4)
328
+ 1
329
+ sage: cot(x).subs(x==pi/4)
330
+ 1
331
+ sage: cot(pi/7)
332
+ cot(1/7*pi)
333
+ sage: cot(x)
334
+ cot(x)
335
+
336
+ sage: # needs sage.symbolic
337
+ sage: n(cot(pi/4), 100)
338
+ 1.0000000000000000000000000000
339
+ sage: float(cot(1))
340
+ 0.64209261593433...
341
+ sage: bool(diff(cot(x), x) == diff(1/tan(x), x))
342
+ True
343
+ sage: diff(cot(x), x)
344
+ -cot(x)^2 - 1
345
+
346
+ TESTS::
347
+
348
+ sage: # needs sage.symbolic
349
+ sage: cot(float(0))
350
+ Infinity
351
+ sage: cot(SR(0))
352
+ Infinity
353
+ sage: cot(float(0.1))
354
+ 9.966644423259238
355
+ sage: type(_)
356
+ <... 'float'>
357
+ sage: cot(float(0))
358
+ Infinity
359
+ sage: cot(SR(0))
360
+ Infinity
361
+ sage: cot(float(0.1))
362
+ 9.966644423259238
363
+ sage: type(_)
364
+ <... 'float'>
365
+
366
+ Test complex input::
367
+
368
+ sage: cot(complex(1,1)) # rel tol 1e-15 # needs sage.rings.complex_double
369
+ (0.21762156185440273-0.8680141428959249j)
370
+ sage: cot(1.+I) # needs sage.symbolic
371
+ 0.217621561854403 - 0.868014142895925*I
372
+ """
373
+ GinacFunction.__init__(self, 'cot', latex_name=r"\cot",
374
+ conversions=dict(maxima='cot', mathematica='Cot',
375
+ giac='cot', fricas='cot', sympy='cot'))
376
+
377
+ def _eval_numpy_(self, x):
378
+ """
379
+ EXAMPLES::
380
+
381
+ sage: import numpy # needs numpy
382
+ sage: a = numpy.arange(2, 5) # needs numpy
383
+ sage: cot(a) # needs numpy
384
+ array([-0.45765755, -7.01525255, 0.86369115])
385
+ """
386
+ return 1.0 / tan(x)
387
+
388
+
389
+ cot = Function_cot()
390
+
391
+
392
+ class Function_sec(GinacFunction):
393
+ def __init__(self):
394
+ r"""
395
+ The secant function.
396
+
397
+ EXAMPLES::
398
+
399
+ sage: # needs sage.symbolic
400
+ sage: sec(pi/4)
401
+ sqrt(2)
402
+ sage: sec(x).subs(x==pi/4)
403
+ sqrt(2)
404
+ sage: sec(pi/7)
405
+ sec(1/7*pi)
406
+ sage: sec(x)
407
+ sec(x)
408
+ sage: RR(sec(pi/4))
409
+ 1.41421356237310
410
+ sage: n(sec(pi/4),100)
411
+ 1.4142135623730950488016887242
412
+ sage: float(sec(pi/4))
413
+ 1.4142135623730951
414
+ sage: sec(1/2)
415
+ sec(1/2)
416
+ sage: sec(0.5)
417
+ 1.13949392732455
418
+
419
+ sage: # needs sage.symbolic
420
+ sage: bool(diff(sec(x), x) == diff(1/cos(x), x))
421
+ True
422
+ sage: diff(sec(x), x)
423
+ sec(x)*tan(x)
424
+ sage: latex(sec(x))
425
+ \sec\left(x\right)
426
+ sage: sec(x)._sympy_() # needs sympy
427
+ sec(x)
428
+
429
+ We can prevent evaluation using the ``hold`` parameter::
430
+
431
+ sage: sec(pi/4, hold=True) # needs sage.symbolic
432
+ sec(1/4*pi)
433
+
434
+ To then evaluate again, we currently must use Maxima via
435
+ :meth:`sage.symbolic.expression.Expression.simplify`::
436
+
437
+ sage: a = sec(pi/4, hold=True); a.simplify() # needs sage.symbolic
438
+ sqrt(2)
439
+
440
+ TESTS:
441
+
442
+ Test complex input::
443
+
444
+ sage: sec(complex(1,1)) # rel tol 1e-15 # needs sage.rings.complex_double
445
+ (0.49833703055518686+0.5910838417210451j)
446
+ """
447
+ GinacFunction.__init__(self, 'sec', latex_name=r"\sec",
448
+ conversions=dict(maxima='sec', mathematica='Sec',
449
+ giac='sec', fricas='sec', sympy='sec'))
450
+
451
+ def _eval_numpy_(self, x):
452
+ """
453
+ EXAMPLES::
454
+
455
+ sage: import numpy # needs numpy
456
+ sage: a = numpy.arange(2, 5) # needs numpy
457
+ sage: sec(a) # needs numpy
458
+ array([-2.40299796, -1.01010867, -1.52988566])
459
+ """
460
+ return 1 / cos(x)
461
+
462
+
463
+ sec = Function_sec()
464
+
465
+
466
+ class Function_csc(GinacFunction):
467
+ def __init__(self):
468
+ r"""
469
+ The cosecant function.
470
+
471
+ EXAMPLES::
472
+
473
+ sage: # needs sage.symbolic
474
+ sage: csc(pi/4)
475
+ sqrt(2)
476
+ sage: csc(x).subs(x==pi/4)
477
+ sqrt(2)
478
+ sage: csc(pi/7)
479
+ csc(1/7*pi)
480
+ sage: csc(x)
481
+ csc(x)
482
+ sage: RR(csc(pi/4))
483
+ 1.41421356237310
484
+ sage: n(csc(pi/4), 100)
485
+ 1.4142135623730950488016887242
486
+ sage: float(csc(pi/4))
487
+ 1.4142135623730951
488
+ sage: csc(1/2)
489
+ csc(1/2)
490
+ sage: csc(0.5)
491
+ 2.08582964293349
492
+
493
+ sage: # needs sage.symbolic
494
+ sage: bool(diff(csc(x), x) == diff(1/sin(x), x))
495
+ True
496
+ sage: diff(csc(x), x)
497
+ -cot(x)*csc(x)
498
+ sage: latex(csc(x))
499
+ \csc\left(x\right)
500
+ sage: csc(x)._sympy_() # needs sympy
501
+ csc(x)
502
+
503
+ We can prevent evaluation using the ``hold`` parameter::
504
+
505
+ sage: csc(pi/4, hold=True) # needs sage.symbolic
506
+ csc(1/4*pi)
507
+
508
+ To then evaluate again, we currently must use Maxima via
509
+ :meth:`sage.symbolic.expression.Expression.simplify`::
510
+
511
+ sage: a = csc(pi/4,hold=True); a.simplify() # needs sage.symbolic
512
+ sqrt(2)
513
+
514
+ TESTS:
515
+
516
+ Test complex input::
517
+
518
+ sage: csc(complex(1,1)) # rel tol 1e-15 # needs sage.rings.complex_double
519
+ (0.6215180171704284-0.30393100162842646j)
520
+ """
521
+ GinacFunction.__init__(self, 'csc', latex_name=r"\csc",
522
+ conversions=dict(maxima='csc', mathematica='Csc',
523
+ giac='csc', fricas='csc', sympy='csc'))
524
+
525
+ def _eval_numpy_(self, x):
526
+ """
527
+ EXAMPLES::
528
+
529
+ sage: import numpy # needs numpy
530
+ sage: a = numpy.arange(2, 5) # needs numpy
531
+ sage: csc(a) # needs numpy
532
+ array([ 1.09975017, 7.0861674 , -1.32134871])
533
+ """
534
+ return 1 / sin(x)
535
+
536
+
537
+ csc = Function_csc()
538
+
539
+
540
+ ###################################
541
+ # Inverse Trigonometric Functions #
542
+ ###################################
543
+
544
+ class Function_arcsin(GinacFunction):
545
+ def __init__(self):
546
+ """
547
+ The arcsine function.
548
+
549
+ EXAMPLES::
550
+
551
+ sage: arcsin(0.5) # needs sage.rings.real_mpfr
552
+ 0.523598775598299
553
+ sage: arcsin(1/2) # needs sage.symbolic
554
+ 1/6*pi
555
+ sage: arcsin(1 + 1.0*I) # needs sage.symbolic
556
+ 0.666239432492515 + 1.06127506190504*I
557
+
558
+ We can delay evaluation using the ``hold`` parameter::
559
+
560
+ sage: arcsin(0, hold=True) # needs sage.symbolic
561
+ arcsin(0)
562
+
563
+ To then evaluate again, we currently must use Maxima via
564
+ :meth:`sage.symbolic.expression.Expression.simplify`::
565
+
566
+ sage: a = arcsin(0, hold=True); a.simplify() # needs sage.symbolic
567
+ 0
568
+
569
+ ``conjugate(arcsin(x))==arcsin(conjugate(x))``, unless on the branch
570
+ cuts which run along the real axis outside the interval [-1, +1].::
571
+
572
+ sage: # needs sage.symbolic
573
+ sage: conjugate(arcsin(x))
574
+ conjugate(arcsin(x))
575
+ sage: var('y', domain='positive')
576
+ y
577
+ sage: conjugate(arcsin(y))
578
+ conjugate(arcsin(y))
579
+ sage: conjugate(arcsin(y+I))
580
+ conjugate(arcsin(y + I))
581
+ sage: conjugate(arcsin(1/16))
582
+ arcsin(1/16)
583
+ sage: conjugate(arcsin(2))
584
+ conjugate(arcsin(2))
585
+ sage: conjugate(arcsin(-2))
586
+ -conjugate(arcsin(2))
587
+
588
+ TESTS::
589
+
590
+ sage: arcsin(x)._sympy_() # needs sympy sage.symbolic
591
+ asin(x)
592
+ sage: arcsin(x).operator() # needs sage.symbolic
593
+ arcsin
594
+ sage: asin(complex(1,1)) # needs sage.rings.complex_double
595
+ (0.6662394324925152+1.0612750619050357j)
596
+ sage: asin(SR(2.1)) # needs sage.symbolic
597
+ 1.57079632679490 - 1.37285914424258*I
598
+ """
599
+ GinacFunction.__init__(self, 'arcsin', latex_name=r"\arcsin",
600
+ conversions=dict(maxima='asin', sympy='asin',
601
+ mathematica='ArcSin',
602
+ fricas='asin', giac='asin'))
603
+
604
+
605
+ arcsin = asin = Function_arcsin()
606
+
607
+
608
+ class Function_arccos(GinacFunction):
609
+ def __init__(self):
610
+ """
611
+ The arccosine function.
612
+
613
+ EXAMPLES::
614
+
615
+ sage: arccos(0.5) # needs sage.rings.real_mpfr
616
+ 1.04719755119660
617
+ sage: arccos(1/2) # needs sage.symbolic
618
+ 1/3*pi
619
+ sage: arccos(1 + 1.0*I) # needs sage.symbolic
620
+ 0.904556894302381 - 1.06127506190504*I
621
+ sage: arccos(3/4).n(100) # needs sage.symbolic
622
+ 0.72273424781341561117837735264
623
+
624
+ We can delay evaluation using the ``hold`` parameter::
625
+
626
+ sage: arccos(0, hold=True) # needs sage.symbolic
627
+ arccos(0)
628
+
629
+ To then evaluate again, we currently must use Maxima via
630
+ :meth:`sage.symbolic.expression.Expression.simplify`::
631
+
632
+ sage: a = arccos(0, hold=True); a.simplify() # needs sage.symbolic
633
+ 1/2*pi
634
+
635
+ ``conjugate(arccos(x))==arccos(conjugate(x))``, unless on the branch
636
+ cuts, which run along the real axis outside the interval [-1, +1].::
637
+
638
+ sage: # needs sage.symbolic
639
+ sage: conjugate(arccos(x))
640
+ conjugate(arccos(x))
641
+ sage: var('y', domain='positive')
642
+ y
643
+ sage: conjugate(arccos(y))
644
+ conjugate(arccos(y))
645
+ sage: conjugate(arccos(y+I))
646
+ conjugate(arccos(y + I))
647
+ sage: conjugate(arccos(1/16))
648
+ arccos(1/16)
649
+ sage: conjugate(arccos(2))
650
+ conjugate(arccos(2))
651
+ sage: conjugate(arccos(-2))
652
+ pi - conjugate(arccos(2))
653
+
654
+ TESTS::
655
+
656
+ sage: arccos(x)._sympy_() # needs sympy sage.symbolic
657
+ acos(x)
658
+ sage: arccos(x).operator() # needs sage.symbolic
659
+ arccos
660
+ sage: acos(complex(1,1)) # needs sage.rings.complex_double
661
+ (0.9045568943023814-1.0612750619050357j)
662
+ sage: acos(SR(2.1)) # needs sage.symbolic
663
+ 1.37285914424258*I
664
+
665
+ sage: arcsin(sqrt(2)/2) # needs sage.symbolic
666
+ 1/4*pi
667
+ """
668
+ GinacFunction.__init__(self, 'arccos', latex_name=r"\arccos",
669
+ conversions=dict(maxima='acos', sympy='acos',
670
+ mathematica='ArcCos',
671
+ fricas='acos', giac='acos'))
672
+
673
+
674
+ arccos = acos = Function_arccos()
675
+
676
+
677
+ class Function_arctan(GinacFunction):
678
+ def __init__(self):
679
+ """
680
+ The arctangent function.
681
+
682
+ EXAMPLES::
683
+
684
+ sage: # needs sage.symbolic
685
+ sage: arctan(1/2)
686
+ arctan(1/2)
687
+ sage: RDF(arctan(1/2)) # rel tol 1e-15
688
+ 0.46364760900080615
689
+ sage: arctan(1 + I)
690
+ arctan(I + 1)
691
+ sage: arctan(1/2).n(100)
692
+ 0.46364760900080611621425623146
693
+
694
+ We can delay evaluation using the ``hold`` parameter::
695
+
696
+ sage: arctan(0, hold=True) # needs sage.symbolic
697
+ arctan(0)
698
+
699
+ To then evaluate again, we currently must use Maxima via
700
+ :meth:`sage.symbolic.expression.Expression.simplify`::
701
+
702
+ sage: a = arctan(0, hold=True); a.simplify() # needs sage.symbolic
703
+ 0
704
+
705
+ ``conjugate(arctan(x))==arctan(conjugate(x))``, unless on the branch
706
+ cuts which run along the imaginary axis outside the interval [-I, +I].::
707
+
708
+ sage: # needs sage.symbolic
709
+ sage: conjugate(arctan(x))
710
+ conjugate(arctan(x))
711
+ sage: var('y', domain='positive')
712
+ y
713
+ sage: conjugate(arctan(y))
714
+ arctan(y)
715
+ sage: conjugate(arctan(y+I))
716
+ conjugate(arctan(y + I))
717
+ sage: conjugate(arctan(1/16))
718
+ arctan(1/16)
719
+ sage: conjugate(arctan(-2*I))
720
+ conjugate(arctan(-2*I))
721
+ sage: conjugate(arctan(2*I))
722
+ conjugate(arctan(2*I))
723
+ sage: conjugate(arctan(I/2))
724
+ arctan(-1/2*I)
725
+
726
+ TESTS::
727
+
728
+ sage: arctan(x)._sympy_() # needs sympy sage.symbolic
729
+ atan(x)
730
+ sage: arctan(x).operator() # needs sage.symbolic
731
+ arctan
732
+ sage: atan(complex(1,1)) # needs sage.rings.complex_double
733
+ (1.0172219678978514+0.4023594781085251j)
734
+
735
+ Check that :issue:`19918` is fixed::
736
+
737
+ sage: arctan(-x).subs(x=oo) # needs sage.symbolic
738
+ -1/2*pi
739
+ sage: arctan(-x).subs(x=-oo) # needs sage.symbolic
740
+ 1/2*pi
741
+ """
742
+ GinacFunction.__init__(self, 'arctan', latex_name=r"\arctan",
743
+ conversions=dict(maxima='atan', sympy='atan',
744
+ mathematica='ArcTan',
745
+ fricas='atan', giac='atan'))
746
+
747
+
748
+ arctan = atan = Function_arctan()
749
+
750
+
751
+ class Function_arccot(GinacFunction):
752
+ def __init__(self):
753
+ """
754
+ The arccotangent function.
755
+
756
+ EXAMPLES::
757
+
758
+ sage: # needs sage.symbolic
759
+ sage: arccot(1/2)
760
+ arccot(1/2)
761
+ sage: RDF(arccot(1/2)) # abs tol 2e-16
762
+ 1.1071487177940906
763
+ sage: arccot(1 + I)
764
+ arccot(I + 1)
765
+ sage: arccot(1/2).n(100)
766
+ 1.1071487177940905030170654602
767
+ sage: float(arccot(1/2)) # abs tol 2e-16
768
+ 1.1071487177940906
769
+ sage: bool(diff(acot(x), x) == -diff(atan(x), x))
770
+ True
771
+ sage: diff(acot(x), x)
772
+ -1/(x^2 + 1)
773
+
774
+ We can delay evaluation using the ``hold`` parameter::
775
+
776
+ sage: arccot(1, hold=True) # needs sage.symbolic
777
+ arccot(1)
778
+
779
+ To then evaluate again, we currently must use Maxima via
780
+ :meth:`sage.symbolic.expression.Expression.simplify`::
781
+
782
+ sage: a = arccot(1, hold=True); a.simplify() # needs sage.symbolic
783
+ 1/4*pi
784
+
785
+ TESTS:
786
+
787
+ Test complex input::
788
+
789
+ sage: arccot(x)._sympy_() # needs sympy sage.symbolic
790
+ acot(x)
791
+ sage: arccot(complex(1,1)) # rel tol 1e-15 # needs sage.rings.complex_double
792
+ (0.5535743588970452-0.4023594781085251j)
793
+ sage: arccot(1.+I) # needs sage.symbolic
794
+ 0.553574358897045 - 0.402359478108525*I
795
+ """
796
+ GinacFunction.__init__(self, 'arccot', latex_name=r"\operatorname{arccot}",
797
+ conversions=dict(maxima='acot', sympy='acot',
798
+ mathematica='ArcCot',
799
+ fricas='acot', giac='acot'))
800
+
801
+ def _eval_numpy_(self, x):
802
+ """
803
+ EXAMPLES::
804
+
805
+ sage: import numpy # needs numpy
806
+ sage: a = numpy.arange(2, 5) # needs numpy
807
+ sage: arccot(a) # needs numpy
808
+ array([0.46364761, 0.32175055, 0.24497866])
809
+ """
810
+ return math.pi / 2 - arctan(x)
811
+
812
+
813
+ arccot = acot = Function_arccot()
814
+
815
+
816
+ class Function_arccsc(GinacFunction):
817
+ def __init__(self):
818
+ """
819
+ The arccosecant function.
820
+
821
+ EXAMPLES::
822
+
823
+ sage: # needs sage.symbolic
824
+ sage: arccsc(2)
825
+ arccsc(2)
826
+ sage: RDF(arccsc(2)) # rel tol 1e-15
827
+ 0.5235987755982988
828
+ sage: arccsc(2).n(100)
829
+ 0.52359877559829887307710723055
830
+ sage: float(arccsc(2))
831
+ 0.52359877559829...
832
+ sage: arccsc(1 + I)
833
+ arccsc(I + 1)
834
+ sage: diff(acsc(x), x)
835
+ -1/(sqrt(x^2 - 1)*x)
836
+ sage: arccsc(x)._sympy_() # needs sympy
837
+ acsc(x)
838
+
839
+ We can delay evaluation using the ``hold`` parameter::
840
+
841
+ sage: arccsc(1, hold=True) # needs sage.symbolic
842
+ arccsc(1)
843
+
844
+ To then evaluate again, we currently must use Maxima via
845
+ :meth:`sage.symbolic.expression.Expression.simplify`::
846
+
847
+ sage: a = arccsc(1, hold=True); a.simplify() # needs sage.symbolic
848
+ 1/2*pi
849
+
850
+ TESTS:
851
+
852
+ Test complex input::
853
+
854
+ sage: arccsc(complex(1,1)) # rel tol 1e-15 # needs sage.rings.complex_double
855
+ (0.45227844715119064-0.5306375309525178j)
856
+ """
857
+ GinacFunction.__init__(self, 'arccsc', latex_name=r"\operatorname{arccsc}",
858
+ conversions=dict(maxima='acsc', sympy='acsc',
859
+ mathematica='ArcCsc',
860
+ fricas='acsc', giac='acsc'))
861
+
862
+ def _eval_numpy_(self, x):
863
+ """
864
+ EXAMPLES::
865
+
866
+ sage: import numpy # needs numpy
867
+ sage: a = numpy.arange(2, 5) # needs numpy
868
+ sage: arccsc(a) # needs numpy
869
+ array([0.52359878, 0.33983691, 0.25268026])
870
+ """
871
+ return arcsin(1.0 / x)
872
+
873
+
874
+ arccsc = acsc = Function_arccsc()
875
+
876
+
877
+ class Function_arcsec(GinacFunction):
878
+ def __init__(self):
879
+ """
880
+ The arcsecant function.
881
+
882
+ EXAMPLES::
883
+
884
+ sage: # needs sage.symbolic
885
+ sage: arcsec(2)
886
+ arcsec(2)
887
+ sage: arcsec(2.0)
888
+ 1.04719755119660
889
+ sage: arcsec(2).n(100)
890
+ 1.0471975511965977461542144611
891
+ sage: arcsec(1/2).n(100)
892
+ 1.3169578969248167086250463473*I
893
+ sage: RDF(arcsec(2)) # abs tol 1e-15
894
+ 1.0471975511965976
895
+ sage: arcsec(1 + I)
896
+ arcsec(I + 1)
897
+ sage: diff(asec(x), x)
898
+ 1/(sqrt(x^2 - 1)*x)
899
+ sage: arcsec(x)._sympy_() # needs sympy
900
+ asec(x)
901
+
902
+ We can delay evaluation using the ``hold`` parameter::
903
+
904
+ sage: arcsec(1, hold=True) # needs sage.symbolic
905
+ arcsec(1)
906
+
907
+ To then evaluate again, we currently must use Maxima via
908
+ :meth:`sage.symbolic.expression.Expression.simplify`::
909
+
910
+ sage: a = arcsec(1, hold=True); a.simplify() # needs sage.symbolic
911
+ 0
912
+
913
+ TESTS:
914
+
915
+ Test complex input::
916
+
917
+ sage: arcsec(complex(1,1)) # rel tol 1e-15 # needs sage.rings.complex_double
918
+ (1.118517879643706+0.5306375309525178j)
919
+ """
920
+ GinacFunction.__init__(self, 'arcsec', latex_name=r"\operatorname{arcsec}",
921
+ conversions=dict(maxima='asec', sympy='asec',
922
+ mathematica='ArcSec',
923
+ fricas='asec', giac='asec'))
924
+
925
+ def _eval_numpy_(self, x):
926
+ """
927
+ EXAMPLES::
928
+
929
+ sage: import numpy # needs numpy
930
+ sage: a = numpy.arange(2, 5) # needs numpy
931
+ sage: arcsec(a) # needs numpy
932
+ array([1.04719755, 1.23095942, 1.31811607])
933
+ """
934
+ return arccos(1.0 / x)
935
+
936
+
937
+ arcsec = asec = Function_arcsec()
938
+
939
+
940
+ class Function_arctan2(GinacFunction):
941
+ def __init__(self):
942
+ r"""
943
+ The modified arctangent function.
944
+
945
+ Returns the arc tangent (measured in radians) of `y/x`, where
946
+ unlike ``arctan(y/x)``, the signs of both ``x`` and ``y`` are
947
+ considered. In particular, this function measures the angle
948
+ of a ray through the origin and `(x,y)`, with the positive
949
+ `x`-axis the zero mark, and with output angle `\theta`
950
+ being between `-\pi<\theta<=\pi`.
951
+
952
+ Hence, ``arctan2(y,x) = arctan(y/x)`` only for `x>0`. One
953
+ may consider the usual arctan to measure angles of lines
954
+ through the origin, while the modified function measures
955
+ rays through the origin.
956
+
957
+ Note that the `y`-coordinate is by convention the first input.
958
+
959
+ EXAMPLES:
960
+
961
+ Note the difference between the two functions::
962
+
963
+ sage: arctan2(1, -1) # needs sage.symbolic
964
+ 3/4*pi
965
+ sage: arctan(1/-1) # needs sage.symbolic
966
+ -1/4*pi
967
+
968
+ This is consistent with Python and Maxima::
969
+
970
+ sage: maxima.atan2(1, -1) # needs sage.symbolic
971
+ (3*%pi)/4
972
+ sage: math.atan2(1, -1)
973
+ 2.356194490192345
974
+
975
+ More examples::
976
+
977
+ sage: arctan2(1, 0) # needs sage.symbolic
978
+ 1/2*pi
979
+ sage: arctan2(2, 3) # needs sage.symbolic
980
+ arctan(2/3)
981
+ sage: arctan2(-1, -1) # needs sage.symbolic
982
+ -3/4*pi
983
+
984
+ Of course we can approximate as well::
985
+
986
+ sage: arctan2(-1/2, 1).n(100) # needs sage.symbolic
987
+ -0.46364760900080611621425623146
988
+ sage: arctan2(2, 3).n(100) # needs sage.symbolic
989
+ 0.58800260354756755124561108063
990
+
991
+ We can delay evaluation using the ``hold`` parameter::
992
+
993
+ sage: arctan2(-1/2, 1, hold=True) # needs sage.symbolic
994
+ arctan2(-1/2, 1)
995
+
996
+ To then evaluate again, we currently must use Maxima via
997
+ :meth:`sage.symbolic.expression.Expression.simplify`::
998
+
999
+ sage: arctan2(-1/2, 1, hold=True).simplify() # needs sage.symbolic
1000
+ -arctan(1/2)
1001
+
1002
+ The function also works with numpy arrays as input::
1003
+
1004
+ sage: # needs numpy
1005
+ sage: import numpy
1006
+ sage: a = numpy.linspace(1, 3, 3)
1007
+ sage: b = numpy.linspace(3, 6, 3)
1008
+ sage: atan2(a, b)
1009
+ array([0.32175055, 0.41822433, 0.46364761])
1010
+
1011
+ sage: atan2(1,a) # needs numpy
1012
+ array([0.78539816, 0.46364761, 0.32175055])
1013
+
1014
+ sage: atan2(a, 1) # needs numpy
1015
+ array([0.78539816, 1.10714872, 1.24904577])
1016
+
1017
+ TESTS::
1018
+
1019
+ sage: x,y = var('x,y') # needs sage.symbolic
1020
+ sage: arctan2(y, x).operator() # needs sage.symbolic
1021
+ arctan2
1022
+
1023
+ Check if :issue:`8565` is fixed::
1024
+
1025
+ sage: atan2(-pi, 0) # needs sage.symbolic
1026
+ -1/2*pi
1027
+
1028
+ Check if :issue:`8564` is fixed::
1029
+
1030
+ sage: arctan2(x,x)._sympy_() # needs sympy sage.symbolic
1031
+ atan2(x, x)
1032
+
1033
+ Check if numerical evaluation works :issue:`9913`::
1034
+
1035
+ sage: arctan2(0, -log(2)).n() # needs sage.symbolic
1036
+ 3.14159265358979
1037
+
1038
+ Check that atan2(0,0) returns NaN :issue:`21614`::
1039
+
1040
+ sage: # needs sage.symbolic
1041
+ sage: atan2(0, 0)
1042
+ NaN
1043
+ sage: atan2(0, 0).n()
1044
+ NaN
1045
+ sage: atan2(0, 0, hold=True)
1046
+ arctan2(0, 0)
1047
+ sage: atan2(0, 0, hold=True).n()
1048
+ Traceback (most recent call last):
1049
+ ...
1050
+ RuntimeError: atan2(): division by zero
1051
+
1052
+ Check if :issue:`10062` is fixed, this was caused by
1053
+ ``(I*I).is_positive()`` returning ``True``::
1054
+
1055
+ sage: arctan2(0, I*I) # needs sage.symbolic
1056
+ pi
1057
+ """
1058
+ GinacFunction.__init__(self, 'arctan2', nargs=2, latex_name=r"\arctan",
1059
+ conversions=dict(maxima='atan2', sympy='atan2', giac='atan2'))
1060
+
1061
+
1062
+ arctan2 = atan2 = Function_arctan2()