Skip to content

feat(simplett): complete MPO canonical form conversions and MPS×MPO contraction #182

@shinaoka

Description

@shinaoka

Summary

The MPO contraction algorithms (naive, zipup, fit) are already implemented, but supporting infrastructure for canonical forms is incomplete.

Current Status

Implemented:

  • contract_naive
  • contract_zipup
  • contract_fit
  • MPO, SiteMPO, VidalMPO, InverseMPO type definitions ✓
  • ContractionAlgorithm dispatch ✓

Stubs (not implemented):

  • SiteMPO::move_center_left/right - only updates index, no QR decomposition
  • VidalMPO::from_mpo / into_mpo - returns error
  • InverseMPO::from_mpo / into_mpo - returns error
  • MPS×MPO contraction

Tasks

High Priority

  1. SiteMPO center movement (site_mpo.rs)

    • Implement QR decomposition in move_center_left and move_center_right
    • Required for correct contract_fit behavior
  2. MPS×MPO contraction (new mps_mpo_contract.rs)

    • Contract MPS (Tensor3) with MPO (Tensor4) → MPS (Tensor3)
    • Promote MPS to 4D, contract, demote result

Medium Priority

  1. VidalMPO conversions (vidal_mpo.rs)

    • from_mpo: QR canonicalization + SVD to extract singular values
    • into_mpo: Gamma × Lambda reconstruction
  2. InverseMPO conversions (inverse_mpo.rs)

    • from_mpo: Convert via VidalMPO, invert singular values
    • into_mpo: Invert back and reconstruct

Reference

  • Julia implementation: T4AMPOContractions.jl/src/contraction.jl
  • Rust MPO module: crates/tensor4all-simplett/src/mpo/

Out of Scope

  • TCI-based contraction (depends on future tensor4all-tci crate)
  • Distributed/MPI contraction

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions