
    "f-              	          d Z ddlm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mZmZmZ dd	lmZ dd
lmZmZmZmZ  G d d          Z G d d          Zdede fdZ!de de dee ddf         fdZ"de de de fdZ#dS )z+Transform conformance test case base class.    )wrap)Any	GeneratorListOptionalTupleTypeUnion   )uint8)Buffer)Data)ExcessMemoryErrorInsufficientMemoryError	SizeErrorUnpackError)	Transform)packpack_and_dumpunpackunpack_and_dumpc                   .   e Zd ZU dZeee         ef         ed<   	 e	ed<   	 e
edf         ed<   	 eed<   	 ee         ed<   	 eed<   	 eed	<   	 d
Zee         ed<   	 d
ddeee         ef         de	de
edf         dedee         ded	edee         fdZd
S )CaseDataz0Conformance test case stimulus and expectations.fmtbindata.valuesdumpnbytesexcessshortageNimplementation)r!   c                v    || _         || _        || _        || _        || _        || _        || _        || _        d S )N)r   r   r   r   r   r   r    r!   )	selfr   r   r   r   r   r   r    r!   s	            T/mounts/lovelace/software/anaconda3/lib/python3.11/site-packages/plum/conformance.py__init__zCaseData.__init__9   sC     	 ,    )__name__
__module____qualname____doc__r
   r	   r   r   __annotations__bytesr   r   strr   intr!   r%    r&   r$   r   r      s;        ::	tDz9$	%%%%NNN #s(OP
III5SM)KKKJMMMJ$(NHSM(((1 )-- - - 4:y()- 	-
 c3h- - - - - !- - - - - -r&   r   c                       e Zd ZU dZee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 Zd Zd ZdS )Casez-Test basic API conformance and utility usage.datac                 t    	 | j         j        j        }n# t          $ r d}Y nw xY w|| j         j        k    sJ dS )z!Test transform's nbytes property.N)r2   r   r   r   )r#   r   s     r$   test_transform_nbytes_propertyz#Case.test_transform_nbytes_propertyU   sW    	Y])FF 	 	 	FFF	 )))))))s    ##c                    t          | j        j        t                    set	          | j        j        t
                    rHt          | j        j        | j        j                  j        t          | j        j                  k    sJ dS dS dS )z Test data store nbytes property.N)

isinstancer2   r   r   
issubclassr   r   r   r   lenr#   s    r$   test_data_store_nbytes_propertyz$Case.test_data_store_nbytes_property^   s    $)-33 	
49=RV8W8W 	$)-):;;Bc	!G G    	 	 	 	 r&   c                    t          | j        j        t                    set	          | j        j        t
                    rHt          t          | j        j        | j        j                  j	                  | j        j	        k    sJ dS dS dS )zTest data store dump property.N)
r6   r2   r   r   r7   r   r-   r   r   r   r9   s    r$   test_data_store_dumpzCase.test_data_store_dumpe   s    $)-33 	X
49=RV8W8W 	XvdimTY->??DEEWWWW	X 	X 	X 	XWWr&   c                 x    | j         j        D ],}t          || j         j                  | j         j        k    sJ -dS )zTest utility pack() function.N)r2   r   r   r   r   r#   values     r$   test_utility_packzCase.test_utility_packj   sK    Y% 	C 	CEty}--1BBBBBB	C 	Cr&   c                     | j         j        D ]1}| j         j                            |          | j         j        k    sJ 2dS )zTest transform pack() method.N)r2   r   r   r   r   r>   s     r$   test_transform_packzCase.test_transform_packo   sO    Y% 	B 	BE9=%%e,,	0AAAAAA	B 	Br&   c                    t          | j        j        t                    set	          | j        j        t
                    rHt          | j        j        | j        j                                                  | j        j        k    sJ dS dS dS )zTest data store ipack() method.N)	r6   r2   r   r   r7   r   r   r   ipackr9   s    r$   test_data_store_ipackzCase.test_data_store_ipackt   s    $)-33 	Y
49=RV8W8W 	Y$)-):;;AACCtyGXXXXX	Y 	Y 	Y 	YXXr&   c                     | j         j        D ]P}t          || j         j                  \  }}t	          |          | j         j        k    sJ || j         j        k    sJ QdS )z&Test utility pack_and_dump() function.N)r2   r   r   r   r-   r   r   r#   r?   bufferr   s       r$   test_utility_pack_and_dumpzCase.test_utility_pack_and_dumpy   sk    Y% 	/ 	/E(	>>LFDt99	....TY......	/ 	/r&   c                     | j         j        D ]U}| j         j                            |          \  }}t	          |          | j         j        k    sJ || j         j        k    sJ VdS )z&Test transfrom pack_and_dump() method.N)r2   r   r   r   r-   r   r   rG   s       r$   test_transform_pack_and_dumpz!Case.test_transform_pack_and_dump   so    Y% 	/ 	/E9=66u==LFDt99	....TY......	/ 	/r&   c                 b   t          | j        j        t                    st	          | j        j        t
                    rnt          | j        j        | j        j                  }|                                \  }}t          |          | j        j
        k    sJ || j        j        k    sJ dS dS dS )z(Test data store ipack_and_dump() method.N)r6   r2   r   r   r7   r   r   r   ipack_and_dumpr-   r   )r#   	datastorerH   r   s       r$   test_data_store_ipack_and_dumpz#Case.test_data_store_ipack_and_dump   s    $)-33 	/
49=RV8W8W 	/ty}di.?@@I$3355LFDt99	....TY.....		/ 	/ 	/ 	/ /.r&   c                     | j         j        d         }t          | j         j        | j         j                  }t          |          t          |          u sJ ||k    sJ dS )zTest utility unpack() function.r   N)r2   r   r   r   r   typer#   expected_valueitems      r$   test_utility_unpackzCase.test_utility_unpack   s_    )!,dimTY%677DzzT.111111~%%%%%%r&   c                     | j         j        d         }| j         j                            | j         j                  }t          |          t          |          u sJ ||k    sJ dS )zTest transform unpack() method.r   N)r2   r   r   r   r   rQ   rR   s      r$   test_transform_unpackzCase.test_transform_unpack   sc    )!,y}##DI$566DzzT.111111~%%%%%%r&   c                    	 | j         j        j         t          d| j         j        z   dz             5 }|                    t                    }|                    | j         j                  }|                    t                    }ddd           n# 1 swxY w Y   n# t          $ rr t          d| j         j        z             5 }|                    t                    }|                    | j         j                  }d}ddd           n# 1 swxY w Y   Y nw xY w| j         j        d         }|dk    sJ t          |          t          |          u sJ ||k    sJ |dk    sJ dS )z9Test Buffer.unpack() method (can unpack from the middle).       N   r   )
r2   r   r   r   r   r   r   r   r   rQ   )r#   rH   headrT   tailrS   s         r$   test_buffer_unpackzCase.test_buffer_unpack   s   	,IM   $)"33g=>> ,&}}U++}}TY]33}}U++, , , , , , , , , , , , , , ,  	 	 	$)"3344 }}U++}}TY]33              	 )!,qyyyyDzzT.111111~%%%%t||||||sG   B ABBB&D<D DD	DD	DDc                    | j         j        d         }t          | j         j        | j         j                  \  }}t          |          | j         j        k    sJ t          |          t          |          u sJ ||k    sJ dS )z(Test utility unpack_and_dump() function.r   N)r2   r   r   r   r   r-   r   rQ   r#   rS   rT   r   s       r$   test_utility_unpack_and_dumpz!Case.test_utility_unpack_and_dump   s~    )!,$TY]DI4EFF
d4yyDIN****DzzT.111111~%%%%%%r&   c                    | j         j        d         }| j         j                            | j         j                  \  }}t          |          | j         j        k    sJ t          |          t          |          u sJ ||k    sJ dS )z(Test transform unpack_and_dump() method.r   N)r2   r   r   r   r   r-   r   rQ   r`   s       r$   test_transform_unpack_and_dumpz#Case.test_transform_unpack_and_dump   s    )!,Y]22493DEE
d4yyDIN****DzzT.111111~%%%%%%r&   c                 D   	 | j         j        j         t          d| j         j        z   dz             5 }|                    t                    }|                    | j         j                  \  }}|                    t                    }ddd           n# 1 swxY w Y   n# t          $ ru t          d| j         j        z             5 }|                    t                    }|                    | j         j                  \  }}d}ddd           n# 1 swxY w Y   Y nw xY w| j         j	        d         }|j
        dk    sJ d|_
        t          |          | j         j        k    sJ |dk    sJ t          |          t          |          u sJ ||k    sJ |dk    sJ dS )zBTest Buffer.unpack_and_dump() method (can unpack from the middle).rY   rZ   Nr[   r   r   )r2   r   r   r   r   r   r   r   r   r   offsetr-   r   rQ   )r#   rH   r\   rT   r   r]   rS   s          r$   test_buffer_unpack_and_dumpz Case.test_buffer_unpack_and_dump   s   	,IM   $)"33g=>> ,&}}U++#33DIMBB
d}}U++, , , , , , , , , , , , , , ,  	 	 	$)"3344 }}U++#33DIMBB
d              	 )!, {a4yyDIN****qyyyyDzzT.111111~%%%%t||||||sG   B! ABBB!&D ?DD D	D D	D D c                 
   | j         j        dvrm| j         j        rb	 t          | j         j        | j         j        dd                    t          d          # t          $ rE}t          |          | j         j        k    sJ t          |j	        t                    sJ Y d}~nd}~ww xY wt          | j         j        t                    st          | j         j        t                    r	 | j         j                            | j         j        dd                    t          d          # t          $ rF}t          |          | j         j        k    sJ t          |j	        t                    sJ Y d}~dS d}~ww xY wdS dS dS dS )z,Test unpack() usage with insufficient bytes.   N/AN#unpack() did not raise an exception)r2   r    r   r   r   AssertionErrorr   wrap_messager6   __context__r   r   r7   r   r#   	exceptions     r$   test_unpack_shortagezCase.test_unpack_shortage   s   9W,,1B,Lty}di&7&<===
 %%JKKK	  R R R#I..$)2DDDDD!)"79PQQQQQQQQQQR dimY77 	PJ	t= = 	PPIM(():3B3)?@@@
 ))NOOO	 # V V V'	22di6HHHHH%i&;=TUUUUUUUUUUUV -,,,	P 	P 	P 	Ps/   ,A 
B(#;B##B(*1D* *
E:4;E55E:c                    | j         j        dvrV	 t          | j         j        | j         j        dz              t          d          # t          $ rE}t          |          | j         j        k    sJ t          |j	        t                    sJ Y d}~nd}~ww xY wt          | j         j        t                    st          | j         j        t                    r	 | j         j                            | j         j        dz              t          d          # t          $ rF}t          |          | j         j        k    sJ t          |j	        t                    sJ Y d}~dS d}~ww xY wdS dS dS )z&Test unpack() usage with excess bytes.rh   rZ   rk   N)r2   r   r   r   r   rl   r   rm   r6   rn   r   r   r7   r   ro   s     r$   test_unpack_excesszCase.test_unpack_excess   s   97**Lty}di&7'&ABBB
 %%JKKK	  L L L#I..$)2BBBBB!)"79JKKKKKKKKKKL dimY77 	PJ	t= = 	PPIM(():W)DEEE
 ))NOOO	 # P P P'	22di6FFFFF%i&;=NOOOOOOOOOOOP +*	P 	P 	P 	Ps/   'A 
B;BB,D 
E#;EE#c                 d    | j         j        !| j         j        j        | j         j        k    sJ dS dS )z%Test generated code matches baseline.N)r2   r!   r   r9   s    r$   test_implementationzCase.test_implementation  s8    9#/9=/493KKKKK 0/KKr&   N)r'   r(   r)   r*   r   r+   r4   r:   r<   r@   rB   rE   rI   rK   rO   rU   rW   r^   ra   rc   rf   rq   rs   ru   r/   r&   r$   r1   r1   O   sJ        77
NNN* * *  X X X
C C C
B B B
Y Y Y
/ / // / // / /& & && & &  .& & && & &  8P P P,P P P,L L L L Lr&   r1   excreturnc                 B   g }g }t          |                               d          D ]}|                                }|r
|d         dv rM|                    t	          d                    |                               |                    |           g }o|                    |           |r5|                    t	          d                    |                               |r'|d         s|                    d           |r|d         d                    |          S )zLine wrap exception message.

    Wrap exception message lines that exceed 80 characters.
    Detect and leave undisturbed `dump()` tables.

    
r   z+|)r-   splitstripextendr   joinappendpop)rv   	lines_outqueuelinestripped_lines        r$   rm   rm     s)    IECt$$  

 	q!1T!9!9T$))E"2"233444T"""EELL 1dii..//000
 IaL a  IaL  99Yr&   code
methodnameNc              #      K   |                      d          }d}d| }|D ]>}|                                }|                    |          rd}n
|r||k    rd}|r|V  ?d S )Nry   Fzdef T)rz   lstrip
startswith)r   r   linesactivepatternr   lstripped_lines          r$   _iter_linesr   -  s      JJtEF!Z!!G 	 	$$W-- 	FF 	$ 6 6F 	JJJ	 	r&   c                 H    d                     t          | |                    S )z5Get code for single method from that of many methods.ry   )r}   r   )r   r   s     r$   extract_method_coder   @  s    99[z22333r&   )$r*   textwrapr   typingr   r   r   r   r   r	   r
   	bigendianr   rH   r   r2   r   
exceptionsr   r   r   r   	transformr   	utilitiesr   r   r   r   r   r1   BaseExceptionr-   rm   r   r   r/   r&   r$   <module>r      s   2 1       E E E E E E E E E E E E E E E E E E                              !                     /- /- /- /- /- /- /- /-d@L @L @L @L @L @L @L @LF m          6c s ydD/I    &4c 4s 4s 4 4 4 4 4 4r&   