Reworked the simplify_paulis function to be more performant and memory conscious. Now the input operator is modified in-place. Performs merging and pruning if desired.
Updated the Library Reference documentation to include base and derived types.
Quantum operators are now easier to find in the documentation, with a dedicated Operators section.
Improved language server diagnostics: now warns when variables redeclare names in the same scope or shadow visible variables, parameters, globals, functions, and class declarations
Added figure-level pre-serialization sampling in the Plotting module to reduce .figure payload sizes.
Sampling is enabled by default with Figure.sampling(...) controls.
auto export warns when large series are sampled or when no automatic sampling strategy is available.
Removed built-in ECharts sampling from plotting option docs to avoid confusion with figure-level sampling.
Initial support for Symbolic operator (SpinHalf) to Linear tensor networks, matrix product operator (MPO) and matrix product state (MPS).
SpinHalf operators can be converted to MPO with mpo(operator,length,[as_(complex|real)])
SpinHalf operator can be multiplied into a MPO, operator >> mpo
SpinHalf operator can be multiplied with MPS, inplace with operator >> mps and out of place with new_mps = operator*mps.
Fixed CNOT operator so that the first argument is correctly the control qubit and the second is the target qubit (previously the second argument incorrectly acted as the control).
Corrected documentation for XYZ and Floquet to align their phase signs with the implementation.
Fixed Aleph type_name() and is_type() results for derived types stored through a base type.
Fixed Aleph language server formatting for array and map access so expressions such as my_array[index] and map["key"] stay attached.
Enhanced precision in plotting JSON output for integer and real values.
The mps and mpo factory functions have been renamed:
make_random_mps → random_mps
make_random_mpo → random_mpo
Fixed-number-of-sites quantum operators (XX, YY, ZZ, CNOT, SWAP, UnitaryXYZ, Floquet, DualUnitary, etc.) no longer accept lists for site indices. Explicit scalar indices must be passed instead (e.g., XX(0, 1) instead of XX([0, 1])). This guarantees consistent behavior across all operators and prevents silent errors from unintended array inputs. Note that you may still use lists with the call method as follows: XX.call([0, 1]).
Figures output may change for existing scripts because integer and real values are now serialized with higher precision.
In the API for Model, Term (term) has been changed to Interaction (interaction for the factory), as in model.add(interaction("J", [Z, Z], "nn")).
In the API for Model, measure has been changed to add_observable, as in model.add_observable("name", interaction("coefficient", [Z, Z], "neighbourhood")).
In simplify_paulis the operation is now done in-place on the pauli product rather than returning an ComplexOperatorSum. The return type is the phase of the pauli product in the case where the input is an OperatorProduct whereas for any other type the output is set to 1.0.