perf_einsum
Inputs
Contraction Path:
Initial Einsum Tree
Reordered Einsum tree
syntax for leading M:
A: mb-kb-cb-bk-bm-bc
B: kb-nb-cb-bk-bn-bc
syntax for leading C:
A: cb-mb-kb-bk-bm-bc
B: cb-kb-nb-bk-bn-bc
packages = [ "opt_einsum",
"numpy",
"binarytree",
"matplotlib" ]
[[fetch]]
from = "https://scalable.uni-jena.de/opt/perf_einsum/perf_einsum"
files = ["analysis.py"]
to_folder = "perf_einsum"
[[fetch]]
from = "https://scalable.uni-jena.de/opt/perf_einsum/perf_einsum"
files = ["tree.py"]
to_folder = "perf_einsum"
import opt_einsum
import numpy
import perf_einsum.tree
import ast
def update_einsum():
l_string = Element("in_einsum_string").element.value
l_sizes = Element("in_einsum_tensor_sizes").element.value
l_path = Element("in_einsum_contraction_path").element.value
# ignore empty values
if l_string == None:
return
if l_sizes == None:
return
l_sizes = ast.literal_eval( l_sizes )
# determine contraction path through opt_einsum if not provided
if( l_path == '' ):
l_tensors = []
for l_te in l_sizes:
l_tensors.append( numpy.random.rand( *l_te ) )
l_path = opt_einsum.contract_path( l_string,
*l_tensors )[0]
else:
l_path = ast.literal_eval( l_path )
# set contraction path
l_out_path = Element("out_einsum_contraction_path")
l_out_path.element.innerHTML = str(l_path)
l_tree = perf_einsum.tree.Tree( l_string,
l_path,
l_sizes )
l_out_tree_initial = Element("out_einsum_tree_initial")
l_out_tree_initial.element.innerHTML = str(l_tree)
l_tree.reorder()
l_out_tree_reordered = Element("out_einsum_tree_reordered")
l_out_tree_reordered.element.innerHTML = str(l_tree)
# initialize
update_einsum()