
    {i                         d Z ddlZddlmZ ed   Zee   ZddddZdd	d
dZdee	   dee   fdZ
dee   dee	   fdZdee   dee   fdZdee   dee   fdZdee   defdZdee   defdZdefdZy)z
Trinary Encoding for EMF Breath
Schema: INHALE=0, EXHALE=1, HOLD=2
Applied across Layer 1 (Schumann) + Layer 2 (Individual) for each breath cycle.
    N)Literal)r         r   r   INHALEEXHALEHOLDr   r   r	   phasesreturnc                 v    g }| D ]1  }|t         vrt        d| d      |j                  t         |          3 |S )z&Convert phase names to trinary digits.zUnknown phase: z". Must be INHALE, EXHALE, or HOLD.)TRINARY_MAP
ValueErrorappend)r
   resultps      0/home/workspace/ghojualamanchu-v3/emf/trinary.pyencode_trinaryr      sJ    F &Kqc1STUUk!n%& M    tritsc                 T    | D cg c]  }t         j                  |d       c}S c c}w )z+Convert trinary digits back to phase names.r	   )REVERSE_MAPget)r   ts     r   decode_trinaryr      s!    0561KOOAv&666s   %c                     g }| D ]G  }|dk(  r|j                  ddg       |dk(  r|j                  ddg       5|j                  ddg       I |S )z
    Convert trits to bits using balanced trinary expansion.
    Each trit encodes 1.585 bits of information.
    Returns a list of 0/1 bits.
    r   r   )extend)r   bitstrits      r   trits_to_bitsr      s]     D  19KKAQYKKAKKA  Kr   r   c                 *   g }t        dt        |       dz
  d      D ]t  }| |   | |dz      }}|dk(  r|dk(  r|j                  d       ,|dk(  r|dk(  r|j                  d       H|dk(  r|dk(  r|j                  d       d|j                  d       v |S )zConvert bits back to trits.r   r   r   )rangelenr   )r   r   iabs        r   bits_to_tritsr&   1   s    E1c$i!mQ' 	AwQU16a1fLLO!VQLLO!VQLLOLLO	 Lr   c                     t        |       }| |t        |       t        |      | rt        |      t        |       z  dS ddS )z
    Encode a message as trinary breath sequence.
    Each breath cycle produces 3 trits (one per beat).
    trits_per_breath_cycle = 3.
    r   )r   r   
trit_count	bit_countbits_per_trit)r   r"   )r   r   s     r   encode_messager+   A   sN     D%jY38TSZ/ 
 ?@ r   c                 L    t        |       }t        |      }||t        |      dS )z.Decode bits back to trits then to phase names.)r   r
   r(   )r&   r   r"   )r   r   r
   s      r   decode_messager-   Q   s-    $EE"F%j r   c                  x    g d} t        |       }t        |      }t        |d         }| ||d   |d   |d   ddS )z)Demonstrate a full breath cycle encoding.r   r   r
   r*   z.3f)input_phasesr   r   decoded_phasesr*   )r   r+   r-   )r
   r   encodeddecodeds       r   example_cycler3   \   sW     *F6"EU#GWV_-G!(+#O4S9 r   )__doc__mathtypingr   TritlistTritsr   r   strr   intr   r   r&   dictr+   r-   r3    r   r   <module>r>      s   
  wT
a3xF349 d 7$s) 7S	 7
d S	 $S	 d4j  $t*   c t t r   