vector 1.4.0__tar.gz → 1.4.1__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.1}/.github/workflows/cd.yml +25 -3
  2. {vector-1.4.0 → vector-1.4.1}/.github/workflows/ci.yml +1 -1
  3. {vector-1.4.0 → vector-1.4.1}/.pre-commit-config.yaml +2 -7
  4. {vector-1.4.0 → vector-1.4.1}/PKG-INFO +99 -1
  5. {vector-1.4.0 → vector-1.4.1}/README.md +98 -0
  6. {vector-1.4.0 → vector-1.4.1}/docs/changelog.md +25 -0
  7. {vector-1.4.0 → vector-1.4.1}/docs/usage/intro.ipynb +551 -163
  8. {vector-1.4.0 → vector-1.4.1}/pyproject.toml +76 -59
  9. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/spatial/deltaangle.py +277 -42
  10. {vector-1.4.0 → vector-1.4.1}/src/vector/_lib.py +5 -5
  11. {vector-1.4.0 → vector-1.4.1}/src/vector/_version.py +2 -2
  12. {vector-1.4.0 → vector-1.4.1}/src/vector/backends/numpy.py +110 -1
  13. vector-1.4.1/tests/compute/lorentz/test_is_lightlike.py +200 -0
  14. vector-1.4.1/tests/compute/lorentz/test_is_spacelike.py +284 -0
  15. vector-1.4.1/tests/compute/lorentz/test_is_timelike.py +284 -0
  16. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/test_scale.py +0 -14
  17. vector-1.4.1/tests/compute/test_is_antiparallel.py +124 -0
  18. vector-1.4.1/tests/compute/test_is_parallel.py +124 -0
  19. vector-1.4.1/tests/compute/test_is_perpendicular.py +124 -0
  20. {vector-1.4.0 → vector-1.4.1}/tests/test_compute_features.py +1 -0
  21. vector-1.4.1/tests/test_issues.py +176 -0
  22. vector-1.4.0/tests/test_issues.py +0 -63
  23. {vector-1.4.0 → vector-1.4.1}/.all-contributorsrc +0 -0
  24. {vector-1.4.0 → vector-1.4.1}/.git_archival.txt +0 -0
  25. {vector-1.4.0 → vector-1.4.1}/.gitattributes +0 -0
  26. {vector-1.4.0 → vector-1.4.1}/.github/CONTRIBUTING.md +0 -0
  27. {vector-1.4.0 → vector-1.4.1}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  28. {vector-1.4.0 → vector-1.4.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  29. {vector-1.4.0 → vector-1.4.1}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  30. {vector-1.4.0 → vector-1.4.1}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  31. {vector-1.4.0 → vector-1.4.1}/.github/codecov.yml +0 -0
  32. {vector-1.4.0 → vector-1.4.1}/.github/dependabot.yml +0 -0
  33. {vector-1.4.0 → vector-1.4.1}/.github/matchers/pylint.json +0 -0
  34. {vector-1.4.0 → vector-1.4.1}/.github/workflows/notebooks.yml +0 -0
  35. {vector-1.4.0 → vector-1.4.1}/.gitignore +0 -0
  36. {vector-1.4.0 → vector-1.4.1}/.readthedocs.yml +0 -0
  37. {vector-1.4.0 → vector-1.4.1}/CITATION.cff +0 -0
  38. {vector-1.4.0 → vector-1.4.1}/LICENSE +0 -0
  39. {vector-1.4.0 → vector-1.4.1}/docs/Makefile +0 -0
  40. {vector-1.4.0 → vector-1.4.1}/docs/_images/LogoSrc.svg +0 -0
  41. {vector-1.4.0 → vector-1.4.1}/docs/_images/vector-logo.png +0 -0
  42. {vector-1.4.0 → vector-1.4.1}/docs/api/backends/vector.backends._numba.rst +0 -0
  43. {vector-1.4.0 → vector-1.4.1}/docs/api/backends/vector.backends._numba_object.rst +0 -0
  44. {vector-1.4.0 → vector-1.4.1}/docs/api/backends/vector.backends.awkward.rst +0 -0
  45. {vector-1.4.0 → vector-1.4.1}/docs/api/backends/vector.backends.awkward_constructors.rst +0 -0
  46. {vector-1.4.0 → vector-1.4.1}/docs/api/backends/vector.backends.numba_numpy.rst +0 -0
  47. {vector-1.4.0 → vector-1.4.1}/docs/api/backends/vector.backends.numpy.rst +0 -0
  48. {vector-1.4.0 → vector-1.4.1}/docs/api/backends/vector.backends.object.rst +0 -0
  49. {vector-1.4.0 → vector-1.4.1}/docs/api/backends/vector.backends.rst +0 -0
  50. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/lorentz/vector._compute.lorentz.Et.rst +0 -0
  51. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/lorentz/vector._compute.lorentz.Et2.rst +0 -0
  52. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/lorentz/vector._compute.lorentz.Mt.rst +0 -0
  53. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/lorentz/vector._compute.lorentz.Mt2.rst +0 -0
  54. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/lorentz/vector._compute.lorentz.add.rst +0 -0
  55. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/lorentz/vector._compute.lorentz.beta.rst +0 -0
  56. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/lorentz/vector._compute.lorentz.boostX_beta.rst +0 -0
  57. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/lorentz/vector._compute.lorentz.boostX_gamma.rst +0 -0
  58. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/lorentz/vector._compute.lorentz.boostY_beta.rst +0 -0
  59. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/lorentz/vector._compute.lorentz.boostY_gamma.rst +0 -0
  60. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/lorentz/vector._compute.lorentz.boostZ_beta.rst +0 -0
  61. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/lorentz/vector._compute.lorentz.boostZ_gamma.rst +0 -0
  62. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/lorentz/vector._compute.lorentz.boost_beta3.rst +0 -0
  63. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/lorentz/vector._compute.lorentz.boost_p4.rst +0 -0
  64. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/lorentz/vector._compute.lorentz.deltaRapidityPhi.rst +0 -0
  65. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/lorentz/vector._compute.lorentz.deltaRapidityPhi2.rst +0 -0
  66. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/lorentz/vector._compute.lorentz.dot.rst +0 -0
  67. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/lorentz/vector._compute.lorentz.equal.rst +0 -0
  68. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/lorentz/vector._compute.lorentz.gamma.rst +0 -0
  69. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/lorentz/vector._compute.lorentz.is_lightlike.rst +0 -0
  70. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/lorentz/vector._compute.lorentz.is_spacelike.rst +0 -0
  71. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/lorentz/vector._compute.lorentz.is_timelike.rst +0 -0
  72. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/lorentz/vector._compute.lorentz.isclose.rst +0 -0
  73. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/lorentz/vector._compute.lorentz.not_equal.rst +0 -0
  74. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/lorentz/vector._compute.lorentz.rapidity.rst +0 -0
  75. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/lorentz/vector._compute.lorentz.rst +0 -0
  76. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/lorentz/vector._compute.lorentz.scale.rst +0 -0
  77. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/lorentz/vector._compute.lorentz.subtract.rst +0 -0
  78. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/lorentz/vector._compute.lorentz.t.rst +0 -0
  79. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/lorentz/vector._compute.lorentz.t2.rst +0 -0
  80. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/lorentz/vector._compute.lorentz.tau.rst +0 -0
  81. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/lorentz/vector._compute.lorentz.tau2.rst +0 -0
  82. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/lorentz/vector._compute.lorentz.to_beta3.rst +0 -0
  83. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/lorentz/vector._compute.lorentz.transform4D.rst +0 -0
  84. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/lorentz/vector._compute.lorentz.unit.rst +0 -0
  85. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/planar/vector._compute.planar.add.rst +0 -0
  86. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/planar/vector._compute.planar.deltaphi.rst +0 -0
  87. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/planar/vector._compute.planar.dot.rst +0 -0
  88. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/planar/vector._compute.planar.equal.rst +0 -0
  89. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/planar/vector._compute.planar.is_antiparallel.rst +0 -0
  90. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/planar/vector._compute.planar.is_parallel.rst +0 -0
  91. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/planar/vector._compute.planar.is_perpendicular.rst +0 -0
  92. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/planar/vector._compute.planar.isclose.rst +0 -0
  93. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/planar/vector._compute.planar.not_equal.rst +0 -0
  94. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/planar/vector._compute.planar.phi.rst +0 -0
  95. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/planar/vector._compute.planar.rho.rst +0 -0
  96. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/planar/vector._compute.planar.rho2.rst +0 -0
  97. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/planar/vector._compute.planar.rotateZ.rst +0 -0
  98. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/planar/vector._compute.planar.rst +0 -0
  99. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/planar/vector._compute.planar.scale.rst +0 -0
  100. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/planar/vector._compute.planar.subtract.rst +0 -0
  101. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/planar/vector._compute.planar.transform2D.rst +0 -0
  102. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/planar/vector._compute.planar.unit.rst +0 -0
  103. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/planar/vector._compute.planar.x.rst +0 -0
  104. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/planar/vector._compute.planar.y.rst +0 -0
  105. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/spatial/vector._compute.spatial.add.rst +0 -0
  106. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/spatial/vector._compute.spatial.costheta.rst +0 -0
  107. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/spatial/vector._compute.spatial.cottheta.rst +0 -0
  108. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/spatial/vector._compute.spatial.cross.rst +0 -0
  109. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/spatial/vector._compute.spatial.deltaR.rst +0 -0
  110. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/spatial/vector._compute.spatial.deltaR2.rst +0 -0
  111. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/spatial/vector._compute.spatial.deltaangle.rst +0 -0
  112. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/spatial/vector._compute.spatial.deltaeta.rst +0 -0
  113. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/spatial/vector._compute.spatial.dot.rst +0 -0
  114. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/spatial/vector._compute.spatial.equal.rst +0 -0
  115. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/spatial/vector._compute.spatial.eta.rst +0 -0
  116. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/spatial/vector._compute.spatial.is_antiparallel.rst +0 -0
  117. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/spatial/vector._compute.spatial.is_parallel.rst +0 -0
  118. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/spatial/vector._compute.spatial.is_perpendicular.rst +0 -0
  119. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/spatial/vector._compute.spatial.isclose.rst +0 -0
  120. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/spatial/vector._compute.spatial.mag.rst +0 -0
  121. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/spatial/vector._compute.spatial.mag2.rst +0 -0
  122. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/spatial/vector._compute.spatial.not_equal.rst +0 -0
  123. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/spatial/vector._compute.spatial.rotateX.rst +0 -0
  124. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/spatial/vector._compute.spatial.rotateY.rst +0 -0
  125. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/spatial/vector._compute.spatial.rotate_axis.rst +0 -0
  126. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/spatial/vector._compute.spatial.rotate_euler.rst +0 -0
  127. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/spatial/vector._compute.spatial.rotate_quaternion.rst +0 -0
  128. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/spatial/vector._compute.spatial.rst +0 -0
  129. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/spatial/vector._compute.spatial.scale.rst +0 -0
  130. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/spatial/vector._compute.spatial.subtract.rst +0 -0
  131. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/spatial/vector._compute.spatial.theta.rst +0 -0
  132. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/spatial/vector._compute.spatial.transform3D.rst +0 -0
  133. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/spatial/vector._compute.spatial.unit.rst +0 -0
  134. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/spatial/vector._compute.spatial.z.rst +0 -0
  135. {vector-1.4.0 → vector-1.4.1}/docs/api/compute/vector._compute.rst +0 -0
  136. {vector-1.4.0 → vector-1.4.1}/docs/api/inheritance.svg +0 -0
  137. {vector-1.4.0 → vector-1.4.1}/docs/api/modules.rst +0 -0
  138. {vector-1.4.0 → vector-1.4.1}/docs/api/vector._methods.rst +0 -0
  139. {vector-1.4.0 → vector-1.4.1}/docs/api/vector._typeutils.rst +0 -0
  140. {vector-1.4.0 → vector-1.4.1}/docs/api/vector.rst +0 -0
  141. {vector-1.4.0 → vector-1.4.1}/docs/conf.py +0 -0
  142. {vector-1.4.0 → vector-1.4.1}/docs/index.rst +0 -0
  143. {vector-1.4.0 → vector-1.4.1}/docs/make.bat +0 -0
  144. {vector-1.4.0 → vector-1.4.1}/docs/usage/structure.md +0 -0
  145. {vector-1.4.0 → vector-1.4.1}/environment.yml +0 -0
  146. {vector-1.4.0 → vector-1.4.1}/noxfile.py +0 -0
  147. {vector-1.4.0 → vector-1.4.1}/src/vector/__init__.py +0 -0
  148. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/__init__.py +0 -0
  149. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/lorentz/Et.py +0 -0
  150. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/lorentz/Et2.py +0 -0
  151. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/lorentz/Mt.py +0 -0
  152. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/lorentz/Mt2.py +0 -0
  153. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/lorentz/__init__.py +0 -0
  154. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/lorentz/add.py +0 -0
  155. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/lorentz/beta.py +0 -0
  156. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/lorentz/boostX_beta.py +0 -0
  157. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/lorentz/boostX_gamma.py +0 -0
  158. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/lorentz/boostY_beta.py +0 -0
  159. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/lorentz/boostY_gamma.py +0 -0
  160. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/lorentz/boostZ_beta.py +0 -0
  161. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/lorentz/boostZ_gamma.py +0 -0
  162. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/lorentz/boost_beta3.py +0 -0
  163. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/lorentz/boost_p4.py +0 -0
  164. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/lorentz/deltaRapidityPhi.py +0 -0
  165. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/lorentz/deltaRapidityPhi2.py +0 -0
  166. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/lorentz/dot.py +0 -0
  167. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/lorentz/equal.py +0 -0
  168. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/lorentz/gamma.py +0 -0
  169. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/lorentz/is_lightlike.py +0 -0
  170. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/lorentz/is_spacelike.py +0 -0
  171. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/lorentz/is_timelike.py +0 -0
  172. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/lorentz/isclose.py +0 -0
  173. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/lorentz/not_equal.py +0 -0
  174. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/lorentz/rapidity.py +0 -0
  175. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/lorentz/scale.py +0 -0
  176. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/lorentz/subtract.py +0 -0
  177. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/lorentz/t.py +0 -0
  178. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/lorentz/t2.py +0 -0
  179. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/lorentz/tau.py +0 -0
  180. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/lorentz/tau2.py +0 -0
  181. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/lorentz/to_beta3.py +0 -0
  182. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/lorentz/transform4D.py +0 -0
  183. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/lorentz/unit.py +0 -0
  184. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/planar/__init__.py +0 -0
  185. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/planar/add.py +0 -0
  186. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/planar/deltaphi.py +0 -0
  187. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/planar/dot.py +0 -0
  188. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/planar/equal.py +0 -0
  189. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/planar/is_antiparallel.py +0 -0
  190. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/planar/is_parallel.py +0 -0
  191. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/planar/is_perpendicular.py +0 -0
  192. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/planar/isclose.py +0 -0
  193. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/planar/not_equal.py +0 -0
  194. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/planar/phi.py +0 -0
  195. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/planar/rho.py +0 -0
  196. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/planar/rho2.py +0 -0
  197. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/planar/rotateZ.py +0 -0
  198. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/planar/scale.py +0 -0
  199. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/planar/subtract.py +0 -0
  200. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/planar/transform2D.py +0 -0
  201. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/planar/unit.py +0 -0
  202. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/planar/x.py +0 -0
  203. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/planar/y.py +0 -0
  204. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/spatial/__init__.py +0 -0
  205. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/spatial/add.py +0 -0
  206. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/spatial/costheta.py +0 -0
  207. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/spatial/cottheta.py +0 -0
  208. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/spatial/cross.py +0 -0
  209. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/spatial/deltaR.py +0 -0
  210. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/spatial/deltaR2.py +0 -0
  211. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/spatial/deltaeta.py +0 -0
  212. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/spatial/dot.py +0 -0
  213. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/spatial/equal.py +0 -0
  214. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/spatial/eta.py +0 -0
  215. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/spatial/is_antiparallel.py +0 -0
  216. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/spatial/is_parallel.py +0 -0
  217. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/spatial/is_perpendicular.py +0 -0
  218. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/spatial/isclose.py +0 -0
  219. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/spatial/mag.py +0 -0
  220. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/spatial/mag2.py +0 -0
  221. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/spatial/not_equal.py +0 -0
  222. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/spatial/rotateX.py +0 -0
  223. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/spatial/rotateY.py +0 -0
  224. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/spatial/rotate_axis.py +0 -0
  225. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/spatial/rotate_euler.py +0 -0
  226. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/spatial/rotate_quaternion.py +0 -0
  227. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/spatial/scale.py +0 -0
  228. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/spatial/subtract.py +0 -0
  229. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/spatial/theta.py +0 -0
  230. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/spatial/transform3D.py +0 -0
  231. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/spatial/unit.py +0 -0
  232. {vector-1.4.0 → vector-1.4.1}/src/vector/_compute/spatial/z.py +0 -0
  233. {vector-1.4.0 → vector-1.4.1}/src/vector/_methods.py +0 -0
  234. {vector-1.4.0 → vector-1.4.1}/src/vector/_typeutils.py +0 -0
  235. {vector-1.4.0 → vector-1.4.1}/src/vector/backends/__init__.py +0 -0
  236. {vector-1.4.0 → vector-1.4.1}/src/vector/backends/_numba.py +0 -0
  237. {vector-1.4.0 → vector-1.4.1}/src/vector/backends/_numba_object.py +0 -0
  238. {vector-1.4.0 → vector-1.4.1}/src/vector/backends/awkward.py +0 -0
  239. {vector-1.4.0 → vector-1.4.1}/src/vector/backends/awkward_constructors.py +0 -0
  240. {vector-1.4.0 → vector-1.4.1}/src/vector/backends/numba_numpy.py +0 -0
  241. {vector-1.4.0 → vector-1.4.1}/src/vector/backends/object.py +0 -0
  242. {vector-1.4.0 → vector-1.4.1}/src/vector/backends/sympy.py +0 -0
  243. {vector-1.4.0 → vector-1.4.1}/src/vector/py.typed +0 -0
  244. {vector-1.4.0 → vector-1.4.1}/src/vector/version.pyi +0 -0
  245. {vector-1.4.0 → vector-1.4.1}/tests/__init__.py +0 -0
  246. {vector-1.4.0 → vector-1.4.1}/tests/backends/__init__.py +0 -0
  247. {vector-1.4.0 → vector-1.4.1}/tests/backends/test_awkward.py +0 -0
  248. {vector-1.4.0 → vector-1.4.1}/tests/backends/test_awkward_numba.py +0 -0
  249. {vector-1.4.0 → vector-1.4.1}/tests/backends/test_dask_awkward.py +0 -0
  250. {vector-1.4.0 → vector-1.4.1}/tests/backends/test_numba_numpy.py +0 -0
  251. {vector-1.4.0 → vector-1.4.1}/tests/backends/test_numba_object.py +0 -0
  252. {vector-1.4.0 → vector-1.4.1}/tests/backends/test_numpy.py +0 -0
  253. {vector-1.4.0 → vector-1.4.1}/tests/backends/test_object.py +0 -0
  254. {vector-1.4.0 → vector-1.4.1}/tests/backends/test_operators.py +0 -0
  255. {vector-1.4.0 → vector-1.4.1}/tests/backends/test_sympy.py +0 -0
  256. {vector-1.4.0 → vector-1.4.1}/tests/compute/__init__.py +0 -0
  257. {vector-1.4.0 → vector-1.4.1}/tests/compute/lorentz/__init__.py +0 -0
  258. {vector-1.4.0 → vector-1.4.1}/tests/compute/lorentz/test_Et.py +0 -0
  259. {vector-1.4.0 → vector-1.4.1}/tests/compute/lorentz/test_Et2.py +0 -0
  260. {vector-1.4.0 → vector-1.4.1}/tests/compute/lorentz/test_Mt.py +0 -0
  261. {vector-1.4.0 → vector-1.4.1}/tests/compute/lorentz/test_Mt2.py +0 -0
  262. {vector-1.4.0 → vector-1.4.1}/tests/compute/lorentz/test_beta.py +0 -0
  263. {vector-1.4.0 → vector-1.4.1}/tests/compute/lorentz/test_boostX_beta.py +0 -0
  264. {vector-1.4.0 → vector-1.4.1}/tests/compute/lorentz/test_boostX_gamma.py +0 -0
  265. {vector-1.4.0 → vector-1.4.1}/tests/compute/lorentz/test_boostY_beta.py +0 -0
  266. {vector-1.4.0 → vector-1.4.1}/tests/compute/lorentz/test_boostY_gamma.py +0 -0
  267. {vector-1.4.0 → vector-1.4.1}/tests/compute/lorentz/test_boostZ_beta.py +0 -0
  268. {vector-1.4.0 → vector-1.4.1}/tests/compute/lorentz/test_boostZ_gamma.py +0 -0
  269. {vector-1.4.0 → vector-1.4.1}/tests/compute/lorentz/test_boost_beta3.py +0 -0
  270. {vector-1.4.0 → vector-1.4.1}/tests/compute/lorentz/test_boost_p4.py +0 -0
  271. {vector-1.4.0 → vector-1.4.1}/tests/compute/lorentz/test_deltaRapidityPhi.py +0 -0
  272. {vector-1.4.0 → vector-1.4.1}/tests/compute/lorentz/test_deltaRapidityPhi2.py +0 -0
  273. {vector-1.4.0 → vector-1.4.1}/tests/compute/lorentz/test_gamma.py +0 -0
  274. {vector-1.4.0 → vector-1.4.1}/tests/compute/lorentz/test_rapidity.py +0 -0
  275. {vector-1.4.0 → vector-1.4.1}/tests/compute/lorentz/test_t.py +0 -0
  276. {vector-1.4.0 → vector-1.4.1}/tests/compute/lorentz/test_t2.py +0 -0
  277. {vector-1.4.0 → vector-1.4.1}/tests/compute/lorentz/test_tau.py +0 -0
  278. {vector-1.4.0 → vector-1.4.1}/tests/compute/lorentz/test_tau2.py +0 -0
  279. {vector-1.4.0 → vector-1.4.1}/tests/compute/lorentz/test_to_beta3.py +0 -0
  280. {vector-1.4.0 → vector-1.4.1}/tests/compute/planar/__init__.py +0 -0
  281. {vector-1.4.0 → vector-1.4.1}/tests/compute/planar/test_deltaphi.py +0 -0
  282. {vector-1.4.0 → vector-1.4.1}/tests/compute/planar/test_phi.py +0 -0
  283. {vector-1.4.0 → vector-1.4.1}/tests/compute/planar/test_rho.py +0 -0
  284. {vector-1.4.0 → vector-1.4.1}/tests/compute/planar/test_rho2.py +0 -0
  285. {vector-1.4.0 → vector-1.4.1}/tests/compute/planar/test_rotateZ.py +0 -0
  286. {vector-1.4.0 → vector-1.4.1}/tests/compute/planar/test_x.py +0 -0
  287. {vector-1.4.0 → vector-1.4.1}/tests/compute/planar/test_y.py +0 -0
  288. {vector-1.4.0 → vector-1.4.1}/tests/compute/spatial/__init__.py +0 -0
  289. {vector-1.4.0 → vector-1.4.1}/tests/compute/spatial/test_costheta.py +0 -0
  290. {vector-1.4.0 → vector-1.4.1}/tests/compute/spatial/test_cottheta.py +0 -0
  291. {vector-1.4.0 → vector-1.4.1}/tests/compute/spatial/test_cross.py +0 -0
  292. {vector-1.4.0 → vector-1.4.1}/tests/compute/spatial/test_deltaR.py +0 -0
  293. {vector-1.4.0 → vector-1.4.1}/tests/compute/spatial/test_deltaR2.py +0 -0
  294. {vector-1.4.0 → vector-1.4.1}/tests/compute/spatial/test_deltaangle.py +0 -0
  295. {vector-1.4.0 → vector-1.4.1}/tests/compute/spatial/test_deltaeta.py +0 -0
  296. {vector-1.4.0 → vector-1.4.1}/tests/compute/spatial/test_eta.py +0 -0
  297. {vector-1.4.0 → vector-1.4.1}/tests/compute/spatial/test_mag.py +0 -0
  298. {vector-1.4.0 → vector-1.4.1}/tests/compute/spatial/test_mag2.py +0 -0
  299. {vector-1.4.0 → vector-1.4.1}/tests/compute/spatial/test_rotateX.py +0 -0
  300. {vector-1.4.0 → vector-1.4.1}/tests/compute/spatial/test_rotateY.py +0 -0
  301. {vector-1.4.0 → vector-1.4.1}/tests/compute/spatial/test_rotate_axis.py +0 -0
  302. {vector-1.4.0 → vector-1.4.1}/tests/compute/spatial/test_rotate_euler.py +0 -0
  303. {vector-1.4.0 → vector-1.4.1}/tests/compute/spatial/test_rotate_quaternion.py +0 -0
  304. {vector-1.4.0 → vector-1.4.1}/tests/compute/spatial/test_theta.py +0 -0
  305. {vector-1.4.0 → vector-1.4.1}/tests/compute/spatial/test_z.py +0 -0
  306. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/lorentz/__init__.py +0 -0
  307. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/lorentz/test_Et.py +0 -0
  308. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/lorentz/test_Et2.py +0 -0
  309. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/lorentz/test_Mt.py +0 -0
  310. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/lorentz/test_Mt2.py +0 -0
  311. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/lorentz/test_beta.py +0 -0
  312. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/lorentz/test_boostX_beta.py +0 -0
  313. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/lorentz/test_boostX_gamma.py +0 -0
  314. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/lorentz/test_boostY_beta.py +0 -0
  315. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/lorentz/test_boostY_gamma.py +0 -0
  316. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/lorentz/test_boostZ_beta.py +0 -0
  317. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/lorentz/test_boostZ_gamma.py +0 -0
  318. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/lorentz/test_boost_beta3.py +0 -0
  319. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/lorentz/test_boost_p4.py +0 -0
  320. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/lorentz/test_deltaRapidityPhi.py +0 -0
  321. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/lorentz/test_deltaRapidityPhi2.py +0 -0
  322. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/lorentz/test_gamma.py +0 -0
  323. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/lorentz/test_is_lightlike.py +0 -0
  324. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/lorentz/test_is_spacelike.py +0 -0
  325. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/lorentz/test_is_timelike.py +0 -0
  326. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/lorentz/test_rapidity.py +0 -0
  327. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/lorentz/test_t.py +0 -0
  328. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/lorentz/test_t2.py +0 -0
  329. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/lorentz/test_tau.py +0 -0
  330. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/lorentz/test_tau2.py +0 -0
  331. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/lorentz/test_to_beta3.py +0 -0
  332. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/planar/__init__.py +0 -0
  333. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/planar/test_deltaphi.py +0 -0
  334. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/planar/test_phi.py +0 -0
  335. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/planar/test_rho.py +0 -0
  336. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/planar/test_rho2.py +0 -0
  337. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/planar/test_rotateZ.py +0 -0
  338. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/planar/test_x.py +0 -0
  339. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/planar/test_y.py +0 -0
  340. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/spatial/__init__.py +0 -0
  341. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/spatial/test_costheta.py +0 -0
  342. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/spatial/test_cottheta.py +0 -0
  343. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/spatial/test_cross.py +0 -0
  344. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/spatial/test_deltaR.py +0 -0
  345. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/spatial/test_deltaR2.py +0 -0
  346. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/spatial/test_deltaangle.py +0 -0
  347. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/spatial/test_deltaeta.py +0 -0
  348. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/spatial/test_eta.py +0 -0
  349. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/spatial/test_mag.py +0 -0
  350. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/spatial/test_mag2.py +0 -0
  351. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/spatial/test_rotateX.py +0 -0
  352. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/spatial/test_rotateY.py +0 -0
  353. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/spatial/test_rotate_axis.py +0 -0
  354. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/spatial/test_rotate_euler.py +0 -0
  355. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/spatial/test_rotate_quaternion.py +0 -0
  356. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/spatial/test_theta.py +0 -0
  357. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/spatial/test_z.py +0 -0
  358. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/test_add.py +0 -0
  359. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/test_conversions.py +0 -0
  360. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/test_dot.py +0 -0
  361. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/test_equal.py +0 -0
  362. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/test_is_antiparallel.py +0 -0
  363. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/test_is_parallel.py +0 -0
  364. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/test_is_perpendicular.py +0 -0
  365. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/test_not_equal.py +0 -0
  366. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/test_subtract.py +0 -0
  367. {vector-1.4.0 → vector-1.4.1}/tests/compute/sympy/test_unit.py +0 -0
  368. {vector-1.4.0 → vector-1.4.1}/tests/compute/test_add.py +0 -0
  369. {vector-1.4.0 → vector-1.4.1}/tests/compute/test_conversions.py +0 -0
  370. {vector-1.4.0 → vector-1.4.1}/tests/compute/test_dot.py +0 -0
  371. {vector-1.4.0 → vector-1.4.1}/tests/compute/test_equal.py +0 -0
  372. {vector-1.4.0 → vector-1.4.1}/tests/compute/test_isclose.py +0 -0
  373. {vector-1.4.0 → vector-1.4.1}/tests/compute/test_not_equal.py +0 -0
  374. {vector-1.4.0 → vector-1.4.1}/tests/compute/test_scale.py +0 -0
  375. {vector-1.4.0 → vector-1.4.1}/tests/compute/test_subtract.py +0 -0
  376. {vector-1.4.0 → vector-1.4.1}/tests/compute/test_unit.py +0 -0
  377. {vector-1.4.0 → vector-1.4.1}/tests/samples/issue-161-v2.pkl +0 -0
  378. {vector-1.4.0 → vector-1.4.1}/tests/samples/issue-161.pkl +0 -0
  379. {vector-1.4.0 → vector-1.4.1}/tests/test_methods.py +0 -0
  380. {vector-1.4.0 → vector-1.4.1}/tests/test_notebooks.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@49df96e17e918a15956db358890b08e61c704919 # v1.2.0
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
@@ -146,7 +146,7 @@ jobs:
146
146
  run: python -m pytest -ra --cov=vector --ignore tests/test_notebooks.py .
147
147
 
148
148
  - name: Upload coverage report
149
- uses: codecov/codecov-action@v4.3.0
149
+ uses: codecov/codecov-action@v4.4.1
150
150
  with:
151
151
  token: ${{ secrets.CODECOV_TOKEN }}
152
152
 
@@ -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.4.4"
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.10.0
35
30
  hooks:
36
31
  - id: mypy
37
32
  files: src
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: vector
3
- Version: 1.4.0
3
+ Version: 1.4.1
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
@@ -831,6 +831,104 @@ def compute_masses(array):
831
831
  compute_masses(array)
832
832
  ```
833
833
 
834
+ ## Sub-classing Awkward mixins
835
+
836
+ 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.
837
+
838
+ For instance, the `MomentumAwkward` classes can be extended in the following way:
839
+
840
+ ```py
841
+ @ak.mixin_class(vector.backends.awkward.behavior)
842
+ class TwoVector(vector.backends.awkward.MomentumAwkward2D):
843
+ pass
844
+
845
+
846
+ @ak.mixin_class(vector.backends.awkward.behavior)
847
+ class ThreeVector(vector.backends.awkward.MomentumAwkward3D):
848
+ pass
849
+
850
+
851
+ # required for transforming vectors
852
+ # the class names must always end with "Array"
853
+ TwoVectorArray.ProjectionClass2D = TwoVectorArray # noqa: F821
854
+ TwoVectorArray.ProjectionClass3D = ThreeVectorArray # noqa: F821
855
+ TwoVectorArray.MomentumClass = TwoVectorArray # noqa: F821
856
+
857
+ ThreeVectorArray.ProjectionClass2D = TwoVectorArray # noqa: F821
858
+ ThreeVectorArray.ProjectionClass3D = ThreeVectorArray # noqa: F821
859
+ ThreeVectorArray.MomentumClass = ThreeVectorArray # noqa: F821
860
+
861
+ vec = ak.zip(
862
+ {
863
+ "pt": [[1, 2], [], [3], [4]],
864
+ "phi": [[1.2, 1.4], [], [1.6], [3.4]],
865
+ },
866
+ with_name="TwoVector",
867
+ behavior=vector.backends.awkward.behavior,
868
+ )
869
+
870
+ vec
871
+ ```
872
+
873
+ The binary operators are not automatically registered by awkward, but vector methods can be used to perform operations on sub-classed vectors.
874
+
875
+ ```py
876
+ vec.add(vec)
877
+ ```
878
+
879
+ Similarly, other vector methods can be used by the new methods internally.
880
+
881
+ ```py
882
+ @ak.mixin_class(vector.backends.awkward.behavior)
883
+ class LorentzVector(vector.backends.awkward.MomentumAwkward4D):
884
+ @ak.mixin_class_method(np.divide, {numbers.Number})
885
+ def divide(self, factor):
886
+ return self.scale(1 / factor)
887
+
888
+
889
+ # required for transforming vectors
890
+ # the class names must always end with "Array"
891
+ LorentzVectorArray.ProjectionClass2D = TwoVectorArray # noqa: F821
892
+ LorentzVectorArray.ProjectionClass3D = ThreeVectorArray # noqa: F821
893
+ LorentzVectorArray.ProjectionClass4D = LorentzVectorArray # noqa: F821
894
+ LorentzVectorArray.MomentumClass = LorentzVectorArray # noqa: F821
895
+
896
+ vec = ak.zip(
897
+ {
898
+ "pt": [[1, 2], [], [3], [4]],
899
+ "eta": [[1.2, 1.4], [], [1.6], [3.4]],
900
+ "phi": [[0.3, 0.4], [], [0.5], [0.6]],
901
+ "energy": [[50, 51], [], [52], [60]],
902
+ },
903
+ with_name="LorentzVector",
904
+ behavior=vector.backends.awkward.behavior,
905
+ )
906
+
907
+ vec / 2
908
+ vec.like(vector.obj(x=1, y=2))
909
+ vec.like(vector.obj(x=1, y=2, z=3))
910
+ ```
911
+
912
+ It is also possible to manually add binary operations in vector's behavior dict to enable binary operations.
913
+
914
+ ```py
915
+ _binary_dispatch_cls = {
916
+ "TwoVector": TwoVector,
917
+ "ThreeVector": ThreeVector,
918
+ "LorentzVector": LorentzVector,
919
+ }
920
+ _rank = [TwoVector, ThreeVector, LorentzVector]
921
+
922
+ for lhs, lhs_to in _binary_dispatch_cls.items():
923
+ for rhs, rhs_to in _binary_dispatch_cls.items():
924
+ out_to = min(lhs_to, rhs_to, key=_rank.index)
925
+ vector.backends.awkward.behavior[(np.add, lhs, rhs)] = out_to.add
926
+ vector.backends.awkward.behavior[(np.subtract, lhs, rhs)] = out_to.subtract
927
+
928
+ vec + vec
929
+ vec.to_2D() + vec.to_2D()
930
+ ```
931
+
834
932
  ## Talks about vector
835
933
 
836
934
  - 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)
@@ -761,6 +761,104 @@ def compute_masses(array):
761
761
  compute_masses(array)
762
762
  ```
763
763
 
764
+ ## Sub-classing Awkward mixins
765
+
766
+ 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.
767
+
768
+ For instance, the `MomentumAwkward` classes can be extended in the following way:
769
+
770
+ ```py
771
+ @ak.mixin_class(vector.backends.awkward.behavior)
772
+ class TwoVector(vector.backends.awkward.MomentumAwkward2D):
773
+ pass
774
+
775
+
776
+ @ak.mixin_class(vector.backends.awkward.behavior)
777
+ class ThreeVector(vector.backends.awkward.MomentumAwkward3D):
778
+ pass
779
+
780
+
781
+ # required for transforming vectors
782
+ # the class names must always end with "Array"
783
+ TwoVectorArray.ProjectionClass2D = TwoVectorArray # noqa: F821
784
+ TwoVectorArray.ProjectionClass3D = ThreeVectorArray # noqa: F821
785
+ TwoVectorArray.MomentumClass = TwoVectorArray # noqa: F821
786
+
787
+ ThreeVectorArray.ProjectionClass2D = TwoVectorArray # noqa: F821
788
+ ThreeVectorArray.ProjectionClass3D = ThreeVectorArray # noqa: F821
789
+ ThreeVectorArray.MomentumClass = ThreeVectorArray # noqa: F821
790
+
791
+ vec = ak.zip(
792
+ {
793
+ "pt": [[1, 2], [], [3], [4]],
794
+ "phi": [[1.2, 1.4], [], [1.6], [3.4]],
795
+ },
796
+ with_name="TwoVector",
797
+ behavior=vector.backends.awkward.behavior,
798
+ )
799
+
800
+ vec
801
+ ```
802
+
803
+ The binary operators are not automatically registered by awkward, but vector methods can be used to perform operations on sub-classed vectors.
804
+
805
+ ```py
806
+ vec.add(vec)
807
+ ```
808
+
809
+ Similarly, other vector methods can be used by the new methods internally.
810
+
811
+ ```py
812
+ @ak.mixin_class(vector.backends.awkward.behavior)
813
+ class LorentzVector(vector.backends.awkward.MomentumAwkward4D):
814
+ @ak.mixin_class_method(np.divide, {numbers.Number})
815
+ def divide(self, factor):
816
+ return self.scale(1 / factor)
817
+
818
+
819
+ # required for transforming vectors
820
+ # the class names must always end with "Array"
821
+ LorentzVectorArray.ProjectionClass2D = TwoVectorArray # noqa: F821
822
+ LorentzVectorArray.ProjectionClass3D = ThreeVectorArray # noqa: F821
823
+ LorentzVectorArray.ProjectionClass4D = LorentzVectorArray # noqa: F821
824
+ LorentzVectorArray.MomentumClass = LorentzVectorArray # noqa: F821
825
+
826
+ vec = ak.zip(
827
+ {
828
+ "pt": [[1, 2], [], [3], [4]],
829
+ "eta": [[1.2, 1.4], [], [1.6], [3.4]],
830
+ "phi": [[0.3, 0.4], [], [0.5], [0.6]],
831
+ "energy": [[50, 51], [], [52], [60]],
832
+ },
833
+ with_name="LorentzVector",
834
+ behavior=vector.backends.awkward.behavior,
835
+ )
836
+
837
+ vec / 2
838
+ vec.like(vector.obj(x=1, y=2))
839
+ vec.like(vector.obj(x=1, y=2, z=3))
840
+ ```
841
+
842
+ It is also possible to manually add binary operations in vector's behavior dict to enable binary operations.
843
+
844
+ ```py
845
+ _binary_dispatch_cls = {
846
+ "TwoVector": TwoVector,
847
+ "ThreeVector": ThreeVector,
848
+ "LorentzVector": LorentzVector,
849
+ }
850
+ _rank = [TwoVector, ThreeVector, LorentzVector]
851
+
852
+ for lhs, lhs_to in _binary_dispatch_cls.items():
853
+ for rhs, rhs_to in _binary_dispatch_cls.items():
854
+ out_to = min(lhs_to, rhs_to, key=_rank.index)
855
+ vector.backends.awkward.behavior[(np.add, lhs, rhs)] = out_to.add
856
+ vector.backends.awkward.behavior[(np.subtract, lhs, rhs)] = out_to.subtract
857
+
858
+ vec + vec
859
+ vec.to_2D() + vec.to_2D()
860
+ ```
861
+
764
862
  ## Talks about vector
765
863
 
766
864
  - 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)
@@ -2,6 +2,31 @@
2
2
 
3
3
  ## Version 1.4
4
4
 
5
+ ### Version 1.4.1
6
+
7
+ #### Fixes
8
+
9
+ - fix: sympy backend on numpy 2.0 (full numpy 2.0 support) [#473][]
10
+ - fix: add lower and upper bounds for deltaangle [#465][]
11
+ - fix: maximum for SymPy backend is the identity function now [#465][]
12
+ - fix: get coordinate classes to work for numpy [#466][]
13
+
14
+ #### Documentation
15
+
16
+ - docs: add basic docs for sub-classing awkward mixins [#468][]
17
+
18
+ #### Maintenance
19
+
20
+ - chore: add missing compute function tests [#454]
21
+ - ci: Add GitHub artifact attestations to package distribution [#470][]
22
+
23
+ [#473]: https://github.com/scikit-hep/vector/pull/473
24
+ [#465]: https://github.com/scikit-hep/vector/pull/465
25
+ [#466]: https://github.com/scikit-hep/vector/pull/466
26
+ [#468]: https://github.com/scikit-hep/vector/pull/468
27
+ [#454]: https://github.com/scikit-hep/vector/pull/454
28
+ [#470]: https://github.com/scikit-hep/vector/pull/470
29
+
5
30
  ### Version 1.4.0
6
31
 
7
32
  #### Features