vector 1.3.0__tar.gz → 1.4.0__tar.gz

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 (375) hide show
  1. {vector-1.3.0 → vector-1.4.0}/.github/workflows/ci.yml +17 -1
  2. {vector-1.3.0 → vector-1.4.0}/.pre-commit-config.yaml +7 -5
  3. {vector-1.3.0 → vector-1.4.0}/PKG-INFO +83 -4
  4. {vector-1.3.0 → vector-1.4.0}/README.md +78 -2
  5. {vector-1.3.0 → vector-1.4.0}/docs/changelog.md +41 -0
  6. vector-1.4.0/docs/usage/intro.ipynb +3592 -0
  7. {vector-1.3.0 → vector-1.4.0}/noxfile.py +2 -2
  8. {vector-1.3.0 → vector-1.4.0}/pyproject.toml +5 -0
  9. {vector-1.3.0 → vector-1.4.0}/src/vector/__init__.py +25 -0
  10. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/lorentz/Et2.py +1 -0
  11. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/lorentz/Mt.py +1 -0
  12. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/lorentz/Mt2.py +1 -0
  13. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/lorentz/add.py +1 -0
  14. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/lorentz/beta.py +1 -0
  15. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/lorentz/boostX_beta.py +1 -0
  16. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/lorentz/boostX_gamma.py +1 -0
  17. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/lorentz/boostY_beta.py +1 -0
  18. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/lorentz/boostY_gamma.py +1 -0
  19. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/lorentz/boostZ_beta.py +1 -0
  20. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/lorentz/boostZ_gamma.py +1 -0
  21. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/lorentz/boost_beta3.py +1 -0
  22. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/lorentz/boost_p4.py +1 -0
  23. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/lorentz/deltaRapidityPhi.py +1 -0
  24. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/lorentz/deltaRapidityPhi2.py +1 -0
  25. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/lorentz/dot.py +1 -0
  26. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/lorentz/equal.py +1 -0
  27. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/lorentz/gamma.py +1 -0
  28. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/lorentz/is_lightlike.py +1 -0
  29. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/lorentz/is_spacelike.py +1 -0
  30. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/lorentz/is_timelike.py +1 -0
  31. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/lorentz/isclose.py +1 -0
  32. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/lorentz/not_equal.py +1 -0
  33. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/lorentz/rapidity.py +1 -0
  34. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/lorentz/scale.py +1 -0
  35. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/lorentz/subtract.py +1 -0
  36. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/lorentz/t.py +1 -0
  37. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/lorentz/t2.py +1 -0
  38. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/lorentz/tau.py +1 -0
  39. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/lorentz/tau2.py +1 -0
  40. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/lorentz/to_beta3.py +1 -0
  41. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/lorentz/transform4D.py +1 -0
  42. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/lorentz/unit.py +1 -0
  43. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/planar/add.py +1 -0
  44. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/planar/dot.py +1 -0
  45. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/planar/equal.py +1 -0
  46. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/planar/is_antiparallel.py +1 -0
  47. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/planar/is_parallel.py +1 -0
  48. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/planar/is_perpendicular.py +1 -0
  49. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/planar/isclose.py +1 -0
  50. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/planar/not_equal.py +1 -0
  51. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/planar/phi.py +1 -0
  52. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/planar/rho.py +1 -0
  53. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/planar/rho2.py +1 -0
  54. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/planar/rotateZ.py +5 -1
  55. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/planar/scale.py +5 -1
  56. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/planar/subtract.py +1 -0
  57. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/planar/transform2D.py +1 -0
  58. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/planar/unit.py +1 -0
  59. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/planar/x.py +1 -0
  60. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/planar/y.py +1 -0
  61. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/spatial/add.py +1 -0
  62. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/spatial/costheta.py +1 -0
  63. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/spatial/cottheta.py +1 -0
  64. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/spatial/cross.py +1 -0
  65. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/spatial/deltaR.py +1 -0
  66. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/spatial/deltaR2.py +1 -0
  67. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/spatial/deltaangle.py +1 -0
  68. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/spatial/deltaeta.py +1 -0
  69. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/spatial/dot.py +1 -0
  70. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/spatial/equal.py +1 -0
  71. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/spatial/eta.py +1 -0
  72. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/spatial/is_antiparallel.py +1 -0
  73. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/spatial/is_parallel.py +1 -0
  74. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/spatial/is_perpendicular.py +1 -0
  75. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/spatial/isclose.py +1 -0
  76. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/spatial/mag.py +1 -0
  77. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/spatial/mag2.py +1 -0
  78. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/spatial/not_equal.py +1 -0
  79. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/spatial/rotateX.py +1 -0
  80. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/spatial/rotateY.py +1 -0
  81. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/spatial/rotate_axis.py +1 -0
  82. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/spatial/rotate_euler.py +7 -1
  83. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/spatial/rotate_quaternion.py +1 -0
  84. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/spatial/scale.py +1 -0
  85. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/spatial/subtract.py +1 -0
  86. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/spatial/theta.py +1 -0
  87. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/spatial/transform3D.py +1 -0
  88. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/spatial/unit.py +1 -0
  89. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/spatial/z.py +1 -0
  90. vector-1.4.0/src/vector/_lib.py +95 -0
  91. {vector-1.3.0 → vector-1.4.0}/src/vector/_methods.py +489 -612
  92. {vector-1.3.0 → vector-1.4.0}/src/vector/_version.py +2 -2
  93. {vector-1.3.0 → vector-1.4.0}/src/vector/backends/awkward.py +60 -7
  94. {vector-1.3.0 → vector-1.4.0}/src/vector/backends/awkward_constructors.py +1 -1
  95. {vector-1.3.0 → vector-1.4.0}/src/vector/backends/numpy.py +18 -10
  96. {vector-1.3.0 → vector-1.4.0}/src/vector/backends/object.py +230 -449
  97. vector-1.4.0/src/vector/backends/sympy.py +1534 -0
  98. {vector-1.3.0 → vector-1.4.0}/tests/backends/test_awkward.py +88 -28
  99. vector-1.4.0/tests/backends/test_sympy.py +484 -0
  100. vector-1.4.0/tests/compute/spatial/test_cross.py +72 -0
  101. vector-1.4.0/tests/compute/sympy/lorentz/__init__.py +4 -0
  102. vector-1.4.0/tests/compute/sympy/lorentz/test_Et.py +197 -0
  103. vector-1.4.0/tests/compute/sympy/lorentz/test_Et2.py +173 -0
  104. vector-1.4.0/tests/compute/sympy/lorentz/test_Mt.py +169 -0
  105. vector-1.4.0/tests/compute/sympy/lorentz/test_Mt2.py +161 -0
  106. vector-1.4.0/tests/compute/sympy/lorentz/test_beta.py +203 -0
  107. vector-1.4.0/tests/compute/sympy/lorentz/test_boostX_beta.py +53 -0
  108. vector-1.4.0/tests/compute/sympy/lorentz/test_boostX_gamma.py +51 -0
  109. vector-1.4.0/tests/compute/sympy/lorentz/test_boostY_beta.py +69 -0
  110. vector-1.4.0/tests/compute/sympy/lorentz/test_boostY_gamma.py +51 -0
  111. vector-1.4.0/tests/compute/sympy/lorentz/test_boostZ_beta.py +52 -0
  112. vector-1.4.0/tests/compute/sympy/lorentz/test_boostZ_gamma.py +51 -0
  113. vector-1.4.0/tests/compute/sympy/lorentz/test_boost_beta3.py +92 -0
  114. vector-1.4.0/tests/compute/sympy/lorentz/test_boost_p4.py +99 -0
  115. vector-1.4.0/tests/compute/sympy/lorentz/test_deltaRapidityPhi.py +88 -0
  116. vector-1.4.0/tests/compute/sympy/lorentz/test_deltaRapidityPhi2.py +89 -0
  117. vector-1.4.0/tests/compute/sympy/lorentz/test_gamma.py +201 -0
  118. vector-1.4.0/tests/compute/sympy/lorentz/test_is_lightlike.py +149 -0
  119. vector-1.4.0/tests/compute/sympy/lorentz/test_is_spacelike.py +367 -0
  120. vector-1.4.0/tests/compute/sympy/lorentz/test_is_timelike.py +361 -0
  121. vector-1.4.0/tests/compute/sympy/lorentz/test_rapidity.py +239 -0
  122. vector-1.4.0/tests/compute/sympy/lorentz/test_t.py +183 -0
  123. vector-1.4.0/tests/compute/sympy/lorentz/test_t2.py +173 -0
  124. vector-1.4.0/tests/compute/sympy/lorentz/test_tau.py +170 -0
  125. vector-1.4.0/tests/compute/sympy/lorentz/test_tau2.py +164 -0
  126. vector-1.4.0/tests/compute/sympy/lorentz/test_to_beta3.py +342 -0
  127. vector-1.4.0/tests/compute/sympy/planar/__init__.py +4 -0
  128. vector-1.4.0/tests/compute/sympy/planar/test_deltaphi.py +67 -0
  129. vector-1.4.0/tests/compute/sympy/planar/test_phi.py +35 -0
  130. vector-1.4.0/tests/compute/sympy/planar/test_rho.py +33 -0
  131. vector-1.4.0/tests/compute/sympy/planar/test_rho2.py +33 -0
  132. vector-1.4.0/tests/compute/sympy/planar/test_rotateZ.py +35 -0
  133. vector-1.4.0/tests/compute/sympy/planar/test_x.py +33 -0
  134. vector-1.4.0/tests/compute/sympy/planar/test_y.py +33 -0
  135. vector-1.4.0/tests/compute/sympy/spatial/__init__.py +4 -0
  136. vector-1.4.0/tests/compute/sympy/spatial/test_costheta.py +99 -0
  137. vector-1.4.0/tests/compute/sympy/spatial/test_cottheta.py +91 -0
  138. vector-1.4.0/tests/compute/sympy/spatial/test_cross.py +57 -0
  139. vector-1.4.0/tests/compute/sympy/spatial/test_deltaR.py +110 -0
  140. vector-1.4.0/tests/compute/sympy/spatial/test_deltaR2.py +108 -0
  141. vector-1.4.0/tests/compute/sympy/spatial/test_deltaangle.py +90 -0
  142. vector-1.4.0/tests/compute/sympy/spatial/test_deltaeta.py +88 -0
  143. vector-1.4.0/tests/compute/sympy/spatial/test_eta.py +81 -0
  144. vector-1.4.0/tests/compute/sympy/spatial/test_mag.py +81 -0
  145. vector-1.4.0/tests/compute/sympy/spatial/test_mag2.py +84 -0
  146. vector-1.4.0/tests/compute/sympy/spatial/test_rotateX.py +78 -0
  147. vector-1.4.0/tests/compute/sympy/spatial/test_rotateY.py +78 -0
  148. vector-1.4.0/tests/compute/sympy/spatial/test_rotate_axis.py +111 -0
  149. vector-1.4.0/tests/compute/sympy/spatial/test_rotate_euler.py +43 -0
  150. vector-1.4.0/tests/compute/sympy/spatial/test_rotate_quaternion.py +43 -0
  151. vector-1.4.0/tests/compute/sympy/spatial/test_theta.py +81 -0
  152. vector-1.4.0/tests/compute/sympy/spatial/test_z.py +77 -0
  153. vector-1.4.0/tests/compute/sympy/test_add.py +121 -0
  154. vector-1.4.0/tests/compute/sympy/test_conversions.py +549 -0
  155. vector-1.4.0/tests/compute/sympy/test_dot.py +100 -0
  156. vector-1.4.0/tests/compute/sympy/test_equal.py +95 -0
  157. vector-1.4.0/tests/compute/sympy/test_is_antiparallel.py +76 -0
  158. vector-1.4.0/tests/compute/sympy/test_is_parallel.py +66 -0
  159. vector-1.4.0/tests/compute/sympy/test_is_perpendicular.py +68 -0
  160. vector-1.4.0/tests/compute/sympy/test_not_equal.py +95 -0
  161. vector-1.4.0/tests/compute/sympy/test_scale.py +319 -0
  162. vector-1.4.0/tests/compute/sympy/test_subtract.py +117 -0
  163. vector-1.4.0/tests/compute/sympy/test_unit.py +93 -0
  164. {vector-1.3.0 → vector-1.4.0}/tests/compute/test_add.py +0 -2
  165. {vector-1.3.0 → vector-1.4.0}/tests/compute/test_conversions.py +55 -33
  166. {vector-1.3.0 → vector-1.4.0}/tests/compute/test_isclose.py +0 -2
  167. {vector-1.3.0 → vector-1.4.0}/tests/compute/test_scale.py +5 -5
  168. {vector-1.3.0 → vector-1.4.0}/tests/test_issues.py +14 -0
  169. vector-1.3.0/docs/usage/intro.ipynb +0 -2817
  170. vector-1.3.0/tests/compute/spatial/test_cross.py +0 -170
  171. {vector-1.3.0 → vector-1.4.0}/.all-contributorsrc +0 -0
  172. {vector-1.3.0 → vector-1.4.0}/.git_archival.txt +0 -0
  173. {vector-1.3.0 → vector-1.4.0}/.gitattributes +0 -0
  174. {vector-1.3.0 → vector-1.4.0}/.github/CONTRIBUTING.md +0 -0
  175. {vector-1.3.0 → vector-1.4.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  176. {vector-1.3.0 → vector-1.4.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  177. {vector-1.3.0 → vector-1.4.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  178. {vector-1.3.0 → vector-1.4.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  179. {vector-1.3.0 → vector-1.4.0}/.github/codecov.yml +0 -0
  180. {vector-1.3.0 → vector-1.4.0}/.github/dependabot.yml +0 -0
  181. {vector-1.3.0 → vector-1.4.0}/.github/matchers/pylint.json +0 -0
  182. {vector-1.3.0 → vector-1.4.0}/.github/workflows/cd.yml +0 -0
  183. {vector-1.3.0 → vector-1.4.0}/.github/workflows/notebooks.yml +0 -0
  184. {vector-1.3.0 → vector-1.4.0}/.gitignore +0 -0
  185. {vector-1.3.0 → vector-1.4.0}/.readthedocs.yml +0 -0
  186. {vector-1.3.0 → vector-1.4.0}/CITATION.cff +0 -0
  187. {vector-1.3.0 → vector-1.4.0}/LICENSE +0 -0
  188. {vector-1.3.0 → vector-1.4.0}/docs/Makefile +0 -0
  189. {vector-1.3.0 → vector-1.4.0}/docs/_images/LogoSrc.svg +0 -0
  190. {vector-1.3.0 → vector-1.4.0}/docs/_images/vector-logo.png +0 -0
  191. {vector-1.3.0 → vector-1.4.0}/docs/api/backends/vector.backends._numba.rst +0 -0
  192. {vector-1.3.0 → vector-1.4.0}/docs/api/backends/vector.backends._numba_object.rst +0 -0
  193. {vector-1.3.0 → vector-1.4.0}/docs/api/backends/vector.backends.awkward.rst +0 -0
  194. {vector-1.3.0 → vector-1.4.0}/docs/api/backends/vector.backends.awkward_constructors.rst +0 -0
  195. {vector-1.3.0 → vector-1.4.0}/docs/api/backends/vector.backends.numba_numpy.rst +0 -0
  196. {vector-1.3.0 → vector-1.4.0}/docs/api/backends/vector.backends.numpy.rst +0 -0
  197. {vector-1.3.0 → vector-1.4.0}/docs/api/backends/vector.backends.object.rst +0 -0
  198. {vector-1.3.0 → vector-1.4.0}/docs/api/backends/vector.backends.rst +0 -0
  199. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/lorentz/vector._compute.lorentz.Et.rst +0 -0
  200. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/lorentz/vector._compute.lorentz.Et2.rst +0 -0
  201. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/lorentz/vector._compute.lorentz.Mt.rst +0 -0
  202. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/lorentz/vector._compute.lorentz.Mt2.rst +0 -0
  203. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/lorentz/vector._compute.lorentz.add.rst +0 -0
  204. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/lorentz/vector._compute.lorentz.beta.rst +0 -0
  205. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/lorentz/vector._compute.lorentz.boostX_beta.rst +0 -0
  206. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/lorentz/vector._compute.lorentz.boostX_gamma.rst +0 -0
  207. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/lorentz/vector._compute.lorentz.boostY_beta.rst +0 -0
  208. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/lorentz/vector._compute.lorentz.boostY_gamma.rst +0 -0
  209. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/lorentz/vector._compute.lorentz.boostZ_beta.rst +0 -0
  210. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/lorentz/vector._compute.lorentz.boostZ_gamma.rst +0 -0
  211. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/lorentz/vector._compute.lorentz.boost_beta3.rst +0 -0
  212. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/lorentz/vector._compute.lorentz.boost_p4.rst +0 -0
  213. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/lorentz/vector._compute.lorentz.deltaRapidityPhi.rst +0 -0
  214. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/lorentz/vector._compute.lorentz.deltaRapidityPhi2.rst +0 -0
  215. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/lorentz/vector._compute.lorentz.dot.rst +0 -0
  216. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/lorentz/vector._compute.lorentz.equal.rst +0 -0
  217. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/lorentz/vector._compute.lorentz.gamma.rst +0 -0
  218. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/lorentz/vector._compute.lorentz.is_lightlike.rst +0 -0
  219. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/lorentz/vector._compute.lorentz.is_spacelike.rst +0 -0
  220. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/lorentz/vector._compute.lorentz.is_timelike.rst +0 -0
  221. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/lorentz/vector._compute.lorentz.isclose.rst +0 -0
  222. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/lorentz/vector._compute.lorentz.not_equal.rst +0 -0
  223. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/lorentz/vector._compute.lorentz.rapidity.rst +0 -0
  224. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/lorentz/vector._compute.lorentz.rst +0 -0
  225. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/lorentz/vector._compute.lorentz.scale.rst +0 -0
  226. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/lorentz/vector._compute.lorentz.subtract.rst +0 -0
  227. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/lorentz/vector._compute.lorentz.t.rst +0 -0
  228. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/lorentz/vector._compute.lorentz.t2.rst +0 -0
  229. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/lorentz/vector._compute.lorentz.tau.rst +0 -0
  230. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/lorentz/vector._compute.lorentz.tau2.rst +0 -0
  231. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/lorentz/vector._compute.lorentz.to_beta3.rst +0 -0
  232. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/lorentz/vector._compute.lorentz.transform4D.rst +0 -0
  233. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/lorentz/vector._compute.lorentz.unit.rst +0 -0
  234. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/planar/vector._compute.planar.add.rst +0 -0
  235. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/planar/vector._compute.planar.deltaphi.rst +0 -0
  236. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/planar/vector._compute.planar.dot.rst +0 -0
  237. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/planar/vector._compute.planar.equal.rst +0 -0
  238. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/planar/vector._compute.planar.is_antiparallel.rst +0 -0
  239. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/planar/vector._compute.planar.is_parallel.rst +0 -0
  240. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/planar/vector._compute.planar.is_perpendicular.rst +0 -0
  241. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/planar/vector._compute.planar.isclose.rst +0 -0
  242. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/planar/vector._compute.planar.not_equal.rst +0 -0
  243. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/planar/vector._compute.planar.phi.rst +0 -0
  244. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/planar/vector._compute.planar.rho.rst +0 -0
  245. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/planar/vector._compute.planar.rho2.rst +0 -0
  246. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/planar/vector._compute.planar.rotateZ.rst +0 -0
  247. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/planar/vector._compute.planar.rst +0 -0
  248. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/planar/vector._compute.planar.scale.rst +0 -0
  249. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/planar/vector._compute.planar.subtract.rst +0 -0
  250. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/planar/vector._compute.planar.transform2D.rst +0 -0
  251. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/planar/vector._compute.planar.unit.rst +0 -0
  252. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/planar/vector._compute.planar.x.rst +0 -0
  253. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/planar/vector._compute.planar.y.rst +0 -0
  254. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/spatial/vector._compute.spatial.add.rst +0 -0
  255. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/spatial/vector._compute.spatial.costheta.rst +0 -0
  256. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/spatial/vector._compute.spatial.cottheta.rst +0 -0
  257. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/spatial/vector._compute.spatial.cross.rst +0 -0
  258. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/spatial/vector._compute.spatial.deltaR.rst +0 -0
  259. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/spatial/vector._compute.spatial.deltaR2.rst +0 -0
  260. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/spatial/vector._compute.spatial.deltaangle.rst +0 -0
  261. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/spatial/vector._compute.spatial.deltaeta.rst +0 -0
  262. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/spatial/vector._compute.spatial.dot.rst +0 -0
  263. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/spatial/vector._compute.spatial.equal.rst +0 -0
  264. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/spatial/vector._compute.spatial.eta.rst +0 -0
  265. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/spatial/vector._compute.spatial.is_antiparallel.rst +0 -0
  266. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/spatial/vector._compute.spatial.is_parallel.rst +0 -0
  267. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/spatial/vector._compute.spatial.is_perpendicular.rst +0 -0
  268. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/spatial/vector._compute.spatial.isclose.rst +0 -0
  269. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/spatial/vector._compute.spatial.mag.rst +0 -0
  270. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/spatial/vector._compute.spatial.mag2.rst +0 -0
  271. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/spatial/vector._compute.spatial.not_equal.rst +0 -0
  272. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/spatial/vector._compute.spatial.rotateX.rst +0 -0
  273. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/spatial/vector._compute.spatial.rotateY.rst +0 -0
  274. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/spatial/vector._compute.spatial.rotate_axis.rst +0 -0
  275. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/spatial/vector._compute.spatial.rotate_euler.rst +0 -0
  276. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/spatial/vector._compute.spatial.rotate_quaternion.rst +0 -0
  277. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/spatial/vector._compute.spatial.rst +0 -0
  278. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/spatial/vector._compute.spatial.scale.rst +0 -0
  279. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/spatial/vector._compute.spatial.subtract.rst +0 -0
  280. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/spatial/vector._compute.spatial.theta.rst +0 -0
  281. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/spatial/vector._compute.spatial.transform3D.rst +0 -0
  282. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/spatial/vector._compute.spatial.unit.rst +0 -0
  283. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/spatial/vector._compute.spatial.z.rst +0 -0
  284. {vector-1.3.0 → vector-1.4.0}/docs/api/compute/vector._compute.rst +0 -0
  285. {vector-1.3.0 → vector-1.4.0}/docs/api/inheritance.svg +0 -0
  286. {vector-1.3.0 → vector-1.4.0}/docs/api/modules.rst +0 -0
  287. {vector-1.3.0 → vector-1.4.0}/docs/api/vector._methods.rst +0 -0
  288. {vector-1.3.0 → vector-1.4.0}/docs/api/vector._typeutils.rst +0 -0
  289. {vector-1.3.0 → vector-1.4.0}/docs/api/vector.rst +0 -0
  290. {vector-1.3.0 → vector-1.4.0}/docs/conf.py +0 -0
  291. {vector-1.3.0 → vector-1.4.0}/docs/index.rst +0 -0
  292. {vector-1.3.0 → vector-1.4.0}/docs/make.bat +0 -0
  293. {vector-1.3.0 → vector-1.4.0}/docs/usage/structure.md +0 -0
  294. {vector-1.3.0 → vector-1.4.0}/environment.yml +0 -0
  295. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/__init__.py +0 -0
  296. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/lorentz/Et.py +0 -0
  297. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/lorentz/__init__.py +0 -0
  298. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/planar/__init__.py +0 -0
  299. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/planar/deltaphi.py +0 -0
  300. {vector-1.3.0 → vector-1.4.0}/src/vector/_compute/spatial/__init__.py +0 -0
  301. {vector-1.3.0 → vector-1.4.0}/src/vector/_typeutils.py +0 -0
  302. {vector-1.3.0 → vector-1.4.0}/src/vector/backends/__init__.py +0 -0
  303. {vector-1.3.0 → vector-1.4.0}/src/vector/backends/_numba.py +0 -0
  304. {vector-1.3.0 → vector-1.4.0}/src/vector/backends/_numba_object.py +0 -0
  305. {vector-1.3.0 → vector-1.4.0}/src/vector/backends/numba_numpy.py +0 -0
  306. {vector-1.3.0 → vector-1.4.0}/src/vector/py.typed +0 -0
  307. {vector-1.3.0 → vector-1.4.0}/src/vector/version.pyi +0 -0
  308. {vector-1.3.0 → vector-1.4.0}/tests/__init__.py +0 -0
  309. {vector-1.3.0 → vector-1.4.0}/tests/backends/__init__.py +0 -0
  310. {vector-1.3.0 → vector-1.4.0}/tests/backends/test_awkward_numba.py +0 -0
  311. {vector-1.3.0 → vector-1.4.0}/tests/backends/test_dask_awkward.py +0 -0
  312. {vector-1.3.0 → vector-1.4.0}/tests/backends/test_numba_numpy.py +0 -0
  313. {vector-1.3.0 → vector-1.4.0}/tests/backends/test_numba_object.py +0 -0
  314. {vector-1.3.0 → vector-1.4.0}/tests/backends/test_numpy.py +0 -0
  315. {vector-1.3.0 → vector-1.4.0}/tests/backends/test_object.py +0 -0
  316. {vector-1.3.0 → vector-1.4.0}/tests/backends/test_operators.py +0 -0
  317. {vector-1.3.0 → vector-1.4.0}/tests/compute/__init__.py +0 -0
  318. {vector-1.3.0 → vector-1.4.0}/tests/compute/lorentz/__init__.py +0 -0
  319. {vector-1.3.0 → vector-1.4.0}/tests/compute/lorentz/test_Et.py +0 -0
  320. {vector-1.3.0 → vector-1.4.0}/tests/compute/lorentz/test_Et2.py +0 -0
  321. {vector-1.3.0 → vector-1.4.0}/tests/compute/lorentz/test_Mt.py +0 -0
  322. {vector-1.3.0 → vector-1.4.0}/tests/compute/lorentz/test_Mt2.py +0 -0
  323. {vector-1.3.0 → vector-1.4.0}/tests/compute/lorentz/test_beta.py +0 -0
  324. {vector-1.3.0 → vector-1.4.0}/tests/compute/lorentz/test_boostX_beta.py +0 -0
  325. {vector-1.3.0 → vector-1.4.0}/tests/compute/lorentz/test_boostX_gamma.py +0 -0
  326. {vector-1.3.0 → vector-1.4.0}/tests/compute/lorentz/test_boostY_beta.py +0 -0
  327. {vector-1.3.0 → vector-1.4.0}/tests/compute/lorentz/test_boostY_gamma.py +0 -0
  328. {vector-1.3.0 → vector-1.4.0}/tests/compute/lorentz/test_boostZ_beta.py +0 -0
  329. {vector-1.3.0 → vector-1.4.0}/tests/compute/lorentz/test_boostZ_gamma.py +0 -0
  330. {vector-1.3.0 → vector-1.4.0}/tests/compute/lorentz/test_boost_beta3.py +0 -0
  331. {vector-1.3.0 → vector-1.4.0}/tests/compute/lorentz/test_boost_p4.py +0 -0
  332. {vector-1.3.0 → vector-1.4.0}/tests/compute/lorentz/test_deltaRapidityPhi.py +0 -0
  333. {vector-1.3.0 → vector-1.4.0}/tests/compute/lorentz/test_deltaRapidityPhi2.py +0 -0
  334. {vector-1.3.0 → vector-1.4.0}/tests/compute/lorentz/test_gamma.py +0 -0
  335. {vector-1.3.0 → vector-1.4.0}/tests/compute/lorentz/test_rapidity.py +0 -0
  336. {vector-1.3.0 → vector-1.4.0}/tests/compute/lorentz/test_t.py +0 -0
  337. {vector-1.3.0 → vector-1.4.0}/tests/compute/lorentz/test_t2.py +0 -0
  338. {vector-1.3.0 → vector-1.4.0}/tests/compute/lorentz/test_tau.py +0 -0
  339. {vector-1.3.0 → vector-1.4.0}/tests/compute/lorentz/test_tau2.py +0 -0
  340. {vector-1.3.0 → vector-1.4.0}/tests/compute/lorentz/test_to_beta3.py +0 -0
  341. {vector-1.3.0 → vector-1.4.0}/tests/compute/planar/__init__.py +0 -0
  342. {vector-1.3.0 → vector-1.4.0}/tests/compute/planar/test_deltaphi.py +0 -0
  343. {vector-1.3.0 → vector-1.4.0}/tests/compute/planar/test_phi.py +0 -0
  344. {vector-1.3.0 → vector-1.4.0}/tests/compute/planar/test_rho.py +0 -0
  345. {vector-1.3.0 → vector-1.4.0}/tests/compute/planar/test_rho2.py +0 -0
  346. {vector-1.3.0 → vector-1.4.0}/tests/compute/planar/test_rotateZ.py +0 -0
  347. {vector-1.3.0 → vector-1.4.0}/tests/compute/planar/test_x.py +0 -0
  348. {vector-1.3.0 → vector-1.4.0}/tests/compute/planar/test_y.py +0 -0
  349. {vector-1.3.0 → vector-1.4.0}/tests/compute/spatial/__init__.py +0 -0
  350. {vector-1.3.0 → vector-1.4.0}/tests/compute/spatial/test_costheta.py +0 -0
  351. {vector-1.3.0 → vector-1.4.0}/tests/compute/spatial/test_cottheta.py +0 -0
  352. {vector-1.3.0 → vector-1.4.0}/tests/compute/spatial/test_deltaR.py +0 -0
  353. {vector-1.3.0 → vector-1.4.0}/tests/compute/spatial/test_deltaR2.py +0 -0
  354. {vector-1.3.0 → vector-1.4.0}/tests/compute/spatial/test_deltaangle.py +0 -0
  355. {vector-1.3.0 → vector-1.4.0}/tests/compute/spatial/test_deltaeta.py +0 -0
  356. {vector-1.3.0 → vector-1.4.0}/tests/compute/spatial/test_eta.py +0 -0
  357. {vector-1.3.0 → vector-1.4.0}/tests/compute/spatial/test_mag.py +0 -0
  358. {vector-1.3.0 → vector-1.4.0}/tests/compute/spatial/test_mag2.py +0 -0
  359. {vector-1.3.0 → vector-1.4.0}/tests/compute/spatial/test_rotateX.py +0 -0
  360. {vector-1.3.0 → vector-1.4.0}/tests/compute/spatial/test_rotateY.py +0 -0
  361. {vector-1.3.0 → vector-1.4.0}/tests/compute/spatial/test_rotate_axis.py +0 -0
  362. {vector-1.3.0 → vector-1.4.0}/tests/compute/spatial/test_rotate_euler.py +0 -0
  363. {vector-1.3.0 → vector-1.4.0}/tests/compute/spatial/test_rotate_quaternion.py +0 -0
  364. {vector-1.3.0 → vector-1.4.0}/tests/compute/spatial/test_theta.py +0 -0
  365. {vector-1.3.0 → vector-1.4.0}/tests/compute/spatial/test_z.py +0 -0
  366. {vector-1.3.0 → vector-1.4.0}/tests/compute/test_dot.py +0 -0
  367. {vector-1.3.0 → vector-1.4.0}/tests/compute/test_equal.py +0 -0
  368. {vector-1.3.0 → vector-1.4.0}/tests/compute/test_not_equal.py +0 -0
  369. {vector-1.3.0 → vector-1.4.0}/tests/compute/test_subtract.py +0 -0
  370. {vector-1.3.0 → vector-1.4.0}/tests/compute/test_unit.py +0 -0
  371. {vector-1.3.0 → vector-1.4.0}/tests/samples/issue-161-v2.pkl +0 -0
  372. {vector-1.3.0 → vector-1.4.0}/tests/samples/issue-161.pkl +0 -0
  373. {vector-1.3.0 → vector-1.4.0}/tests/test_compute_features.py +0 -0
  374. {vector-1.3.0 → vector-1.4.0}/tests/test_methods.py +0 -0
  375. {vector-1.3.0 → vector-1.4.0}/tests/test_notebooks.py +0 -0
@@ -57,6 +57,14 @@ jobs:
57
57
  - name: Test light package
58
58
  run: python -m pytest -ra --ignore tests/test_notebooks.py
59
59
 
60
+ - name: Install numpy v2
61
+ if: matrix.python-version != 3.8
62
+ run: python -m pip install "numpy>=2.0.0b1"
63
+
64
+ - name: Test light package with numpy v2.x
65
+ if: matrix.python-version != 3.8
66
+ run: python -m pytest -ra --ignore tests/test_notebooks.py
67
+
60
68
  check-awkward-v1:
61
69
  needs: [check-light]
62
70
  runs-on: ubuntu-latest
@@ -129,8 +137,16 @@ jobs:
129
137
  - name: Test package with awkward v2.x
130
138
  run: python -m pytest -ra --cov=vector --ignore tests/test_notebooks.py .
131
139
 
140
+ - name: Install numpy v2
141
+ if: matrix.python-version != 3.8
142
+ run: python -m pip install "numpy>=2.0.0b1"
143
+
144
+ - name: Test package with numpy v2.x
145
+ if: matrix.python-version != 3.8
146
+ run: python -m pytest -ra --cov=vector --ignore tests/test_notebooks.py .
147
+
132
148
  - name: Upload coverage report
133
- uses: codecov/codecov-action@v4.1.0
149
+ uses: codecov/codecov-action@v4.3.0
134
150
  with:
135
151
  token: ${{ secrets.CODECOV_TOKEN }}
136
152
 
@@ -4,7 +4,7 @@ ci:
4
4
 
5
5
  repos:
6
6
  - repo: https://github.com/pre-commit/pre-commit-hooks
7
- rev: v4.5.0
7
+ rev: v4.6.0
8
8
  hooks:
9
9
  - id: check-added-large-files
10
10
  - id: check-case-conflict
@@ -19,19 +19,19 @@ repos:
19
19
  - id: trailing-whitespace
20
20
 
21
21
  - repo: https://github.com/astral-sh/ruff-pre-commit
22
- rev: "v0.2.2"
22
+ rev: "v0.4.1"
23
23
  hooks:
24
24
  - id: ruff
25
25
  args: ["--fix", "--show-fixes"]
26
26
  - id: ruff-format
27
27
 
28
28
  - repo: https://github.com/tox-dev/pyproject-fmt
29
- rev: "1.7.0"
29
+ rev: "1.8.0"
30
30
  hooks:
31
31
  - id: pyproject-fmt
32
32
 
33
33
  - repo: https://github.com/pre-commit/mirrors-mypy
34
- rev: v1.8.0
34
+ rev: v1.9.0
35
35
  hooks:
36
36
  - id: mypy
37
37
  files: src
@@ -39,11 +39,13 @@ repos:
39
39
  additional_dependencies:
40
40
  - numpy
41
41
  - packaging
42
+ - sympy
42
43
 
43
44
  - repo: https://github.com/codespell-project/codespell
44
45
  rev: v2.2.6
45
46
  hooks:
46
47
  - id: codespell
48
+ exclude: ^docs/usage/intro.ipynb$
47
49
 
48
50
  - repo: https://github.com/pre-commit/mirrors-prettier
49
51
  rev: "v4.0.0-alpha.8"
@@ -69,7 +71,7 @@ repos:
69
71
  - id: rst-inline-touching-normal
70
72
 
71
73
  - repo: https://github.com/nbQA-dev/nbQA
72
- rev: 1.7.1
74
+ rev: 1.8.5
73
75
  hooks:
74
76
  - id: nbqa-pyupgrade
75
77
  args: ["--py37-plus"]
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.3
2
2
  Name: vector
3
- Version: 1.3.0
3
+ Version: 1.4.0
4
4
  Summary: Vector classes and utilities
5
5
  Project-URL: Bug Tracker, https://github.com/scikit-hep/vector/issues
6
6
  Project-URL: Changelog, https://vector.readthedocs.io/en/latest/changelog.html
@@ -42,6 +42,7 @@ Requires-Dist: papermill>=2.4; extra == 'dev'
42
42
  Requires-Dist: pytest-cov>=3; extra == 'dev'
43
43
  Requires-Dist: pytest-doctestplus; extra == 'dev'
44
44
  Requires-Dist: pytest>=6; extra == 'dev'
45
+ Requires-Dist: sympy; extra == 'dev'
45
46
  Provides-Extra: docs
46
47
  Requires-Dist: awkward>=1.2; extra == 'docs'
47
48
  Requires-Dist: ipykernel; extra == 'docs'
@@ -53,6 +54,8 @@ Requires-Dist: sphinx-math-dollar; extra == 'docs'
53
54
  Requires-Dist: sphinx>=4; extra == 'docs'
54
55
  Provides-Extra: numba
55
56
  Requires-Dist: numba>=0.57; (python_version < '3.12') and extra == 'numba'
57
+ Provides-Extra: sympy
58
+ Requires-Dist: sympy; extra == 'sympy'
56
59
  Provides-Extra: test
57
60
  Requires-Dist: dask-awkward; extra == 'test'
58
61
  Requires-Dist: nox; extra == 'test'
@@ -93,10 +96,12 @@ Main features of Vector:
93
96
  - Uses names and conventions set by [ROOT](https://root.cern/)'s [TLorentzVector](https://root.cern.ch/doc/master/classTLorentzVector.html) and [Math::LorentzVector](https://root.cern.ch/doc/master/classROOT_1_1Math_1_1LorentzVector.html), as well as [scikit-hep/math](https://github.com/scikit-hep/scikit-hep/tree/master/skhep/math), [uproot-methods TLorentzVector](https://github.com/scikit-hep/uproot3-methods/blob/master/uproot3_methods/classes/TLorentzVector.py), [henryiii/hepvector](https://github.com/henryiii/hepvector), and [coffea.nanoevents.methods.vector](https://coffeateam.github.io/coffea/modules/coffea.nanoevents.methods.vector.html).
94
97
  - Implemented on a variety of backends:
95
98
  - pure Python objects
99
+ - [SymPy](https://www.sympy.org/en/index.html) vectors
96
100
  - NumPy arrays of vectors (as a [structured array](https://numpy.org/doc/stable/user/basics.rec.html) subclass)
97
101
  - [Awkward Arrays](https://awkward-array.org/) of vectors
98
102
  - potential for more: CuPy, TensorFlow, Torch, JAX...
99
- - NumPy/Awkward backends also implemented in [Numba](https://numba.pydata.org/) for JIT-compiled calculations on vectors.
103
+ - Awkward backend also implemented in [Numba](https://numba.pydata.org/) for JIT-compiled calculations on vectors.
104
+ - [JAX](https://awkward-array.org/doc/main/user-guide/how-to-specialize-differentiate-jax.html) and [Dask](https://dask-awkward.readthedocs.io/en/stable/) support through Awkward Arrays.
100
105
  - Distinction between geometrical vectors, which have a minimum of attribute and method names, and vectors representing momentum, which have synonyms like `pt` = `rho`, `energy` = `t`, `mass` = `tau`.
101
106
 
102
107
  ## Installation
@@ -125,7 +130,7 @@ The easiest way to create one or many vectors is with a helper function:
125
130
 
126
131
  ### Pure Python vectors
127
132
 
128
- You can directly use the `VectorObject` classes to construct object type vectors:
133
+ You can directly use the `VectorObject` and `MomentumObject` classes to construct object type vectors:
129
134
 
130
135
  ```python
131
136
  vector.VectorObject2D(x=1.1, y=2.2)
@@ -226,6 +231,80 @@ vector.VectorObject4D.from_xyetatau(1.1, 2.2, 3.3, 4.4)
226
231
 
227
232
  and so on, for all combinations of azimuthal, longitudinal, and temporal coordinates, geometric and momentum-flavored.
228
233
 
234
+ ### SymPy vectors
235
+
236
+ > **Note:** Operations on SymPy vectors are only 100% compatible with numeric vectors (Python, NumPy, and Awkward backends) if the vectors are positive time-like, that is, if `t**2 > x**2 + y**2 + z**2`. The space-like and negative time-like cases have different sign conventions.
237
+
238
+ You can directly use the `VectorSympy` and `MomentumSympy` classes to construct object type vectors:
239
+
240
+ ```python
241
+ import sympy
242
+
243
+ x, y, z, t, px, py, pz, eta, tau = sympy.symbols(
244
+ "x y z t px py pz eta tau",
245
+ real=True, # see sympy assumptions to add more restrictions on the symbols
246
+ )
247
+ vector.VectorSympy2D(x=x, y=y)
248
+ vector.MomentumSympy3D(px=px, py=py, pz=pz)
249
+ vector.VectorSympy4D(x=x, y=y, eta=eta, tau=tau)
250
+ ```
251
+
252
+ and so on for every class.
253
+
254
+ ```python
255
+ # Test instance type for any level of granularity.
256
+ (
257
+ # is a vector or array of vectors
258
+ isinstance(vector.VectorSympy2D(x=x, y=y), vector.Vector),
259
+ # is 2D (not 3D or 4D)
260
+ isinstance(vector.VectorSympy2D(x=x, y=y), vector.Vector2D),
261
+ # is a sympy vector (not an array)
262
+ isinstance(vector.VectorSympy2D(x=x, y=y), vector.VectorSympy),
263
+ # has momentum synonyms
264
+ isinstance(vector.MomentumSympy2D(px=px, py=py), vector.Momentum),
265
+ # has transverse plane (2D, 3D, or 4D)
266
+ isinstance(vector.VectorSympy4D(x=x, y=y, z=z, t=t), vector.Planar),
267
+ # has all spatial coordinates (3D or 4D)
268
+ isinstance(vector.VectorSympy4D(x=x, y=y, z=z, t=t), vector.Spatial),
269
+ # has temporal coordinates (4D)
270
+ isinstance(vector.VectorSympy4D(x=x, y=y, z=z, t=t), vector.Lorentz),
271
+ # azimuthal coordinate type
272
+ isinstance(vector.VectorSympy4D(x=x, y=y, z=z, t=t).azimuthal, vector.AzimuthalXY),
273
+ # longitudinal coordinate type
274
+ isinstance(
275
+ vector.VectorSympy4D(x=x, y=y, z=z, t=t).longitudinal, vector.LongitudinalZ
276
+ ),
277
+ # temporal coordinate type
278
+ isinstance(vector.VectorSympy4D(x=x, y=y, z=z, t=t).temporal, vector.TemporalT),
279
+ )
280
+ ```
281
+
282
+ Since `VectorSympy2D`, `VectorSympy3D`, `VectorSympy4D`, and their momentum equivalents operate on SymPy expressions, all of the normal SymPy methods and functions work on the results, coordinates, and the vectors.
283
+
284
+ ```python
285
+ sympy.init_session() # latex printing
286
+
287
+ v1 = vector.VectorSympy2D(x=x, y=y)
288
+ sympy.Eq(v1.rho, sympy.sqrt(x**2 + y**2))
289
+
290
+ v2 = vector.VectorSympy4D(x=x, y=y, z=z, t=t)
291
+ v2.to_rhophithetatau().tau
292
+
293
+ values = {x: 3, y: 2, z: 1, t: 10} # t**2 > x**2 + y**2 + z**2
294
+ v2.is_timelike()
295
+ v2.is_timelike().subs(values)
296
+
297
+ v2.to_rhophithetatau().tau.subs(values).evalf()
298
+
299
+ v2.boost(v2.to_beta3())
300
+ v2.boost(v2.to_beta3()).t
301
+ v2.boost(v2.to_beta3()).t.simplify()
302
+ v2.boost(v2.to_beta3()).t.subs(values)
303
+ v2.boost(v2.to_beta3()).t.subs(values).evalf()
304
+ ```
305
+
306
+ All of the keyword arguments and rules that apply to `vector.obj` construction apply to `vector.VectorSympyND` and `vector.MomentumObjectND` objects.
307
+
229
308
  ### NumPy arrays of vectors
230
309
 
231
310
  You can directly use the `VectorNumpy` classes to construct object type vectors:
@@ -26,10 +26,12 @@ Main features of Vector:
26
26
  - Uses names and conventions set by [ROOT](https://root.cern/)'s [TLorentzVector](https://root.cern.ch/doc/master/classTLorentzVector.html) and [Math::LorentzVector](https://root.cern.ch/doc/master/classROOT_1_1Math_1_1LorentzVector.html), as well as [scikit-hep/math](https://github.com/scikit-hep/scikit-hep/tree/master/skhep/math), [uproot-methods TLorentzVector](https://github.com/scikit-hep/uproot3-methods/blob/master/uproot3_methods/classes/TLorentzVector.py), [henryiii/hepvector](https://github.com/henryiii/hepvector), and [coffea.nanoevents.methods.vector](https://coffeateam.github.io/coffea/modules/coffea.nanoevents.methods.vector.html).
27
27
  - Implemented on a variety of backends:
28
28
  - pure Python objects
29
+ - [SymPy](https://www.sympy.org/en/index.html) vectors
29
30
  - NumPy arrays of vectors (as a [structured array](https://numpy.org/doc/stable/user/basics.rec.html) subclass)
30
31
  - [Awkward Arrays](https://awkward-array.org/) of vectors
31
32
  - potential for more: CuPy, TensorFlow, Torch, JAX...
32
- - NumPy/Awkward backends also implemented in [Numba](https://numba.pydata.org/) for JIT-compiled calculations on vectors.
33
+ - Awkward backend also implemented in [Numba](https://numba.pydata.org/) for JIT-compiled calculations on vectors.
34
+ - [JAX](https://awkward-array.org/doc/main/user-guide/how-to-specialize-differentiate-jax.html) and [Dask](https://dask-awkward.readthedocs.io/en/stable/) support through Awkward Arrays.
33
35
  - Distinction between geometrical vectors, which have a minimum of attribute and method names, and vectors representing momentum, which have synonyms like `pt` = `rho`, `energy` = `t`, `mass` = `tau`.
34
36
 
35
37
  ## Installation
@@ -58,7 +60,7 @@ The easiest way to create one or many vectors is with a helper function:
58
60
 
59
61
  ### Pure Python vectors
60
62
 
61
- You can directly use the `VectorObject` classes to construct object type vectors:
63
+ You can directly use the `VectorObject` and `MomentumObject` classes to construct object type vectors:
62
64
 
63
65
  ```python
64
66
  vector.VectorObject2D(x=1.1, y=2.2)
@@ -159,6 +161,80 @@ vector.VectorObject4D.from_xyetatau(1.1, 2.2, 3.3, 4.4)
159
161
 
160
162
  and so on, for all combinations of azimuthal, longitudinal, and temporal coordinates, geometric and momentum-flavored.
161
163
 
164
+ ### SymPy vectors
165
+
166
+ > **Note:** Operations on SymPy vectors are only 100% compatible with numeric vectors (Python, NumPy, and Awkward backends) if the vectors are positive time-like, that is, if `t**2 > x**2 + y**2 + z**2`. The space-like and negative time-like cases have different sign conventions.
167
+
168
+ You can directly use the `VectorSympy` and `MomentumSympy` classes to construct object type vectors:
169
+
170
+ ```python
171
+ import sympy
172
+
173
+ x, y, z, t, px, py, pz, eta, tau = sympy.symbols(
174
+ "x y z t px py pz eta tau",
175
+ real=True, # see sympy assumptions to add more restrictions on the symbols
176
+ )
177
+ vector.VectorSympy2D(x=x, y=y)
178
+ vector.MomentumSympy3D(px=px, py=py, pz=pz)
179
+ vector.VectorSympy4D(x=x, y=y, eta=eta, tau=tau)
180
+ ```
181
+
182
+ and so on for every class.
183
+
184
+ ```python
185
+ # Test instance type for any level of granularity.
186
+ (
187
+ # is a vector or array of vectors
188
+ isinstance(vector.VectorSympy2D(x=x, y=y), vector.Vector),
189
+ # is 2D (not 3D or 4D)
190
+ isinstance(vector.VectorSympy2D(x=x, y=y), vector.Vector2D),
191
+ # is a sympy vector (not an array)
192
+ isinstance(vector.VectorSympy2D(x=x, y=y), vector.VectorSympy),
193
+ # has momentum synonyms
194
+ isinstance(vector.MomentumSympy2D(px=px, py=py), vector.Momentum),
195
+ # has transverse plane (2D, 3D, or 4D)
196
+ isinstance(vector.VectorSympy4D(x=x, y=y, z=z, t=t), vector.Planar),
197
+ # has all spatial coordinates (3D or 4D)
198
+ isinstance(vector.VectorSympy4D(x=x, y=y, z=z, t=t), vector.Spatial),
199
+ # has temporal coordinates (4D)
200
+ isinstance(vector.VectorSympy4D(x=x, y=y, z=z, t=t), vector.Lorentz),
201
+ # azimuthal coordinate type
202
+ isinstance(vector.VectorSympy4D(x=x, y=y, z=z, t=t).azimuthal, vector.AzimuthalXY),
203
+ # longitudinal coordinate type
204
+ isinstance(
205
+ vector.VectorSympy4D(x=x, y=y, z=z, t=t).longitudinal, vector.LongitudinalZ
206
+ ),
207
+ # temporal coordinate type
208
+ isinstance(vector.VectorSympy4D(x=x, y=y, z=z, t=t).temporal, vector.TemporalT),
209
+ )
210
+ ```
211
+
212
+ Since `VectorSympy2D`, `VectorSympy3D`, `VectorSympy4D`, and their momentum equivalents operate on SymPy expressions, all of the normal SymPy methods and functions work on the results, coordinates, and the vectors.
213
+
214
+ ```python
215
+ sympy.init_session() # latex printing
216
+
217
+ v1 = vector.VectorSympy2D(x=x, y=y)
218
+ sympy.Eq(v1.rho, sympy.sqrt(x**2 + y**2))
219
+
220
+ v2 = vector.VectorSympy4D(x=x, y=y, z=z, t=t)
221
+ v2.to_rhophithetatau().tau
222
+
223
+ values = {x: 3, y: 2, z: 1, t: 10} # t**2 > x**2 + y**2 + z**2
224
+ v2.is_timelike()
225
+ v2.is_timelike().subs(values)
226
+
227
+ v2.to_rhophithetatau().tau.subs(values).evalf()
228
+
229
+ v2.boost(v2.to_beta3())
230
+ v2.boost(v2.to_beta3()).t
231
+ v2.boost(v2.to_beta3()).t.simplify()
232
+ v2.boost(v2.to_beta3()).t.subs(values)
233
+ v2.boost(v2.to_beta3()).t.subs(values).evalf()
234
+ ```
235
+
236
+ All of the keyword arguments and rules that apply to `vector.obj` construction apply to `vector.VectorSympyND` and `vector.MomentumObjectND` objects.
237
+
162
238
  ### NumPy arrays of vectors
163
239
 
164
240
  You can directly use the `VectorNumpy` classes to construct object type vectors:
@@ -1,9 +1,50 @@
1
1
  # Changelog
2
2
 
3
+ ## Version 1.4
4
+
5
+ ### Version 1.4.0
6
+
7
+ #### Features
8
+
9
+ - feat: allow coord values in to\_<coord_names> methods [#446][]
10
+ - feat: a sympy backend [#442][]
11
+
12
+ #### Bug fixes
13
+
14
+ - fix: call the square implementation for power 2 on object vectors [#444][]
15
+ - fix: use negfactor in negfactor scale test [#456][]
16
+
17
+ #### Maintenance
18
+
19
+ - chore: test on numpy 2.0 [#451][]
20
+
21
+ [#446]: https://github.com/scikit-hep/vector/pull/446
22
+ [#442]: https://github.com/scikit-hep/vector/pull/442
23
+ [#444]: https://github.com/scikit-hep/vector/pull/444
24
+ [#456]: https://github.com/scikit-hep/vector/pull/456
25
+ [#451]: https://github.com/scikit-hep/vector/pull/451
26
+
3
27
  ## Version 1.3
4
28
 
29
+ ### Version 1.3.1
30
+
31
+ #### Features
32
+
33
+ - feat: make momentum-ness infectious [#437][]
34
+
35
+ #### Bug fixes
36
+
37
+ - fix: support dask-awkward 2024.3.0 [#436][]
38
+ - fix: momentum coords should not be repeated with generic coords in subclasses [#438][]
39
+
40
+ [#436]: https://github.com/scikit-hep/vector/pull/436
41
+ [#438]: https://github.com/scikit-hep/vector/pull/438
42
+ [#437]: https://github.com/scikit-hep/vector/pull/437
43
+
5
44
  ### Version 1.3.0
6
45
 
46
+ #### Features
47
+
7
48
  - feat: coordinate transformation functions with momentum names [#424][]
8
49
  - feat: allow momentum coords in to_Vector\*D methods + cleanup [#423][]
9
50
  - feat: add a lite nox session + add numba as optional dependency [#431][]