26#if ! defined (octave_ov_base_diag_h)
27#define octave_ov_base_diag_h 1
29#include "octave-config.h"
45template <
typename DMT,
typename MT>
51 OCTINTERP_OVERRIDABLE_FUNC_API
55 OCTINTERP_OVERRIDABLE_FUNC_API
59 OCTINTERP_OVERRIDABLE_FUNC_API
65 OCTINTERP_OVERRIDABLE_FUNC_API std::size_t
byte_size ()
const
66 {
return m_matrix.byte_size (); }
72 {
return to_dense (); }
80 subsref (
const std::string& type,
const std::list<octave_value_list>& idx);
83 subsref (
const std::string& type,
const std::list<octave_value_list>& idx,
91 subsasgn (
const std::string& type,
const std::list<octave_value_list>& idx,
95 {
return m_matrix.dims (); }
101 {
return to_dense ().
reshape (new_dims); }
106 if (vec.
numel () == 2
107 && ((vec.
xelem (0) == 1 && vec.
xelem (1) == 0)
108 || (vec.
xelem (0) == 0 && vec.
xelem (1) == 1)))
109 return DMT (m_matrix);
111 return to_dense ().permute (vec, inv);
118 {
return MT (m_matrix).
all (dim); }
121 {
return MT (m_matrix).
any (dim); }
137 {
return to_dense ().
sort (dim, mode); }
141 {
return to_dense ().
sort (sidx, dim, mode); }
143 OCTINTERP_OVERRIDABLE_FUNC_API
sortmode
145 {
return to_dense ().issorted (mode); }
151 OCTINTERP_OVERRIDABLE_FUNC_API
sortmode
153 {
return to_dense ().is_sorted_rows (mode); }
158 OCTINTERP_OVERRIDABLE_FUNC_API
bool isnumeric ()
const {
return true; }
160 OCTINTERP_OVERRIDABLE_FUNC_API
bool is_defined ()
const {
return true; }
162 OCTINTERP_OVERRIDABLE_FUNC_API
bool is_constant ()
const {
return true; }
164 OCTINTERP_API
bool is_true ()
const;
170 OCTINTERP_API
float float_value (
bool =
false)
const;
172 OCTINTERP_OVERRIDABLE_FUNC_API
double
176 OCTINTERP_API octave::idx_vector
211 {
return to_dense ().int8_array_value (); }
214 {
return to_dense ().int16_array_value (); }
217 {
return to_dense ().int32_array_value (); }
220 {
return to_dense ().int64_array_value (); }
223 {
return to_dense ().uint8_array_value (); }
226 {
return to_dense ().uint16_array_value (); }
229 {
return to_dense ().uint32_array_value (); }
232 {
return to_dense ().uint64_array_value (); }
238 print_raw (std::ostream& os,
bool pr_as_read_syntax =
false)
const;
242 OCTINTERP_API std::string
246 OCTINTERP_API
bool save_ascii (std::ostream& os);
248 OCTINTERP_API
bool load_ascii (std::istream& is);
251 write (octave::stream& os,
int block_size,
253 octave::mach_info::float_format flt_fmt)
const;
259 OCTINTERP_API
void print (std::ostream& os,
bool pr_as_read_syntax =
false);
262 print_info (std::ostream& os,
const std::string& prefix)
const;
264 OCTINTERP_API
void short_disp (std::ostream& os)
const;
275 typename DMT::element_type&)
const = 0;
N Dimensional Array with copy-on-write semantics.
T & xelem(octave_idx_type n)
Size of the specified dimension.
Array< octave_idx_type > sort_rows_idx(sortmode mode=ASCENDING) const
Sort by rows returns only indices.
octave_idx_type numel() const
Number of elements in the array.
Vector representing the dimensions (size) of an Array.
MatrixType matrix_type(const MatrixType &) const
bool is_matrix_type() const
bool is_diag_matrix() const
uint64NDArray uint64_array_value() const
octave_value all(int dim=0) const
sortmode is_sorted_rows(sortmode mode=UNSORTED) const
int16NDArray int16_array_value() const
octave_base_diag(const octave_base_diag &m)
~octave_base_diag()=default
octave_value reshape(const dim_vector &new_dims) const
octave_value squeeze() const
int32NDArray int32_array_value() const
uint8NDArray uint8_array_value() const
uint16NDArray uint16_array_value() const
octave_value sort(Array< octave_idx_type > &sidx, octave_idx_type dim=0, sortmode mode=ASCENDING) const
octave_value any(int dim=0) const
octave_idx_type nnz() const
octave_value_list subsref(const std::string &type, const std::list< octave_value_list > &idx, int)
octave_value permute(const Array< int > &vec, bool inv=false) const
Array< octave_idx_type > sort_rows_idx(sortmode mode=ASCENDING) const
double scalar_value(bool frc_str_conv=false) const
int8NDArray int8_array_value() const
std::size_t byte_size() const
sortmode issorted(sortmode mode=UNSORTED) const
MatrixType matrix_type() const
octave_base_diag(const DMT &m)
uint32NDArray uint32_array_value() const
virtual bool chk_valid_scalar(const octave_value &, typename DMT::element_type &) const =0
octave_value sort(octave_idx_type dim=0, sortmode mode=ASCENDING) const
int64NDArray int64_array_value() const
octave_value full_value() const
virtual SparseMatrix sparse_matrix_value(bool=false) const
virtual octave_value subsref(const std::string &type, const std::list< octave_value_list > &idx)
virtual float float_value(bool=false) const
virtual bool save_ascii(std::ostream &os)
virtual void short_disp(std::ostream &os) const
virtual ComplexNDArray complex_array_value(bool=false) const
virtual octave_value fast_elem_extract(octave_idx_type n) const
virtual boolNDArray bool_array_value(bool=false) const
virtual MatrixType matrix_type() const
virtual FloatComplexNDArray float_complex_array_value(bool=false) const
virtual charNDArray char_array_value(bool=false) const
virtual octave_value diag(octave_idx_type k=0) const
virtual bool is_true() const
virtual octave_value do_index_op(const octave_value_list &idx, bool resize_ok=false)
virtual float_display_format get_edit_display_format() const
virtual FloatComplex float_complex_value(bool=false) const
virtual octave_value convert_to_str_internal(bool pad, bool force, char type) const
virtual FloatComplexMatrix float_complex_matrix_value(bool=false) const
virtual ComplexMatrix complex_matrix_value(bool=false) const
virtual std::string edit_display(const float_display_format &, octave_idx_type, octave_idx_type) const
virtual void print_raw(std::ostream &os, bool pr_as_read_syntax=false) const
virtual octave::idx_vector index_vector(bool require_integers=false) const
virtual mxArray * as_mxArray(bool interleaved) const
virtual bool load_ascii(std::istream &is)
virtual FloatNDArray float_array_value(bool=false) const
virtual FloatMatrix float_matrix_value(bool=false) const
virtual SparseComplexMatrix sparse_complex_matrix_value(bool=false) const
virtual bool print_as_scalar() const
virtual void print_info(std::ostream &os, const std::string &prefix) const
virtual void print(std::ostream &os, bool pr_as_read_syntax=false)
virtual octave_value resize(const dim_vector &, bool fill=false) const
virtual int write(octave::stream &os, int block_size, oct_data_conv::data_type output_type, int skip, octave::mach_info::float_format flt_fmt) const
virtual NDArray array_value(bool=false) const
virtual octave_value subsasgn(const std::string &type, const std::list< octave_value_list > &idx, const octave_value &rhs)
virtual double double_value(bool=false) const
virtual Matrix matrix_value(bool=false) const
virtual Complex complex_value(bool=false) const
octave_value sort(octave_idx_type dim=0, sortmode mode=ASCENDING) const
octave_value any(int dim=0) const
octave_value reshape(const dim_vector &dv) const
octave_idx_type nnz() const
octave_value all(int dim=0) const
std::complex< double > Complex
std::complex< float > FloatComplex