§
    øyIf
  ã                   óª  — d 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	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 dd	lmZ dd
lmZ ddlmZ ddlm Z m!Z! d!d„Z"ded         ddfd„Z#dej$        ddfd„Z% ed¬¦  «        dee         de&dedede!dee'         ddfd„¦   «         Z(dee         de&dededddej$        ddddfd „Z)dS )"z§
Formatting many files at once via multiprocessing. Contains entrypoint and utilities.

NOTE: this module is only imported if we need to format several files at once.
é    N)ÚExecutorÚProcessPoolExecutorÚThreadPoolExecutor)ÚManager)ÚPath)ÚAnyÚIterableÚOptionalÚSet)Ú
mypyc_attr)Ú	WriteBackÚformat_file_in_place)ÚCache)ÚMode)Úerr)ÚChangedÚReportÚreturnc                  óZ   — 	 ddl } |                      ¦   «          dS # t          $ r Y dS w xY w)z¿If our environment has uvloop installed we use it.

    This is called only from command-line entry points to avoid
    interfering with the parent process if Black is used as a library.
    r   N)ÚuvloopÚinstallÚImportError)r   s    úE/var/www/piapp/venv/lib/python3.11/site-packages/black/concurrency.pyÚmaybe_install_uvloopr      sH   € ðØˆˆˆà�ŠÑÔÐÐÐøÝð ð ð Øˆˆðøøøs   ‚ œ
*©*Útaskszasyncio.Future[Any]c                 óV   — t          d¦  «         | D ]}|                     ¦   «          ŒdS )zFasyncio signal handler that cancels all `tasks` and reports to stderr.zAborted!N)r   Úcancel)r   Útasks     r   r   r   )   s5   € åˆ
�O„O€OØð ð ˆØ�Š‰Œˆˆðð ó    Úloopc                 ó|  — 	 d„ t          j        | ¦  «        D ¦   «         }|sJ	 t          j        d¦  «        }|                     t          j        ¦  «         |                      ¦   «          dS |D ]}|                     ¦   «          Œ|                      t          j	        |ddiŽ¦  «         t          j        d¦  «        }|                     t          j        ¦  «         |                      ¦   «          dS # t          j        d¦  «        }|                     t          j        ¦  «         |                      ¦   «          w xY w)zFCancel all pending tasks on `loop`, wait for them, and close the loop.c                 ó:   — g | ]}|                      ¦   «         °|‘ŒS © )Údone)Ú.0r   s     r   ú
<listcomp>zshutdown.<locals>.<listcomp>4   s%   € ÐQÐQÐQ˜dÀTÇYÂYÁ[Ä[ÐQ�TÐQÐQÐQr   zconcurrent.futuresNÚreturn_exceptionsT)
ÚasyncioÚ	all_tasksÚloggingÚ	getLoggerÚsetLevelÚCRITICALÚcloser   Úrun_until_completeÚgather)r    Ú	to_cancelÚ	cf_loggerr   s       r   Úshutdownr3   0   s&  € ðàQÐQ¥gÔ&7¸Ñ&=Ô&=ÐQÑQÔQˆ	Øð 	Øõ Ô%Ð&:Ñ;Ô;ˆ	Ø×Ò�7Ô+Ñ,Ô,Ð,Ø�
Š
‰Œˆˆˆð ð 	ð 	ˆDØ�KŠK‰MŒMˆMˆMØ×Ò¥¤°	Ð RÈTÐ RÐ RÑSÔSÐSõ
 Ô%Ð&:Ñ;Ô;ˆ	Ø×Ò�7Ô+Ñ,Ô,Ð,Ø�
Š
‰Œˆˆˆøõ Ô%Ð&:Ñ;Ô;ˆ	Ø×Ò�7Ô+Ñ,Ô,Ð,Ø�
Š
‰Œˆˆøøøs   ‚ C2 Á,=C2 Ã2A	D;T)Ú	patchableÚsourcesÚfastÚ
write_backÚmodeÚreportÚworkersc                 ón  — t          ¦   «          |€Dt          t          j                             dd¦  «        ¦  «        }|pt          j        ¦   «         pd}t          j        dk    rt          |d¦  «        }	 t          |¬¦  «        }n-# t          t          t          f$ r t          d¬¦  «        }Y nw xY wt          j        ¦   «         }t          j        |¦  «         	 |                     t%          | ||||||¬¦  «        ¦  «         	 t'          |¦  «         t          j        d¦  «         n# t          j        d¦  «         w xY w|�|                     ¦   «          dS dS # 	 t'          |¦  «         t          j        d¦  «         n# t          j        d¦  «         w xY w|�|                     ¦   «          w w xY w)	z4Reformat multiple files using a ProcessPoolExecutor.NÚBLACK_NUM_WORKERSr   é   Úwin32é<   )Úmax_workers)r5   r6   r7   r8   r9   r    Úexecutor)r   ÚintÚosÚenvironÚgetÚ	cpu_countÚsysÚplatformÚminr   r   ÚNotImplementedErrorÚOSErrorr   r(   Únew_event_loopÚset_event_loopr/   Úschedule_formattingr3   )r5   r6   r7   r8   r9   r:   rA   r    s           r   Úreformat_manyrO   F   sÛ  € õ ÑÔÐð €Ý•b”j—n’nÐ%8¸!Ñ<Ô<Ñ=Ô=ˆØÐ0�Rœ\™^œ^Ð0¨qˆÝ
„|�wÒÐå�g˜rÑ"Ô"ˆð5Ý&°7Ð;Ñ;Ô;ˆˆøÝÕ,­gÐ6ð 5ð 5ð 5õ
 &°!Ð4Ñ4Ô4ˆˆˆð5øøøõ Ô!Ñ#Ô#€DÝÔ˜4Ñ Ô Ð ð Ø×ÒÝØØØ%ØØØØ!ðñ ô ñ
	
ô 
	
ð 
	
ð	)Ý�T‰NŒNˆNåÔ" 4Ñ(Ô(Ð(Ð(ø�GÔ" 4Ñ(Ô(Ð(Ð(øøøØÐØ×ÒÑÔÐÐÐð  Ðøð		)Ý�T‰NŒNˆNåÔ" 4Ñ(Ô(Ð(Ð(ø�GÔ" 4Ñ(Ô(Ð(Ð(øøøØÐØ×ÒÑÔÐÐð  øøøsB   Á6B Â'B1Â0B1Ã)E ÄD* Ä*E ÅF4ÅFÅ.F4ÆFÆF4r   rA   r   c              ƒ   óØ  ‡‡‡‡‡‡K  — t          j        ‰¦  «        }‰t          j        t          j        fvrJ|                     | ¦  «        \  } }t          |¦  «        D ]"}	|                     |	t          j	        ¦  «         Œ#| sdS g }
g }dŠ‰t          j        t          j        fv r"t          ¦   «         }|                     ¦   «         Šˆˆˆˆˆˆfd„t          | ¦  «        D ¦   «         }|                     ¦   «         }	 ‰                     t          j        t           |¦  «         ‰                     t          j        t           |¦  «         n# t$          $ r Y nw xY w|�r\t'          j        |t&          j        ¬¦  «        ƒ d{V —†\  }}|D �],}|                     |¦  «        }	|                     ¦   «         r|
                     |¦  «         ŒB|                     ¦   «         x}rS|j        r(t7          j        t;          |¦  «        ||j        ¦  «         |                     |	tA          |¦  «        ¦  «         Œ«| !                    ¦   «         rt          j"        nt          j#        }‰t          j"        u s‰t          j$        u r#|t          j#        u r|                     |	¦  «         |                     |	|¦  «         �Œ.|�°\|
rt'          j%        |
ddiŽƒ d{V —† |r| &                    |¦  «         dS dS )záRun formatting of `sources` in parallel using the provided `executor`.

    (Use ProcessPoolExecutors for actual parallelism.)

    `write_back`, `fast`, and `mode` options are passed to
    :func:`format_file_in_place`.
    Nc                 óv   •— i | ]5}t          j        ‰                     ‰t          |‰‰‰‰¦  «        ¦  «        |“Œ6S r#   )r(   Úensure_futureÚrun_in_executorr   )r%   ÚsrcrA   r6   Úlockr    r8   r7   s     €€€€€€r   ú
<dictcomp>z'schedule_formatting.<locals>.<dictcomp>™   s`   ø€ ð ð ð ð õ 	ÔØ× Ò ØÕ.°°T¸4ÀÈTñô ñ	
ô 	
ð ðð ð r   )Úreturn_whenr'   T)'r   Úreadr   ÚDIFFÚ
COLOR_DIFFÚfiltered_cachedÚsortedr$   r   ÚCACHEDr   ÚLockÚkeysÚadd_signal_handlerÚsignalÚSIGINTr   ÚSIGTERMrJ   r(   ÚwaitÚFIRST_COMPLETEDÚpopÚ	cancelledÚappendÚ	exceptionÚverboseÚ	tracebackÚprint_exceptionÚtypeÚ__traceback__ÚfailedÚstrÚresultÚYESÚNOÚCHECKr0   Úwrite)r5   r6   r7   r8   r9   r    rA   ÚcacheÚcachedrT   rg   Úsources_to_cacheÚmanagerr   Úpendingr$   Ú_r   ÚexcÚchangedrU   s    ``` ``             @r   rN   rN   y   s$  øøøøøøè è € õ  ŒJ�tÑÔ€EØ�)œ.­)Ô*>Ð?Ð?Ð?Ø×/Ò/°Ñ8Ô8‰ˆ�Ý˜&‘>”>ð 	-ð 	-ˆCØ�KŠK˜�Wœ^Ñ,Ô,Ð,Ð,Øð Øˆà€IØÐØ€DØ•i”n¥iÔ&:Ð;Ð;Ð;õ ‘)”)ˆØ�|Š|‰~Œ~ˆðð ð ð ð ð ð ð ð õ ˜'‘?”?ðñ ô €Eð �jŠj‰lŒl€GðØ×Ò¥¤­v°wÑ?Ô?Ð?Ø×Ò¥¤µ¸Ñ@Ô@Ð@Ð@øÝð ð ð àˆðøøøð ñ *Ýœ W½'Ô:QÐRÑRÔRÐRÐRÐRÐRÐRÐR‰ˆˆaØð 	*ñ 	*ˆDØ—)’)˜D‘/”/ˆCØ�~Š~ÑÔð *Ø× Ò  Ñ&Ô&Ð&Ð&ØŸšÑ(Ô(Ð(�ð *Ø”>ð QÝÔ-­d°3©i¬i¸¸cÔ>OÑPÔPÐPØ—’˜c¥3 s¡8¤8Ñ,Ô,Ð,Ð,à)-¯ª©¬ÐF�'œ+˜+½G¼J�ð ¥¤Ð.Ð.Ø¥)¤/Ð1Ð1°gÅÄÐ6KÐ6Kà$×+Ò+¨CÑ0Ô0Ð0Ø—’˜C Ñ)Ô)Ð)Ñ)ð% ñ *ð& ð AÝŒn˜iÐ@¸4Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Øð &Ø�ŠÐ$Ñ%Ô%Ð%Ð%Ð%ð&ð &s   Ã<AE	 Å	
EÅE)r   N)*Ú__doc__r(   r*   rC   ra   rG   rk   Úconcurrent.futuresr   r   r   Úmultiprocessingr   Úpathlibr   Útypingr   r	   r
   r   Úmypy_extensionsr   Úblackr   r   Úblack.cacher   Ú
black.moder   Úblack.outputr   Úblack.reportr   r   r   r   ÚAbstractEventLoopr3   ÚboolrB   rO   rN   r#   r   r   ú<module>r‹      s�  ððð ð €€€Ø €€€Ø 	€	€	€	Ø €€€Ø 
€
€
€
Ø Ð Ð Ð Ø PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PØ #Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ð Ð Ø /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /à &Ð &Ð &Ð &Ð &Ð &à 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (ðð ð ð ð�(Ð0Ô1ð °dð ð ð ð ð�7Ô,ð °ð ð ð ð ð, €�dÐÑÔð/ Ø�ŒYð/ à
ð/ ð ð/ ð ð	/ ð
 ð/ ð �cŒ]ð/ ð 
ð/ ð / ð / ñ Ôð/ ðdE&Ø�ŒYðE&à
ðE&ð ðE&ð ð	E&ð
 ðE&ð Ô
#ðE&ð ðE&ð 
ðE&ð E&ð E&ð E&ð E&ð E&r   