10#include "utils/vec_clone.hpp"
13#include <initializer_list>
21 class MPO_impl :
public intrusive_ptr_base<MPO_impl> {
24 std::vector<UniTensor> _TNs;
29 boost::intrusive_ptr<MPO_impl> clone()
const {
30 boost::intrusive_ptr<MPO_impl> out(
new MPO_impl());
31 out->_TNs = vec_clone(this->_TNs);
35 virtual std::ostream &Print(std::ostream &os);
37 virtual UniTensor get_op(
const cytnx_uint64 &site_idx);
40 class RegularMPO :
public MPO_impl {
42 std::ostream &Print(std::ostream &os);
44 UniTensor get_op(
const cytnx_uint64 &site_idx);
53 boost::intrusive_ptr<MPO_impl> _impl;
55 : _impl(
new RegularMPO()){
59 MPO(
const MPO &rhs) { _impl = rhs._impl; }
73 std::vector<UniTensor> &
get_all() {
return this->_impl->_TNs; }
75 const std::vector<UniTensor> &
get_all()
const {
return this->_impl->_TNs; }
79 return this->_impl->get_op(site_idx);
An Enhanced tensor specifically designed for physical Tensor network simulation.
Definition UniTensor.hpp:1705
const std::vector< UniTensor > & get_all() const
Definition MPO.hpp:75
cytnx_uint64 size()
Definition MPO.hpp:67
MPO & operator=(const MPO &rhs)
Definition MPO.hpp:62
virtual UniTensor get_op(const cytnx_uint64 &site_idx)
Definition MPO.hpp:78
std::vector< UniTensor > & get_all()
Definition MPO.hpp:73
void assign(const cytnx_uint64 &N, const UniTensor &rc)
Definition MPO.hpp:71
void append(const UniTensor &rc)
Definition MPO.hpp:69
std::ostream & operator<<(std::ostream &os, const MPO &in)
Definition Accessor.hpp:12
uint64_t cytnx_uint64
Definition Type.hpp:45