vector 1.4.0__tar.gz → 1.4.2__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 (380) hide show
  1. {vector-1.4.0 → vector-1.4.2}/.github/workflows/cd.yml +25 -3
  2. {vector-1.4.0 → vector-1.4.2}/.github/workflows/ci.yml +5 -14
  3. {vector-1.4.0 → vector-1.4.2}/.pre-commit-config.yaml +5 -10
  4. {vector-1.4.0 → vector-1.4.2}/PKG-INFO +119 -9
  5. {vector-1.4.0 → vector-1.4.2}/README.md +117 -7
  6. {vector-1.4.0 → vector-1.4.2}/docs/changelog.md +42 -0
  7. {vector-1.4.0 → vector-1.4.2}/docs/index.rst +6 -6
  8. {vector-1.4.0 → vector-1.4.2}/docs/usage/intro.ipynb +680 -188
  9. {vector-1.4.0 → vector-1.4.2}/noxfile.py +6 -1
  10. {vector-1.4.0 → vector-1.4.2}/pyproject.toml +80 -60
  11. {vector-1.4.0 → vector-1.4.2}/src/vector/__init__.py +2 -2
  12. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/spatial/deltaangle.py +277 -42
  13. {vector-1.4.0 → vector-1.4.2}/src/vector/_lib.py +8 -8
  14. {vector-1.4.0 → vector-1.4.2}/src/vector/_version.py +2 -2
  15. {vector-1.4.0 → vector-1.4.2}/src/vector/backends/numpy.py +110 -1
  16. {vector-1.4.0 → vector-1.4.2}/src/vector/backends/object.py +3 -3
  17. {vector-1.4.0 → vector-1.4.2}/src/vector/backends/sympy.py +4 -4
  18. vector-1.4.2/tests/compute/lorentz/test_is_lightlike.py +200 -0
  19. vector-1.4.2/tests/compute/lorentz/test_is_spacelike.py +284 -0
  20. vector-1.4.2/tests/compute/lorentz/test_is_timelike.py +284 -0
  21. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/lorentz/test_Et.py +12 -18
  22. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/lorentz/test_Et2.py +2 -2
  23. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/lorentz/test_beta.py +11 -19
  24. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/test_scale.py +0 -14
  25. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/test_unit.py +19 -15
  26. vector-1.4.2/tests/compute/test_is_antiparallel.py +124 -0
  27. vector-1.4.2/tests/compute/test_is_parallel.py +124 -0
  28. vector-1.4.2/tests/compute/test_is_perpendicular.py +124 -0
  29. {vector-1.4.0 → vector-1.4.2}/tests/compute/test_unit.py +24 -24
  30. {vector-1.4.0 → vector-1.4.2}/tests/test_compute_features.py +2 -1
  31. vector-1.4.2/tests/test_issues.py +176 -0
  32. {vector-1.4.0 → vector-1.4.2}/tests/test_notebooks.py +1 -1
  33. vector-1.4.0/tests/test_issues.py +0 -63
  34. {vector-1.4.0 → vector-1.4.2}/.all-contributorsrc +0 -0
  35. {vector-1.4.0 → vector-1.4.2}/.git_archival.txt +0 -0
  36. {vector-1.4.0 → vector-1.4.2}/.gitattributes +0 -0
  37. {vector-1.4.0 → vector-1.4.2}/.github/CONTRIBUTING.md +0 -0
  38. {vector-1.4.0 → vector-1.4.2}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  39. {vector-1.4.0 → vector-1.4.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  40. {vector-1.4.0 → vector-1.4.2}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  41. {vector-1.4.0 → vector-1.4.2}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  42. {vector-1.4.0 → vector-1.4.2}/.github/codecov.yml +0 -0
  43. {vector-1.4.0 → vector-1.4.2}/.github/dependabot.yml +0 -0
  44. {vector-1.4.0 → vector-1.4.2}/.github/matchers/pylint.json +0 -0
  45. {vector-1.4.0 → vector-1.4.2}/.github/workflows/notebooks.yml +0 -0
  46. {vector-1.4.0 → vector-1.4.2}/.gitignore +0 -0
  47. {vector-1.4.0 → vector-1.4.2}/.readthedocs.yml +0 -0
  48. {vector-1.4.0 → vector-1.4.2}/CITATION.cff +0 -0
  49. {vector-1.4.0 → vector-1.4.2}/LICENSE +0 -0
  50. {vector-1.4.0 → vector-1.4.2}/docs/Makefile +0 -0
  51. {vector-1.4.0 → vector-1.4.2}/docs/_images/LogoSrc.svg +0 -0
  52. {vector-1.4.0 → vector-1.4.2}/docs/_images/vector-logo.png +0 -0
  53. {vector-1.4.0 → vector-1.4.2}/docs/api/backends/vector.backends._numba.rst +0 -0
  54. {vector-1.4.0 → vector-1.4.2}/docs/api/backends/vector.backends._numba_object.rst +0 -0
  55. {vector-1.4.0 → vector-1.4.2}/docs/api/backends/vector.backends.awkward.rst +0 -0
  56. {vector-1.4.0 → vector-1.4.2}/docs/api/backends/vector.backends.awkward_constructors.rst +0 -0
  57. {vector-1.4.0 → vector-1.4.2}/docs/api/backends/vector.backends.numba_numpy.rst +0 -0
  58. {vector-1.4.0 → vector-1.4.2}/docs/api/backends/vector.backends.numpy.rst +0 -0
  59. {vector-1.4.0 → vector-1.4.2}/docs/api/backends/vector.backends.object.rst +0 -0
  60. {vector-1.4.0 → vector-1.4.2}/docs/api/backends/vector.backends.rst +0 -0
  61. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/lorentz/vector._compute.lorentz.Et.rst +0 -0
  62. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/lorentz/vector._compute.lorentz.Et2.rst +0 -0
  63. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/lorentz/vector._compute.lorentz.Mt.rst +0 -0
  64. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/lorentz/vector._compute.lorentz.Mt2.rst +0 -0
  65. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/lorentz/vector._compute.lorentz.add.rst +0 -0
  66. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/lorentz/vector._compute.lorentz.beta.rst +0 -0
  67. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/lorentz/vector._compute.lorentz.boostX_beta.rst +0 -0
  68. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/lorentz/vector._compute.lorentz.boostX_gamma.rst +0 -0
  69. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/lorentz/vector._compute.lorentz.boostY_beta.rst +0 -0
  70. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/lorentz/vector._compute.lorentz.boostY_gamma.rst +0 -0
  71. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/lorentz/vector._compute.lorentz.boostZ_beta.rst +0 -0
  72. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/lorentz/vector._compute.lorentz.boostZ_gamma.rst +0 -0
  73. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/lorentz/vector._compute.lorentz.boost_beta3.rst +0 -0
  74. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/lorentz/vector._compute.lorentz.boost_p4.rst +0 -0
  75. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/lorentz/vector._compute.lorentz.deltaRapidityPhi.rst +0 -0
  76. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/lorentz/vector._compute.lorentz.deltaRapidityPhi2.rst +0 -0
  77. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/lorentz/vector._compute.lorentz.dot.rst +0 -0
  78. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/lorentz/vector._compute.lorentz.equal.rst +0 -0
  79. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/lorentz/vector._compute.lorentz.gamma.rst +0 -0
  80. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/lorentz/vector._compute.lorentz.is_lightlike.rst +0 -0
  81. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/lorentz/vector._compute.lorentz.is_spacelike.rst +0 -0
  82. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/lorentz/vector._compute.lorentz.is_timelike.rst +0 -0
  83. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/lorentz/vector._compute.lorentz.isclose.rst +0 -0
  84. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/lorentz/vector._compute.lorentz.not_equal.rst +0 -0
  85. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/lorentz/vector._compute.lorentz.rapidity.rst +0 -0
  86. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/lorentz/vector._compute.lorentz.rst +0 -0
  87. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/lorentz/vector._compute.lorentz.scale.rst +0 -0
  88. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/lorentz/vector._compute.lorentz.subtract.rst +0 -0
  89. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/lorentz/vector._compute.lorentz.t.rst +0 -0
  90. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/lorentz/vector._compute.lorentz.t2.rst +0 -0
  91. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/lorentz/vector._compute.lorentz.tau.rst +0 -0
  92. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/lorentz/vector._compute.lorentz.tau2.rst +0 -0
  93. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/lorentz/vector._compute.lorentz.to_beta3.rst +0 -0
  94. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/lorentz/vector._compute.lorentz.transform4D.rst +0 -0
  95. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/lorentz/vector._compute.lorentz.unit.rst +0 -0
  96. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/planar/vector._compute.planar.add.rst +0 -0
  97. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/planar/vector._compute.planar.deltaphi.rst +0 -0
  98. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/planar/vector._compute.planar.dot.rst +0 -0
  99. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/planar/vector._compute.planar.equal.rst +0 -0
  100. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/planar/vector._compute.planar.is_antiparallel.rst +0 -0
  101. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/planar/vector._compute.planar.is_parallel.rst +0 -0
  102. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/planar/vector._compute.planar.is_perpendicular.rst +0 -0
  103. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/planar/vector._compute.planar.isclose.rst +0 -0
  104. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/planar/vector._compute.planar.not_equal.rst +0 -0
  105. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/planar/vector._compute.planar.phi.rst +0 -0
  106. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/planar/vector._compute.planar.rho.rst +0 -0
  107. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/planar/vector._compute.planar.rho2.rst +0 -0
  108. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/planar/vector._compute.planar.rotateZ.rst +0 -0
  109. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/planar/vector._compute.planar.rst +0 -0
  110. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/planar/vector._compute.planar.scale.rst +0 -0
  111. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/planar/vector._compute.planar.subtract.rst +0 -0
  112. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/planar/vector._compute.planar.transform2D.rst +0 -0
  113. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/planar/vector._compute.planar.unit.rst +0 -0
  114. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/planar/vector._compute.planar.x.rst +0 -0
  115. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/planar/vector._compute.planar.y.rst +0 -0
  116. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/spatial/vector._compute.spatial.add.rst +0 -0
  117. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/spatial/vector._compute.spatial.costheta.rst +0 -0
  118. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/spatial/vector._compute.spatial.cottheta.rst +0 -0
  119. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/spatial/vector._compute.spatial.cross.rst +0 -0
  120. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/spatial/vector._compute.spatial.deltaR.rst +0 -0
  121. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/spatial/vector._compute.spatial.deltaR2.rst +0 -0
  122. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/spatial/vector._compute.spatial.deltaangle.rst +0 -0
  123. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/spatial/vector._compute.spatial.deltaeta.rst +0 -0
  124. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/spatial/vector._compute.spatial.dot.rst +0 -0
  125. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/spatial/vector._compute.spatial.equal.rst +0 -0
  126. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/spatial/vector._compute.spatial.eta.rst +0 -0
  127. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/spatial/vector._compute.spatial.is_antiparallel.rst +0 -0
  128. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/spatial/vector._compute.spatial.is_parallel.rst +0 -0
  129. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/spatial/vector._compute.spatial.is_perpendicular.rst +0 -0
  130. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/spatial/vector._compute.spatial.isclose.rst +0 -0
  131. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/spatial/vector._compute.spatial.mag.rst +0 -0
  132. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/spatial/vector._compute.spatial.mag2.rst +0 -0
  133. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/spatial/vector._compute.spatial.not_equal.rst +0 -0
  134. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/spatial/vector._compute.spatial.rotateX.rst +0 -0
  135. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/spatial/vector._compute.spatial.rotateY.rst +0 -0
  136. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/spatial/vector._compute.spatial.rotate_axis.rst +0 -0
  137. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/spatial/vector._compute.spatial.rotate_euler.rst +0 -0
  138. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/spatial/vector._compute.spatial.rotate_quaternion.rst +0 -0
  139. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/spatial/vector._compute.spatial.rst +0 -0
  140. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/spatial/vector._compute.spatial.scale.rst +0 -0
  141. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/spatial/vector._compute.spatial.subtract.rst +0 -0
  142. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/spatial/vector._compute.spatial.theta.rst +0 -0
  143. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/spatial/vector._compute.spatial.transform3D.rst +0 -0
  144. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/spatial/vector._compute.spatial.unit.rst +0 -0
  145. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/spatial/vector._compute.spatial.z.rst +0 -0
  146. {vector-1.4.0 → vector-1.4.2}/docs/api/compute/vector._compute.rst +0 -0
  147. {vector-1.4.0 → vector-1.4.2}/docs/api/inheritance.svg +0 -0
  148. {vector-1.4.0 → vector-1.4.2}/docs/api/modules.rst +0 -0
  149. {vector-1.4.0 → vector-1.4.2}/docs/api/vector._methods.rst +0 -0
  150. {vector-1.4.0 → vector-1.4.2}/docs/api/vector._typeutils.rst +0 -0
  151. {vector-1.4.0 → vector-1.4.2}/docs/api/vector.rst +0 -0
  152. {vector-1.4.0 → vector-1.4.2}/docs/conf.py +0 -0
  153. {vector-1.4.0 → vector-1.4.2}/docs/make.bat +0 -0
  154. {vector-1.4.0 → vector-1.4.2}/docs/usage/structure.md +0 -0
  155. {vector-1.4.0 → vector-1.4.2}/environment.yml +0 -0
  156. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/__init__.py +0 -0
  157. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/lorentz/Et.py +0 -0
  158. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/lorentz/Et2.py +0 -0
  159. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/lorentz/Mt.py +0 -0
  160. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/lorentz/Mt2.py +0 -0
  161. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/lorentz/__init__.py +0 -0
  162. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/lorentz/add.py +0 -0
  163. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/lorentz/beta.py +0 -0
  164. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/lorentz/boostX_beta.py +0 -0
  165. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/lorentz/boostX_gamma.py +0 -0
  166. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/lorentz/boostY_beta.py +0 -0
  167. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/lorentz/boostY_gamma.py +0 -0
  168. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/lorentz/boostZ_beta.py +0 -0
  169. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/lorentz/boostZ_gamma.py +0 -0
  170. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/lorentz/boost_beta3.py +0 -0
  171. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/lorentz/boost_p4.py +0 -0
  172. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/lorentz/deltaRapidityPhi.py +0 -0
  173. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/lorentz/deltaRapidityPhi2.py +0 -0
  174. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/lorentz/dot.py +0 -0
  175. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/lorentz/equal.py +0 -0
  176. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/lorentz/gamma.py +0 -0
  177. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/lorentz/is_lightlike.py +0 -0
  178. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/lorentz/is_spacelike.py +0 -0
  179. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/lorentz/is_timelike.py +0 -0
  180. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/lorentz/isclose.py +0 -0
  181. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/lorentz/not_equal.py +0 -0
  182. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/lorentz/rapidity.py +0 -0
  183. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/lorentz/scale.py +0 -0
  184. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/lorentz/subtract.py +0 -0
  185. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/lorentz/t.py +0 -0
  186. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/lorentz/t2.py +0 -0
  187. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/lorentz/tau.py +0 -0
  188. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/lorentz/tau2.py +0 -0
  189. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/lorentz/to_beta3.py +0 -0
  190. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/lorentz/transform4D.py +0 -0
  191. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/lorentz/unit.py +0 -0
  192. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/planar/__init__.py +0 -0
  193. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/planar/add.py +0 -0
  194. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/planar/deltaphi.py +0 -0
  195. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/planar/dot.py +0 -0
  196. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/planar/equal.py +0 -0
  197. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/planar/is_antiparallel.py +0 -0
  198. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/planar/is_parallel.py +0 -0
  199. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/planar/is_perpendicular.py +0 -0
  200. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/planar/isclose.py +0 -0
  201. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/planar/not_equal.py +0 -0
  202. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/planar/phi.py +0 -0
  203. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/planar/rho.py +0 -0
  204. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/planar/rho2.py +0 -0
  205. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/planar/rotateZ.py +0 -0
  206. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/planar/scale.py +0 -0
  207. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/planar/subtract.py +0 -0
  208. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/planar/transform2D.py +0 -0
  209. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/planar/unit.py +0 -0
  210. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/planar/x.py +0 -0
  211. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/planar/y.py +0 -0
  212. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/spatial/__init__.py +0 -0
  213. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/spatial/add.py +0 -0
  214. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/spatial/costheta.py +0 -0
  215. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/spatial/cottheta.py +0 -0
  216. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/spatial/cross.py +0 -0
  217. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/spatial/deltaR.py +0 -0
  218. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/spatial/deltaR2.py +0 -0
  219. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/spatial/deltaeta.py +0 -0
  220. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/spatial/dot.py +0 -0
  221. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/spatial/equal.py +0 -0
  222. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/spatial/eta.py +0 -0
  223. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/spatial/is_antiparallel.py +0 -0
  224. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/spatial/is_parallel.py +0 -0
  225. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/spatial/is_perpendicular.py +0 -0
  226. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/spatial/isclose.py +0 -0
  227. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/spatial/mag.py +0 -0
  228. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/spatial/mag2.py +0 -0
  229. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/spatial/not_equal.py +0 -0
  230. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/spatial/rotateX.py +0 -0
  231. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/spatial/rotateY.py +0 -0
  232. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/spatial/rotate_axis.py +0 -0
  233. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/spatial/rotate_euler.py +0 -0
  234. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/spatial/rotate_quaternion.py +0 -0
  235. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/spatial/scale.py +0 -0
  236. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/spatial/subtract.py +0 -0
  237. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/spatial/theta.py +0 -0
  238. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/spatial/transform3D.py +0 -0
  239. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/spatial/unit.py +0 -0
  240. {vector-1.4.0 → vector-1.4.2}/src/vector/_compute/spatial/z.py +0 -0
  241. {vector-1.4.0 → vector-1.4.2}/src/vector/_methods.py +0 -0
  242. {vector-1.4.0 → vector-1.4.2}/src/vector/_typeutils.py +0 -0
  243. {vector-1.4.0 → vector-1.4.2}/src/vector/backends/__init__.py +0 -0
  244. {vector-1.4.0 → vector-1.4.2}/src/vector/backends/_numba.py +0 -0
  245. {vector-1.4.0 → vector-1.4.2}/src/vector/backends/_numba_object.py +0 -0
  246. {vector-1.4.0 → vector-1.4.2}/src/vector/backends/awkward.py +0 -0
  247. {vector-1.4.0 → vector-1.4.2}/src/vector/backends/awkward_constructors.py +0 -0
  248. {vector-1.4.0 → vector-1.4.2}/src/vector/backends/numba_numpy.py +0 -0
  249. {vector-1.4.0 → vector-1.4.2}/src/vector/py.typed +0 -0
  250. {vector-1.4.0 → vector-1.4.2}/src/vector/version.pyi +0 -0
  251. {vector-1.4.0 → vector-1.4.2}/tests/__init__.py +0 -0
  252. {vector-1.4.0 → vector-1.4.2}/tests/backends/__init__.py +0 -0
  253. {vector-1.4.0 → vector-1.4.2}/tests/backends/test_awkward.py +0 -0
  254. {vector-1.4.0 → vector-1.4.2}/tests/backends/test_awkward_numba.py +0 -0
  255. {vector-1.4.0 → vector-1.4.2}/tests/backends/test_dask_awkward.py +0 -0
  256. {vector-1.4.0 → vector-1.4.2}/tests/backends/test_numba_numpy.py +0 -0
  257. {vector-1.4.0 → vector-1.4.2}/tests/backends/test_numba_object.py +0 -0
  258. {vector-1.4.0 → vector-1.4.2}/tests/backends/test_numpy.py +0 -0
  259. {vector-1.4.0 → vector-1.4.2}/tests/backends/test_object.py +0 -0
  260. {vector-1.4.0 → vector-1.4.2}/tests/backends/test_operators.py +0 -0
  261. {vector-1.4.0 → vector-1.4.2}/tests/backends/test_sympy.py +0 -0
  262. {vector-1.4.0 → vector-1.4.2}/tests/compute/__init__.py +0 -0
  263. {vector-1.4.0 → vector-1.4.2}/tests/compute/lorentz/__init__.py +0 -0
  264. {vector-1.4.0 → vector-1.4.2}/tests/compute/lorentz/test_Et.py +0 -0
  265. {vector-1.4.0 → vector-1.4.2}/tests/compute/lorentz/test_Et2.py +0 -0
  266. {vector-1.4.0 → vector-1.4.2}/tests/compute/lorentz/test_Mt.py +0 -0
  267. {vector-1.4.0 → vector-1.4.2}/tests/compute/lorentz/test_Mt2.py +0 -0
  268. {vector-1.4.0 → vector-1.4.2}/tests/compute/lorentz/test_beta.py +0 -0
  269. {vector-1.4.0 → vector-1.4.2}/tests/compute/lorentz/test_boostX_beta.py +0 -0
  270. {vector-1.4.0 → vector-1.4.2}/tests/compute/lorentz/test_boostX_gamma.py +0 -0
  271. {vector-1.4.0 → vector-1.4.2}/tests/compute/lorentz/test_boostY_beta.py +0 -0
  272. {vector-1.4.0 → vector-1.4.2}/tests/compute/lorentz/test_boostY_gamma.py +0 -0
  273. {vector-1.4.0 → vector-1.4.2}/tests/compute/lorentz/test_boostZ_beta.py +0 -0
  274. {vector-1.4.0 → vector-1.4.2}/tests/compute/lorentz/test_boostZ_gamma.py +0 -0
  275. {vector-1.4.0 → vector-1.4.2}/tests/compute/lorentz/test_boost_beta3.py +0 -0
  276. {vector-1.4.0 → vector-1.4.2}/tests/compute/lorentz/test_boost_p4.py +0 -0
  277. {vector-1.4.0 → vector-1.4.2}/tests/compute/lorentz/test_deltaRapidityPhi.py +0 -0
  278. {vector-1.4.0 → vector-1.4.2}/tests/compute/lorentz/test_deltaRapidityPhi2.py +0 -0
  279. {vector-1.4.0 → vector-1.4.2}/tests/compute/lorentz/test_gamma.py +0 -0
  280. {vector-1.4.0 → vector-1.4.2}/tests/compute/lorentz/test_rapidity.py +0 -0
  281. {vector-1.4.0 → vector-1.4.2}/tests/compute/lorentz/test_t.py +0 -0
  282. {vector-1.4.0 → vector-1.4.2}/tests/compute/lorentz/test_t2.py +0 -0
  283. {vector-1.4.0 → vector-1.4.2}/tests/compute/lorentz/test_tau.py +0 -0
  284. {vector-1.4.0 → vector-1.4.2}/tests/compute/lorentz/test_tau2.py +0 -0
  285. {vector-1.4.0 → vector-1.4.2}/tests/compute/lorentz/test_to_beta3.py +0 -0
  286. {vector-1.4.0 → vector-1.4.2}/tests/compute/planar/__init__.py +0 -0
  287. {vector-1.4.0 → vector-1.4.2}/tests/compute/planar/test_deltaphi.py +0 -0
  288. {vector-1.4.0 → vector-1.4.2}/tests/compute/planar/test_phi.py +0 -0
  289. {vector-1.4.0 → vector-1.4.2}/tests/compute/planar/test_rho.py +0 -0
  290. {vector-1.4.0 → vector-1.4.2}/tests/compute/planar/test_rho2.py +0 -0
  291. {vector-1.4.0 → vector-1.4.2}/tests/compute/planar/test_rotateZ.py +0 -0
  292. {vector-1.4.0 → vector-1.4.2}/tests/compute/planar/test_x.py +0 -0
  293. {vector-1.4.0 → vector-1.4.2}/tests/compute/planar/test_y.py +0 -0
  294. {vector-1.4.0 → vector-1.4.2}/tests/compute/spatial/__init__.py +0 -0
  295. {vector-1.4.0 → vector-1.4.2}/tests/compute/spatial/test_costheta.py +0 -0
  296. {vector-1.4.0 → vector-1.4.2}/tests/compute/spatial/test_cottheta.py +0 -0
  297. {vector-1.4.0 → vector-1.4.2}/tests/compute/spatial/test_cross.py +0 -0
  298. {vector-1.4.0 → vector-1.4.2}/tests/compute/spatial/test_deltaR.py +0 -0
  299. {vector-1.4.0 → vector-1.4.2}/tests/compute/spatial/test_deltaR2.py +0 -0
  300. {vector-1.4.0 → vector-1.4.2}/tests/compute/spatial/test_deltaangle.py +0 -0
  301. {vector-1.4.0 → vector-1.4.2}/tests/compute/spatial/test_deltaeta.py +0 -0
  302. {vector-1.4.0 → vector-1.4.2}/tests/compute/spatial/test_eta.py +0 -0
  303. {vector-1.4.0 → vector-1.4.2}/tests/compute/spatial/test_mag.py +0 -0
  304. {vector-1.4.0 → vector-1.4.2}/tests/compute/spatial/test_mag2.py +0 -0
  305. {vector-1.4.0 → vector-1.4.2}/tests/compute/spatial/test_rotateX.py +0 -0
  306. {vector-1.4.0 → vector-1.4.2}/tests/compute/spatial/test_rotateY.py +0 -0
  307. {vector-1.4.0 → vector-1.4.2}/tests/compute/spatial/test_rotate_axis.py +0 -0
  308. {vector-1.4.0 → vector-1.4.2}/tests/compute/spatial/test_rotate_euler.py +0 -0
  309. {vector-1.4.0 → vector-1.4.2}/tests/compute/spatial/test_rotate_quaternion.py +0 -0
  310. {vector-1.4.0 → vector-1.4.2}/tests/compute/spatial/test_theta.py +0 -0
  311. {vector-1.4.0 → vector-1.4.2}/tests/compute/spatial/test_z.py +0 -0
  312. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/lorentz/__init__.py +0 -0
  313. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/lorentz/test_Mt.py +0 -0
  314. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/lorentz/test_Mt2.py +0 -0
  315. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/lorentz/test_boostX_beta.py +0 -0
  316. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/lorentz/test_boostX_gamma.py +0 -0
  317. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/lorentz/test_boostY_beta.py +0 -0
  318. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/lorentz/test_boostY_gamma.py +0 -0
  319. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/lorentz/test_boostZ_beta.py +0 -0
  320. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/lorentz/test_boostZ_gamma.py +0 -0
  321. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/lorentz/test_boost_beta3.py +0 -0
  322. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/lorentz/test_boost_p4.py +0 -0
  323. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/lorentz/test_deltaRapidityPhi.py +0 -0
  324. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/lorentz/test_deltaRapidityPhi2.py +0 -0
  325. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/lorentz/test_gamma.py +0 -0
  326. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/lorentz/test_is_lightlike.py +0 -0
  327. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/lorentz/test_is_spacelike.py +0 -0
  328. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/lorentz/test_is_timelike.py +0 -0
  329. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/lorentz/test_rapidity.py +0 -0
  330. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/lorentz/test_t.py +0 -0
  331. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/lorentz/test_t2.py +0 -0
  332. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/lorentz/test_tau.py +0 -0
  333. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/lorentz/test_tau2.py +0 -0
  334. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/lorentz/test_to_beta3.py +0 -0
  335. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/planar/__init__.py +0 -0
  336. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/planar/test_deltaphi.py +0 -0
  337. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/planar/test_phi.py +0 -0
  338. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/planar/test_rho.py +0 -0
  339. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/planar/test_rho2.py +0 -0
  340. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/planar/test_rotateZ.py +0 -0
  341. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/planar/test_x.py +0 -0
  342. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/planar/test_y.py +0 -0
  343. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/spatial/__init__.py +0 -0
  344. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/spatial/test_costheta.py +0 -0
  345. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/spatial/test_cottheta.py +0 -0
  346. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/spatial/test_cross.py +0 -0
  347. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/spatial/test_deltaR.py +0 -0
  348. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/spatial/test_deltaR2.py +0 -0
  349. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/spatial/test_deltaangle.py +0 -0
  350. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/spatial/test_deltaeta.py +0 -0
  351. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/spatial/test_eta.py +0 -0
  352. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/spatial/test_mag.py +0 -0
  353. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/spatial/test_mag2.py +0 -0
  354. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/spatial/test_rotateX.py +0 -0
  355. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/spatial/test_rotateY.py +0 -0
  356. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/spatial/test_rotate_axis.py +0 -0
  357. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/spatial/test_rotate_euler.py +0 -0
  358. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/spatial/test_rotate_quaternion.py +0 -0
  359. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/spatial/test_theta.py +0 -0
  360. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/spatial/test_z.py +0 -0
  361. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/test_add.py +0 -0
  362. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/test_conversions.py +0 -0
  363. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/test_dot.py +0 -0
  364. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/test_equal.py +0 -0
  365. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/test_is_antiparallel.py +0 -0
  366. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/test_is_parallel.py +0 -0
  367. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/test_is_perpendicular.py +0 -0
  368. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/test_not_equal.py +0 -0
  369. {vector-1.4.0 → vector-1.4.2}/tests/compute/sympy/test_subtract.py +0 -0
  370. {vector-1.4.0 → vector-1.4.2}/tests/compute/test_add.py +0 -0
  371. {vector-1.4.0 → vector-1.4.2}/tests/compute/test_conversions.py +0 -0
  372. {vector-1.4.0 → vector-1.4.2}/tests/compute/test_dot.py +0 -0
  373. {vector-1.4.0 → vector-1.4.2}/tests/compute/test_equal.py +0 -0
  374. {vector-1.4.0 → vector-1.4.2}/tests/compute/test_isclose.py +0 -0
  375. {vector-1.4.0 → vector-1.4.2}/tests/compute/test_not_equal.py +0 -0
  376. {vector-1.4.0 → vector-1.4.2}/tests/compute/test_scale.py +0 -0
  377. {vector-1.4.0 → vector-1.4.2}/tests/compute/test_subtract.py +0 -0
  378. {vector-1.4.0 → vector-1.4.2}/tests/samples/issue-161-v2.pkl +0 -0
  379. {vector-1.4.0 → vector-1.4.2}/tests/samples/issue-161.pkl +0 -0
  380. {vector-1.4.0 → vector-1.4.2}/tests/test_methods.py +0 -0
@@ -9,6 +9,10 @@ on:
9
9
  jobs:
10
10
  dist:
11
11
  runs-on: ubuntu-latest
12
+ permissions:
13
+ id-token: write
14
+ attestations: write
15
+ contents: read
12
16
  steps:
13
17
  - uses: actions/checkout@v4
14
18
  with:
@@ -17,13 +21,18 @@ jobs:
17
21
  - name: Build SDist and wheel
18
22
  run: pipx run build
19
23
 
24
+ - name: Check metadata
25
+ run: pipx run twine check dist/*
26
+
27
+ - name: Generate artifact attestation for sdist and wheel
28
+ uses: actions/attest-build-provenance@6149ea5740be74af77f260b9db67e633f6b0a9a1 # v1.4.2
29
+ with:
30
+ subject-path: "dist/vector-*"
31
+
20
32
  - uses: actions/upload-artifact@v4
21
33
  with:
22
34
  path: dist/*
23
35
 
24
- - name: Check metadata
25
- run: pipx run twine check dist/*
26
-
27
36
  publish:
28
37
  needs: [dist]
29
38
  runs-on: ubuntu-latest
@@ -40,4 +49,17 @@ jobs:
40
49
  name: artifact
41
50
  path: dist
42
51
 
52
+ - name: List distributions to be deployed
53
+ run: ls -l dist/
54
+
55
+ - name: Verify sdist artifact attestation
56
+ env:
57
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
58
+ run: gh attestation verify dist/vector-*.tar.gz --repo ${{ github.repository }}
59
+
60
+ - name: Verify wheel artifact attestation
61
+ env:
62
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
63
+ run: gh attestation verify dist/vector-*.whl --repo ${{ github.repository }}
64
+
43
65
  - uses: pypa/gh-action-pypi-publish@release/v1
@@ -23,7 +23,6 @@ jobs:
23
23
  - uses: actions/setup-python@v5
24
24
  with:
25
25
  python-version: 3.x
26
- - uses: pre-commit/action@v3.0.1
27
26
  - name: PyLint
28
27
  run: |
29
28
  echo "::add-matcher::$GITHUB_WORKSPACE/.github/matchers/pylint.json"
@@ -91,10 +90,10 @@ jobs:
91
90
  - name: Install package
92
91
  run: python -m pip install -e .[dev]
93
92
 
94
- - name: Install awkward v1
95
- run: python -m pip install -U "awkward<2"
93
+ - name: Install awkward v1 and numpy v1
94
+ run: python -m pip install -U "awkward<2" "numpy<2"
96
95
 
97
- - name: Run doctests on Python 3.11 with awkward v1.x
96
+ - name: Run doctests on Python 3.11 with awkward v1.x and numpy v1.x
98
97
  if: matrix.python-version == '3.11'
99
98
  run: python -m pytest -ra --doctest-plus src/vector/
100
99
 
@@ -128,7 +127,7 @@ jobs:
128
127
  run: python -m pip install -e .[dev]
129
128
 
130
129
  - name: Install awkward v2
131
- run: python -m pip install -U --pre "awkward>=2.0.0rc1"
130
+ run: python -m pip install -U awkward "numpy<2.1"
132
131
 
133
132
  - name: Run doctests on Python 3.11 with awkward v2.x
134
133
  if: matrix.python-version == 3.11
@@ -137,16 +136,8 @@ jobs:
137
136
  - name: Test package with awkward v2.x
138
137
  run: python -m pytest -ra --cov=vector --ignore tests/test_notebooks.py .
139
138
 
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
-
148
139
  - name: Upload coverage report
149
- uses: codecov/codecov-action@v4.3.0
140
+ uses: codecov/codecov-action@v4.5.0
150
141
  with:
151
142
  token: ${{ secrets.CODECOV_TOKEN }}
152
143
 
@@ -19,19 +19,14 @@ repos:
19
19
  - id: trailing-whitespace
20
20
 
21
21
  - repo: https://github.com/astral-sh/ruff-pre-commit
22
- rev: "v0.4.1"
22
+ rev: "v0.6.1"
23
23
  hooks:
24
24
  - id: ruff
25
25
  args: ["--fix", "--show-fixes"]
26
26
  - id: ruff-format
27
27
 
28
- - repo: https://github.com/tox-dev/pyproject-fmt
29
- rev: "1.8.0"
30
- hooks:
31
- - id: pyproject-fmt
32
-
33
28
  - repo: https://github.com/pre-commit/mirrors-mypy
34
- rev: v1.9.0
29
+ rev: v1.11.1
35
30
  hooks:
36
31
  - id: mypy
37
32
  files: src
@@ -42,7 +37,7 @@ repos:
42
37
  - sympy
43
38
 
44
39
  - repo: https://github.com/codespell-project/codespell
45
- rev: v2.2.6
40
+ rev: v2.3.0
46
41
  hooks:
47
42
  - id: codespell
48
43
  exclude: ^docs/usage/intro.ipynb$
@@ -55,7 +50,7 @@ repos:
55
50
  exclude: assets/js/webapp\.js
56
51
 
57
52
  - repo: https://github.com/adamchainz/blacken-docs
58
- rev: 1.16.0
53
+ rev: 1.18.0
59
54
  hooks:
60
55
  - id: blacken-docs
61
56
  args: ["-E"]
@@ -71,7 +66,7 @@ repos:
71
66
  - id: rst-inline-touching-normal
72
67
 
73
68
  - repo: https://github.com/nbQA-dev/nbQA
74
- rev: 1.8.5
69
+ rev: 1.8.7
75
70
  hooks:
76
71
  - id: nbqa-pyupgrade
77
72
  args: ["--py37-plus"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: vector
3
- Version: 1.4.0
3
+ Version: 1.4.2
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
@@ -29,7 +29,7 @@ Classifier: Topic :: Scientific/Engineering :: Mathematics
29
29
  Classifier: Topic :: Scientific/Engineering :: Physics
30
30
  Classifier: Typing :: Typed
31
31
  Requires-Python: >=3.8
32
- Requires-Dist: numpy>=1.13.3
32
+ Requires-Dist: numpy<2.1,>=1.13.3
33
33
  Requires-Dist: packaging>=19
34
34
  Provides-Extra: awkward
35
35
  Requires-Dist: awkward>=1.2; extra == 'awkward'
@@ -78,7 +78,6 @@ Description-Content-Type: text/markdown
78
78
  [![codecov percentage][codecov-badge]][codecov-link]
79
79
  [![GitHub Discussion][github-discussions-badge]][github-discussions-link]
80
80
  [![Gitter][gitter-badge]][gitter-link]
81
- [![Code style: black][black-badge]][black-link]
82
81
 
83
82
  [![PyPI platforms][pypi-platforms]][pypi-link]
84
83
  [![PyPI version][pypi-version]][pypi-link]
@@ -99,7 +98,7 @@ Main features of Vector:
99
98
  - [SymPy](https://www.sympy.org/en/index.html) vectors
100
99
  - NumPy arrays of vectors (as a [structured array](https://numpy.org/doc/stable/user/basics.rec.html) subclass)
101
100
  - [Awkward Arrays](https://awkward-array.org/) of vectors
102
- - potential for more: CuPy, TensorFlow, Torch, JAX...
101
+ - potential for more: CuPy, TensorFlow, Torch...
103
102
  - Awkward backend also implemented in [Numba](https://numba.pydata.org/) for JIT-compiled calculations on vectors.
104
103
  - [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.
105
104
  - 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`.
@@ -831,8 +830,121 @@ def compute_masses(array):
831
830
  compute_masses(array)
832
831
  ```
833
832
 
833
+ ## Sub-classing Awkward mixins
834
+
835
+ At the moment, it is possible to sub-class vector awkward mixins to extend the vector functionalities. Although the mechanism in place works well, it is still being improved.
836
+
837
+ For instance, the `MomentumAwkward` classes can be extended in the following way:
838
+
839
+ ```py
840
+ behavior = vector.backends.awkward.behavior
841
+
842
+
843
+ @ak.mixin_class(behavior)
844
+ class TwoVector(vector.backends.awkward.MomentumAwkward2D):
845
+ pass
846
+
847
+
848
+ @ak.mixin_class(behavior)
849
+ class ThreeVector(vector.backends.awkward.MomentumAwkward3D):
850
+ pass
851
+
852
+
853
+ # required for transforming vectors
854
+ # the class names must always end with "Array"
855
+ TwoVectorArray.ProjectionClass2D = TwoVectorArray # noqa: F821
856
+ TwoVectorArray.ProjectionClass3D = ThreeVectorArray # noqa: F821
857
+ TwoVectorArray.MomentumClass = TwoVectorArray # noqa: F821
858
+
859
+ ThreeVectorArray.ProjectionClass2D = TwoVectorArray # noqa: F821
860
+ ThreeVectorArray.ProjectionClass3D = ThreeVectorArray # noqa: F821
861
+ ThreeVectorArray.MomentumClass = ThreeVectorArray # noqa: F821
862
+
863
+ vec = ak.zip(
864
+ {
865
+ "pt": [[1, 2], [], [3], [4]],
866
+ "phi": [[1.2, 1.4], [], [1.6], [3.4]],
867
+ },
868
+ with_name="TwoVector",
869
+ behavior=behavior,
870
+ )
871
+
872
+ vec
873
+ ```
874
+
875
+ The binary operators are not automatically registered by awkward, but vector methods can be used to perform operations on sub-classed vectors.
876
+
877
+ ```py
878
+ vec.add(vec)
879
+ ```
880
+
881
+ Similarly, other vector methods can be used by the new methods internally.
882
+
883
+ ```py
884
+ @ak.mixin_class(behavior)
885
+ class LorentzVector(vector.backends.awkward.MomentumAwkward4D):
886
+ @ak.mixin_class_method(np.divide, {numbers.Number})
887
+ def divide(self, factor):
888
+ return self.scale(1 / factor)
889
+
890
+
891
+ # required for transforming vectors
892
+ # the class names must always end with "Array"
893
+ LorentzVectorArray.ProjectionClass2D = TwoVectorArray # noqa: F821
894
+ LorentzVectorArray.ProjectionClass3D = ThreeVectorArray # noqa: F821
895
+ LorentzVectorArray.ProjectionClass4D = LorentzVectorArray # noqa: F821
896
+ LorentzVectorArray.MomentumClass = LorentzVectorArray # noqa: F821
897
+
898
+ vec = ak.zip(
899
+ {
900
+ "pt": [[1, 2], [], [3], [4]],
901
+ "eta": [[1.2, 1.4], [], [1.6], [3.4]],
902
+ "phi": [[0.3, 0.4], [], [0.5], [0.6]],
903
+ "energy": [[50, 51], [], [52], [60]],
904
+ },
905
+ with_name="LorentzVector",
906
+ behavior=behavior,
907
+ )
908
+
909
+ vec / 2
910
+ vec.like(vector.obj(x=1, y=2))
911
+ vec.like(vector.obj(x=1, y=2, z=3))
912
+ ```
913
+
914
+ It is also possible to manually add binary operations in vector's behavior dict to enable binary operations.
915
+
916
+ ```py
917
+ _binary_dispatch_cls = {
918
+ "TwoVector": TwoVector,
919
+ "ThreeVector": ThreeVector,
920
+ "LorentzVector": LorentzVector,
921
+ }
922
+ _rank = [TwoVector, ThreeVector, LorentzVector]
923
+
924
+ for lhs, lhs_to in _binary_dispatch_cls.items():
925
+ for rhs, rhs_to in _binary_dispatch_cls.items():
926
+ out_to = min(lhs_to, rhs_to, key=_rank.index)
927
+ behavior[(np.add, lhs, rhs)] = out_to.add
928
+ behavior[(np.subtract, lhs, rhs)] = out_to.subtract
929
+
930
+ vec + vec
931
+ vec.to_2D() + vec.to_2D()
932
+ ```
933
+
934
+ Finally, instead of manually registering the superclass ufuncs, one can use the utility `copy_behaviors` function to copy behavior items for a new subclass -
935
+
936
+ ```py
937
+ behavior.update(ak._util.copy_behaviors("Vector2D", "TwoVector", behavior))
938
+ behavior.update(ak._util.copy_behaviors("Vector3D", "ThreeVector", behavior))
939
+ behavior.update(ak._util.copy_behaviors("Momentum4D", "LorentzVector", behavior))
940
+
941
+ vec + vec
942
+ vec.to_2D() + vec.to_2D()
943
+ ```
944
+
834
945
  ## Talks about vector
835
946
 
947
+ - 3rd July 2024 - [A new SymPy backend for vector: uniting experimental and theoretical physicists](https://indi.to/pfTC6) - [PyHEP 2024 (virtual)](https://indico.cern.ch/event/1384010/)
836
948
  - 9th October 2023 - [What’s new with Vector? First major release is out!](https://indi.to/35ym5) - [PyHEP 2023 (virtual)](https://indico.cern.ch/event/1252095/) [🎥](https://www.youtube.com/watch?v=JHEAb2R3xzE&list=PLKZ9c4ONm-VlAorAG8kR09ZqhMfHiH2LJ&index=10)
837
949
  - 13th September 2022 - [Constructing HEP vectors and analyzing HEP data using Vector](https://indi.to/bPmMc) - [PyHEP 2022 (virtual)](https://indico.cern.ch/event/1150631/) [🎥](https://www.youtube.com/watch?v=4iveMzrbe7s&list=PLKZ9c4ONm-VkohKG-skzEG_gklMaSgaO7&index=15)
838
950
  - 20th July 2022 - [Analysis Grand Challenge / HEP Scientific Python Ecosystem](https://indico.cern.ch/event/1151329/timetable/#3-analysis-grand-challenge-hep) - [DANCE/CoDaS@Snowmass 2022 computational and data science software training](https://indico.cern.ch/event/1151329/)
@@ -878,14 +990,12 @@ development environment.
878
990
 
879
991
  ## Acknowledgements
880
992
 
881
- This library was primarily developed by Jim Pivarski, Henry Schreiner, and Eduardo Rodrigues.
993
+ This library was primarily developed by Jim Pivarski, Henry Schreiner, Saransh Chopra, and Eduardo Rodrigues.
882
994
 
883
- Support for this work was provided by the National Science Foundation cooperative agreement OAC-1836650 (IRIS-HEP) and OAC-1450377 (DIANA/HEP). Any opinions, findings, conclusions or recommendations expressed in this material are those of the authors and do not necessarily reflect the views of the National Science Foundation.
995
+ Support for this work was provided by the National Science Foundation cooperative agreement OAC-1836650 and PHY-2323298 (IRIS-HEP) and OAC-1450377 (DIANA/HEP). Any opinions, findings, conclusions or recommendations expressed in this material are those of the authors and do not necessarily reflect the views of the National Science Foundation.
884
996
 
885
997
  [actions-badge]: https://github.com/scikit-hep/vector/actions/workflows/ci.yml/badge.svg
886
998
  [actions-link]: https://github.com/scikit-hep/vector/actions
887
- [black-badge]: https://img.shields.io/badge/code%20style-black-000000.svg
888
- [black-link]: https://github.com/psf/black
889
999
  [codecov-badge]: https://codecov.io/gh/scikit-hep/vector/branch/main/graph/badge.svg?token=YBv60ueORQ
890
1000
  [codecov-link]: https://codecov.io/gh/scikit-hep/vector
891
1001
  [conda-version]: https://img.shields.io/conda/vn/conda-forge/vector.svg
@@ -896,7 +1006,7 @@ Support for this work was provided by the National Science Foundation cooperativ
896
1006
  [gitter-link]: https://gitter.im/Scikit-HEP/vector?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge
897
1007
  [license-badge]: https://img.shields.io/badge/License-BSD_3--Clause-blue.svg
898
1008
  [license-link]: https://opensource.org/licenses/BSD-3-Clause
899
- [pre-commit-badge]: https://results.pre-commit.ci/badge/github/scikit-hep/vector/develop.svg
1009
+ [pre-commit-badge]: https://results.pre-commit.ci/badge/github/scikit-hep/vector/main.svg
900
1010
  [pre-commit-link]: https://results.pre-commit.ci/repo/github/scikit-hep/vector
901
1011
  [pypi-link]: https://pypi.org/project/vector/
902
1012
  [pypi-platforms]: https://img.shields.io/pypi/pyversions/vector
@@ -8,7 +8,6 @@
8
8
  [![codecov percentage][codecov-badge]][codecov-link]
9
9
  [![GitHub Discussion][github-discussions-badge]][github-discussions-link]
10
10
  [![Gitter][gitter-badge]][gitter-link]
11
- [![Code style: black][black-badge]][black-link]
12
11
 
13
12
  [![PyPI platforms][pypi-platforms]][pypi-link]
14
13
  [![PyPI version][pypi-version]][pypi-link]
@@ -29,7 +28,7 @@ Main features of Vector:
29
28
  - [SymPy](https://www.sympy.org/en/index.html) vectors
30
29
  - NumPy arrays of vectors (as a [structured array](https://numpy.org/doc/stable/user/basics.rec.html) subclass)
31
30
  - [Awkward Arrays](https://awkward-array.org/) of vectors
32
- - potential for more: CuPy, TensorFlow, Torch, JAX...
31
+ - potential for more: CuPy, TensorFlow, Torch...
33
32
  - Awkward backend also implemented in [Numba](https://numba.pydata.org/) for JIT-compiled calculations on vectors.
34
33
  - [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.
35
34
  - 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`.
@@ -761,8 +760,121 @@ def compute_masses(array):
761
760
  compute_masses(array)
762
761
  ```
763
762
 
763
+ ## Sub-classing Awkward mixins
764
+
765
+ At the moment, it is possible to sub-class vector awkward mixins to extend the vector functionalities. Although the mechanism in place works well, it is still being improved.
766
+
767
+ For instance, the `MomentumAwkward` classes can be extended in the following way:
768
+
769
+ ```py
770
+ behavior = vector.backends.awkward.behavior
771
+
772
+
773
+ @ak.mixin_class(behavior)
774
+ class TwoVector(vector.backends.awkward.MomentumAwkward2D):
775
+ pass
776
+
777
+
778
+ @ak.mixin_class(behavior)
779
+ class ThreeVector(vector.backends.awkward.MomentumAwkward3D):
780
+ pass
781
+
782
+
783
+ # required for transforming vectors
784
+ # the class names must always end with "Array"
785
+ TwoVectorArray.ProjectionClass2D = TwoVectorArray # noqa: F821
786
+ TwoVectorArray.ProjectionClass3D = ThreeVectorArray # noqa: F821
787
+ TwoVectorArray.MomentumClass = TwoVectorArray # noqa: F821
788
+
789
+ ThreeVectorArray.ProjectionClass2D = TwoVectorArray # noqa: F821
790
+ ThreeVectorArray.ProjectionClass3D = ThreeVectorArray # noqa: F821
791
+ ThreeVectorArray.MomentumClass = ThreeVectorArray # noqa: F821
792
+
793
+ vec = ak.zip(
794
+ {
795
+ "pt": [[1, 2], [], [3], [4]],
796
+ "phi": [[1.2, 1.4], [], [1.6], [3.4]],
797
+ },
798
+ with_name="TwoVector",
799
+ behavior=behavior,
800
+ )
801
+
802
+ vec
803
+ ```
804
+
805
+ The binary operators are not automatically registered by awkward, but vector methods can be used to perform operations on sub-classed vectors.
806
+
807
+ ```py
808
+ vec.add(vec)
809
+ ```
810
+
811
+ Similarly, other vector methods can be used by the new methods internally.
812
+
813
+ ```py
814
+ @ak.mixin_class(behavior)
815
+ class LorentzVector(vector.backends.awkward.MomentumAwkward4D):
816
+ @ak.mixin_class_method(np.divide, {numbers.Number})
817
+ def divide(self, factor):
818
+ return self.scale(1 / factor)
819
+
820
+
821
+ # required for transforming vectors
822
+ # the class names must always end with "Array"
823
+ LorentzVectorArray.ProjectionClass2D = TwoVectorArray # noqa: F821
824
+ LorentzVectorArray.ProjectionClass3D = ThreeVectorArray # noqa: F821
825
+ LorentzVectorArray.ProjectionClass4D = LorentzVectorArray # noqa: F821
826
+ LorentzVectorArray.MomentumClass = LorentzVectorArray # noqa: F821
827
+
828
+ vec = ak.zip(
829
+ {
830
+ "pt": [[1, 2], [], [3], [4]],
831
+ "eta": [[1.2, 1.4], [], [1.6], [3.4]],
832
+ "phi": [[0.3, 0.4], [], [0.5], [0.6]],
833
+ "energy": [[50, 51], [], [52], [60]],
834
+ },
835
+ with_name="LorentzVector",
836
+ behavior=behavior,
837
+ )
838
+
839
+ vec / 2
840
+ vec.like(vector.obj(x=1, y=2))
841
+ vec.like(vector.obj(x=1, y=2, z=3))
842
+ ```
843
+
844
+ It is also possible to manually add binary operations in vector's behavior dict to enable binary operations.
845
+
846
+ ```py
847
+ _binary_dispatch_cls = {
848
+ "TwoVector": TwoVector,
849
+ "ThreeVector": ThreeVector,
850
+ "LorentzVector": LorentzVector,
851
+ }
852
+ _rank = [TwoVector, ThreeVector, LorentzVector]
853
+
854
+ for lhs, lhs_to in _binary_dispatch_cls.items():
855
+ for rhs, rhs_to in _binary_dispatch_cls.items():
856
+ out_to = min(lhs_to, rhs_to, key=_rank.index)
857
+ behavior[(np.add, lhs, rhs)] = out_to.add
858
+ behavior[(np.subtract, lhs, rhs)] = out_to.subtract
859
+
860
+ vec + vec
861
+ vec.to_2D() + vec.to_2D()
862
+ ```
863
+
864
+ Finally, instead of manually registering the superclass ufuncs, one can use the utility `copy_behaviors` function to copy behavior items for a new subclass -
865
+
866
+ ```py
867
+ behavior.update(ak._util.copy_behaviors("Vector2D", "TwoVector", behavior))
868
+ behavior.update(ak._util.copy_behaviors("Vector3D", "ThreeVector", behavior))
869
+ behavior.update(ak._util.copy_behaviors("Momentum4D", "LorentzVector", behavior))
870
+
871
+ vec + vec
872
+ vec.to_2D() + vec.to_2D()
873
+ ```
874
+
764
875
  ## Talks about vector
765
876
 
877
+ - 3rd July 2024 - [A new SymPy backend for vector: uniting experimental and theoretical physicists](https://indi.to/pfTC6) - [PyHEP 2024 (virtual)](https://indico.cern.ch/event/1384010/)
766
878
  - 9th October 2023 - [What’s new with Vector? First major release is out!](https://indi.to/35ym5) - [PyHEP 2023 (virtual)](https://indico.cern.ch/event/1252095/) [🎥](https://www.youtube.com/watch?v=JHEAb2R3xzE&list=PLKZ9c4ONm-VlAorAG8kR09ZqhMfHiH2LJ&index=10)
767
879
  - 13th September 2022 - [Constructing HEP vectors and analyzing HEP data using Vector](https://indi.to/bPmMc) - [PyHEP 2022 (virtual)](https://indico.cern.ch/event/1150631/) [🎥](https://www.youtube.com/watch?v=4iveMzrbe7s&list=PLKZ9c4ONm-VkohKG-skzEG_gklMaSgaO7&index=15)
768
880
  - 20th July 2022 - [Analysis Grand Challenge / HEP Scientific Python Ecosystem](https://indico.cern.ch/event/1151329/timetable/#3-analysis-grand-challenge-hep) - [DANCE/CoDaS@Snowmass 2022 computational and data science software training](https://indico.cern.ch/event/1151329/)
@@ -808,14 +920,12 @@ development environment.
808
920
 
809
921
  ## Acknowledgements
810
922
 
811
- This library was primarily developed by Jim Pivarski, Henry Schreiner, and Eduardo Rodrigues.
923
+ This library was primarily developed by Jim Pivarski, Henry Schreiner, Saransh Chopra, and Eduardo Rodrigues.
812
924
 
813
- Support for this work was provided by the National Science Foundation cooperative agreement OAC-1836650 (IRIS-HEP) and OAC-1450377 (DIANA/HEP). Any opinions, findings, conclusions or recommendations expressed in this material are those of the authors and do not necessarily reflect the views of the National Science Foundation.
925
+ Support for this work was provided by the National Science Foundation cooperative agreement OAC-1836650 and PHY-2323298 (IRIS-HEP) and OAC-1450377 (DIANA/HEP). Any opinions, findings, conclusions or recommendations expressed in this material are those of the authors and do not necessarily reflect the views of the National Science Foundation.
814
926
 
815
927
  [actions-badge]: https://github.com/scikit-hep/vector/actions/workflows/ci.yml/badge.svg
816
928
  [actions-link]: https://github.com/scikit-hep/vector/actions
817
- [black-badge]: https://img.shields.io/badge/code%20style-black-000000.svg
818
- [black-link]: https://github.com/psf/black
819
929
  [codecov-badge]: https://codecov.io/gh/scikit-hep/vector/branch/main/graph/badge.svg?token=YBv60ueORQ
820
930
  [codecov-link]: https://codecov.io/gh/scikit-hep/vector
821
931
  [conda-version]: https://img.shields.io/conda/vn/conda-forge/vector.svg
@@ -826,7 +936,7 @@ Support for this work was provided by the National Science Foundation cooperativ
826
936
  [gitter-link]: https://gitter.im/Scikit-HEP/vector?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge
827
937
  [license-badge]: https://img.shields.io/badge/License-BSD_3--Clause-blue.svg
828
938
  [license-link]: https://opensource.org/licenses/BSD-3-Clause
829
- [pre-commit-badge]: https://results.pre-commit.ci/badge/github/scikit-hep/vector/develop.svg
939
+ [pre-commit-badge]: https://results.pre-commit.ci/badge/github/scikit-hep/vector/main.svg
830
940
  [pre-commit-link]: https://results.pre-commit.ci/repo/github/scikit-hep/vector
831
941
  [pypi-link]: https://pypi.org/project/vector/
832
942
  [pypi-platforms]: https://img.shields.io/pypi/pyversions/vector
@@ -2,6 +2,48 @@
2
2
 
3
3
  ## Version 1.4
4
4
 
5
+ ### Version 1.4.2
6
+
7
+ #### Fixes
8
+
9
+ - fix: depend on numpy<2.1 to support numba
10
+ - fix: fix ci for awkward v1.x (numpy v2 is out)
11
+ - fix: sympy tests (sympy v1.13)
12
+
13
+ #### Documentation
14
+
15
+ - docs: update intro notebook + readme
16
+
17
+ [#476]: https://github.com/scikit-hep/vector/pull/476
18
+ [#479]: https://github.com/scikit-hep/vector/pull/479
19
+ [#485]: https://github.com/scikit-hep/vector/pull/485
20
+ [#489]: https://github.com/scikit-hep/vector/pull/489
21
+
22
+ ### Version 1.4.1
23
+
24
+ #### Fixes
25
+
26
+ - fix: sympy backend on numpy 2.0 (full numpy 2.0 support) [#473][]
27
+ - fix: add lower and upper bounds for deltaangle [#465][]
28
+ - fix: maximum for SymPy backend is the identity function now [#465][]
29
+ - fix: get coordinate classes to work for numpy [#466][]
30
+
31
+ #### Documentation
32
+
33
+ - docs: add basic docs for sub-classing awkward mixins [#468][]
34
+
35
+ #### Maintenance
36
+
37
+ - chore: add missing compute function tests [#454]
38
+ - ci: Add GitHub artifact attestations to package distribution [#470][]
39
+
40
+ [#473]: https://github.com/scikit-hep/vector/pull/473
41
+ [#465]: https://github.com/scikit-hep/vector/pull/465
42
+ [#466]: https://github.com/scikit-hep/vector/pull/466
43
+ [#468]: https://github.com/scikit-hep/vector/pull/468
44
+ [#454]: https://github.com/scikit-hep/vector/pull/454
45
+ [#470]: https://github.com/scikit-hep/vector/pull/470
46
+
5
47
  ### Version 1.4.0
6
48
 
7
49
  #### Features
@@ -5,7 +5,7 @@
5
5
 
6
6
  .. image:: _images/vector-logo.png
7
7
 
8
- |Action status| |Documentation Status| |pre-commit.ci status| |coverage| |GitHub Discussion| |Gitter| |Code style: black|
8
+ |Action status| |Documentation Status| |pre-commit.ci status| |coverage| |GitHub Discussion| |Gitter|
9
9
 
10
10
  |PyPI platforms| |PyPI version| |Conda latest releasetatus| |DOI| |License| |Scikit-HEP|
11
11
 
@@ -21,10 +21,12 @@ Main features of Vector:
21
21
  * 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>`_.
22
22
  * Implemented on a variety of backends:
23
23
  * pure Python objects
24
+ * `SymPy <https://www.sympy.org/en/index.html>`_ vectors
24
25
  * NumPy arrays of vectors (as a `structured array <https://numpy.org/doc/stable/user/basics.rec.html>`_ subclass)
25
26
  * `Awkward Arrays <https://awkward-array.org/>`_ of vectors
26
- * potential for more: CuPy, TensorFlow, Torch, JAX...
27
- * NumPy/Awkward backends also implemented in `Numba <https://numba.pydata.org/>`_ for JIT-compiled calculations on vectors.
27
+ * potential for more: CuPy, TensorFlow, Torch...
28
+ * Awkward and Object backends also implemented in `Numba <https://numba.pydata.org/>`_ for JIT-compiled calculations on vectors.
29
+ * `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.
28
30
  * 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``.
29
31
 
30
32
  Installation
@@ -115,14 +117,12 @@ The API reference details the functionality of each ``class`` and ``function`` p
115
117
  :target: https://github.com/scikit-hep/vector/actions
116
118
  .. |Documentation Status| image:: https://readthedocs.org/projects/vector/badge/?version=latest
117
119
  :target: https://vector.readthedocs.io/en/latest/?badge=latest
118
- .. |pre-commit.ci status| image:: https://results.pre-commit.ci/badge/github/scikit-hep/vector/develop.svg
120
+ .. |pre-commit.ci status| image:: https://results.pre-commit.ci/badge/github/scikit-hep/vector/main.svg
119
121
  :target: https://results.pre-commit.ci/repo/github/scikit-hep/vector
120
122
  .. |GitHub Discussion| image:: https://img.shields.io/static/v1?label=Discussions&message=Ask&color=blue&logo=github
121
123
  :target: https://github.com/scikit-hep/vector/discussions
122
124
  .. |Gitter| image:: https://badges.gitter.im/Scikit-HEP/vector.svg
123
125
  :target: https://gitter.im/Scikit-HEP/vector?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge
124
- .. |Code style: black| image:: https://img.shields.io/badge/code%20style-black-000000.svg
125
- :target: https://github.com/psf/black
126
126
  .. |PyPI platforms| image:: https://img.shields.io/pypi/pyversions/vector
127
127
  :target: https://pypi.org/project/vector/
128
128
  .. |PyPI version| image:: https://badge.fury.io/py/vector.svg