
    "f,              	           U d Z ddlmZmZmZmZmZmZmZ ddl	m
Z
 ddlmZ ddlmZ ddlmZ ddlmZ eee                  Zeed	ef         Zd
Zeed<   dee         dedeeddf         fdZ G d d	e          ZdS ),Array to bytes and bytes to array transform.    )Any	GeneratorListOptionalSequenceTupleUnion   )Format)DataMeta)Record)IntX)	TransformArrayXNGREEDY_DIMSarrayndimsreturnNc              #   `   K   t          |          D ]}t          |           V  | d         } dS )z8Determine dimensions from multi-dimensional array value.r   N)rangelen)r   r   _s      N/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/plum/array.pyiterate_dimsr      sB      5\\  %jja     c                       e Zd ZU dZeed<   eeef         ed<   	 	 ddede	e         de	e
         ddf fd	Zedefd
            Zedefd            Z	 	 ddedede	e         de	e         deee         ef         f
dZ	 ddededede	e         deee         ef         f
dZ	 	 ddee         dee         de	e         de	e         ddf
dZ	 ddee         dee         dede	e         ddf
dZ xZS )r   r   	__ndims____df__Nfmtdimsnamer   c                    t          |t          t          f          sJ d}|t          }nt          |t                    r|}nt          |t
                    rT|}|j        \  }}t          |t                    rt          |          dk    s|d         t          d          |d         }nCt          d |D                       }t          d |D                       sJ t          |          }|j        }|(t          |t                    r|D ]}	|	d } n||	z  }nd }|j        pd}
t          |          D ]}d|
 d}
	||
}t                                          ||
           ||f| _        || _        || _        d S )	Nr   r   zqinvalid 'dims', when providing an array transform for `dims`, it must have a single, fixed (non-greedy) dimensionc              3   <   K   | ]}|d nt          |          V  d S r   )int.0ds     r   	<genexpr>z"ArrayX.__init__.<locals>.<genexpr>E   s0      LL!	s1vvLLLLLLr   c              3   *   K   | ]}|dn|dk    V  d S )NTr    r'   s     r   r*   z"ArrayX.__init__.<locals>.<genexpr>F   s.      IIqytta!eIIIIIIr   r   zList[])
isinstancer   r   r   r   r   r    tupler   	TypeErrorall
__nbytes____hint__r   super__init__r   )selfr!   r"   r#   num_dimslocked_dims	dims_dims_fmtnbytesdimhintr   	__class__s               r   r5   zArrayX.__init__"   s    #)455555 <%KKd## 	!KKf%% 	!K"kOIt y%00y>>Q&&Q<'J  
 !|HH  LLtLLLLLKII[IIIIIIII4yyH #+u-- 	& " "C{!%cMFF |$ux 	# 	#A"4???DD<Dt$$$!3&! r   c                     | j         d         S )zArray element format.r   r    r6   s    r   r!   z
ArrayX.fmte        {1~r   c                     | j         d         S )zArray dimensions.r   r@   rA   s    r   r"   zArrayX.dimsj   rB   r   bufferoffsetdumpc                 <   |t                               | ||||          S | j        \  }}|t          |t                    r|}d |dd          v rt          d          nrt          |t                    r|                    |||          \  }}|f}n?t          |t                     r|                    |||          \  }}nt          d          g }|j	        }	|^}
}|
At          |          }||k     r+|                    |||          \  }} |	|           ||k     +nx|r?t          |
          D ].}t                               | ||||          \  }} |	|           /n7t          |
          D ]'}|                    |||          \  }} |	|           (||fS )Nr   9array unpack does not support greedy secondary dimensionszunexpected implementation error)r   __unpack_and_dump__r    r.   r/   r0   r   
__unpack__RuntimeErrorappendr   r   )r6   rD   rE   rF   r"   x_dimsr!   r<   r   rL   this_dim	item_dimsenditemr   s                  r   rJ   zArrayX.__unpack__o   s    --dFFD$OOOk<&%(( F48###S   $
 FD)) 	F$//EEVvFF++ F%00FFff ##DEEE#9f++C3,,"~~ffdCCft 3,,  	8__  %00vvtYWWft 8__  "~~ffdCCftf}r   c                 &   | j         \  }}|t          |t                    r|}d |dd          v rt          d          nt          |t                    r3|                    |||                    d|                    \  }}|f}nWt          |t                    r0|                    |||                    d|                    \  }}nt          d|          g }|j	        }	|^}
}|
ht          |          }d}|j        }||k     rI|                    |||                    d| d	|                    \  }} |	|           |dz  }||k     In|rWt          |
          D ]F}t                              | |||                    d| d	
          |          \  }} |	|           GnW|j        }t          |
          D ]@}|                    |||                    d| d	|                    \  }} |	|           A|sg |_        ||fS )Nr   rH   len()accessr!   --dims--invalid 'dims' r   [r-   rU   )r    r.   r/   r0   r   rJ   
add_recordr   rK   rL   r   r#   r   rI   value)r6   rD   rE   rF   r"   rM   r!   r<   r   rL   rN   rO   rP   ifmt_namerQ   s                   r   rI   zArrayX.__unpack_and_dump__   s    k<&%(( A48###S   $
 FD)) A$//FDOO7O$O$O V vFF++ A%00FDOO:6O$R$R   ff
 ##?V#?#?@@@#9f++CAxH3,,"~~FDOO8q888O$R$R   f tQ 3,,  	8__  %99&&$//Q/*J*JI   f t	 xH8__  "~~FDOO8q888O$R$R   f t 	DJf}r   r[   piecesc                    | t                               | ||||           d S | j        \  }}|t          |t                    r|^}}nt          |t
                    r)t          |          g }}|                    |||           nit          |t                     r>t	          t          || j	                            }|^}}|                    |||           nt          d|          |^}}	 t          |          }	n# t          $ r t          d          d w xY w||	|k    rt          d          |r%|D ] }
t                               | |
|||           !d S |D ]}
|                    |
||           d S )NrW   z'invalid array value, retrying with dump)r   __pack_and_dump__r    r.   r/   r   r   __pack__r   r   rK   r0   )r6   r[   r^   rF   r"   rM   r!   rN   rO   actual_lengthrQ   s              r   ra   zArrayX.__pack__   s    $$T5&$EEEEE +KFC|fe,, E+1(Hyy-- 
E*-e**biHOOHfd;;;;// E eT^!D!DEED+/(HyOOD&$7777 ''C'C'CDDD (,$9U #E

 U U U IJJPTTU #(A(A IJJJ 5! I IDOOD$iHHHHI I " 5 5DLLvt44445 5s   1D Dc                 N   | j         \  }}|t          |t                    r|^}}nt          |t                    r>t	          |          g }}|                    |||                    d|                     n~t          |t                    rSt          t          || j	                            }|^}}|                    |||                    d|                     nt          d|          |^}}	 t	          |          }	nD# t          $ r7 ||_        t          d|dnd d|dnd	t          |          z    d
          d w xY w|	sg |_        ||	}|rZt          t          |          |          D ];\  }
}t                              | |||                    d|
 d          |           <nZ|j        }t          t          |          |          D ]5\  }
}|                    |||                    d|
 d|                     6|	|k    rt          |	|          D ]}
|                    d|
 dd           t          t          ||	          ||d                    D ]%\  }
}|                    d|
 d||
|k               &t          d| d|	           d S )NrS   rT   rV   rW   z$invalid value, expected iterable of zany  length z, got non-iterablerX   r-   rY   z	<missing>)rU   r[   z	] <extra>)rU   r[   separatez  length, got iterable of length )r    r.   r/   r   r   ra   rZ   r   r   r   rK   r0   r[   strzipr   r`   r#   )r6   r[   r^   rF   r"   rM   r!   rN   rO   rb   r\   rQ   r]   s                r   r`   zArrayX.__pack_and_dump__  s    k<&%(( A'-$99FD)) A&)%jj")fdooW&o&Q&Q    FF++ A\%@@AA'+$9&$///"P"P   
 ##?V#?#?@@@ $( Hy		JJMM 	 	 	DJ&%-662& &'/S3x==5H& & & 
 	  	DJ$H 	uX66  4(($x1xxx(H(H)   
 xHuX66  4&$//Qx/"P"P    H$$=(33 D Dx1xxx{CCCCuX}==uXYY?OPP  4+q+++41=       MM M=JM M   %$s   9D	 	AE
)NNr   )__name__
__module____qualname____doc__r&   __annotations__r	   DimsArgr   r   rh   r5   propertyr!   r"   bytesr   Dimsr   r   rJ   rI   r   ra   r`   __classcell__)r>   s   @r   r   r      s        66NNN'6/""""
 #'"	A! A!A! wA! sm	A!
 
A! A! A! A! A! A!F V    X g    X "&#4 44 4 v	4
 tn4 
tCy#~	4 4 4 4v  $A AA A 	A
 tnA 
tCy#~	A A A AN "&#.5 .5}.5 U.5 v	.5
 tn.5 
.5 .5 .5 .5j  $J J}J UJ 	J
 tnJ 
J J J J J J J Jr   )rm   typingr   r   r   r   r   r	   r
   _typingr   datar   rF   r   r&   r   	transformr   rr   ro   r   rn   r   r   r,   r   r   <module>rx      sE   3 2 2 I I I I I I I I I I I I I I I I I I                                    
h$
%T    c iT46P    G G G G GY G G G G Gr   