summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrey Grozin <grozin@gentoo.org>2016-01-24 22:15:48 +0600
committerAndrey Grozin <grozin@gentoo.org>2016-01-24 22:16:40 +0600
commitd3e184aa71ac05f4fe88e1fad9b5bc9c99b0d8a1 (patch)
treea7319f822f19d6958e68775c27e119137f5222b1 /dev-python/pyfeyn
parentnet-proxy/bfilter: Add '-funsigned-char' to CXXFLAGS, prevent narrowing (diff)
downloadgentoo-d3e184aa71ac05f4fe88e1fad9b5bc9c99b0d8a1.tar.gz
gentoo-d3e184aa71ac05f4fe88e1fad9b5bc9c99b0d8a1.tar.bz2
gentoo-d3e184aa71ac05f4fe88e1fad9b5bc9c99b0d8a1.zip
dev-python/pyfeyn: bump to 0.3.5
Package-Manager: portage-2.2.27
Diffstat (limited to 'dev-python/pyfeyn')
-rw-r--r--dev-python/pyfeyn/Manifest1
-rw-r--r--dev-python/pyfeyn/files/pyfeyn-0.3.5.patch598
-rw-r--r--dev-python/pyfeyn/pyfeyn-0.3.5.ebuild23
3 files changed, 622 insertions, 0 deletions
diff --git a/dev-python/pyfeyn/Manifest b/dev-python/pyfeyn/Manifest
index 7f4aad713d42..0c755aa93fe6 100644
--- a/dev-python/pyfeyn/Manifest
+++ b/dev-python/pyfeyn/Manifest
@@ -1 +1,2 @@
DIST pyfeyn-0.3.4.tar.gz 27074 SHA256 6b1d86606b9b61cfc6285aec4a15202f60a819368b3e74fc13a586835f22da6e SHA512 b0ce1939d893df3af060cc64d11c2bb09f22c99b074aefe0e79d820ee4c6b5c64f4e8de8f4c31020b33735627b2dead9a70ea9d3504773417a058ac7a1915db8 WHIRLPOOL 6d303b0c941f7d698d4f8ca4d0286be74291392700eec6d63dbec9d9d0db22f77d790022d49176b0dbbb25bc6b44e4360dcf1a4821cb9806de0baf24dfcbebbf
+DIST pyfeyn-0.3.5.tar.gz 27341 SHA256 b6aada34fd31d57e755547bb19324fb7ed679b3e7e5f2ceaf9d41c5535445ca0 SHA512 8e1f119553ba01432a7859d077ca241da205ec82908826ab3bb6b7c86fdab9d1f3c93797daf0a9a5716445617ce8e867f584219437ae2cfd6b4a7681ea2a6c6c WHIRLPOOL fe987ff0f89abadc8124f2a599f1d7372331c5cf77cefddfd00e1371ee560c601c41aff5a1d884db25819f84601c0f87d7b68f40d2bb0f20a7b55892c25cb2e0
diff --git a/dev-python/pyfeyn/files/pyfeyn-0.3.5.patch b/dev-python/pyfeyn/files/pyfeyn-0.3.5.patch
new file mode 100644
index 000000000000..0da755aca800
--- /dev/null
+++ b/dev-python/pyfeyn/files/pyfeyn-0.3.5.patch
@@ -0,0 +1,598 @@
+diff -r -U2 pyfeyn-0.3.5.orig/pyfeyn/__init__.py pyfeyn-0.3.5/pyfeyn/__init__.py
+--- pyfeyn-0.3.5.orig/pyfeyn/__init__.py 2016-01-21 14:24:35.000000000 +0600
++++ pyfeyn-0.3.5/pyfeyn/__init__.py 2016-01-24 19:21:55.813635215 +0600
+@@ -16,5 +16,5 @@
+ import pyx
+ except:
+- print "You don't have PyX - that's a problem unless you're just running the setup script."
++ print("You don't have PyX - that's a problem unless you're just running the setup script.")
+ import sys
+ sys.exit()
+@@ -23,6 +23,6 @@
+ from distutils.version import StrictVersion as Version
+ pyxversion = Version(pyx.version.version)
+-if pyxversion < Version("0.9.0"):
+- print "Warning: PyFeyn may not work with PyX versions older than 0.9!"
++if pyxversion < Version("0.14.0"):
++ print("Warning: PyFeyn may not work with PyX versions older than 0.14!")
+
+ ## Units
+@@ -31,10 +31,10 @@
+
+ ## TeX stuff
+-pyx.text.defaulttexrunner.set(mode="latex")
++pyx.text.set(pyx.text.LatexRunner)
+ import subprocess
+ try:
+ subprocess.Popen(["kpsewhich","hepnicenames.sty"])
+- pyx.text.defaulttexrunner.preamble(r"\usepackage{hepnicenames}")
++ pyx.text.default_runner.preamble(r"\usepackage{hepnicenames}")
+ except:
+- print "Warning: hepnicenames package not found!"
++ print("Warning: hepnicenames package not found!")
+
+diff -r -U2 pyfeyn-0.3.5.orig/pyfeyn/blobs.py pyfeyn-0.3.5/pyfeyn/blobs.py
+--- pyfeyn-0.3.5.orig/pyfeyn/blobs.py 2011-02-20 23:29:40.000000000 +0600
++++ pyfeyn-0.3.5/pyfeyn/blobs.py 2016-01-24 11:50:44.290773693 +0600
+@@ -64,9 +64,9 @@
+ """Add a label."""
+ if config.getOptions().DEBUG:
+- print "Adding label: " + text
++ print("Adding label: " + text)
+ self.labels.append(PointLabel(text=text, point=self,
+ displace=displace, angle=angle, size=size))
+ if config.getOptions().DEBUG:
+- print "Labels = " + str(self.labels)
++ print("Labels = " + str(self.labels))
+ return self
+
+diff -r -U2 pyfeyn-0.3.5.orig/pyfeyn/deco.py pyfeyn-0.3.5/pyfeyn/deco.py
+--- pyfeyn-0.3.5.orig/pyfeyn/deco.py 2016-01-21 14:24:35.000000000 +0600
++++ pyfeyn-0.3.5/pyfeyn/deco.py 2016-01-24 22:06:46.419219272 +0600
+@@ -4,20 +4,10 @@
+ from pyfeyn.diagrams import FeynDiagram
+ from pyfeyn.utils import Visible
+-from pyfeyn import config,pyxversion
++from pyfeyn import config
+
+-###########################################################################################
+-## Added by George S. Williams to allow PyFeyn to work with PyX versions 0.12.x and 0.11.x
+-## Also see changes in class Arrow and class ParallelArrow
+-from distutils.version import StrictVersion as Version
+-
+-def getarrowpath(arrowtopath, selfpos, var1, selfsize, var2, selfconstriction,
+- constrictionlen):
+- if pyxversion >= Version("0.12"):
+- arrowpath = pyx.deco._arrowhead(arrowtopath, selfpos,
+- var1, selfsize, var2, selfconstriction,
+- constrictionlen)
+- else:
+- arrowpath = pyx.deco._arrowhead(arrowtopath, selfpos,
+- var1, selfsize, var2, constrictionlen)
++
++def getarrowpath(arrowtopath, selfpos, var1, selfsize, var2, selfconstriction, constrictionlen):
++ arrowpath = pyx.deco._arrowhead(arrowtopath, selfpos, var1, selfsize, var2,
++ selfconstriction, constrictionlen)
+ return arrowpath
+
+@@ -37,5 +27,5 @@
+ self.constriction = constriction
+
+- def decorate(self, dp, texrunner=pyx.text.defaulttexrunner):
++ def decorate(self, dp, texrunner=pyx.text.default_runner):
+ """Attach arrow to a path (usually a line)."""
+ dp.ensurenormpath()
+@@ -120,5 +110,5 @@
+ displacement -= intrinsicwidth
+ if config.getOptions().DEBUG:
+- print "Displacement = ", displacement
++ print("Displacement = ", displacement)
+
+ ## Position the arrow on the right hand side of lines
+@@ -208,5 +198,5 @@
+ pyx.text.vshift.mathaxis,
+ self.size] + self.textattrs)
+- t = pyx.text.defaulttexrunner.text(self.x, self.y, self.text, textattrs)
++ t = pyx.text.default_runner.text(self.x, self.y, self.text, textattrs)
+ canvas.insert(t)
+
+@@ -247,5 +237,5 @@
+ pyx.text.vshift.mathaxis,
+ self.size] + self.textattrs)
+- t = pyx.text.defaulttexrunner.text(x, y, self.text, textattrs)
++ t = pyx.text.default_runner.text(x, y, self.text, textattrs)
+ canvas.insert(t)
+
+@@ -294,5 +284,5 @@
+ displacement -= intrinsicwidth
+ if config.getOptions().DEBUG:
+- print "Displacement = ", displacement
++ print("Displacement = ", displacement)
+
+ ## Position the label on the right hand side of lines
+@@ -320,5 +310,5 @@
+ pyx.text.vshift.mathaxis,
+ self.size] + self.textattrs)
+- t = pyx.text.defaulttexrunner.text(x, y, self.text, textattrs)
++ t = pyx.text.default_runner.text(x, y, self.text, textattrs)
+ #t.linealign(self.displace,
+ # math.cos(self.angle * math.pi/180),
+diff -r -U2 pyfeyn-0.3.5.orig/pyfeyn/diagrams.py pyfeyn-0.3.5/pyfeyn/diagrams.py
+--- pyfeyn-0.3.5.orig/pyfeyn/diagrams.py 2016-01-21 14:24:35.000000000 +0600
++++ pyfeyn-0.3.5/pyfeyn/diagrams.py 2016-01-24 22:12:15.453205434 +0600
+@@ -2,7 +2,5 @@
+
+ import pyx
+-from pyfeyn import config, pyxversion
+-from distutils.version import StrictVersion as Version
+-
++from pyfeyn import config
+
+ ## Diagram class
+@@ -28,15 +26,15 @@
+ for obj in objs:
+ if config.getOptions().DEBUG:
+- print "#objs = %d" % len(self.__objs)
++ print("#objs = %d" % len(self.__objs))
+ offset = 0
+- if obj.__dict__.has_key("layeroffset"):
+- #print "offset =", obj.layeroffset
++ if "layeroffset" in obj.__dict__:
++ #print("offset =", obj.layeroffset)
+ offset = obj.layeroffset
+ self.highestautolayer += 1
+ obj.setDepth(self.highestautolayer + offset)
+ if config.getOptions().DEBUG:
+- print "Object %s layer = %d + %d = %d" % \
++ print("Object %s layer = %d + %d = %d" % \
+ (obj.__class__, self.highestautolayer, offset,
+- self.highestautolayer + offset)
++ self.highestautolayer + offset))
+ self.__objs.append(obj)
+
+@@ -45,7 +43,7 @@
+ """Draw the components of this diagram in a well-defined order."""
+ if config.getOptions().DEBUG:
+- print "Final #objs = %d" % len(self.__objs)
++ print("Final #objs = %d" % len(self.__objs))
+ if config.getOptions().VDEBUG:
+- print "Running in visual debug mode"
++ print("Running in visual debug mode")
+
+ ## Sort drawing objects by layer
+@@ -59,5 +57,5 @@
+ for obj in drawingobjs:
+ if config.getOptions().DEBUG:
+- print "Depth = ", obj.getDepth()
++ print("Depth = ", obj.getDepth())
+ obj.draw(self.currentCanvas)
+
+@@ -70,7 +68,3 @@
+ c = self.drawToCanvas()
+ if c is not None and outfile is not None:
+- if pyxversion >= Version("0.12"):
+- c.writetofile(outfile, page_bbox=c.bbox().enlarged(enlargement))
+- else:
+- c.writetofile(outfile, bbox=c.bbox().enlarged(enlargement))
+-
++ c.writetofile(outfile, page_bbox=c.bbox().enlarged(enlargement))
+diff -r -U2 pyfeyn-0.3.5.orig/pyfeyn/feynml.py pyfeyn-0.3.5/pyfeyn/feynml.py
+--- pyfeyn-0.3.5.orig/pyfeyn/feynml.py 2011-02-20 23:29:40.000000000 +0600
++++ pyfeyn-0.3.5/pyfeyn/feynml.py 2016-01-24 12:08:07.881729805 +0600
+@@ -68,5 +68,5 @@
+ root.append(self.labelToXML(obj))
+ else:
+- print "Can't convert object to XML!"
++ print("Can't convert object to XML!")
+ # Combine single vertices/props into legs
+ self.legcount = 0
+@@ -76,14 +76,14 @@
+ if tag.attrib["id"]==point:
+ for tag2 in root.getchildren():
+- if ((tag2.attrib.has_key("source") and
++ if (("source" in tag2.attrib and
+ tag2.attrib["source"]==point) or
+- (tag2.attrib.has_key("target") and
++ ("target" in tag2.attrib and
+ tag2.attrib["target"]==point)):
+ attribs = tag2.attrib
+- if (tag2.attrib.has_key("source") and
++ if ("source" in tag2.attrib and
+ tag2.attrib["source"]==point):
+ del attribs["source"]
+ attribs["sense"] = "incoming"
+- if (tag2.attrib.has_key("target") and
++ if ("target" in tag2.attrib and
+ tag2.attrib["target"]==point):
+ attribs["sense"] = "outgoing"
+@@ -256,5 +256,5 @@
+ self.defaults = {}
+ if self.root.tag != "feynml":
+- raise "FeynML Error: <feynml> must be root element" % self.root.tag
++ raise Exception("FeynML Error: <feynml> must be root element" % self.root.tag)
+ for element in self.root:
+ if element.tag == "head":
+@@ -265,5 +265,5 @@
+ self.dicts.append({})
+ else:
+- raise "FeynML Error: invalid top-level tag <%s>" % element.tag
++ raise Exception("FeynML Error: invalid top-level tag <%s>" % element.tag)
+
+
+@@ -321,5 +321,5 @@
+ p2 = thedict[element.attrib["target"]]
+ except:
+- raise "FeynML Error: invalid attributes for <propagator> element"
++ raise Exception("FeynML Error: invalid attributes for <propagator> element")
+ l = NamedLine[thetype](p1, p2)
+ if "bend" in element.attrib:
+@@ -327,5 +327,5 @@
+ l.bend(float(element.attrib["bend"]))
+ except:
+- raise "FeynML Error: invalid bend amount %s for <propagator> element"%element.attrib["bend"]
++ raise Exception("FeynML Error: invalid bend amount %s for <propagator> element"%element.attrib["bend"])
+ if "style" in element.attrib:
+ l = self.apply_layout(element.attrib["style"], l)
+@@ -379,5 +379,5 @@
+ yradius = float(element.attrib["radius"][split:])
+ except:
+- raise "FeynML Error: invalid attribute for <blob> element"
++ raise Exception("FeynML Error: invalid attribute for <blob> element")
+ if shape=="circle":
+ b = Circle(x=x, y=y, radius=radius)
+@@ -385,5 +385,5 @@
+ b = Ellipse(x=x, y=y, xradius=xradius, yradius=yradius)
+ else:
+- raise "FeynML Error: invalid shape attribute for <blob> element"
++ raise Exception("FeynML Error: invalid shape attribute for <blob> element")
+ if "style" in element.attrib:
+ b = self.apply_layout(element.attrib["style"], b)
+@@ -393,5 +393,5 @@
+ thedict[element.attrib["id"]] = b
+ except:
+- raise "FeynML Error: missing id attribute in <blob> element"
++ raise Exception("FeynML Error: missing id attribute in <blob> element")
+ return b
+
+@@ -472,5 +472,5 @@
+ s = styling.split(":")
+ styledict[s[0].lstrip().rstrip()] = s[1]
+- if (styledict.has_key("fill-style")):
++ if "fill-style" in styledict:
+ filltype = styledict["fill-style"].split()
+ if filltype[0]=="solid":
+@@ -483,5 +483,5 @@
+ D,A = float(filltype[1]), int(filltype[2])
+ obj.fillstyles = [pyx.pattern.crosshatched(D,A)]
+- if (styledict.has_key("mark-shape") or styledict.has_key("mark-size"))\
++ if ("mark-shape" in styledict or "mark-size" in styledict)\
+ and isinstance(obj, DecoratedPoint):
+ try:
+@@ -494,7 +494,7 @@
+ marksize = 0.075
+ obj.setMark(marktype(size=marksize))
+- if (styledict.has_key("arrow-size") or styledict.has_key("arrow-angle")
+- or styledict.has_key("arrow-constrict")
+- or styledict.has_key("arrow-pos")) and isinstance(obj, Line):
++ if ("arrow-size" in styledict or "arrow-angle" in styledict
++ or "arrow-constrict" in styledict
++ or "arrow-pos" in styledict) and isinstance(obj, Line):
+ try:
+ arrsize = pyx.unit.length(float(styledict["arrow-size"]),unit="cm")
+@@ -514,11 +514,11 @@
+ arrpos = 0.5
+ obj.addArrow(arrow=Arrow(arrpos,arrsize,arrangle,arrconstrict))
+- if (styledict.has_key("parallel-arrow-size")
+- or styledict.has_key("parallel-arrow-angle")
+- or styledict.has_key("parallel-arrow-constrict")
+- or styledict.has_key("parallel-arrow-pos")
+- or styledict.has_key("parallel-arrow-length")
+- or styledict.has_key("parallel-arrow-displace")
+- or styledict.has_key("parallel-arrow-sense")) \
++ if ("parallel-arrow-size" in styledict
++ or "parallel-arrow-angle" in styledict
++ or "parallel-arrow-constrict" in styledict
++ or "parallel-arrow-pos" in styledict
++ or "parallel-arrow-length" in styledict
++ or "parallel-arrow-displace" in styledict
++ or "parallel-arrow-sense" in styledict) \
+ and isinstance(obj, Line):
+ try:
+@@ -552,5 +552,5 @@
+ obj.addParallelArrow(arrpos, arrdisp, arrlen, arrsize, arrangle,
+ arrconstrict, arrsense)
+- if styledict.has_key("is3d") and isinstance(obj, Line):
++ if "is3d" in styledict and isinstance(obj, Line):
+ fwords = ["0", "no", "false", "f", "off"]
+ twords = ["1", "yes", "true", "t", "on"]
+diff -r -U2 pyfeyn-0.3.5.orig/pyfeyn/hepnames.py pyfeyn-0.3.5/pyfeyn/hepnames.py
+--- pyfeyn-0.3.5.orig/pyfeyn/hepnames.py 2011-02-20 23:29:40.000000000 +0600
++++ pyfeyn-0.3.5/pyfeyn/hepnames.py 2016-01-24 12:12:08.927719668 +0600
+@@ -749,13 +749,13 @@
+ def is_photon(name):
+ """Check if the given name refers to the photon."""
+- return Photon_dict.has_key(name)
++ return name in Photon_dict
+
+ def is_gluon(name):
+ """Check if the given name refers to the gluon."""
+- return Gluon_dict.has_key(name)
++ return name in Gluon_dict
+
+ def is_weakboson(name):
+ """Check if the given name refers to a weak vector boson."""
+- return VectorBosons_dict.has_key(name)
++ return name in VectorBosons_dict
+
+ def is_gauge(name):
+@@ -767,5 +767,5 @@
+ def is_higgs(name):
+ """Check if the given name refers to a Higgs boson."""
+- return Higgses_dict.has_key(name)
++ return name in Higgses_dict
+
+ ## Fermion type testing
+@@ -773,9 +773,9 @@
+ def is_quark(name):
+ """Check if the given name refers to a quark."""
+- return Quarks_dict.has_key(name)
++ return name in Quarks_dict
+
+ def is_lepton(name):
+ """Check if the given name refers to a lepton."""
+- return Leptons_dict.has_key(name)
++ return name in Leptons_dict
+
+ def is_quark_lepton(name):
+@@ -787,13 +787,13 @@
+ def is_meson(name):
+ """Check if the given name refers to a meson."""
+- return mesons_dict.has_key(name)
++ return name in mesons_dict
+
+ def is_baryon(name):
+ """Check if the given name refers to a baryon."""
+- return Baryons_dict.has_key(name)
++ return name in Baryons_dict
+
+ def is_hadron(name):
+ """Check if the given name refers to a hadron."""
+- return Hadrons_dict.has_key(name)
++ return name in Hadrons_dict
+
+ ## Other type tests
+@@ -801,5 +801,5 @@
+ def is_ghost(name):
+ """Check if the given name refers to a ghost particle."""
+- return Ghost_dict.has_key(name)
++ return name in Ghost_dict
+
+ ## Classify particle according to its coarse physical type
+diff -r -U2 pyfeyn-0.3.5.orig/pyfeyn/lines.py pyfeyn-0.3.5/pyfeyn/lines.py
+--- pyfeyn-0.3.5.orig/pyfeyn/lines.py 2016-01-21 14:24:35.000000000 +0600
++++ pyfeyn-0.3.5/pyfeyn/lines.py 2016-01-24 22:02:12.045230810 +0600
+@@ -33,5 +33,5 @@
+ a TeXLabel object."""
+ if config.getOptions().DEBUG:
+- print "Adding label: " + text
++ print("Adding label: " + text)
+ #if text.__class__ == "Label":
+ # self.labels.append(label)
+@@ -39,5 +39,5 @@
+ self.labels.append(LineLabel(text=text, line=self, pos=pos, displace=displace, angle=angle, size=size))
+ if config.getOptions().DEBUG:
+- print "Labels = " + str(self.labels)
++ print("Labels = " + str(self.labels))
+ return self
+
+@@ -140,5 +140,5 @@
+ self.arcThru(arcpoint)
+ if config.getOptions().DEBUG:
+- print self.getVisiblePath()
++ print(self.getVisiblePath())
+ if config.getOptions().VDEBUG:
+ FeynDiagram.currenDiagram.currentCanvas.stroke(self.getVisiblePath(), [color.rgb.blue])
+@@ -212,5 +212,5 @@
+ except ZeroDivisionError:
+ if config.getOptions().DEBUG:
+- print "Grad 1 diverges"
++ print("Grad 1 diverges")
+ n13 = 1e100
+
+@@ -219,5 +219,5 @@
+ except ZeroDivisionError:
+ if config.getOptions().DEBUG:
+- print "Grad 2 diverges"
++ print("Grad 2 diverges")
+ n23 = 1e100
+
+@@ -258,5 +258,5 @@
+
+ if config.getOptions().DEBUG and arcangle1 == arcangle2:
+- print "Arc angles are the same - not drawing anything"
++ print("Arc angles are the same - not drawing anything")
+
+ ## Calculate cross product to determine direction of arc
+@@ -286,9 +286,6 @@
+ if len(subpaths) > 1:
+ if config.getOptions().DEBUG:
+- print "Num subpaths 1 = %d" % len(subpaths)
+- subpaths.sort(
+- lambda x, y :
+- int(pyx.unit.tocm(x.arclen() - y.arclen()) /
+- math.fabs(pyx.unit.tocm(x.arclen() - y.arclen()))) )
++ print("Num subpaths 1 = %d" % len(subpaths))
++ subpaths.sort(key=lambda x:pyx.unit.tocm(x.arclen()))
+ vispath = subpaths[-1]
+ if config.getOptions().VDEBUG:
+@@ -305,9 +302,6 @@
+ if len(subpaths) > 1:
+ if config.getOptions().DEBUG:
+- print "Num subpaths 2 = %d" % len(subpaths)
+- subpaths.sort(
+- lambda x, y :
+- int(pyx.unit.tocm(x.arclen() - y.arclen()) /
+- math.fabs(pyx.unit.tocm(x.arclen() - y.arclen()))) )
++ print("Num subpaths 2 = %d" % len(subpaths))
++ subpaths.sort(key=lambda x:pyx.unit.tocm(x.arclen()))
+ vispath = subpaths[-1]
+ if config.getOptions().VDEBUG:
+@@ -329,6 +323,6 @@
+ styles = self.styles + self.arrows
+ if config.getOptions().DEBUG:
+- print "Drawing " + str(self.__class__) + " with styles = " + str(styles)
+- print path
++ print("Drawing " + str(self.__class__) + " with styles = " + str(styles))
++ print(path)
+ canvas.stroke(path, styles)
+ for l in self.labels:
+@@ -382,6 +376,6 @@
+ ## TODO: call base class method?
+ if config.getOptions().DEBUG:
+- print "Drawing " + str(self.__class__) + " with styles = " + str(styles)
+- print path
++ print("Drawing " + str(self.__class__) + " with styles = " + str(styles))
++ print(path)
+ canvas.stroke(path, styles)
+ for l in self.labels:
+@@ -407,6 +401,6 @@
+ ## TODO: call base class method?
+ if config.getOptions().DEBUG:
+- print "Drawing " + str(self.__class__) + " with styles = " + str(styles)
+- print path
++ print("Drawing " + str(self.__class__) + " with styles = " + str(styles))
++ print(path)
+ canvas.stroke(path, styles)
+ for l in self.labels:
+@@ -520,5 +514,5 @@
+ styles = self.styles + self.arrows
+ if config.getOptions().DEBUG:
+- print "Drawing " + str(self.__class__) + " with styles = " + str(styles)
++ print("Drawing " + str(self.__class__) + " with styles = " + str(styles))
+ mypath = self.getDeformedPath()
+ if config.getOptions().DRAFT or not self.is3D:
+@@ -615,5 +609,5 @@
+ styles = self.styles + self.arrows
+ if config.getOptions().DEBUG:
+- print "Drawing " + str(self.__class__) + " with styles = " + str(styles)
++ print("Drawing " + str(self.__class__) + " with styles = " + str(styles))
+ canvas.stroke(self.getDeformedPath(), styles)
+ for l in self.labels:
+@@ -671,5 +665,5 @@
+ curveradius = abs(curveradius/pyx.unit.m)
+ #if config.getOptions().DEBUG:
+- # print self.__class__, "- curve radius = ", curveradius
++ # print(self.__class__, "- curve radius = ", curveradius)
+ if (mincurveradius is None or curveradius < mincurveradius):
+ mincurveradius = curveradius
+@@ -680,5 +674,5 @@
+ numhloopcurves += int(0.1/mincurveradius)
+ if config.getOptions().DEBUG:
+- print self.__class__, "- min curvature radius = ", mincurveradius, "->", numhloopcurves, "curves/hloop"
++ print(self.__class__, "- min curvature radius = ", mincurveradius, "->", numhloopcurves, "curves/hloop")
+
+ defo = pyx.deformer.cycloid(self.arcradius, intwindings, curvesperhloop=numhloopcurves,
+@@ -691,5 +685,5 @@
+ styles = self.styles + self.arrows
+ if config.getOptions().DEBUG:
+- print "Drawing " + str(self.__class__) + " with styles = " + str(styles)
++ print("Drawing " + str(self.__class__) + " with styles = " + str(styles))
+ mypath1 = self.getDeformedPath(+1)
+ mypath2 = self.getDeformedPath(-1)
+@@ -789,5 +783,5 @@
+ curveradius = abs(mincurveradius/pyx.unit.m)
+ #if config.getOptions().DEBUG:
+- # print self.__class__, "- curvature radius = ", curveradius
++ # print(self.__class__, "- curvature radius = ", curveradius)
+ if (mincurveradius is None or curveradius < mincurveradius):
+ mincurveradius = curveradius
+@@ -800,5 +794,5 @@
+ numhloopcurves += int(0.1/mincurveradius)
+ if config.getOptions().DEBUG:
+- print self.__class__, "- min curve radius = ", mincurveradius, "->", numhloopcurves, "curves/hloop"
++ print(self.__class__, "- min curve radius = ", mincurveradius, "->", numhloopcurves, "curves/hloop")
+
+ defo = pyx.deformer.cycloid(self.arcradius, intwindings, curvesperhloop=numhloopcurves,
+@@ -811,5 +805,5 @@
+ styles = self.styles + self.arrows
+ if config.getOptions().DEBUG:
+- print "Drawing " + str(self.__class__) + " with styles = " + str(styles)
++ print("Drawing " + str(self.__class__) + " with styles = " + str(styles))
+ mypath1 = self.getVisiblePath()
+ mypath2 = self.getDeformedPath()
+@@ -913,5 +907,5 @@
+ curveradius = abs(curvature/pyx.unit.m)
+ #if config.getOptions().DEBUG:
+- # print self.__class__, "- curvature radius = ", curveradius
++ # print(self.__class__, "- curvature radius = ", curveradius)
+ if (mincurveradius is None or curveradius < mincurveradius):
+ mincurveradius = curveradius
+@@ -924,5 +918,5 @@
+ numhloopcurves += int(0.2/mincurveradius)
+ if config.getOptions().DEBUG:
+- print self.__class__, "- min curve radius = ", mincurveradius, "->", numhloopcurves, "curves/hloop"
++ print(self.__class__, "- min curve radius = ", mincurveradius, "->", numhloopcurves, "curves/hloop")
+
+ defo = pyx.deformer.cycloid(self.arcradius, intwindings, curvesperhloop=numhloopcurves,
+@@ -935,5 +929,5 @@
+ styles = self.styles + self.arrows
+ if config.getOptions().DEBUG:
+- print "Drawing " + str(self.__class__) + " with styles = " + str(styles)
++ print("Drawing " + str(self.__class__) + " with styles = " + str(styles))
+ mypath1 = self.getVisiblePath()
+ mypath2 = self.getDeformedPath()
+@@ -1034,5 +1028,5 @@
+ curveradius = abs(curveradius/pyx.unit.m)
+ #if config.getOptions().DEBUG:
+- # print self.__class__, "- curve radius = ", curveradius
++ # print(self.__class__, "- curve radius = ", curveradius)
+ if (mincurveradius is None or curveradius < mincurveradius):
+ mincurveradius = curveradius
+@@ -1043,5 +1037,5 @@
+ numhloopcurves += int(0.1/mincurveradius)
+ if config.getOptions().DEBUG:
+- print self.__class__, "- min curvature radius = ", mincurveradius, "->", numhloopcurves, "curves/hloop"
++ print(self.__class__, "- min curvature radius = ", mincurveradius, "->", numhloopcurves, "curves/hloop")
+
+ defo = pyx.deformer.cycloid(self.arcradius, intwindings, curvesperhloop=numhloopcurves,
+@@ -1054,5 +1048,5 @@
+ styles = self.styles + self.arrows
+ if config.getOptions().DEBUG:
+- print "Drawing " + str(self.__class__) + " with styles = " + str(styles)
++ print("Drawing " + str(self.__class__) + " with styles = " + str(styles))
+ mypath = [self.getVisiblePath(), self.getDeformedPath(+1), self.getDeformedPath(-1)]
+ if self.inverted:
+diff -r -U2 pyfeyn-0.3.5.orig/pyfeyn/points.py pyfeyn-0.3.5/pyfeyn/points.py
+--- pyfeyn-0.3.5.orig/pyfeyn/points.py 2016-01-21 14:24:35.000000000 +0600
++++ pyfeyn-0.3.5/pyfeyn/points.py 2016-01-24 11:57:49.863755795 +0600
+@@ -36,8 +36,8 @@
+ a PointLable object."""
+ if config.getOptions().DEBUG:
+- print "Adding label: " + text
++ print("Adding label: " + text)
+ self.labels.append(PointLabel(text=text, point=self, displace=displace, angle=angle, size=size))
+ if config.getOptions().DEBUG:
+- print "Labels = " + str(self.labels)
++ print("Labels = " + str(self.labels))
+ return self
+
+diff -r -U2 pyfeyn-0.3.5.orig/pyfeyn/utils.py pyfeyn-0.3.5/pyfeyn/utils.py
+--- pyfeyn-0.3.5.orig/pyfeyn/utils.py 2011-02-20 23:29:40.000000000 +0600
++++ pyfeyn-0.3.5/pyfeyn/utils.py 2016-01-24 12:12:43.881718198 +0600
+@@ -41,5 +41,5 @@
+ def getDepth(self):
+ """Return the depth at which this instance lives."""
+- if self.__dict__.has_key("depth"):
++ if "depth" in self.__dict__:
+ return self.depth
+ else:
+@@ -52,7 +52,7 @@
+
+ if config.getOptions().DEBUG:
+- print "Comparing visible classes: ", \
++ print("Comparing visible classes: ", \
+ self.__class__, "->", self.getDepth(), "vs.", \
+- other.__class__, "->", other.getDepth()
++ other.__class__, "->", other.getDepth())
+ else:
+ return cmp(self.getDepth(), other.getDepth())
diff --git a/dev-python/pyfeyn/pyfeyn-0.3.5.ebuild b/dev-python/pyfeyn/pyfeyn-0.3.5.ebuild
new file mode 100644
index 000000000000..0f438a75a2c4
--- /dev/null
+++ b/dev-python/pyfeyn/pyfeyn-0.3.5.ebuild
@@ -0,0 +1,23 @@
+# Copyright 1999-2016 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+EAPI=5
+PYTHON_COMPAT=( python3_{3,4,5} )
+
+inherit distutils-r1
+
+DESCRIPTION="Python package for drawing Feynman diagrams"
+HOMEPAGE="http://pyfeyn.hepforge.org/ https://pypi.python.org/pypi/pyfeyn/"
+SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${P}.tar.gz"
+
+LICENSE="GPL-2+"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE="latex"
+
+DEPEND=""
+RDEPEND=">=dev-python/pyx-0.14[${PYTHON_USEDEP}]
+ latex? ( dev-texlive/texlive-science )"
+
+PATCHES=( "${FILESDIR}"/${P}.patch )