// friend class Faust::HierarchicalFactFGFT<FPP,DEVICE, FPP2>;
public:
/*!
* \brief
* initialize Palm4MSA from Faust::Params (HierarchicalFact parameter)
*\tparam isGlobal_ : if true, the Palm4MSA StoppingCriterion stop_crit attribute is initialize from params_.stop_crit_global <br> and if false, it is initialize from stop_crit_2facts
std::vector<constFaust::ConstraintGeneric*>const_vec;// vector of constraints of size nfact
intm_indFact;//indice de facteur (!= HierarchicalFact::indFact : indice de factorisation)
intm_indIte;
// FPP lipschitz_multiplicator;
constboolverbose;
constboolisUpdateWayR2L;
constboolisConstantStepSize;
constGradientCalcOptModegradCalcOptMode;
boolisCComputed;
boolisGradComputed;
boolisProjectionComputed;
boolisLastFact;
boolisConstraintSet;
constboolisGlobal;
boolisInit;// only used for global factorization (if isGlobal)
Faust::MatDense<FPP,DEVICE>grad_over_c;
FPP2c;
Real<FPP>norm2_threshold;
intnorm2_max_iter;
Faust::MatDense<FPP,DEVICE>error;// error = lambda*L*S*R - data
Faust::BlasHandle<DEVICE>blas_handle;
/** is_complex == true if the algorithm is running on a complex matrix (to approximate) */
boolis_complex;
/** TorH == 'T' if this->is_complex == false otherwise it's 'H'. T designates the transposition and H the hermitian matrix, it intervenes in Palm4MSA algorithms for the computation of the gradient and lambda so that the algo. uses the hermitian when working on complex matrices (i.e. the matrix to approx. is complex) */
constcharTorH;
#ifdef __COMPILE_TIMERS__
public:
Faust::Timert_local_compute_projection;
Faust::Timert_local_compute_grad_over_c;
Faust::Timert_local_compute_c;
Faust::Timert_local_compute_lambda;
Faust::Timert_local_update_R;
Faust::Timert_local_update_L;
Faust::Timert_local_check;
Faust::Timert_local_init_fact;
Faust::Timert_local_next_step;
Faust::Timert_local_init_fact_from_palm;
staticFaust::Timert_global_compute_projection;
staticFaust::Timert_global_compute_grad_over_c;
staticFaust::Timert_global_compute_c;
staticFaust::Timert_global_compute_lambda;
staticFaust::Timert_global_update_R;
staticFaust::Timert_global_update_L;
staticFaust::Timert_global_check;
staticFaust::Timert_global_init_fact;
staticFaust::Timert_global_next_step;
staticFaust::Timert_global_init_fact_from_palm;
staticFaust::Timert_prox_const;
staticFaust::Timert_prox_sp;
staticFaust::Timert_prox_spcol;
staticFaust::Timert_prox_splin;
staticFaust::Timert_prox_normcol;
staticintnb_call_prox_const;
staticintnb_call_prox_sp;
staticintnb_call_prox_spcol;
staticintnb_call_prox_splin;
staticintnb_call_prox_normcol;
voidinit_local_timers();
voidprint_global_timers()const;
voidprint_local_timers()const;
voidprint_prox_timers()const;
#endif
};
{
// friend class Faust::HierarchicalFactFGFT<FPP,DEVICE, FPP2>;
public:
/*!
* \brief
* initialize Palm4MSA from Faust::Params (HierarchicalFact parameter)
*\tparam isGlobal_ : if true, the Palm4MSA StoppingCriterion stop_crit attribute is initialize from params_.stop_crit_global <br> and if false, it is initialize from stop_crit_2facts
std::vector<constFaust::ConstraintGeneric*>const_vec;// vector of constraints of size nfact
intm_indFact;//indice de facteur (!= HierarchicalFact::indFact : indice de factorisation)
intm_indIte;
// FPP lipschitz_multiplicator;
constboolverbose;
constboolisUpdateWayR2L;
constboolisConstantStepSize;
constGradientCalcOptModegradCalcOptMode;
boolisCComputed;
boolisGradComputed;
boolisProjectionComputed;
boolisLastFact;
boolisConstraintSet;
constboolisGlobal;
boolisInit;// only used for global factorization (if isGlobal)
Faust::MatDense<FPP,DEVICE>grad_over_c;
FPP2c;
Real<FPP>norm2_threshold;
intnorm2_max_iter;
Faust::MatDense<FPP,DEVICE>error;// error = lambda*L*S*R - data
Faust::BlasHandle<DEVICE>blas_handle;
/** is_complex == true if the algorithm is running on a complex matrix (to approximate) */
boolis_complex;
/** TorH == 'T' if this->is_complex == false otherwise it's 'H'. T designates the transposition and H the hermitian matrix, it intervenes in Palm4MSA algorithms for the computation of the gradient and lambda so that the algo. uses the hermitian when working on complex matrices (i.e. the matrix to approx. is complex) */
cout<<"t_local_init_fact_from_palm = "<<t_local_init_fact_from_palm.get_time()<<" s for "<<t_local_init_fact_from_palm.get_nb_call()<<" calls"<<endl<<endl;