# Imports
from lips import Particles
from lips.fields import Field
$Q_{2^{31} -1}$ phase space point, with 3 digits
oPs_padic = Particles(5, field=Field("padic", 2 ** 31 - 1, 3), seed=0)
mandelstam_expression = "(1/(⟨14⟩^2⟨15⟩^2⟨23⟩^2))⟨12⟩^3⟨13⟩((4s23(-(s23s34+(s15-s34)s45)^3(s23s34+s45(s15+s34+s45))+s12^3(s15-s23)(s15^3s45+s23^2s34(-s23+s45)+s15^2s45(-s23+s45)+s15(s23^2s34-s23s45^2-s34s45^2))-s12^2(3s15^4s45^2+s15^3s45^2(-4s23-2s34+3s45)+s23s34^2(3s23^3-4s23^2s45+s45^3)+s15^2(-s23s45^2(s34+4s45)-s34s45^2(s34+5s45)+s23^2(s34^2+s45^2))+s15(-4s23^3s34^2+2s34^2s45^3+s23s34s45^2(s34+2s45)+s23^2s45(s34^2+s45^2)))+s12(3s15^4s45^3+s15^3s45^2(4s23s34-2s23s45-4s34s45+3s45^2)+s34^2(s23-s45)^2(3s23^2s34-s34s45^2+s23s45(s34+s45))-s15^2s45(s23^2s34(s34+s45)+s34s45^2(s34+7s45)+2s23s45(2s34^2-s34s45+s45^2))-s15s34(s23-s45)(2s23^2s34(s34-2s45)+s34s45^2(2s34+5s45)+s23s45(2s34^2+2s34s45+s45^2)))))/(3s12^3(s15-s23)s34(s12+s23-s45)s45(s15+s45)(-s12+s34+s45))+(4s23((s23s34+(s15-s34)s45)^2(s23s34+s45(s15+s34+s45))+s12^2(s23^2s34(s23-s45)+s15^3s45+s15^2s45(-s23+s45)-s15(s23^2s34+s23s45^2+s34s45^2))+s12(-2s15^3s45^2+s34^2(-2s23^3+2s23^2s45+s23s45^2-s45^3)+s15^2s45((s34-2s45)s45+s23(-s34+s45))+s15(s23^2s34(s34-s45)+s23s45^3+s34s45^2(s34+3s45))))(-tr5_1234))/(3s12^3(s15-s23)s34(s12+s23-s45)(s12-s34-s45)s45(s15+s45)))[31]"
spinor_expression = "(8/3⟨23⟩[23]⟨24⟩[34])/(⟨15⟩⟨34⟩⟨45⟩⟨4|1+5|4])"
len(spinor_expression) / len(mandelstam_expression) * 100
-oPs_padic(mandelstam_expression)
oPs_padic(spinor_expression) + oPs_padic.image(("12354", False))(spinor_expression)
assert -oPs_padic(mandelstam_expression) == oPs_padic(spinor_expression) + oPs_padic.image(("12354", False))(spinor_expression)