ZL i^ddlZddlZddlZddlZddlZddlZddlZddlmZm Z m Z m Z m Z ddl mZddlmZddlmZmZddlmZddlmZddlmZdd lmZdd lmZmZmZddlZdd lm Z dd l!m"Z"dd l#m$Z$ddl%m&Z&ddl'm(Z)ddl*m+Z+ddl,m-Z-ddl.m/Z/m0Z0m1Z1m2Z2ddl3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;mm?Z?m@Z@mAZAmBZBmCZCmDZDmEZEddlFmGZGmHZHmIZIddlJmKZKmLZLddlMmNZNmOZOmPZPddlMmQZQddlMmRZRmSZSmTZTddlUmVZVmWZWmXZXmYZYddlZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`ddlambZbmcZcmdZdmeZemfZfddlgmhZhmiZimjZjmkZkddllmmZmmnZnmoZoddlpmqZqdd lrmsZsmtZteeujd!vZwexZyexZzexZ{Gd"d#eZ|eQZ}d$ejd%ejd&eexd'eexfd(Zd$ejd)eexd*exd'dfd+Zd,ejd-eejejfd.eexd/fd'eeSfd0Zd,ejd-eejejfd.eexd/fd'eeRfd1Zd2exd'eexfd3Zd$ejd%ejd&eexd'eeexfd4Zejd5d6d7gid89ejd:d;exd<=ejd>d?ee1d@dABejdCdDejeSDcgc]}|jj c}edAdEFejdGdAdHIejdJdAdKIejdLdAdMdNjee?dOgPejdQdRdAdSIejdTdUdAdVIejdWdXdAdYIejdZdAd[Iejd\dAd]Iejd^ejeRDcgc]}|jc}edAd_Fejd`dAdaIejdbdAdcIejdddAdeIejdfdAdgdhdijejdkdAdlIejdmexdn=ejdoexedpe/dqdrsejdtexeduvejdwexedxvejdyexdAdz{ejd|exe0ed}dA~ejddej"dddejdddAdIejdddAdIej$e)dewrdnddej&dej(ej*ddej0dAdAdAdAdAdAdejdej0dAdAdrdAdrexdAedejddAdIej,d$ejdeexdedeeSdedede exdedededede exdedededededeeRdededeexdeexdeeexdeeexdeeexdeexdeedeexd/fdeexded'df>dZdedeexd/fdededeexdeeexdeeexdeeexdddeexd'eefdZdiddexdede|deQdeodeeeefd'dfd„Ze"dAëdidrdĜdedede|deQdddeeeefded'dfdńZe|j:dfdiddededeQde|dedeeeefd'efdDŽZde|j:didȜdedeexde|deQdeeeefd'ef dɄZdiddexdexdeQdeeeefd'df d̄ZdiddexdedeQdeeeefd'eyf d̈́ZdexdedeQd'exfd΄Zde exefd'dfdЄZdexdedeQd'eyfdфZdiddexdeQdeeeefd'exfd҄ZdiddexdeQdeeeefd'exfdӄZdedeQd'eeyeze{ffdԄZdd՜detdeeexd'eePfd؄Zdeetesfd'efdلZdd՜detdeeexd'eeSfdڄZdetd'eexfdۄZd'exfd܄Zdexdexd'dfdބZdiddexdexdeQdeeeefd'df d߄Zed'e dfdZddZedk(reyycc}wcc}w)N) Collection GeneratorIteratorMutableMappingSequence)contextmanager)replace)datetimetimezone)Enum)JSONDecodeError)Path)Pattern)AnyOptionalUnion)ParameterSource) mypyc_attr)PathSpec)GitWildMatchPatternError)version)Cache)normalize_fmt_off)DEFAULT_EXCLUDESDEFAULT_INCLUDESDEFAULT_LINE_LENGTHSTDIN_PLACEHOLDER) best_effort_relative_pathfind_project_rootfind_pyproject_tomlfind_user_pyproject_tomlgen_python_files get_gitignoreparse_pyproject_tomlpath_is_excluded$resolves_outside_root_or_cannot_statwrap_stream_for_windows)PYTHON_CELL_MAGICS"jupyter_dependencies_are_installed mask_cellput_trailing_semicolon_backremove_trailing_semicolon unmask_cell validate_cell)LN LineGeneratortransform_line)EmptyLineTracker LinesBlock)FUTURE_FLAG_TO_FEATUREVERSION_TO_FEATURESFeature)Mode)Preview TargetVersionsupports_feature)STARSis_number_tokenis_simple_decorator_expressionsyms) color_diffdiff dump_to_fileerr ipynb_diffout)ASTSafetyError InvalidInput lib2to3_parse parse_ast stringify_ast)adjusted_linesconvert_unchanged_linesparse_line_rangessanitized_lines)ChangedNothingChangedReport)token)LeafNode)z.pydz.soc HeZdZdZdZdZdZdZeddde d e d e d dfd Z y ) WriteBackrF)colorcheckr@rZreturncv|r|s |jS|r|r |jS|r |jS|jSN)CHECK COLOR_DIFFDIFFYES)clsr[r@rZs T/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/black/__init__.pyfrom_configurationzWriteBack.from_configurationcs7 99  E>> !sxx,SWW,N) __name__ __module__ __qualname__NOrbrar_r` classmethodboolrerfrdrUrU\sP B C D EJ7< - -#' -04 -  - -rfrUctxparamvaluer\c |sCt|jjdd|jjdd}|y t|}|syt|t|||jDcic])\}}|t|ttfs t|n|+}}}|jd}|&t|tst jdd |jd }|&t|tst jd d |jd } | &t| tst jd d|jd} | t jddi} |jr| j!|j| j!|| |_|S#tt f$r }t j|d|dd}~wwxYwcc}}w)zInject Black configuration from "pyproject.toml" into defaults in `ctx`. Returns the path to a successfully found and read configuration file, None otherwise. srcrmstdin_filenameNz"Error reading configuration file: )filenamehinttarget_versionztarget-versionz(Config key target-version must be a listexcludez#Config key exclude must be a stringextend_excludezextend-excludez*Config key extend-exclude must be a string line_rangesz line-rangesz2Cannot use line-ranges in the pyproject.toml file.)r paramsgetr$OSError ValueErrorclick FileErrorspellcheck_pyproject_toml_keyslistitems isinstancedictstrBadOptionUsage default_mapupdate) rnrorpconfigekvrvrwrxryrs rdread_pyproject_tomlrts # JJNN5" %szz~~6F'M  =%e, &sDL%@   1 ZD$<8s1va ?  ZZ 01N!*^T*J"" H  jj#G:gs#;""9.STTZZ 01N!*^S*I"" J  **]+K"" O  #%K 3??+v!CO L[ Z oo#EaS!I   s G>.G8G5G00G5 config_keysconfig_file_pathc g}|jjDchc]}|j}}|Dcgc] }||vs| }}|r4djt t |}t d|d|ddyycc}wcc}w)N, zInvalid config keys detected: z (in )redfg)commandrznamejoinmapreprrD)rnrr invalid_keysroavailable_config_optionskeykeys_strs rdrrs!L8; 8J8JKu KK#.VC#=U2UCVLV99S|45 ,XJe-`. The `` and `` integer indices are 1-based and inclusive on both ends.rm)rmetavarrrz --fast/--safezBy default, Black performs an AST safety check after formatting your code. The --fast flag turns off this check and the --safe flag explicitly enables it. [default: --safe]z--required-versiona5Require a specific version of Black to be running. This is useful for ensuring that all contributors to your project are using the same version, because different versions of Black may format code a little differently. This option can be set in a configuration file for consistent results across environments.z --excludea[A regular expression that matches files and directories that should be excluded on recursive searches. An empty value means no paths are excluded. Use forward slashes for directories on all platforms (Windows, too). By default, Black also ignores all paths listed in .gitignore. Changing this value will override all default exclusions. [default: ]F)rrrrz--extend-excludezrLike --exclude, but adds additional files and directories on top of the default values instead of overriding them.)rrrz--force-excludezLike --exclude, but files and directories matching this regex will be excluded even when they are passed explicitly as arguments. This is useful when invoking Black programmatically on changed files, such as in a pre-commit hook or editor plugin.z--stdin-filenamezThe name of the file when passing it through stdin. Useful to make sure Black will respect the --force-exclude option on some editors that rely on using stdin.)ris_eagerrz --includea=A regular expression that matches files and directories that should be included on recursive searches. An empty value means all files are included regardless of the name. Use forward slashes for directories on all platforms (Windows, too). Overrides all exclusions, including from .gitignore and command line options.)rrrrrz-Wz --workersrV)minaWhen Black formats multiple files, it may use a process pool to speed up formatting. This option controls the number of parallel workers. This can also be specified via the BLACK_NUM_WORKERS environment variable. Defaults to the number of CPUs in the system.)rrrz-qz--quietzpStop emitting all non-critical output. Error messages will still be emitted (which can silenced by 2>/dev/null).z-vz --verbosezEmit messages about files that were not changed or were ignored due to exclusion patterns. If Black is using a configuration file, a message detailing which one it is using will be emitted.z!%(prog)s, %(version)s (compiled: yesnoz ) Python () )rmessagerr)exists file_okaydir_okayreadable allow_dashzSRC ...)nargsrrrz--config)rrrrr path_typez5Read configuration options from a configuration file.)rrrrz --no-cachezQSkip reading and writing the cache, forcing Black to reformat all included files.code line_lengthrvr[r@ryrZfastpyiipynbpython_cell_magicsskip_source_first_lineskip_string_normalizationskip_magic_trailing_commapreviewunstableenable_unstable_featurequietverboserequired_versionincluderwrx force_excludersworkersrno_cachec |jttjdk\sJdtjdddk(rt d|j d|r4|2t t j|dz|j d|s4|2t t j|d z|j d|r6|s4|s2t t j|d z|j d| t||nd \}}||jd <|r|rt d |d|dd|r|jd} tt}!||!k(rt d|!ddnA| tjtjfvrt ddnt d|dd|j r2|j j#D]\}"}#t |"d|#d}$|rM|t$k7rD|t%j&ddk7r)t)|$d|dt$d|j d| r| rt)d|j dt*j-|||}%|r t/|}&n t/}&t1|&|| | | | | ||t/| t/| }'g}(|r*| rt)d |j d t3|}(|d!}t7||||"}*|t9|||%|'|*|(#n|J t;|||||||||*|$ }++s_|s|s t d%d&|vr;tj>jAtjBjE|j dtG|+dk(r!tI|+jK||%|'|*|(|'n3dd(l&m'},|(rt)d)|j d|,|+||%|'|*||*|s|sa|$|s|*jPs |*jRr t t |*jTr|$nd+| tWjXt|*d!,|j |*jTy#t4$r0})t)t|)|j dYd})~)d})~)wwxYw#t<$r|j dYwxYw)-r)rX zBlack requires Python 3.9+NrX)rX zPython 3.12.5 has a memory safety issue that can cause Black's AST safety checks to fail. Please upgrade to Python 3.12.6 or downgrade to Python 3.12.4rVz3 'SRC' and 'code' cannot be passed simultaneously.z% One of 'SRC' or 'code' is required.z3 '--enable-unstable-feature' requires '--preview'.)NNrootz Identified `z` as project root containing a .bluerrz/Using configuration from user-level config at 'z'.z&Using configuration from project root.zUsing configuration in 'z: uOh no! 💥 💔 💥rz The required version `z&` does not match the running version `z`!z)Cannot pass both `pyi` and `ipynb` flags!)r[r@rZ) target_versionsris_pyiis_ipynbrstring_normalizationmagic_trailing_commarrrenabled_featuresz*Cannot use --line-ranges with ipynb files.T)r[r@rr)contentr write_backmodereportlines) rrrrrrrwrxrrrsu?No Python files are present to be formatted. Nothing to do 😴-)rrrrrrrr) reformat_manyz2Cannot use --line-ranges to format multiple files.)sourcesrrrrrruAll done! ✨ 🍰 ✨)rB)- ensure_objectrsys version_inforDexitmain get_usagerobjget_parameter_sourcerr!rDEFAULT DEFAULT_MAPrr __version__splitrBrUresetr7rLr}rP reformat_code get_sourcesrstdoutwritestdinreadlen reformat_onepopblack.concurrencyr change_count failure_count return_coder~echo)-rnrrrvr[r@ryrZrrrrrrrrrrrrrrrwrxrrsrrrrrrmethod config_sourceuser_level_configrorp error_msgrversionsrrrrrrs- rdrrsv d   v %C'CC % z)  L   t NN3 E F   4< DNN3 "K KL  8 NN3 E F   37,#~.LD&CGGFO  tf$CF81M  44X>M #$<$> ? **)*". ''++#<H.vhb9fE$'OO$9$9$;-LE55'E7+,-(I  +  1 1# 6q 9 9 k01A0BC%%0M 5     78  --EE-RJ~&5  5!::!::1245 D$&E  < = HHQK %k2E   %d% IF !   !-+- GeUVcz   !12 HHQK w<1  KKM%!  8HI %! e ##UH7DH t||~3D$G4TF!<G!:4!F!O!O!Q !$'9!9  2MB##J01$89{{h&/Q)E 0+D63? KK  [[]4<<>55d;)rrrrrN) rrNrjformat_stdin_to_stdoutrbdone Exceptionr traceback print_excfailedr) rrrrrrr(changedexcs rdrr@s  D &** !$:DPU kkG D'" & >>    ! dCH%%&sAA B;BB) patchable)rrc* tj}t|dk(rd}nGt|jtr'd}t t|t td}nd}|rY|jdk(rt|d}n|jdk(r t|d}t|||| rtj}n|rdntj|} | C|tjtjfvr!| j!|stj"}|tj"ur t%||||| rtj}| Z|tjur|tj"us$|tj&ur$|tjur| j)|g|j+||y#t,$rE} |j.rt1j2|j5|t| Yd} ~ yd} ~ wwxYw) zReformat a single file under `src` without spawning child processes. `fast`, `write_back`, and `mode` options are passed to :func:`format_file_in_place` or :func:`format_stdin_to_stdout`. rTNF.pyirrr)rrrr)rNrjr startswithrrrrr r,rbrrrUrar` is_changedCACHEDformat_file_in_placer_rr-r.rr/r0r1) rrrrrrrrr2r)cacher3s rdr r `s +%** s8s?H X !2 3Hs3x$5 6 89:CH zzV#tD1x'td3%jt5"++$D%**T*:E Z$$8&'',%nnGgnn,1E$:D2"++ y}},1N)//1g6K SE" C! % >>    ! c3s8$$%sGG H ;H  Hlockc0|jdk(rt|d}n|jdk(r t|d}tj|j j t j}d}t|d5}|jr|j}t|j|\} } } ddd t ||| } |j# | z} |j#| | z} |t$j&k(r*t|d |  5} | j)| dddy|t$j*t$j,fvrtj.t j}|d|}|d|}|j0rt3| | ||}nt5| | ||}|t$j,k(r t7|}|xs t95t;j<t>j@jB|  d} tE| } | j)|| jGdddyy#1swYxYw#t$rYy t$rt!d |d dwxYw#1swYyxYw#1swYyxYw)zFormat file under `src` path. Return True if changed. If `write_back` is DIFF, write a diff to stdout. If it is YES, write reformatted code to the file. `mode` and `fast` options are passed to :func:`format_file_contents`. r6Tr7rr8rfrbNrrrFzFile 'z-' cannot be parsed as valid Jupyter notebook.w)encodingnewline rCrD write_through)$rr r fromtimestampstatst_mtimer utcopenrreadline decode_bytesrformat_file_contentsrOr r}decoderUrbrrar`nowrrCr@r? nullcontextio TextIOWrapperrrbufferr'detach)rrrrrr>rthenheaderbuf src_contentsrCrD dst_contentsfrQsrc_namedst_name diff_contentss rdr<r<s[ zzVtD) x td+  ! !#((*"5"5x|| DD F c4IC  & &\\^F*6sxxz4*H' hI + t$e ==*\9L==*\9LY]]" #sXw ? "1 GGL ! "2 /   (<(<= =ll8<<(U"TF#U"SE? ==&|\8XVM |XxPM -- -&}5M  "[]    !!!" A (*A GGM " HHJ  WII  SEF G   "2   s7;I I!J$AJ  I I=$I=J  J)rrrctjtj}|7t t j jj|\}}}ntj|vr|dd}}}n|dd}}}|} t||||} tjt jj||d} |tj k(rKtj|vr| r%| ddk7r| ddk7r| |z } n| r | ddk7r| dz } | j#| n|tj$tj&fvrutjtj} d |} d | } t)|| | | }|tj&k(rt+|}t-| } | j#|| j/y#t0$r9Ytjt jj||d} |tj k(rKtj|vr| r%| ddk7r| ddk7r| |z } n| r | ddk7r| dz } | j#| n|tj$tj&fvrutjtj} d |} d | } t)|| | | }|tj&k(rt+|}t-| } | j#|| j/y wxYw#tjt jj||d} |tj k(rKtj|vr| r%| ddk7r| ddk7r| |z } n| r | ddk7r| dz } | j#| n|tj$tj&fvrutjtj} d |} d | } t)|| | | }|tj&k(rt+|}t-| } | j#|| j/wxYw) aFormat file on stdin. Return True if changed. If content is None, it's read from sys.stdin. If `write_back` is YES, write reformatted code back to stdout. If it is DIFF, write a diff to stdout. The `mode` argument is passed to :func:`format_file_contents`. utf-8rrATrFr zSTDIN zSTDOUT F)r rQr rKrNrrrUrr8normalize_cr_newlinesrOrSrTrrUrbrrar`r@r?r'rVrO)rrrrrrWrrrCrDdstr\rQr]r^ds rdr,r,s << %D!-cii.>.>.C.C.Et!LXw  & &$ .!('4wX!('2wX C"3TEJ    JJ  'QU   &,,43r7d?s2w$7NC3r7d?4KC GGCL INNI,@,@A A,,x||,C 'H!#'HS#x2AY111qM+A. GGAJ  3     JJ  'QU   &,,43r7d?s2w$7NC3r7d?4KC GGCL INNI,@,@A A,,x||,C 'H!#'HS#x2AY111qM+A. GGAJ  3    JJ  'QU   &,,43r7d?s2w$7NC3r7d?4KC GGCL INNI,@,@A A,,x||,C 'H!#'HS#x2AY111qM+A. GGAJ  s%?G L L L  L D8QrZr[c:t||t||||y)zPerform stability and equivalence checks. Raise AssertionError if source and destination contents are not equivalent, or if a second pass of the formatter would format the content differently. rrN)assert_equivalent assert_stable)rZr[rrs rdcheck_stability_and_equivalencerkslL1, 4uErfc|jrt|||}nt|||}||k(rt|s|jst |||||S)aReformat contents of a file and return new contents. If `fast` is False, additionally confirm that the reformatted code is valid by calling :func:`assert_equivalent` and :func:`assert_stable` on it. `mode` is passed to :func:`format_str`. rrrh)rformat_ipynb_string format_strrOrk)rZrrrr[s rdrOrO-sW }}*:"$:'#,-K#L LJT2J ' JTJ%0\%J" %&(> C **T C cz$& J '$&'s A>>Bnbc|jdijdijdd}| |dk7rtdyy)zIf notebook is marked as non-Python, don't format it. All notebook metadata fields are optional, see https://nbformat.readthedocs.io/en/latest/format_description.html. So if a notebook has empty metadata, we will try to parse it anyway. metadata language_inforNpython)r{rO)r{languages rdvalidate_metadatarnsKvvj"%))/2>BB64PHH 4$&!5rfc|st|ddk(}d}tj|}t||dD]R}|j dddk(s dj |d }t ||| }|jd |d <d }T|r!tj|d d} |r| dz} | St#t$rYwxYw)zFormat Jupyter notebook. Operate cell-by-cell, only on code cells, only for Python notebooks. If the ``.ipynb`` originally had a trailing newline, it'll be preserved. rrFcells cell_typeNrrbsourcermT)keependsrV)indent ensure_ascii) rOjsonloadsrr{rrz splitlinesdumps) rZrrtrailing_newlinemodifiedr{cellrrrer[s rdrnrnzs #B'4/H L !Bb7   88K && 0 ggd8n-!#Dt<"%!>X  zz"QUC '$.L"  s"B66 CCc|rt||}|s|St|||}||k7r|r t|||}t|||S|S)aReformat a string and return new contents. `mode` determines formatting options, such as how many characters per line are allowed. Example: >>> import black >>> print(black.format_str("def f(arg:str='')->None:...", mode=black.Mode())) def f(arg: str = "") -> None: ... A more complex example: >>> print( ... black.format_str( ... "def f(arg:str='')->None: hey", ... mode=black.Mode( ... target_versions={black.TargetVersion.PY36}, ... line_length=10, ... string_normalization=False, ... is_pyi=False, ... ), ... ), ... ) def f( arg: str = '', ) -> None: hey rh)rM_format_str_oncerJ)rZrrr[s rdroros[@ |4 #Lt5IL|# "5, EE 4uEE rfc0tj|vrEt|jd|\}}}t |j |j }n$t |j |j }g}|j r |j }nt|} t|| }tjtjtjhD chc]} t|| r| } } t||||r t||t!|| } t#|} tj$tj&hD chc]} t|| r| }} d}| j)|D][}| j+|}|j-|t/|||D]&}|j0j-t3|(]|r d|d_g}|D]!}|j7|j9#|s?tj|vrdvrSy t|jd|\}}}d|vr|Sy tj|vr!d j;|j=dSd j;|Scc} wcc} w) Nra)rfuture_imports)rfeaturesrqrrrrb)r8rdrNencoderGlstriprget_future_importsdetect_target_versionsr6PARENTHESIZED_CONTEXT_MANAGERSUNPARENTHESIZED_EXCEPT_TYPES T_STRINGSr:rrKr0r2TRAILING_COMMA_IN_CALLTRAILING_COMMA_IN_DEFvisitmaybe_empty_linesappendr1 content_linesrafterextend all_linesrr )rZrrnormalized_contents_ newline_typesrc_node dst_blocksrrfeatureline_generation_featuresline_generatoreltsplit_line_featuresblock current_lineliner[normalized_contentrDs rdrrs$$,/;    ($0 ,Q !  & & ($:N:N !!4!4!68L8LM#%J ''+H5)(>R  2 2  0 0       Hg .   he, %0"7OPN  %C  * *  ) )   Hg . #'E&,,X62 %%l3% " t.A  2D    & &s4y 1 22 2L/EOO-./   ( (D 0**## .:##G,d. * 7))$$,ww|$,,T<@@ww|$$k  s J Jctj|}tj|j\}}|sd|dfSt j |vrC|ddddk(rd|dddvrd}n:d }n7|dd dd k(rd|ddd vrd}nd}nd|dvrd}nd}n|ddddk(rd nd}|jdtj||5}|j||fcdddS#1swYyxYw) zReturn a tuple of (decoded_contents, encoding, newline). `newline` is either CRLF or LF but `decoded_contents` is decoded with universal newlines (i.e. only contains LF). rbrrNs  rcz r ) rSBytesIOtokenizedetect_encodingrMr8rdseekrTr)rrrsrcbufrCrrDtiows rdrNrNs ZZ_F..v?OHe 8T!!$$, 8BC=G #a" %  1Xbc]e #a" %a !!HRSMW4&$ KKN  &( +.tyy{Hg-...s C''C0rnoderct}|r"||Dchc]}|tvr t|c}z}|jD ]}|jtj k(r |j tjA|jtjk(r |j tj~|jtjk(rR|jFtd|jjDr |j tjt!|r1d|j"vs|j tj$)|jtj&k(rv|jsT|jjt(j*t(j,t(j.hvs|j tj0|jtj2k(r!|j tj4|jt(j6k(rUt9|jdkDs1t;|jdrK|j tj<l|jt(j*t(j,hvr|jr|jdjtj>k(r|jt(j*k(rtj@}ntjB}|jD]x}|jtDvr|j ||jt(jFk(sD|jD]&}|jtDvs|j |(z|jt(jHt(jJhvrt9|jdk\rt|jdjt(jLk(rJtd|jdjDr!|j tjNM|jt(jPk(rct9|jdk\rK|jdjt(jLk(r!|j tjR|jt(jTk(rt9|jdkDr|jdjt(jVk(r|jdj}t9|dk(sU|d jtjXk(swt[|ds|djtj\k(s|j tj^|jt(j`k(r!|j tjb|jt(jdt(jfhvr=td |jDr!|j tjhq|jt(jjk(rct9|jdk(rK|jdjt(jlk(r!|j tjh|jt(jnt(jpfvr!|j tjr>|jt(jtt(jvt(jxfvrK|jd jtjzk(r!|j tj||jt(j~k(st9|jdk\s|jdjtjk(s,|jdjt(jk(sS|jdjtjk(} | r|j tjt9|j| dzk\xrN|j| dzjtjk(xr|j| dzj"d k(} | r | r*|jdjt(jk(s0| r =|jdjt(jk(s i|j tj |Scc}w) aYReturn a set of (relatively) new Python features used in this file. Currently looking for: - f-strings; - self-documenting expressions in f-strings (f"{x=}"); - underscores in numeric literals; - trailing commas after * or ** in function signatures and calls; - positional only arguments in function signatures and lambdas; - assignment expression; - relaxed decorator syntax; - usage of __future__ flags (annotations); - print / exec statements; - parenthesized context managers; - match statements; - except* clause; - variadic generics; c3VK|]!}|jtjk(#ywr^)rrQEQUAL.0childs rd z$get_features_used..]sM%EJJ%++-M')rrVrrWc3VK|]!}|jtjk(#ywr^rr> star_exprrs rdrz$get_features_used..sUUEJJ$..0UrrYrXrc3VK|]!}|jtjk(#ywr^rrs rdrz$get_features_used..s$B -2EJJ$.. (B rras)Err4 pre_orderrrQ FSTRING_STARTrr6 F_STRINGS TSTRING_STARTrRBRACEparentanychildrenDEBUG_F_STRINGSr<rpNUMERIC_UNDERSCORESSLASHr> typedargslistarglist varargslistPOS_ONLY_ARGUMENTS COLONEQUALASSIGNMENT_EXPRESSIONS decoratorrr=RELAXED_DECORATORSCOMMArrr;argument return_stmt yield_exprtestlist_star_exprUNPACKING_ON_FLOW annassignANN_ASSIGN_EXTENDED_RHS with_stmtatomLPAR_contains_asexprRPARr match_stmtPATTERN_MATCHING subscriptlisttrailerVARIADIC_GENERICS tname_starr type_stmt typeparams TYPE_PARAMS typevartuple paramspectypevarrTYPE_PARAM_DEFAULTS except_clauseSTARtestlist EXCEPT_STARNAMEr) rrr future_importnrchargch atom_childrenis_star_except has_as_clauses rdget_features_usedr9s(!UH!/  66 #= 1   ^^ AC 66U(( ( LL** + VVu** * LL** + FFell "$M188;L;LMM LL00 1 Q agg~ W889 VVu{{ "xxAHHMM""   .  W778 VVu'' ' LL77 8 VVt~~ %1::"+I 1 , W778 FFt))4<<8 8  2##u{{2vv+++!77!88jj 277e#LL)77dmm+!#2 ::.$LL12  2 FFt''9 9AJJ1$ 1 ""d&=&==Uajjm>T>TUU LL22 3 FFdnn $AJJ1$ 1 ""d&=&== LL88 9 FFdnn $AJJ!# 1 ""dii/JJqM22MM"a'!!$))UZZ7$]1%56!!$))UZZ7 WCCD VVt & LL11 2 VV**DLL9 9cB 67jjB ?  LL22 3 FFdoo %AJJ1$ 1 ""dnn4 LL22 3 VV8 8 LL,, - FFt(($..$,,G G 2##u{{2 LL44 5 FFd(( (AJJ1$ 1 ""ejj0AJJqM4F4F$--4WZZ]//5::=N W001AJJ>A#55AJJ~12775::EAJJ~1288D@ !AJJqM$6$6$--$G&1::a=+=+=+N WAABCACF OS sg c|jtjk(ry|jtjk(rt |j dk(rl|j djt jk(rB|j djt jk(rt|j dSy|jtjk(rtd|j DSy)z-Return True if `node` contains an as-pattern.TrXrrWrVc32K|]}t|ywr^)rrs rdrz#_contains_asexpr..sFu#E*FsF) rr> asexpr_testrrrrQrrr testlist_gexpr)rs rdrrs yyD$$$ dii   ! # a %%3 a %%3#DMM!$45 5  d(( (F FFF rfcht||}tDchc]}|t|ks|c}Scc}w)z5Detect the version to target based on the nodes used.r)rr9r5)rrrrs rdrrs;!nEH, import_as_namerimport_as_namesAssertionError)rr orig_nameget_imports_from_childrens rdrz5get_future_imports..get_imports_from_childrens GE%&::+++%t222!NN1- !)T2T4TT2 ~~3U5UU3oo%t3334U^^DDD%%EFF GEs3DB7D.D/DrrWrV __future__rX)rrr/rrrrr> simple_stmtrrRrrQSTRINGNEWLINE import_fromrp)rimportsr first_child module_namers @rdrrsAGGDHG3d?9SG$ ::)) ) . N+nnQ' k4 (ENN#q($$ 4NN1%**emm;  N  !1!1 1%..q1Kk40K4E4E4U N s4[5I5I!"5MNO OG  N32 NrfchdtdtjdtjS)NzBlack z on Python (r)rplatformpython_implementationpython_versionrmrfrd _black_infor's8  1134Bx7N7N7P6Q Srfrec  t|} t|}dj t|}dj t|}||k7r1tt||d d }tdtd |dy#t$r}td|d|d}~wwxYw#t$rZ}tdj t j |j|}tdtd|d|dd}~wwxYw) z:Raise AssertionError if `src` and `dst` aren't equivalent.zCcannot use --safe with this file; failed to parse source file AST: z~ This could be caused by running Black with an older Python version that does not support new syntax used in your source file.NrbINTERNAL ERROR: z produced invalid code: ze. Please report a bug on https://github.com/psf/black/issues. This invalid output might be helpful: rrrrez produced code that is not equivalent to the source. Please report a bug on https://github.com/psf/black/issues. This diff might be helpful: ) rHr.rErArr/ format_tb __traceback__rrIr@)rrresrc_astr3dst_astlog src_ast_str dst_ast_strs rdriri.s3C.C.))M'23K))M'23Kk!4 [%GH{}o.--0E 3   ")  QeI I    2779#6#6s7H7H#IJCP{}o-EcUK558E ;   s/ B B% B" BB"% D.ADDc |ryt|||}||k7rHtt|t||ddt||dd}t dt d|dy)zDRaise AssertionError if `dst` reformats differently the second time.Nrhrz first passz second passr z produced different code on the second pass of the formatter. Please report a bug on https://github.com/psf/black/issues. This diff might be helpful: )rrArr@rr)rrrerrnewdstr%s rdrjrjOs cE :F f} I c8\ 2 flM :  {}o.RRUQV X    rfc#Kdyw)zWReturn an empty context manager. To be used like `nullcontext` in Python 3.7. NrmrmrfrdrRrRks  scTttddr ddlm}|t y)NfrozenFrfreeze_support)getattrrmultiprocessingr.rr-s rd patched_mainr1tssHe$2Frf__main__)r\N)rSrrrrrr/collections.abcrrrrr contextlibr dataclassesr r r enumr json.decoderr pathlibrrtypingrrrr~ click.corermypy_extensionsrpathspecrpathspec.patterns.gitwildmatchr_black_versionrr black.cacherblack.commentsr black.constrrrr black.filesrrr r!r"r#r$r%r&r'black.handle_ipynb_magicsr(r)r*r+r,r-r. black.linegenr/r0r1 black.linesr2r3 black.moder4r5r6r7r8r9r: black.nodesr;r<r=r> black.outputr?r@rArBrCrD black.parsingrErFrGrHrI black.rangesrJrKrLrM black.reportrNrOrPblib2to3.pgen2rQblib2to3.pytreerRrS__file__rCOMPILEDr FileContentEncodingNewLinerUFileModeContext ParameterrrrOptiontuplerrrrroptionintChoicerlowerrsortedIntRangeversion_optionrrr pass_contextrlrrrrr rjr<r,rkrOrzrrnrorbytesrNrrrrrrirjrRr1rg)rs0rdrasY  &'('' &&C1,   <;4KK#??TTMM 98 & > O 3  --* > >$>7?}> c]>B    %)#Y  BE     5 }}5u||U__<=5BGS/5 -5' }}'u||U__<='BGS/' ']'CGCLS S ??S C=Sgcl S)D(+;< .  dH3-UV   1  }=!qvv||~= > +  Q   ;   @   $$(IIf5G.H$I#JKB B    2  !  5  !  @    4   '  w/!qvv/ 0 -  2   >   X   Q    #    !   (   BCSASST  V    6   "       !   A   0   0   <   +XE4+HI181134B7Nx7N7N7P6Q S tdTd      @    V! V! 3-V!V!' V!  V!  V!#V! V! V! V! V!! V!!V! $V! $V! !V!"#V!$"']%V!& 'V!()V!*sm+V!,S\-V!.gcl #/V!0WS\*1V!2GCL)3V!4SM5V!6c]7V!8 sCx9V!: SM;V!<=V!> ?V!                W tV!r_ _ sCx_  _  _ S\ _gcl #_WS\*_GCL)_ _SM_ Y_R*,& & &&  &  & eCHo && &@ d*,:% :% :%:%  :%  :% eCHo &:%:% :%:%B&LL A*,A A A A A  A eCHo &A AN"%LL)+ 7 7c]7 7  7 eCHo & 7 7~*, FFF  F eCHo & F  F,*,     eCHo &   8"S"4"t""J '.c2 't 'cDBLN,, $,-7c3h-H,,`LNJ%J% $J%-7c3h-HJ%J%Z .e .4 .E+x2P,Q .H9=_ _#+CH#5_\_D 5t,  "9= #+CH#5/T/c#h/dS3STDMO ".8sCx.I 8 Xd^    zNE,>R0s /#c(c-&