Ë
    pPêjÔ^  ã                  óZ  — d Z 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
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	lmZmZmZ dd
lmZmZmZmZ ddl m!Z!m"Z"m#Z# ddl$m%Z%  G d„ dejL                  «      Z' ejP                  ddd¬«      Z)e)jU                  d¬«       e)jW                  ded¬«       e)jW                  dddde%z   d¬«       e)jY                  «       Z-e-j]                  dd¬«      xZ/Z0e0jW                  d d!e1d"¬#«       e0jW                  d$d%e2d&¬#«       e0jW                  d'd(d)e1d*¬+«       e-j]                  d,d-¬«      xZ3Z0e0jW                  d d!e1d"¬#«       e0jW                  d$d%e2d&¬#«       e0jW                  d'd(d)e1d*¬+«       e-j]                  d.d/¬«      xZ4Z0e0jW                  d0d1d2d3¬4«       e0jW                  d5d6¬«       e-j]                  d7d8¬«      xZ5Z0e-j]                  d9d:¬«      xZ6Z0e-j]                  d;e'd<¬=«      xZ7Z0e0jW                  d0d1d2d3¬4«       e0jW                  d>d?d2ejp                  ¬4«       e0jW                  d@dA¬«       e0jW                  dBdC¬«       e0jW                  dDd!dEdF¬G«       e0jW                  dHd2dI¬4«       e-j]                  dJe'dK¬=«      xZ9Z0e0jW                  d0d1d2d3¬4«       e0jW                  d@dA¬«       e0jW                  dBdC¬«       e0jW                  d$d%e2d&¬#«       e0jW                  d d!e1d"¬#«       e0jW                  dHd2dI¬4«       e0jW                  d'dLd)e1dM¬+«       e-j]                  dNe'dO¬=«      xZ:Z0e0jW                  d0d1d2d3¬4«       e0jW                  d>d?d2ejp                  ¬4«       e0jW                  d@dA¬«       e0jW                  dBdC¬«       e0jW                  dHd2dI¬4«       e0jW                  dPd!d)dQ¬G«       e0jW                  dRd!d)dS¬G«       e-j]                  dTdU¬«      xZ;Z0e0jW                  dVdWe1dX¬#«       e0jW                  dYd2dZ¬4«       e0jW                  d[d2d\¬4«       e0jW                  d]d2d^¬4«       e0jW                  d_e<d`¬a«       e0jW                  dbd2dc¬4«       e0jW                  dddee1df¬#«       e0jW                  dge2dh¬a«       e-j]                  didj¬«      xZ=Z0e0jW                  dkdle1dm¬#«       e0jW                  dndoe1dpg dq¢dr¬s«       e0jW                  d1d0dtddu¬v«       e0jW                  dwdxe2ddy¬z«       e0jW                  d{d2d|¬4«       e0jW                  d}d2d~¬4«       e0jW                  dd2d€¬4«       e0jW                  d�d2d‚¬4«       e0jW                  dƒd2d„¬4«       e-j]                  d…d†¬«      xZ>Z0e-j]                  d‡dˆ¬«      xZ?Z0e0jW                  d$d%e2d&¬#«       e0jW                  d d!e1d"¬#«       e0jW                  d'd(d)e1d*¬+«       e0jW                  d‰ejp                  ¬«       e-j]                  dŠ«      xZ@Z0[0d¦d‹„ZAd§dŒ„ZBeej†                  gdf   ZDd¨d�„ZE eEe/«      d©dŽ„«       ZF eEe3«      d©d�„«       ZGdªd«d�„ZHdªd«d‘„ZId¬d­d’„ZJ eEe9«      d©d“„«       ZK eEe4«      d©d”„«       ZL eEe5«      d©d•„«       ZM eEe6«      d©d–„«       ZN eEe7«      d©d—„«       ZO eEe:«      d©d˜„«       ZP eEe;«      d©d™„«       ZQ eEe=«      d©dš„«       ZR	 	 	 	 	 	 	 	 	 	 d®d›„ZSd¯dœ„ZT eEe>«      d©d�„«       ZU eEe?«      d©dž„«       ZV eEe@«      d©dŸ„«       ZWdd œ	 	 	 	 	 	 	 	 	 d°d¡„ZXd±d¢„ZYd²d£„ZZd³d¤„Z[d´d¥„Z\y)µz™Client for mypy daemon mode.

This manages a daemon process which keeps useful state in memory
rather than having to read it back from disk on each run.
é    )ÚannotationsN)ÚCallableÚMapping)ÚAnyÚNoReturn)Ú	b64decode)ÚRECURSION_LIMIT)ÚaliveÚkill)ÚDEFAULT_STATUS_FILEÚreceiveÚsend)Ú	BadStatusÚ	IPCClientÚIPCExceptionÚread_status)Úcheck_python_versionÚget_terminal_widthÚshould_force_color)Ú__version__c                  ó    ‡ — e Zd Zdˆ fd„Zˆ xZS )ÚAugmentedHelpFormatterc                ó*   •— t        ‰| �  d|ddœ|¤Ž y )Né   )ÚprogÚmax_help_position© )ÚsuperÚ__init__)Úselfr   ÚkwargsÚ	__class__s      €úV/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/mypy/dmypy/client.pyr   zAugmentedHelpFormatter.__init__!   s   ø€ Ü‰ÑÐC˜d°bÑC¸FÓCó    )r   Ústrr!   r   ÚreturnÚNone)Ú__name__Ú
__module__Ú__qualname__r   Ú__classcell__)r"   s   @r#   r   r       s   ø„ ÷Dñ Dr$   r   ÚdmypyzClient for mypy daemon modeú@)r   ÚdescriptionÚfromfile_prefix_chars©Úactionz--status-filez&status file to retrieve daemon details)ÚdefaultÚhelpz-Vz	--versionÚversionz	%(prog)s z&Show program's version number and exit)r1   r4   r3   ÚstartzStart daemon)r3   z
--log-fileÚFILEz#Direct daemon stdout/stderr to FILE)ÚmetavarÚtyper3   z	--timeoutÚTIMEOUTz$Server shutdown timeout (in seconds)ÚflagsÚFLAGÚ*z$Regular mypy flags (precede with --))r7   Únargsr8   r3   Úrestartz/Restart daemon (stop or kill followed by start)ÚstatuszShow daemon statusz-vz	--verboseÚ
store_truezPrint detailed status)r1   r3   z--fswatcher-dump-filez0Collect information about the current file stateÚstopz)Stop daemon (asks it politely to go away)r   zKill daemon (kills the process)Úcheckz"Check some files (requires daemon))Úformatter_classr3   z-qz--quietz--junit-xmlz!Write junit.xml to the given filez--perf-stats-filez/write performance information to the given fileÚfilesú+zFile (or directory) to check)r7   r=   r3   z--export-typeszLStore types of all expressions in a shared location (useful for inspections)Úrunz2Check some files, [re]starting daemon if necessaryÚARGz.Regular mypy flags and files (precede with --)ÚrecheckzRRe-check the previous list of files, with optional modifications (requires daemon)z--updatezGFiles in the run to add or check again (default: all from previous run)z--removezFiles to remove from the runÚsuggestz>Suggest a signature or show call sites for a specific functionÚfunctionÚFUNCTIONz9Function specified as '[package.]module.[class.]function'z--jsonz:Produce json that pyannotate can use to apply a suggestionz--no-errorsz-Only produce suggestions that cause no errorsz--no-anyz/Only produce suggestions that don't contain Anyz
--flex-anyzJAllow anys in types if they go above a certain score (scores are from 0-1))r8   r3   z--callsitesz+Find callsites instead of suggesting a typez--use-fixmeÚNAMEzCA dummy name to use instead of Any for types that can't be inferredz--max-guesseszBSet the maximum number of types to try for a function (default 64)Úinspectz+Locate and statically inspect expression(s)ÚlocationÚLOCATIONz¥Location specified as path/to/file.py:line:column[:end_line:end_column]. If position is given (i.e. only line and column), this will return all enclosing expressionsz--showÚ
INSPECTIONr8   )r8   ÚattrsÚ
definitionzWhat kind of inspection to run)r7   r8   r2   Úchoicesr3   ÚcountzFIncrease verbosity of the type string representation (can be repeated))r1   r2   r3   z--limitÚNUMzQReturn at most NUM innermost expressions (if position is given); 0 means no limit)r7   r8   r2   r3   z--include-spanz]Prepend each inspection result with the span of corresponding expression (e.g. 1:2:3:4:"int")z--include-kindz^Prepend each inspection result with the kind of corresponding expression (e.g. NameExpr:"int")z--include-object-attrsz4Include attributes of "object" in "attrs" inspectionz--union-attrszgInclude attributes valid for some of possible expression types (by default an intersection is returned)z--force-reloadz?Re-parse and re-type-check file before inspection (may be slow)ÚhangzHang for 100 secondsÚdaemonzRun daemon in foregroundz--options-datar3   c                óž  — t        d«       t        j                  t        «       t        j                  | «      }|j                  st        j                  «        y	 |j                  |«       y# t        $ r"}t        |j                  d   «       Y d}~yd}~wt        $ r, t        j                  «        t        j                  d«       Y yw xY w)zThe code is top-down.r,   r   Né   )r   ÚsysÚsetrecursionlimitr	   ÚparserÚ
parse_argsr1   Úprint_usager   ÚfailÚargsÚ	ExceptionÚ	tracebackÚ	print_excÚexit)Úargvr`   Úerrs      r#   Úmainrg     s’   € ä˜Ô!ô ×Ñœ/Ô*ä×Ñ˜TÓ"€DØ�;Š;Ü×ÑÕð	Ø�K‰K˜ÕøÜò 	Ü�—‘˜!‘×ÑûÜò 	ô ×ÑÔ!Ü�H‰H�QŽKð		ús   ÁA. Á.	CÁ7BÂ5CÃCc                ód   — t        | t        j                  ¬«       t        j                  d«       y )N)ÚfilerY   )ÚprintrZ   Ústderrrd   )Úmsgs    r#   r_   r_     s   € Ü	ˆ#”C—J‘JÕÜ‡H�HˆQ…Kr$   c                ó   ‡ — dˆ fd„}|S )z3Decorator to tie an action function to a subparser.c                ó,   •— ‰j                  | ¬«       | S )Nr0   )Úset_defaults)ÚfuncÚ	subparsers    €r#   Úregisterzaction.<locals>.register%  s   ø€ Ø×Ñ dÐÔ+Øˆr$   )rp   ÚActionFunctionr&   rs   r   )rq   rr   s   ` r#   r1   r1   "  s   ø€ õð €Or$   c                óz   — 	 t        | j                  «       t        d«       t	        | «       y# t        $ r Y Œw xY w)a  Start daemon (it must not already be running).

    This is where mypy flags are set from the command line.

    Setting flags is a bit awkward; you have to use e.g.:

      dmypy start -- --strict

    since we don't want to duplicate mypy's huge list of flags.
    zDaemon is still aliveN)Ú
get_statusÚstatus_filer_   r   Ústart_server©r`   s    r#   Údo_startry   /  s<   € ð&Ü�4×#Ñ#Ô$ô
 	Ð$Ô%Ü�Õøô ò áðús   ‚. ®	:¹:c                ó   — t        | «       y)zÂRestart daemon (it may or may not be running; but not hanging).

    We first try to stop it politely if it's running.  This also sets
    mypy flags from the command line (see do_start()).
    N)Úrestart_serverrx   s    r#   Ú
do_restartr|   E  s   € ô �4Õr$   c                óR   — 	 t        | «       t        | |«       y# t        $ r Y Œw xY w)z?Restart daemon (it may or may not be running; but not hanging).N)Údo_stopr   rw   )r`   Úallow_sourcess     r#   r{   r{   O  s.   € ðÜ�Œô ��}Õ%øô ò áðús   ‚ š	&¥&c                óâ   — ddl m}m}  || j                  |«      } ||| j                  | j
                  | j                  ¬«      rt        j                  d«       t        | j                  «       y)z8Start the server from command arguments and wait for it.r   )Ú	daemonizeÚprocess_start_options)ÚtimeoutÚlog_filerY   N)
Úmypy.dmypy_serverr�   r‚   r:   rv   rƒ   r„   rZ   rd   Úwait_for_server)r`   r   r�   r‚   Ústart_optionss        r#   rw   rw   Y  sP   € ÷ Cá)¨$¯*©*°mÓD€MÙ� × 0Ñ 0¸$¿,¹,ÐQU×Q^ÑQ^Õ_Ü�‰�ŒÜ�D×$Ñ$Õ%r$   c                ó  — t        j                   «       |z   }t        j                   «       |k  r#	 t        | «      }t	        |«       t        d«       yt        d«       y# t        $ r t        j                  d«       Y Œfw xY w)zTWait until the server is up.

    Exit if it doesn't happen within the timeout.
    gš™™™™™¹?zDaemon startedNz%Timed out waiting for daemon to start)Útimer   r   ÚsleepÚcheck_statusrj   r_   )rv   rƒ   ÚendtimeÚdatas       r#   r†   r†   d  so   € ô
 �i‰i‹k˜GÑ#€GÜ
�)‰)‹+˜Ò
ð	Ü˜{Ó+ˆDô 	�TÔÜÐÔØÜÐ	0Õ1øô ò 	ä�J‰J�sŒOÙð	ús   °A ÁA?Á>A?c                ó  — t        | j                  «      st        | d¬«       t        j                  «       }t	        | j                  dt
        | j                  | j                  ¬«      }d|v rPt        d|d   › �«       t        | d¬«       t	        | j                  dt
        | j                  | j                  ¬«      }t        j                  «       }||z
  |d<   t        || j                  | j                  | j                  «       y)	aœ  Do a check, starting (or restarting) the daemon as necessary

    Restarts the daemon if the running daemon reports that it is
    required (due to a configuration change, for example).

    Setting flags is a bit awkward; you have to use e.g.:

      dmypy run -- --strict a.py b.py ...

    since we don't want to duplicate mypy's huge list of flags.
    (The -- is only necessary if flags are specified.)
    T©r   rF   )r4   r`   Úexport_typesr>   zRestarting: Úroundtrip_timeN)Ú
is_runningrv   rw   r‰   Úrequestr   r:   r�   rj   r{   Úcheck_outputÚverboseÚ	junit_xmlÚperf_stats_file©r`   Út0ÚresponseÚt1s       r#   Údo_runrœ   x  sÚ   € ô �d×&Ñ&Ô'ä�T¨Õ.Ü	�‰‹€BÜØ×ÑØÜØ�Z‰ZØ×&Ñ&ô€Hð �HÑÜ�˜X iÑ0Ð1Ð2Ô3Ü�t¨4Õ0ÜØ×ÑØÜØ—‘Ø×*Ñ*ô
ˆô 
�‰‹€BØ!# b¡€HÐÑÜ�˜4Ÿ<™<¨¯©¸×9MÑ9MÕNr$   c                óL  — t        | j                  «      }| j                  rt        |«       t	        |«       t        | j                  d| j                  d¬«      }| j                  sd|v rt        |«       d|v r t        dt        j                  d   › d�«       t        d«       y	)
zOPrint daemon status.

    This verifies that it is responsive to requests.
    r?   é   )Úfswatcher_dump_filerƒ   Úerrorú:Daemon may be busy processing; if this persists, consider r   ú killzDaemon is up and runningN)r   rv   r•   Ú
show_statsr‹   r“   rŸ   r_   rZ   re   rj   )r`   r?   rš   s      r#   Ú	do_statusr¤   ¢  s’   € ô ˜×)Ñ)Ó*€FØ‡|‚|Ü�6Ôô �ÔÜØ×Ñ˜(¸×8PÑ8PÐZ[ô€Hð ‡|‚|�w (Ñ*Ü�8ÔØ�(ÑÜÐIÌ#Ï(É(ÐSTÉ+ÈÐV[Ð\Ô]Ü	Ð
$Õ%r$   c                óª   — t        | j                  dd¬«      }d|v r,t        |«       t        dt        j
                  d   › d�«       y	t        d«       y	)
z!Stop daemon via a 'stop' request.rA   rž   ©rƒ   r    r¡   r   r¢   zDaemon stoppedN)r“   rv   r£   r_   rZ   re   rj   ©r`   rš   s     r#   r~   r~   ¸  sM   € ô �t×'Ñ'¨¸Ô;€HØ�(ÑÜ�8ÔÜÐIÌ#Ï(É(ÐSTÉ+ÈÐV[Ð\Õ]äÐÕr$   c                ó¶   — t        | j                  «      \  }}	 t        |«       t        d«       y# t        $ r}t        t        |«      «       Y d}~yd}~ww xY w)z!Kill daemon process with SIGKILL.zDaemon killedN)ru   rv   r   rj   ÚOSErrorr_   r%   )r`   ÚpidÚ_rf   s       r#   Údo_killr¬   Ä  sM   € ô ˜×(Ñ(Ó)�F€CˆðÜˆSŒ	ô 	ˆoÕøô ò ÜŒS�‹X�‰ûðús   š1 ±	AºAÁAc                ó  — t        j                   «       }t        | j                  d| j                  | j                  ¬«      }t        j                   «       }||z
  |d<   t        || j                  | j                  | j                  «       y)z(Ask the daemon to check a list of files.rB   )rD   r�   r‘   N)	r‰   r“   rv   rD   r�   r”   r•   r–   r—   r˜   s       r#   Údo_checkr®   Ð  sf   € ô 
�‰‹€BÜ�t×'Ñ'¨¸¿
¹
ÐQU×QbÑQbÔc€HÜ	�‰‹€BØ!# b¡€HÐÑÜ�˜4Ÿ<™<¨¯©¸×9MÑ9MÕNr$   c                ó¢  — t        j                   «       }| j                  €| j                  �9t        | j                  d| j
                  | j                  | j                  ¬«      }n"t        | j                  d| j
                  ¬«      }t        j                   «       }||z
  |d<   t        || j                  | j                  | j                  «       y)a�  Ask the daemon to recheck the previous list of files, with optional modifications.

    If at least one of --remove or --update is given, the server will
    update the list of files to check accordingly and assume that any other files
    are unchanged.  If none of these flags are given, the server will call stat()
    on each file last checked to determine its status.

    Files given in --update ought to exist.  Files given in --remove need not exist;
    if they don't they will be ignored.
    The lists may be empty but oughtn't contain duplicates or overlap.

    NOTE: The list of files is lost when the daemon is restarted.
    NrH   )r�   ÚremoveÚupdate)r�   r‘   )
r‰   r°   r±   r“   rv   r�   r”   r•   r–   r—   r˜   s       r#   Ú
do_recheckr²   Ú  s¡   € ô 
�‰‹€BØ‡{�{Ð $§+¡+Ð"9ÜØ×ÑØØ×*Ñ*Ø—;‘;Ø—;‘;ô
‰ô ˜4×+Ñ+¨YÀT×EVÑEVÔWˆÜ	�‰‹€BØ!# b¡€HÐÑÜ�˜4Ÿ<™<¨¯©¸×9MÑ9MÕNr$   c                ó   — t        | j                  d| j                  | j                  | j                  | j
                  | j                  | j                  | j                  | j                  ¬«
      }t        |ddd¬«       y)z¡Ask the daemon for a suggested signature.

    This just prints whatever the daemon reports as output.
    For now it may be closer to a list of call sites.
    rI   )rJ   ÚjsonÚ	callsitesÚ	no_errorsÚno_anyÚflex_anyÚ	use_fixmeÚmax_guessesFN©r•   r–   r—   )r“   rv   rJ   r´   rµ   r¶   r·   r¸   r¹   rº   r”   r§   s     r#   Ú
do_suggestr¼   ù  sd   € ô Ø×ÑØØ—‘Ø�Y‰YØ—.‘.Ø—.‘.Ø�{‰{Ø—‘Ø—.‘.Ø×$Ñ$ô€Hô � 5°DÈ$ÖOr$   c                ó  — t        | j                  d| j                  | j                  | j                  | j
                  | j                  | j                  | j                  | j                  | j                  ¬«      }t        |ddd¬«       y)z.Ask daemon to print the type of an expression.rM   )	ÚshowrN   Ú	verbosityÚlimitÚinclude_spanÚinclude_kindÚinclude_object_attrsÚunion_attrsÚforce_reloadFNr»   )r“   rv   r¾   rN   r•   rÀ   rÁ   rÂ   rÃ   rÄ   rÅ   r”   r§   s     r#   Ú
do_inspectrÆ     ss   € ô Ø×ÑØØ�Y‰YØ—‘Ø—,‘,Ø�j‰jØ×&Ñ&Ø×&Ñ&Ø!×6Ñ6Ø×$Ñ$Ø×&Ñ&ô€Hô � 5°DÈ$ÖOr$   c           	     ó:  — t         j                  dk(  rt        j                  d«       d| v rt        | d   «       	 | d   | d   | d   }}}t        j                  j                  «       t        j                  j                  «        t        j                  j                  «       t        j                  j                  «        |rt        | «       |r>dd	lm} ||z   j                  «       } || d
   t        |«      |rd|ini || d   | d   «       |r=| j!                  di «      }	t#        |d«      5 }
t%        j&                  |	|
«       ddd«       rt        j(                  |«       yy# t        $ r t        dt        | «      › �«       Y �ŒBw xY w# 1 sw Y   ŒIxY w)zkPrint the output from a check or recheck command.

    Call sys.exit() unless the status code is zero.
    ÚntÚ r    Úoutrf   r?   z
Response: r   )Úwrite_junit_xmlr‘   NÚpython_versionÚplatformÚstatsÚw)ÚosÚnameÚsystemr_   ÚKeyErrorr%   rZ   ÚstdoutÚwriteÚflushrk   r£   Ú	mypy.utilrË   Ú
splitlinesÚboolÚgetÚopenr´   Údumprd   )rš   r•   r–   r—   rÊ   rf   Ústatus_coderË   ÚmessagesÚ	telemetryÚfs              r#   r”   r”   "  so  € ô 
‡w�w�$‚ô 	�	‰	�"ŒØ�(ÑÜˆX�gÑÔð+Ø (¨¡°¸%±À(È8ÑBT�+ˆSˆô ‡J�J×Ñ�SÔÜ‡J�J×ÑÔÜ‡J�J×Ñ�SÔÜ‡J�J×ÑÔÙÜ�8ÔÙå-à˜#‘I×)Ñ)Ó+ˆÙØÐ%Ñ&Ü�‹IÙ (ˆT�8Ñ¨bØØÐ%Ñ&Ø�ZÑ ô	
ñ Ø—L‘L ¨"Ó-ˆ	Ü�/ 3Ó'ð 	$¨1Ü�I‰I�i Ô#÷	$ñ Ü�‰�Õð øô5 ò +Üˆzœ#˜h›-˜Ð)×*ð+ú÷.	$ð 	$ús   ¼E* Ä2FÅ* FÆFÆFc           	     ó&  — t        | j                  «       «      D ]u  \  }}|dv rEt        |«      dd }t        |«      dkD  r|d d › dt        |«      dz
  › d�}t	        |d›d	|›�«       ŒOt	        |d›d	t        |t        «      rd
|z  n|d›�«       Œw y )N)rÊ   rf   rÔ   rk   é   éÿÿÿÿé2   é(   z ... z more charactersÚ24z: z%.3fz>10)ÚsortedÚitemsÚreprÚlenrj   Ú
isinstanceÚfloat)rš   ÚkeyÚvalues      r#   r£   r£   O  s™   € Ü˜XŸ^™^Ó-Ó.ò \‰
ˆˆUØÐ4Ñ4ä˜“K  "Ð%ˆEÜ�5‹z˜BŠØ   "˜:˜, e¬C°«J°r©M¨?Ð:JÐK�Ü£¡eÐ,Ô-ØÜ›s´jÀÌÔ6N F¨U¢NÐTYøÐ$YÐZÕ[ñ\r$   c                óF   — t        t        | j                  dd¬«      «       y)z&Hang for 100 seconds, as a debug hack.rV   râ   r¦   N)rj   r“   rv   rx   s    r#   Údo_hangrð   [  s   € ô 
Œ'�$×"Ñ" F°AÔ
6Õ7r$   c                ó@  — ddl m}m} | j                  rvt	        | j                  dd¬«      xt
        _        t
        _        t
        j                  j                  «       }t        j                  |d«       t        j                  |d«       | j                  rGddlm} t        j                  t!        | j                  «      «      } |«       }|j#                  |«      }n || j$                  d¬	«      } ||| j&                  | j(                  ¬
«      j+                  «        y)z!Serve requests in the foreground.r   )ÚServerr‚   Úarâ   )Ú	bufferingrY   )ÚOptionsFr�   r¦   N)r…   rò   r‚   r„   rÛ   rZ   rÔ   rk   ÚfilenorÐ   Údup2Úoptions_dataÚmypy.optionsrõ   ÚpickleÚloadsr   Úapply_changesr:   rv   rƒ   Úserve)r`   rò   r‚   Úfdrõ   Úoptions_dictÚoptions_objÚoptionss           r#   Ú	do_daemonr  a  sÁ   € ÷ @à‡}‚}Ü"& t§}¡}°cÀQÔ"GÐGŒŒ
”S”ZÜ�Z‰Z×ÑÓ ˆÜ
�‰��AŒÜ
�‰��AŒà×ÒÝ(ä—|‘|¤I¨d×.?Ñ.?Ó$@ÓAˆÙ“iˆØ×+Ñ+¨LÓ9‰á'¨¯
©
À%ÔHˆá
ˆ7�D×$Ñ$¨d¯l©lÔ;×AÑAÕCr$   c                ó,   — t         j                  «        y)z'Print full help (same as dmypy --help).N)r\   Ú
print_helprx   s    r#   Údo_helpr  y  s   € ô ×ÑÕr$   r¦   c               ó�  — i }t        |«      }||d<   t        j                  j                  «       xs
 t	        «       |d<   t        «       |d<   t        | «      \  }}	 t        ||«      5 }t        ||«       d}	|	s�t        |«      }t        |j                  dd«      «      }	|j                  dd«      }
|
rt        j                  j                  |
«       |j                  dd«      }|rt        j                  j                  |«       |	sŒ�ddd«       |S # 1 sw Y   |S xY w# t        t        f$ r}d	t!        |«      icY d}~S d}~ww xY w)
a•  Send a request to the daemon.

    Return the JSON dict with the response.

    Raise BadStatus if there is something wrong with the status file
    or if the process whose pid is in the status file has died.

    Return {'error': <message>} if an IPC operation or receive()
    raised OSError.  This covers cases such as connection refused or
    closed prematurely as well as invalid JSON received.
    ÚcommandÚis_ttyÚterminal_widthFÚfinalrÔ   Nrk   r    )ÚdictrZ   rÔ   Úisattyr   r   ru   r   r   r   rÙ   ÚpoprÕ   rk   r©   r   r%   )rv   r  rƒ   Úkwdsrš   r`   r«   rÑ   Úclientr
  rÔ   rk   rf   s                r#   r“   r“   ‚  s-  € ð  "€HÜ�‹:€DØ€Dˆ�Oô —Z‘Z×&Ñ&Ó(Ò@Ô,>Ó,@€Dˆ�NÜ/Ó1€DÐ	ÑÜ˜Ó%�G€A€tð#Ü�t˜WÓ%ð 	-¨Ü�˜ÔàˆEÙÜ" 6›?�Ü˜XŸ\™\¨'°5Ó9Ó:�ð "Ÿ™ h°Ó5�ÙÜ—J‘J×$Ñ$ VÔ,Ø!Ÿ™ h°Ó5�ÙÜ—J‘J×$Ñ$ VÔ,ò ÷		-ð( €O÷)	-ð( €Oûô	 ”\Ð"ò #Øœ˜S›Ð"Õ"ûð#ús=   ÁD Á(BDÄD ÄDÄD ÄD ÄEÄ.E Ä:EÅ Ec                ó.   — t        | «      }t        |«      S )z’Read status file and check if the process is alive.

    Return (pid, connection_name) on success.

    Raise BadStatus if something's wrong.
    )r   r‹   )rv   r�   s     r#   ru   ru   °  s   € ô �{Ó#€DÜ˜ÓÐr$   c                óò   — d| vrt        d«      ‚| d   }t        |t        «      st        d«      ‚t        |«      st        d«      ‚d| vrt        d«      ‚| d   }t        |t        «      st        d«      ‚||fS )z}Check if the process is alive.

    Return (pid, connection_name) on success.

    Raise BadStatus if something's wrong.
    rª   z"Invalid status file (no pid field)zpid field is not an intzDaemon has diedÚconnection_namez.Invalid status file (no connection_name field)z%connection_name field is not a string)r   rë   Úintr
   r%   )r�   rª   r  s      r#   r‹   r‹   »  sŠ   € ð �DÑÜÐ<Ó=Ð=Ø
ˆu‰+€CÜ�cœ3ÔÜÐ1Ó2Ð2Ü�Œ:ÜÐ)Ó*Ð*Ø Ñ$ÜÐHÓIÐIØÐ,Ñ-€OÜ�o¤sÔ+ÜÐ?Ó@Ð@Ø�ÐÐr$   c                ó:   — 	 t        | «       y# t        $ r Y yw xY w)z&Check if the server is running cleanlyFT)ru   r   )rv   s    r#   r’   r’   Ñ  s(   € ðÜ�;Ôð øô ò Ùðús   ‚ Ž	™c                 ó<   — t        t        j                  dd  «       y )Nrâ   )rg   rZ   re   r   r$   r#   Úconsole_entryr  Û  s   € ÜŒ�‰�!�"ˆÕr$   )re   z	list[str]r&   r'   )rl   r%   r&   r   )rq   zargparse.ArgumentParserr&   z*Callable[[ActionFunction], ActionFunction])r`   úargparse.Namespacer&   r'   )F)r`   r  r   rÙ   r&   r'   )g      @)rv   r%   rƒ   rì   r&   r'   )
rš   údict[str, Any]r•   rÙ   r–   ú
str | Noner—   r  r&   r'   )rš   zMapping[str, object]r&   r'   )
rv   r%   r  r%   rƒ   z
int | Noner  Úobjectr&   r  )rv   r%   r&   útuple[int, str])r�   r  r&   r  )rv   r%   r&   rÙ   )r&   r'   )]Ú__doc__Ú
__future__r   Úargparser´   rÐ   rú   rZ   r‰   rb   Úcollections.abcr   r   Útypingr   r   Úlibrt.base64r   Úmypy.defaultsr	   Úmypy.dmypy_osr
   r   Úmypy.dmypy_utilr   r   r   Úmypy.ipcr   r   r   r   r×   r   r   r   Úmypy.versionr   ÚRawDescriptionHelpFormatterr   ÚArgumentParserr\   ro   Úadd_argumentÚadd_subparsersÚ
subparsersÚ
add_parserÚstart_parserÚpr%   r  Úrestart_parserÚstatus_parserÚstop_parserÚkill_parserÚcheck_parserÚSUPPRESSÚ
run_parserÚrecheck_parserÚsuggest_parserrì   Úinspect_parserÚhang_parserÚdaemon_parserÚhelp_parserrg   r_   Ú	Namespacers   r1   ry   r|   r{   rw   r†   rœ   r¤   r~   r¬   r®   r²   r¼   rÆ   r”   r£   rð   r  r  r“   ru   r‹   r’   r  r   r$   r#   ú<module>r=     s~	  ðñõ #ã Û Û 	Û Û 
Û Û ß -ß  å "å )ß %ß >Ñ >ß DÓ Dß RÑ RÝ $ôD˜X×AÑAô Dð
 
!ˆ×	 Ñ	 Ø	Ð;ÐSVô
€ð × Ñ ˜4Ð Ô  Ø × Ñ ØÐ0Ð7_ð ô ð × Ñ ØØØØ˜+Ñ%Ø	1ð ô ð ×"Ñ"Ó$€
à×(Ñ(¨°~Ð(ÓFÐ F€ˆqØ ‡�ˆ| V°#Ð<a€Ô bØ ‡�Ø˜¨Ð3Yð ô ð ‡�Ø�V 3¨SÐ7]ð ô ð  ×*Ñ*ØÐEð +ó ð €�ð ‡�ˆ| V°#Ð<a€Ô bØ ‡�Ø˜¨Ð3Yð ô ð ‡�Ø�V 3¨SÐ7]ð ô ð ×)Ñ)¨(Ð9MÐ)ÓNÐ N€�Ø ‡�ˆt�[¨Ð<S€Ô TØ ‡�Ð&Ð-_€Ô `à×'Ñ'¨Ð5`Ð'ÓaÐ a€ˆaà×'Ñ'¨Ð5VÐ'ÓWÐ W€ˆaà×(Ñ(ØÐ3Ð:^ð )ó ð €ˆqð ‡�ˆt�[¨Ð<S€Ô TØ ‡�ˆt�Y |¸(×:KÑ:K€Ô LØ ‡�ˆ}Ð#F€Ô GØ ‡�Ð"Ð)Z€Ô [Ø ‡�ˆw ¨cÐ8V€Ô WØ ‡�ØØØ	Wð ô ð ×&Ñ&Ø	Ø*Ø	=ð 'ó ð €
ˆQð
 ‡�ˆt�[¨Ð<S€Ô TØ ‡�ˆ}Ð#F€Ô GØ ‡�Ð"Ð)Z€Ô [Ø ‡�Ø˜¨Ð3Yð ô ð ‡�ˆ| V°#Ð<a€Ô bØ ‡�ØØØ	Wð ô ð
 ‡�ØØØ
Ø	Ø	9ð ô ð  ×*Ñ*ØØ*Ø	]ð +ó ð €�ð
 ‡�ˆt�[¨Ð<S€Ô TØ ‡�ˆt�Y |¸(×:KÑ:K€Ô LØ ‡�ˆ}Ð#F€Ô GØ ‡�Ð"Ð)Z€Ô [Ø ‡�ØØØ	Wð ô ð
 ‡�ØØØ
Ø	Rð	 ô ð ‡�ˆz 6°Ð;Y€Ô Zà×*Ñ*ØÐTð +ó ð €�ð ‡�ØØØ	Ø	Dð	 ô ð ‡�ØØØ	Eð ô ð
 ‡�Ø˜,Ð-\ð ô ð ‡�Ø�|Ð*[ð ô ð ‡�ØØ	Ø	Uð ô ð
 ‡�Ø˜,Ð-Zð ô ð ‡�ØØØ	Ø	Nð	 ô ð ‡�ØØ	Ø	Mð ô ð  ×*Ñ*ØÐAð +ó ð €�ð ‡�ØØØ	ð
ð	 ô ð ‡�ØØØ	ØÚ+Ø	)ð ô ð ‡�ØØØØØ	Qð ô ð ‡�ØØØ	ØØ	\ð ô ð ‡�ØØð
ð ô ð ‡�ØØð
ð ô ð ‡�ØØØ	?ð ô ð
 ‡�ØØð
0ð ô ð ‡�ØØØ	Jð ô ð ×'Ñ'¨Ð5KÐ'ÓLÐ L€ˆaà×)Ñ)¨(Ð9SÐ)ÓTÐ T€�Ø ‡�Ø˜¨Ð3Yð ô ð ‡�ˆ| V°#Ð<a€Ô bØ ‡�Ø�V 3¨SÐ7]ð ô ð ‡�Ð h×&7Ñ&7€Ô 8Ø×'Ñ'¨Ó/Ð /€ˆaàóó,ð
 ˜8×-Ñ-Ð.°Ð4Ñ5€óñ ˆÓòó ðñ* ˆÓòó ðô&ô&ô2ñ( ˆ
Óò&Oó ð&OñR ˆÓò&ó ð&ñ* ˆÓò ó ð ñ ˆÓòó ðñ ˆÓòOó ðOñ ˆÓòOó ðOñ< ˆÓòPó ðPñ* ˆÓòPó ðPð$*Øð*Ø'+ð*Ø8Bð*ØU_ð*à	ó*óZ	\ñ ˆÓò8ó ð8ñ
 ˆÓòDó ðDñ. ˆÓòó ðð >Bñ+Øð+Ø"ð+Ø0:ð+ØKQð+àó+ó\ó ó,ôr$   