void		_adjust(SV* self,NV l,NV sigma,AV* unit,AV* v);
void		_adjustn(SOM_GENERIC* som,NV l,NV sigma,NV* n,AV* v);
void		_array_DESTROY(SV* obj);
SV*		_array_FETCH(SV* self,I32 y);
IV		_array_FETCHSIZE(SV* self);
void		_array_STORE(SV* self,IV y,SV* aref);
IV		_array_refcount(SV* self);
void		_bmu_guts(SOM_GENERIC *generic,AV *sample,IV *bx,IV *by,NV *bd);
SV*		_hexa_FETCH(SV* self,SV* key);
void		_hexa_STORE(SV* self,SV* key,SV* val);
NV		_hexa_distance(NV x1,NV y1,NV x2,NV y2);
AV*		_hexa_neighbors(SV* self,NV sigma,IV X0,IV Y0);
void		_hexa_neiguts(SOM_Hexa* som,NV sigma,IV X0,IV Y0,NV* n);
void		_hexa_new(const char* class);
SOM_Array*	_make_array(SOM_Map* map);
SOM_Map*	_make_map(SOM_GENERIC *generic);
SOM_Vector*	_make_vector(SOM_Array* array);
SOM_Map*	_remake_map(SOM_GENERIC *generic,SV* val);
void		_map_DESTROY(SV* obj);
SV*		_map_FETCH(SV* self,I32 x);
IV		_map_FETCHSIZE(SV* self);
IV		_map_refcount(SV* self);
void		_rect_DESTROY(SV* obj);
SV*		_rect_FETCH(SV* self,SV* key);
SV*		_rect_STORE(SV* self,SV* key,SV* val);
AV*		_rect_neighbors(SV* self,NV sigma,IV X0,IV Y0,...);
void		_rect_neiguts(SOM_Rect* som,NV sigma,IV X0,IV Y0,NV* n);
void		_rect_new(const char* class,...);
SV*		_rect_radius(SV* self);
IV		_rect_refcount(SV* self);
SV*		_rect_FIRSTKEY(SV* self);
SV*		_rect_NEXTKEY(SV* self,SV* prev);
void		_som_as_data(SV* self,...);
void		_som_as_string(SV* self,...);
void		_som_bmu(SV* self,AV* sample);
void		_som_neighbors(SV* self,...);
void		_som_new(const char* self,...);
void		_som_train(SV* self,IV epochs);
void		_som_FREEZE(SV* self,SV* cloning);
void		_som_THAW(SV* self,SV* cloning,SV* serialized);
AV*		_torus_neighbors(SV* self,NV sigma,IV X0,IV Y0);
void		_torus_neiguts(SOM_Torus* som,NV sigma,IV X0,IV Y0,NV* n);
void		_vector_DESTROY(SV* obj);
SV*		_vector_FETCH(SV* self,I32 z);
IV		_vector_FETCHSIZE(SV* self);
void		_vector_STORE(SV* self,I32 z,NV val);
NV		_vector_distance(AV* V1,AV* V2);
IV		_vector_refcount(SV* self);
SV*		map(SV* self);
SV*		output_dim(SV* self);
