27 #ifndef INTERNAL_CLASSES_IOMANIP_H_
28 #define INTERNAL_CLASSES_IOMANIP_H_
46 std::ostringstream ostr;
49 std::vector<std::string> vstr;
52 for (
idx i = 0; i < static_cast<idx>(A.rows()); ++i)
55 j < static_cast<idx>(A.cols()); ++j)
59 ostr.str(std::string {});
62 double re =
static_cast<cplx>(A(i, j)).real();
63 double im =
static_cast<cplx>(A(i, j)).imag();
65 if (std::abs(re) <
chop && std::abs(im) <
chop)
70 vstr.push_back(ostr.str());
71 }
else if (std::abs(re) <
chop)
74 vstr.push_back(ostr.str() +
"i");
75 }
else if (std::abs(im) <
chop)
78 vstr.push_back(ostr.str() +
" ");
84 strA += (im > 0 ?
" + " :
" - ");
86 ostr.str(std::string());
96 std::vector<idx> maxlengthcols(A.cols(), 0);
98 for (
idx i = 0; i < static_cast<idx>(A.rows());
101 j < static_cast<idx>(A.cols()); ++j)
102 if (vstr[i * A.cols() + j].size() > maxlengthcols[j])
103 maxlengthcols[j] = vstr[i * A.cols() + j].size();
106 for (
idx i = 0; i < static_cast<idx>(A.rows()); ++i)
108 os << std::setw(static_cast<int>(maxlengthcols[0])) << std::right
109 << vstr[i * A.cols()];
112 j < static_cast<idx>(A.cols()); ++j)
113 os << std::setw(static_cast<int>(maxlengthcols[j] + 2))
114 << std::right << vstr[i * A.cols() + j];
116 if (i < static_cast<idx>(A.rows()) - 1)
128 template<
typename InputIterator>
135 const std::string& separator,
136 const std::string& start =
"[",
137 const std::string& end =
"]") :
140 separator_{separator},
154 std::ostream&
display(std::ostream& os)
const override
159 for (
auto it = first_; it !=
last_; ++it)
172 template<
typename Po
interType>
175 const PointerType*
p_;
180 const std::string& separator,
181 const std::string& start =
"[",
182 const std::string& end =
"]") :
185 separator_{separator},
197 std::ostream&
display(std::ostream& os)
const override
201 for (
idx i = 0; i < N_ - 1; ++i)
202 os << p_[i] << separator_;
218 template<
typename Derived>
221 A_{A.template cast<cplx>()},
228 A_{cmat::Zero(1, 1)}, chop_{
chop}
235 std::ostream&
display(std::ostream& os)
const override
constexpr double chop
Used in qpp::disp() for setting to zero numbers that have their absolute value smaller than qpp::chop...
Definition: constants.h:59
IOManipEigen(const Eigen::MatrixBase< Derived > &A, double chop=qpp::chop)
Definition: iomanip.h:219
const PointerType * p_
Definition: iomanip.h:175
std::ostream & display(std::ostream &os) const override
Must be overridden by all derived classes.
Definition: iomanip.h:154
Definition: iomanip.h:129
IOManipPointer & operator=(const IOManipPointer &)=default
Quantum++ main namespace.
Definition: codes.h:30
std::string end_
Definition: iomanip.h:132
IOManipRange & operator=(const IOManipRange &)=default
std::ostream & display(std::ostream &os) const override
Must be overridden by all derived classes.
Definition: iomanip.h:197
double chop_
Definition: iomanip.h:215
std::string separator_
Definition: iomanip.h:177
Abstract class (interface) that mandates the definition of virtual std::ostream& display(std::ostream...
Definition: idisplay.h:43
Definition: iomanip.h:212
std::complex< double > cplx
Complex number in double precision.
Definition: types.h:46
cmat A_
Definition: iomanip.h:214
IOManipRange(InputIterator first, InputIterator last, const std::string &separator, const std::string &start="[", const std::string &end="]")
Definition: iomanip.h:134
IOManipEigen(const cplx z, double chop=qpp::chop)
Definition: iomanip.h:227
Definition: iomanip.h:173
std::string start_
Definition: iomanip.h:177
std::ostream & display(std::ostream &os) const override
Must be overridden by all derived classes.
Definition: iomanip.h:235
std::string start_
Definition: iomanip.h:132
std::string separator_
Definition: iomanip.h:132
std::ostream & display_impl_(const T &A, std::ostream &os, double chop=qpp::chop) const
Definition: iomanip.h:42
Eigen::MatrixXcd cmat
Complex (double precision) dynamic Eigen matrix.
Definition: types.h:61
InputIterator first_
Definition: iomanip.h:131
idx N_
Definition: iomanip.h:176
std::size_t idx
Non-negative integer index.
Definition: types.h:36
InputIterator last_
Definition: iomanip.h:131
IOManipPointer(const PointerType *p, idx N, const std::string &separator, const std::string &start="[", const std::string &end="]")
Definition: iomanip.h:179
std::string end_
Definition: iomanip.h:177