TVM  0.9.4
SubstitutionCalculatorImpl.h
Go to the documentation of this file.
1 
3 #pragma once
4 
5 #include <tvm/api.h>
6 #include <tvm/defs.h>
7 
8 #include <tvm/Range.h>
9 #include <tvm/VariableVector.h>
10 
11 #include <vector>
12 
13 namespace tvm
14 {
15 
16 namespace hint
17 {
18 
19 namespace abstract
20 {
33 {
34 public:
35  virtual ~SubstitutionCalculatorImpl() = default;
39  void update();
43  void premultiplyByASharpAndSTranspose(MatrixRef outA, MatrixRef outS, const MatrixConstRef & in, bool minus) const;
47  void postMultiplyByN(MatrixRef out, const MatrixConstRef & in, bool add = false) const;
51  void postMultiplyByN(MatrixRef out, const MatrixConstRef & in, Range r, bool add = false) const;
53  const Eigen::MatrixXd & N() const;
54 
56  Eigen::DenseIndex m() const;
58  Eigen::DenseIndex n() const;
60  Eigen::DenseIndex r() const;
61 
62 protected:
68  SubstitutionCalculatorImpl(const std::vector<LinearConstraintPtr> & cstr,
69  const std::vector<VariablePtr> & x,
70  int rank);
71 
75  void constant(bool c);
77  bool constant() const;
78 
80  MatrixConstRef A() const;
81 
83  bool isSimple() const;
84 
86  virtual void update_() = 0;
89  MatrixRef outS,
90  const MatrixConstRef & in,
91  bool minus) const = 0;
93  virtual void postMultiplyByN_(MatrixRef out, const MatrixConstRef & in, bool add) const;
95  virtual void postMultiplyByN_(MatrixRef out, const MatrixConstRef & in, Range r, bool add) const;
96 
98  void fillA();
99 
101  Eigen::MatrixXd N_;
103  std::vector<LinearConstraintPtr> constraints_;
106 
107 private:
109  struct FillData
110  {
111  VariablePtr x;
112  LinearConstraintPtr cstr;
113  Eigen::Block<Eigen::MatrixXd> block;
114  };
115 
116  Eigen::DenseIndex m_; // row size of A
117  Eigen::DenseIndex n_; // col size of A
118  Eigen::DenseIndex r_; // rank of A
119  bool constant_; // constness of A
120  bool init_; // used to perform update_() only once if A is constant
121  bool simple_; // true if there is only one variable and one constraint
122  Eigen::MatrixXd A_; // aggregated matrix for non-simple case;
126  std::vector<FillData> fillData_;
127 
129 };
130 
131 inline Eigen::DenseIndex SubstitutionCalculatorImpl::m() const { return m_; }
132 
133 inline Eigen::DenseIndex SubstitutionCalculatorImpl::n() const { return n_; }
134 
135 inline Eigen::DenseIndex SubstitutionCalculatorImpl::r() const { return r_; }
136 
137 inline bool SubstitutionCalculatorImpl::isSimple() const { return simple_; }
138 
139 } // namespace abstract
140 
141 } // namespace hint
142 
143 } // namespace tvm
#define TVM_DLLAPI
Definition: api.h:35
Definition: Range.h:19
Definition: VariableVector.h:41
Definition: SubstitutionCalculatorImpl.h:33
void premultiplyByASharpAndSTranspose(MatrixRef outA, MatrixRef outS, const MatrixConstRef &in, bool minus) const
std::vector< LinearConstraintPtr > constraints_
Definition: SubstitutionCalculatorImpl.h:103
void postMultiplyByN(MatrixRef out, const MatrixConstRef &in, Range r, bool add=false) const
bool isSimple() const
Definition: SubstitutionCalculatorImpl.h:137
Eigen::DenseIndex n() const
Definition: SubstitutionCalculatorImpl.h:133
Eigen::DenseIndex m() const
Definition: SubstitutionCalculatorImpl.h:131
Eigen::DenseIndex r() const
Definition: SubstitutionCalculatorImpl.h:135
virtual void premultiplyByASharpAndSTranspose_(MatrixRef outA, MatrixRef outS, const MatrixConstRef &in, bool minus) const =0
Eigen::MatrixXd N_
Definition: SubstitutionCalculatorImpl.h:101
virtual void postMultiplyByN_(MatrixRef out, const MatrixConstRef &in, Range r, bool add) const
SubstitutionCalculatorImpl(const std::vector< LinearConstraintPtr > &cstr, const std::vector< VariablePtr > &x, int rank)
virtual void postMultiplyByN_(MatrixRef out, const MatrixConstRef &in, bool add) const
VariableVector variables_
Definition: SubstitutionCalculatorImpl.h:105
void postMultiplyByN(MatrixRef out, const MatrixConstRef &in, bool add=false) const
Definition: SubstitutionCalculator.h:27
Definition: Clock.h:12
std::shared_ptr< Variable > VariablePtr
Definition: defs.h:65
std::shared_ptr< constraint::abstract::LinearConstraint > LinearConstraintPtr
Definition: defs.h:59
Eigen::Ref< Eigen::MatrixXd > MatrixRef
Definition: defs.h:49
Eigen::Ref< const Eigen::MatrixXd > MatrixConstRef
Definition: defs.h:48