12 #ifndef HELIB_MATMUL_H 
   13 #define HELIB_MATMUL_H 
   15 #include <helib/EncryptedArray.h> 
   33 template <
typename type>
 
   41   virtual 
bool get(RX& out, 
long i, 
long j) const = 0;
 
   59 template <
typename type>
 
   68   virtual 
bool get(mat_R& out, 
long i, 
long j) const = 0;
 
   86 template <
typename type>
 
   95   virtual 
void processDiagonal(RX& poly,
 
  101 template <typename type>
 
  109   virtual 
bool multipleTransforms() const = 0;
 
  113   virtual 
bool get(RX& out, 
long i, 
long j, 
long k) const = 0;
 
  115   void processDiagonal(RX& poly,
 
  125   virtual std::complex<double> 
get(
long i, 
long j) 
const = 0;
 
  127   void processDiagonal(std::vector<std::complex<double>>& diag,
 
  132   virtual long getDim() const final { 
return 0; }
 
  154       ea(_ea), get_fun(_get_fun)
 
  158       ea(context.
getEA()), get_fun(_get_fun)
 
  163   virtual std::complex<double> 
get(
long i, 
long j)
 const override 
  165     return get_fun(i, j);
 
  183       ea(_ea), get_fun(_get_fun)
 
  187       ea(context.
getEA()), get_fun(_get_fun)
 
  192   virtual std::complex<double> 
get(
long i, 
long j)
 const override 
  194     return get_fun(i, j);
 
  200 class BlockMatMul1DExec;
 
  213 template <
typename type>
 
  223   virtual 
bool processDiagonal(
std::vector<RX>& poly,
 
  229 template <typename type>
 
  237   virtual 
bool multipleTransforms() const = 0;
 
  242   virtual 
bool get(mat_R& out, 
long i, 
long j, 
long k) const = 0;
 
  244   bool processDiagonal(
std::vector<RX>& poly,
 
  263   void upgrade(
const Context& context);
 
  324   void mul(
Ctxt& ctxt) 
const override;
 
  376   void mul(
Ctxt& ctxt) 
const override;
 
  413   void mul(
Ctxt& ctxt) 
const override;
 
  418     for (
auto& t : transforms)
 
  425   long rec_mul(
Ctxt& acc, 
const Ctxt& ctxt, 
long dim, 
long idx) 
const;
 
  451                                bool minimal = 
false);
 
  454   void mul(
Ctxt& ctxt) 
const override;
 
  459     for (
auto& t : transforms)
 
  466   long rec_mul(
Ctxt& acc, 
const Ctxt& ctxt, 
long dim, 
long idx) 
const;
 
  480 void mul(PlaintextArray& pa, 
const MatMul1D& mat);
 
  481 void mul(PlaintextArray& pa, 
const BlockMatMul1D& mat);
 
  482 void mul(PlaintextArray& pa, 
const MatMulFull& mat);
 
  483 void mul(PlaintextArray& pa, 
const BlockMatMulFull& mat);
 
ConstMultiplierCache cache1
Definition: matmul.h:361
 
long D
Definition: matmul.h:355
 
ConstMultiplierCache cache
Definition: matmul.h:360
 
const EncryptedArray & ea
Definition: matmul.h:352
 
void upgrade() override
Definition: matmul.h:379
 
long dim
Definition: matmul.h:354
 
long strategy
Definition: matmul.h:358
 
long d
Definition: matmul.h:356
 
const EncryptedArray & getEA() const override
Definition: matmul.h:385
 
bool native
Definition: matmul.h:357
 
void mul(Ctxt &ctxt) const override
Definition: matmul.cpp:1697
 
virtual const EncryptedArray & getEA() const =0
 
BlockMatMul1DExec ExecType
Definition: matmul.h:209
 
virtual long getDim() const =0
 
virtual ~BlockMatMul1D()
Definition: matmul.h:206
 
std::vector< BlockMatMul1DExec > transforms
Definition: matmul.h:438
 
std::vector< long > dims
Definition: matmul.h:437
 
void mul(Ctxt &ctxt) const override
Definition: matmul.cpp:2597
 
bool minimal
Definition: matmul.h:436
 
const EncryptedArray & getEA() const override
Definition: matmul.h:463
 
void upgrade() override
Definition: matmul.h:457
 
const EncryptedArray & ea
Definition: matmul.h:435
 
virtual const EncryptedArray & getEA() const =0
 
BlockMatMulFullExec ExecType
Definition: matmul.h:55
 
virtual ~BlockMatMulFull()
Definition: matmul.h:53
 
Maintaining the HE scheme parameters.
Definition: Context.h:100
 
A Ctxt object holds a single ciphertext.
Definition: Ctxt.h:396
 
EncodedMatMul_CKKS(const MatMul1D_CKKS &mat)
Definition: matmul.h:342
 
A different derived class to be used for the approximate-numbers scheme.
Definition: EncryptedArray.h:880
 
Derived concrete implementation of EncryptedArrayBase.
Definition: EncryptedArray.h:403
 
A simple wrapper for a smart pointer to an EncryptedArrayBase. This is the interface that higher-leve...
Definition: EncryptedArray.h:1583
 
const Context & getContext() const
Definition: EncryptedArray.h:1668
 
virtual long getDim() const final
Definition: matmul.h:132
 
virtual std::complex< double > get(long i, long j) const =0
 
bool native
Definition: matmul.h:299
 
const EncryptedArray & ea
Definition: matmul.h:295
 
const EncryptedArray & getEA() const override
Definition: matmul.h:333
 
ConstMultiplierCache cache1
Definition: matmul.h:304
 
void upgrade() override
Definition: matmul.h:327
 
void mul(Ctxt &ctxt) const override
Definition: matmul.cpp:973
 
long g
Definition: matmul.h:301
 
long dim
Definition: matmul.h:297
 
long D
Definition: matmul.h:298
 
ConstMultiplierCache cache
Definition: matmul.h:303
 
bool minimal
Definition: matmul.h:300
 
virtual ~MatMul1D()
Definition: matmul.h:79
 
virtual const EncryptedArray & getEA() const =0
 
MatMul1DExec ExecType
Definition: matmul.h:82
 
virtual long getDim() const =0
 
MatMul_CKKS_Complex(const Context &context, get_fun_type _get_fun)
Definition: matmul.h:186
 
MatMul_CKKS_Complex(const EncryptedArray &_ea, get_fun_type _get_fun)
Definition: matmul.h:182
 
std::function< std::complex< double >long, long)> get_fun_type
Definition: matmul.h:172
 
virtual std::complex< double > get(long i, long j) const override
Definition: matmul.h:192
 
virtual const EncryptedArray & getEA() const override
Definition: matmul.h:190
 
virtual const EncryptedArray & getEA() const override
Definition: matmul.h:161
 
MatMul_CKKS(const EncryptedArray &_ea, get_fun_type _get_fun)
Definition: matmul.h:153
 
virtual std::complex< double > get(long i, long j) const override
Definition: matmul.h:163
 
MatMul_CKKS(const Context &context, get_fun_type _get_fun)
Definition: matmul.h:157
 
std::function< double(long, long)> get_fun_type
Definition: matmul.h:143
 
virtual const EncryptedArray & getEA() const =0
 
virtual void mul(Ctxt &ctxt) const =0
 
virtual ~MatMulExecBase()
Definition: matmul.h:273
 
virtual bool get(RX &out, long i, long j) const =0
 
const EncryptedArray & getEA() const override
Definition: matmul.h:422
 
const EncryptedArray & ea
Definition: matmul.h:395
 
void mul(Ctxt &ctxt) const override
Definition: matmul.cpp:2254
 
void upgrade() override
Definition: matmul.h:416
 
std::vector< MatMul1DExec > transforms
Definition: matmul.h:398
 
bool minimal
Definition: matmul.h:396
 
std::vector< long > dims
Definition: matmul.h:397
 
virtual const EncryptedArray & getEA() const =0
 
MatMulFullExec ExecType
Definition: matmul.h:29
 
virtual ~MatMulFull()
Definition: matmul.h:27
 
Definition: EncryptedArray.h:2167
 
PlaintextArray pa
Definition: EncryptedArray.h:2178
 
const EncryptedArray & ea
Definition: EncryptedArray.h:2177
 
Definition: apiAttributes.h:21
 
void mul(const EncryptedArray &ea, PlaintextArray &pa, const PlaintextArray &other)
Definition: EncryptedArray.cpp:1612
 
MatMul1D_derived< PA_cx > MatMul1D_CKKS
Definition: matmul.h:135
 
int fhe_test_force_hoist
Definition: matmul.cpp:24
 
int fhe_test_force_bsgs
Definition: matmul.cpp:23
 
void assertTrue(const T &value, const std::string &message)
Definition: assertions.h:61
 
PtxtArray & operator*=(PtxtArray &a, const PtxtArray &b)
Definition: EncryptedArray.h:2468
 
void traceMap(Ctxt &ctxt)
Definition: matmul.cpp:2865
 
void upgrade(const Context &context)
Definition: matmul.cpp:410
 
std::vector< std::shared_ptr< ConstMultiplier > > multiplier
Definition: matmul.h:260
 
Definition: matmul.cpp:318