{ "cells": [ { "cell_type": "markdown", "id": "f32ecc80", "metadata": {}, "source": [ "# TikZ-Feynman" ] }, { "cell_type": "code", "execution_count": 1, "id": "d7959cdb", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2.4.1.36\n" ] } ], "source": [ "from pyfeyn2.feynmandiagram import FeynmanDiagram, Leg, Propagator, Vertex, PDG\n", "from pyfeyn2.render.latex.tikzfeynman import TikzFeynmanRender\n", "from pyfeyn2.auto.position import feynman_adjust_points\n", "import pyfeyn2\n", "print(pyfeyn2.__version__)" ] }, { "cell_type": "markdown", "id": "891100ba", "metadata": {}, "source": [ "## Simple Case" ] }, { "cell_type": "markdown", "id": "151afea0", "metadata": {}, "source": [ "We set the positions of all vertices here." ] }, { "cell_type": "code", "execution_count": 2, "id": "937fa0bc", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/tmp/ipykernel_10757/1904706615.py:1: DeprecatedWarning: __init__ is deprecated as of 2.2.6.\n", " v1 = Vertex(\"v1\").with_xy(-1, 0).with_shape(\"blob\")\n", "/tmp/ipykernel_10757/1904706615.py:2: DeprecatedWarning: __init__ is deprecated as of 2.2.6.\n", " v2 = Vertex(\"v2\").with_xy(1, 0).with_style(\"symbol : dot\")\n", "/tmp/ipykernel_10757/1904706615.py:4: DeprecatedWarning: __init__ is deprecated as of 2.2.6.\n", " fd = FeynmanDiagram().add(\n", "/tmp/ipykernel_10757/1904706615.py:6: DeprecatedWarning: __init__ is deprecated as of 2.2.6.\n", " Propagator(name=\"g\").connect(v1, v2),\n", "/tmp/ipykernel_10757/1904706615.py:7: DeprecatedWarning: __init__ is deprecated as of 2.2.6.\n", " Leg(name=\"g\").with_target(v1).with_xy(-2, 1).with_incoming(),\n", "/tmp/ipykernel_10757/1904706615.py:8: DeprecatedWarning: __init__ is deprecated as of 2.2.6.\n", " Leg(name=\"g\").with_target(v1).with_xy(-2, -1).with_incoming().with_class(\"notred\"),\n", "/tmp/ipykernel_10757/1904706615.py:9: DeprecatedWarning: __init__ is deprecated as of 2.2.6.\n", " Leg(name=\"g\").with_target(v2).with_xy(2, 1).with_outgoing().with_class(\"red\"),\n", "/tmp/ipykernel_10757/1904706615.py:10: DeprecatedWarning: __init__ is deprecated as of 2.2.6.\n", " Leg(\"myid1\",name=\"g\").with_target(v2).with_xy(2, -1).with_outgoing().with_style_property(\"bend-direction\",\"right\")\n" ] } ], "source": [ "v1 = Vertex(\"v1\").with_xy(-1, 0).with_shape(\"blob\")\n", "v2 = Vertex(\"v2\").with_xy(1, 0).with_style(\"symbol : dot\")\n", "\n", "fd = FeynmanDiagram().add(\n", " v1,v2,\n", " Propagator(name=\"g\").connect(v1, v2),\n", " Leg(name=\"g\").with_target(v1).with_xy(-2, 1).with_incoming(),\n", " Leg(name=\"g\").with_target(v1).with_xy(-2, -1).with_incoming().with_class(\"notred\"),\n", " Leg(name=\"g\").with_target(v2).with_xy(2, 1).with_outgoing().with_class(\"red\"),\n", " Leg(\"myid1\",name=\"g\").with_target(v2).with_xy(2, -1).with_outgoing().with_style_property(\"bend-direction\",\"right\")\n", ")" ] }, { "cell_type": "markdown", "id": "84ba61f6", "metadata": {}, "source": [ "### Style" ] }, { "cell_type": "code", "execution_count": 3, "id": "786153ab", "metadata": {}, "outputs": [], "source": [ "fd = fd.with_rule(\"\"\"\n", "* {\n", " bend-direction: left;\n", " color: green;\n", "}\n", "\"\"\")" ] }, { "cell_type": "code", "execution_count": 4, "id": "32e6209a-9c04-4100-bdb3-2307c5b45d88", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "FeynmanDiagram(id='FeynmanDiagram8', style=cssutils.css.CSSStyleDeclaration(cssText=''), clazz=None, propagators=[Propagator(id='Propagator9', pdgid=21, name='g', type='gluon', particle=, style=cssutils.css.CSSStyleDeclaration(cssText=''), clazz=None, label=None, momentum=None, source='v1', target='v2')], vertices=[Vertex(id='v1', style=cssutils.css.CSSStyleDeclaration(cssText=''), clazz=None, x=-1.0, y=0.0, z=None, label=None, shape='blob'), Vertex(id='v2', style=cssutils.css.CSSStyleDeclaration(cssText='symbol: dot'), clazz=None, x=1.0, y=0.0, z=None, label=None, shape=None)], legs=[Leg(id='Leg10', pdgid=21, name='g', type='gluon', particle=, style=cssutils.css.CSSStyleDeclaration(cssText=''), clazz=None, label=None, momentum=None, target='v1', x=-2.0, y=1.0, z=None, shape=None, sense='incoming', external=None), Leg(id='Leg11', pdgid=21, name='g', type='gluon', particle=, style=cssutils.css.CSSStyleDeclaration(cssText=''), clazz='notred', label=None, momentum=None, target='v1', x=-2.0, y=-1.0, z=None, shape=None, sense='incoming', external=None), Leg(id='Leg12', pdgid=21, name='g', type='gluon', particle=, style=cssutils.css.CSSStyleDeclaration(cssText=''), clazz='red', label=None, momentum=None, target='v2', x=2.0, y=1.0, z=None, shape=None, sense='outgoing', external=None), Leg(id='myid1', pdgid=21, name='g', type='gluon', particle=, style=cssutils.css.CSSStyleDeclaration(cssText='bend-direction: right'), clazz=None, label=None, momentum=None, target='v2', x=2.0, y=-1.0, z=None, shape=None, sense='outgoing', external=None)], sheet=cssutils.css.CSSStyleSheet(href=None, media=None, title=None))\n" ] } ], "source": [ "print(fd)" ] }, { "cell_type": "code", "execution_count": 5, "id": "3d6a447e", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "b'* {\\n bend-direction: left;\\n color: green\\n }\\n.red {\\n color: red\\n }\\n.notred {\\n color: blue\\n }\\n#myid1 {\\n color: gray\\n }\\n[pdgid=\"21\"] {\\n color: black\\n }\\n#myid2 {\\n color: gray\\n }\\ndiagram.propagator {\\n color: green\\n }'" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fd.add_rules(\"\"\"\n", ".red {\n", " color: red;\n", "}\n", ".notred {\n", " color: blue;\n", "}\n", "#myid1 {\n", " color: gray;\n", "}\n", "[pdgid=\"21\"] {\n", " color: black;\n", "}\n", "#myid2 {\n", " color: gray;\n", "}\n", "diagram.propagator {\n", " color: green;\n", "}\n", "\"\"\")\n", "fd.sheet.cssText" ] }, { "cell_type": "code", "execution_count": 6, "id": "1b3824e3", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'\\n\\n \\n g\\n v1\\n v2\\n \\n \\n \\n \\n g\\n v1\\n incoming\\n \\n \\n g\\n v1\\n incoming\\n \\n \\n g\\n v2\\n outgoing\\n \\n \\n g\\n v2\\n outgoing\\n \\n\\n'" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fd.to_xml()" ] }, { "cell_type": "code", "execution_count": 7, "id": "a1474ec0", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\\documentclass[preview,crop,tikz]{standalone}%\n", "\\usepackage[T1]{fontenc}%\n", "\\usepackage[utf8]{inputenc}%\n", "\\usepackage{lmodern}%\n", "\\usepackage{textcomp}%\n", "\\usepackage{lastpage}%\n", "%\n", "\\RequirePackage{luatex85}%\n", "\\usepackage[compat=1.1.0]{tikz-feynman}%\n", "%\n", "\\begin{document}%\n", "\\normalsize%\n", "\\begin{tikzpicture}\n", "\\pgfsetblendmode{multiply}\n", "\\begin{feynman}\n", "\t\\vertex (v1) [blob,scale=] at (-1.0,0.0) {};\n", "\t\\vertex (v1clone) [] at (-1.0,0.0);\n", "\t\\vertex (v2) [dot,scale=] at (1.0,0.0) {};\n", "\t\\vertex (v2clone) [] at (1.0,0.0);\n", "\t\\vertex (Leg10) [] at (-2.0,1.0);\n", "\t\\vertex (Leg11) [] at (-2.0,-1.0);\n", "\t\\vertex (Leg12) [] at (2.0,1.0);\n", "\t\\vertex (myid1) [] at (2.0,-1.0);\n", "\\begin{scope}[transparency group]\t\\diagram*{\n", "\t\t(v1) -- [gluon,black,bend left] (v2),\n", "\t};\n", "\\end{scope}\\begin{scope}[transparency group]\t\\diagram*{\n", "\t\t(Leg10) -- [gluon,black,bend left] (v1),\n", "\t};\n", "\\end{scope}\\begin{scope}[transparency group]\t\\diagram*{\n", "\t\t(Leg11) -- [gluon,blue,bend left] (v1),\n", "\t};\n", "\\end{scope}\\begin{scope}[transparency group]\t\\diagram*{\n", "\t\t(v2) -- [gluon,red,bend left] (Leg12),\n", "\t};\n", "\\end{scope}\\begin{scope}[transparency group]\t\\diagram*{\n", "\t\t(v2) -- [gluon,gray,bend right] (myid1),\n", "\t};\n", "\\end{scope}\\end{feynman}\n", "\\end{tikzpicture}\n", "%\n", "\\end{document}\n" ] } ], "source": [ "tfd = TikzFeynmanRender(fd)\n", "print(tfd.get_src())" ] }, { "cell_type": "code", "execution_count": 8, "id": "a7b7739c", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "This is LuaHBTeX, Version 1.13.0 (TeX Live 2021 Gentoo Linux) \n", " system commands enabled.\n", "(/tmp/tmprcpt4h6m/test.tex\n", "LaTeX2e <2020-10-01> patch level 4\n", " L3 programming layer <2021-02-18>\n", "(/usr/share/texmf-dist/tex/latex/standalone/standalone.cls\n", "Document Class: standalone 2018/03/26 v1.3a Class to compile TeX sub-files stan\n", "dalone\n", "(/usr/share/texmf-dist/tex/latex/tools/shellesc.sty)\n", "(/usr/share/texmf-dist/tex/generic/iftex/ifluatex.sty\n", "(/usr/share/texmf-dist/tex/generic/iftex/iftex.sty))\n", "(/usr/share/texmf-dist/tex/latex/xkeyval/xkeyval.sty\n", "(/usr/share/texmf-dist/tex/generic/xkeyval/xkeyval.tex\n", "(/usr/share/texmf-dist/tex/generic/xkeyval/xkvutils.tex\n", "(/usr/share/texmf-dist/tex/generic/xkeyval/keyval.tex))))\n", "(/usr/share/texmf-dist/tex/latex/standalone/standalone.cfg)\n", "(/usr/share/texmf-dist/tex/latex/base/article.cls\n", "Document Class: article 2020/04/10 v1.4m Standard LaTeX document class\n", "(/usr/share/texmf-dist/tex/latex/base/size10.clo))\n", "(/usr/share/texmf-dist/tex/generic/luatex85/luatex85.sty)\n", "(/usr/share/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty\n", "(/usr/share/texmf-dist/tex/generic/infwarerr/infwarerr.sty)\n", "(/usr/share/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty))\n", "(/usr/share/texmf-site/tex/latex/pgf/frontendlayer/tikz.sty\n", "(/usr/share/texmf-site/tex/latex/pgf/basiclayer/pgf.sty\n", "(/usr/share/texmf-site/tex/latex/pgf/utilities/pgfrcs.sty\n", "(/usr/share/texmf-site/tex/generic/pgf/utilities/pgfutil-common.tex\n", "(/usr/share/texmf-site/tex/generic/pgf/utilities/pgfutil-common-lists.tex))\n", "(/usr/share/texmf-site/tex/generic/pgf/utilities/pgfutil-latex.def)\n", "(/usr/share/texmf-site/tex/generic/pgf/utilities/pgfrcs.code.tex\n", "(/usr/share/texmf-site/tex/generic/pgf/pgf.revision.tex)))\n", "(/usr/share/texmf-site/tex/latex/pgf/basiclayer/pgfcore.sty\n", "(/usr/share/texmf-dist/tex/latex/graphics/graphicx.sty\n", "(/usr/share/texmf-dist/tex/latex/graphics/graphics.sty\n", "(/usr/share/texmf-dist/tex/latex/graphics/trig.sty)\n", "(/usr/share/texmf-dist/tex/latex/graphics-cfg/graphics.cfg)\n", "(/usr/share/texmf-dist/tex/latex/graphics-def/luatex.def)))\n", "(/usr/share/texmf-site/tex/latex/pgf/systemlayer/pgfsys.sty\n", "(/usr/share/texmf-site/tex/generic/pgf/systemlayer/pgfsys.code.tex\n", "(/usr/share/texmf-site/tex/generic/pgf/utilities/pgfkeys.code.tex\n", "(/usr/share/texmf-site/tex/generic/pgf/utilities/pgfkeysfiltered.code.tex))\n", "(/usr/share/texmf-site/tex/generic/pgf/systemlayer/pgf.cfg)\n", "(/usr/share/texmf-site/tex/generic/pgf/systemlayer/pgfsys-luatex.def\n", "(/usr/share/texmf-site/tex/generic/pgf/systemlayer/pgfsys-common-pdf.def)))\n", "(/usr/share/texmf-site/tex/generic/pgf/systemlayer/pgfsyssoftpath.code.tex)\n", "(/usr/share/texmf-site/tex/generic/pgf/systemlayer/pgfsysprotocol.code.tex))\n", "(/usr/share/texmf-dist/tex/latex/xcolor/xcolor.sty\n", "(/usr/share/texmf-dist/tex/latex/graphics-cfg/color.cfg))\n", "(/usr/share/texmf-site/tex/generic/pgf/basiclayer/pgfcore.code.tex\n", "(/usr/share/texmf-site/tex/generic/pgf/math/pgfmath.code.tex\n", "(/usr/share/texmf-site/tex/generic/pgf/math/pgfmathcalc.code.tex\n", "(/usr/share/texmf-site/tex/generic/pgf/math/pgfmathutil.code.tex)\n", "(/usr/share/texmf-site/tex/generic/pgf/math/pgfmathparser.code.tex)\n", "(/usr/share/texmf-site/tex/generic/pgf/math/pgfmathfunctions.code.tex\n", "(/usr/share/texmf-site/tex/generic/pgf/math/pgfmathfunctions.basic.code.tex)\n", "(/usr/share/texmf-site/tex/generic/pgf/math/pgfmathfunctions.trigonometric.code\n", ".tex)\n", "(/usr/share/texmf-site/tex/generic/pgf/math/pgfmathfunctions.random.code.tex)\n", "(/usr/share/texmf-site/tex/generic/pgf/math/pgfmathfunctions.comparison.code.te\n", "x) (/usr/share/texmf-site/tex/generic/pgf/math/pgfmathfunctions.base.code.tex)\n", "(/usr/share/texmf-site/tex/generic/pgf/math/pgfmathfunctions.round.code.tex)\n", "(/usr/share/texmf-site/tex/generic/pgf/math/pgfmathfunctions.misc.code.tex)\n", "(/usr/share/texmf-site/tex/generic/pgf/math/pgfmathfunctions.integerarithmetics\n", ".code.tex))) (/usr/share/texmf-site/tex/generic/pgf/math/pgfmathfloat.code.tex)\n", ") (/usr/share/texmf-site/tex/generic/pgf/math/pgfint.code.tex)\n", "(/usr/share/texmf-site/tex/generic/pgf/basiclayer/pgfcorepoints.code.tex)\n", "(/usr/share/texmf-site/tex/generic/pgf/basiclayer/pgfcorepathconstruct.code.tex\n", ") (/usr/share/texmf-site/tex/generic/pgf/basiclayer/pgfcorepathusage.code.tex)\n", "(/usr/share/texmf-site/tex/generic/pgf/basiclayer/pgfcorescopes.code.tex)\n", "(/usr/share/texmf-site/tex/generic/pgf/basiclayer/pgfcoregraphicstate.code.tex)\n", "\n", "(/usr/share/texmf-site/tex/generic/pgf/basiclayer/pgfcoretransformations.code.t\n", "ex) (/usr/share/texmf-site/tex/generic/pgf/basiclayer/pgfcorequick.code.tex)\n", "(/usr/share/texmf-site/tex/generic/pgf/basiclayer/pgfcoreobjects.code.tex)\n", "(/usr/share/texmf-site/tex/generic/pgf/basiclayer/pgfcorepathprocessing.code.te\n", "x) (/usr/share/texmf-site/tex/generic/pgf/basiclayer/pgfcorearrows.code.tex)\n", "(/usr/share/texmf-site/tex/generic/pgf/basiclayer/pgfcoreshade.code.tex)\n", "(/usr/share/texmf-site/tex/generic/pgf/basiclayer/pgfcoreimage.code.tex\n", "(/usr/share/texmf-site/tex/generic/pgf/basiclayer/pgfcoreexternal.code.tex))\n", "(/usr/share/texmf-site/tex/generic/pgf/basiclayer/pgfcorelayers.code.tex)\n", "(/usr/share/texmf-site/tex/generic/pgf/basiclayer/pgfcoretransparency.code.tex)\n", " (/usr/share/texmf-site/tex/generic/pgf/basiclayer/pgfcorepatterns.code.tex)\n", "(/usr/share/texmf-site/tex/generic/pgf/basiclayer/pgfcorerdf.code.tex)))\n", "(/usr/share/texmf-site/tex/generic/pgf/modules/pgfmoduleshapes.code.tex)\n", "(/usr/share/texmf-site/tex/generic/pgf/modules/pgfmoduleplot.code.tex)\n", "(/usr/share/texmf-site/tex/latex/pgf/compatibility/pgfcomp-version-0-65.sty)\n", "(/usr/share/texmf-site/tex/latex/pgf/compatibility/pgfcomp-version-1-18.sty))\n", "(/usr/share/texmf-site/tex/latex/pgf/utilities/pgffor.sty\n", "(/usr/share/texmf-site/tex/latex/pgf/utilities/pgfkeys.sty\n", "(/usr/share/texmf-site/tex/generic/pgf/utilities/pgfkeys.code.tex))\n", "(/usr/share/texmf-site/tex/latex/pgf/math/pgfmath.sty\n", "(/usr/share/texmf-site/tex/generic/pgf/math/pgfmath.code.tex))\n", "(/usr/share/texmf-site/tex/generic/pgf/utilities/pgffor.code.tex\n", "(/usr/share/texmf-site/tex/generic/pgf/math/pgfmath.code.tex)))\n", "(/usr/share/texmf-site/tex/generic/pgf/frontendlayer/tikz/tikz.code.tex\n", "(/usr/share/texmf-site/tex/generic/pgf/libraries/pgflibraryplothandlers.code.te\n", "x) (/usr/share/texmf-site/tex/generic/pgf/modules/pgfmodulematrix.code.tex)\n", "(/usr/share/texmf-site/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary\n", "topaths.code.tex)))) (/usr/share/texmf-dist/tex/latex/base/fontenc.sty\n", "(/usr/share/texmf-dist/tex/latex/lm/t1lmr.fd))\n", "(/usr/share/texmf-dist/tex/latex/base/inputenc.sty\n", "\n", "Package inputenc Warning: inputenc package ignored with utf8 based engines.\n", "\n", ") (/usr/share/texmf-dist/tex/latex/lm/lmodern.sty)\n", "(/usr/share/texmf-dist/tex/latex/base/textcomp.sty)\n", "(/usr/share/texmf-dist/tex/latex/lastpage/lastpage.sty)\n", "(/usr/share/texmf-dist/tex/latex/tikz-feynman/tikz-feynman.sty\n", "(/usr/share/texmf-dist/tex/latex/pgfopts/pgfopts.sty)\n", "(/usr/share/texmf-dist/tex/latex/tikz-feynman/tikzlibraryfeynman.code.tex\n", "(/usr/share/texmf-site/tex/generic/pgf/libraries/pgflibraryarrows.meta.code.tex\n", ")\n", "(/usr/share/texmf-site/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary\n", "calc.code.tex)\n", "(/usr/share/texmf-site/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary\n", "decorations.code.tex\n", "(/usr/share/texmf-site/tex/generic/pgf/modules/pgfmoduledecorations.code.tex))\n", "(/usr/share/texmf-site/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary\n", "decorations.markings.code.tex\n", "(/usr/share/texmf-site/tex/generic/pgf/libraries/decorations/pgflibrarydecorati\n", "ons.markings.code.tex))\n", "(/usr/share/texmf-site/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary\n", "decorations.pathmorphing.code.tex\n", "(/usr/share/texmf-site/tex/generic/pgf/libraries/decorations/pgflibrarydecorati\n", "ons.pathmorphing.code.tex))\n", "(/usr/share/texmf-site/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary\n", "decorations.pathreplacing.code.tex\n", "(/usr/share/texmf-site/tex/generic/pgf/libraries/decorations/pgflibrarydecorati\n", "ons.pathreplacing.code.tex))\n", "(/usr/share/texmf-site/tex/generic/pgf/frontendlayer/tikz/libraries/graphs/tikz\n", "librarygraphs.code.tex)\n", "(/usr/share/texmf-site/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary\n", "patterns.code.tex\n", "(/usr/share/texmf-site/tex/generic/pgf/libraries/pgflibrarypatterns.code.tex))\n", "(/usr/share/texmf-site/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary\n", "positioning.code.tex)\n", "(/usr/share/texmf-site/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrary\n", "shapes.geometric.code.tex\n", "(/usr/share/texmf-site/tex/generic/pgf/libraries/shapes/pgflibraryshapes.geomet\n", "ric.code.tex))\n", "(/usr/share/texmf-site/tex/generic/pgf/graphdrawing/tex/tikzlibrarygraphdrawing\n", ".code.tex\n", "(/usr/share/texmf-site/tex/generic/pgf/graphdrawing/tex/pgflibrarygraphdrawing.\n", "code.tex))\n", "(/usr/share/texmf-dist/tex/latex/tikz-feynman/tikzfeynman.keys.code.tex)))\n", "(/usr/share/texmf-dist/tex/latex/l3backend/l3backend-luatex.def)\n", "No file test.aux.\n", "(/usr/share/texmf-dist/tex/latex/base/ts1cmr.fd)\n", "(/usr/share/texmf-dist/tex/context/base/mkii/supp-pdf.mkii\n", "[Loading MPS to PDF converter (version 2006.09.02).]\n", ") (/usr/share/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty\n", "(/usr/share/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg))\n", "! Undefined control sequence.\n", "\\pgfmathsetlength ...\\pgfmath@onquick #2\\pgfmath@ \n", " {\\begingroup \\pgfmath@sele...\n", "\n", "l.16 \t\\vertex (v1) [blob,scale=] at (-1.0,0.0) {};\n", " \n", "! Argument of \\pgfmath@@onquick has an extra }.\n", " \n", "\\par \n", "l.16 \t\\vertex (v1) [blob,scale=] at (-1.0,0.0) {};\n", " \n", "Runaway argument?\n", "{\\begingroup \\pgfmath@selectfont \\pgf@x \\unskip \\expandafter \\endgroup \\ETC.\n", "! Paragraph ended before \\pgfmath@@onquick was complete.\n", " \n", "\\par \n", "l.16 \t\\vertex (v1) [blob,scale=] at (-1.0,0.0) {};\n", " \n", "! Undefined control sequence.\n", "\\pgfmathsetlength ...\\pgfmath@onquick #2\\pgfmath@ \n", " {\\begingroup \\pgfmath@sele...\n", "\n", "l.18 \t\\vertex (v2) [dot,scale=] at (1.0,0.0) {};\n", " \n", "! Argument of \\pgfmath@@onquick has an extra }.\n", " \n", "\\par \n", "l.18 \t\\vertex (v2) [dot,scale=] at (1.0,0.0) {};\n", " \n", "Runaway argument?\n", "{\\begingroup \\pgfmath@selectfont \\pgf@x \\unskip \\expandafter \\endgroup \\ETC.\n", "! Paragraph ended before \\pgfmath@@onquick was complete.\n", " \n", "\\par \n", "l.18 \t\\vertex (v2) [dot,scale=] at (1.0,0.0) {};\n", " \n", "\n", "Package pgf Warning: Returning node center instead of a point on node border. D\n", "id you specify a point identical to the center of node ``v1''? on input line 26\n", ".\n", "\n", "\n", "Package pgf Warning: Returning node center instead of a point on node border. D\n", "id you specify a point identical to the center of node ``v2''? on input line 26\n", ".\n", "\n", "[1]\n", "\n", "Package lastpage Warning: Rerun to get the references right on input line 42.\n", "\n", "\n", "AED: lastpage setting LastPage\n", "(./test.aux)\n", "\n", "LaTeX Warning: Label(s) may have changed. Rerun to get cross-references right.\n", "\n", ")\n", "(see the transcript file for additional information)\n", " 420 words of node memory still in use:\n", " 3 hlist, 1 vlist, 1 rule, 2 glue, 3 kern, 1 glyph, 6 attribute, 48 glue_spec\n", ", 6 attribute_list, 3 write nodes\n", " avail lists: 1:8,2:1676,3:478,4:32,5:22,6:2,7:739,9:182\n", "Output written on test.pdf (1 page, 8874 bytes).\n", "Transcript written on test.log.\n", "\n" ] }, { "ename": "CalledProcessError", "evalue": "Command '['lualatex', '-shell-escape', '--interaction=nonstopmode', '/tmp/tmprcpt4h6m/test.tex']' returned non-zero exit status 1.", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mCalledProcessError\u001b[0m Traceback (most recent call last)", "Cell \u001b[0;32mIn[8], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mtfd\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrender\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mtest.pdf\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\n", "File \u001b[0;32m~/git/pyfeyn2/pyfeyn2/render/latex/latex.py:63\u001b[0m, in \u001b[0;36mLatexRender.render\u001b[0;34m(self, file, show, resolution, width, height, clean_up, temp_dir)\u001b[0m\n\u001b[1;32m 61\u001b[0m tfile \u001b[38;5;241m=\u001b[39m re\u001b[38;5;241m.\u001b[39msub(\u001b[38;5;124mr\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m\\\u001b[39m\u001b[38;5;124m.pdf$\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m\"\u001b[39m, os\u001b[38;5;241m.\u001b[39mpath\u001b[38;5;241m.\u001b[39mbasename(file)\u001b[38;5;241m.\u001b[39mstrip())\n\u001b[1;32m 62\u001b[0m tfile \u001b[38;5;241m=\u001b[39m os\u001b[38;5;241m.\u001b[39mpath\u001b[38;5;241m.\u001b[39mjoin(temp_dir\u001b[38;5;241m.\u001b[39mname, tfile)\n\u001b[0;32m---> 63\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgenerate_pdf\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 64\u001b[0m \u001b[43m \u001b[49m\u001b[43mtfile\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 65\u001b[0m \u001b[43m \u001b[49m\u001b[43mclean_tex\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mclean_up\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 66\u001b[0m \u001b[43m \u001b[49m\u001b[43mcompiler\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mlualatex\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 67\u001b[0m \u001b[43m \u001b[49m\u001b[43mcompiler_args\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43m-shell-escape\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 68\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 69\u001b[0m file \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m.pdf\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 70\u001b[0m tfile \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m.pdf\u001b[39m\u001b[38;5;124m\"\u001b[39m\n", "File \u001b[0;32m~/.cache/pypoetry/virtualenvs/pyfeyn2-rvdu2REa-py3.11/lib/python3.11/site-packages/pylatex/document.py:276\u001b[0m, in \u001b[0;36mDocument.generate_pdf\u001b[0;34m(self, filepath, clean, clean_tex, compiler, compiler_args, silent)\u001b[0m\n\u001b[1;32m 273\u001b[0m command \u001b[38;5;241m=\u001b[39m [compiler] \u001b[38;5;241m+\u001b[39m arguments \u001b[38;5;241m+\u001b[39m compiler_args \u001b[38;5;241m+\u001b[39m main_arguments\n\u001b[1;32m 275\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 276\u001b[0m output \u001b[38;5;241m=\u001b[39m \u001b[43msubprocess\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcheck_output\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 277\u001b[0m \u001b[43m \u001b[49m\u001b[43mcommand\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstderr\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msubprocess\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mSTDOUT\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mcheck_output_kwargs\u001b[49m\n\u001b[1;32m 278\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 279\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m (\u001b[38;5;167;01mOSError\u001b[39;00m, \u001b[38;5;167;01mIOError\u001b[39;00m) \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 280\u001b[0m \u001b[38;5;66;03m# Use FileNotFoundError when python 2 is dropped\u001b[39;00m\n\u001b[1;32m 281\u001b[0m os_error \u001b[38;5;241m=\u001b[39m e\n", "File \u001b[0;32m/usr/lib/python3.11/subprocess.py:466\u001b[0m, in \u001b[0;36mcheck_output\u001b[0;34m(timeout, *popenargs, **kwargs)\u001b[0m\n\u001b[1;32m 463\u001b[0m empty \u001b[38;5;241m=\u001b[39m \u001b[38;5;124mb\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m'\u001b[39m\n\u001b[1;32m 464\u001b[0m kwargs[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124minput\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m=\u001b[39m empty\n\u001b[0;32m--> 466\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mrun\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mpopenargs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstdout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mPIPE\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcheck\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 467\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241m.\u001b[39mstdout\n", "File \u001b[0;32m/usr/lib/python3.11/subprocess.py:571\u001b[0m, in \u001b[0;36mrun\u001b[0;34m(input, capture_output, timeout, check, *popenargs, **kwargs)\u001b[0m\n\u001b[1;32m 569\u001b[0m retcode \u001b[38;5;241m=\u001b[39m process\u001b[38;5;241m.\u001b[39mpoll()\n\u001b[1;32m 570\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m check \u001b[38;5;129;01mand\u001b[39;00m retcode:\n\u001b[0;32m--> 571\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m CalledProcessError(retcode, process\u001b[38;5;241m.\u001b[39margs,\n\u001b[1;32m 572\u001b[0m output\u001b[38;5;241m=\u001b[39mstdout, stderr\u001b[38;5;241m=\u001b[39mstderr)\n\u001b[1;32m 573\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m CompletedProcess(process\u001b[38;5;241m.\u001b[39margs, retcode, stdout, stderr)\n", "\u001b[0;31mCalledProcessError\u001b[0m: Command '['lualatex', '-shell-escape', '--interaction=nonstopmode', '/tmp/tmprcpt4h6m/test.tex']' returned non-zero exit status 1." ] } ], "source": [ "tfd.render(\"test.pdf\")" ] }, { "cell_type": "markdown", "id": "99fbd5ba", "metadata": {}, "source": [ "## Complicated Case" ] }, { "cell_type": "markdown", "id": "62f35db5", "metadata": {}, "source": [ "We only set the positions of the Legs here." ] }, { "cell_type": "code", "execution_count": 9, "id": "dda6bc22", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/tmp/ipykernel_10757/1594115405.py:1: DeprecatedWarning: __init__ is deprecated as of 2.2.6.\n", " fd = FeynmanDiagram().with_rules(\n", "/tmp/ipykernel_10757/1594115405.py:6: DeprecatedWarning: __init__ is deprecated as of 2.2.6.\n", " v1 = Vertex(\"v1\")\n", "/tmp/ipykernel_10757/1594115405.py:7: DeprecatedWarning: __init__ is deprecated as of 2.2.6.\n", " v2 = Vertex(\"v2\")\n", "/tmp/ipykernel_10757/1594115405.py:8: DeprecatedWarning: __init__ is deprecated as of 2.2.6.\n", " v3 = Vertex(\"v3\")\n", "/tmp/ipykernel_10757/1594115405.py:9: DeprecatedWarning: __init__ is deprecated as of 2.2.6.\n", " v4 = Vertex(\"v4\")\n", "/tmp/ipykernel_10757/1594115405.py:10: DeprecatedWarning: __init__ is deprecated as of 2.2.6.\n", " p1 = Propagator(\"p1\").connect(v1, v2).with_type(\"gluon\")\n", "/tmp/ipykernel_10757/1594115405.py:11: DeprecatedWarning: __init__ is deprecated as of 2.2.6.\n", " p2 = Propagator(\"p2\").connect(v1, v3).with_type(\"gluon\")\n", "/tmp/ipykernel_10757/1594115405.py:12: DeprecatedWarning: __init__ is deprecated as of 2.2.6.\n", " p3 = Propagator(\"p3\").connect(v3, v2).with_type(\"gluon\")\n", "/tmp/ipykernel_10757/1594115405.py:13: DeprecatedWarning: __init__ is deprecated as of 2.2.6.\n", " p4 = Propagator(\"p4\").connect(v4, v3).with_type(\"gluon\")\n", "/tmp/ipykernel_10757/1594115405.py:14: DeprecatedWarning: __init__ is deprecated as of 2.2.6.\n", " p5 = Propagator(\"p5\").connect(v4, v2).with_type(\"gluon\")\n", "/tmp/ipykernel_10757/1594115405.py:15: DeprecatedWarning: __init__ is deprecated as of 2.2.6.\n", " l1 = Leg(\"l1\").with_target(v1).with_type(\"gluon\").with_incoming().with_xy(-2, 1)\n", "/tmp/ipykernel_10757/1594115405.py:16: DeprecatedWarning: __init__ is deprecated as of 2.2.6.\n", " l2 = Leg(\"l2\").with_target(v1).with_type(\"gluon\").with_incoming().with_xy(-2, -1)\n", "/tmp/ipykernel_10757/1594115405.py:17: DeprecatedWarning: __init__ is deprecated as of 2.2.6.\n", " l3 = Leg(\"l3\").with_target(v2).with_type(\"fermion\").with_outgoing().with_xy(2, -2).with_class(\"blue\")\n", "/tmp/ipykernel_10757/1594115405.py:18: DeprecatedWarning: __init__ is deprecated as of 2.2.6.\n", " l4 = Leg(\"l4\").with_target(v3).with_type(\"fermion\").with_outgoing().with_xy(2, 2)\n", "/tmp/ipykernel_10757/1594115405.py:19: DeprecatedWarning: __init__ is deprecated as of 2.2.6.\n", " l5 = Leg(\"l5\").with_target(v4).with_type(\"gluon\").with_outgoing().with_xy(2, 1)\n", "/tmp/ipykernel_10757/1594115405.py:20: DeprecatedWarning: __init__ is deprecated as of 2.2.6.\n", " l6 = Leg(\"l6\").with_target(v4).with_type(\"gluon\").with_outgoing().with_xy(2, -1)\n" ] } ], "source": [ "fd = FeynmanDiagram().with_rules(\n", " \"\"\" * {color: red;} \n", " [type=fermion] {color: blue; line: gluon}\n", " #p1 {color: green;}\n", " :not([type=fermion]) { color : black; line: fermion}\"\"\")\n", "v1 = Vertex(\"v1\")\n", "v2 = Vertex(\"v2\")\n", "v3 = Vertex(\"v3\")\n", "v4 = Vertex(\"v4\")\n", "p1 = Propagator(\"p1\").connect(v1, v2).with_type(\"gluon\")\n", "p2 = Propagator(\"p2\").connect(v1, v3).with_type(\"gluon\")\n", "p3 = Propagator(\"p3\").connect(v3, v2).with_type(\"gluon\")\n", "p4 = Propagator(\"p4\").connect(v4, v3).with_type(\"gluon\")\n", "p5 = Propagator(\"p5\").connect(v4, v2).with_type(\"gluon\")\n", "l1 = Leg(\"l1\").with_target(v1).with_type(\"gluon\").with_incoming().with_xy(-2, 1)\n", "l2 = Leg(\"l2\").with_target(v1).with_type(\"gluon\").with_incoming().with_xy(-2, -1)\n", "l3 = Leg(\"l3\").with_target(v2).with_type(\"fermion\").with_outgoing().with_xy(2, -2).with_class(\"blue\")\n", "l4 = Leg(\"l4\").with_target(v3).with_type(\"fermion\").with_outgoing().with_xy(2, 2)\n", "l5 = Leg(\"l5\").with_target(v4).with_type(\"gluon\").with_outgoing().with_xy(2, 1)\n", "l6 = Leg(\"l6\").with_target(v4).with_type(\"gluon\").with_outgoing().with_xy(2, -1)\n", "\n", "l6.style.color = \"orange\"\n", "\n", "fd.propagators.extend([p1, p2, p3, p4, p5])\n", "fd.vertices.extend([v1, v2, v3, v4])\n", "fd.legs.extend([l1, l2, l3, l4, l5, l6])" ] }, { "cell_type": "markdown", "id": "8bf8b95c", "metadata": {}, "source": [ "Now calculate the positions of vertices." ] }, { "cell_type": "code", "execution_count": 10, "id": "2cc1456b", "metadata": {}, "outputs": [], "source": [ "ffd= feynman_adjust_points(fd)" ] }, { "cell_type": "code", "execution_count": 11, "id": "87c4b396", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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", "text/plain": [ "" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "TikzFeynmanRender(ffd).render()" ] }, { "cell_type": "code", "execution_count": 12, "id": "7a732d93", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "b'/*************************************************************************/\\n/* Diagram */\\n/*************************************************************************/\\ndiagram {\\n direction: right;\\n layout: neato\\n }\\n/*************************************************************************/\\n/* Vertex */\\n/*************************************************************************/\\n[shape=dot] {\\n symbol: dot\\n }\\n[shape=empty] {\\n symbol: empty\\n }\\n[shape=blob] {\\n symbol: blob\\n }\\n[shape=star] {\\n symbol: star\\n }\\n[shape=square] {\\n symbol: square\\n }\\n[shape=triangle] {\\n symbol: triangle\\n }\\n[shape=diamond] {\\n symbol: diamond\\n }\\n[shape=pentagon] {\\n symbol: pentagon\\n }\\n[shape=hexagon] {\\n symbol: hexagon\\n }\\n[shape=triagram] {\\n symbol: triagram\\n }\\n[shape=tetragram] {\\n symbol: tetragram\\n }\\n[shape=pentagram] {\\n symbol: pentagram\\n }\\n[shape=cross] {\\n symbol: cross\\n }\\n[shape=triacross] {\\n symbol: triacross\\n }\\n[shape=pentacross] {\\n symbol: pentacross\\n }\\n[shape=hexacross] {\\n symbol: pentacross\\n }\\n/*************************************************************************/\\n/* Propagator */\\n/*************************************************************************/\\n/* General */\\n[type=meson] {\\n line: meson;\\n arrow-sense: 0;\\n double-distance: 3\\n }\\n[type=baryon] {\\n line: baryon;\\n arrow-sense: 1;\\n double-distance: 3\\n }\\n[type=\"anti baryon\"] {\\n line: anti baryon;\\n arrow-sense: -1;\\n double-distance: 3\\n }\\n[type=fermion] {\\n line: fermion;\\n arrow-sense: 1\\n }\\n[type=\"anti fermion\"] {\\n line: anti fermion;\\n arrow-sense: -1\\n }\\n[type=boson] {\\n line: boson;\\n arrow-sense: 0\\n }\\n[type=vector] {\\n line: vector;\\n arrow-sense: 0\\n }\\n[type=scalar] {\\n line: scalar;\\n arrow-sense: 0\\n }\\n[type=majorana] {\\n line: majorana\\n }\\n/* SM */\\n[type=photon] {\\n line: photon;\\n arrow-sense: 0\\n }\\n[type=higgs] {\\n line: higgs;\\n arrow-sense: 0\\n }\\n[type=gluon] {\\n line: gluon;\\n arrow-sense: 0;\\n xamp: 0.025;\\n yamp: 0.035;\\n nloops: 7\\n }\\n[type=ghost] {\\n line: ghost;\\n arrow-sense: 1\\n }\\n/* BSM */\\n[type=graviton] {\\n line: graviton;\\n arrow-sense: 0\\n }\\n[type=gluino] {\\n line: gluino;\\n arrow-sense: 0;\\n xamp: 0.025;\\n yamp: 0.035;\\n nloops: 7\\n }\\n[type=squark] {\\n line: squark;\\n arrow-sense: 1\\n }\\n[type=slepton] {\\n line: slepton;\\n arrow-sense: 1\\n }\\n[type=gaugino] {\\n line: gaugino;\\n arrow-sense: 0\\n }\\n[type=neutralino] {\\n line: neutralino;\\n arrow-sense: 0\\n }\\n[type=chargino] {\\n line: chargino;\\n arrow-sense: 0\\n }\\n[type=higgsino] {\\n line: higgsino;\\n arrow-sense: 0\\n }\\n[type=gravitino] {\\n line: gravitino;\\n arrow-sense: 0\\n }\\n/* util */\\n[type=phantom] {\\n line: phantom;\\n arrow-sense: 0\\n }\\n[type=line] {\\n line: line;\\n arrow-sense: 0\\n }'" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fd.get_sheets()[0].cssText" ] }, { "cell_type": "code", "execution_count": 13, "id": "1bf13ff8", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "b'* {\\n color: red\\n }\\n[type=fermion] {\\n color: blue;\\n line: gluon\\n }\\n#p1 {\\n color: green\\n }\\n:not([type=fermion]) {\\n color: black;\\n line: fermion\\n }'" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fd.get_sheets()[1].cssText" ] }, { "cell_type": "code", "execution_count": 14, "id": "dcc66e77", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[cssutils.css.CSSStyleSheet(href=None, media=None, title=None),\n", " cssutils.css.CSSStyleSheet(href=None, media=None, title=None)]" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fd.get_sheets()" ] }, { "cell_type": "code", "execution_count": null, "id": "379244cf", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.9" } }, "nbformat": 4, "nbformat_minor": 5 }