diff --git a/opt_einsum/compat.py b/opt_einsum/compat.py
new file mode 100644
index 0000000..38cf55d
--- /dev/null
+++ b/opt_einsum/compat.py
@@ -0,0 +1,10 @@
+# Python 2/3 compatability shim
+
+try:
+    # Python 2
+    get_chr = unichr
+    strings = (str, type(get_chr(300)))
+except NameError:
+    # Python 3
+    get_chr = chr
+    strings = str
diff --git a/opt_einsum/contract.py b/opt_einsum/contract.py
index a7932f0..01998dd 100644
--- a/opt_einsum/contract.py
+++ b/opt_einsum/contract.py
@@ -6,6 +6,7 @@ import numpy as np
 
 from . import backends
 from . import blas
+from . import compat
 from . import helpers
 from . import parser
 from . import paths
@@ -176,7 +177,7 @@ def contract_path(*operands, **kwargs):
     naive_cost = helpers.flop_count(indices, inner_product, num_ops, dimension_dict)
 
     # Compute the path
-    if not isinstance(path_type, str):
+    if not isinstance(path_type, compat.strings):
         path = path_type
     elif num_ops == 1:
         # Nothing to be optimized
@@ -274,7 +275,7 @@ def _einsum(*operands, **kwargs):
     """
     fn = backends.get_func('einsum', kwargs.pop('backend', 'numpy'))
 
-    if not isinstance(operands[0], str):
+    if not isinstance(operands[0], compat.strings):
         return fn(*operands, **kwargs)
 
     einsum_str, operands = operands[0], operands[1:]
diff --git a/opt_einsum/parser.py b/opt_einsum/parser.py
index c5370b1..adfc19f 100644
--- a/opt_einsum/parser.py
+++ b/opt_einsum/parser.py
@@ -8,6 +8,8 @@ from collections import OrderedDict
 
 import numpy as np
 
+from . import compat
+
 einsum_symbols_base = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
 
 
@@ -40,7 +42,7 @@ def get_symbol(i):
     """
     if i < 52:
         return einsum_symbols_base[i]
-    return chr(i + 140)
+    return compat.get_chr(i + 140)
 
 
 def gen_unused_symbols(used, n):
@@ -133,7 +135,7 @@ def parse_einsum_input(operands):
     if len(operands) == 0:
         raise ValueError("No input operands")
 
-    if isinstance(operands[0], str):
+    if isinstance(operands[0], compat.strings):
         subscripts = operands[0].replace(" ", "")
         operands = [possibly_convert_to_numpy(x) for x in operands[1:]]
 
diff --git a/opt_einsum/sharing.py b/opt_einsum/sharing.py
index 504ba05..54c94bd 100644
--- a/opt_einsum/sharing.py
+++ b/opt_einsum/sharing.py
@@ -129,7 +129,7 @@ def einsum_cache_wrap(einsum):
         canonical = sorted(zip(inputs, map(id, operands)), key=lambda x: x[1])
         canonical_ids = tuple(id_ for _, id_ in canonical)
         canonical_inputs = ','.join(input_ for input_, _ in canonical)
-        canonical_equation = alpha_canonicalize('{}->{}'.format(canonical_inputs, output))
+        canonical_equation = alpha_canonicalize(canonical_inputs + "->" + output)
         key = 'einsum', backend, canonical_equation, canonical_ids
         return _memoize(key, einsum, equation, *operands, backend=backend)
 

diff --git a/opt_einsum/tests/test_contract.py b/opt_einsum/tests/test_contract.py
index 43b5061..fdfacc7 100644
--- a/opt_einsum/tests/test_contract.py
+++ b/opt_einsum/tests/test_contract.py
@@ -7,7 +7,7 @@ import sys
 import numpy as np
 import pytest
 
-from opt_einsum import contract, contract_path, helpers, contract_expression
+from opt_einsum import compat, contract, contract_path, helpers, contract_expression
 
 tests = [
     # Test hadamard-like products
@@ -117,7 +117,6 @@ def test_drop_in_replacement(string):
     assert np.allclose(opt, np.einsum(string, *views))
 
 
-@pytest.mark.skipif(sys.version_info[0] < 3, reason='requires python3')
 @pytest.mark.parametrize("string", tests)
 def test_compare_greek(string):
     views = helpers.build_views(string)
@@ -125,7 +124,7 @@ def test_compare_greek(string):
     ein = contract(string, *views, optimize=False, use_blas=False)
 
     # convert to greek
-    string = ''.join(chr(ord(c) + 848) if c not in ',->.' else c for c in string)
+    string = ''.join(compat.get_chr(ord(c) + 848) if c not in ',->.' else c for c in string)
 
     opt = contract(string, *views, optimize='greedy', use_blas=False)
     assert np.allclose(ein, opt)
@@ -146,7 +145,6 @@ def test_compare_blas(string):
     assert np.allclose(ein, opt)
 
 
-@pytest.mark.skipif(sys.version_info[0] < 3, reason='requires python3')
 @pytest.mark.parametrize("string", tests)
 def test_compare_blas_greek(string):
     views = helpers.build_views(string)
@@ -154,7 +152,7 @@ def test_compare_blas_greek(string):
     ein = contract(string, *views, optimize=False)
 
     # convert to greek
-    string = ''.join(chr(ord(c) + 848) if c not in ',->.' else c for c in string)
+    string = ''.join(compat.get_chr(ord(c) + 848) if c not in ',->.' else c for c in string)
 
     opt = contract(string, *views, optimize='greedy')
     assert np.allclose(ein, opt)
@@ -163,10 +161,9 @@ def test_compare_blas_greek(string):
     assert np.allclose(ein, opt)
 
 
-@pytest.mark.skipif(sys.version_info[0] < 3, reason='requires python3')
 def test_some_non_alphabet_maintains_order():
     # 'c beta a' should automatically go to -> 'a c beta'
-    string = 'c' + chr(ord('b') + 848) + 'a'
+    string = 'c' + compat.get_chr(ord('b') + 848) + 'a'
     # but beta will be temporarily replaced with 'b' for which 'cba->abc'
     # so check manual output kicks in:
     x = np.random.rand(2, 3, 4)
diff --git a/opt_einsum/tests/test_input.py b/opt_einsum/tests/test_input.py
index 022a078..311356e 100644
--- a/opt_einsum/tests/test_input.py
+++ b/opt_einsum/tests/test_input.py
@@ -230,7 +230,6 @@ def test_singleton_dimension_broadcast():
         assert np.allclose(res2, np.full((1, 5), 5))
 
 
-@pytest.mark.skipif(sys.version_info.major == 2, reason="Requires python 3.")
 def test_large_int_input_format():
     string = 'ab,bc,cd'
     x, y, z = build_views(string)
diff --git a/opt_einsum/tests/test_paths.py b/opt_einsum/tests/test_paths.py
index 8087dd2..da39e23 100644
--- a/opt_einsum/tests/test_paths.py
+++ b/opt_einsum/tests/test_paths.py
@@ -3,6 +3,8 @@ Tests the accuracy of the opt_einsum paths in addition to unit tests for
 the various path helper functions.
 """
 
+import itertools
+
 import numpy as np
 import pytest
 
@@ -174,3 +176,14 @@ def test_can_optimize_outer_products():
     a, b, c = [np.random.randn(10, 10) for _ in range(3)]
     d = np.random.randn(10, 2)
     assert oe.contract_path("ab,cd,ef,fg", a, b, c, d, path='greedy')[0] == [(2, 3), (0, 2), (0, 1)]
+
+
+@pytest.mark.parametrize('num_symbols', [2, 3, 26, 26 + 26, 256 - 140, 300])
+def test_large_path(num_symbols):
+    symbols = ''.join(oe.get_symbol(i) for i in range(num_symbols))
+    dimension_dict = dict(zip(symbols, itertools.cycle([2, 3, 4])))
+    expression = ','.join(symbols[t:t+2] for t in range(num_symbols - 1))
+    tensors = oe.helpers.build_views(expression, dimension_dict=dimension_dict)
+
+    # Check that path construction does not crash
+    oe.contract_path(expression, *tensors, path='greedy')

Support for get_symbol(116) in Python 2
`get_symbol(x)` currently fails in Python 2 for any `x >= 116`:
```
i = 116

    def get_symbol(i):
        """Get the symbol corresponding to int ``i`` - runs through the usual 52
        letters before resorting to unicode characters, starting at ``chr(192)``.

        Examples
        --------
        >>> get_symbol(2)
        'c'

        >>> oe.get_symbol(200)
        'Ŕ'

        >>> oe.get_symbol(20000)
        '京'
        """
        if i < 52:
            return einsum_symbols_base[i]
>       return chr(i + 140)
E       ValueError: chr() arg not in range(256)
```
Can we fix this by use `unichr()` and unicode strings in Python 2?
opt_einsum/tests/test_contract.py::test_compare[a,ab,abc->abc] opt_einsum/tests/test_contract.py::test_compare[a,b,ab->ab] opt_einsum/tests/test_contract.py::test_compare[ea,fb,gc,hd,abcd->efgh] opt_einsum/tests/test_contract.py::test_compare[ea,fb,abcd,gc,hd->efgh] opt_einsum/tests/test_contract.py::test_compare[abcd,ea,fb,gc,hd->efgh] opt_einsum/tests/test_contract.py::test_compare[acdf,jbje,gihb,hfac,gfac,gifabc,hfac0] opt_einsum/tests/test_contract.py::test_compare[acdf,jbje,gihb,hfac,gfac,gifabc,hfac1] opt_einsum/tests/test_contract.py::test_compare[cd,bdhe,aidb,hgca,gc,hgibcd,hgac] opt_einsum/tests/test_contract.py::test_compare[abhe,hidj,jgba,hiab,gab] opt_einsum/tests/test_contract.py::test_compare[bde,cdh,agdb,hica,ibd,hgicd,hiac] opt_einsum/tests/test_contract.py::test_compare[chd,bde,agbc,hiad,hgc,hgi,hiad] opt_einsum/tests/test_contract.py::test_compare[chd,bde,agbc,hiad,bdi,cgh,agdb] opt_einsum/tests/test_contract.py::test_compare[bdhe,acad,hiab,agac,hibd] opt_einsum/tests/test_contract.py::test_compare[ab,ab,c->] opt_einsum/tests/test_contract.py::test_compare[ab,ab,c->c] opt_einsum/tests/test_contract.py::test_compare[ab,ab,cd,cd->] opt_einsum/tests/test_contract.py::test_compare[ab,ab,cd,cd->ac] opt_einsum/tests/test_contract.py::test_compare[ab,ab,cd,cd->cd] opt_einsum/tests/test_contract.py::test_compare[ab,ab,cd,cd,ef,ef->] opt_einsum/tests/test_contract.py::test_compare[ab,cd,ef->abcdef] opt_einsum/tests/test_contract.py::test_compare[ab,cd,ef->acdf] opt_einsum/tests/test_contract.py::test_compare[ab,cd,de->abcde] opt_einsum/tests/test_contract.py::test_compare[ab,cd,de->be] opt_einsum/tests/test_contract.py::test_compare[ab,bcd,cd->abcd] opt_einsum/tests/test_contract.py::test_compare[ab,bcd,cd->abd] opt_einsum/tests/test_contract.py::test_compare[eb,cb,fb->cef] opt_einsum/tests/test_contract.py::test_compare[dd,fb,be,cdb->cef] opt_einsum/tests/test_contract.py::test_compare[bca,cdb,dbf,afc->] opt_einsum/tests/test_contract.py::test_compare[dcc,fce,ea,dbf->ab] opt_einsum/tests/test_contract.py::test_compare[fdf,cdd,ccd,afe->ae] opt_einsum/tests/test_contract.py::test_compare[abcd,ad] opt_einsum/tests/test_contract.py::test_compare[ed,fcd,ff,bcf->be] opt_einsum/tests/test_contract.py::test_compare[baa,dcf,af,cde->be] opt_einsum/tests/test_contract.py::test_compare[bd,db,eac->ace] opt_einsum/tests/test_contract.py::test_compare[fff,fae,bef,def->abd] opt_einsum/tests/test_contract.py::test_compare[efc,dbc,acf,fd->abe] opt_einsum/tests/test_contract.py::test_compare[ab,ab] opt_einsum/tests/test_contract.py::test_compare[ab,ba] opt_einsum/tests/test_contract.py::test_compare[abc,abc] opt_einsum/tests/test_contract.py::test_compare[abc,bac] opt_einsum/tests/test_contract.py::test_compare[abc,cba] opt_einsum/tests/test_contract.py::test_compare[ab,bc] opt_einsum/tests/test_contract.py::test_compare[ab,cb] opt_einsum/tests/test_contract.py::test_compare[ba,bc] opt_einsum/tests/test_contract.py::test_compare[ba,cb] opt_einsum/tests/test_contract.py::test_compare[abcd,cd] opt_einsum/tests/test_contract.py::test_compare[abcd,ab] opt_einsum/tests/test_contract.py::test_compare[abcd,cdef] opt_einsum/tests/test_contract.py::test_compare[abcd,cdef->feba] opt_einsum/tests/test_contract.py::test_compare[abcd,efdc] opt_einsum/tests/test_contract.py::test_compare[aab,bc->ac] opt_einsum/tests/test_contract.py::test_compare[ab,bcc->ac] opt_einsum/tests/test_contract.py::test_compare[aab,bcc->ac] opt_einsum/tests/test_contract.py::test_compare[baa,bcc->ac] opt_einsum/tests/test_contract.py::test_compare[aab,ccb->ac] opt_einsum/tests/test_contract.py::test_compare[aab,fa,df,ecc->bde] opt_einsum/tests/test_contract.py::test_compare[ecb,fef,bad,ed->ac] opt_einsum/tests/test_contract.py::test_compare[bcf,bbb,fbf,fc->] opt_einsum/tests/test_contract.py::test_compare[bb,ff,be->e] opt_einsum/tests/test_contract.py::test_compare[bcb,bb,fc,fff->] opt_einsum/tests/test_contract.py::test_compare[fbb,dfd,fc,fc->] opt_einsum/tests/test_contract.py::test_compare[afd,ba,cc,dc->bf] opt_einsum/tests/test_contract.py::test_compare[adb,bc,fa,cfc->d] opt_einsum/tests/test_contract.py::test_compare[bbd,bda,fc,db->acf] opt_einsum/tests/test_contract.py::test_compare[dba,ead,cad->bce] opt_einsum/tests/test_contract.py::test_compare[aef,fbc,dca->bde] opt_einsum/tests/test_contract.py::test_drop_in_replacement[a,ab,abc->abc] opt_einsum/tests/test_contract.py::test_drop_in_replacement[a,b,ab->ab] opt_einsum/tests/test_contract.py::test_drop_in_replacement[ea,fb,gc,hd,abcd->efgh] opt_einsum/tests/test_contract.py::test_drop_in_replacement[ea,fb,abcd,gc,hd->efgh] opt_einsum/tests/test_contract.py::test_drop_in_replacement[abcd,ea,fb,gc,hd->efgh] opt_einsum/tests/test_contract.py::test_drop_in_replacement[acdf,jbje,gihb,hfac,gfac,gifabc,hfac0] opt_einsum/tests/test_contract.py::test_drop_in_replacement[acdf,jbje,gihb,hfac,gfac,gifabc,hfac1] opt_einsum/tests/test_contract.py::test_drop_in_replacement[cd,bdhe,aidb,hgca,gc,hgibcd,hgac] opt_einsum/tests/test_contract.py::test_drop_in_replacement[abhe,hidj,jgba,hiab,gab] opt_einsum/tests/test_contract.py::test_drop_in_replacement[bde,cdh,agdb,hica,ibd,hgicd,hiac] opt_einsum/tests/test_contract.py::test_drop_in_replacement[chd,bde,agbc,hiad,hgc,hgi,hiad] opt_einsum/tests/test_contract.py::test_drop_in_replacement[chd,bde,agbc,hiad,bdi,cgh,agdb] opt_einsum/tests/test_contract.py::test_drop_in_replacement[bdhe,acad,hiab,agac,hibd] opt_einsum/tests/test_contract.py::test_drop_in_replacement[ab,ab,c->] opt_einsum/tests/test_contract.py::test_drop_in_replacement[ab,ab,c->c] opt_einsum/tests/test_contract.py::test_drop_in_replacement[ab,ab,cd,cd->] opt_einsum/tests/test_contract.py::test_drop_in_replacement[ab,ab,cd,cd->ac] opt_einsum/tests/test_contract.py::test_drop_in_replacement[ab,ab,cd,cd->cd] opt_einsum/tests/test_contract.py::test_drop_in_replacement[ab,ab,cd,cd,ef,ef->] opt_einsum/tests/test_contract.py::test_drop_in_replacement[ab,cd,ef->abcdef] opt_einsum/tests/test_contract.py::test_drop_in_replacement[ab,cd,ef->acdf] opt_einsum/tests/test_contract.py::test_drop_in_replacement[ab,cd,de->abcde] opt_einsum/tests/test_contract.py::test_drop_in_replacement[ab,cd,de->be] opt_einsum/tests/test_contract.py::test_drop_in_replacement[ab,bcd,cd->abcd] opt_einsum/tests/test_contract.py::test_drop_in_replacement[ab,bcd,cd->abd] opt_einsum/tests/test_contract.py::test_drop_in_replacement[eb,cb,fb->cef] opt_einsum/tests/test_contract.py::test_drop_in_replacement[dd,fb,be,cdb->cef] opt_einsum/tests/test_contract.py::test_drop_in_replacement[bca,cdb,dbf,afc->] opt_einsum/tests/test_contract.py::test_drop_in_replacement[dcc,fce,ea,dbf->ab] opt_einsum/tests/test_contract.py::test_drop_in_replacement[fdf,cdd,ccd,afe->ae] opt_einsum/tests/test_contract.py::test_drop_in_replacement[abcd,ad] opt_einsum/tests/test_contract.py::test_drop_in_replacement[ed,fcd,ff,bcf->be] opt_einsum/tests/test_contract.py::test_drop_in_replacement[baa,dcf,af,cde->be] opt_einsum/tests/test_contract.py::test_drop_in_replacement[bd,db,eac->ace] opt_einsum/tests/test_contract.py::test_drop_in_replacement[fff,fae,bef,def->abd] opt_einsum/tests/test_contract.py::test_drop_in_replacement[efc,dbc,acf,fd->abe] opt_einsum/tests/test_contract.py::test_drop_in_replacement[ab,ab] opt_einsum/tests/test_contract.py::test_drop_in_replacement[ab,ba] opt_einsum/tests/test_contract.py::test_drop_in_replacement[abc,abc] opt_einsum/tests/test_contract.py::test_drop_in_replacement[abc,bac] opt_einsum/tests/test_contract.py::test_drop_in_replacement[abc,cba] opt_einsum/tests/test_contract.py::test_drop_in_replacement[ab,bc] opt_einsum/tests/test_contract.py::test_drop_in_replacement[ab,cb] opt_einsum/tests/test_contract.py::test_drop_in_replacement[ba,bc] opt_einsum/tests/test_contract.py::test_drop_in_replacement[ba,cb] opt_einsum/tests/test_contract.py::test_drop_in_replacement[abcd,cd] opt_einsum/tests/test_contract.py::test_drop_in_replacement[abcd,ab] opt_einsum/tests/test_contract.py::test_drop_in_replacement[abcd,cdef] opt_einsum/tests/test_contract.py::test_drop_in_replacement[abcd,cdef->feba] opt_einsum/tests/test_contract.py::test_drop_in_replacement[abcd,efdc] opt_einsum/tests/test_contract.py::test_drop_in_replacement[aab,bc->ac] opt_einsum/tests/test_contract.py::test_drop_in_replacement[ab,bcc->ac] opt_einsum/tests/test_contract.py::test_drop_in_replacement[aab,bcc->ac] opt_einsum/tests/test_contract.py::test_drop_in_replacement[baa,bcc->ac] opt_einsum/tests/test_contract.py::test_drop_in_replacement[aab,ccb->ac] opt_einsum/tests/test_contract.py::test_drop_in_replacement[aab,fa,df,ecc->bde] opt_einsum/tests/test_contract.py::test_drop_in_replacement[ecb,fef,bad,ed->ac] opt_einsum/tests/test_contract.py::test_drop_in_replacement[bcf,bbb,fbf,fc->] opt_einsum/tests/test_contract.py::test_drop_in_replacement[bb,ff,be->e] opt_einsum/tests/test_contract.py::test_drop_in_replacement[bcb,bb,fc,fff->] opt_einsum/tests/test_contract.py::test_drop_in_replacement[fbb,dfd,fc,fc->] opt_einsum/tests/test_contract.py::test_drop_in_replacement[afd,ba,cc,dc->bf] opt_einsum/tests/test_contract.py::test_drop_in_replacement[adb,bc,fa,cfc->d] opt_einsum/tests/test_contract.py::test_drop_in_replacement[bbd,bda,fc,db->acf] opt_einsum/tests/test_contract.py::test_drop_in_replacement[dba,ead,cad->bce] opt_einsum/tests/test_contract.py::test_drop_in_replacement[aef,fbc,dca->bde] opt_einsum/tests/test_contract.py::test_compare_greek[a,ab,abc->abc] opt_einsum/tests/test_contract.py::test_compare_greek[a,b,ab->ab] opt_einsum/tests/test_contract.py::test_compare_greek[ea,fb,gc,hd,abcd->efgh] opt_einsum/tests/test_contract.py::test_compare_greek[ea,fb,abcd,gc,hd->efgh] opt_einsum/tests/test_contract.py::test_compare_greek[abcd,ea,fb,gc,hd->efgh] opt_einsum/tests/test_contract.py::test_compare_greek[acdf,jbje,gihb,hfac,gfac,gifabc,hfac0] opt_einsum/tests/test_contract.py::test_compare_greek[acdf,jbje,gihb,hfac,gfac,gifabc,hfac1] opt_einsum/tests/test_contract.py::test_compare_greek[cd,bdhe,aidb,hgca,gc,hgibcd,hgac] opt_einsum/tests/test_contract.py::test_compare_greek[abhe,hidj,jgba,hiab,gab] opt_einsum/tests/test_contract.py::test_compare_greek[bde,cdh,agdb,hica,ibd,hgicd,hiac] opt_einsum/tests/test_contract.py::test_compare_greek[chd,bde,agbc,hiad,hgc,hgi,hiad] opt_einsum/tests/test_contract.py::test_compare_greek[chd,bde,agbc,hiad,bdi,cgh,agdb] opt_einsum/tests/test_contract.py::test_compare_greek[bdhe,acad,hiab,agac,hibd] opt_einsum/tests/test_contract.py::test_compare_greek[ab,ab,c->] opt_einsum/tests/test_contract.py::test_compare_greek[ab,ab,c->c] opt_einsum/tests/test_contract.py::test_compare_greek[ab,ab,cd,cd->] opt_einsum/tests/test_contract.py::test_compare_greek[ab,ab,cd,cd->ac] opt_einsum/tests/test_contract.py::test_compare_greek[ab,ab,cd,cd->cd] opt_einsum/tests/test_contract.py::test_compare_greek[ab,ab,cd,cd,ef,ef->] opt_einsum/tests/test_contract.py::test_compare_greek[ab,cd,ef->abcdef] opt_einsum/tests/test_contract.py::test_compare_greek[ab,cd,ef->acdf] opt_einsum/tests/test_contract.py::test_compare_greek[ab,cd,de->abcde] opt_einsum/tests/test_contract.py::test_compare_greek[ab,cd,de->be] opt_einsum/tests/test_contract.py::test_compare_greek[ab,bcd,cd->abcd] opt_einsum/tests/test_contract.py::test_compare_greek[ab,bcd,cd->abd] opt_einsum/tests/test_contract.py::test_compare_greek[eb,cb,fb->cef] opt_einsum/tests/test_contract.py::test_compare_greek[dd,fb,be,cdb->cef] opt_einsum/tests/test_contract.py::test_compare_greek[bca,cdb,dbf,afc->] opt_einsum/tests/test_contract.py::test_compare_greek[dcc,fce,ea,dbf->ab] opt_einsum/tests/test_contract.py::test_compare_greek[fdf,cdd,ccd,afe->ae] opt_einsum/tests/test_contract.py::test_compare_greek[abcd,ad] opt_einsum/tests/test_contract.py::test_compare_greek[ed,fcd,ff,bcf->be] opt_einsum/tests/test_contract.py::test_compare_greek[baa,dcf,af,cde->be] opt_einsum/tests/test_contract.py::test_compare_greek[bd,db,eac->ace] opt_einsum/tests/test_contract.py::test_compare_greek[fff,fae,bef,def->abd] opt_einsum/tests/test_contract.py::test_compare_greek[efc,dbc,acf,fd->abe] opt_einsum/tests/test_contract.py::test_compare_greek[ab,ab] opt_einsum/tests/test_contract.py::test_compare_greek[ab,ba] opt_einsum/tests/test_contract.py::test_compare_greek[abc,abc] opt_einsum/tests/test_contract.py::test_compare_greek[abc,bac] opt_einsum/tests/test_contract.py::test_compare_greek[abc,cba] opt_einsum/tests/test_contract.py::test_compare_greek[ab,bc] opt_einsum/tests/test_contract.py::test_compare_greek[ab,cb] opt_einsum/tests/test_contract.py::test_compare_greek[ba,bc] opt_einsum/tests/test_contract.py::test_compare_greek[ba,cb] opt_einsum/tests/test_contract.py::test_compare_greek[abcd,cd] opt_einsum/tests/test_contract.py::test_compare_greek[abcd,ab] opt_einsum/tests/test_contract.py::test_compare_greek[abcd,cdef] opt_einsum/tests/test_contract.py::test_compare_greek[abcd,cdef->feba] opt_einsum/tests/test_contract.py::test_compare_greek[abcd,efdc] opt_einsum/tests/test_contract.py::test_compare_greek[aab,bc->ac] opt_einsum/tests/test_contract.py::test_compare_greek[ab,bcc->ac] opt_einsum/tests/test_contract.py::test_compare_greek[aab,bcc->ac] opt_einsum/tests/test_contract.py::test_compare_greek[baa,bcc->ac] opt_einsum/tests/test_contract.py::test_compare_greek[aab,ccb->ac] opt_einsum/tests/test_contract.py::test_compare_greek[aab,fa,df,ecc->bde] opt_einsum/tests/test_contract.py::test_compare_greek[ecb,fef,bad,ed->ac] opt_einsum/tests/test_contract.py::test_compare_greek[bcf,bbb,fbf,fc->] opt_einsum/tests/test_contract.py::test_compare_greek[bb,ff,be->e] opt_einsum/tests/test_contract.py::test_compare_greek[bcb,bb,fc,fff->] opt_einsum/tests/test_contract.py::test_compare_greek[fbb,dfd,fc,fc->] opt_einsum/tests/test_contract.py::test_compare_greek[afd,ba,cc,dc->bf] opt_einsum/tests/test_contract.py::test_compare_greek[adb,bc,fa,cfc->d] opt_einsum/tests/test_contract.py::test_compare_greek[bbd,bda,fc,db->acf] opt_einsum/tests/test_contract.py::test_compare_greek[dba,ead,cad->bce] opt_einsum/tests/test_contract.py::test_compare_greek[aef,fbc,dca->bde] opt_einsum/tests/test_contract.py::test_compare_blas[a,ab,abc->abc] opt_einsum/tests/test_contract.py::test_compare_blas[a,b,ab->ab] opt_einsum/tests/test_contract.py::test_compare_blas[ea,fb,gc,hd,abcd->efgh] opt_einsum/tests/test_contract.py::test_compare_blas[ea,fb,abcd,gc,hd->efgh] opt_einsum/tests/test_contract.py::test_compare_blas[abcd,ea,fb,gc,hd->efgh] opt_einsum/tests/test_contract.py::test_compare_blas[acdf,jbje,gihb,hfac,gfac,gifabc,hfac0] opt_einsum/tests/test_contract.py::test_compare_blas[acdf,jbje,gihb,hfac,gfac,gifabc,hfac1] opt_einsum/tests/test_contract.py::test_compare_blas[cd,bdhe,aidb,hgca,gc,hgibcd,hgac] opt_einsum/tests/test_contract.py::test_compare_blas[abhe,hidj,jgba,hiab,gab] opt_einsum/tests/test_contract.py::test_compare_blas[bde,cdh,agdb,hica,ibd,hgicd,hiac] opt_einsum/tests/test_contract.py::test_compare_blas[chd,bde,agbc,hiad,hgc,hgi,hiad] opt_einsum/tests/test_contract.py::test_compare_blas[chd,bde,agbc,hiad,bdi,cgh,agdb] opt_einsum/tests/test_contract.py::test_compare_blas[bdhe,acad,hiab,agac,hibd] opt_einsum/tests/test_contract.py::test_compare_blas[ab,ab,c->] opt_einsum/tests/test_contract.py::test_compare_blas[ab,ab,c->c] opt_einsum/tests/test_contract.py::test_compare_blas[ab,ab,cd,cd->] opt_einsum/tests/test_contract.py::test_compare_blas[ab,ab,cd,cd->ac] opt_einsum/tests/test_contract.py::test_compare_blas[ab,ab,cd,cd->cd] opt_einsum/tests/test_contract.py::test_compare_blas[ab,ab,cd,cd,ef,ef->] opt_einsum/tests/test_contract.py::test_compare_blas[ab,cd,ef->abcdef] opt_einsum/tests/test_contract.py::test_compare_blas[ab,cd,ef->acdf] opt_einsum/tests/test_contract.py::test_compare_blas[ab,cd,de->abcde] opt_einsum/tests/test_contract.py::test_compare_blas[ab,cd,de->be] opt_einsum/tests/test_contract.py::test_compare_blas[ab,bcd,cd->abcd] opt_einsum/tests/test_contract.py::test_compare_blas[ab,bcd,cd->abd] opt_einsum/tests/test_contract.py::test_compare_blas[eb,cb,fb->cef] opt_einsum/tests/test_contract.py::test_compare_blas[dd,fb,be,cdb->cef] opt_einsum/tests/test_contract.py::test_compare_blas[bca,cdb,dbf,afc->] opt_einsum/tests/test_contract.py::test_compare_blas[dcc,fce,ea,dbf->ab] opt_einsum/tests/test_contract.py::test_compare_blas[fdf,cdd,ccd,afe->ae] opt_einsum/tests/test_contract.py::test_compare_blas[abcd,ad] opt_einsum/tests/test_contract.py::test_compare_blas[ed,fcd,ff,bcf->be] opt_einsum/tests/test_contract.py::test_compare_blas[baa,dcf,af,cde->be] opt_einsum/tests/test_contract.py::test_compare_blas[bd,db,eac->ace] opt_einsum/tests/test_contract.py::test_compare_blas[fff,fae,bef,def->abd] opt_einsum/tests/test_contract.py::test_compare_blas[efc,dbc,acf,fd->abe] opt_einsum/tests/test_contract.py::test_compare_blas[ab,ab] opt_einsum/tests/test_contract.py::test_compare_blas[ab,ba] opt_einsum/tests/test_contract.py::test_compare_blas[abc,abc] opt_einsum/tests/test_contract.py::test_compare_blas[abc,bac] opt_einsum/tests/test_contract.py::test_compare_blas[abc,cba] opt_einsum/tests/test_contract.py::test_compare_blas[ab,bc] opt_einsum/tests/test_contract.py::test_compare_blas[ab,cb] opt_einsum/tests/test_contract.py::test_compare_blas[ba,bc] opt_einsum/tests/test_contract.py::test_compare_blas[ba,cb] opt_einsum/tests/test_contract.py::test_compare_blas[abcd,cd] opt_einsum/tests/test_contract.py::test_compare_blas[abcd,ab] opt_einsum/tests/test_contract.py::test_compare_blas[abcd,cdef] opt_einsum/tests/test_contract.py::test_compare_blas[abcd,cdef->feba] opt_einsum/tests/test_contract.py::test_compare_blas[abcd,efdc] opt_einsum/tests/test_contract.py::test_compare_blas[aab,bc->ac] opt_einsum/tests/test_contract.py::test_compare_blas[ab,bcc->ac] opt_einsum/tests/test_contract.py::test_compare_blas[aab,bcc->ac] opt_einsum/tests/test_contract.py::test_compare_blas[baa,bcc->ac] opt_einsum/tests/test_contract.py::test_compare_blas[aab,ccb->ac] opt_einsum/tests/test_contract.py::test_compare_blas[aab,fa,df,ecc->bde] opt_einsum/tests/test_contract.py::test_compare_blas[ecb,fef,bad,ed->ac] opt_einsum/tests/test_contract.py::test_compare_blas[bcf,bbb,fbf,fc->] opt_einsum/tests/test_contract.py::test_compare_blas[bb,ff,be->e] opt_einsum/tests/test_contract.py::test_compare_blas[bcb,bb,fc,fff->] opt_einsum/tests/test_contract.py::test_compare_blas[fbb,dfd,fc,fc->] opt_einsum/tests/test_contract.py::test_compare_blas[afd,ba,cc,dc->bf] opt_einsum/tests/test_contract.py::test_compare_blas[adb,bc,fa,cfc->d] opt_einsum/tests/test_contract.py::test_compare_blas[bbd,bda,fc,db->acf] opt_einsum/tests/test_contract.py::test_compare_blas[dba,ead,cad->bce] opt_einsum/tests/test_contract.py::test_compare_blas[aef,fbc,dca->bde] opt_einsum/tests/test_contract.py::test_compare_blas_greek[a,ab,abc->abc] opt_einsum/tests/test_contract.py::test_compare_blas_greek[a,b,ab->ab] opt_einsum/tests/test_contract.py::test_compare_blas_greek[ea,fb,gc,hd,abcd->efgh] opt_einsum/tests/test_contract.py::test_compare_blas_greek[ea,fb,abcd,gc,hd->efgh] opt_einsum/tests/test_contract.py::test_compare_blas_greek[abcd,ea,fb,gc,hd->efgh] opt_einsum/tests/test_contract.py::test_compare_blas_greek[acdf,jbje,gihb,hfac,gfac,gifabc,hfac0] opt_einsum/tests/test_contract.py::test_compare_blas_greek[acdf,jbje,gihb,hfac,gfac,gifabc,hfac1] opt_einsum/tests/test_contract.py::test_compare_blas_greek[cd,bdhe,aidb,hgca,gc,hgibcd,hgac] opt_einsum/tests/test_contract.py::test_compare_blas_greek[abhe,hidj,jgba,hiab,gab] opt_einsum/tests/test_contract.py::test_compare_blas_greek[bde,cdh,agdb,hica,ibd,hgicd,hiac] opt_einsum/tests/test_contract.py::test_compare_blas_greek[chd,bde,agbc,hiad,hgc,hgi,hiad] opt_einsum/tests/test_contract.py::test_compare_blas_greek[chd,bde,agbc,hiad,bdi,cgh,agdb] opt_einsum/tests/test_contract.py::test_compare_blas_greek[bdhe,acad,hiab,agac,hibd] opt_einsum/tests/test_contract.py::test_compare_blas_greek[ab,ab,c->] opt_einsum/tests/test_contract.py::test_compare_blas_greek[ab,ab,c->c] opt_einsum/tests/test_contract.py::test_compare_blas_greek[ab,ab,cd,cd->] opt_einsum/tests/test_contract.py::test_compare_blas_greek[ab,ab,cd,cd->ac] opt_einsum/tests/test_contract.py::test_compare_blas_greek[ab,ab,cd,cd->cd] opt_einsum/tests/test_contract.py::test_compare_blas_greek[ab,ab,cd,cd,ef,ef->] opt_einsum/tests/test_contract.py::test_compare_blas_greek[ab,cd,ef->abcdef] opt_einsum/tests/test_contract.py::test_compare_blas_greek[ab,cd,ef->acdf] opt_einsum/tests/test_contract.py::test_compare_blas_greek[ab,cd,de->abcde] opt_einsum/tests/test_contract.py::test_compare_blas_greek[ab,cd,de->be] opt_einsum/tests/test_contract.py::test_compare_blas_greek[ab,bcd,cd->abcd] opt_einsum/tests/test_contract.py::test_compare_blas_greek[ab,bcd,cd->abd] opt_einsum/tests/test_contract.py::test_compare_blas_greek[eb,cb,fb->cef] opt_einsum/tests/test_contract.py::test_compare_blas_greek[dd,fb,be,cdb->cef] opt_einsum/tests/test_contract.py::test_compare_blas_greek[bca,cdb,dbf,afc->] opt_einsum/tests/test_contract.py::test_compare_blas_greek[dcc,fce,ea,dbf->ab] opt_einsum/tests/test_contract.py::test_compare_blas_greek[fdf,cdd,ccd,afe->ae] opt_einsum/tests/test_contract.py::test_compare_blas_greek[abcd,ad] opt_einsum/tests/test_contract.py::test_compare_blas_greek[ed,fcd,ff,bcf->be] opt_einsum/tests/test_contract.py::test_compare_blas_greek[baa,dcf,af,cde->be] opt_einsum/tests/test_contract.py::test_compare_blas_greek[bd,db,eac->ace] opt_einsum/tests/test_contract.py::test_compare_blas_greek[fff,fae,bef,def->abd] opt_einsum/tests/test_contract.py::test_compare_blas_greek[efc,dbc,acf,fd->abe] opt_einsum/tests/test_contract.py::test_compare_blas_greek[ab,ab] opt_einsum/tests/test_contract.py::test_compare_blas_greek[ab,ba] opt_einsum/tests/test_contract.py::test_compare_blas_greek[abc,abc] opt_einsum/tests/test_contract.py::test_compare_blas_greek[abc,bac] opt_einsum/tests/test_contract.py::test_compare_blas_greek[abc,cba] opt_einsum/tests/test_contract.py::test_compare_blas_greek[ab,bc] opt_einsum/tests/test_contract.py::test_compare_blas_greek[ab,cb] opt_einsum/tests/test_contract.py::test_compare_blas_greek[ba,bc] opt_einsum/tests/test_contract.py::test_compare_blas_greek[ba,cb] opt_einsum/tests/test_contract.py::test_compare_blas_greek[abcd,cd] opt_einsum/tests/test_contract.py::test_compare_blas_greek[abcd,ab] opt_einsum/tests/test_contract.py::test_compare_blas_greek[abcd,cdef] opt_einsum/tests/test_contract.py::test_compare_blas_greek[abcd,cdef->feba] opt_einsum/tests/test_contract.py::test_compare_blas_greek[abcd,efdc] opt_einsum/tests/test_contract.py::test_compare_blas_greek[aab,bc->ac] opt_einsum/tests/test_contract.py::test_compare_blas_greek[ab,bcc->ac] opt_einsum/tests/test_contract.py::test_compare_blas_greek[aab,bcc->ac] opt_einsum/tests/test_contract.py::test_compare_blas_greek[baa,bcc->ac] opt_einsum/tests/test_contract.py::test_compare_blas_greek[aab,ccb->ac] opt_einsum/tests/test_contract.py::test_compare_blas_greek[aab,fa,df,ecc->bde] opt_einsum/tests/test_contract.py::test_compare_blas_greek[ecb,fef,bad,ed->ac] opt_einsum/tests/test_contract.py::test_compare_blas_greek[bcf,bbb,fbf,fc->] opt_einsum/tests/test_contract.py::test_compare_blas_greek[bb,ff,be->e] opt_einsum/tests/test_contract.py::test_compare_blas_greek[bcb,bb,fc,fff->] opt_einsum/tests/test_contract.py::test_compare_blas_greek[fbb,dfd,fc,fc->] opt_einsum/tests/test_contract.py::test_compare_blas_greek[afd,ba,cc,dc->bf] opt_einsum/tests/test_contract.py::test_compare_blas_greek[adb,bc,fa,cfc->d] opt_einsum/tests/test_contract.py::test_compare_blas_greek[bbd,bda,fc,db->acf] opt_einsum/tests/test_contract.py::test_compare_blas_greek[dba,ead,cad->bce] opt_einsum/tests/test_contract.py::test_compare_blas_greek[aef,fbc,dca->bde] opt_einsum/tests/test_contract.py::test_some_non_alphabet_maintains_order opt_einsum/tests/test_contract.py::test_printing opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-a,ab,abc->abc] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-a,b,ab->ab] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-ea,fb,gc,hd,abcd->efgh] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-ea,fb,abcd,gc,hd->efgh] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-abcd,ea,fb,gc,hd->efgh] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-acdf,jbje,gihb,hfac,gfac,gifabc,hfac0] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-acdf,jbje,gihb,hfac,gfac,gifabc,hfac1] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-cd,bdhe,aidb,hgca,gc,hgibcd,hgac] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-abhe,hidj,jgba,hiab,gab] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-bde,cdh,agdb,hica,ibd,hgicd,hiac] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-chd,bde,agbc,hiad,hgc,hgi,hiad] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-chd,bde,agbc,hiad,bdi,cgh,agdb] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-bdhe,acad,hiab,agac,hibd] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-ab,ab,c->] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-ab,ab,c->c] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-ab,ab,cd,cd->] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-ab,ab,cd,cd->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-ab,ab,cd,cd->cd] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-ab,ab,cd,cd,ef,ef->] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-ab,cd,ef->abcdef] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-ab,cd,ef->acdf] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-ab,cd,de->abcde] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-ab,cd,de->be] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-ab,bcd,cd->abcd] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-ab,bcd,cd->abd] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-eb,cb,fb->cef] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-dd,fb,be,cdb->cef] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-bca,cdb,dbf,afc->] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-dcc,fce,ea,dbf->ab] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-fdf,cdd,ccd,afe->ae] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-abcd,ad] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-ed,fcd,ff,bcf->be] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-baa,dcf,af,cde->be] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-bd,db,eac->ace] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-fff,fae,bef,def->abd] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-efc,dbc,acf,fd->abe] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-ab,ab] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-ab,ba] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-abc,abc] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-abc,bac] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-abc,cba] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-ab,bc] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-ab,cb] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-ba,bc] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-ba,cb] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-abcd,cd] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-abcd,ab] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-abcd,cdef] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-abcd,cdef->feba] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-abcd,efdc] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-aab,bc->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-ab,bcc->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-aab,bcc->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-baa,bcc->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-aab,ccb->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-aab,fa,df,ecc->bde] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-ecb,fef,bad,ed->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-bcf,bbb,fbf,fc->] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-bb,ff,be->e] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-bcb,bb,fc,fff->] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-fbb,dfd,fc,fc->] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-afd,ba,cc,dc->bf] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-adb,bc,fa,cfc->d] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-bbd,bda,fc,db->acf] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-dba,ead,cad->bce] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-greedy-aef,fbc,dca->bde] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-a,ab,abc->abc] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-a,b,ab->ab] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-ea,fb,gc,hd,abcd->efgh] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-ea,fb,abcd,gc,hd->efgh] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-abcd,ea,fb,gc,hd->efgh] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-acdf,jbje,gihb,hfac,gfac,gifabc,hfac0] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-acdf,jbje,gihb,hfac,gfac,gifabc,hfac1] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-cd,bdhe,aidb,hgca,gc,hgibcd,hgac] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-abhe,hidj,jgba,hiab,gab] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-bde,cdh,agdb,hica,ibd,hgicd,hiac] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-chd,bde,agbc,hiad,hgc,hgi,hiad] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-chd,bde,agbc,hiad,bdi,cgh,agdb] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-bdhe,acad,hiab,agac,hibd] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-ab,ab,c->] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-ab,ab,c->c] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-ab,ab,cd,cd->] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-ab,ab,cd,cd->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-ab,ab,cd,cd->cd] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-ab,ab,cd,cd,ef,ef->] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-ab,cd,ef->abcdef] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-ab,cd,ef->acdf] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-ab,cd,de->abcde] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-ab,cd,de->be] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-ab,bcd,cd->abcd] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-ab,bcd,cd->abd] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-eb,cb,fb->cef] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-dd,fb,be,cdb->cef] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-bca,cdb,dbf,afc->] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-dcc,fce,ea,dbf->ab] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-fdf,cdd,ccd,afe->ae] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-abcd,ad] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-ed,fcd,ff,bcf->be] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-baa,dcf,af,cde->be] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-bd,db,eac->ace] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-fff,fae,bef,def->abd] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-efc,dbc,acf,fd->abe] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-ab,ab] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-ab,ba] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-abc,abc] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-abc,bac] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-abc,cba] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-ab,bc] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-ab,cb] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-ba,bc] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-ba,cb] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-abcd,cd] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-abcd,ab] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-abcd,cdef] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-abcd,cdef->feba] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-abcd,efdc] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-aab,bc->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-ab,bcc->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-aab,bcc->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-baa,bcc->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-aab,ccb->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-aab,fa,df,ecc->bde] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-ecb,fef,bad,ed->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-bcf,bbb,fbf,fc->] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-bb,ff,be->e] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-bcb,bb,fc,fff->] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-fbb,dfd,fc,fc->] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-afd,ba,cc,dc->bf] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-adb,bc,fa,cfc->d] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-bbd,bda,fc,db->acf] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-dba,ead,cad->bce] opt_einsum/tests/test_contract.py::test_contract_expressions[False-False-optimal-aef,fbc,dca->bde] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-a,ab,abc->abc] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-a,b,ab->ab] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-ea,fb,gc,hd,abcd->efgh] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-ea,fb,abcd,gc,hd->efgh] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-abcd,ea,fb,gc,hd->efgh] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-acdf,jbje,gihb,hfac,gfac,gifabc,hfac0] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-acdf,jbje,gihb,hfac,gfac,gifabc,hfac1] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-cd,bdhe,aidb,hgca,gc,hgibcd,hgac] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-abhe,hidj,jgba,hiab,gab] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-bde,cdh,agdb,hica,ibd,hgicd,hiac] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-chd,bde,agbc,hiad,hgc,hgi,hiad] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-chd,bde,agbc,hiad,bdi,cgh,agdb] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-bdhe,acad,hiab,agac,hibd] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-ab,ab,c->] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-ab,ab,c->c] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-ab,ab,cd,cd->] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-ab,ab,cd,cd->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-ab,ab,cd,cd->cd] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-ab,ab,cd,cd,ef,ef->] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-ab,cd,ef->abcdef] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-ab,cd,ef->acdf] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-ab,cd,de->abcde] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-ab,cd,de->be] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-ab,bcd,cd->abcd] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-ab,bcd,cd->abd] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-eb,cb,fb->cef] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-dd,fb,be,cdb->cef] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-bca,cdb,dbf,afc->] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-dcc,fce,ea,dbf->ab] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-fdf,cdd,ccd,afe->ae] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-abcd,ad] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-ed,fcd,ff,bcf->be] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-baa,dcf,af,cde->be] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-bd,db,eac->ace] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-fff,fae,bef,def->abd] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-efc,dbc,acf,fd->abe] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-ab,ab] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-ab,ba] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-abc,abc] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-abc,bac] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-abc,cba] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-ab,bc] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-ab,cb] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-ba,bc] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-ba,cb] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-abcd,cd] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-abcd,ab] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-abcd,cdef] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-abcd,cdef->feba] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-abcd,efdc] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-aab,bc->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-ab,bcc->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-aab,bcc->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-baa,bcc->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-aab,ccb->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-aab,fa,df,ecc->bde] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-ecb,fef,bad,ed->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-bcf,bbb,fbf,fc->] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-bb,ff,be->e] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-bcb,bb,fc,fff->] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-fbb,dfd,fc,fc->] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-afd,ba,cc,dc->bf] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-adb,bc,fa,cfc->d] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-bbd,bda,fc,db->acf] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-dba,ead,cad->bce] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-greedy-aef,fbc,dca->bde] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-a,ab,abc->abc] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-a,b,ab->ab] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-ea,fb,gc,hd,abcd->efgh] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-ea,fb,abcd,gc,hd->efgh] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-abcd,ea,fb,gc,hd->efgh] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-acdf,jbje,gihb,hfac,gfac,gifabc,hfac0] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-acdf,jbje,gihb,hfac,gfac,gifabc,hfac1] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-cd,bdhe,aidb,hgca,gc,hgibcd,hgac] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-abhe,hidj,jgba,hiab,gab] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-bde,cdh,agdb,hica,ibd,hgicd,hiac] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-chd,bde,agbc,hiad,hgc,hgi,hiad] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-chd,bde,agbc,hiad,bdi,cgh,agdb] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-bdhe,acad,hiab,agac,hibd] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-ab,ab,c->] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-ab,ab,c->c] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-ab,ab,cd,cd->] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-ab,ab,cd,cd->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-ab,ab,cd,cd->cd] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-ab,ab,cd,cd,ef,ef->] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-ab,cd,ef->abcdef] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-ab,cd,ef->acdf] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-ab,cd,de->abcde] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-ab,cd,de->be] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-ab,bcd,cd->abcd] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-ab,bcd,cd->abd] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-eb,cb,fb->cef] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-dd,fb,be,cdb->cef] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-bca,cdb,dbf,afc->] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-dcc,fce,ea,dbf->ab] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-fdf,cdd,ccd,afe->ae] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-abcd,ad] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-ed,fcd,ff,bcf->be] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-baa,dcf,af,cde->be] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-bd,db,eac->ace] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-fff,fae,bef,def->abd] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-efc,dbc,acf,fd->abe] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-ab,ab] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-ab,ba] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-abc,abc] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-abc,bac] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-abc,cba] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-ab,bc] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-ab,cb] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-ba,bc] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-ba,cb] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-abcd,cd] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-abcd,ab] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-abcd,cdef] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-abcd,cdef->feba] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-abcd,efdc] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-aab,bc->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-ab,bcc->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-aab,bcc->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-baa,bcc->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-aab,ccb->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-aab,fa,df,ecc->bde] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-ecb,fef,bad,ed->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-bcf,bbb,fbf,fc->] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-bb,ff,be->e] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-bcb,bb,fc,fff->] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-fbb,dfd,fc,fc->] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-afd,ba,cc,dc->bf] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-adb,bc,fa,cfc->d] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-bbd,bda,fc,db->acf] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-dba,ead,cad->bce] opt_einsum/tests/test_contract.py::test_contract_expressions[False-True-optimal-aef,fbc,dca->bde] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-a,ab,abc->abc] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-a,b,ab->ab] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-ea,fb,gc,hd,abcd->efgh] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-ea,fb,abcd,gc,hd->efgh] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-abcd,ea,fb,gc,hd->efgh] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-acdf,jbje,gihb,hfac,gfac,gifabc,hfac0] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-acdf,jbje,gihb,hfac,gfac,gifabc,hfac1] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-cd,bdhe,aidb,hgca,gc,hgibcd,hgac] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-abhe,hidj,jgba,hiab,gab] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-bde,cdh,agdb,hica,ibd,hgicd,hiac] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-chd,bde,agbc,hiad,hgc,hgi,hiad] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-chd,bde,agbc,hiad,bdi,cgh,agdb] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-bdhe,acad,hiab,agac,hibd] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-ab,ab,c->] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-ab,ab,c->c] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-ab,ab,cd,cd->] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-ab,ab,cd,cd->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-ab,ab,cd,cd->cd] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-ab,ab,cd,cd,ef,ef->] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-ab,cd,ef->abcdef] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-ab,cd,ef->acdf] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-ab,cd,de->abcde] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-ab,cd,de->be] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-ab,bcd,cd->abcd] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-ab,bcd,cd->abd] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-eb,cb,fb->cef] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-dd,fb,be,cdb->cef] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-bca,cdb,dbf,afc->] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-dcc,fce,ea,dbf->ab] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-fdf,cdd,ccd,afe->ae] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-abcd,ad] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-ed,fcd,ff,bcf->be] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-baa,dcf,af,cde->be] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-bd,db,eac->ace] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-fff,fae,bef,def->abd] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-efc,dbc,acf,fd->abe] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-ab,ab] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-ab,ba] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-abc,abc] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-abc,bac] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-abc,cba] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-ab,bc] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-ab,cb] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-ba,bc] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-ba,cb] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-abcd,cd] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-abcd,ab] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-abcd,cdef] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-abcd,cdef->feba] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-abcd,efdc] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-aab,bc->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-ab,bcc->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-aab,bcc->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-baa,bcc->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-aab,ccb->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-aab,fa,df,ecc->bde] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-ecb,fef,bad,ed->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-bcf,bbb,fbf,fc->] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-bb,ff,be->e] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-bcb,bb,fc,fff->] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-fbb,dfd,fc,fc->] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-afd,ba,cc,dc->bf] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-adb,bc,fa,cfc->d] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-bbd,bda,fc,db->acf] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-dba,ead,cad->bce] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-greedy-aef,fbc,dca->bde] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-a,ab,abc->abc] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-a,b,ab->ab] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-ea,fb,gc,hd,abcd->efgh] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-ea,fb,abcd,gc,hd->efgh] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-abcd,ea,fb,gc,hd->efgh] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-acdf,jbje,gihb,hfac,gfac,gifabc,hfac0] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-acdf,jbje,gihb,hfac,gfac,gifabc,hfac1] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-cd,bdhe,aidb,hgca,gc,hgibcd,hgac] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-abhe,hidj,jgba,hiab,gab] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-bde,cdh,agdb,hica,ibd,hgicd,hiac] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-chd,bde,agbc,hiad,hgc,hgi,hiad] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-chd,bde,agbc,hiad,bdi,cgh,agdb] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-bdhe,acad,hiab,agac,hibd] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-ab,ab,c->] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-ab,ab,c->c] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-ab,ab,cd,cd->] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-ab,ab,cd,cd->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-ab,ab,cd,cd->cd] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-ab,ab,cd,cd,ef,ef->] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-ab,cd,ef->abcdef] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-ab,cd,ef->acdf] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-ab,cd,de->abcde] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-ab,cd,de->be] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-ab,bcd,cd->abcd] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-ab,bcd,cd->abd] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-eb,cb,fb->cef] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-dd,fb,be,cdb->cef] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-bca,cdb,dbf,afc->] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-dcc,fce,ea,dbf->ab] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-fdf,cdd,ccd,afe->ae] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-abcd,ad] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-ed,fcd,ff,bcf->be] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-baa,dcf,af,cde->be] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-bd,db,eac->ace] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-fff,fae,bef,def->abd] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-efc,dbc,acf,fd->abe] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-ab,ab] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-ab,ba] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-abc,abc] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-abc,bac] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-abc,cba] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-ab,bc] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-ab,cb] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-ba,bc] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-ba,cb] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-abcd,cd] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-abcd,ab] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-abcd,cdef] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-abcd,cdef->feba] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-abcd,efdc] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-aab,bc->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-ab,bcc->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-aab,bcc->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-baa,bcc->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-aab,ccb->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-aab,fa,df,ecc->bde] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-ecb,fef,bad,ed->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-bcf,bbb,fbf,fc->] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-bb,ff,be->e] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-bcb,bb,fc,fff->] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-fbb,dfd,fc,fc->] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-afd,ba,cc,dc->bf] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-adb,bc,fa,cfc->d] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-bbd,bda,fc,db->acf] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-dba,ead,cad->bce] opt_einsum/tests/test_contract.py::test_contract_expressions[True-False-optimal-aef,fbc,dca->bde] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-a,ab,abc->abc] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-a,b,ab->ab] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-ea,fb,gc,hd,abcd->efgh] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-ea,fb,abcd,gc,hd->efgh] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-abcd,ea,fb,gc,hd->efgh] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-acdf,jbje,gihb,hfac,gfac,gifabc,hfac0] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-acdf,jbje,gihb,hfac,gfac,gifabc,hfac1] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-cd,bdhe,aidb,hgca,gc,hgibcd,hgac] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-abhe,hidj,jgba,hiab,gab] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-bde,cdh,agdb,hica,ibd,hgicd,hiac] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-chd,bde,agbc,hiad,hgc,hgi,hiad] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-chd,bde,agbc,hiad,bdi,cgh,agdb] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-bdhe,acad,hiab,agac,hibd] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-ab,ab,c->] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-ab,ab,c->c] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-ab,ab,cd,cd->] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-ab,ab,cd,cd->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-ab,ab,cd,cd->cd] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-ab,ab,cd,cd,ef,ef->] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-ab,cd,ef->abcdef] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-ab,cd,ef->acdf] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-ab,cd,de->abcde] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-ab,cd,de->be] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-ab,bcd,cd->abcd] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-ab,bcd,cd->abd] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-eb,cb,fb->cef] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-dd,fb,be,cdb->cef] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-bca,cdb,dbf,afc->] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-dcc,fce,ea,dbf->ab] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-fdf,cdd,ccd,afe->ae] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-abcd,ad] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-ed,fcd,ff,bcf->be] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-baa,dcf,af,cde->be] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-bd,db,eac->ace] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-fff,fae,bef,def->abd] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-efc,dbc,acf,fd->abe] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-ab,ab] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-ab,ba] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-abc,abc] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-abc,bac] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-abc,cba] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-ab,bc] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-ab,cb] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-ba,bc] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-ba,cb] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-abcd,cd] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-abcd,ab] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-abcd,cdef] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-abcd,cdef->feba] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-abcd,efdc] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-aab,bc->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-ab,bcc->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-aab,bcc->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-baa,bcc->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-aab,ccb->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-aab,fa,df,ecc->bde] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-ecb,fef,bad,ed->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-bcf,bbb,fbf,fc->] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-bb,ff,be->e] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-bcb,bb,fc,fff->] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-fbb,dfd,fc,fc->] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-afd,ba,cc,dc->bf] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-adb,bc,fa,cfc->d] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-bbd,bda,fc,db->acf] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-dba,ead,cad->bce] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-greedy-aef,fbc,dca->bde] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-a,ab,abc->abc] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-a,b,ab->ab] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-ea,fb,gc,hd,abcd->efgh] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-ea,fb,abcd,gc,hd->efgh] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-abcd,ea,fb,gc,hd->efgh] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-acdf,jbje,gihb,hfac,gfac,gifabc,hfac0] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-acdf,jbje,gihb,hfac,gfac,gifabc,hfac1] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-cd,bdhe,aidb,hgca,gc,hgibcd,hgac] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-abhe,hidj,jgba,hiab,gab] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-bde,cdh,agdb,hica,ibd,hgicd,hiac] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-chd,bde,agbc,hiad,hgc,hgi,hiad] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-chd,bde,agbc,hiad,bdi,cgh,agdb] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-bdhe,acad,hiab,agac,hibd] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-ab,ab,c->] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-ab,ab,c->c] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-ab,ab,cd,cd->] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-ab,ab,cd,cd->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-ab,ab,cd,cd->cd] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-ab,ab,cd,cd,ef,ef->] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-ab,cd,ef->abcdef] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-ab,cd,ef->acdf] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-ab,cd,de->abcde] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-ab,cd,de->be] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-ab,bcd,cd->abcd] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-ab,bcd,cd->abd] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-eb,cb,fb->cef] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-dd,fb,be,cdb->cef] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-bca,cdb,dbf,afc->] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-dcc,fce,ea,dbf->ab] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-fdf,cdd,ccd,afe->ae] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-abcd,ad] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-ed,fcd,ff,bcf->be] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-baa,dcf,af,cde->be] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-bd,db,eac->ace] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-fff,fae,bef,def->abd] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-efc,dbc,acf,fd->abe] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-ab,ab] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-ab,ba] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-abc,abc] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-abc,bac] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-abc,cba] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-ab,bc] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-ab,cb] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-ba,bc] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-ba,cb] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-abcd,cd] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-abcd,ab] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-abcd,cdef] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-abcd,cdef->feba] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-abcd,efdc] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-aab,bc->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-ab,bcc->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-aab,bcc->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-baa,bcc->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-aab,ccb->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-aab,fa,df,ecc->bde] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-ecb,fef,bad,ed->ac] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-bcf,bbb,fbf,fc->] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-bb,ff,be->e] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-bcb,bb,fc,fff->] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-fbb,dfd,fc,fc->] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-afd,ba,cc,dc->bf] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-adb,bc,fa,cfc->d] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-bbd,bda,fc,db->acf] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-dba,ead,cad->bce] opt_einsum/tests/test_contract.py::test_contract_expressions[True-True-optimal-aef,fbc,dca->bde] opt_einsum/tests/test_contract.py::test_contract_expression_with_constants[hbc,bdef,cdkj,ji,ikeh,lfo-constants0] opt_einsum/tests/test_contract.py::test_contract_expression_with_constants[bdef,cdkj,ji,ikeh,hbc,lfo-constants1] opt_einsum/tests/test_contract.py::test_contract_expression_with_constants[hbc,bdef,cdkj,ji,ikeh,lfo-constants2] opt_einsum/tests/test_contract.py::test_contract_expression_with_constants[hbc,bdef,cdkj,ji,ikeh,lfo-constants3] opt_einsum/tests/test_contract.py::test_contract_expression_with_constants[ijab,acd,bce,df,ef->ji-constants4] opt_einsum/tests/test_contract.py::test_contract_expression_with_constants[ab,cd,ad,cb-constants5] opt_einsum/tests/test_contract.py::test_contract_expression_with_constants[ab,bc,cd-constants6] opt_einsum/tests/test_input.py::test_value_errors opt_einsum/tests/test_input.py::test_compare[...a->...] opt_einsum/tests/test_input.py::test_compare[a...->...] opt_einsum/tests/test_input.py::test_compare[a...a->...a] opt_einsum/tests/test_input.py::test_compare[...,...] opt_einsum/tests/test_input.py::test_compare[a,b] opt_einsum/tests/test_input.py::test_compare[...a,...b] opt_einsum/tests/test_input.py::test_ellipse_input1 opt_einsum/tests/test_input.py::test_ellipse_input2 opt_einsum/tests/test_input.py::test_ellipse_input3 opt_einsum/tests/test_input.py::test_ellipse_input4 opt_einsum/tests/test_input.py::test_singleton_dimension_broadcast opt_einsum/tests/test_input.py::test_large_int_input_format opt_einsum/tests/test_paths.py::test_size_by_dict opt_einsum/tests/test_paths.py::test_flop_cost opt_einsum/tests/test_paths.py::test_path_optimal opt_einsum/tests/test_paths.py::test_path_greedy opt_einsum/tests/test_paths.py::test_memory_paths opt_einsum/tests/test_paths.py::test_path_edge_cases[greedy-eb,cb,fb->cef-order0] opt_einsum/tests/test_paths.py::test_path_edge_cases[optimal-eb,cb,fb->cef-order1] opt_einsum/tests/test_paths.py::test_path_edge_cases[greedy-dd,fb,be,cdb->cef-order2] opt_einsum/tests/test_paths.py::test_path_edge_cases[optimal-dd,fb,be,cdb->cef-order3] opt_einsum/tests/test_paths.py::test_path_edge_cases[greedy-bca,cdb,dbf,afc->-order4] opt_einsum/tests/test_paths.py::test_path_edge_cases[optimal-bca,cdb,dbf,afc->-order5] opt_einsum/tests/test_paths.py::test_path_edge_cases[greedy-dcc,fce,ea,dbf->ab-order6] opt_einsum/tests/test_paths.py::test_path_edge_cases[optimal-dcc,fce,ea,dbf->ab-order7] opt_einsum/tests/test_paths.py::test_optimal_edge_cases opt_einsum/tests/test_paths.py::test_greedy_edge_cases opt_einsum/tests/test_paths.py::test_can_optimize_outer_products opt_einsum/tests/test_paths.py::test_large_path[2] opt_einsum/tests/test_paths.py::test_large_path[3] opt_einsum/tests/test_paths.py::test_large_path[26] opt_einsum/tests/test_paths.py::test_large_path[52] opt_einsum/tests/test_paths.py::test_large_path[116] opt_einsum/tests/test_paths.py::test_large_path[300]