An introduction to network theory and algorithms can be found at www.tensors.net
Quickstart Guide:
Diagrammatic Notation:
TensorTrace facilitates the creation of tensor networks using the diagrammatic notation common for this field. Some examples are given below.
Ex.1: (left) Index notation of a contraction between two tensors 'A' and 'B', and (right) diagrammatic notation used by TensorTrace to represent the same contraction. The index notation makes use of a dummy label 'k' to indicate that the 3rd index of tensor 'A' connects with the 1st index of tensor 'B'. TensorTrace uses numbered plaques within each tensor to convey the same information without the need for dummy labels. The index notation provides the order of indices on the final product tensor 'C' explicitly, while TensorTrace conveys this information in the green plaques, which represent the open index labels. For instance, we can see that the 2nd index of 'B' becomes the 4th index of the output tensor.
Ex.2: (left) Index notation of a contraction between three tensors 'A', 'B', 'C', and (right) diagrammatic notation used by TensorTrace to represent the same contraction.
Creating Networks in TensorTrace:
Draw some tensors

The properties of the tensor that will be created can be set in the "Tensors" tab of the top menu. Create a tensor by holding leftmouse and dragging in the main window.

Tensors can be selected by leftclicking on them. Multiple tensors can be selected by shiftleftclicking, or by dragging while holding rightmouse (or controlleftmouse) to create a selection box.

The properties of selected tensors can be changed in the "Tensors" tab of the top menu, and they can also be transformed in numerous ways (e.g. rotations and reflections).

The numbered plaques on each tensor are referred to as 'anchors': these are the points that indices can attach to the tensor.
Connect the tensors into a network

Create an index by leftclicking on a tensor anchor; complete the index by clicking on another anchor (to created a closed index) or in the playable area (to create an open index).

Index properties (including the index dimensions used in the calculation of computational costs) can be set in the "Indices" tab of the top menu.

Curved indices can be created by leftclicking and dragging the control point of an index
Export Networks to Code:
Advanced export: select export code in order to save a function file containing code for up to four distinct networks.

ideal for more complicated networks and projects.

presents the user with a choice of many different solver routines for determining the contraction order.

exported code includes autodifferentiation; all single tensor environments from a closed network can be obtained (see Example section).

exported code includes information about the cost scaling and FLOPS required for each network contraction.
There are two ways that TensorTrace can be used to generate code:
Simple export: export a selected network to code with ctrlC then paste into a text editor.

ideal for smaller networks.

uses a quick solver routine for determining the contraction order (not guaranteed to produce the optimal order for large networks).

exported code can be configured in the config menu (code language, initialization data, diagram metadata).

network diagrams can be reconstructed by ctrlV pasting code back into TensorTrace, just include the metadata, `tensors` and `connects` code lines in the copy.

Using the exported code as part of a tensor network algorithm is easy; see the example page for more details.

Click "Export Code" in the top menu. TensorTrace will search for the optimal order to contract each valid network (warning: this search could take significant time to complete for larger networks). Once completed you can export the contraction code to MATLAB, Python or Julia languages.

Check that each network you wish to compile is valid. Valid networks (i) do not contain tensors with free anchors, (ii) contain only tensors with the same network number, (iii) have open index labels that start at '1' and proceed in sequential order. If you try to compile an invalid network the compiler will tell you the reason it is invalid.

Assign a network number [14] to the tensors in each network that you wish to compile using the top menu after selecting each network (or pressing the corresponding numeric key). Each project may contain up to 4 different networks. Tensors that are not assigned to a network will be ignored by the compiler.
Advanced Export: How to compile networks into a function file
Sample output from the tensor network solver
Controls Reference:
Create tensors: leftmouse + drag (on free space)
Shift tensors/anchors/tensor vertices: leftmouse + drag (on tensor/anchor/tensor vertex)
Select tensors: leftmouse on tensor (or shiftleft to select multiple tensors, or rightmouse + drag for a selection box)
Duplicate selection: rightmouse + drag (on selected tensor or network)
Create indices: leftmouse on a free anchor to create an index, complete the index via leftmouse on another free anchor (for a closed index) or on a free space (for an open index)
Set open index #: num keys 19 (while cursor is hovering over open index plaque)
Curve an index: leftmouse + drag on index control point
Assign network #: num keys 14 (on selected network)
Scroll viewable area: hold middlemouse button or arrow keys
Zoom viewable area: mousewheel or +/ keys
Tutorial: