Skip to content

Commit d378c26

Browse files
committed
Particles.to_field function to e.g. map Q->Fp/Qp/C.
1 parent 09f0849 commit d378c26

File tree

3 files changed

+21
-0
lines changed

3 files changed

+21
-0
lines changed

lips/particle.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,12 @@ def __init__(self, kinematics=None, real_momentum=False, field=Field('mpc', 0, 3
5151
else:
5252
raise Exception('Bad Particle Constructor')
5353

54+
def to_field(self, field):
55+
self._r_sp_d = numpy.vectorize(field)(self.r_sp_d)
56+
self._r_sp_d_to_r_sp_u()
57+
self.l_sp_d = numpy.vectorize(field)(self.l_sp_d)
58+
self.field = field
59+
5460
def __eq__(self, other):
5561
"""Equality: checks equality of four momenta."""
5662
if isinstance(other, Particle):

lips/particles.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,11 @@ def __init__(self, number_of_particles_or_particles=None, seed=None, real_moment
7373
else:
7474
raise Exception(f"Internal masses not understood, received {internal_masses} of type {type(internal_masses)}.")
7575

76+
def to_field(self, field):
77+
for oP in self:
78+
oP.to_field(field)
79+
self.field = field
80+
7681
def __setattr__(self, name, value):
7782
if pMVar.match(name):
7883
self.internal_masses.add(name)

tests/test_particles.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,3 +151,13 @@ def test_hashes_does_not_change_under_identity_mapping():
151151
# cache_key_hash2 = hashlib.sha256(cache_key_bytes).hexdigest()
152152
assert hash(oPs) == hash(oPsMapped)
153153
# assert cache_key_hash1 == cache_key_hash2 # this fails and I'm unsure how to fix it atm
154+
155+
156+
def test_field_change():
157+
Fp = Field("finite field", 2 ** 31 - 1, 1)
158+
oPsFp = Particles(6, field=Field("rational", 0, 0), seed=0)
159+
oPsFp.to_field(Fp)
160+
Qp = Field("padic", 2 ** 31 - 1, 4)
161+
oPsQp = Particles(6, field=Field("rational", 0, 0), seed=0)
162+
oPsQp.to_field(Qp)
163+
assert oPsFp("⟨1|2⟩") == oPsQp("⟨1|2⟩").as_tuple[0]

0 commit comments

Comments
 (0)