o
    ig2                     @   s  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d Ze Zd	Zd$d
dZd%ddZG dd deZdd Zdd ZeefZefddZG dd deZG dd deZG dd deZd$ddZdd Zd  Zd!d" Z e!d#kre   dS dS )&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                  C   s&   t  d } | stjdtjd dS | S )Nzfull-revisionidz>Cannot find git commit hash. Source links could be inaccurate.)categorymain)r   warningswarnr   ZNumbaWarning)full r   h/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/numba/misc/help/inspector.py_get_commit   s   
r   zLhttps://github.com/numba/numba/blob/{commit}/{path}#L{firstline}-L{lastline}c              	   C   s   |pt }|j}|  |j  i }i }z|| }W n ty(   d}d}Y n!w ||}|jD ]}z| ||< W q1 t	yH   d||< Y q1w ||d< ||d< ||d< |S )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   Ztyping_contextrefreshZtarget_contextZresolve_value_type
ValueErrorZexplain_function_typeZ	templatesZget_source_infoAttributeError)functiontargetZtyctinfor   Znbtyr   tempr   r   r   inspect_function"   s.   


r   c                 c   s    |du ri n|}t | D ]A}|drqt| |}tjtjf}t||s&qt| ||d}||v r8|| |d< n
dj| j	|d||< |
t||d |V  qdS )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   Zsupported_typesr   r   r   r   inspect_moduleM   s$   



r)   c                   @   s@   e Zd ZdZdd Zedd Zedd Zdd	 Zd
d Z	dS )_Statz9For gathering simple statistic of (un)supported functionsc                 C   s   d| _ d| _d S Nr   	supportedunsupportedselfr   r   r   __init__j   s   
z_Stat.__init__c                 C   s   | j | j }|S Nr,   )r0   totalr   r   r   r3   n   s   z_Stat.totalc                 C   s   | j | j d }|S )Nd   )r-   r3   )r0   ratior   r   r   r5   s   s   z_Stat.ratioc                 C   s$   | j dkrdS dj| j| j | jdS )Nr   emptyz0supported = {supported} / {total} = {ratio:.2f}%)r-   r3   r5   )r3   r&   r-   r5   r/   r   r   r   describex   s   
z_Stat.describec                 C   s   dj | jj|  dS )Nz{clsname}({describe}))clsnamer7   )r&   	__class__r'   r7   r/   r   r   r   __repr__   s   z_Stat.__repr__N)
r'   
__module____qualname____doc__r1   propertyr3   r5   r7   r:   r   r   r   r   r*   h   s    

	r*   c                 C      t dd | D  S )Nc                 s   s    | ]}| d V  qdS )r   N)r   .0xr   r   r   	<genexpr>   s    z(filter_private_module.<locals>.<genexpr>anyZmodule_componentsr   r   r   filter_private_module      rG   c                 C   r?   )Nc                 s   s    | ]}|d kV  qdS )testsNr   r@   r   r   r   rC      s    z&filter_tests_module.<locals>.<genexpr>rD   rF   r   r   r   filter_tests_module   rH   rJ   c           
      #   s
   dd }| j d }tj| j||d} fdd}| j }||s#| V  |D ]]}|d }||r0q%t = zt|}W n tyI   Y W d   q%w |ddd D ]}	zt||	}W qS t	yh   d}Y  nw W d   n1 ssw   Y  t
|tjsq%|V  q%dS )	zSYield all modules in a given package.

    Recursively walks the package tree.
    c                 S      d S r2   r   )r   r   r   r   <lambda>   s    z)list_modules_in_package.<locals>.<lambda>.)onerrorc                    s    |  d t fddD S )NrM   c                 3   s    | ]}|  V  qd S r2   r   )rA   Z	filter_fnrF   r   r   rC      s    z@list_modules_in_package.<locals>.check_filter.<locals>.<genexpr>)splitrE   )modnamemodule_filtersrF   r   check_filter   s   
z-list_modules_in_package.<locals>.check_filter   N)r'   pkgutilwalk_packages__path__r   
__import__	ExceptionrO   r    r   r$   r!   
ModuleType)
packagerR   Zonerror_ignoreprefixZpackage_walkerrS   rP   Zpkginfomodpartr   rQ   r   list_modules_in_package   sH   
r_   c                   @   s    e Zd ZdZdd Zdd ZdS )	FormatterzBase class for formatters.
    c                 C   s
   || _ d S r2   )_fileobj)r0   fileobjr   r   r   r1      s   
zFormatter.__init__c                 O   s    | d| j t|i | d S )Nfile)
setdefaultra   print)r0   argskwargsr   r   r   re      s   zFormatter.printN)r'   r;   r<   r=   r1   re   r   r   r   r   r`      s    r`   c                   @   H   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dS )HTMLFormatterz Formatter that outputs HTML
    c                 C   s   dd l }||S r+   )htmlescape)r0   textrj   r   r   r   rk      s   
zHTMLFormatter.escapec                 C   s   |  d|d d S )Nz<h1></h2>re   r0   rl   r   r   r   title   s   zHTMLFormatter.titlec                 C   s   |  d|d |  d d S )Nz<h2>rm   <ul>rn   r0   rP   r   r   r   begin_module_section   s   z"HTMLFormatter.begin_module_sectionc                 C   s   |  d d S )N</ul>rn   r/   r   r   r   end_module_section   s   z HTMLFormatter.end_module_sectionc                 C   s  |  d |  d|| |  d| |  d|d |  d | D ]V\}}|rj|  d |d }	|d }
|d	 }|d
 }|  d| |	| |
| ||d |d  |  d| |d ped n|  d| t| |  d q&|  d |  d d S )N<li>z{}.<b>{}</b>z: <b>{}</b>z
<div><pre>z</pre></div>rq   r   sigfilenamelinesz)<p>defined by <b>{}</b>{} at {}:{}-{}</p>r   rT   	<p>{}</p>	docstring z<li>{}</li>rt   )re   r&   itemsrk   str)r0   rP   itemnametypenamer   sourcesr   tclssourceimplrw   rx   ry   r   r   r   write_supported_item   s8   



z"HTMLFormatter.write_supported_itemc                 C   s*   |  d |  d|| |  d d S )Nrv   z{}.<b>{}</b>: UNSUPPORTEDr}   )re   r&   r0   rP   r   r   r   r   write_unsupported_item  s   
z$HTMLFormatter.write_unsupported_itemc                 C   s   |  d|  d S )Nrz   )re   r&   r7   )r0   statsr   r   r   write_statistic  s   zHTMLFormatter.write_statisticNr'   r;   r<   r=   rk   rp   rs   ru   r   r   r   r   r   r   r   ri      s    !ri   c                   @   rh   )ReSTFormatterzDFormatter that output ReSTructured text format for Sphinx docs.
    c                 C   s   |S r2   r   ro   r   r   r   rk        zReSTFormatter.escapec                 C   (   |  | |  dt|  |    d S )N=re   lenro   r   r   r   rp        
zReSTFormatter.titlec                 C   r   )N-r   rr   r   r   r   rs     r   z"ReSTFormatter.begin_module_sectionc                 C   s   |    d S r2   rn   r/   r   r   r   ru   $  s   z ReSTFormatter.end_module_sectionc                 C   s   |  d|| |  d |    |r|  d| |    | D ]?\}}|rY|d }	|d }
|d }|d }tjt||d |d	 d
}|  d|	|
||d |d	 | q$|  dt| q$|    d S )Nz.. function:: {}.{}z   :noindex:z   Alias to: ``{}``r   rw   rx   ry   r   rT   )commitpath	firstlinelastlinez,   - defined by ``{}{}`` at `{}:{}-{} <{}>`_z   - defined by ``{}``)re   r&   r~   
github_urlr   r   )r0   rP   r   r   r   r   r   r   r   r   rw   rx   ry   source_linkr   r   r   r   '  s2   
z"ReSTFormatter.write_supported_itemc                 C   rK   r2   r   r   r   r   r   r   G  r   z$ReSTFormatter.write_unsupported_itemc                 C   sN   |j dkr| d nd}| ||j |   | |  |   d S )Nr   zThis module is not supported.z%Not showing {} unsupported functions.)r-   re   r&   r.   r7   )r0   statmsgr   r   r   r   J  s   
zReSTFormatter.write_statisticNr   r   r   r   r   r     s     r   c           
      C   s   |  d| i }|D ]q}t }|j}| | | t|||dD ]P}|d }	|	durZ| jd7  _| j| |d j| |d | t	|	| |d |d	 |
d
d q#| jd7  _| j| |d j| |d d q#| | |   qdS )zFormat modules.
    zListings for {})r   r   r   NrT   r   r   r   r   r   )rP   r   r   r   r   r   )rP   r   )rp   r&   r*   r'   rs   rk   r)   r-   r   r   getr.   r   r   ru   )
	formatterpackage_nameZmod_sequencer   Z	alias_mapr]   r   rP   r   Znbtyper   r   r   _format_module_infosU  s4   


r   c                 C   s   t | }t|drt|}n|g}|dkr:t|d d}t|d}t|| | W d   dS 1 s3w   Y  dS |dkrct|d d}t|d}t|| | W d   dS 1 s\w   Y  dS td	|)
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".
    rW   rj   z.htmlw)rb   Nrstz.rstz#Output format '{}' is not supported)	rX   hasattrr_   openri   r   r   r   r&   )r   rx   output_formatr[   modsZfoutZfmtrr   r   r   write_listingsv  s"   


"
"r   z6
Inspect Numba support for a given top-level package.
c                  C   sl   t jtd} | jddtdd | jddddd	 | jd
dddd	 |  }|j}|j}|j}t	||| d S )N)descriptionr[   zPackage to inspect)metavartypehelpz--formatr&   rj   z!Output format; i.e. "html", "rst")destdefaultr   z--filerc   Zinspector_outputz8Output filename. Defaults to "inspector_output.<format>")
argparseArgumentParserprogram_descriptionadd_argumentr   
parse_argsr[   r&   rc   r   )parserrf   r   r   rx   r   r   r   r     s$   r   __main__r2   )NN)"r=   r   rU   r   typesr!   Z
numba.corer   Znumba._versionr   Znumba.core.registryr   Znumba.tests.supportr   r   r   r   r   r)   objectr*   rG   rJ   Z_default_module_filtersr_   r`   ri   r   r   r   stripr   r   r'   r   r   r   r   <module>   sB    

+ 4?
A!
