@@ -1633,8 +1633,10 @@ def gate(tn, gates, where=None, which=None, **kwargs):
16331633 when ``contract`` is ``"split"`` or ``"reduce-split"``. For other contract
16341634 modes, the gate is applied directly to the requested endpoints.
16351635 By default, 2D/3D routing uses ``sequence="auto"`` to choose a shortest
1636- route with the smallest current virtual-bond bottleneck. Pass an explicit
1637- deterministic sequence to force a particular route.
1636+ route with the smallest current virtual-bond bottleneck, and
1637+ ``contract="reduce-split"`` for quimb's reduced two-site split path. Pass
1638+ an explicit deterministic sequence or contract mode to force a particular
1639+ route or split strategy.
16381640 The efficient routed pattern is::
16391641
16401642 gate(
@@ -1730,7 +1732,7 @@ def gate(tn, gates, where=None, which=None, **kwargs):
17301732
17311733 if arity == 2 :
17321734 opts_local = dict (opts )
1733- opts_local .setdefault ("contract" , "split" )
1735+ opts_local .setdefault ("contract" , "reduce- split" )
17341736 if which_payload is not None :
17351737 opts_local ["ind_id" ] = _ind_id_from_which (which_payload , 2 )
17361738 elif (which_default is not None ) and ("ind_id" not in opts_local ):
@@ -1748,7 +1750,7 @@ def gate(tn, gates, where=None, which=None, **kwargs):
17481750
17491751 if arity == 3 :
17501752 opts_local = dict (opts )
1751- opts_local .setdefault ("contract" , "split" )
1753+ opts_local .setdefault ("contract" , "reduce- split" )
17521754 if which_payload is not None :
17531755 opts_local ["ind_id" ] = _ind_id_from_which (which_payload , 3 )
17541756 elif (which_default is not None ) and ("ind_id" not in opts_local ):
@@ -2203,7 +2205,7 @@ def _apply_gate_2d(
22032205 bond_dim = None ,
22042206 max_bond = None ,
22052207 bra = False ,
2206- contract = "split" ,
2208+ contract = "reduce- split" ,
22072209 tags = None ,
22082210 dtype = "complex128" ,
22092211 cutoff = 1.0e-12 ,
@@ -2478,7 +2480,7 @@ def _apply_gate_3d(
24782480 bond_dim = None ,
24792481 max_bond = None ,
24802482 bra = False ,
2481- contract = "split" ,
2483+ contract = "reduce- split" ,
24822484 tags = None ,
24832485 dtype = "complex128" ,
24842486 cutoff = 1.0e-12 ,
@@ -2692,7 +2694,7 @@ def build_pepo_from_gates(
26922694 dtype = "complex128" ,
26932695 max_bond = 16 ,
26942696 sequence = "auto" ,
2695- contract = "split" ,
2697+ contract = "reduce- split" ,
26962698 ind_id = "k{},{}" ,
26972699):
26982700 """Build a PEPO from gate-style input on top of a PEPO identity.
@@ -2725,8 +2727,9 @@ def build_pepo_from_gates(
27252727 2D SWAP-path preference for long-range two-site gates. Defaults to
27262728 ``"auto"`` for the same lower-bond smart routing used by
27272729 :func:`gate`.
2728- contract : str, default="split"
2729- Gate contraction mode.
2730+ contract : str, default="reduce-split"
2731+ Gate contraction mode. The default uses quimb's reduced two-site split
2732+ path, which is usually cheaper than ``"split"`` for PEPO/PEPS tensors.
27302733 ind_id : str, default="k{},{}"
27312734 Physical index format used for PEPO ket-family indices.
27322735
@@ -2806,7 +2809,7 @@ def build_mpo_from_gates(
28062809 mpo_ = None ,
28072810 dtype = "complex128" ,
28082811 max_bond = 16 ,
2809- contract = "split" ,
2812+ contract = "reduce- split" ,
28102813 ind_id = "k{}" ,
28112814):
28122815 """Build an MPO from gate-style input on top of an MPO identity.
@@ -2835,8 +2838,9 @@ def build_mpo_from_gates(
28352838 max_bond : int, default=16
28362839 Per-gate local split truncation cap and fallback construction
28372840 compression cap.
2838- contract : str, default="split"
2839- Gate contraction mode.
2841+ contract : str, default="reduce-split"
2842+ Gate contraction mode. The default uses quimb's reduced two-site split
2843+ path, which is usually cheaper than ``"split"`` for MPO tensors.
28402844 ind_id : str, default="k{}"
28412845 Physical index format used for MPO ket-family indices.
28422846
0 commit comments