vector 1.5.0__tar.gz → 1.5.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 (378) hide show
  1. {vector-1.5.0 → vector-1.5.2}/.github/workflows/cd.yml +10 -19
  2. {vector-1.5.0 → vector-1.5.2}/.github/workflows/ci.yml +17 -14
  3. {vector-1.5.0 → vector-1.5.2}/.pre-commit-config.yaml +5 -13
  4. {vector-1.5.0 → vector-1.5.2}/PKG-INFO +5 -4
  5. {vector-1.5.0 → vector-1.5.2}/docs/changelog.md +28 -4
  6. {vector-1.5.0 → vector-1.5.2}/noxfile.py +9 -8
  7. {vector-1.5.0 → vector-1.5.2}/pyproject.toml +8 -8
  8. {vector-1.5.0 → vector-1.5.2}/src/vector/__init__.py +1 -1
  9. {vector-1.5.0 → vector-1.5.2}/src/vector/_methods.py +1 -1
  10. {vector-1.5.0 → vector-1.5.2}/src/vector/_version.py +2 -2
  11. {vector-1.5.0 → vector-1.5.2}/src/vector/backends/numpy.py +20 -21
  12. {vector-1.5.0 → vector-1.5.2}/src/vector/backends/object.py +18 -18
  13. {vector-1.5.0 → vector-1.5.2}/src/vector/backends/sympy.py +18 -18
  14. {vector-1.5.0 → vector-1.5.2}/.all-contributorsrc +0 -0
  15. {vector-1.5.0 → vector-1.5.2}/.git_archival.txt +0 -0
  16. {vector-1.5.0 → vector-1.5.2}/.gitattributes +0 -0
  17. {vector-1.5.0 → vector-1.5.2}/.github/CONTRIBUTING.md +0 -0
  18. {vector-1.5.0 → vector-1.5.2}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  19. {vector-1.5.0 → vector-1.5.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  20. {vector-1.5.0 → vector-1.5.2}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  21. {vector-1.5.0 → vector-1.5.2}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  22. {vector-1.5.0 → vector-1.5.2}/.github/codecov.yml +0 -0
  23. {vector-1.5.0 → vector-1.5.2}/.github/dependabot.yml +0 -0
  24. {vector-1.5.0 → vector-1.5.2}/.github/matchers/pylint.json +0 -0
  25. {vector-1.5.0 → vector-1.5.2}/.github/workflows/notebooks.yml +0 -0
  26. {vector-1.5.0 → vector-1.5.2}/.gitignore +0 -0
  27. {vector-1.5.0 → vector-1.5.2}/.readthedocs.yml +0 -0
  28. {vector-1.5.0 → vector-1.5.2}/CITATION.cff +0 -0
  29. {vector-1.5.0 → vector-1.5.2}/LICENSE +0 -0
  30. {vector-1.5.0 → vector-1.5.2}/README.md +0 -0
  31. {vector-1.5.0 → vector-1.5.2}/docs/Makefile +0 -0
  32. {vector-1.5.0 → vector-1.5.2}/docs/_images/LogoSrc.svg +0 -0
  33. {vector-1.5.0 → vector-1.5.2}/docs/_images/vector-logo.png +0 -0
  34. {vector-1.5.0 → vector-1.5.2}/docs/api/backends/vector.backends._numba.rst +0 -0
  35. {vector-1.5.0 → vector-1.5.2}/docs/api/backends/vector.backends._numba_object.rst +0 -0
  36. {vector-1.5.0 → vector-1.5.2}/docs/api/backends/vector.backends.awkward.rst +0 -0
  37. {vector-1.5.0 → vector-1.5.2}/docs/api/backends/vector.backends.awkward_constructors.rst +0 -0
  38. {vector-1.5.0 → vector-1.5.2}/docs/api/backends/vector.backends.numba_numpy.rst +0 -0
  39. {vector-1.5.0 → vector-1.5.2}/docs/api/backends/vector.backends.numpy.rst +0 -0
  40. {vector-1.5.0 → vector-1.5.2}/docs/api/backends/vector.backends.object.rst +0 -0
  41. {vector-1.5.0 → vector-1.5.2}/docs/api/backends/vector.backends.rst +0 -0
  42. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/lorentz/vector._compute.lorentz.Et.rst +0 -0
  43. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/lorentz/vector._compute.lorentz.Et2.rst +0 -0
  44. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/lorentz/vector._compute.lorentz.Mt.rst +0 -0
  45. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/lorentz/vector._compute.lorentz.Mt2.rst +0 -0
  46. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/lorentz/vector._compute.lorentz.add.rst +0 -0
  47. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/lorentz/vector._compute.lorentz.beta.rst +0 -0
  48. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/lorentz/vector._compute.lorentz.boostX_beta.rst +0 -0
  49. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/lorentz/vector._compute.lorentz.boostX_gamma.rst +0 -0
  50. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/lorentz/vector._compute.lorentz.boostY_beta.rst +0 -0
  51. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/lorentz/vector._compute.lorentz.boostY_gamma.rst +0 -0
  52. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/lorentz/vector._compute.lorentz.boostZ_beta.rst +0 -0
  53. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/lorentz/vector._compute.lorentz.boostZ_gamma.rst +0 -0
  54. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/lorentz/vector._compute.lorentz.boost_beta3.rst +0 -0
  55. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/lorentz/vector._compute.lorentz.boost_p4.rst +0 -0
  56. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/lorentz/vector._compute.lorentz.deltaRapidityPhi.rst +0 -0
  57. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/lorentz/vector._compute.lorentz.deltaRapidityPhi2.rst +0 -0
  58. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/lorentz/vector._compute.lorentz.dot.rst +0 -0
  59. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/lorentz/vector._compute.lorentz.equal.rst +0 -0
  60. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/lorentz/vector._compute.lorentz.gamma.rst +0 -0
  61. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/lorentz/vector._compute.lorentz.is_lightlike.rst +0 -0
  62. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/lorentz/vector._compute.lorentz.is_spacelike.rst +0 -0
  63. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/lorentz/vector._compute.lorentz.is_timelike.rst +0 -0
  64. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/lorentz/vector._compute.lorentz.isclose.rst +0 -0
  65. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/lorentz/vector._compute.lorentz.not_equal.rst +0 -0
  66. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/lorentz/vector._compute.lorentz.rapidity.rst +0 -0
  67. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/lorentz/vector._compute.lorentz.rst +0 -0
  68. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/lorentz/vector._compute.lorentz.scale.rst +0 -0
  69. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/lorentz/vector._compute.lorentz.subtract.rst +0 -0
  70. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/lorentz/vector._compute.lorentz.t.rst +0 -0
  71. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/lorentz/vector._compute.lorentz.t2.rst +0 -0
  72. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/lorentz/vector._compute.lorentz.tau.rst +0 -0
  73. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/lorentz/vector._compute.lorentz.tau2.rst +0 -0
  74. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/lorentz/vector._compute.lorentz.to_beta3.rst +0 -0
  75. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/lorentz/vector._compute.lorentz.transform4D.rst +0 -0
  76. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/lorentz/vector._compute.lorentz.unit.rst +0 -0
  77. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/planar/vector._compute.planar.add.rst +0 -0
  78. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/planar/vector._compute.planar.deltaphi.rst +0 -0
  79. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/planar/vector._compute.planar.dot.rst +0 -0
  80. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/planar/vector._compute.planar.equal.rst +0 -0
  81. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/planar/vector._compute.planar.is_antiparallel.rst +0 -0
  82. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/planar/vector._compute.planar.is_parallel.rst +0 -0
  83. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/planar/vector._compute.planar.is_perpendicular.rst +0 -0
  84. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/planar/vector._compute.planar.isclose.rst +0 -0
  85. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/planar/vector._compute.planar.not_equal.rst +0 -0
  86. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/planar/vector._compute.planar.phi.rst +0 -0
  87. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/planar/vector._compute.planar.rho.rst +0 -0
  88. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/planar/vector._compute.planar.rho2.rst +0 -0
  89. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/planar/vector._compute.planar.rotateZ.rst +0 -0
  90. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/planar/vector._compute.planar.rst +0 -0
  91. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/planar/vector._compute.planar.scale.rst +0 -0
  92. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/planar/vector._compute.planar.subtract.rst +0 -0
  93. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/planar/vector._compute.planar.transform2D.rst +0 -0
  94. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/planar/vector._compute.planar.unit.rst +0 -0
  95. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/planar/vector._compute.planar.x.rst +0 -0
  96. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/planar/vector._compute.planar.y.rst +0 -0
  97. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/spatial/vector._compute.spatial.add.rst +0 -0
  98. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/spatial/vector._compute.spatial.costheta.rst +0 -0
  99. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/spatial/vector._compute.spatial.cottheta.rst +0 -0
  100. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/spatial/vector._compute.spatial.cross.rst +0 -0
  101. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/spatial/vector._compute.spatial.deltaR.rst +0 -0
  102. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/spatial/vector._compute.spatial.deltaR2.rst +0 -0
  103. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/spatial/vector._compute.spatial.deltaangle.rst +0 -0
  104. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/spatial/vector._compute.spatial.deltaeta.rst +0 -0
  105. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/spatial/vector._compute.spatial.dot.rst +0 -0
  106. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/spatial/vector._compute.spatial.equal.rst +0 -0
  107. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/spatial/vector._compute.spatial.eta.rst +0 -0
  108. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/spatial/vector._compute.spatial.is_antiparallel.rst +0 -0
  109. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/spatial/vector._compute.spatial.is_parallel.rst +0 -0
  110. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/spatial/vector._compute.spatial.is_perpendicular.rst +0 -0
  111. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/spatial/vector._compute.spatial.isclose.rst +0 -0
  112. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/spatial/vector._compute.spatial.mag.rst +0 -0
  113. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/spatial/vector._compute.spatial.mag2.rst +0 -0
  114. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/spatial/vector._compute.spatial.not_equal.rst +0 -0
  115. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/spatial/vector._compute.spatial.rotateX.rst +0 -0
  116. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/spatial/vector._compute.spatial.rotateY.rst +0 -0
  117. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/spatial/vector._compute.spatial.rotate_axis.rst +0 -0
  118. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/spatial/vector._compute.spatial.rotate_euler.rst +0 -0
  119. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/spatial/vector._compute.spatial.rotate_quaternion.rst +0 -0
  120. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/spatial/vector._compute.spatial.rst +0 -0
  121. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/spatial/vector._compute.spatial.scale.rst +0 -0
  122. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/spatial/vector._compute.spatial.subtract.rst +0 -0
  123. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/spatial/vector._compute.spatial.theta.rst +0 -0
  124. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/spatial/vector._compute.spatial.transform3D.rst +0 -0
  125. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/spatial/vector._compute.spatial.unit.rst +0 -0
  126. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/spatial/vector._compute.spatial.z.rst +0 -0
  127. {vector-1.5.0 → vector-1.5.2}/docs/api/compute/vector._compute.rst +0 -0
  128. {vector-1.5.0 → vector-1.5.2}/docs/api/inheritance.svg +0 -0
  129. {vector-1.5.0 → vector-1.5.2}/docs/api/modules.rst +0 -0
  130. {vector-1.5.0 → vector-1.5.2}/docs/api/vector._methods.rst +0 -0
  131. {vector-1.5.0 → vector-1.5.2}/docs/api/vector._typeutils.rst +0 -0
  132. {vector-1.5.0 → vector-1.5.2}/docs/api/vector.rst +0 -0
  133. {vector-1.5.0 → vector-1.5.2}/docs/conf.py +0 -0
  134. {vector-1.5.0 → vector-1.5.2}/docs/index.rst +0 -0
  135. {vector-1.5.0 → vector-1.5.2}/docs/make.bat +0 -0
  136. {vector-1.5.0 → vector-1.5.2}/docs/usage/intro.ipynb +0 -0
  137. {vector-1.5.0 → vector-1.5.2}/docs/usage/structure.md +0 -0
  138. {vector-1.5.0 → vector-1.5.2}/environment.yml +0 -0
  139. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/__init__.py +0 -0
  140. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/lorentz/Et.py +0 -0
  141. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/lorentz/Et2.py +0 -0
  142. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/lorentz/Mt.py +0 -0
  143. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/lorentz/Mt2.py +0 -0
  144. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/lorentz/__init__.py +0 -0
  145. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/lorentz/add.py +0 -0
  146. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/lorentz/beta.py +0 -0
  147. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/lorentz/boostX_beta.py +0 -0
  148. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/lorentz/boostX_gamma.py +0 -0
  149. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/lorentz/boostY_beta.py +0 -0
  150. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/lorentz/boostY_gamma.py +0 -0
  151. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/lorentz/boostZ_beta.py +0 -0
  152. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/lorentz/boostZ_gamma.py +0 -0
  153. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/lorentz/boost_beta3.py +0 -0
  154. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/lorentz/boost_p4.py +0 -0
  155. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/lorentz/deltaRapidityPhi.py +0 -0
  156. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/lorentz/deltaRapidityPhi2.py +0 -0
  157. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/lorentz/dot.py +0 -0
  158. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/lorentz/equal.py +0 -0
  159. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/lorentz/gamma.py +0 -0
  160. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/lorentz/is_lightlike.py +0 -0
  161. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/lorentz/is_spacelike.py +0 -0
  162. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/lorentz/is_timelike.py +0 -0
  163. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/lorentz/isclose.py +0 -0
  164. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/lorentz/not_equal.py +0 -0
  165. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/lorentz/rapidity.py +0 -0
  166. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/lorentz/scale.py +0 -0
  167. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/lorentz/subtract.py +0 -0
  168. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/lorentz/t.py +0 -0
  169. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/lorentz/t2.py +0 -0
  170. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/lorentz/tau.py +0 -0
  171. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/lorentz/tau2.py +0 -0
  172. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/lorentz/to_beta3.py +0 -0
  173. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/lorentz/transform4D.py +0 -0
  174. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/lorentz/unit.py +0 -0
  175. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/planar/__init__.py +0 -0
  176. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/planar/add.py +0 -0
  177. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/planar/deltaphi.py +0 -0
  178. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/planar/dot.py +0 -0
  179. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/planar/equal.py +0 -0
  180. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/planar/is_antiparallel.py +0 -0
  181. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/planar/is_parallel.py +0 -0
  182. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/planar/is_perpendicular.py +0 -0
  183. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/planar/isclose.py +0 -0
  184. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/planar/not_equal.py +0 -0
  185. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/planar/phi.py +0 -0
  186. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/planar/rho.py +0 -0
  187. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/planar/rho2.py +0 -0
  188. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/planar/rotateZ.py +0 -0
  189. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/planar/scale.py +0 -0
  190. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/planar/subtract.py +0 -0
  191. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/planar/transform2D.py +0 -0
  192. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/planar/unit.py +0 -0
  193. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/planar/x.py +0 -0
  194. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/planar/y.py +0 -0
  195. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/spatial/__init__.py +0 -0
  196. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/spatial/add.py +0 -0
  197. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/spatial/costheta.py +0 -0
  198. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/spatial/cottheta.py +0 -0
  199. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/spatial/cross.py +0 -0
  200. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/spatial/deltaR.py +0 -0
  201. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/spatial/deltaR2.py +0 -0
  202. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/spatial/deltaangle.py +0 -0
  203. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/spatial/deltaeta.py +0 -0
  204. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/spatial/dot.py +0 -0
  205. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/spatial/equal.py +0 -0
  206. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/spatial/eta.py +0 -0
  207. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/spatial/is_antiparallel.py +0 -0
  208. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/spatial/is_parallel.py +0 -0
  209. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/spatial/is_perpendicular.py +0 -0
  210. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/spatial/isclose.py +0 -0
  211. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/spatial/mag.py +0 -0
  212. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/spatial/mag2.py +0 -0
  213. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/spatial/not_equal.py +0 -0
  214. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/spatial/rotateX.py +0 -0
  215. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/spatial/rotateY.py +0 -0
  216. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/spatial/rotate_axis.py +0 -0
  217. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/spatial/rotate_euler.py +0 -0
  218. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/spatial/rotate_quaternion.py +0 -0
  219. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/spatial/scale.py +0 -0
  220. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/spatial/subtract.py +0 -0
  221. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/spatial/theta.py +0 -0
  222. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/spatial/transform3D.py +0 -0
  223. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/spatial/unit.py +0 -0
  224. {vector-1.5.0 → vector-1.5.2}/src/vector/_compute/spatial/z.py +0 -0
  225. {vector-1.5.0 → vector-1.5.2}/src/vector/_lib.py +0 -0
  226. {vector-1.5.0 → vector-1.5.2}/src/vector/_typeutils.py +0 -0
  227. /vector-1.5.0/src/vector/version.pyi → /vector-1.5.2/src/vector/_version.pyi +0 -0
  228. {vector-1.5.0 → vector-1.5.2}/src/vector/backends/__init__.py +0 -0
  229. {vector-1.5.0 → vector-1.5.2}/src/vector/backends/_numba.py +0 -0
  230. {vector-1.5.0 → vector-1.5.2}/src/vector/backends/_numba_object.py +0 -0
  231. {vector-1.5.0 → vector-1.5.2}/src/vector/backends/awkward.py +0 -0
  232. {vector-1.5.0 → vector-1.5.2}/src/vector/backends/awkward_constructors.py +0 -0
  233. {vector-1.5.0 → vector-1.5.2}/src/vector/backends/numba_numpy.py +0 -0
  234. {vector-1.5.0 → vector-1.5.2}/src/vector/py.typed +0 -0
  235. {vector-1.5.0 → vector-1.5.2}/tests/__init__.py +0 -0
  236. {vector-1.5.0 → vector-1.5.2}/tests/backends/__init__.py +0 -0
  237. {vector-1.5.0 → vector-1.5.2}/tests/backends/test_awkward.py +0 -0
  238. {vector-1.5.0 → vector-1.5.2}/tests/backends/test_awkward_numba.py +0 -0
  239. {vector-1.5.0 → vector-1.5.2}/tests/backends/test_dask_awkward.py +0 -0
  240. {vector-1.5.0 → vector-1.5.2}/tests/backends/test_numba_numpy.py +0 -0
  241. {vector-1.5.0 → vector-1.5.2}/tests/backends/test_numba_object.py +0 -0
  242. {vector-1.5.0 → vector-1.5.2}/tests/backends/test_numpy.py +0 -0
  243. {vector-1.5.0 → vector-1.5.2}/tests/backends/test_object.py +0 -0
  244. {vector-1.5.0 → vector-1.5.2}/tests/backends/test_operators.py +0 -0
  245. {vector-1.5.0 → vector-1.5.2}/tests/backends/test_sympy.py +0 -0
  246. {vector-1.5.0 → vector-1.5.2}/tests/compute/__init__.py +0 -0
  247. {vector-1.5.0 → vector-1.5.2}/tests/compute/lorentz/__init__.py +0 -0
  248. {vector-1.5.0 → vector-1.5.2}/tests/compute/lorentz/test_Et.py +0 -0
  249. {vector-1.5.0 → vector-1.5.2}/tests/compute/lorentz/test_Et2.py +0 -0
  250. {vector-1.5.0 → vector-1.5.2}/tests/compute/lorentz/test_Mt.py +0 -0
  251. {vector-1.5.0 → vector-1.5.2}/tests/compute/lorentz/test_Mt2.py +0 -0
  252. {vector-1.5.0 → vector-1.5.2}/tests/compute/lorentz/test_beta.py +0 -0
  253. {vector-1.5.0 → vector-1.5.2}/tests/compute/lorentz/test_boostX_beta.py +0 -0
  254. {vector-1.5.0 → vector-1.5.2}/tests/compute/lorentz/test_boostX_gamma.py +0 -0
  255. {vector-1.5.0 → vector-1.5.2}/tests/compute/lorentz/test_boostY_beta.py +0 -0
  256. {vector-1.5.0 → vector-1.5.2}/tests/compute/lorentz/test_boostY_gamma.py +0 -0
  257. {vector-1.5.0 → vector-1.5.2}/tests/compute/lorentz/test_boostZ_beta.py +0 -0
  258. {vector-1.5.0 → vector-1.5.2}/tests/compute/lorentz/test_boostZ_gamma.py +0 -0
  259. {vector-1.5.0 → vector-1.5.2}/tests/compute/lorentz/test_boost_beta3.py +0 -0
  260. {vector-1.5.0 → vector-1.5.2}/tests/compute/lorentz/test_boost_p4.py +0 -0
  261. {vector-1.5.0 → vector-1.5.2}/tests/compute/lorentz/test_deltaRapidityPhi.py +0 -0
  262. {vector-1.5.0 → vector-1.5.2}/tests/compute/lorentz/test_deltaRapidityPhi2.py +0 -0
  263. {vector-1.5.0 → vector-1.5.2}/tests/compute/lorentz/test_gamma.py +0 -0
  264. {vector-1.5.0 → vector-1.5.2}/tests/compute/lorentz/test_is_lightlike.py +0 -0
  265. {vector-1.5.0 → vector-1.5.2}/tests/compute/lorentz/test_is_spacelike.py +0 -0
  266. {vector-1.5.0 → vector-1.5.2}/tests/compute/lorentz/test_is_timelike.py +0 -0
  267. {vector-1.5.0 → vector-1.5.2}/tests/compute/lorentz/test_rapidity.py +0 -0
  268. {vector-1.5.0 → vector-1.5.2}/tests/compute/lorentz/test_t.py +0 -0
  269. {vector-1.5.0 → vector-1.5.2}/tests/compute/lorentz/test_t2.py +0 -0
  270. {vector-1.5.0 → vector-1.5.2}/tests/compute/lorentz/test_tau.py +0 -0
  271. {vector-1.5.0 → vector-1.5.2}/tests/compute/lorentz/test_tau2.py +0 -0
  272. {vector-1.5.0 → vector-1.5.2}/tests/compute/lorentz/test_to_beta3.py +0 -0
  273. {vector-1.5.0 → vector-1.5.2}/tests/compute/planar/__init__.py +0 -0
  274. {vector-1.5.0 → vector-1.5.2}/tests/compute/planar/test_deltaphi.py +0 -0
  275. {vector-1.5.0 → vector-1.5.2}/tests/compute/planar/test_phi.py +0 -0
  276. {vector-1.5.0 → vector-1.5.2}/tests/compute/planar/test_rho.py +0 -0
  277. {vector-1.5.0 → vector-1.5.2}/tests/compute/planar/test_rho2.py +0 -0
  278. {vector-1.5.0 → vector-1.5.2}/tests/compute/planar/test_rotateZ.py +0 -0
  279. {vector-1.5.0 → vector-1.5.2}/tests/compute/planar/test_x.py +0 -0
  280. {vector-1.5.0 → vector-1.5.2}/tests/compute/planar/test_y.py +0 -0
  281. {vector-1.5.0 → vector-1.5.2}/tests/compute/spatial/__init__.py +0 -0
  282. {vector-1.5.0 → vector-1.5.2}/tests/compute/spatial/test_costheta.py +0 -0
  283. {vector-1.5.0 → vector-1.5.2}/tests/compute/spatial/test_cottheta.py +0 -0
  284. {vector-1.5.0 → vector-1.5.2}/tests/compute/spatial/test_cross.py +0 -0
  285. {vector-1.5.0 → vector-1.5.2}/tests/compute/spatial/test_deltaR.py +0 -0
  286. {vector-1.5.0 → vector-1.5.2}/tests/compute/spatial/test_deltaR2.py +0 -0
  287. {vector-1.5.0 → vector-1.5.2}/tests/compute/spatial/test_deltaangle.py +0 -0
  288. {vector-1.5.0 → vector-1.5.2}/tests/compute/spatial/test_deltaeta.py +0 -0
  289. {vector-1.5.0 → vector-1.5.2}/tests/compute/spatial/test_eta.py +0 -0
  290. {vector-1.5.0 → vector-1.5.2}/tests/compute/spatial/test_mag.py +0 -0
  291. {vector-1.5.0 → vector-1.5.2}/tests/compute/spatial/test_mag2.py +0 -0
  292. {vector-1.5.0 → vector-1.5.2}/tests/compute/spatial/test_rotateX.py +0 -0
  293. {vector-1.5.0 → vector-1.5.2}/tests/compute/spatial/test_rotateY.py +0 -0
  294. {vector-1.5.0 → vector-1.5.2}/tests/compute/spatial/test_rotate_axis.py +0 -0
  295. {vector-1.5.0 → vector-1.5.2}/tests/compute/spatial/test_rotate_euler.py +0 -0
  296. {vector-1.5.0 → vector-1.5.2}/tests/compute/spatial/test_rotate_quaternion.py +0 -0
  297. {vector-1.5.0 → vector-1.5.2}/tests/compute/spatial/test_theta.py +0 -0
  298. {vector-1.5.0 → vector-1.5.2}/tests/compute/spatial/test_z.py +0 -0
  299. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/lorentz/__init__.py +0 -0
  300. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/lorentz/test_Et.py +0 -0
  301. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/lorentz/test_Et2.py +0 -0
  302. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/lorentz/test_Mt.py +0 -0
  303. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/lorentz/test_Mt2.py +0 -0
  304. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/lorentz/test_beta.py +0 -0
  305. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/lorentz/test_boostX_beta.py +0 -0
  306. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/lorentz/test_boostX_gamma.py +0 -0
  307. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/lorentz/test_boostY_beta.py +0 -0
  308. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/lorentz/test_boostY_gamma.py +0 -0
  309. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/lorentz/test_boostZ_beta.py +0 -0
  310. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/lorentz/test_boostZ_gamma.py +0 -0
  311. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/lorentz/test_boost_beta3.py +0 -0
  312. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/lorentz/test_boost_p4.py +0 -0
  313. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/lorentz/test_deltaRapidityPhi.py +0 -0
  314. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/lorentz/test_deltaRapidityPhi2.py +0 -0
  315. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/lorentz/test_gamma.py +0 -0
  316. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/lorentz/test_is_lightlike.py +0 -0
  317. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/lorentz/test_is_spacelike.py +0 -0
  318. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/lorentz/test_is_timelike.py +0 -0
  319. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/lorentz/test_rapidity.py +0 -0
  320. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/lorentz/test_t.py +0 -0
  321. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/lorentz/test_t2.py +0 -0
  322. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/lorentz/test_tau.py +0 -0
  323. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/lorentz/test_tau2.py +0 -0
  324. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/lorentz/test_to_beta3.py +0 -0
  325. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/planar/__init__.py +0 -0
  326. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/planar/test_deltaphi.py +0 -0
  327. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/planar/test_phi.py +0 -0
  328. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/planar/test_rho.py +0 -0
  329. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/planar/test_rho2.py +0 -0
  330. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/planar/test_rotateZ.py +0 -0
  331. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/planar/test_x.py +0 -0
  332. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/planar/test_y.py +0 -0
  333. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/spatial/__init__.py +0 -0
  334. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/spatial/test_costheta.py +0 -0
  335. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/spatial/test_cottheta.py +0 -0
  336. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/spatial/test_cross.py +0 -0
  337. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/spatial/test_deltaR.py +0 -0
  338. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/spatial/test_deltaR2.py +0 -0
  339. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/spatial/test_deltaangle.py +0 -0
  340. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/spatial/test_deltaeta.py +0 -0
  341. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/spatial/test_eta.py +0 -0
  342. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/spatial/test_mag.py +0 -0
  343. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/spatial/test_mag2.py +0 -0
  344. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/spatial/test_rotateX.py +0 -0
  345. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/spatial/test_rotateY.py +0 -0
  346. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/spatial/test_rotate_axis.py +0 -0
  347. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/spatial/test_rotate_euler.py +0 -0
  348. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/spatial/test_rotate_quaternion.py +0 -0
  349. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/spatial/test_theta.py +0 -0
  350. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/spatial/test_z.py +0 -0
  351. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/test_add.py +0 -0
  352. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/test_conversions.py +0 -0
  353. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/test_dot.py +0 -0
  354. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/test_equal.py +0 -0
  355. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/test_is_antiparallel.py +0 -0
  356. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/test_is_parallel.py +0 -0
  357. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/test_is_perpendicular.py +0 -0
  358. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/test_not_equal.py +0 -0
  359. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/test_scale.py +0 -0
  360. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/test_subtract.py +0 -0
  361. {vector-1.5.0 → vector-1.5.2}/tests/compute/sympy/test_unit.py +0 -0
  362. {vector-1.5.0 → vector-1.5.2}/tests/compute/test_add.py +0 -0
  363. {vector-1.5.0 → vector-1.5.2}/tests/compute/test_conversions.py +0 -0
  364. {vector-1.5.0 → vector-1.5.2}/tests/compute/test_dot.py +0 -0
  365. {vector-1.5.0 → vector-1.5.2}/tests/compute/test_equal.py +0 -0
  366. {vector-1.5.0 → vector-1.5.2}/tests/compute/test_is_antiparallel.py +0 -0
  367. {vector-1.5.0 → vector-1.5.2}/tests/compute/test_is_parallel.py +0 -0
  368. {vector-1.5.0 → vector-1.5.2}/tests/compute/test_is_perpendicular.py +0 -0
  369. {vector-1.5.0 → vector-1.5.2}/tests/compute/test_isclose.py +0 -0
  370. {vector-1.5.0 → vector-1.5.2}/tests/compute/test_not_equal.py +0 -0
  371. {vector-1.5.0 → vector-1.5.2}/tests/compute/test_scale.py +0 -0
  372. {vector-1.5.0 → vector-1.5.2}/tests/compute/test_subtract.py +0 -0
  373. {vector-1.5.0 → vector-1.5.2}/tests/compute/test_unit.py +0 -0
  374. {vector-1.5.0 → vector-1.5.2}/tests/samples/issue-161-v2.pkl +0 -0
  375. {vector-1.5.0 → vector-1.5.2}/tests/test_compute_features.py +0 -0
  376. {vector-1.5.0 → vector-1.5.2}/tests/test_issues.py +0 -0
  377. {vector-1.5.0 → vector-1.5.2}/tests/test_methods.py +0 -0
  378. {vector-1.5.0 → vector-1.5.2}/tests/test_notebooks.py +0 -0
@@ -9,29 +9,12 @@ 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
16
12
  steps:
17
13
  - uses: actions/checkout@v4
18
14
  with:
19
15
  fetch-depth: 0
20
16
 
21
- - name: Build SDist and wheel
22
- run: pipx run build
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
-
32
- - uses: actions/upload-artifact@v4
33
- with:
34
- path: dist/*
17
+ - uses: hynek/build-and-inspect-python-package@v2
35
18
 
36
19
  publish:
37
20
  needs: [dist]
@@ -42,16 +25,22 @@ jobs:
42
25
  url: https://pypi.org/p/vector
43
26
  permissions:
44
27
  id-token: write
28
+ attestations: write
45
29
 
46
30
  steps:
47
31
  - uses: actions/download-artifact@v4
48
32
  with:
49
- name: artifact
33
+ name: Packages
50
34
  path: dist
51
35
 
52
36
  - name: List distributions to be deployed
53
37
  run: ls -l dist/
54
38
 
39
+ - name: Generate artifact attestation for sdist and wheel
40
+ uses: actions/attest-build-provenance@1c608d11d69870c2092266b3f9a6f3abbf17002c # v1.4.3
41
+ with:
42
+ subject-path: "dist/vector-*"
43
+
55
44
  - name: Verify sdist artifact attestation
56
45
  env:
57
46
  GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -63,3 +52,5 @@ jobs:
63
52
  run: gh attestation verify dist/vector-*.whl --repo ${{ github.repository }}
64
53
 
65
54
  - uses: pypa/gh-action-pypi-publish@release/v1
55
+ with:
56
+ attestations: true
@@ -28,10 +28,9 @@ jobs:
28
28
  - uses: actions/setup-python@v5
29
29
  with:
30
30
  python-version: 3.x
31
+ - uses: astral-sh/setup-uv@v3
31
32
  - name: PyLint
32
- run: |
33
- echo "::add-matcher::$GITHUB_WORKSPACE/.github/matchers/pylint.json"
34
- pipx run nox -s pylint
33
+ run: uvx nox -s pylint -- --output-format=github
35
34
 
36
35
  check-lite:
37
36
  runs-on: ubuntu-latest
@@ -44,6 +43,7 @@ jobs:
44
43
  - "3.10"
45
44
  - "3.11"
46
45
  - "3.12"
46
+ - "3.13"
47
47
  name: Python ${{ matrix.python-version }} - Lite
48
48
  steps:
49
49
  - uses: actions/checkout@v4
@@ -51,12 +51,12 @@ jobs:
51
51
  - uses: actions/setup-python@v5
52
52
  with:
53
53
  python-version: ${{ matrix.python-version }}
54
+ allow-prereleases: true
54
55
 
55
- - name: Requirements check
56
- run: python -m pip list
56
+ - uses: astral-sh/setup-uv@v3
57
57
 
58
58
  - name: Test lite package
59
- run: pipx run nox -s lite-${{ matrix.python-version.key || matrix.python-version }} --verbose
59
+ run: uvx nox -s lite-${{ matrix.python-version.key || matrix.python-version }} --verbose
60
60
 
61
61
  check-full:
62
62
  needs: [check-lite]
@@ -70,6 +70,7 @@ jobs:
70
70
  - "3.10"
71
71
  - "3.11"
72
72
  - "3.12"
73
+ - "3.13"
73
74
  name: Python ${{ matrix.python-version }} - Full
74
75
  steps:
75
76
  - uses: actions/checkout@v4
@@ -77,19 +78,22 @@ jobs:
77
78
  - uses: actions/setup-python@v5
78
79
  with:
79
80
  python-version: ${{ matrix.python-version }}
81
+ allow-prereleases: true
80
82
 
81
- - name: Requirements check
82
- run: python -m pip list
83
+ - uses: astral-sh/setup-uv@v3
84
+
85
+ - name: Install nox
86
+ run: uv tool install nox
83
87
 
84
88
  - name: Run doctests on Python 3.11
85
89
  if: matrix.python-version == 3.11
86
- run: pipx run nox -s doctests-${{ matrix.python-version.key || matrix.python-version }} --verbose
90
+ run: nox -s doctests-${{ matrix.python-version.key || matrix.python-version }} --verbose
87
91
 
88
92
  - name: Test package and generate coverage report
89
- run: pipx run nox -s coverage-${{ matrix.python-version.key || matrix.python-version }} --verbose
93
+ run: nox -s coverage-${{ matrix.python-version.key || matrix.python-version }} --verbose
90
94
 
91
95
  - name: Upload coverage report
92
- uses: codecov/codecov-action@v4.5.0
96
+ uses: codecov/codecov-action@v4.6.0
93
97
  with:
94
98
  token: ${{ secrets.CODECOV_TOKEN }}
95
99
 
@@ -103,11 +107,10 @@ jobs:
103
107
  with:
104
108
  python-version: 3.8.13
105
109
 
106
- - name: Requirements check
107
- run: python -m pip list
110
+ - uses: astral-sh/setup-uv@v3
108
111
 
109
112
  - name: Check compute features
110
- run: python -m pip install .[test,test-extras]
113
+ run: uv pip install --system .[test,test-extras]
111
114
 
112
115
  - name: Test package
113
116
  run: python -m pytest -ra -m dis --ignore tests/test_notebooks.py
@@ -19,14 +19,14 @@ repos:
19
19
  - id: trailing-whitespace
20
20
 
21
21
  - repo: https://github.com/astral-sh/ruff-pre-commit
22
- rev: "v0.6.1"
22
+ rev: "v0.6.8"
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/pre-commit/mirrors-mypy
29
- rev: v1.11.1
29
+ rev: v1.11.2
30
30
  hooks:
31
31
  - id: mypy
32
32
  files: src
@@ -42,8 +42,8 @@ repos:
42
42
  - id: codespell
43
43
  exclude: ^docs/usage/intro.ipynb$
44
44
 
45
- - repo: https://github.com/pre-commit/mirrors-prettier
46
- rev: "v4.0.0-alpha.8"
45
+ - repo: https://github.com/rbubley/mirrors-prettier
46
+ rev: "v3.3.3"
47
47
  hooks:
48
48
  - id: prettier
49
49
  types_or: [yaml, markdown, html, css, scss, javascript, json]
@@ -54,7 +54,7 @@ repos:
54
54
  hooks:
55
55
  - id: blacken-docs
56
56
  args: ["-E"]
57
- additional_dependencies: [black==23.1.0]
57
+ additional_dependencies: [black~=24.0]
58
58
 
59
59
  - repo: https://github.com/pre-commit/pygrep-hooks
60
60
  rev: v1.10.0
@@ -64,11 +64,3 @@ repos:
64
64
  - id: rst-backticks
65
65
  - id: rst-directive-colons
66
66
  - id: rst-inline-touching-normal
67
-
68
- - repo: https://github.com/nbQA-dev/nbQA
69
- rev: 1.8.7
70
- hooks:
71
- - id: nbqa-pyupgrade
72
- args: ["--py37-plus"]
73
- - id: nbqa-isort
74
- args: ["--float-to-top"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: vector
3
- Version: 1.5.0
3
+ Version: 1.5.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
@@ -23,13 +23,14 @@ Classifier: Programming Language :: Python :: 3.9
23
23
  Classifier: Programming Language :: Python :: 3.10
24
24
  Classifier: Programming Language :: Python :: 3.11
25
25
  Classifier: Programming Language :: Python :: 3.12
26
+ Classifier: Programming Language :: Python :: 3.13
26
27
  Classifier: Topic :: Scientific/Engineering
27
28
  Classifier: Topic :: Scientific/Engineering :: Information Analysis
28
29
  Classifier: Topic :: Scientific/Engineering :: Mathematics
29
30
  Classifier: Topic :: Scientific/Engineering :: Physics
30
31
  Classifier: Typing :: Typed
31
32
  Requires-Python: >=3.8
32
- Requires-Dist: numpy<2.1,>=1.13.3
33
+ Requires-Dist: numpy>=1.13.3
33
34
  Requires-Dist: packaging>=19
34
35
  Provides-Extra: awkward
35
36
  Requires-Dist: awkward>=2; extra == 'awkward'
@@ -37,7 +38,7 @@ Provides-Extra: dev
37
38
  Requires-Dist: awkward>=2; extra == 'dev'
38
39
  Requires-Dist: dask-awkward; extra == 'dev'
39
40
  Requires-Dist: nox; extra == 'dev'
40
- Requires-Dist: numba>=0.57; (python_version < '3.12') and extra == 'dev'
41
+ Requires-Dist: numba>=0.57; (python_version < '3.13') and extra == 'dev'
41
42
  Requires-Dist: papermill>=2.4; extra == 'dev'
42
43
  Requires-Dist: pytest-cov>=3; extra == 'dev'
43
44
  Requires-Dist: pytest-doctestplus; extra == 'dev'
@@ -53,7 +54,7 @@ Requires-Dist: sphinx-copybutton; extra == 'docs'
53
54
  Requires-Dist: sphinx-math-dollar; extra == 'docs'
54
55
  Requires-Dist: sphinx>=4; extra == 'docs'
55
56
  Provides-Extra: numba
56
- Requires-Dist: numba>=0.57; (python_version < '3.12') and extra == 'numba'
57
+ Requires-Dist: numba>=0.57; (python_version < '3.13') and extra == 'numba'
57
58
  Provides-Extra: sympy
58
59
  Requires-Dist: sympy; extra == 'sympy'
59
60
  Provides-Extra: test
@@ -2,6 +2,22 @@
2
2
 
3
3
  ## Version 1.5
4
4
 
5
+ ### Version 1.5.2
6
+
7
+ #### Maintenance
8
+
9
+ - ci: 3.13, attestations, and some modernization [#511][]
10
+
11
+ [#511]: https://github.com/scikit-hep/vector/pull/511
12
+
13
+ ### Version 1.5.1
14
+
15
+ #### Fixes
16
+
17
+ - fix: uncap numpy [#502][]
18
+
19
+ [#502]: https://github.com/scikit-hep/vector/pull/502
20
+
5
21
  ### Version 1.5.0
6
22
 
7
23
  #### Breaking
@@ -12,17 +28,25 @@
12
28
 
13
29
  ## Version 1.4
14
30
 
31
+ ### Version 1.4.3
32
+
33
+ #### Fixes
34
+
35
+ - fix: uncap numpy [#502][]
36
+
37
+ [#502]: https://github.com/scikit-hep/vector/pull/502
38
+
15
39
  ### Version 1.4.2
16
40
 
17
41
  #### Fixes
18
42
 
19
- - fix: depend on numpy<2.1 to support numba
20
- - fix: fix ci for awkward v1.x (numpy v2 is out)
21
- - fix: sympy tests (sympy v1.13)
43
+ - fix: depend on numpy<2.1 to support numba [#476][]
44
+ - fix: fix ci for awkward v1.x (numpy v2 is out) [#479][]
45
+ - fix: sympy tests (sympy v1.13) [#485][]
22
46
 
23
47
  #### Documentation
24
48
 
25
- - docs: update intro notebook + readme
49
+ - docs: update intro notebook + readme [#489][]
26
50
 
27
51
  [#476]: https://github.com/scikit-hep/vector/pull/476
28
52
  [#479]: https://github.com/scikit-hep/vector/pull/479
@@ -5,9 +5,10 @@ from pathlib import Path
5
5
  import nox
6
6
 
7
7
  nox.options.sessions = ["lint", "lite", "tests", "doctests"]
8
+ nox.needs_version = ">=2024.4.15"
9
+ nox.options.default_venv_backend = "uv|virtualenv"
8
10
 
9
- ALL_PYTHON = ["3.8", "3.9", "3.10", "3.11", "3.12"]
10
-
11
+ ALL_PYTHON = ["3.8", "3.9", "3.10", "3.11", "3.12", "3.13"]
11
12
  DIR = Path(__file__).parent.resolve()
12
13
 
13
14
 
@@ -21,14 +22,14 @@ def lint(session: nox.Session) -> None:
21
22
  @nox.session(reuse_venv=True)
22
23
  def pylint(session: nox.Session) -> None:
23
24
  """Run pylint."""
24
- session.install("pylint~=2.14.0")
25
+ session.install("pylint")
25
26
  session.install("-e", ".")
26
27
  session.run("pylint", "src/vector/", *session.posargs)
27
28
 
28
29
 
29
30
  @nox.session(reuse_venv=True, python=ALL_PYTHON)
30
31
  def lite(session: nox.Session) -> None:
31
- """Run the linter."""
32
+ """Run lightweight tests."""
32
33
  session.install("-e", ".[test]")
33
34
  session.run("pytest", "--ignore", "tests/test_notebooks.py", *session.posargs)
34
35
 
@@ -45,7 +46,7 @@ def tests(session: nox.Session) -> None:
45
46
  )
46
47
 
47
48
 
48
- @nox.session(reuse_venv=True, python=ALL_PYTHON)
49
+ @nox.session(reuse_venv=True, python=ALL_PYTHON, default=False)
49
50
  def coverage(session: nox.Session) -> None:
50
51
  """Run tests and compute coverage."""
51
52
  session.posargs.append("--cov=vector")
@@ -59,7 +60,7 @@ def doctests(session: nox.Session) -> None:
59
60
  session.run("pytest", "--doctest-plus", "src/vector/", *session.posargs)
60
61
 
61
62
 
62
- @nox.session(reuse_venv=True)
63
+ @nox.session(reuse_venv=True, default=False)
63
64
  def notebooks(session: nox.Session) -> None:
64
65
  """Run the notebook tests"""
65
66
  session.install("-e", ".[awkward,numba,test,sympy]")
@@ -67,7 +68,7 @@ def notebooks(session: nox.Session) -> None:
67
68
  session.run("pytest", "tests/test_notebooks.py", *session.posargs)
68
69
 
69
70
 
70
- @nox.session(reuse_venv=True)
71
+ @nox.session(reuse_venv=True, default=False)
71
72
  def docs(session: nox.Session) -> None:
72
73
  """Build the docs. Pass "serve" to serve."""
73
74
  session.install("-e", ".[docs]")
@@ -82,7 +83,7 @@ def docs(session: nox.Session) -> None:
82
83
  print("Unsupported argument to docs")
83
84
 
84
85
 
85
- @nox.session(reuse_venv=True)
86
+ @nox.session(reuse_venv=True, default=False)
86
87
  def build(session: nox.Session) -> None:
87
88
  """Build an SDist and wheel."""
88
89
  session.install("build")
@@ -32,6 +32,7 @@ classifiers = [
32
32
  "Programming Language :: Python :: 3.10",
33
33
  "Programming Language :: Python :: 3.11",
34
34
  "Programming Language :: Python :: 3.12",
35
+ "Programming Language :: Python :: 3.13",
35
36
  "Topic :: Scientific/Engineering",
36
37
  "Topic :: Scientific/Engineering :: Information Analysis",
37
38
  "Topic :: Scientific/Engineering :: Mathematics",
@@ -42,7 +43,7 @@ dynamic = [
42
43
  "version",
43
44
  ]
44
45
  dependencies = [
45
- "numpy>=1.13.3,<2.1",
46
+ "numpy>=1.13.3",
46
47
  "packaging>=19",
47
48
  ]
48
49
  optional-dependencies.awkward = [
@@ -52,7 +53,7 @@ optional-dependencies.dev = [
52
53
  "awkward>=2",
53
54
  "dask-awkward",
54
55
  "nox",
55
- "numba>=0.57; python_version<'3.12'",
56
+ "numba>=0.57; python_version<'3.13'",
56
57
  "papermill>=2.4",
57
58
  "pytest>=6",
58
59
  "pytest-cov>=3",
@@ -70,7 +71,7 @@ optional-dependencies.docs = [
70
71
  "sphinx-math-dollar",
71
72
  ]
72
73
  optional-dependencies.numba = [
73
- "numba>=0.57; python_version<'3.12'",
74
+ "numba>=0.57; python_version<'3.13'",
74
75
  ]
75
76
  optional-dependencies.sympy = [
76
77
  "sympy",
@@ -98,11 +99,6 @@ entry-points.numba_extensions.init = "vector:register_numba"
98
99
  version.source = "vcs"
99
100
  build.hooks.vcs.version-file = "src/vector/_version.py"
100
101
 
101
- [tool.ruff]
102
- src = [
103
- "src",
104
- ]
105
-
106
102
  [tool.ruff.lint]
107
103
  extend-select = [
108
104
  "B", # flake8-bugbear
@@ -122,6 +118,7 @@ extend-select = [
122
118
  ignore = [
123
119
  "PLR09", # Too many X
124
120
  "PLR2004", # Magic values
121
+ "ISC001", # Conflicts with formatter
125
122
  ]
126
123
  typing-modules = [
127
124
  "vector._typeutils",
@@ -172,6 +169,7 @@ messages_control.disable = [
172
169
  "too-many-locals",
173
170
  "too-many-return-statements",
174
171
  "too-many-statements",
172
+ "too-many-positional-arguments",
175
173
  "wrong-import-position",
176
174
  "duplicate-code",
177
175
  "import-outside-toplevel",
@@ -206,6 +204,8 @@ messages_control.disable = [
206
204
  "unknown-option-value",
207
205
  "no-else-raise",
208
206
  "unidiomatic-typecheck",
207
+ "possibly-used-before-assignment", # TODO: Fix this
208
+ "used-before-assignment", # TODO: Fix this
209
209
  ]
210
210
 
211
211
  [tool.pytest.ini_options]
@@ -32,7 +32,7 @@ from vector._methods import (
32
32
  Vector4D,
33
33
  dim,
34
34
  )
35
- from vector._version import __version__ # type: ignore[import-not-found]
35
+ from vector._version import version as __version__
36
36
  from vector.backends.awkward_constructors import Array, zip
37
37
  from vector.backends.awkward_constructors import Array as awk
38
38
  from vector.backends.numpy import (
@@ -149,7 +149,7 @@ class VectorProtocol:
149
149
  """
150
150
 
151
151
  @property
152
- def lib(self) -> Module: ... # pylint: disable=multiple-statements
152
+ def lib(self) -> Module: ...
153
153
 
154
154
  def _wrap_result(
155
155
  self,
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '1.5.0'
16
- __version_tuple__ = version_tuple = (1, 5, 0)
15
+ __version__ = version = '1.5.2'
16
+ __version_tuple__ = version_tuple = (1, 5, 2)
@@ -215,38 +215,38 @@ def _getitem(
215
215
  )
216
216
  if hasattr(array, "_longitudinal_type"):
217
217
  longitudinal = array._longitudinal_type.ObjectClass(
218
- *(out[x] for x in _coordinate_class_to_names[_ltype(array)]) # type: ignore[arg-type]
218
+ *(out[x] for x in _coordinate_class_to_names[_ltype(array)])
219
219
  )
220
220
  if hasattr(array, "_temporal_type"):
221
221
  temporal = array._temporal_type.ObjectClass(
222
- *(out[x] for x in _coordinate_class_to_names[_ttype(array)]) # type: ignore[arg-type]
222
+ *(out[x] for x in _coordinate_class_to_names[_ttype(array)])
223
223
  )
224
224
  if temporal is not None:
225
225
  return array.ObjectClass(
226
226
  azimuthal=azimuthal,
227
- longitudinal=longitudinal, # type: ignore[arg-type, return-value]
227
+ longitudinal=longitudinal, # type: ignore[arg-type]
228
228
  temporal=temporal, # type: ignore[arg-type]
229
229
  )
230
230
  elif longitudinal is not None:
231
- return array.ObjectClass(azimuthal=azimuthal, longitudinal=longitudinal) # type: ignore[arg-type, return-value]
231
+ return array.ObjectClass(azimuthal=azimuthal, longitudinal=longitudinal) # type: ignore[arg-type]
232
232
  elif azimuthal is not None:
233
- return array.ObjectClass(azimuthal=azimuthal) # type: ignore[return-value]
233
+ return array.ObjectClass(azimuthal=azimuthal)
234
234
  elif issubclass(array.ObjectClass, vector.backends.object.AzimuthalObject):
235
- return array.ObjectClass(*tuple(out)[:2]) # type: ignore[arg-type, return-value]
235
+ return array.ObjectClass(*tuple(out)[:2]) # type: ignore[arg-type]
236
236
  elif issubclass(array.ObjectClass, vector.backends.object.LongitudinalObject):
237
237
  coords = (
238
238
  out.view(numpy.ndarray)[0]
239
239
  if len(out) == 1 # type: ignore[arg-type]
240
240
  else out.view(numpy.ndarray)[2]
241
241
  )
242
- return array.ObjectClass(coords) # type: ignore[return-value]
242
+ return array.ObjectClass(coords)
243
243
  else:
244
244
  coords = (
245
245
  out.view(numpy.ndarray)[0]
246
246
  if len(out) == 1 # type: ignore[arg-type]
247
247
  else out.view(numpy.ndarray)[3]
248
248
  )
249
- return array.ObjectClass(coords) # type: ignore[return-value]
249
+ return array.ObjectClass(coords)
250
250
 
251
251
 
252
252
  def _array_repr(
@@ -870,7 +870,6 @@ class VectorNumpy(Vector, GetItem):
870
870
  ) -> SameVectorNumpyType:
871
871
  return typing.cast(
872
872
  SameVectorNumpyType,
873
- # pylint: disable-next=unexpected-keyword-arg
874
873
  numpy.sum(
875
874
  self,
876
875
  axis=axis,
@@ -879,14 +878,14 @@ class VectorNumpy(Vector, GetItem):
879
878
  keepdims=keepdims,
880
879
  initial=initial,
881
880
  where=where,
882
- ), # type: ignore[call-overload]
881
+ ),
883
882
  )
884
883
 
885
884
  def __eq__(self, other: typing.Any) -> typing.Any:
886
- return numpy.equal(self, other) # type: ignore[call-overload]
885
+ return numpy.equal(self, other)
887
886
 
888
887
  def __ne__(self, other: typing.Any) -> typing.Any:
889
- return numpy.not_equal(self, other) # type: ignore[call-overload]
888
+ return numpy.not_equal(self, other)
890
889
 
891
890
  def __reduce__(self) -> str | tuple[typing.Any, ...]:
892
891
  pickled_state = super().__reduce__()
@@ -1197,7 +1196,7 @@ class VectorNumpy2D(VectorNumpy, Planar, Vector2D, FloatArray): # type: ignore[
1197
1196
  AzimuthalNumpyXY([(1.1, 2.1), (1.2, 2.2), (1.3, 2.3), (1.4, 2.4),
1198
1197
  (1.5, 2.5)], dtype=[('x', '<f8'), ('y', '<f8')])
1199
1198
  """
1200
- return self.view(self._azimuthal_type) # type: ignore[return-value]
1199
+ return self.view(self._azimuthal_type)
1201
1200
 
1202
1201
  def _wrap_result(
1203
1202
  self,
@@ -1305,7 +1304,7 @@ class VectorNumpy2D(VectorNumpy, Planar, Vector2D, FloatArray): # type: ignore[
1305
1304
  return _setitem(self, where, what, False)
1306
1305
 
1307
1306
 
1308
- class MomentumNumpy2D(PlanarMomentum, VectorNumpy2D): # type: ignore[misc]
1307
+ class MomentumNumpy2D(PlanarMomentum, VectorNumpy2D):
1309
1308
  """
1310
1309
  Two dimensional momentum vector class for the NumPy backend. This class can be directly
1311
1310
  used to construct two dimensional NumPy momentum vectors. For two dimensional
@@ -1427,13 +1426,13 @@ class VectorNumpy3D(VectorNumpy, Spatial, Vector3D, FloatArray): # type: ignore
1427
1426
  def azimuthal(self) -> AzimuthalNumpy:
1428
1427
  """Returns the azimuthal type class for the given ``VectorNumpy3D`` object."""
1429
1428
  # TODO: Add an example here - see https://github.com/scikit-hep/vector/issues/194
1430
- return self.view(self._azimuthal_type) # type: ignore[return-value]
1429
+ return self.view(self._azimuthal_type)
1431
1430
 
1432
1431
  @property
1433
1432
  def longitudinal(self) -> LongitudinalNumpy:
1434
1433
  """Returns the longitudinal type class for the given ``VectorNumpy3D`` object."""
1435
1434
  # TODO: Add an example here - see https://github.com/scikit-hep/vector/issues/194
1436
- return self.view(self._longitudinal_type) # type: ignore[return-value]
1435
+ return self.view(self._longitudinal_type)
1437
1436
 
1438
1437
  def _wrap_result(
1439
1438
  self,
@@ -1562,7 +1561,7 @@ class VectorNumpy3D(VectorNumpy, Spatial, Vector3D, FloatArray): # type: ignore
1562
1561
  return _setitem(self, where, what, False)
1563
1562
 
1564
1563
 
1565
- class MomentumNumpy3D(SpatialMomentum, VectorNumpy3D): # type: ignore[misc]
1564
+ class MomentumNumpy3D(SpatialMomentum, VectorNumpy3D):
1566
1565
  """
1567
1566
  Three dimensional momentum vector class for the NumPy backend. This class can be directly
1568
1567
  used to construct three dimensional NumPy momentum vectors. For three dimensional
@@ -1707,19 +1706,19 @@ class VectorNumpy4D(VectorNumpy, Lorentz, Vector4D, FloatArray): # type: ignore
1707
1706
  def azimuthal(self) -> AzimuthalNumpy:
1708
1707
  """Returns the azimuthal type class for the given ``VectorNumpy4D`` object."""
1709
1708
  # TODO: Add an example here - see https://github.com/scikit-hep/vector/issues/194
1710
- return self.view(self._azimuthal_type) # type: ignore[return-value]
1709
+ return self.view(self._azimuthal_type)
1711
1710
 
1712
1711
  @property
1713
1712
  def longitudinal(self) -> LongitudinalNumpy:
1714
1713
  """Returns the longitudinal type class for the given ``Vectornumpy4D`` object."""
1715
1714
  # TODO: Add an example here - see https://github.com/scikit-hep/vector/issues/194
1716
- return self.view(self._longitudinal_type) # type: ignore[return-value]
1715
+ return self.view(self._longitudinal_type)
1717
1716
 
1718
1717
  @property
1719
1718
  def temporal(self) -> TemporalNumpy:
1720
1719
  """Returns the azimuthal type class for the given ``VectorNumpy4D`` object."""
1721
1720
  # TODO: Add an example here - see https://github.com/scikit-hep/vector/issues/194
1722
- return self.view(self._temporal_type) # type: ignore[return-value]
1721
+ return self.view(self._temporal_type)
1723
1722
 
1724
1723
  def _wrap_result(
1725
1724
  self,
@@ -1882,7 +1881,7 @@ class VectorNumpy4D(VectorNumpy, Lorentz, Vector4D, FloatArray): # type: ignore
1882
1881
  return _setitem(self, where, what, False)
1883
1882
 
1884
1883
 
1885
- class MomentumNumpy4D(LorentzMomentum, VectorNumpy4D): # type: ignore[misc]
1884
+ class MomentumNumpy4D(LorentzMomentum, VectorNumpy4D):
1886
1885
  """
1887
1886
  Four dimensional momentum vector class for the NumPy backend. This class can be directly
1888
1887
  used to construct four dimensional NumPy momentum vectors. For three dimensional