Front-end generates Feynman diagrams and translates then into a computational graph

API

FeynmanDiagram.FrontEnds.LabelProductType

The cartesian QuantumOperator.label product:

#Parameters:

  • 'LT': Type of labels
  • 'N' : Number of labels' type

#Members:

  • 'labels' : The list of labels in the LabelProduct
  • 'dims' : A tuple of the length of the label factors
FeynmanDiagram.FrontEnds.LoopPoolType
struct LoopPool{T}

Pool of loop basis. Each loop basis corresponds to a loop variable.
A loop variable is a linear combination of N independent loops. The combination coefficients is what we call a loop basis.
For example, if a loop is a momentum K, then

varibale_i = K_1*basis[1, i] + K_2*basis[2, i] + K_3*basis[3, i] + ...

Members

  • name::Symbol : name of the pool
  • dim::Int : dimension of a loop variable (for example, the dimension of a momentum-frequency loop variable is (d+1) where d is the spatial dimension)
  • basis::Matrix{T} : Matrix of (N x Nb) that stores the loop basis, where Nb is the number of loop basis (or number of loop variables).
  • loops::Matrix{T} : Matrix of (dim x Nb) that stores the loop variables, where Nb is the number of loop basis (or number of loop variables).
Base.lengthMethod
function Base.length(obj::LabelProduct)

Return the number of grids of the LabelProduct.

Base.showMethod
function Base.show(io::IO, obj::LabelProduct)

Print the LabelProduct.

Base.sizeMethod
function Base.size(obj::LabelProduct, I::Int)

Return the length of the specifict Ith label factor of the LabelProduct.

Base.sizeMethod
function Base.size(obj::LabelProduct, I::Int)

Return the length of the specifict Ith label factor of the LabelProduct.

FeynmanDiagram.FrontEnds.index_to_linearMethod
@generated function index_to_linear(obj::LabelProduct{LT,N}, I...) where {LT,N}

Convert a tuple of the indexes of each label to a single linear index of the LabelProduct.

Argument:

  • 'obj': The LabelProduct object
  • 'index...': N indexes of the label factor, where N is the number of label factor
FeynmanDiagram.FrontEnds.leafstatesMethod
function leafstates(leaf_maps::Vector{Dict{Int,G}}, maxloopNum::Int)

Extracts leaf information from the leaf mapping from the leaf value's index to the leaf node for all graph partitions. 
The information includes their initial value, type, orders, in/out time, and loop momentum index.
The loop basis is also obtained for all the graphs.

Arguments:

  • leaf_maps: A vector of the dictionary mapping the leaf value's index to the Graph of this leaf. Each dict corresponds to a graph partition, such as (order, Gorder, Vorder).
  • maxloopNum: The maximum loop-momentum number.

Returns

  • A tuple of vectors containing information about the leaves of graphs, including their initial values, types, orders, input and output time indexes, and loop-momenta indexes.
  • Loop-momentum basis (::Vector{Vector{Float64}}) for all the graphs.
FeynmanDiagram.FrontEnds.leafstatesMethod
function leafstates(leaf_maps::Vector{Dict{Int,G}}, labelProd::LabelProduct) where {G<:Union{Graph,FeynmanGraph}}

Extracts leaf information from the leaf mapping from the leaf value's index to the leaf node for all graph partitions
and their associated LabelProduct data (`labelProd`). 
The information includes their initial value, type, orders, in/out time, and loop momenta.

Arguments:

  • leaf_maps: A vector of the dictionary mapping the leaf value's index to the FeynmanGraph/Graph of this leaf. Each dict corresponds to a graph partition, such as (order, Gorder, Vorder).
  • labelProd: A LabelProduct used to label the leaves of graphs.

Returns

  • A tuple of vectors containing information about the leaves of graphs, including their initial values, types, orders, input and output time indexes, and loop-momenta indexes.
FeynmanDiagram.FrontEnds.linear_to_indexMethod
function linear_to_index(obj::LabelProduct, I::Int)

Convert the single linear index of the LabelProduct to a tuple of indexes of each label.

Argument:

  • 'obj': The LabelProduct object
  • 'I': The linear index of the LabelProduct
FeynmanDiagram.FrontEnds.reconstructMethod
reconstruct(instance::DiagramId, updates::Pair{Symbol}...)

Create a new instance of the same type as instance, with specified fields updated to new values.

Usage

newinstance = reconstruct(oldinstance, :field1 => newvalue1, :field2 => newvalue2)