
    X-Ph                        d 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
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 ddZd dZd!dZd"dZd#dZdS )$z=Functions to check that serialization round-tripped properly.    )annotations)Iterable)Any)ClassIR)FuncDeclFuncIRFuncSignature)ModuleIRdeserialize_modules)	DeserMaps)RType)is_same_signatureis_same_typexr   returndict[str, Any]c                r     t           d          r fd j        D             S t           j                  S )N__mypyc_attrs__c                R    i | ]#}t          |          |t          |          $S  )hasattrgetattr).0kr   s     ]/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mypyc/test/test_serialization.py
<dictcomp>zget_dict.<locals>.<dictcomp>   s0    MMMQwq!}}M71a==MMM    )r   r   dict__dict__)r   s   `r   get_dictr       sC    q#$$  MMMM!*;MMMMAJr   r   c                |    t          |           }|                    dd           |                    dd           |S )zFGet a dict of function attributes safe to compare across serializationblocksNenv)r    pop)r   ds     r   get_function_dictr&      s:    AEE(DEE%Hr   ytrailtuple[Any, ...]Nonec                   t          |           t          |          u s*J d| t          |           t          |          f            t          | t          t          t          f          r| j        |j        k    sJ d|             dS t          | t                    rt          |                                           t          |                                          k    sJ d|             t          | 
                                |
                                          D ]4\  \  }}\  }}t          |||dz              t          ||||fz              5dS t          | t                    rq|                                 |                                k    sJ d|             |                                 D ]#}t          | |         ||         ||fz              $dS t          | t                    rYt          | t          t          f          s=t          t          | |                    D ]\  }\  }}t          ||||fz              dS t          | t                     rt#          | |          sJ d|             dS t          | t$                    rt'          | |          sJ d|             dS | |k    sJ d|             dS )	a  Compare two blobs of IR as best we can.

    FuncDecls, FuncIRs, and ClassIRs are compared by fullname to avoid
    infinite recursion.
    (More detailed comparisons should be done manually.)

    Types and signatures are compared using mypyc.sametype.

    Containers are compared recursively.

    Anything else is compared with ==.

    The `trail` argument is used in error messages.
    zType mismatch at zName mismatch at zKeys mismatch at )keyszRType mismatch at zSignature mismatch at zValue mismatch at N)type
isinstancer   r   r   fullnamer   lenr,   zipitemsassert_blobs_samer   strset	enumerater   r   r	   r   )	r   r'   r(   xkxvykyvr   is	            r   r3   r3   "   s     77d1gg ;E ; ;T!WWd1ggN!h011 4zQZ''')DU)D)D'''''	At		 416688}}AFFHH---/J5/J/J---"%aggii";"; 	5 	5HRhr2b"ei&7888b"erem4444	5 	5 
At		 4vvxx16688###%@%@%@### 	8 	8AadAaD%1$,7777	8 	8	Ax	 	  4ASz)B)B 4 %SAYY// 	4 	4KAxBb"eqdl3333	4 	4	Au		 4Aq!!??#?#?#??????	A}	%	% 4 A&&HH(H(H(HHHHHHAvvv3E33vvvvvr   ir1r
   ir2c                p   | j         |j         k    sJ | j        |j        k    sJ t          | j        |j                  D ]<\  }}t	          t          |          t          |          | j         |j         f           =t          | j        |j                  D ]}\  }}t	          t          |          t          |          | j         |j         f           t	          t          |j                  t          |j                  | j         |j         f           ~t	          | j	        |j	        | j         df           dS )zAssert that two module IRs are the same (*).

    * Or rather, as much as we care about preserving across
    serialization.  We drop the actual IR bodies of functions but try
    to preserve everything else.
    final_namesN)
r/   importsr1   classesr3   r    	functionsr&   declr?   )r<   r=   cls1cls2fn1fn2s         r   assert_modules_samerH   L   s*    <3<'''';#+%%%%#+s{33 Y Y
d(4..(4..3<:WXXXXs}55 ` `Sc""$5c$:$:S\3<<X	
 	
 	
 	(38,,hsx.@.@3<QTQ]B^____cos}8UVVVVVr   irsdict[str, ModuleIR]c                   d |                                  D             }t          i i           }t          ||          }|                                 |                                k    sJ | D ]}t	          | |         ||                    dS )zOCheck that we can serialize modules out and deserialize them to the same thing.c                >    i | ]\  }}||                                 S r   )	serialize)r   r   irs      r   r   z1check_serialization_roundtrip.<locals>.<dictcomp>e   s&    ===2!R\\^^===r   N)r2   r   r   r,   rH   )rI   
serializedctxirs2r   s        r   check_serialization_roundtriprR   c   s    =====J
B

Cz3//D88::$$$$ - -CFDG,,,,- -r   N)r   r   r   r   )r   r   r   r   )r   r   r'   r   r(   r)   r   r*   )r<   r
   r=   r
   r   r*   )rI   rJ   r   r*   )__doc__
__future__r   collections.abcr   typingr   mypyc.ir.class_irr   mypyc.ir.func_irr   r   r	   mypyc.ir.module_irr
   r   mypyc.ir.opsr   mypyc.ir.rtypesr   mypyc.sametyper   r   r    r&   r3   rH   rR   r   r   r   <module>r]      s:   C C
 # " " " " " $ $ $ $ $ $       % % % % % % < < < < < < < < < < < < < < < < < < " " " " " " ! ! ! ! ! ! : : : : : : : :          '4 '4 '4 '4TW W W W.	- 	- 	- 	- 	- 	-r   