12 #ifndef HELIB_MATMUL_H
13 #define HELIB_MATMUL_H
15 #include <helib/EncryptedArray.h>
32 template <
typename type>
40 virtual
bool get(RX& out,
long i,
long j) const = 0;
58 template <
typename type>
67 virtual
bool get(mat_R& out,
long i,
long j) const = 0;
85 template <
typename type>
94 virtual
void processDiagonal(RX& poly,
100 template <typename type>
108 virtual
bool multipleTransforms() const = 0;
112 virtual
bool get(RX& out,
long i,
long j,
long k) const = 0;
114 void processDiagonal(RX& poly,
123 virtual std::complex<double>
get(
long i,
long j)
const = 0;
125 void processDiagonal(
zzX& poly,
147 template <
typename type>
157 virtual
bool processDiagonal(std::vector<RX>& poly,
163 template <typename type>
171 virtual
bool multipleTransforms() const = 0;
176 virtual
bool get(mat_R& out,
long i,
long j,
long k) const = 0;
178 bool processDiagonal(std::vector<RX>& poly,
197 void upgrade(
const Context& context);
253 void mul(
Ctxt& ctxt)
const override;
296 void mul(
Ctxt& ctxt)
const override;
333 void mul(
Ctxt& ctxt)
const override;
338 for (
auto& t : transforms)
345 long rec_mul(
Ctxt& acc,
const Ctxt& ctxt,
long dim,
long idx)
const;
371 bool minimal =
false);
374 void mul(
Ctxt& ctxt)
const override;
379 for (
auto& t : transforms)
386 long rec_mul(
Ctxt& acc,
const Ctxt& ctxt,
long dim,
long idx)
const;
400 void mul(PlaintextArray& pa,
const MatMul1D& mat);
401 void mul(PlaintextArray& pa,
const BlockMatMul1D& mat);
402 void mul(PlaintextArray& pa,
const MatMulFull& mat);
403 void mul(PlaintextArray& pa,
const BlockMatMulFull& mat);
417 #endif // ifndef HELIB_MATMUL_H
std::vector< long > dims
Definition: matmul.h:357
void mul(const EncryptedArray &ea, PlaintextArray &pa, const PlaintextArray &other)
Definition: EncryptedArray.cpp:1061
ConstMultiplierCache cache1
Definition: matmul.h:281
void upgrade(const Context &context)
Definition: matmul.cpp:400
virtual std::complex< double > get(long i, long j) const =0
virtual ~MatMulExecBase()
Definition: matmul.h:207
NTL::Vec< long > zzX
Definition: zzX.h:24
virtual long getDim() const =0
void upgrade() override
Definition: matmul.h:299
int fhe_test_force_bsgs
Definition: matmul.cpp:23
BlockMatMul1DExec ExecType
Definition: matmul.h:143
long dim
Definition: matmul.h:274
const EncryptedArray & getEA() const override
Definition: matmul.h:383
virtual const EncryptedArray & getEA() const =0
void traceMap(Ctxt &ctxt)
Definition: matmul.cpp:2830
A simple wrapper for a smart pointer to an EncryptedArrayBase. This is the interface that higher-leve...
Definition: EncryptedArray.h:1233
BlockMatMulFullExec ExecType
Definition: matmul.h:54
virtual const EncryptedArray & getEA() const =0
MatMulFullExec ExecType
Definition: matmul.h:28
std::vector< long > dims
Definition: matmul.h:317
virtual ~BlockMatMulFull()
Definition: matmul.h:52
const EncryptedArray & getEA() const override
Definition: matmul.h:305
long strategy
Definition: matmul.h:278
const EncryptedArray & ea
Definition: matmul.h:272
virtual long getDim() const =0
ConstMultiplierCache cache
Definition: matmul.h:280
long D
Definition: matmul.h:275
const EncryptedArray & ea
Definition: matmul.h:229
virtual ~MatMul1D()
Definition: matmul.h:78
ConstMultiplierCache cache1
Definition: matmul.h:238
A different derived class to be used for the approximate-numbers scheme.
Definition: EncryptedArray.h:667
const EncryptedArray & ea
Definition: matmul.h:315
Derived concrete implementation of EncryptedArrayBase.
Definition: EncryptedArray.h:315
virtual const EncryptedArray & getEA() const =0
const EncryptedArray & ea
Definition: matmul.h:355
const Context & getContext() const
Definition: EncryptedArray.h:1301
virtual const EncryptedArray & getEA() const =0
virtual const EncryptedArray & getEA() const =0
bool minimal
Definition: matmul.h:234
void upgrade() override
Definition: matmul.h:336
bool native
Definition: matmul.h:277
std::vector< BlockMatMul1DExec > transforms
Definition: matmul.h:358
long g
Definition: matmul.h:235
bool minimal
Definition: matmul.h:356
virtual void mul(Ctxt &ctxt) const =0
Definition: apiAttributes.h:21
std::vector< std::shared_ptr< ConstMultiplier > > multiplier
Definition: matmul.h:194
bool minimal
Definition: matmul.h:316
const EncryptedArray & getEA() const override
Definition: matmul.h:262
void upgrade() override
Definition: matmul.h:256
MatMul1DExec ExecType
Definition: matmul.h:81
const EncryptedArray & getEA() const override
Definition: matmul.h:342
Maintaining the parameters.
Definition: Context.h:121
void upgrade() override
Definition: matmul.h:377
virtual ~BlockMatMul1D()
Definition: matmul.h:140
bool native
Definition: matmul.h:233
ConstMultiplierCache cache
Definition: matmul.h:237
long d
Definition: matmul.h:276
A Ctxt object holds a single ciphertext.
Definition: Ctxt.h:273
virtual bool get(RX &out, long i, long j) const =0
long D
Definition: matmul.h:232
int fhe_test_force_hoist
Definition: matmul.cpp:24
long dim
Definition: matmul.h:231
virtual ~MatMulFull()
Definition: matmul.h:26
std::vector< MatMul1DExec > transforms
Definition: matmul.h:318
Definition: matmul.cpp:308