+
    e4                        R t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIH	t	 ^ RI
Ht ^ RIHtHt ^ RIHt ^ RIHt ^ RIHt ^ RIHtHtHt ^ R	IHt ]P6                  P9                  ]P6                  P;                  ]4      R
4      t^t R t!R t"R t#R t$R t% ! R R4      t& ! R R]&4      t' ! R R]&4      t( ! R R4      t) ! R R4      t* ! R R4      t+R# )a  
Makes it possible to do the compiled analysis in a subprocess. This has two
goals:

1. Making it safer - Segfaults and RuntimeErrors as well as stdout/stderr can
   be ignored and dealt with.
2. Make it possible to handle different Python versions as well as virtualenvs.
N)partial)Thread)pickle_dumppickle_load)debug)memoize_method)	functions)DirectObjectAccess
AccessPathSignatureParam)InternalErrorz__main__.pyc                      \         P                  R 8X  d    \        P                  pW!R&   R\
        P                  9   VR&   \        P                  ! V / VB #   \         d    Rp L?i ; i)nti   creationflagsposix	close_fds)osname
subprocessCREATE_NO_WINDOWAttributeErrorsysbuiltin_module_namesPopen)argskwargsr   s   *, M/usr/lib/python3/dist-packages/jedi/inference/compiled/subprocess/__init__.py_GeneralizedPopenr   !   sl    	ww$	*):: #3 "S%=%==F;T,V,,  	*)	*s   A A'&A'c                 b    \        V P                  R 4       F  pVP                  V4       K  	  R# )    N)iterreadlineput)outqueue_lines   && r   _enqueue_outputr&   0   s#    S\\3'

4 (r   c                       V P                  4       pVP                  RR4      p\        P                  ! RVP	                  R4      ,          4       KR    \
        P                   d     R# i ; i)Tutf-8replacezstderr output: %s
N)
get_nowaitdecoder   warningrstripqueueEmpty)stderr_queuer%   s   & r   _add_stderr_to_debugr2   5   sY    
	**,D;;w	2DMM-D0AAB{{ 		s   AA A,+A,c                 "    \        \        V 4      # N)getattrr   )r   s   &r   _get_functionr6   A   s    9d##r   c                 $    V P                  4        V P                  4        VP                  4        V P                  V P
                  V P                  3 F  p VP                  4        K  	  R #   \         d     LZi ; i  \         d     K9  i ; ir4   )killwaitOSErrorjoinstdinstdoutstderrclose)processthreadstreams   && r   _cleanup_processrC   E   sw     KKM=='..'..A	LLN B	    		s#    A/ B /A=<A= BBc                   8   a  ] tR t^Ut o R tR tR tR tRtV t	R# )_InferenceStateProcessc                j    \         P                  ! V4      V n        \        V4      V n        / V n        R # r4   )weakrefref_inference_state_weakrefid_inference_state_id_handles)selfinference_states   &&r   __init___InferenceStateProcess.__init__V   s'    (/O(D%#%o#6 r   c                    \        V4      p V P                  V4      #   \         d=    \        T P	                  4       T4      p\        YT4      pT P                  T4       Tu # i ; ir4   )rJ   get_access_handleKeyErrorr	   rI   AccessHandleset_access_handle)rM   objid_accesshandles   &&   r   get_or_create_access_handle2_InferenceStateProcess.get_or_create_access_handle[   sd    g	))#.. 	'(E(E(GMF!$4F""6*M		s    AA%$A%c                (    V P                   V,          # r4   )rL   )rM   rW   s   &&r   rR   (_InferenceStateProcess.get_access_handlee   s    }}S!!r   c                6    WP                   VP                  &   R # r4   )rL   rJ   )rM   rY   s   &&r   rU   (_InferenceStateProcess.set_access_handleh   s    #)fii r   )rL   rK   rI   N)
__name__
__module____qualname____firstlineno__rO   rZ   rR   rU   __static_attributes____classdictcell____classdict__s   @r   rE   rE   U   s     
"* *r   rE   c                   *   a  ] tR t^lt o RtR tRtV tR# )InferenceStateSameProcessz
Basically just an easy access to functions.py. It has the same API
as InferenceStateSubprocess and does the same thing without using a subprocess.
This is necessary for the Interpreter process.
c                H    \        \        V4      V P                  4       4      # r4   )r   r6   rI   rM   r   s   &&r   __getattr__%InferenceStateSameProcess.__getattr__r   s    }T*D,I,I,KLLr    N)r`   ra   rb   rc   __doc__rl   rd   re   rf   s   @r   ri   ri   l   s     
M Mr   ri   c                   D   a a ] tR t^vt oV 3R ltR tR tR tRtVt	V ;t
# )InferenceStateSubprocessc                @   < \         SV `  V4       R V n        W n        R# )FN)superrO   _used_compiled_subprocess)rM   rN   compiled_subprocess	__class__s   &&&r   rO   !InferenceStateSubprocess.__init__w   s    )
$7!r   c                .   a a \        V4      oVV 3R  lpV# )c                     < R Sn         SP                  P                  SP                  4       SV VR7      pSP	                  V4      # )T)r   r   )rt   ru   runrI   _convert_access_handles)r   r   resultfuncrM   s   *, r   wrapper5InferenceStateSubprocess.__getattr__.<locals>.wrapper   sM    DJ..22--/	 3 F //77r   )r6   )rM   r   r   r~   s   f& @r   rl   $InferenceStateSubprocess.__getattr__|   s    T"	8 r   c                  a  \        V\        4      '       d"   \        S P                  \        V4      4      !  # \        V\        4      '       d3   \        ;QJ d    . V 3R  lV 4       F  NK  	  5# ! V 3R  lV 4       4      # \        V\        4      '       d"   V Uu. uF  pS P                  V4      NK  	  up# \        V\
        4      '       d    S P                  VP                  4      pV# \        V\        4      '       d%   \        S P                  VP                  4      4      # V# u upi   \         d'    TP                  S 4       S P                  T4        T# i ; i)c              3   F   <"   T F  pSP                  V4      x  K  	  R # 5ir4   )r|   ).0orM   s   & r   	<genexpr>CInferenceStateSubprocess._convert_access_handles.<locals>.<genexpr>   s     F#Q55a88#s   !)
isinstancer   r|   tuplelistrT   rR   rJ   rS   add_subprocessrU   r
   accesses)rM   rV   r   s   f& r   r|   0InferenceStateSubprocess._convert_access_handles   s   c>**!4#?#?c
#KLLU##5F#F5F5F#FFFT""=@ASD003SAA\**,,,SVV4 
 Z((d::3<<HII
 B
  ,""4(&&s+ 
,s   D(D- --EEc                    V P                   '       dF   V P                  P                  '       g(   V P                  P                  V P                  4       R # R # R # r4   )rt   ru   
is_crasheddelete_inference_staterK   rM   s   &r   __del__ InferenceStateSubprocess.__del__   s>    :::d77BBB%%<<T=U=UV C:r   )ru   rt   )r`   ra   rb   rc   rO   rl   r|   r   rd   re   __classcell__)rw   rg   s   @@r   rq   rq   v   s      8
&$W Wr   rq   c                   r   a  ] tR t^t o RtRR ltR t]R 4       tR/ 3R lt	R t
R tR/ 3R	 ltR
 tRtV tR# )CompiledSubprocessFNc                b    Wn         W n        \        P                  ! 4       V n        R  V n        R# )c                      R # r4   rn   rn   r   r   <lambda>-CompiledSubprocess.__init__.<locals>.<lambda>   s    r   N)_executable	_env_varscollectionsdeque_inference_state_deletion_queue_cleanup_callable)rM   
executableenv_varss   &&&r   rO   CompiledSubprocess.__init__   s&    %!/:/@/@/B,!-r   c           	         \         P                  ! 4       pR V P                  P                  : RV P                  : RV P
                  : RV: R2	# )<z _executable=z, is_crashed=z, pid=>)r   getpidrw   r`   r   r   )rM   pids   & r   __repr__CompiledSubprocess.__repr__   s7    iikNN##OO	
 	
r   c                   \         P                  ! R V P                  4       \        P                  R,          P
                  pV P                  \        \        P                  P                  \        P                  P                  V4      4      RP                  R \        P                  R,           4       4      3p\        V\        P                  \        P                  \        P                  V P                  R7      p\         P"                  ! 4       V n        \'        \(        VP*                  V P$                  3R7      ;V n        pRVn        VP1                  4        \2        P4                  ! V \6        VV4      V n        V# )zStart environment subprocess %sparso.c              3   8   "   T F  p\        V4      x  K  	  R # 5ir4   )str)r   xs   & r   r   2CompiledSubprocess._get_process.<locals>.<genexpr>   s     :%9SVV%9s   :N   N)r<   r=   r>   env)targetr   T)r   dbgr   r   modules__file__
_MAIN_PATHr   pathdirnamer;   version_infor   r   PIPEr   r/   Queue_stderr_queuer   r&   r>   _stderr_threaddaemonstartrG   finalizerC   r   )rM   
parso_pathr   r@   ts   &    r   _get_processCompiledSubprocess._get_process   s   		3T5E5EF[[)22
GGOOBGGOOJ78HH:S%5%5b%9::	
 $//????
 #[[]"("..$"4"45#
 	
a 		 ")!1!1$2B2923"5 r   c                      V P                   P                  4       pV P                  VR4       K0    \         d     Mi ; i\	        T4      '       g   Q hT P                  \        T4      Y#T4      # TN)r   pop_send
IndexErrorcallablerJ   )rM   rN   functionr   r   inference_state_ids   &&&&& r   r{   CompiledSubprocess.run   so    5%)%I%I%M%M%O" 

-t4  
 !!!!zz"_-xvFFs   1 ??c                F    V P                  R \        P                  R/ 4      # )Nrn   )r   r   get_sys_pathr   s   &r   r   CompiledSubprocess.get_sys_path   s    zz$	 6 6B??r   c                4    R V n         V P                  4        R# r   )r   r   r   s   &r   _killCompiledSubprocess._kill   s     r   c           
     8   V P                   '       d   \        R V P                  ,          4      hWW43p \        WPP	                  4       P
                  \        4        \        T P	                  4       P                  4      w  rgp\!        T P"                  4       T'       d   T3Tn        ThT#   \         d.    T P                  4        \        RT P                  ,          4      hi ; i  \         d   p	 T P	                  4       P                  P                  4       P                  RR4      p
M!  \         d   pRT,          p
 Rp?MRp?ii ; iT P                  4        \!        T P"                  4       \        RT P                  : RT	: RT
: R	24      hRp	?	ii ; i)
zThe subprocess %s has crashed.z2The subprocess %s was killed. Maybe out of memory?r(   r)   z<empty/not available (%r)>NzThe subprocess z has crashed (z	, stderr=z).)r   r   r   r   r   r<   PICKLE_PROTOCOLBrokenPipeErrorr   r   r=   EOFErrorr>   readr,   	Exceptionr2   r   r   )rM   r   r   r   r   datais_exception	tracebackr}   	eof_errorr>   excs   &&&&&       r   r   CompiledSubprocess._send   s_   ??? @4CSCS STT!T9	4//177I	.9$:K:K:M:T:T.U+LV 	T//0 %,FKL9  	4JJL T"&"2"2!3 4 4	4  	<**,3388:AA'9U <5;<JJL !3!34$$ 	sH   (B, &C' ,8C$'F38D,+F,E
7	E FE

A
FFc                <    V P                   P                  V4       R# )a  
Currently we are not deleting inference_state instantly. They only get
deleted once the subprocess is used again. It would probably a better
solution to move all of this into a thread. However, the memory usage
of a single inference_state shouldn't be that high.
N)r   append)rM   r   s   &&r   r   )CompiledSubprocess.delete_inference_state  s     	,,334FGr   )r   r   r   r   r   r   r   r4   rn   )r`   ra   rb   rc   r   rO   r   r   r   r{   r   r   r   r   rd   re   rf   s   @r   r   r      sY     J.
  > 35R G@! 8:" #JH Hr   r   c                   8   a  ] tR tRt o R tR tR tR tRtV t	R# )Listeneri  c                <    / V n         \        \        4      V n        R # r4   )_inference_statesrE   r   _processr   s   &r   rO   Listener.__init__  s    !# /x8r   c                    ^ RI Hp  V P                  V,          pV#   \         d(    ^ RIHp T! RT! 4       R7      pY@P                  T&    T# i ; i)    )InferenceState)InterpreterEnvironmentN)projectenvironment)jedi.inferencer   r   rS   jedir   )rM   r   r   r   rN   r   s   &&&   r   _get_inference_stateListener._get_inference_state#  sg    1
	I"445GHO   	I3, 24	O :I""#56	Is    .AAc                   Vf	   V! V/ VB # Vf   V P                   V R # V P                  W!4      p\        V4      p\        V4       FD  w  rg\	        V\
        4      '       g   K  VP                  P                  VP                  4      W6&   KF  	  VP                  4        FD  w  r\	        V	\
        4      '       g   K  VP                  P                  V	P                  4      WH&   KF  	  V! V.VO5/ VB # r4   )
r   r   r   	enumerater   rT   rv   rR   rJ   items)
rM   r   r   r   r   rN   iargkeyvalues
   &&&&&     r   _runListener._run3  s    %T,V,,&&'9:"77UO :D#D/c<00-AASSTWTZTZ[DG * %lln
e\22"1"E"E"W"WX]X`X`"aFK - O=d=f==r   c                   \         P                  p\        \        P                  R 4      \         n        \         P
                  pVP                  pVP                  p  \        V4      p RRV P                  ! X!  3p\        WA\        4       K3    \         d    \        ^ 4        L>i ; i  \         d#   pR\        P                  ! 4       T3p Rp?LVRp?ii ; i)wTFN)r   r=   openr   devnullr<   bufferr   r   exitr   r   r   
format_excr   r   )rM   r=   r<   payloadr}   es   &     r   listenListener.listenF  s     "**c*
		%e,
9dii&99 8   Q  9y335q89s*   B *B+ B('B(+C6CC)r   r   N)
r`   ra   rb   rc   rO   r   r   r  rd   re   rf   s   @r   r   r     s     9 >&9 9r   r   c                   Z   a  ] tR tRt o R tR tR tR tR tR t	R t
]R	 4       tR
tV tR# )rT   i^  c                *    W n         Wn        W0n        R # r4   )rX   _subprocessrJ   )rM   r   rX   rW   s   &&&&r   rO   AccessHandle.__init___  s    %r   c                    Wn         R # r4   )r  )rM   r   s   &&r   r   AccessHandle.add_subprocessd  s    %r   c                     V P                   pRV P                  P
                  : RV: R2#   \         d     R \        T P                  4      ,           p LHi ; i)#r   z of r   )rX   r   r   rJ   rw   r`   )rM   details   & r   r   AccessHandle.__repr__g  sK    	([[F  $~~66??  	(3tww<'F	(s   - 'AAc                    V P                   # r4   rJ   r   s   &r   __getstate__AccessHandle.__getstate__n  s    wwr   c                    Wn         R # r4   r  )rM   states   &&r   __setstate__AccessHandle.__setstate__q  s    r   c                    VR9   g   VP                  R4      '       d   \        R4      h\        V P                  V4      # )rJ   _z$Something went wrong with unpickling)rJ   rX   )
startswithr   r   _workaroundrk   s   &&r   rl   AccessHandle.__getattr__t  s:    ##ts';'; !GHH t''..r   c                    V'       dI   \        V^ ,          \        4      '       d,   V P                  P                  ! V P                  V.VO5/ VB # V P
                  ! V.VO5/ VB # )z
TODO Currently we're passing slice objects around. This should not
happen. They are also the only unhashable objects that we're passing
around.
)r   slicer  get_compiled_method_returnrJ   _cached_resultsrM   r   r   r   s   &&*,r   r  AccessHandle._workaround{  sZ     JtAw..##>>tww^t^W]^^##D:4:6::r   c                X    V P                   P                  ! V P                  V.VO5/ VB # r4   )r  r"  rJ   r$  s   &&*,r   r#  AccessHandle._cached_results  s*    ::477DZ4ZSYZZr   )r  rX   rJ   N)r`   ra   rb   rc   rO   r   r   r  r  rl   r  r   r#  rd   re   rf   s   @r   rT   rT   ^  s?     
&@/; [ [r   rT   ),ro   r   r   r   r/   r   r   rG   	functoolsr   	threadingr   jedi._compatibilityr   r   r   r   
jedi.cacher   "jedi.inference.compiled.subprocessr   jedi.inference.compiled.accessr	   r
   r   jedi.api.exceptionsr   r   r;   r   r   r   r   r   r&   r2   r6   rC   rE   ri   rq   r   r   rT   rn   r   r   <module>r/     s     	 
       8  % 8  - WW\\"''//(3]C
-
	$ * *.M 6 M-W5 -W`sH sHl?9 ?9D)[ )[r   