Skip to content

Commit

Permalink
add stuff for feynpy
Browse files Browse the repository at this point in the history
  • Loading branch information
APN-Pucky committed Jul 31, 2023
1 parent d223c7b commit 8c336fb
Show file tree
Hide file tree
Showing 6 changed files with 136 additions and 131 deletions.
196 changes: 97 additions & 99 deletions poetry.lock

Large diffs are not rendered by default.

6 changes: 4 additions & 2 deletions pyfeyn2/auto/label.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ def auto_label(objs, replace=False):

def auto_label_propagators(ifd, replace=False):
"""Automatically label propagators."""
fd = copy.deepcopy(ifd)
# fd = copy.deepcopy(ifd)
fd = ifd
objs = fd.propagators
for p in objs:
if p.label is None or replace:
Expand All @@ -20,7 +21,8 @@ def auto_label_propagators(ifd, replace=False):

def auto_label_legs(ifd, replace=False):
"""Automatically label legs."""
fd = copy.deepcopy(ifd)
# fd = copy.deepcopy(ifd)
fd = ifd
objs = fd.legs
for p in objs:
if p.particle is None or replace:
Expand Down
12 changes: 7 additions & 5 deletions pyfeyn2/auto/position.py
Original file line number Diff line number Diff line change
Expand Up @@ -159,13 +159,15 @@ def auto_align_legs(fd, incoming=None, outgoing=None):
"""
Automatically reshuffle the legs of a Feynman diagram.
"""
f_min_x, f_min_y, f_max_x, f_max_y = fd.get_bounding_box()
set_none_xy_to_zero(fd.legs)
inc = [l for l in fd.legs if l.is_incoming()]
outc = [l for l in fd.legs if l.is_outgoing()]
if incoming is None:
incoming = [[f_min_x, y] for y in np.linspace(f_min_y, f_max_y, len(inc))]
if outgoing is None:
outgoing = [[f_max_x, y] for y in np.linspace(f_min_y, f_max_y, len(outc))]
if incoming is None or outgoing is None:
f_min_x, f_min_y, f_max_x, f_max_y = fd.get_bounding_box()
if incoming is None:
incoming = [[f_min_x, y] for y in np.linspace(f_min_y, f_max_y, len(inc))]
if outgoing is None:
outgoing = [[f_max_x, y] for y in np.linspace(f_min_y, f_max_y, len(outc))]
_auto_align(inc, incoming)
_auto_align(outc, outgoing)
return fd
Expand Down
25 changes: 2 additions & 23 deletions pyfeyn2/mkfeyndiag.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,18 +12,6 @@
from pyfeyn2.render.text.unicode import UnicodeRender


def class_for_name(module_name, class_name):
# load the module, will raise ImportError if module cannot be loaded
m = importlib.import_module(module_name)
# get the class, will raise AttributeError if class cannot be found
c = getattr(m, class_name)
return c


def renderer_from_string(s):
return class_for_name(".".join(s.split(".")[0:-1]), s.split(".")[-1])


def main(argv=None):
# parse command line options with argparse
parser = argparse.ArgumentParser(
Expand Down Expand Up @@ -76,24 +64,15 @@ def main(argv=None):

arenderer = args.renderer
renderer = None
if arenderer is None:
pass
elif arenderer.lower() == "ascii":
renderer = ASCIIRender
elif arenderer.lower() == "unicode":
renderer = UnicodeRender
elif arenderer.lower() in renderall.renders:
renderer = renderall.renders[arenderer.lower()]
else:
renderer = renderer_from_string(arenderer)
renderer = renderall.renderer_from_string(arenderer)

xml_string = Path(args.input).read_text()
parser = XmlParser()
fml = parser.from_string(xml_string, FeynML)

if renderer is None:
arenderer = fml.head.get_meta_dict()["renderer"]
renderer = renderer_from_string(arenderer)
renderer = renderall.renderer_from_string(arenderer)
if args.style is not None:
style_string = Path(args.style).read_text()
for diagram in fml.diagrams:
Expand Down
24 changes: 24 additions & 0 deletions pyfeyn2/render/all.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import importlib
import shutil
import tempfile
import traceback
Expand All @@ -14,7 +15,9 @@
from pyfeyn2.render.latex.tikzfeynman import TikzFeynmanRender
from pyfeyn2.render.mpl.feynmanrender import FeynmanRender
from pyfeyn2.render.pyx.pyxrender import PyxRender
from pyfeyn2.render.text.ascii import ASCIIRender
from pyfeyn2.render.text.asciipdf import ASCIIPDFRender
from pyfeyn2.render.text.unicode import UnicodeRender
from pyfeyn2.render.text.unicodepdf import UnicodePDFRender

renders = {
Expand All @@ -28,6 +31,27 @@
}


def class_for_name(module_name, class_name):
# load the module, will raise ImportError if module cannot be loaded
m = importlib.import_module(module_name)
# get the class, will raise AttributeError if class cannot be found
c = getattr(m, class_name)
return c


def renderer_from_string(s):
if s is None:
return None
elif s.lower() == "ascii":
return ASCIIRender
elif s.lower() == "unicode":
return UnicodeRender
elif s.lower() in renders:
return renders[s.lower()]
else:
return class_for_name(".".join(s.split(".")[0:-1]), s.split(".")[-1])


class AllRender(LatexRender):
"""Render all diagrams to PDF."""

Expand Down
4 changes: 2 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ smpl_io = "*"
smpl_doc = "*"
smpl_util= "*"
iminuit = "*"
colorama = "*"
termcolor = "*"
feynml = {version = ">=0.2.10", extras = ["interfaces"]}
#feynml= {path= "../feynml", develop = true, extras = ["interfaces"]}

Expand All @@ -49,8 +51,6 @@ sphinx_autobuild = "*"
sphinx_math_dollar = "*"
myst-parser = "*"
toml = "*"
colorama = "*"
termcolor = "*"

[tool.poetry.group.test]
optional = true
Expand Down

0 comments on commit 8c336fb

Please sign in to comment.