3 unstable releases

0.10.0 Mar 22, 2024
0.9.1 Jun 26, 2023
0.9.0 Jun 23, 2023

#179 in Science

Download history 3/week @ 2024-02-17 9/week @ 2024-02-24 2/week @ 2024-03-02 93/week @ 2024-03-16 32/week @ 2024-03-23 49/week @ 2024-03-30 12/week @ 2024-04-06

78 downloads per month




dynast is a program for identifying the topologies (or integral families) of Feynman graphs. It is based on nauty and Traces.


If Rust and Cargo are installed on your system, run

cargo install dynast

Precompiled executables are available on github.


dynast reads in Feynman diagrams in a YAML or FORM-based format and, for each diagram, prints its topology and how loop momenta have to be shifted to obtain a uniform assignment of propagator momenta.

Basic usage is

dynast -o outfile.yml diagrams.yml

It is possible to pass more than one input file, for instance

dynast -o outfile.yml topologies.yml diagrams.yml

to ensure the diagrams in diagrams.yml are mapped onto the topologies defined in topologies.yml as far as possible.

Important Options

  • Use the -s flag to allow mapping onto subtopologies, i.e. onto diagrams where one or more propagators have been contracted.

  • Use -f to switch between YAML and FORM output.

  • --replace-masses and --replace-momenta can be used for kinematic replacements, e.g. --replace-momenta='{p1: q, p2: q}' to set the momenta p1 and p2 to q.

Input format


The input in YAML format has the form

  - [from0, to0, p0, m0] # first propagator
  - [from1, to1, p1, m1] # second propagator
  # further propagators ...
  # propagators ...

from and to are non-negative integer vertex labels designating the start and end of the propagator line. p is the propagator momentum (e.g. l1 + q) and m its mass. It is allowed to omit both from and to and the same time to denote a scalar product that is not associated with a graph edge. dynast will ignore such scalar products.

The document separator --- is optional but recommended for large input files to save memory.

dynast includes a QGRAF style file share/qgraf/yaml.sty that generates the required input. If several fields have the same mass the corresponding masses in the QGRAF output have to be adjusted manually.


FORM input files should start with the following line:

* dynast-format: FORM

The remainder of the file should consist of diagram folds:

*--#[ DIANAME:
  diagram specification
*--#] DIANAME:

In the diagram specification, only propagator lines of the form *prop(from, to, field(fieldnr, ...)) with arbitrary extra whitespace are interpreted. The ellipsis indicates any number of further arguments. Only the from, to, and field specifications are considered for the topology mapping, and field is interpreted as a mass. Use the --replace-masses option to replace fields by actual masses.

Output formats


The default YAML output consists of records

diagram: [topology, {l1: p1, ...}]

where diagram is the diagram name and topology the first passed diagram with the same topology. The last part of the entry indicates how loop momenta have to be replaced to arrive at the same momentum assignment as in topology.


Alternatively -f form to produce output for FORM. In this case, mapping information is only written for diagrams that have integer numbers as names. Then, an output file topologies.frm can be used as follows:

cf dia;
#include- topologies.frm
* example diagram
* the argument of `dia` should match the name in the dynast input file
local diagrams =
+ dia(1)
* ... diagram information (propagators, vertices)
+ dia(2)
* ... more diagrams

id dia(?a) = dia(?a) * topology(?a);
if(match(top(?a$a)) && match(top(?b$b)));
   print "the topology of diagram %$ is %$" $a $b;
* shift momenta to canonical form
id replace(?a) = replace_(?a);

License: GPL-3.0-or-later


~304K SLoC