Ë
    pPêjÏH  ã                  ó¼  — d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
mZ d dlmZmZmZ d dlmZ d dlmZmZ d dlmZ eZd dlZd dlmZ d dlZd dlmZ d d	lmZ d d
lm Z  d dl!m"Z"m#Z# d dl$m%Z%m&Z&m'Z'm(Z(m)Z) ejT                  jV                  Z+dZ,d.d„Z-	 	 	 	 	 	 d/d„Z.dej^                  ddœ	 	 	 	 	 	 	 	 	 	 	 d0d„Z0d1d„Z1d2d„Z2d3d„Z3dddœ	 	 	 	 	 	 	 	 	 	 	 d4d„Z4d5d„Z5d6d„Z6d7d„Z7d8d„Z8ejr                  d9d„«       Z:d:d„Z;d;d„Z<d<d=d „Z=d>d!„Z>d?d@d"„Z?dAd#„Z@dBd$„ZA	 	 	 	 	 	 	 	 dCd%„ZBdDd&„ZCdEd'„ZDdFd(„ZE	 dG	 	 	 	 	 	 	 dHd)„ZFdId*„ZGdJd+„ZHdKdLd,„ZId8d-„ZJy)Mé    )ÚannotationsN)Údefaultdict)ÚCallableÚIterableÚIterator)ÚPattern)ÚIOÚAny)ÚTestCase)Údefaults)Úprocess_options)ÚOptions)Útest_data_prefixÚtest_temp_dir)ÚDataDrivenTestCaseÚ
DeleteFileÚ
UpdateFileÚchoose_file_encodingÚfix_cobertura_filenameé   c                óú   — d}t        j                  | ddgz   «      \  }}}|dk7  rVt        j                  j	                  |«       t        j
                  j	                  |«       t        j                  dd¬«       y y )NTz--show-tracebackz--no-silence-site-packagesr   zSample check failedF)ÚreasonÚpytrace)ÚapiÚrunÚsysÚstdoutÚwriteÚstderrÚpytestÚfail)ÚargsÚ__tracebackhide__ÚoutvalÚerrvalÚstatuss        úV/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/mypy/test/helpers.pyÚrun_mypyr(   -   sj   € ØÐô !ŸW™W TÐ-?ÐA]Ð,^Ñ%^Ó_Ñ€FˆF�FØ�‚{Ü�
‰
×Ñ˜Ô Ü�
‰
×Ñ˜Ô Ü�‰Ð0¸%Ö@ð ó    c                óÂ  — t        j                  d | |«      }|j                  «       }d}d}g }g }|D ]¨  }|j                  ||j                  f«       |j                  ||j
                  f«       |j                  |j                  z   }|j
                  |j                  z   }|j                  |j                  |f«       |j                  |j
                  |f«       Œª ||fS )Nr   )ÚdifflibÚSequenceMatcherÚget_matching_blocksÚappendÚaÚbÚsize)	ÚleftÚrightÚseqÚblocksÚiÚjÚleft_rangesÚright_rangesÚblocks	            r'   Údiff_rangesr;   8   sÔ   € ô ×
!Ñ
! $¨¨eÓ
4€Cà×$Ñ$Ó&€Fà	€AØ	€AØ€KØ€LØò 
*ˆà×Ñ˜A˜uŸw™w˜<Ô(Ø×Ñ˜Q §¡˜LÔ)à�G‰G�e—j‘jÑ ˆØ�G‰G�e—j‘jÑ ˆð 	×Ñ˜EŸG™G Q˜<Ô(Ø×Ñ˜UŸW™W a˜LÕ)ð
*ð ˜Ð$Ð$r)   é   )ÚcolourÚoutputÚindentc               ó¦  — t        | «      D ]Ã  \  }}|dz  dk(  }||d   |d    }t        |«      D ]�  \  }	}
|r3|	dk\  r.|	t        |«      dz
  k  r|	dk(  r|j                  d|z  dz   «       Œ;|s|r|j                  |«       |j                  d|z  |
z   «       |s$|r|j                  d«       |j                  d«       |j                  d	«       ŒŸ ŒÅ y )
Nr<   é   r   é   ú z...
z[0mz (diff)ú
)Ú	enumerateÚlenr   )ÚrangesÚcontentr=   r>   r?   r6   Ú
line_rangeÚis_matchingÚlinesr7   Úlines              r'   Úrender_diff_rangerM   Q   sÞ   € ô # 6Ó*ò ‰ˆˆ:Ø˜!‘e˜q‘jˆØ˜
 1™¨
°1©Ð6ˆÜ  Ó'ò 	‰GˆAˆtáà˜’FØœ˜E›
 Q™Ò&à˜’6Ø—L‘L  v¡°Ñ!7Ô8Øá¡6Ø—‘˜VÔ$à�L‰L˜˜v™¨Ñ,Ô-áÙØ—L‘L Ô+Ø—‘˜YÔ'à�L‰L˜Õñ+	ñr)   c                ó”   — t         j                  j                  d«       | D ]$  }t         j                  j                  |dz   «       Œ& y )NzOriginal errors:
rD   )r   r   r   )ÚerrorsÚerrs     r'   Údump_original_errorsrQ   t   s:   € Ü‡J�J×ÑÐ)Ô*Øò %ˆÜ�
‰
×Ñ˜˜t™Õ$ñ%r)   c                ó°  — g }t        «       }g }| D ]P  }d|vr#t        | «       t        j                  d|› �«       |j	                  dd¬«      \  }}|j                  |«       ŒR t        |«      D ]d  \  }}|dkD  r3|||dz
     k7  r(||v r$t        | «       t        j                  d|› d�«       ||vsŒC|j                  |«       |j                  |«       Œf |S )Nú:z-Only module scoped errors are supported, got rA   ©Úmaxsplitr   z&Each module must form a single block, z appears split)ÚsetrQ   r    r!   Úsplitr.   rE   Úadd)rO   ÚresultÚseenÚmodsÚeÚmodÚ_r6   s           r'   Úmodule_orderr_   z   sà   € Ø€FÜ‹5€DØ€DØò ˆØ�a‰<Ü  Ô(Ü�K‰KÐGÈÀsÐKÔLØ—‘˜ q�Ó)‰ˆˆQØ�‰�CÕðô ˜D“/ò ‰ˆˆ3ØˆqŠ5Ø�d˜1˜q™5‘kÒ! c¨T¡kÜ$ VÔ,Ü—‘ÐDÀSÀEÈÐXÔYØ�dŠ?Ø�M‰M˜#ÔØ�H‰H�S�Mðð €Mr)   c                ó  — t        t        «      }t        | «      }t        |«      t        |«      k7  r| S | D ],  }|j	                  dd¬«      \  }}||   j                  |«       Œ. g }|D ]  }|j                  ||   «       Œ |S )NrS   rA   rT   )r   Úlistr_   rV   rW   r.   Úextend)ÚactualÚexpected_orderÚactual_by_modÚactual_orderr/   r]   r^   rY   s           r'   Úmatch_module_orderrg   �   s‘   € Ü¤Ó%€MÜ Ó'€LÜ
ˆ<ÓœC Ó/Ò/àˆØò %ˆØ—‘˜ q�Ó)‰ˆˆQØ�cÑ×!Ñ! !Õ$ð%ð €FØò *ˆØ�‰�m CÑ(Õ)ð*à€Mr)   F)Ú	tracebackÚignore_modules_orderc          	     ó\  — t        |«      }|rt        | «      }t        ||«      }| |k7  �r‚t        | |«      \  }}t        j
                  j                  d«       t        j                  dk7  rdnd}t        || |¬«       t        j
                  j                  d«       t        j                  dk7  rdnd}	t        |||	¬«       t        j
                  j                  d«       t        d	„ t        t        | |«      «      D «       t        t        | «      t        |«      «      «      }
d
|
cxk  rt        |«      k  r?n n<t        | |
   «      t        k\  st        ||
   «      t        k\  rt        | |
   ||
   «       t        j
                  j                  d«       t!        j"                  ||¬«       yy)zdAssert that two string arrays are equal.

    Display any differences in a human-readable form.
    z
Expected:
Úwin32z[31mN)r=   zActual:
z[32mrD   c              3  ó8   K  — | ]  \  }\  }}||k7  sŒ|–— Œ y ­w©N© )Ú.0r6   r/   r0   s       r'   ú	<genexpr>z-assert_string_arrays_equal.<locals>.<genexpr>¹   s   è ø€ ÒK‘9�1‘f�q˜!ÀAÈÃFŒQÑKùs   ‚“r   z�Update the test output using --update-data (implies -n0; you can additionally use the -k selector to update only specific tests)
)r   )Úclean_upr_   rg   r;   r   r   r   ÚplatformrM   ÚnextrE   ÚzipÚmaxrF   ÚMIN_LINE_LENGTH_FOR_ALIGNMENTÚshow_align_messager    r!   )Úexpectedrc   Úmsgrh   ri   Úexpected_module_orderÚexpected_rangesÚactual_rangesÚredÚgreenÚ
first_diffs              r'   Úassert_string_arrays_equalr€   ž   s`  € ô �fÓ€FÙÜ ,¨XÓ 6ÐÜ# FÐ,AÓBˆØ�6ÓÜ)4°X¸vÓ)FÑ&ˆ˜Ü�
‰
×Ñ˜Ô'ÜŸL™L¨GÒ3‰j¸ˆÜ˜/¨8¸CÕ@Ü�
‰
×Ñ˜Ô%Ü!Ÿl™l¨gÒ5‘
¸4ˆÜ˜-¨¸Õ>ä�
‰
×Ñ˜ÔÜÙK¤	¬#¨h¸Ó*?Ó @ÔKÜ”�H“œs 6›{Ó+ó
ˆ
ð �
Ô(œS ›[Õ(Ü�˜Ñ$Ó%Ô)FÒFÜ�6˜*Ñ%Ó&Ô*GÒGô ˜x¨
Ñ3°V¸JÑ5GÔHä�
‰
×Ñðfô	
ô 	�‰�C Ö+ð5 r)   c           
     óÚ   — t        |«      }t        t        |«      j                  dh«      «      }t        ||dj	                  dj                  |«      dj                  |«      | «      «       y )NÚ__main__zEActual modules ({}) do not match expected modules ({}) for "[{} ...]"ú, )ÚsortedrV   Ú
differencer€   ÚformatÚjoin)Únamerx   rc   Úexpected_normalizedÚactual_normalizeds        r'   Úassert_module_equivalencer‹   Ë   s`   € Ü  Ó*ÐÜœs 6›{×5Ñ5°z°lÓCÓDÐÜØØØ	P×XÑXØ�I‰IÐ'Ó(¨$¯)©)Ð4GÓ*HÈ$ó	
õr)   c           
     ó|   — t        ||dj                  dj                  |«      dj                  |«      | «      «       y)z6Compare actual and expected targets (order sensitive).zEActual targets ({}) do not match expected targets ({}) for "[{} ...]"rƒ   N)r€   r†   r‡   )rˆ   rx   rc   s      r'   Úassert_target_equivalencer�   ×   s7   € äØØØ	P×XÑXØ�I‰I�fÓ˜tŸy™y¨Ó2°Dó	
õr)   c                ó>  — t        | «      dk  ryd}t        j                  j                  d«       d}| dd |dd k(  r| dd } |dd }d}| dd |dd k(  rŒ|r
d	| z   } d	|z   }t	        t        | «      t        |«      «      }d
}||kD  rd	}t        j                  j                  d| d| › |› d�«       t        j                  j                  d|d| › |› d�«       t        j                  j                  d«       t        t        |t	        t        | «      t        |«      «      «      «      D ]S  }| ||dz    |||dz    k7  r!t        j                  j                  d«        n!t        j                  j                  d«       ŒU t        j                  j                  d«       y)aQ  Align s1 and s2 so that the their first difference is highlighted.

    For example, if s1 is 'foobar' and s2 is 'fobar', display the
    following lines:

      E: foobar
      A: fobar
           ^

    If s1 and s2 are long, only display a fragment of the strings around the
    first difference. If s1 is very short, do nothing.
    é   NéH   z$Alignment of first line difference:
Fé   é
   Tz...Ú z  E: rD   z  A: z     rA   ú^rC   )rF   r   r   r   ru   ÚrangeÚmin)Ús1Ús2ÚmaxwÚtruncÚmax_lenÚextrar7   s          r'   rw   rw   â   s�  € ô  ˆ2ƒw�‚{Øà€Dä‡J�J×ÑÐ<Ô=à€EØ
ˆSˆbˆ'�R˜˜�WÒ
Ø��ˆWˆØ��ˆWˆØˆð ˆSˆbˆ'�R˜˜�WÓ
ñ
 Ø�R‰ZˆØ�R‰Zˆä”#�b“'œ3˜r›7Ó#€GØ€EØ�‚~Øˆô ‡J�J×Ñ�u˜R  ˜Y˜K¨ w¨bÐ1Ô2Ü‡J�J×Ñ�u˜R  ˜Y˜K¨ w¨bÐ1Ô2ä‡J�J×Ñ�WÔÜ”3�tœS¤ R£¬#¨b«'Ó2Ó3Ó4ò "ˆØˆa�!�a‘%ˆ=˜B˜q 1 q¡5˜MÒ)Ü�J‰J×Ñ˜SÔ!Ùä�J‰J×Ñ˜SÕ!ð"ô ‡J�J×Ñ�TÕr)   c                óä  — g }t        j                  «       }|dz   }| D ]Ï  }t         j                  }|}||j                  t         j                  d«      fD ],  }|dk7  sŒ	|dk7  sŒ|dk7  sŒ|dk7  sŒ|j                  |d«      }Œ. d|v rt	        j
                  dd	|«      }t	        j
                  d
d|«      }|j                  |d«      }|j                  t	        j
                  dd|«      «       ŒÑ |S )zªRemove common directory prefix from all strings in a.

    This uses a naive string replace; it seems to work well enough. Also
    remove trailing carriage returns.
    z
/driver.pyú/z//ú\z\\r“   zat 0xz(at 0x)\w+>z\g<1>000000000000>z +$z	driver.pyz\r$)ÚosÚgetcwdÚsepÚreplaceÚreÚsubr.   )r/   ÚresÚpwdÚdriverÚsÚprefixÚssÚps           r'   rq   rq     så   € ð €CÜ
�)‰)‹+€CØ�<Ñ€FØò +ˆÜ—‘ˆØˆØ˜Ÿ™¬¯©°Ó4Ð4ò 	'ˆAØ�C‹x˜A ›I¨!¨t«)¸¸V»Ø—Z‘Z  2Ó&‘ð	'ð �b‰=Ü—‘˜Ð(=¸rÓBˆBä�V‰V�E˜2˜rÓ"ˆà�Z‰Z˜ Ó,ˆØ�
‰
”2—6‘6˜& " bÓ)Õ*ð+ð €Jr)   c               #  ó  K  — t         j                  j                  «       } dt         j                  v s2dt         j                  v s t         j                  j                  dd«       	 d–— | t         _        y# | t         _        w xY w­w)z™Temporary insert current directory into sys.path.

    This can be used by test cases that do runtime imports, for example
    by the stubgen tests.
    r“   ú.r   N)r   ÚpathÚcopyÚinsert)Úold_sys_paths    r'   Úlocal_sys_path_setr³   0  sT   è ø€ ô —8‘8—=‘=“?€LØ”#—(‘(‰N˜c¤S§X¡X™oÜ�‰�‰˜˜2Ôð ÛàŒ�ø�<Œ�üs   ‚A#BÁ&A6 Á*BÁ6BÂBc                óº   — t        j                  d| «      x}r4t        dt        |j	                  d«      «      ft
        j                  «      S t
        j                  S )Nzpython3([0-9]+)\.test$rB   rA   )r¤   Úsearchru   ÚintÚgroupr   ÚPYTHON3_VERSION_MIN)r¯   Úms     r'   Útestfile_pyversionrº   @  sK   € Ü�I‰IÐ/°Ó6Ð6€qÐ6ô �A”s˜1Ÿ7™7 1›:“Ð'¬×)EÑ)EÓFÐFä×+Ñ+Ð+r)   c                óv   — g }| D ]1  }|j                  |j                  t        j                  d«      «       Œ3 |S )z@Translate an array of error messages to use / as path separator.rž   )r.   r£   r    r¢   )Úmessagesr/   r¹   s      r'   Únormalize_error_messagesr½   I  s8   € ð 	€AØò )ˆØ	�‰�—‘œ2Ÿ6™6 3Ó'Õ(ð)à€Hr)   c                óæ   — t        j                   «       }d}	 	  | «        y# t        $ rE t        |dz  ||z   t        j                   «       z
  «      }|dk  r‚ t        j                  |«       Y nw xY wŒ[)a   Retry callback with exponential backoff when it raises OSError.

    If the function still generates an error after max_wait seconds, propagate
    the exception.

    This can be effective against random file system operation failures on
    Windows.
    g{®Gáz„?Nr<   )ÚtimeÚOSErrorr–   Úsleep)ÚfuncÚmax_waitÚt0Ú	wait_times       r'   Úretry_on_errorrÆ   R  sn   € ô 
�‰‹€BØ€IØ
ð	"ÙŒFØøÜò 	"Ü˜I¨™M¨2°©=¼4¿9¹9»;Ñ+FÓGˆIØ˜DÒ àÜ�J‰J�yÖ!ð	"úð	 s   ™! ¡AA/Á.A/c                ó  — t        | t        «      rk| j                  d«      dkD  rWdg}| j                  d«      D ]"  }|j	                  t        d|z   «      dd «       Œ$ |dxx   dz  cc<   dj                  |«      S t        | «      S )NrD   rA   z'''\ú"r<   éÿÿÿÿz''')Ú
isinstanceÚstrÚcountrW   r.   Úreprr‡   )ÚobjÚbitsrL   s      r'   Ú	good_reprrÐ   i  s~   € Ü�#”sÔØ�9‰9�T‹?˜QÒØ�9ˆDØŸ	™	 $›ò 4�à—‘œD  t¡Ó,¨Q¨rÐ2Õ3ð4ð �‹H˜Ñ‹HØ—9‘9˜T“?Ð"Ü�‹9Ðr)   c                ól   — d}| |k7  r-t        |j                  t        | «      t        |«      «      «      ‚y )NT)ÚAssertionErrorr†   rÐ   )r/   r0   Úfmtr#   s       r'   Úassert_equalrÔ   u  s2   € ØÐØˆA‚vÜ˜SŸZ™Z¬	°!«´iÀ³lÓCÓDÐDð r)   c                ó�   — dt        | «      v r,t        | «      j                  d«      d   j                  d«      S t        | «      dd S )Nr®   rÉ   z'>é   éþÿÿÿ)rË   rW   Úrstrip)Úts    r'   ÚtypenamerÚ   {  s@   € Ø
Œc�!‹f�}Ü�1‹v�|‰|˜CÓ  Ñ$×+Ñ+¨DÓ1Ð1ä�1‹v�a˜ˆ|Ðr)   c                ó|   — d}t        |«      | k7  r,t        dt        t        |«      «      › dt        | «      › �«      ‚y )NTzInvalid type z, expected )ÚtyperÒ   rÚ   )ÚtypÚvaluer#   s      r'   Úassert_typerß   ‚  s@   € ØÐÜˆEƒ{�cÒÜ˜}¬X´d¸5³kÓ-BÐ,CÀ;ÌxÐX[Ë}ÈoÐ^Ó_Ð_ð r)   c                óú  — t        «       }t        j                  d| t        j                  ¬«      }|dkD  r.t        j                  d|› d�| t        j                  ¬«      }|r|}|rY|j	                  d«      j                  «       }|j                  d«       t        |d¬«      \  }}|rt        d	«      ‚d
|vr"d|_	        ng }t        «       }d|_
        d|_	        t        d„ |D «       «      rt        |j                  «      |_        |j                  j!                  d«      r |j                  j!                  d«      |_        |j                  j!                  d«      r |j                  j!                  d«      |_        |S )z4Parse comments like '# flags: --foo' in a test case.z# flags: (.*)$)ÚflagsrA   z# flagsz: (.*)$z--no-site-packagesF)Úrequire_targetsz9Specifying targets via the flags pragma is not supported.z--show-error-codesTc              3  óJ   K  — | ]  }|j                  d «      d   dk7  –— Œ y­w)ú=r   z--python-versionN)rW   )ro   Úflags     r'   rp   z parse_options.<locals>.<genexpr>£  s#   è ø€ Ò
J¸ˆ4�:‰:�c‹?˜1ÑÐ!3Õ3Ñ
Jùs   ‚!#z--mypy-verbosez--mypy-num-workers)r   r¤   rµ   Ú	MULTILINEr·   rW   r.   r   ÚRuntimeErrorÚhide_error_codesÚerror_summaryÚallrº   ÚfileÚpython_versionÚconfigÚ	getoptionÚ	verbosityÚnum_workers)Úprogram_textÚtestcaseÚincremental_stepÚoptionsrá   Úflags2Ú	flag_listÚtargetss           r'   Úparse_optionsrø   ˆ  sF  € ô ‹i€GÜ�I‰IÐ&¨¼B¿L¹LÔI€EØ˜!ÒÜ—‘˜WÐ%5Ð$6°gÐ>ÀÔTV×T`ÑT`ÔaˆÙØˆEáØ—K‘K “N×(Ñ(Ó*ˆ	Ø×ÑÐ-Ô.Ü*¨9ÀeÔLÑˆ�ÙäÐZÓ[Ð[Ø yÑ0Ø'+ˆGÕ$àˆ	Ü“)ˆØ %ˆÔØ#'ˆÔ ô Ñ
JÀ	Ô
JÔJÜ!3°H·M±MÓ!BˆÔà‡�× Ñ Ð!1Ô2Ø$ŸO™O×5Ñ5Ð6FÓGˆÔØ‡�× Ñ Ð!5Ô6Ø&Ÿo™o×7Ñ7Ð8LÓMˆÔà€Nr)   c                 óz   — | D ��cg c](  }|j                  d«      j                  «       D ]  }|‘Œ Œ* c}}S c c}}w )zDReturns a single list of string lines from the byte streams in args.Úutf8)ÚdecodeÚ
splitlines)ÚstreamsÚstreamr©   s      r'   Úsplit_linesrÿ   ®  s4   € à#×P�&¨V¯]©]¸6Ó-B×-MÑ-MÓ-OÒP¨ŠAÐPˆAÓPÐPùÓPs   †-7c                ó¨  — d }t         j                  j                  |«      r"t        j                  |«      j                  dz   }t         j                  j                  |«      }t        j                  |d¬«       t        |dt        |«      ¬«      5 }|j                  | «       d d d «       |rt        j                  |||f¬«       y y # 1 sw Y   Œ&xY w)NrA   T)Úexist_okÚw©Úencoding)Útimes)r    r¯   ÚisfileÚstatÚst_mtimeÚdirnameÚmakedirsÚopenr   r   Úutime)rH   Útarget_pathÚnew_timeÚdirÚtargets        r'   Úwrite_and_fudge_mtimer  ³  s¤   € ð €HÜ	‡w�w‡~�~�kÔ"Ü—7‘7˜;Ó'×0Ñ0°1Ñ4ˆä
�'‰'�/‰/˜+Ó
&€CÜ‡K�K�˜dÕ#Ü	ˆk˜3Ô)=¸kÓ)JÔ	Kð ÈvØ�‰�WÔ÷ñ Ü
�‰� X¨xÐ$8Ö9ð ÷ð ús   ÂCÃCc                óv  ‡— | D ]³  }t        |t        «      r!t        |j                  |j                  «       Œ4t
        j                  j                  |j                  «      r=|j                  j                  d«      sJ ‚t        j                  |j                  «       Œš|j                  Št        ˆfd„«       Œµ y )NÚtmpc                 ó.   •— t        j                  ‰ «      S rm   )r    Úremove)r¯   s   €r'   ú<lambda>z)perform_file_operations.<locals>.<lambda>Ö  s   ø€ ¤r§y¡y°£€ r)   )rÊ   r   r  rH   r  r    r¯   ÚisdirÚ
startswithÚshutilÚrmtreerÆ   )Ú
operationsÚopr¯   s     @r'   Úperform_file_operationsr  È  s€   ø€ Øò 8ˆÜ�bœ*Ô%ä! "§*¡*¨b¯n©nÕ=ô �w‰w�}‰}˜RŸW™WÔ%à—w‘w×)Ñ)¨%Ô0Ð0Ð0Ü—‘˜bŸg™gÕ&ð —w‘w�ÜÓ6Õ7ñ8r)   c           
     ó  — | j                   D �]Ý  \  }}|j                  |«      }t        j                  j	                  |«      s4t        dj                  || j                  rd|z  «      «      ‚d«      «      ‚t        |d¬«      5 }|j                  «       }d d d «       t        |t        «      r-|j                  «      �Œ³t        dj                  ||«      «      ‚t        j                  «       t        j                  j                  t         «      «      }| j"                  rV| j$                  j&                  r5t        j                  j(                  dk(  r|D �cg c]  }t+        |«      ‘Œ }}t-        |«      }t        j                  j/                  | j0                  «      dk(  rt3        |«      }t5        |j                  «       |d	j                  || j                  rd|z  nd«      «       �Œà y # 1 sw Y   �Œ[xY wc c}w )
Nz0Expected file {} was not produced by test case{}z on step %dr“   rú   r  zCOutput file {} did not match its expected output pattern
---
{}
---rŸ   zreports.testz2Output file {} did not match its expected output{})Úoutput_filesÚremoveprefixr    r¯   ÚexistsrÒ   r†   Úoutput2r  ÚreadrÊ   r   Ú	fullmatchÚnormalize_file_outputrü   Úabspathr   Únormalize_outputÚsuiteÚ
native_sepr¢   r   r½   Úbasenamerë   Únormalize_report_metar€   )	rò   ÚstepÚstrip_prefixr¯   Úexpected_contentÚoutput_fileÚactual_output_contentÚnormalized_outputrL   s	            r'   Úcheck_test_output_filesr2  Ù  sÍ  € ð #+×"7Ñ"7ó %
ÑˆÐØ× Ñ  Ó.ˆÜ�w‰w�~‰~˜dÔ#Ü ØB×IÑIØ°(×2BÒ2B˜-¨$Ñ.óóð àHJóóð ô
 �$ Ô(ð 	7¨KØ$/×$4Ñ$4Ó$6Ð!÷	7ô Ð&¬Ô0Ø×)Ñ)Ð*?Ó@ÐLØÜ ØX×_Ñ_ØÐ/óóð ô 2Ø!×,Ñ,Ó.´·±·±ÄÓ0Nó
Ðð
 ×$Ò$Ø�~‰~×(Ò(¬R¯W©W¯[©[¸DÒ-@ØN_Ö$`ÀdÔ%;¸DÕ%AÐ$`Ð!Ð$`Ü 8Ð9JÓ KÐÜ�7‰7×Ñ˜HŸM™MÓ*¨nÒ<Ü 5Ð6GÓ HÐÜ"Ø×'Ñ'Ó)ØØ@×GÑGØ¨h×.>Ò.>�m dÒ*ÀBóö	
ñ?%
÷	7ñ 	7üò& %as   ÂG/ÅG<Ç/G9	c           	     ó2  — t        j                  d«      }| D �cg c]  }|j                  |d«      ‘Œ }}t        j                  j
                  }|D �cg c]2  }t        j                  dt        j                  |«      z   dz   d|«      ‘Œ4 }}t        t        j                  d|«      }|D �cg c]2  }t        j                  dt        j                  |«      z   dz   d|«      ‘Œ4 }}|D �cg c]  }|j                  d|«      ‘Œ }}|S c c}w c c}w c c}w c c}w )z%Normalize file output for comparison.z\d{10}z$PWDz\bz$VERSIONÚbase_versionz
$TIMESTAMP)	r¤   Úcompiler£   ÚmypyÚversionÚ__version__r¥   ÚescapeÚgetattr)rH   Úcurrent_abs_pathÚtimestamp_regexÚxrY   r7  r4  s          r'   r%  r%    sð   € ä—j‘j Ó+€OØ;BÖC°aˆa�i‰iÐ(¨&Õ1ÐC€FÐCÜ�l‰l×&Ñ&€GØQWÖXÈAŒb�f‰f�UœRŸY™Y wÓ/Ñ/°%Ñ7¸ÀQÕGÐX€FÐXô œ4Ÿ<™<¨¸ÓA€LØV\Ö]ÐQRŒb�f‰f�UœRŸY™Y |Ó4Ñ4°uÑ<¸jÈ!ÕLÐ]€FÐ]Ø<BÖC°qˆo×!Ñ! ,°Õ2ÐC€FÐCØ€Mùò DùâXùò ^ùÚCs   šDÁ7D
Â+7DÃ(Dc                ó>   — d}| D �cg c]  }||k(  rdn|‘Œ c}S c c}w )NzC<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">z<meta charset="UTF-8">rn   )rH   Ú	html_metar=  s      r'   r+  r+    s*   € ð V€IØGNÖOÀ!¨¨YªÑ$¸AÑ=ÒOÐOùÒOs   ‡c                ó°   — t        j                  t        «      j                  | «      D �cg c]   }|j                  |xs g vr|j                  ‘Œ" c}S c c}w rm   )ÚpathlibÚPathr   Úrglobrˆ   )ÚpatternÚexcluder¯   s      r'   Úfind_test_filesrF    sM   € ô —\‘\Ô"2Ó3×9Ñ9¸'ÓBöàØ�9‰9˜Wš]¨Ñ+ð 	�	‹	òð ùò s   «%Ac                óV   — | D �cg c]  }t        j                  dd|«      ‘Œ c}S c c}w )Nz`-?\d+r“   )r¤   r¥   )r/   rL   s     r'   Úremove_typevar_idsrH  !  s#   € Ø45Ö6¨DŒB�F‰F�9˜b $Õ'Ò6Ð6ùÒ6s   …&)r"   ú	list[str]ÚreturnÚNone)r2   rI  r3   rI  rJ  z3tuple[list[tuple[int, int]], list[tuple[int, int]]])rG   zlist[tuple[int, int]]rH   rI  r=   z
str | Noner>   zIO[str]r?   r¶   rJ  rK  )rO   rI  rJ  rK  )rO   rI  rJ  rI  )rc   rI  rd   rI  rJ  rI  )rx   rI  rc   rI  ry   rË   rh   Úboolri   rL  rJ  rK  )rˆ   rË   rx   úIterable[str]rc   rM  rJ  rK  )rˆ   rË   rx   rI  rc   rI  rJ  rK  )r—   rË   r˜   rË   rJ  rK  )r/   rI  rJ  rI  )rJ  zIterator[None])r¯   rË   rJ  ztuple[int, int])r¼   rI  rJ  rI  )g      ð?)rÂ   zCallable[[], Any]rÃ   ÚfloatrJ  rK  )rÎ   ÚobjectrJ  rË   )z{} != {})r/   rO  r0   rO  rÓ   rË   rJ  rK  )rÙ   rÜ   rJ  rË   )rÝ   rÜ   rÞ   rO  rJ  rK  )rñ   rË   rò   r   ró   r¶   rJ  r   )rý   ÚbytesrJ  rI  )rH   rË   r  rË   rJ  rK  )r  zlist[UpdateFile | DeleteFile]rJ  rK  )r“   )rò   r   r,  r¶   r-  rË   rJ  rK  )rH   rI  r;  rË   rJ  rI  )rH   rI  rJ  rI  rm   )rD  rË   rE  zlist[str] | NonerJ  rI  )KÚ
__future__r   Ú
contextlibr+   r    rA  r¤   r  r   r¿   Úcollectionsr   Úcollections.abcr   r   r   r   Útypingr	   r
   Úunittestr   ÚSuiter    Úmypy.apir   Úmypy.versionr6  r   Ú	mypy.mainr   Úmypy.optionsr   Úmypy.test.configr   r   Úmypy.test.datar   r   r   r   r   ÚmarkÚskiprv   r(   r;   r   rM   rQ   r_   rg   r€   r‹   r�   rw   rq   Úcontextmanagerr³   rº   r½   rÆ   rÐ   rÔ   rÚ   rß   rø   rÿ   r  r  r2  r%  r+  rF  rH  rn   r)   r'   ú<module>ra     s  ðÝ "ã Û Û 	Û Û 	Û Û 
Û Ý #ß 8Ñ 8Ý ß õ à€ã å Û Ý Ý %Ý  ß <÷õ ð ‡{�{×Ñ€ð !"Ð óAð%Ø
ð%Ø%ð%à8ó%ð: Ø—j‘jØñ Ø!ð àð ð ð	 ð
 ð ð ð ð 
ó óF%óó*ð( Ø!&ñ*,Øð*,àð*,ð 
ð*,ð
 ð*,ð ð*,ð 
ó*,óZ	óó1óhð4 ×Ñò ó ð ó,óô"ó.	ôEóó`ð#Øð#Ø!3ð#ØGJð#àó#óLQó
:ó*8ð$ BDð(
Ø ð(
Ø(+ð(
Ø;>ð(
à	ó(
óVóPôô7r)   