#ifndef _weight_H
#define _weight_H

void weight_hebb        (AREA *A, COMMAND *cmd, int ct_t, int ct_n);
void weight_antihebb    (AREA *A, COMMAND *cmd, int ct_t, int ct_n);
void weight_kohonen     (AREA *A, COMMAND *cmd, int ct_t, int ct_n);
void weight_heuristic   (AREA *A, COMMAND *cmd, int ct_t, int ct_n);
void weight_log         (AREA *A, COMMAND *cmd, int ct_t, int ct_n);
void weight_ica         (AREA *A, COMMAND *cmd, int ct_t, int ct_n);
void weight_rec_mean_01 (AREA *A, COMMAND *cmd, int ct_t, int ct_n);
void weight_copy_topo   (AREA *A, COMMAND *cmd, int ct_t, int ct_n);
void weight_add_diag    (AREA *A, COMMAND *cmd, int ct_t, int ct_n);
void weight_self_zero   (AREA *A, COMMAND *cmd, int ct_t, int ct_n);
void dweight_self_set   (AREA *A, COMMAND *cmd, int ct_t, int ct_n);
void weight_seung       (AREA *A, COMMAND *cmd, int ct_t, int ct_n);
void weight_respcorr    (AREA *A, COMMAND *cmd, int ct_t, int ct_n);
void weight_antirespcorr
                        (AREA *A, COMMAND *cmd, int ct_t, int ct_n);
void weight_decay       (AREA *A, COMMAND *cmd, int ct_t, int ct_n);
void weight_decay_topo  (AREA *A, COMMAND *cmd, int ct_t, int ct_n);

void weight_incr_glob   (AREA *A, COMMAND *cmd, int ct_t, int ct_n);
void weight_incr_pos_glob
                        (AREA *A, COMMAND *cmd, int ct_t, int ct_n);
void weight_act_decay   (AREA *A, COMMAND *cmd, int ct_t, int ct_n);
void weight_norm_glob   (AREA *A, COMMAND *cmd, int ct_t, int ct_n);
void weight_norm_each   (AREA *A, COMMAND *cmd, int ct_t, int ct_n);
void weight_rectify     (AREA *A, COMMAND *cmd, int ct_t, int ct_n);
void weight_rect_eps    (AREA *A, COMMAND *cmd, int ct_t, int ct_n);
void weight_add_rand    (AREA *A, COMMAND *cmd, int ct_t, int ct_n);
void weight_bound       (AREA *A, COMMAND *cmd, int ct_t, int ct_n);
void weight_copy        (AREA *A, COMMAND *cmd, int ct_t, int ct_n);
void weight_hack_init   (AREA *A, COMMAND *cmd, int ct_t, int ct_n);
void weight_hack_slow   (AREA *A, COMMAND *cmd, int ct_t, int ct_n);
void weight_hack_slow_inv
                        (AREA *A, COMMAND *cmd, int ct_t, int ct_n);
void init_theta_const   (AREA *A, COMMAND *cmd, int ct_t, int ct_n);

/**used in sweep named weight**/
void weight_ica2       (AREA *A, COMMAND *cmd, int, int);
void weight_invert     (AREA *A, COMMAND *cmd, int, int);

/**used in iter.c**/
void weight_initdelta (PARAMS *x, AREA *A);
void weight_update    (PARAMS *x, AREA *A);

#endif