
    "f)$                         d Z ddlmZmZmZmZ ddlmZmZ ddl	m
Z
mZ ddlmZ ddlmZ ddlmZmZ  G d	 d
          Z G d de          ZdS )zData view base class.    )AnyTupleTypeUnion)ceilfloor   )DataDataMeta)	Transform)Dump)ImplementationErrorUnpackErrorc                   >   e Zd ZU dZeZee         ed<   dZ e	            Z
eee
fZeee         ee	f         ed<   deee         ef         fdZd Zd Zd	ee         fd
Zed             ZdefdZdeeef         fdZedefd            ZdefdZeZd ZeZd Z dS )PlumViewzData view base class.

    :param DataMeta fmt: associated plum type
    :param buffer: bytes buffer
    :type buffer: bytes-like (e.g. bytes, bytearray, memoryview)
    :param int offset: byte offset

    __type__r   __fob__fmtc                 B   t          |t          t          f          st          d          t                              | d|           t                              | d|           t                              | d|           t                              | d|||f           d S )Nzinvalid plumtyper   
__buffer__
__offset__r   )
isinstancer   r   	TypeErrorobject__setattr__)selfr   bufferoffsets       M/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/plum/view.py__init__zPlumView.__init__!   s    #)455 	0.///4S1114v6664v6664S&&,ABBBBB    c                     	 |                                  }d| j        dd|d}n# t          $ r d| j        dd}Y nw xY w|S )N<view at 0xx: >)unpackr   	Exceptionr   values     r   __repr__zPlumView.__repr__*   st    	BKKMME B$/AAAuAAAEE  	7 	7 	76$/6666EEE	7 s   & ??c                     	 t          |                                           }n# t          $ r d| j        dd}Y nw xY w|S )Nr#   r$   r&   )strr'   r(   r   r)   s     r   __str__zPlumView.__str__3   sW    	7&&EE 	7 	7 	76$/6666EEE	7s   !$ ==clsc                 B    |                     | j        | j                  S )zCreate a new view of item's buffer bytes.

        :param DataMeta cls: view type
        :returns: new view
        :rtype: cls
        )viewr   r   )r   r/   s     r   castzPlumView.cast:   s     xx999r!   c                 6    |                                  d         S )zwPacked bytes summary.

        :returns: summary table of view detailing bytes and layout
        :rtype: str

        r	   )unpack_and_dumpr   s    r   dumpzPlumView.dumpC   s     ##%%a((r!   returnc                     | j         \  }}}	 |                    ||d          d         S # t          $ r(}|                                  t	                      |d}~ww xY w)zUnpack item from buffer bytes.Nr   )r   
__unpack__r(   r4   r   )r   r   r   r   excs        r   r'   zPlumView.unpackM   so    "lVV	1>>&&$77:: 	1 	1 	1  """%''S0	1s   * 
A#AAc                     | j         \  }}}t          | j                  }	 |                    |||                    |j                            \  }}n## t          $ r}t          ||          |d}~ww xY w||fS )zUnpack item from bytes and produce packed bytes summary.

        :raises: ``UnpackError`` if insufficient bytes, excess bytes, or value error

        r   r   N)r   r   r   r9   
add_recordnamer(   r   )r   r   r   r   r6   item_offsetr:   s           r   r4   zPlumView.unpack_and_dumpX   s     #lVV4?+++	2NNCH = = MD''  	2 	2 	2dC((c1	2 Tzs   3A 
A6 A11A6c                     | j         j        }|a| j        \  }}}	 |                    ||d          \  }}n5# t          $ r(}|                                  t                      |d}~ww xY w||z
  }|S )z Bytes buffer view size in bytes.N)r   
__nbytes__r   r9   r(   r4   r   )r   nbytesr   r   r   _itemendr:   s           r   rD   zPlumView.nbytesk   s     ) >"&,C5 ^^FFDAA
ss 5 5 5$$&&&)++45 6\Fs   6 
A( #A##A(c                    | j         \  }}}|j        }|i	 |                    ||d          \  }}n5# t          $ r(}|                                  t                      |d}~ww xY wt          |||                   }nt          ||||z                      }t          |          |k    r"|                                  t                      |S )zcPack as formatted bytes.

        :raises: ``PackError`` if type error, value error, etc.

        N)	r   rC   r9   r(   r4   r   byteslenpack_and_dump)	r   r   r   r   rD   rE   rF   r:   bindatas	            r   packzPlumView.pack   s     #lVV >5 ^^FFDAA
ss 5 5 5$$&&&)++45 F6#:.//GGF6FVO#;<==Gw<<6!!   %'''s   1 
A##AA#c                    | j         \  }}}t          | j                  }	 |                    |||                    |                    \  }}n## t
          $ r}t          ||          |d}~ww xY wt          |||                   |fS )zPack value as formatted bytes and produce bytes summary.

        :returns: bytes buffer, packed bytes summary
        :rtype: bytearray, Dump

        r<   r=   N)r   r   r   r9   r>   r(   r   rH   )r   r   r   r   r6   rE   rF   r:   s           r   rJ   zPlumView.pack_and_dump   s     #lVV4?+++	2C8P8PQQJE33 	2 	2 	2dC((c1	2 VF3J'(($..s   .A 
A1A,,A1c                 t    | j         \  }}}|                    |          }||||t          |          z   <   dS )zOPack value into bytes buffer.

        :param object value: new value

        N)r   rL   rI   )r   r*   fobr   r   membytess         r   setzPlumView.set   sA     #lVV88E??2:vX..///r!   N)!__name__
__module____qualname____doc__r
   r   r   __annotations__r   	bytearrayr   r   r   intr   r   r    r+   r.   r2   propertyr6   r   r'   r   r4   rD   rH   rL   ipackrJ   ipack_and_dumprQ    r!   r   r   r      s           Hd4jJJ2:J
1SGU4:sI-.SSSCE$t*i"78 C C C C    :T
 : : : : ) ) X)	1 	1 	1 	1 	1tTz!2    &     X&e    < E/ / /$ #N
; 
; 
; 
; 
;r!   r   c                       e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd)dZd Zd Zd Zd Zd Zd Zd Zd Zd)dZd Zd Zd Zd Zd Zd Zd Zd Z d  Z!d! Z"d" Z#d# Z$d$ Z%d% Z&d)d&Z'd' Z(d( Z)dS )*
NumberViewzNumeric view class.c                 D    t          |                                           S N)absr'   r5   s    r   __abs__zNumberView.__abs__       4;;==!!!r!   c                 0    |                                  |z   S r`   r'   r   others     r   __add__zNumberView.__add__       {{}}u$$r!   c                 F    t          |                                 |          S r`   divmodr'   rf   s     r   
__divmod__zNumberView.__divmod__   s    dkkmmU+++r!   c                 D    t          |                                           S r`   )floatr'   r5   s    r   	__float__zNumberView.__float__       T[[]]###r!   c                 2    |                                  |k    S r`   re   rf   s     r   __eq__zNumberView.__eq__       {{}}%%r!   c                 2    |                                  |k    S r`   re   rf   s     r   __ge__zNumberView.__ge__   rt   r!   c                 2    |                                  |k    S r`   re   rf   s     r   __gt__zNumberView.__gt__       {{}}u$$r!   c                 Z    |                      |                                 |z              | S r`   rQ   r'   rf   s     r   __iadd__zNumberView.__iadd__   &    &'''r!   c                 Z    |                      |                                 |z             | S r`   r{   rf   s     r   __imod__zNumberView.__imod__   r}   r!   c                 Z    |                      |                                 |z             | S r`   r{   rf   s     r   __imul__zNumberView.__imul__   r}   r!   c                 D    t          |                                           S r`   )rX   r'   r5   s    r   __int__zNumberView.__int__   rc   r!   Nc                 |    |                      |                                                     ||                     | S r`   )rQ   r'   __pow__)r   rg   moduluss      r   __ipow__zNumberView.__ipow__   s1    &&ug66777r!   c                 Z    |                      |                                 |z
             | S r`   r{   rf   s     r   __isub__zNumberView.__isub__   r}   r!   c                 2    |                                  |k    S r`   re   rf   s     r   __le__zNumberView.__le__   rt   r!   c                 2    |                                  |k     S r`   re   rf   s     r   __lt__zNumberView.__lt__   ry   r!   c                 0    |                                  |z  S r`   re   rf   s     r   __mod__zNumberView.__mod__   ri   r!   c                 0    |                                  |z  S r`   re   rf   s     r   __mul__zNumberView.__mul__   ri   r!   c                 .    |                      |           S r`   )rs   rf   s     r   __ne__zNumberView.__ne__   s    ;;u%%%%r!   c                 ,    |                                   S r`   re   r5   s    r   __neg__zNumberView.__neg__       ~r!   c                 ,    |                                  
 S r`   re   r5   s    r   __pos__zNumberView.__pos__  r   r!   c                 R    |                                                      ||          S r`   )r'   r   )r   exponentr   s      r   r   zNumberView.__pow__  s     {{}}$$Xw777r!   c                 0    ||                                  z   S r`   re   rf   s     r   __radd__zNumberView.__radd__      t{{}}$$r!   c                 F    t          ||                                           S r`   rk   rf   s     r   __rdivmod__zNumberView.__rdivmod__  s    eT[[]]+++r!   c                     	 |                                  }d| j        j         d| j        dd| d}n# t          $ r d| j        dd}Y nw xY w|S )N<z view at 0xr$   r%   r&   r#   )r'   r   r?   r   r(   )r   r*   reps      r   r+   zNumberView.__repr__  s    	SKKMME Sdm(RRT_RRR%RRRCC  	5 	5 	544444CCC	5 
s   3 AAc                 0    ||                                  z  S r`   re   rf   s     r   __rmod__zNumberView.__rmod__  r   r!   c                 0    ||                                  z  S r`   re   rf   s     r   __rmul__zNumberView.__rmul__  r   r!   c                 0    ||                                  z  S r`   re   rf   s     r   __rpow__zNumberView.__rpow__  s    %%r!   c                 0    ||                                  z
  S r`   re   rf   s     r   __rsub__zNumberView.__rsub__   r   r!   c                 0    ||                                  z  S r`   re   rf   s     r   __rtruediv__zNumberView.__rtruediv__#  r   r!   c                 0    |                                  |z
  S r`   re   rf   s     r   __sub__zNumberView.__sub__&  ri   r!   c                 0    |                                  |z  S r`   re   rf   s     r   __truediv__zNumberView.__truediv__)  ri   r!   c                 D    t          |                                           S r`   )r   r'   r5   s    r   __ceil__zNumberView.__ceil__,  s    DKKMM"""r!   c                 D    t          |                                           S r`   )r   r'   r5   s    r   	__floor__zNumberView.__floor__/  rq   r!   c                 P    |                                                      |          S r`   )r'   __floordiv__rf   s     r   r   zNumberView.__floordiv__2  s    {{}}))%000r!   c                 P    |                                                      |          S r`   )r'   __rfloordiv__rf   s     r   r   zNumberView.__rfloordiv__5  s    {{}}**5111r!   c                 P    |                                                      |          S r`   )r'   	__round__)r   ndigitss     r   r   zNumberView.__round__8  s    {{}}&&w///r!   c                 N    |                                                                  S r`   )r'   	__trunc__r5   s    r   r   zNumberView.__trunc__;  s    {{}}&&(((r!   c                 J    t          dt          |           j                   )Nzunhashable type: )r   typerR   r5   s    r   __hash__zNumberView.__hash__>  s"    ADJJ,?AABBBr!   r`   )*rR   rS   rT   rU   rb   rh   rm   rp   rs   rv   rx   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r+   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r\   r!   r   r^   r^      sh       " " "% % %, , ,$ $ $& & && & &% % %      " " "     & & &% % %% % %% % %& & &    8 8 8 8% % %, , ,  % % %% % %& & &% % %% % %% % %% % %# # #$ $ $1 1 12 2 20 0 0 0) ) )C C C C Cr!   r^   N)rU   typingr   r   r   r   mathr   r   datar
   r   	transformr   r6   r   
exceptionsr   r   r   r^   r\   r!   r   <module>r      s     * * * * * * * * * * * *                                           8 8 8 8 8 8 8 8m; m; m; m; m; m; m; m;`C C C C C C C C C Cr!   