+
     i¾iÍ4  ã                   óò   € ^ RI t ^ RIt^ RIt^ RIHtHt ^ RIHt ^ RIH	t	 ]P                  ! R]P                  4      t]P                  ! R]P                  4      t] P                  ! ]4      t ! R R4      tR# )	é    N)ÚjoinÚsplit)Úexecute)ÚVersionzÉ
    (?:\#!\s*){0,1}  # shebang prefix
    (?P<path>
        .*?/bin/.*?)?
    (?P<name>
        python|pypy)
    (?P<version>
        \d[\.\d]*)?
    (?P<debug>
        -dbg)?
    (?P<options>.*)
    a-  
    (?P<name>.*?)
    (?:\.
        (?P<stableabi>abi\d+)
     |(?:\.
        (?P<soabi>
            (?P<impl>cpython|pypy)
            -
            (?P<ver>\d{2})
            (?P<flags>[a-z]*?)
        )
        (?:
            -(?P<multiarch>[^/]*?)
        )?
    ))?
    (?P<debug>_d)?
    \.so$c                   óÜ   a € ] tR t^<t o RtRtRtRtRtRt	/ t
RR ltR tR tR tR	 t]R
 4       tRR ltRR ltRR ltRR ltRR ltRR ltRR ltRR ltRR ltRR ltRR ltRtV tR# )ÚInterpreterNÚpythonFÚcpythonc                óø  € \        4       pVR  VR \        V\        4      '       d2   VP                  4        F  p	W‰,          e   K  \	        W4      W‰&   K  	  M}V'       dv   VP                  RR4      P                  4       '       d   V'       g   \        V4      VR&   M8V P                  V4      P                  4        F  w  ršW‰,          e   K  W¨V	&   K  	  VP                  4        F  w  rš\        W	V
4       K  	  R# )ÚselfÚvalueNÚ.Ú Úversion)ÚlocalsÚ
isinstancer   ÚkeysÚgetattrÚreplaceÚisdigitr   ÚparseÚitemsÚsetattr)r   r   ÚpathÚnamer   ÚdebugÚimplÚoptionsÚparamsÚkeyÚvals   &&&&&&&&   Ú+/usr/share/python3/debpython/interpreter.pyÚ__init__ÚInterpreter.__init__E   sÂ   € ä“ˆØ�6ˆNØ�7ˆOä�eœ[×)Ò)Ø—{‘{–}�Ø•;Ô&Ü")¨%Ó"5�F“Kò %÷ Ø�}‰}˜S "Ó%×-Ñ-×/Ò/¿Ü$+¨E£N��yÒ!à $§
¡
¨5Ó 1× 7Ñ 7Ö 9‘H�CØ•{Ô*Ø&)˜s›ñ !:ð Ÿ™ž‰HˆCÜ�D˜sÖ#ó 'ó    c                óˆ  € VR 8X  dm   V'       de   VP                  R4      '       d   RV P                  R&   M&VP                  R4      '       d   RV P                  R&   RV9   d   RV P                  R&   MVR8X  d   Ve   \        V4      pVR
9   d$   Vf    \        \        V4      V P                  V&   R	# W P                  V&   R	# )r   r	   r
   r   Úpypyz-dbgTr   r   N)r   r   r   r   )Ú
startswithÚ__dict__r   r   r   )r   r   r   s   &&&r"   Ú__setattr__ÚInterpreter.__setattr__Z   s£   € Ø�6Œ>ŸeØ×Ñ ×)Ò)Ø(1�—‘˜fÒ%Ø×!Ñ! &×)Ò)Ø(.�—‘˜fÑ%Ø˜ŒØ)-�—‘˜gÑ&øØ�YÔ 5Ò#4Ü˜E“NˆEØÐ7Ô7¸EºMä")¬+°tÓ"<ˆD�M‰M˜$Óà"'�M‰M˜$Ór%   c                óê   € V P                   ;'       g    R pWP                  V P                  4      ,          pV P                  '       d*   VRRP	                  V P                  4      ,           ,          pV# )r   Ú )r   Ú_vstrr   r   r   )r   Úresults   & r"   Ú__repr__ÚInterpreter.__repr__j   sP   € Ø—‘—�˜bˆØ—*‘*˜TŸ\™\Ó*Õ*ˆØ�<�<ˆ<Ø�c˜CŸH™H T§\¡\Ó2Õ2Õ2ˆFØˆr%   c                ó8   € V P                  V P                  4      # ©N)r.   r   )r   s   &r"   Ú__str__ÚInterpreter.__str__q   s   € Ø�z‰z˜$Ÿ,™,Ó'Ð'r%   c                ó  € V P                   R 8X  d   V P                  # V'       dZ   \        V4      V P                  9  d@   V P                  '       d   RP	                  V4      # V P                  \        V4      ,           # V P                  # )r'   zpython{}-dbg)r   r   Ústrr   Úformat©r   r   s   &&r"   r.   ÚInterpreter._vstrt   sa   € Ø�9‰9˜Ôà—9‘9Ðß”s˜7“|¨4¯9©9Ô4Ø�z�zˆzØ%×,Ñ,¨WÓ5Ð5Ø—9‘9œs 7›|Õ+Ð+Ø�y‰yÐr%   c                ó¸   € \         P                  V 4      pV'       g   / # VP                  4       pRV9   d$   \        VR,          P	                  4       4      VR&   V# )aS  Return dict with parsed shebang

>>> sorted(Interpreter.parse('pypy').items())
[('debug', None), ('name', 'pypy'), ('options', ()), ('path', None), ('version', None)]
>>> sorted(Interpreter.parse('/usr/bin/python3.3-dbg').items())
[('debug', '-dbg'), ('name', 'python'), ('options', ()), ('path', '/usr/bin/'), ('version', '3.3')]
>>> sorted(Interpreter.parse('#! /usr/bin/pypy --foo').items())
[('debug', None), ('name', 'pypy'), ('options', ('--foo',)), ('path', '/usr/bin/'), ('version', None)]
>>> sorted(Interpreter.parse('#! /usr/bin/python3.2').items())
[('debug', None), ('name', 'python'), ('options', ()), ('path', '/usr/bin/'), ('version', '3.2')]
>>> sorted(Interpreter.parse('/usr/bin/python3.2-dbg --foo --bar').items())
[('debug', '-dbg'), ('name', 'python'), ('options', ('--foo', '--bar')), ('path', '/usr/bin/'), ('version', '3.2')]
r   )Ú
SHEBANG_REÚsearchÚ	groupdictÚtupler   )Úshebangr/   s   & r"   r   ÚInterpreter.parse~   sT   € ô  ×"Ñ" 7Ó+ˆßØˆIØ×!Ñ!Ó#ˆØ˜Ôä % f¨YÕ&7×&=Ñ&=Ó&?Ó @ˆF�9ÑØˆr%   c                ó<  € \        T;'       g    V P                  4      pV P                  R8X  d   RpMFV\        R4      ,          '       d   RV,          pM$V\        R4      ,          '       d   RV,          pMRpV'       d
   RV,          pV'       d
   R	V: V: 2pV# )
ag  Return path to site-packages directory.

Note that returned path is not the final location of .py files

>>> i = Interpreter('python')
>>> i.sitedir(version='3.1')
'/usr/lib/python3/dist-packages/'
>>> i.sitedir(version='2.5')
'/usr/lib/python2.5/site-packages/'
>>> i.sitedir(version=Version('2.7'))
'/usr/lib/python2.7/dist-packages/'
>>> i.sitedir(version='3.1', gdb=True, package='python3-foo')
'debian/python3-foo/usr/lib/debug/usr/lib/python3/dist-packages/'
>>> i.sitedir(version=Version('3.2'))
'/usr/lib/python3/dist-packages/'
>>> Interpreter('pypy').sitedir(version='2.0')
'/usr/lib/pypy/dist-packages/'
r'   z/usr/lib/pypy/dist-packages/ú2.6z /usr/lib/python%s/site-packages/z3.0z /usr/lib/python%s/dist-packages/z/usr/lib/python3/dist-packages/z/usr/lib/debug%szdebian/)r   r   r   )r   ÚgdbÚpackager   r   s   &&&& r"   ÚsitedirÚInterpreter.sitedir—   s…   € ô& ˜'×1Ð1 T§\¡\Ó2ˆð �9‰9˜ÔØ1‰DØœ ›×&Ô&Ø5¸Õ?‰DØœ ›×&Ô&Ø5¸Õ?‰Dà4ˆDçØ%¨Õ,ˆDßˆ7Ú$+ªTÐ2ˆDàˆr%   c           	     óH  € \        T;'       g    V P                  4      pRV P                  9   d   RMRpV\        R4      8:  d	   W,           # \        V4      w  rEVP	                  R4      '       g
   VR,          p\        VRVRR	 : RV P                  V4      : RV: 24      # )
a^  Given path to a .py file, return path to its .pyc/.pyo file.

This function is inspired by Python 3.2's imp.cache_from_source.

:param fpath: path to file name
:param version: Python version

>>> i = Interpreter('python')
>>> i.cache_file('foo.py', Version('3.1'))
'foo.pyc'
>>> i.cache_file('bar/foo.py', '3.2')
'bar/__pycache__/foo.cpython-32.pyc'
z-OÚoÚcú3.1z.pyÚ__pycache__Nr   éýÿÿÿ)r   r   r   r   Úendswithr   Ú	magic_tag)r   Úfpathr   Ú	last_charÚfdirÚfnames   &&&   r"   Ú
cache_fileÚInterpreter.cache_file½   s“   € ô ˜'×1Ð1 T§\¡\Ó2ˆØ 4§<¡<Ô/‘C°Sˆ	Ø”g˜e“nÔ$ØÕ$Ð$ä˜E“l‰ˆØ�~‰~˜e×$Ò$Ø�U�NˆEÜ�D˜-Ø˜3˜B“Z §¡°Ö!8º)ð*Eó Fð 	Fr%   c                óÂ  € \        T;'       g    V P                  4      pV P                  V4      w  r4VP                  R^4      ^ ,          pV'       d9   VRP	                  V4      ,          pV'       d   VRP	                  V4      ,          pV P
                  '       d3   V P                  R8X  d"   V\        R4      ,          '       d
   VR,          pRP	                  V4      # )z5Return extension name with soname and multiarch tags.r   z.{}z-{}r
   Ú3Ú_dz{}.so)r   r   Ú_get_configr   r8   r   r   )r   r   r   ÚsoabiÚ	multiarchr/   s   &&&   r"   Úext_fileÚInterpreter.ext_fileÖ   s§   € ä˜'×1Ð1 T§\¡\Ó2ˆØ×+Ñ+¨GÓ4ÑˆØ—‘˜C Ó# AÕ&ˆßØ�e—l‘l 5Ó)Õ)ˆFßØ˜%Ÿ,™, yÓ1Õ1�Ø�:�:ˆ:˜$Ÿ)™) yÔ0Øœw s›|×+Ô+Ø�d�NˆFØ�~‰~˜fÓ%Ð%r%   c                óÐ   € \        T;'       g    V P                  4      pV P                  R8X  d   V\        R4      ,          '       d   R# V P                  RV4      p\	        V4      # )zReturn magic number.r
   rW   r   z9import importlib.util; print(importlib.util.MAGIC_NUMBER))r   r   r   Ú_executeÚeval)r   r   r/   s   && r"   Úmagic_numberÚInterpreter.magic_numberä   sQ   € ä˜'×1Ð1 T§\¡\Ó2ˆØ�9‰9˜	Ô! g´¸³×&=Ô&=ÙØ—‘ÐZÐ\cÓdˆÜ�F‹|Ðr%   c                óº   € \        T;'       g    V P                  4      pV P                  R8X  d   V\        R4      ,          '       d   R# V P                  RV4      # )z‹Return Python magic tag (used in __pycache__ dir to tag files).

>>> i = Interpreter('python')
>>> i.magic_tag(version='3.2')
'cpython-32'
r
   ú3.2r   z/import sys; print(sys.implementation.cache_tag))r   r   r   r_   r9   s   &&r"   rO   ÚInterpreter.magic_tagì   sJ   € ô ˜'×1Ð1 T§\¡\Ó2ˆØ�9‰9˜	Ô! g´¸³×&?Ô&?ÙØ�}‰}ÐNÐPWÓXÐXr%   c                ó¾   € \        T;'       g    V P                  4      p V P                  V4      w  r#V#   \         d    \        P                  RRR7        R# i ; i)zReturn multiarch tag.zcannot get multiarchT©Úexc_infor   ©r   r   rY   Ú	ExceptionÚlogr   ©r   r   rZ   r[   s   &&  r"   r[   ÚInterpreter.multiarchø   s]   € ä˜'×1Ð1 T§\¡\Ó2ˆð	Ø#×/Ñ/°Ó8ÑˆEð
 Ðøô	 ô 	Ü�I‰IÐ,°tˆIÔ<âð	úó   ¡6 ¶"AÁAc                óÐ   € \        T;'       g    V P                  4      pV P                  R 8X  d6   V\        R4      ,	          '       d   RP                  VP                  4      # R# R# )r
   rd   zabi{}N)r   r   r   r8   Úmajorr9   s   &&r"   Ú	stableabiÚInterpreter.stableabi  sN   € Ü˜'×1Ð1 T§\¡\Ó2ˆà�9‰9˜	Ô! g´¸³×&?Ô&?Ø—>‘> '§-¡-Ó0Ð0ñ '@Ñ!r%   c                ó¾   € \        T;'       g    V P                  4      p V P                  V4      w  r#V#   \         d    \        P                  RRR7        R# i ; i)z{Return SOABI flag (used to in .so files).

>>> i = Interpreter('python')
>>> i.soabi(version=Version('3.3'))
'cpython-33m'
zcannot get soabiTrg   r   ri   rl   s   &&  r"   rZ   ÚInterpreter.soabi	  s^   € ô ˜'×1Ð1 T§\¡\Ó2ˆð	Ø#×/Ñ/°Ó8ÑˆEð
 ˆøô	 ô 	Ü�I‰IÐ(°4ˆIÔ8âð	úrn   c                óJ  € \        T;'       g    V P                  4      pRV9   d   VP                  R^4      w  r1MRp\        P	                  V4      pV'       g   R# VP                  4       pVR,          '       d   R# \        WR7      pVR,          '       d4   RP                  VR,          ^ ,          VR,          ^,          4      Vn        VP                  '       g/   VR,          '       g   R	VR
,          ;'       g    R9   d   RVn         VP                  4       w  rgTR,          pTP                  R8X  d6   TP                  R,	          '       d   TP                  R4      '       d   TRR pTR,          '       g	   T'       d\   RP                  Y„R,          ;'       g    T4      pTR,          '       g	   T'       d#   RP                  Y„R,          ;'       g    T4      pTR,          pY8X  d   R# \        Y84      #   \         d    \        P                  RRR7        R# i ; i)aP  Return extension file name if file can be renamed.

>>> i = Interpreter('python')
>>> i.check_extname('foo.so', version='3.3') # doctest: +ELLIPSIS
'foo.cpython-33m-....so'
>>> i.check_extname('foo.abi3.so', version='3.3')
>>> i.check_extname('foo/bar/bazmodule.so', version='3.3') # doctest: +ELLIPSIS
'foo/bar/baz.cpython-33m-....so'
Ú/r   Nrq   )r   Úverz{}.{}r   ÚdÚflagsTzcannot get soabi/multiarchrg   r   r
   rd   ÚmodulerZ   r[   z{}-{}z.soiúÿÿÿ)r   r   ÚrsplitÚ
EXTFILE_REr=   r>   r   r8   r   rY   rj   rk   r   rN   r   )	r   rS   r   rR   ÚinfoÚirZ   r[   r/   s	   &&&      r"   Úcheck_extnameÚInterpreter.check_extname  s©  € ô ˜'×1Ð1 T§\¡\Ó2ˆà�%Œ<ØŸ,™, s¨AÓ.‰KˆD�%àˆDä× Ñ  Ó'ˆßÙØ�~‰~Óˆà�×Ôáä˜Ô.ˆØ��;Œ;ØŸ™ t¨E¥{°1¥~°t¸Eµ{À1µ~ÓFˆAŒIØ�w�wˆw˜D ŸMœM¨S°T¸'µ]×5HÐ5HÀbÔ-IØˆAŒGð	Ø Ÿ}™}›ÑˆEð �f•ˆØ�6‰6�YÔ 1§9¡9°×#5Ô#5¸&¿/¹/È(×:SÒ:SØ˜C˜R�[ˆFØ��=Œ=ŸEØ—^‘^ F°­M×,BÐ,B¸UÓCˆFØ�K× Ô §IØ Ÿ™¨°[Õ0A×0NÐ0NÀYÓO�à�%�ˆØŒ?ÙÜ�DÓ!Ð!øô ô 	Ü�I‰IÐ2¸TˆIÔBÚð	ús   ÄG< Ç<"H"È!H"c                ó¦  € \        T;'       g    V P                  4      pV P                  R 8X  gF   V P                  R8X  d8   VR,	          '       d   VR,          '       g   VR,	          '       g   VR8X  d   RpMRpVR,          pV P                  W!4      P	                  R4      p \
        P                  R	,          V^&   V#   \         d     T# i ; i)
r'   r
   rC   rW   rK   zimport sysconfig as s;z%from distutils import sysconfig as s;zOprint("__SEP__".join(i or "" for i in s.get_config_vars("SOABI", "MULTIARCH")))Ú__SEP__ÚDEB_HOST_MULTIARCH)r   r   r   r_   r   ÚosÚenvironÚKeyError)r   r   ÚcmdÚ	conf_varss   &&  r"   rY   ÚInterpreter._get_configK  sÃ   € Ü˜'×1Ð1 T§\¡\Ó2ˆð �9‰9˜Ô $§)¡)¨yÔ"8Ø˜5× Ô  W°§^¤^Ø˜e×#Ô# w°#¤~Ø*‰Cà9ˆCØð Dõ 	Dˆà—M‘M #Ó/×5Ñ5°iÓ@ˆ	ð	ÜŸ:™:Ð&:Õ;ˆI�a‰Lð Ðøô ô 	ØØÐð	ús   Â%C ÃCÃCc                ó6  € \        T;'       g    V P                  4      pV P                  V4      R V3pV'       d8   WP                  P                  9   d   V P                  P                  V,          # \        V4      pVR,          ^ 8w  d>   \        P                  VR,          4       \        RP                  WR,          4      4      hVR,          P                  4       p\        V4      ^8X  d
   V^ ,          pV'       d   WPP                  P                  V&   V# )z-cÚ
returncodeÚstderrz{} failed with status code {}Ústdout)r   r   r.   Ú	__class__Ú_cacher   rk   r   rj   r8   Ú
splitlinesÚlen)r   Úcommandr   ÚcacheÚoutputr/   s   &&&&  r"   r_   ÚInterpreter._execute^  sÛ   € Ü˜'×1Ð1 T§\¡\Ó2ˆØ—:‘:˜gÓ&¨¨gÐ6ˆß�W§¡× 5Ñ 5Ô5Ø—>‘>×(Ñ(¨Õ1Ð1ä˜Ó!ˆØ�,Õ 1Ô$Ü�I‰I�f˜XÕ&Ô'ÜÐ;×BÑBÀ7ÐS_ÕL`ÓaÓbÐbà˜Õ!×,Ñ,Ó.ˆäˆv‹;˜!ÔØ˜A•YˆFçØ-3�N‰N×!Ñ! 'Ñ*àˆr%   © )NNNNNNN)FNNr3   )NT)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r   r   r   r   r   r�   r#   r*   r0   r4   r.   Ústaticmethodr   rF   rT   r\   ra   rO   r[   rq   rZ   r   rY   r_   Ú__static_attributes__Ú__classdictcell__)Ú__classdict__s   @r"   r   r   <   s•   ø‡ € Ø€DØ€DØ€GØ€EØ€DØ€GØ€Fô$ò*(ò ò(òð ñó ðô0$ôLFô2&ôô
Yô	ô1ôô"/"ôb÷&ò r%   r   )Úloggingr„   ÚreÚos.pathr   r   Ú	debpythonr   Údebpython.versionr   ÚcompileÚVERBOSEr<   r|   Ú	getLoggerr—   rk   r   r–   r%   r"   Ú<module>r§      sq   ðó* Û 	Û 	ß Ý Ý %à�ZŠZð ð 
�‰ó€
ð �ZŠZð ð  �j‰jó!€
ð" ×Ò˜Ó!€÷uó ur%   