TL i7ddlZddlZddlZddlZddlmZddlmZddlm Z dZ dZ ddZ dZ d Zd Zd Zd Zd ZdZGddeZedZddZdZdZy)N)chain)contextmanager)treec|j}d|vsd|vrytjjtj dd}t tjtj|dzt|S)Nz dist-packagesz site-packagesFlibpythonz\d.\d) partsospathjoinsysprefixboolrematchescapestr)r r base_paths \/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/jedi/inference/helpers.pyis_stdlib_pathr sa JJE%?e#; SZZ9I 9-8#d)D EEctj|}g}|jD]\}t|tjrtj|}||_nt |}||_|j|^||_|S)zO Much, much faster than copy.deepcopy, but just for parser tree nodes. )copychildren isinstancerLeafparent deep_ast_copyappend)objnew_obj new_childrenchild new_childs rrrs~ iinGL' eTYY ' %(I&I %e,I&I I&'$G Nrc|j}|jdk(r!ddlm}|j |j S|jdk7s ||j d|j dfvr>|dk(rddlm}|S|jdk(r|j|S|j|S|j}|j j|}|r|}n|d z}|jd k(r;|} | d z} |j | } | jdk7rn%|j | d z|} n|j d} |j d |} | d k(r | d} | d d } |j| } dd l m } | D] }| || |} | S)a Creates a "call" node that consist of all ``trailer`` and ``power`` objects. E.g. if you call it with ``append``:: list([]).append(3) or None You would get a node with the content ``list([]).append`` back. This generates a copy of the original ast node. If you're using the leaf, e.g. the bracket `)` it will return ``list([])``. We use this function for two purposes. Given an expression ``bar.foo``, we may want to - infer the type of ``foo`` to offer completions after foo - infer the type of ``bar`` to be able to jump to the definition of foo The option ``cut_own_trailer`` must be set to true for the second purpose. fstringr)compiledtrailer:) NO_VALUESatom error_nodeawaitN) infer_trailer) rtypejedi.inferencer'get_string_value_setinference_staterjedi.inference.base_valuer+ infer_nodeindexjedi.inference.syntax_treer0)contextleafcut_own_trailerr(r'r+powerr7cutstartbasetrailersvaluesr0s rinfer_call_of_leafrB-s&kkG||y +,,W-D-DEE ||y D1A1A!1DgFVFVWYFZ0[$[ 3; ;  <<6 !%%g. .!!$'' NNE NN  )Eai zz\! QJE>>%(DyyI%  >>%!)C0~~a >>!C( w{AB<    %F89w89 Mrc |j}ttjd|DS#t$r|j dk(r|gcYSgcYSwxYw)Nc32K|]}t|ywN)get_names_of_node).0cs r z$get_names_of_node..xs'O(9!(<'Osname)rlistr from_iterableAttributeErrorr1)noders rrFrFosXQ==E'''Oh'OOPP  99 6MI s 3AAAcf|jxr t|jdtSN)default) is_compiledrget_safe_valuervalues r is_stringrV{s,     V:e.B.B4.B.PRU#VVrc2t|xs t|SrE) is_numberrVrTs r is_literalrYs U  /y//rcD|jd}t||r|SyrP)rSr)rUaccepts r_get_safe_value_or_noner\s)   .E%  !rc"t|tSrE)r\intrTs rget_int_or_noner_ "5# ..rc"t|tSrE)r\rrTs rget_str_or_nonerbr`rc2t|ttfduSrE)r\r^floatrTs rrXrXs "53, 7t CCrc eZdZy)SimpleGetItemNotFoundN)__name__ __module__ __qualname__rrrfrfsrrfc'FK dy#|$r}t|d}~wwxYwwrE)rf)exception_classeses rreraise_getitem_errorsrns(' '#A&&'s! ! !c^d}g}|ddD]}|dvr|r |t|jz }#|jdk(r4|jdddD]}|j |||usna||fS|jdk(r|j |||us||fS|dk(r|rg}||fS||fS)Nrr-).z... dotted_namerJ,)lenrUr1rr)nodesis_import_from until_nodelevelnamesrNns rparse_dotted_namesr{s E Eab  < TZZ( YY- ']]3Q3'  Q ?    %<YY& LL z! %<S[!  %</. %<rcN|j|ddj|dS)Nr)) import_modulepy__getattribute__)r4rys rvalues_from_qualified_namesrs(  ( (s 4 G Gb RRrcJ|jj}|y|ddvS)NFr)pandasnumpy tensorflow matplotlib)get_root_context string_names)r9rs ris_big_annoying_libraryrs1++-::L ?M MMr)FrE)rr rr itertoolsr contextlibr parso.pythonrrrrBrFrVrYr\r_rbrX Exceptionrfrnr{rrrjrrrs % F,?D QW0 //D I '':SNr