Sequential Quantum Gate Decomposer  v1.9.6
Powerful decomposition of general unitarias into one- and two-qubit gates gates
matrix_any.h
Go to the documentation of this file.
1 /*
2 Copyright 2026
3 
4 Licensed under the Apache License, Version 2.0 (the "License");
5 you may not use this file except in compliance with the License.
6 You may obtain a copy of the License at
7 
8  http://www.apache.org/licenses/LICENSE-2.0
9 */
10 
11 #ifndef MATRIX_ANY_H
12 #define MATRIX_ANY_H
13 
14 #include "matrix.h"
15 #include "matrix_float.h"
16 #include <string>
17 
18 enum class matrix_precision {
19  float64 = 0,
20  float32 = 1
21 };
22 
30 class Matrix_any {
31 public:
33  : precision_(matrix_precision::float64), m64_(&m), m32_(NULL) {}
34 
36  : precision_(matrix_precision::float32), m64_(NULL), m32_(&m) {}
37 
38  matrix_precision precision() const { return precision_; }
39 
40  bool is_float64() const { return precision_ == matrix_precision::float64; }
41  bool is_float32() const { return precision_ == matrix_precision::float32; }
42 
43  int rows() const { return is_float64() ? m64_->rows : m32_->rows; }
44  int cols() const { return is_float64() ? m64_->cols : m32_->cols; }
45  int stride() const { return is_float64() ? m64_->stride : m32_->stride; }
46  int size() const { return is_float64() ? m64_->size() : m32_->size(); }
47 
49  if (!m64_) {
50  throw std::string("Matrix_any::as_float64 called on float32 matrix");
51  }
52  return *m64_;
53  }
54 
56  if (!m32_) {
57  throw std::string("Matrix_any::as_float32 called on float64 matrix");
58  }
59  return *m32_;
60  }
61 
62 private:
66 };
67 
68 #endif
bool is_float32() const
Definition: matrix_any.h:41
Header file of single-precision complex array storage with automatic and thread safe reference counti...
int rows() const
Definition: matrix_any.h:43
Matrix_any(Matrix_float &m)
Definition: matrix_any.h:35
Matrix_any(Matrix &m)
Definition: matrix_any.h:32
Matrix & as_float64()
Definition: matrix_any.h:48
int cols() const
Definition: matrix_any.h:44
bool is_float64() const
Definition: matrix_any.h:40
Non-owning carrier that references either Matrix (complex128) or Matrix_float (complex64) without dat...
Definition: matrix_any.h:30
Matrix * m64_
Definition: matrix_any.h:64
matrix_precision precision_
Definition: matrix_any.h:63
Matrix_float & as_float32()
Definition: matrix_any.h:55
Header file of complex array storage array with automatic and thread safe reference counting...
int size() const
Definition: matrix_any.h:46
int stride() const
Definition: matrix_any.h:45
Double-precision complex matrix (float64).
Definition: matrix.h:38
matrix_precision
Definition: matrix_any.h:18
Single-precision complex matrix (float32).
Definition: matrix_float.h:41
matrix_precision precision() const
Definition: matrix_any.h:38
Matrix_float * m32_
Definition: matrix_any.h:65