Ë
    èÿæig2  ã                   óD  — d Z ddlZddlZddlZddlZddlmZ ddlm	Z	 ddl
mZ ddlmZ d„ Z e«       ZdZdd	„Zdd
„Z G d„ de«      Zd„ Zd„ ZeefZefd„Z G d„ de«      Z G d„ de«      Z G d„ de«      Zdd„Zd„ Zdj=                  «       Zd„ Z e!dk(  r e «        yy)z´
This file contains `__main__` so that it can be run as a commandline tool.

This file contains functions to inspect Numba's support for a given Python
module or a Python package.
é    N)Úerrors)Úget_versions)Ú
cpu_target)Úcaptured_stdoutc                  óp   — t        «       d   } | s&t        j                  dt        j                  ¬«       y| S )Nzfull-revisionidz>Cannot find git commit hash. Source links could be inaccurate.)ÚcategoryÚmain)r   ÚwarningsÚwarnr   ÚNumbaWarning)Úfulls    ún/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/numba/misc/help/inspector.pyÚ_get_commitr      s4   € Ü‹>Ð+Ñ,€DÙÜ�‰ØLÜ×(Ñ(õ	
ð Ø€Kó    zLhttps://github.com/numba/numba/blob/{commit}/{path}#L{firstline}-L{lastline}c                 óŒ  — |xs t         }|j                  }|j                  «        |j                  j                  «        i }i }	 |j	                  | «      }|j                  |«      }|j                  D ]  }	 |j                  «       ||<   Œ 	 ||d<   ||d<   ||d<   |S # t        $ r d||<   Y Œ;w xY w# t        $ r d}d}Y Œ4w xY w)a“  Return information about the support of a function.

    Returns
    -------
    info : dict
        Defined keys:
        - "numba_type": str or None
            The numba type object of the function if supported.
        - "explained": str
            A textual description of the support.
        - "source_infos": dict
            A dictionary containing the source location of each definition.
    Nznot supportedÚ
numba_typeÚ	explainedÚsource_infos)
r   Útyping_contextÚrefreshÚtarget_contextÚresolve_value_typeÚexplain_function_typeÚ	templatesÚget_source_infoÚAttributeErrorÚ
ValueError)ÚfunctionÚtargetÚtyctÚinfor   Únbtyr   Útemps           r   Úinspect_functionr$   "   så   € ð Ò!”z€FØ× Ñ €Dà‡L�L„NØ
×Ñ×!Ñ!Ô#à€Dà€Lð*Ø×&Ñ& xÓ0ˆð ×.Ñ.¨tÓ4ˆ	Ø—N”NˆDð*Ø%)×%9Ñ%9Ó%;�˜TÒ"ñ #ð €DˆÑØ!€DˆÑØ'€DˆÑØ€Køô "ò *Ø%)�˜TÓ"ð*ûô ò $ØˆØ#Š	ð$ús$   ÁB3 Á8BÂB0Â/B0Â3CÃCc              #   ó„  K  — |€i n|}t        | «      D ]¨  }|j                  d«      rŒt        | |«      }t        j                  t        j
                  f}t        ||«      sŒNt        | ||¬«      }||v r	||   |d<   n dj                  | j                  |¬«      ||<   |j                  t        ||¬«      «       |–— Œª y­w)zwInspect a module object and yielding results from `inspect_function()`
    for each function object in the module.
    NÚ_)ÚmoduleÚnameÚobjÚaliasz{module}.{name})r'   r(   )r   )ÚdirÚ
startswithÚgetattrÚpytypesÚFunctionTypeÚBuiltinFunctionTypeÚ
isinstanceÚdictÚformatÚ__name__Úupdater$   )r'   r   r*   r(   r)   Úsupported_typesr!   s          r   Úinspect_moduler7   M   s¼   è ø€ ð �-‰B U€Eä�F–ˆØ�?‰?˜3ÔàÜ�f˜dÓ#ˆÜ"×/Ñ/´×1LÑ1LÐMˆä˜#˜Ô/àä˜6¨°#Ô6ˆØ�%‰<Ø! #™JˆD�ŠMà*×1Ñ1¸¿¹Ø7;ð 2ó =ˆE�#‰Jà�‰Ô$ S°Ô8Ô9Ø‹
ñ% ùs   ‚B>C c                   óB   — e Zd ZdZd„ Zed„ «       Zed„ «       Zd„ Zd„ Z	y)Ú_Statz9For gathering simple statistic of (un)supported functionsc                 ó    — d| _         d| _        y ©Nr   ©Ú	supportedÚunsupported©Úselfs    r   Ú__init__z_Stat.__init__j   s   € ØˆŒØˆÕr   c                 ó8   — | j                   | j                  z   }|S ©Nr<   )r@   Útotals     r   rD   z_Stat.totaln   s   € à—‘ ×!1Ñ!1Ñ1ˆØˆr   c                 ó>   — | j                   | j                  z  dz  }|S )Néd   )r=   rD   )r@   Úratios     r   rG   z_Stat.ratios   s   € à—‘ §¡Ñ+¨cÑ1ˆØˆr   c                 ó†   — | j                   dk(  rydj                  | j                  | j                   | j                  ¬«      S )Nr   Úemptyz0supported = {supported} / {total} = {ratio:.2f}%)r=   rD   rG   )rD   r3   r=   rG   r?   s    r   Údescribez_Stat.describex   s>   € Ø�:‰:˜Š?ØØA×HÑHØ—n‘nØ—*‘*Ø—*‘*ð Ió 
ð 	
r   c                 ól   — dj                  | j                  j                  | j                  «       ¬«      S )Nz{clsname}({describe}))ÚclsnamerJ   )r3   Ú	__class__r4   rJ   r?   s    r   Ú__repr__z_Stat.__repr__�   s0   € Ø&×-Ñ-Ø—N‘N×+Ñ+Ø—]‘]“_ð .ó 
ð 	
r   N)
r4   Ú
__module__Ú__qualname__Ú__doc__rA   ÚpropertyrD   rG   rJ   rN   © r   r   r9   r9   h   s<   „ ÙCòð ñó ðð ñó ðò
ó
r   r9   c                 ó(   — t        d„ | D «       «       S )Nc              3   ó>   K  — | ]  }|j                  d «      –— Œ y­w)r&   N)r,   ©Ú.0Úxs     r   Ú	<genexpr>z(filter_private_module.<locals>.<genexpr>‰   s   è ø€ Ð@Ñ.?¨�1—<‘< ×$Ñ.?ùs   ‚©Úany©Úmodule_componentss    r   Úfilter_private_moduler^   ˆ   s   € ÜÑ@Ñ.?Ó@Ó@Ð@Ð@r   c                 ó(   — t        d„ | D «       «       S )Nc              3   ó&   K  — | ]	  }|d k(  –— Œ y­w)ÚtestsNrS   rV   s     r   rY   z&filter_tests_module.<locals>.<genexpr>�   s   è ø€ Ð;Ñ): A�1˜•<Ñ):ùs   ‚rZ   r\   s    r   Úfilter_tests_modulerb   Œ   s   € ÜÑ;Ñ):Ó;Ó;Ð;Ð;r   c              #   ó  ‡K  — d„ }| j                   dz   }t        j                  | j                  ||¬«      }ˆfd„}| j                   } ||«      s| –— |D ]t  }|d   } ||«      rŒt	        «       5  	 t        |«      }|j                  d«      dd D ]  }		 t        ||	«      }Œ ddd«       t        t        j                  «      sŒq|–— Œv y# t        $ r Y ddd«       Œ‹w xY w# t        $ r d}Y  ŒOw xY w# 1 sw Y   ŒTxY w­w)zSYield all modules in a given package.

    Recursively walks the package tree.
    c                  ó   — y rC   rS   )r&   s    r   Ú<lambda>z)list_modules_in_package.<locals>.<lambda>›   s   € ˜tr   Ú.)Úonerrorc                 óP   •‡— | j                  d«      Št        ˆfd„‰D «       «      S )Nrf   c              3   ó0   •K  — | ]  } |‰«       –— Œ y ­wrC   rS   )rW   Ú	filter_fnr]   s     €r   rY   z@list_modules_in_package.<locals>.check_filter.<locals>.<genexpr>¦   s"   øè ø€ ð 4Ù$2�yñ !Ð!2Ó3Ô3Ù$2ùs   ƒ)Úsplitr[   )Úmodnamer]   Úmodule_filterss    @€r   Úcheck_filterz-list_modules_in_package.<locals>.check_filter¤   s,   ù€ Ø#ŸM™M¨#Ó.ÐÜó 4Ù$2ó4ó 4ð 	4r   é   N)r4   ÚpkgutilÚwalk_packagesÚ__path__r   Ú
__import__Ú	Exceptionrk   r-   r   r1   r.   Ú
ModuleType)
Úpackagerm   Úonerror_ignoreÚprefixÚpackage_walkerrn   rl   ÚpkginfoÚmodÚparts
    `        r   Úlist_modules_in_packager}   –   s  øè ø€ ñ
 $€Nà×Ñ Ñ#€FÜ×*Ñ*Ø×ÑØØô€Nô4ð
 ×Ñ€GÙ˜Ô ØŠã!ˆØ˜!‘*ˆÙ˜Ô ØäÕðä  Ó)�ð
  Ÿ™ cÓ*¨1¨2Ó.�ðÜ! # tÓ,‘Cð /÷ ô" ˜#œw×1Ñ1Ô2àà‹	ñ5 "øô ò Ø÷ Ððûô &ò à�CÚðú÷ Ðüsl   ƒA/DÁ2C8Á4CÁ?C8ÂC&Â#C8Â%*DÃ	C#ÃC8Ã	DÃ"C#Ã#C8Ã&C5	Ã1C8Ã4C5	Ã5C8Ã8D	Ã=Dc                   ó   — e Zd ZdZd„ Zd„ Zy)Ú	FormatterzBase class for formatters.
    c                 ó   — || _         y rC   )Ú_fileobj)r@   Úfileobjs     r   rA   zFormatter.__init__Í   s	   € Øˆ�r   c                 óR   — |j                  d| j                  «       t        |i |¤Ž y )NÚfile)Ú
setdefaultr�   Úprint)r@   ÚargsÚkwargss      r   r†   zFormatter.printÐ   s#   € Ø×Ñ˜& $§-¡-Ô0ÜˆtÐ�vÓr   N)r4   rO   rP   rQ   rA   r†   rS   r   r   r   r   Ê   s   „ ñò ór   r   c                   ó:   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
y	)
ÚHTMLFormatterz Formatter that outputs HTML
    c                 ó,   — dd l }|j                  |«      S r;   )ÚhtmlÚescape)r@   ÚtextrŒ   s      r   r�   zHTMLFormatter.escapeÙ   s   € ÛØ�{‰{˜4Ó Ð r   c                 ó*   — | j                  d|d«       y )Nz<h1>ú</h2>©r†   ©r@   rŽ   s     r   ÚtitlezHTMLFormatter.titleÝ   s   € Ø�
‰
�6˜4 Õ)r   c                 óL   — | j                  d|d«       | j                  d«       y )Nz<h2>r�   ú<ul>r‘   ©r@   rl   s     r   Úbegin_module_sectionz"HTMLFormatter.begin_module_sectionà   s   € Ø�
‰
�6˜7 GÔ,Ø�
‰
�6Õr   c                 ó&   — | j                  d«       y )Nú</ul>r‘   r?   s    r   Úend_module_sectionz HTMLFormatter.end_module_sectionä   s   € Ø�
‰
�7Õr   c                 ód  — | j                  d«       | j                  dj                  ||«      «       | j                  dj                  |«      «       | j                  d|d«       | j                  d«       |j                  «       D �]  \  }}|r³| j                  d«       |d   }	|d   }
|d	   }|d
   }| j                  dj                  | j                  |	«      | j                  |
«      | j                  |«      |d   |d   «      «       | j                  dj                  | j                  |d   xs d«      «      «       n8| j                  dj                  | j                  t	        |«      «      «      «       | j                  d«       �Œ | j                  d«       | j                  d«       y )Nú<li>z{}.<b>{}</b>z: <b>{}</b>z
<div><pre>z</pre></div>r•   r(   ÚsigÚfilenameÚlinesz)<p>defined by <b>{}</b>{} at {}:{}-{}</p>r   ro   ú	<p>{}</p>Ú	docstringÚ z<li>{}ú</li>r™   )r†   r3   Úitemsr�   Ústr)r@   rl   ÚitemnameÚtypenamer   Úsourcesr*   ÚtclsÚsourceÚimplr�   rž   rŸ   s                r   Úwrite_supported_itemz"HTMLFormatter.write_supported_itemç   sn  € à�
‰
�6ÔØ�
‰
�>×(Ñ(ØØó
ô 	ð 	�
‰
�=×'Ñ'¨Ó1Ô2Ø�
‰
�< ¨NÔ;à�
‰
�6ÔØ#ŸM™MŸO‰LˆD�&ÙØ—
‘
˜6Ô"Ø˜f‘~�Ø˜U‘m�Ø! *Ñ-�Ø˜w™�Ø—
‘
Ø?×FÑFØŸ™ DÓ)¨4¯;©;°sÓ+;ØŸ™ HÓ-¨u°Q©x¸¸q¹óôð —
‘
˜;×-Ñ-Ø—K‘K  {Ñ 3Ò 9°rÓ:óõ ð —
‘
˜8Ÿ?™?¨4¯;©;´s¸4³yÓ+AÓBÔCØ�J‰J�wÖð% ,ð& 	�
‰
�7ÔØ�
‰
�7Õr   c                 óŠ   — | j                  d«       | j                  dj                  ||«      «       | j                  d«       y )Nrœ   z{}.<b>{}</b>: UNSUPPORTEDr£   )r†   r3   ©r@   rl   r¦   s      r   Úwrite_unsupported_itemz$HTMLFormatter.write_unsupported_item  s<   € Ø�
‰
�6ÔØ�
‰
Ð.×5Ñ5ØØó
ô 	ð 	�
‰
�7Õr   c                 ó`   — | j                  dj                  |j                  «       «      «       y )Nr    )r†   r3   rJ   )r@   Ústatss     r   Úwrite_statisticzHTMLFormatter.write_statistic  s    € Ø�
‰
�;×%Ñ% e§n¡nÓ&6Ó7Õ8r   N©r4   rO   rP   rQ   r�   r“   r—   rš   r¬   r¯   r²   rS   r   r   rŠ   rŠ   Õ   s+   „ ñò!ò*òòòòBó9r   rŠ   c                   ó:   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
y	)
ÚReSTFormatterzDFormatter that output ReSTructured text format for Sphinx docs.
    c                 ó   — |S rC   rS   r’   s     r   r�   zReSTFormatter.escape  s   € Øˆr   c                 ó€   — | j                  |«       | j                  dt        |«      z  «       | j                  «        y )NÚ=©r†   Úlenr’   s     r   r“   zReSTFormatter.title  s+   € Ø�
‰
�4ÔØ�
‰
�3œ˜T›‘?Ô#Ø�
‰
�r   c                 ó€   — | j                  |«       | j                  dt        |«      z  «       | j                  «        y )NÚ-r¹   r–   s     r   r—   z"ReSTFormatter.begin_module_section  s,   € Ø�
‰
�7ÔØ�
‰
�3œ˜W›Ñ%Ô&Ø�
‰
�r   c                 ó$   — | j                  «        y rC   r‘   r?   s    r   rš   z ReSTFormatter.end_module_section$  s   € Ø�
‰
�r   c                 óX  — | j                  dj                  ||«      «       | j                  d«       | j                  «        |r | j                  dj                  |«      «       | j                  «        |j                  «       D ]“  \  }}|rc|d   }	|d   }
|d   }|d   }t        j                  t        ||d   |d	   ¬
«      }| j                  dj                  |	|
||d   |d	   |«      «       Œk| j                  dj                  t        |«      «      «       Œ• | j                  «        y )Nz.. function:: {}.{}z   :noindex:z   Alias to: ``{}``r(   r�   rž   rŸ   r   ro   )ÚcommitÚpathÚ	firstlineÚlastlinez,   - defined by ``{}{}`` at `{}:{}-{} <{}>`_z   - defined by ``{}``)r†   r3   r¤   Ú
github_urlr¿   r¥   )r@   rl   r¦   r§   r   r¨   r*   r©   rª   r«   r�   rž   rŸ   Úsource_links                 r   r¬   z"ReSTFormatter.write_supported_item'  s  € à�
‰
Ð(×/Ñ/°¸ÓBÔCØ�
‰
�>Ô"Ø�
‰
ŒáØ�J‰JÐ,×3Ñ3°EÓ:Ô;Ø�
‰
Œà#ŸM™MžO‰LˆD�&ÙØ˜f‘~�Ø˜U‘m�Ø! *Ñ-�Ø˜w™�Ü(×/Ñ/Ü!Ø!Ø# A™hØ" 1™Xð	 0ó �ð —
‘
ØB×IÑIØ˜c 8¨U°1©X°u¸Q±xÀóõð —
‘
Ð3×:Ñ:¼3¸t»9ÓEÕFð' ,ð( 	�
‰
�r   c                  ó   — y rC   rS   r®   s      r   r¯   z$ReSTFormatter.write_unsupported_itemG  s   € Ør   c                 ó  — |j                   dk(  r| j                  d«       n[d}| j                  |j                  |j                  «      «       | j                  «        | j                  |j	                  «       «       | j                  «        y )Nr   zThis module is not supported.z%Not showing {} unsupported functions.)r=   r†   r3   r>   rJ   )r@   ÚstatÚmsgs      r   r²   zReSTFormatter.write_statisticJ  s_   € Ø�>‰>˜QÒØ�J‰JÐ6Õ7à9ˆCØ�J‰J�s—z‘z $×"2Ñ"2Ó3Ô4Ø�J‰JŒLØ�J‰J�t—}‘}“Ô'Ø�
‰
�r   Nr³   rS   r   r   rµ   rµ     s+   „ ñòòò
ò
òò@ór   rµ   c                 ó  — | j                  dj                  |«      «       i }|D �]a  }t        «       }|j                  }| j	                  | j                  |«      «       t        |||¬«      D ]ö  }|d   }	|	�—|xj                  dz  c_        | j                  | j                  |d   j                  «      | j                  |d   «      | j                  t        |	«      «      | j                  |d   «      |d	   |j                  d
«      ¬«       Œ¡|xj                  dz  c_        | j                  | j                  |d   j                  «      | j                  |d   «      ¬«       Œø | j                  |«       | j                  «        �Œd y)zFormat modules.
    zListings for {})r   r*   r   Nro   r'   r(   r   r   r*   )rl   r¦   r§   r   r¨   r*   )rl   r¦   )r“   r3   r9   r4   r—   r�   r7   r=   r¬   r¥   Úgetr>   r¯   r²   rš   )
Ú	formatterÚpackage_nameÚmod_sequencer   Ú	alias_mapr{   rÇ   rl   r!   Únbtypes
             r   Ú_format_module_infosrÐ   U  sh  € ð ‡O�OÐ%×,Ñ,¨\Ó:Ô;Ø€IÜˆÜ‹wˆØ—,‘,ˆØ×&Ñ& y×'7Ñ'7¸Ó'@ÔAÜ" 3¨v¸Y×GˆDØ˜,Ñ'ˆFØÐ!Ø—’ !Ñ#•Ø×.Ñ.Ø%×,Ñ,¨T°(©^×-DÑ-DÓEØ&×-Ñ-¨d°6©lÓ;Ø&×-Ñ-¬c°&«kÓ:Ø'×.Ñ.¨t°KÑ/@ÓAØ  Ñ0ØŸ(™( 7Ó+ð /õ ð × Ò  AÑ%Õ Ø×0Ñ0Ø%×,Ñ,¨T°(©^×-DÑ-DÓEØ&×-Ñ-¨d°6©lÓ;ð 1õ ð Hð( 	×!Ñ! $Ô'Ø×$Ñ$Ö&ñ3 r   c                 óŽ  — t        | «      }t        |d«      rt        |«      }n|g}|dk(  r2t        |dz   d«      5 }t	        |¬«      }t        || |«       ddd«       y|dk(  r2t        |dz   d«      5 }t        |¬«      }t        || |«       ddd«       yt        d	j                  |«      «      ‚# 1 sw Y   yxY w# 1 sw Y   yxY w)
a  Write listing information into a file.

    Parameters
    ----------
    package_name : str
        Name of the package to inspect.
    filename : str
        Output filename. Always overwrite.
    output_format : str
        Support formats are "html" and "rst".
    rr   rŒ   z.htmlÚw)r‚   NÚrstz.rstz#Output format '{}' is not supported)	rs   Úhasattrr}   ÚopenrŠ   rÐ   rµ   r   r3   )rÌ   rž   Úoutput_formatrv   ÚmodsÚfoutÚfmtrs          r   Úwrite_listingsrÚ   v  sÊ   € ô ˜Ó&€GÜˆw˜
Ô#Ü& wÓ/‰àˆyˆà˜ÒÜ�(˜WÑ$ cÔ*¨dÜ ¨Ô.ˆDÜ   |°TÔ:÷ +Ð*ð 
˜%Ò	Ü�(˜VÑ# SÔ)¨TÜ ¨Ô.ˆDÜ   |°TÔ:÷ *Ð)ô Ø1×8Ñ8¸ÓGóIð 	I÷ +Ð*ú÷ *Ð)ús   »B/Á2B;Â/B8Â;Cz6
Inspect Numba support for a given top-level package.
c                  ó@  — t        j                  t        ¬«      } | j                  ddt        d¬«       | j                  dddd¬	«       | j                  d
ddd¬	«       | j                  «       }|j                  }|j                  }|j                  }t        |||«       y )N)Údescriptionrv   zPackage to inspect)ÚmetavarÚtypeÚhelpz--formatr3   rŒ   z!Output format; i.e. "html", "rst")ÚdestÚdefaultrß   z--filer„   Úinspector_outputz8Output filename. Defaults to "inspector_output.<format>")
ÚargparseÚArgumentParserÚprogram_descriptionÚadd_argumentr¥   Ú
parse_argsrv   r3   r„   rÚ   )Úparserr‡   rÌ   rÖ   rž   s        r   r	   r	   š  s¦   € Ü×$Ñ$Ô1DÔE€FØ
×ÑØ˜9¬3Ø!ð ô ð ×ÑØ˜¨6Ø0ð ô ð ×ÑØ�vÐ'9ØGð ô ð
 ×ÑÓ€DØ—<‘<€LØ—K‘K€MØ�y‰y€HÜ�< ¨=Õ9r   Ú__main__rC   )NN)"rQ   rã   rp   r
   Útypesr.   Ú
numba.corer   Únumba._versionr   Únumba.core.registryr   Únumba.tests.supportr   r   r¿   rÃ   r$   r7   Úobjectr9   r^   rb   Ú_default_module_filtersr}   r   rŠ   rµ   rÐ   rÚ   Ústriprå   r	   r4   rS   r   r   Ú<module>rò      sÒ   ðñó Û Û Û å Ý 'Ý *Ý /òñ 
‹€Ø[€
ó(óVô6
ˆFô 
ò@Aò<ð
 ØðÐ ð 5Ló 1ôh�ô ô<9�Iô <9ô~>�Iô >óB'òBIð>ç	�EƒGð ò
:ð, ˆzÒÙ…Fð r   