**Breaking Changes**
- all singular value renormalization is turned off by default
- [`TensorNetwork.compress_all`](https://quimb.readthedocs.io/en/latest/autoapi/quimb/tensor/index.html#quimb.tensor.TensorNetwork.compress_all) now defaults to using some local gauging
**Enhancements:**
- add `quimb.tensor.tensor_1d_compress.py` with functions for compressing generic 1D tensor networks (with arbitrary local structure) using various methods. The methods are:
- The **'direct'** method: [`tensor_network_1d_compress_direct`](https://quimb.readthedocs.io/en/latest/autoapi/quimb/tensor/tensor_1d_compress/index.html#quimb.tensor.tensor_1d_compress.tensor_network_1d_compress_direct)
- The **'dm'** (density matrix) method: [`tensor_network_1d_compress_dm`](https://quimb.readthedocs.io/en/latest/autoapi/quimb/tensor/tensor_1d_compress/index.html#quimb.tensor.tensor_1d_compress.tensor_network_1d_compress_dm)
- The **'zipup'** method: [`tensor_network_1d_compress_zipup`](https://quimb.readthedocs.io/en/latest/autoapi/quimb/tensor/tensor_1d_compress/index.html#quimb.tensor.tensor_1d_compress.tensor_network_1d_compress_zipup)
- The **'zipup-first'** method: [`tensor_network_1d_compress_zipup_first`](https://quimb.readthedocs.io/en/latest/autoapi/quimb/tensor/tensor_1d_compress/index.html#quimb.tensor.tensor_1d_compress.tensor_network_1d_compress_zipup_first)
- The 1 and 2 site **'fit'** or sweeping method: [`tensor_network_1d_compress_fit`](https://quimb.readthedocs.io/en/latest/autoapi/quimb/tensor/tensor_1d_compress/index.html#quimb.tensor.tensor_1d_compress.tensor_network_1d_compress_fit)
- ... and some more niche methods for debugging and testing.
And can be accessed via the unified function [`tensor_network_1d_compress`](https://quimb.readthedocs.io/en/latest/autoapi/quimb/tensor/tensor_1d_compress/index.html#quimb.tensor.tensor_1d_compress.tensor_network_1d_compress). Boundary contraction in 2D can now utilize any of these methods.
- add [`quimb.tensor.tensor_arbgeom_compress.py`](https://quimb.readthedocs.io/en/latest/autoapi/quimb/tensor/tensor_arbgeom_compress/index.html) with functions for compressing arbitrary geometry tensor networks using various methods. The methods are:
- The **'local-early'** method: [`tensor_network_ag_compress_local_early`](https://quimb.readthedocs.io/en/latest/autoapi/quimb/tensor/tensor_arbgeom_compress/index.html#quimb.tensor.tensor_arbgeom_compress.tensor_network_ag_compress_local_early)
- The **'local-late'** method: [`tensor_network_ag_compress_local_late`](https://quimb.readthedocs.io/en/latest/autoapi/quimb/tensor/tensor_arbgeom_compress/index.html#quimb.tensor.tensor_arbgeom_compress.tensor_network_ag_compress_local_late)
- The **'projector'** method: [`tensor_network_ag_compress_projector`](https://quimb.readthedocs.io/en/latest/autoapi/quimb/tensor/tensor_arbgeom_compress/index.html#quimb.tensor.tensor_arbgeom_compress.tensor_network_ag_compress_projector)
- The **'superorthogonal'** method: [`tensor_network_ag_compress_superorthogonal`](https://quimb.readthedocs.io/en/latest/autoapi/quimb/tensor/tensor_arbgeom_compress/index.html#quimb.tensor.tensor_arbgeom_compress.tensor_network_ag_compress_superorthogonal)
- The **'l2bp'** method: [`tensor_network_ag_compress_l2bp`](https://quimb.readthedocs.io/en/latest/autoapi/quimb/tensor/tensor_arbgeom_compress/index.html#quimb.tensor.tensor_arbgeom_compress.tensor_network_ag_compress_l2bp)
And can be accessed via the unified function [`tensor_network_ag_compress`](https://quimb.readthedocs.io/en/latest/autoapi/quimb/tensor/tensor_arbgeom_compress/index.html#quimb.tensor.tensor_arbgeom_compress.tensor_network_ag_compress). 1D compression can also fall back to these methods.
- support PBC in [`tn2d.contract_hotrg`](https://quimb.readthedocs.io/en/latest/autoapi/quimb/tensor/tensor_2d/index.html#quimb.tensor.tensor_2d.TensorNetwork2D.contract_hotrg), [`tn2d.contract_ctmrg`](https://quimb.readthedocs.io/en/latest/autoapi/quimb/tensor/tensor_2d/index.html#quimb.tensor.tensor_2d.TensorNetwork2D.contract_ctmrg), [`tn3d.contract_hotrg`](https://quimb.readthedocs.io/en/latest/autoapi/quimb/tensor/tensor_3d/index.html#quimb.tensor.tensor_3d.TensorNetwork3D.contract_hotrg) and the new function [`tn3d.contract_ctmrg`](https://quimb.readthedocs.io/en/latest/autoapi/quimb/tensor/tensor_3d/index.html#quimb.tensor.tensor_3d.TensorNetwork3D.contract_ctmrg).
- support PBC in [`gen_2d_bonds`](https://quimb.readthedocs.io/en/latest/autoapi/quimb/tensor/tensor_2d/index.html#quimb.tensor.tensor_2d.gen_2d_bonds) and [`gen_3d_bonds`](https://quimb.readthedocs.io/en/latest/autoapi/quimb/tensor/tensor_3d/index.html#quimb.tensor.tensor_3d.gen_3d_bonds), with ``cyclic`` kwarg.
- support PBC in [`TN2D_rand_hidden_loop`](https://quimb.readthedocs.io/en/latest/autoapi/quimb/tensor/tensor_builder/index.html#quimb.tensor.tensor_builder.TN2D_rand_hidden_loop) and [`TN3D_rand_hidden_loop`](https://quimb.readthedocs.io/en/latest/autoapi/quimb/tensor/tensor_builder/index.html#quimb.tensor.tensor_builder.TN3D_rand_hidden_loop), with ``cyclic`` kwarg.
- support PBC in the various base PEPS and PEPO construction methods.
- add [`tensor_network_apply_op_op`](https://quimb.readthedocs.io/en/latest/autoapi/quimb/tensor/tensor_arbgeom/index.html#quimb.tensor.tensor_arbgeom.tensor_network_apply_op_op) for applying 'operator' TNs to 'operator' TNs.
- tweak [`tensor_network_apply_op_vec`](https://quimb.readthedocs.io/en/latest/autoapi/quimb/tensor/tensor_arbgeom/index.html#quimb.tensor.tensor_arbgeom.tensor_network_apply_op_vec) for applying 'operator' TNs to 'vector' or 'state' TNs.
- add [`tnvec.gate_with_op_lazy`](https://quimb.readthedocs.io/en/latest/autoapi/quimb/tensor/tensor_arbgeom/index.html#quimb.tensor.tensor_arbgeom.TensorNetworkGenVector.gate_with_op_lazy) method for applying 'operator' TNs to 'vector' or 'state' TNs like $x \rightarrow A x$.
- add [`tnop.gate_upper_with_op_lazy`](https://quimb.readthedocs.io/en/latest/autoapi/quimb/tensor/tensor_arbgeom/index.html#quimb.tensor.tensor_arbgeom.TensorNetworkGenOperator.gate_upper_with_op_lazy) method for applying 'operator' TNs to the upper indices of 'operator' TNs like $B \rightarrow A B$.
- add [`tnop.gate_lower_with_op_lazy`](https://quimb.readthedocs.io/en/latest/autoapi/quimb/tensor/tensor_arbgeom/index.html#quimb.tensor.tensor_arbgeom.TensorNetworkGenOperator.gate_lower_with_op_lazy) method for applying 'operator' TNs to the lower indices of 'operator' TNs like $B \rightarrow B A$.
- add [`tnop.gate_sandwich_with_op_lazy`](https://quimb.readthedocs.io/en/latest/autoapi/quimb/tensor/tensor_arbgeom/index.html#quimb.tensor.tensor_arbgeom.TensorNetworkGenOperator.gate_sandwich_with_op_lazy) method for applying 'operator' TNs to the upper and lower indices of 'operator' TNs like $B \rightarrow A B A^\dagger$.
- unify all TN summing routines into [`tensor_network_ag_sum`](https://quimb.readthedocs.io/en/latest/autoapi/quimb/tensor/tensor_arbgeom/index.html#quimb.tensor.tensor_arbgeom.tensor_network_ag_sum), which allows summing *any* two tensor networks with matching site tags and outer indices, replacing specific MPS, MPO, PEPS, PEPO, etc. summing routines.
- add [`rand_symmetric_array`](https://quimb.readthedocs.io/en/latest/autoapi/quimb/tensor/tensor_builder/index.html#quimb.tensor.tensor_builder.rand_symmetric_array), [`rand_tensor_symmetric`](https://quimb.readthedocs.io/en/latest/autoapi/quimb/tensor/tensor_builder/index.html#quimb.tensor.tensor_builder.rand_tensor_symmetric) [`TN2D_rand_symmetric`](https://quimb.readthedocs.io/en/latest/autoapi/quimb/tensor/tensor_builder/index.html#quimb.tensor.tensor_builder.TN2D_rand_symmetric) for generating random symmetric arrays, tensors and 2D tensor networks.
**Bug fixes:**
- fix scipy sparse monkey patch for scipy>=1.13 (222)
- fix autoblock bug where connected sectors were not being merged (223)
**Full Changelog**: https://github.com/jcmgray/quimb/compare/v1.7.3...v1.8.0