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