1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
|
# Copyright (c) 2019-2025, Saransh Chopra, Henry Schreiner, Eduardo Rodrigues, Jonas Eschle, and Jim Pivarski.
#
# Distributed under the 3-clause BSD license, see accompanying file LICENSE
# or https://github.com/scikit-hep/vector for details.
from __future__ import annotations
import numpy
import pytest
import vector._methods
import vector.backends.numpy
import vector.backends.object
def test_spatial_object():
vec = vector.backends.object.VectorObject3D(
azimuthal=vector.backends.object.AzimuthalObjectXY(0.1, 0.2),
longitudinal=vector.backends.object.LongitudinalObjectZ(0.3),
)
out = vec.rotateY(0.25)
assert isinstance(out.azimuthal, vector._methods.AzimuthalXY)
assert isinstance(out.longitudinal, vector._methods.LongitudinalZ)
assert out.x == pytest.approx(0.17111242994742137)
assert out.y == pytest.approx(0.2)
assert out.z == pytest.approx(0.2659333305877411)
for t in "xyz", "xytheta", "xyeta", "rhophiz", "rhophitheta", "rhophieta":
out = getattr(vec, "to_" + t)().rotateY(0.25)
assert isinstance(out.azimuthal, vector._methods.AzimuthalXY)
assert isinstance(out.longitudinal, vector._methods.LongitudinalZ)
assert out.x == pytest.approx(0.17111242994742137)
assert out.y == pytest.approx(0.2)
assert out.z == pytest.approx(0.2659333305877411)
def test_spatial_numpy():
vec = vector.backends.numpy.VectorNumpy3D(
[(0.1, 0.2, 0.3)],
dtype=[("x", numpy.float64), ("y", numpy.float64), ("z", numpy.float64)],
)
out = vec.rotateY(0.25)
assert isinstance(out.azimuthal, vector._methods.AzimuthalXY)
assert isinstance(out.longitudinal, vector._methods.LongitudinalZ)
assert out[0].x == pytest.approx(0.17111242994742137)
assert out[0].y == pytest.approx(0.2)
assert out[0].z == pytest.approx(0.2659333305877411)
for t in "xyz", "xytheta", "xyeta", "rhophiz", "rhophitheta", "rhophieta":
out = getattr(vec, "to_" + t)().rotateY(0.25)
assert isinstance(out.azimuthal, vector._methods.AzimuthalXY)
assert isinstance(out.longitudinal, vector._methods.LongitudinalZ)
assert out[0].x == pytest.approx(0.17111242994742137)
assert out[0].y == pytest.approx(0.2)
assert out[0].z == pytest.approx(0.2659333305877411)
def test_lorentz_object():
vec = vector.backends.object.VectorObject4D(
azimuthal=vector.backends.object.AzimuthalObjectXY(0.1, 0.2),
longitudinal=vector.backends.object.LongitudinalObjectZ(0.3),
temporal=vector.backends.object.TemporalObjectT(99),
)
out = vec.rotateY(0.25)
assert isinstance(out.azimuthal, vector._methods.AzimuthalXY)
assert isinstance(out.longitudinal, vector._methods.LongitudinalZ)
assert hasattr(out, "temporal")
assert out.x == pytest.approx(0.17111242994742137)
assert out.y == pytest.approx(0.2)
assert out.z == pytest.approx(0.2659333305877411)
for t in (
"xyzt",
"xythetat",
"xyetat",
"rhophizt",
"rhophithetat",
"rhophietat",
"xyztau",
"xythetatau",
"xyetatau",
"rhophiztau",
"rhophithetatau",
"rhophietatau",
):
out = getattr(vec, "to_" + t)().rotateY(0.25)
assert isinstance(out.azimuthal, vector._methods.AzimuthalXY)
assert isinstance(out.longitudinal, vector._methods.LongitudinalZ)
assert hasattr(out, "temporal")
assert out.x == pytest.approx(0.17111242994742137)
assert out.y == pytest.approx(0.2)
assert out.z == pytest.approx(0.2659333305877411)
def test_lorentz_numpy():
vec = vector.backends.numpy.VectorNumpy4D(
[(0.1, 0.2, 0.3, 99)],
dtype=[
("x", numpy.float64),
("y", numpy.float64),
("z", numpy.float64),
("t", numpy.float64),
],
)
out = vec.rotateY(0.25)
assert isinstance(out.azimuthal, vector._methods.AzimuthalXY)
assert isinstance(out.longitudinal, vector._methods.LongitudinalZ)
assert out[0].x == pytest.approx(0.17111242994742137)
assert out[0].y == pytest.approx(0.2)
assert out[0].z == pytest.approx(0.2659333305877411)
for t in (
"xyzt",
"xythetat",
"xyetat",
"rhophizt",
"rhophithetat",
"rhophietat",
"xyztau",
"xythetatau",
"xyetatau",
"rhophiztau",
"rhophithetatau",
"rhophietatau",
):
out = getattr(vec, "to_" + t)().rotateY(0.25)
assert isinstance(out.azimuthal, vector._methods.AzimuthalXY)
assert isinstance(out.longitudinal, vector._methods.LongitudinalZ)
assert out[0].x == pytest.approx(0.17111242994742137)
assert out[0].y == pytest.approx(0.2)
assert out[0].z == pytest.approx(0.2659333305877411)
|