     package Hyper_Type is
     ----------------------------------------------------------------------
     ----------------------------------------------------------------------
     Vm_Rest   : constant float := 0.0;
     E_Dep     : constant float := 1.0;
     E_Shu     : constant float := Vm_Rest;
     E_Hyp     : constant float := -E_Dep;
     Cm        : constant float := 1.0;
     W_Min_Def : constant float := 1.0E-99;
     ----------------------------------------------------------------------
     Neuron_Max   : constant natural  :=   9;
     Segments_Max : constant positive := 100;
     ----------------------------------------------------------------------
     type Axon_Type is array ( positive range 1..Segments_Max ) of float;
     Axon_Def : constant Axon_Type := ( 1..Segments_Max => 0.0 );
     type Axons_Type is array ( natural range 0..Neuron_Max )
       of Axon_Type;
     ----------------------------------------------------------------------
     type Neuron_Type is
       record
	 Vm     : float := Vm_Rest;
	 Im     : float := 0.0;
	 Nt     : float := 0.0;
	 Error  : float := 1.0;
	 V_Avg  : float := 0.0;
       end record;
     Neuron_Def : constant Neuron_Type :=
       ( Vm => Vm_Rest, Im => 0.0, Nt => 0.0, Error => 1.0, V_Avg => 0.0 );
     type Neurons_Type is array ( natural range 0..Neuron_Max )
       of Neuron_Type;
     ----------------------------------------------------------------------
     type G_Rec_Type is
       record
	 Dep : float := 0.0;
	 Shu : float := 0.0;
	 Hyp : float := 0.0;
       end record;
     type G_Type is array ( natural range <> ) of G_Rec_Type;
     ----------------------------------------------------------------------
     Dep_Init  : constant float := W_Min_Def;
     Shu_Init  : constant float := W_Min_Def;
     Hyp_Init  : constant float := 0.0; --W_Min_Def;
--   Pre_Init  : constant float := W_Min_Def;
--   Pre_Min   : constant float := 1.0e-9;
     Nt_Init   : constant float := 0.0;
     type Weight_Type is
       record
	 Dep     : float := Dep_Init;  -- depolarizing
	 Shu     : float := Shu_Init;  -- shunting
	 Hyp     : float := Hyp_Init;  -- hyperpolarizing
	 Nt      : float := Nt_Init;   -- neurotransmitter
	 G       : float := 0.0;
	 G_dt    : float := 0.0;
	 I_Dep   : float := 0.0;
	 I_Shu   : float := 0.0;
	 I_Hyp   : float := 0.0;
       end record;
     Weight_Def : constant Weight_Type
       := ( Dep => Dep_Init, Shu => Shu_Init, Hyp => Hyp_Init,
       Nt => Nt_Init,
       G => 0.0, G_dt => 0.0,
       I_Dep => 0.0, I_Shu => 0.0, I_Hyp => 0.0 );
     type Weights_Type is array (
       natural range 0..Neuron_Max, natural range 0..Neuron_Max )
       of Weight_Type;
     ----------------------------------------------------------------------
     dt_Def            : constant float    := 1.0e-3;
     ----------------------------------------------------------------------
     Tones_On_Default  : constant boolean  := false;
     Song_Size         : constant positive := 64;
     N_Last_Def        : constant positive := 8; -- neuron count - 1
     Deci_Def          : constant positive := 80 / ( N_Last_Def + 1 ) - 4;
     type Notes_Type is array ( natural range <> ) of character;
     type Music_Type is array ( natural range <> )
       of string ( 1..Song_Size );
     type Recorded_Type is array ( 1..Song_Size ) of natural;
     ----------------------------------------------------------------------
     type Options_Type is
       record
	 Quit          : boolean  := false;
	 dt            : float    := dt_Def;
	 Time_Lag      : float    := dt_Def;
	 N_Last        : natural  := N_Last_Def;
	 Threshold     : float    := E_Dep * 0.1;
	 Spike         : float    := E_Dep * 0.5;
	 Time_Peak     : float    := dt_Def;
	 Learn_Init    : float    := 1.0e4;
	 Learn_Rate    : float    := 1.0e4;
	 Deci          : positive := Deci_Def;
	 Tones_On      : boolean  := Tones_On_Default;
	 Refresh_Rate  : natural  := Song_Size + 1;
	 Screen_Delay  : float    := 0.0;
	 W_Min         : float    := W_Min_Def;
	 W_Max         : float    := 1.0e9;
	 Wgt_Shu       : boolean  := true;
	 Training_On   : boolean  := true;
--       Nt_Max        : float    := 1.0e4;
	 Music         : Music_Type ( 0..Neuron_Max );
	 Auto_Rate     : boolean  := false;
	 G_Leak        : float    := 0.5 / dt_Def;
       end record;
     ----------------------------------------------------------------------
     ----------------------------------------------------------------------
     end Hyper_Type;
