U
    9%eg2                     @   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re   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   X/var/www/html/Darija-Ai-API/env/lib/python3.8/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k
rR   d}d}Y nFX ||}|jD ]2}z| ||< W qd t	k
r   d||< Y qdX qd||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kri n|}t | D ]}|dr(qt| |}tjtjf}t||sJqt| ||d}||krn|| |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   s   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   s    rF   c                 C   s   t dd | D  S )Nc                 s   s   | ]}|d kV  qdS )testsNr   r?   r   r   r   rB      s     z&filter_tests_module.<locals>.<genexpr>rC   rE   r   r   r   filter_tests_module   s    rH   c           
      #   s   dd }| j d }tj| j||d} fdd}| j }||sD| V  |D ]}|d }||r^qHt | zt|}W n" tk
r   Y W 5 Q R  qHY nX |ddd D ]2}	zt||	}W q t	k
r   d}Y  qY qX qW 5 Q R X t
|tjsqH|V  qHdS )	zSYield all modules in a given package.

    Recursively walks the package tree.
    c                 S   s   d S r2   r   )r   r   r   r   <lambda>       z)list_modules_in_package.<locals>.<lambda>.)onerrorc                    s    |  d t fddD S )NrK   c                 3   s   | ]}|  V  qd S r2   r   )r@   Z	filter_fnrE   r   r   rB      s   z@list_modules_in_package.<locals>.check_filter.<locals>.<genexpr>)splitrD   )modnamemodule_filtersrE   r   check_filter   s    
z-list_modules_in_package.<locals>.check_filter   N)r'   pkgutilwalk_packages__path__r   
__import__	ExceptionrM   r    r   r$   r!   
ModuleType)
packagerP   Zonerror_ignoreprefixZpackage_walkerrQ   rN   Zpkginfomodpartr   rO   r   list_modules_in_package   s:    
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|| d S )Nfile)
setdefaultr_   print)r0   argskwargsr   r   r   rc      s    zFormatter.printN)r'   r;   r<   r=   r1   rc   r   r   r   r   r^      s   r^   c                   @   sH   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   textrg   r   r   r   rh      s    zHTMLFormatter.escapec                 C   s   |  d|d d S )Nz<h1></h2>rc   r0   ri   r   r   r   title   s    zHTMLFormatter.titlec                 C   s   |  d|d |  d d S )Nz<h2>rj   <ul>rk   r0   rN   r   r   r   begin_module_section   s    z"HTMLFormatter.begin_module_sectionc                 C   s   |  d d S )N</ul>rk   r/   r   r   r   end_module_section   s    z HTMLFormatter.end_module_sectionc                 C   s  |  d |  d|| |  d| |  d|d |  d | D ]\}}|r|  d |d }	|d }
|d	 }|d
 }|  d| |	| |
| ||d |d  |  d| |d pd n|  d| t| |  d qL|  d |  d d S )N<li>z{}.<b>{}</b>z: <b>{}</b>z
<div><pre>z</pre></div>rn   r   sigfilenamelinesz)<p>defined by <b>{}</b>{} at {}:{}-{}</p>r   rR   	<p>{}</p>Z	docstring z<li>{}</li>rq   )rc   r&   itemsrh   str)r0   rN   itemnametypenamer   sourcesr   tclssourceimplrt   ru   rv   r   r   r   write_supported_item   s>    


   
z"HTMLFormatter.write_supported_itemc                 C   s*   |  d |  d|| |  d d S )Nrs   z{}.<b>{}</b>: UNSUPPORTEDry   )rc   r&   r0   rN   r|   r   r   r   write_unsupported_item  s    
z$HTMLFormatter.write_unsupported_itemc                 C   s   |  d|  d S )Nrw   )rc   r&   r7   )r0   statsr   r   r   write_statistic  s    zHTMLFormatter.write_statisticNr'   r;   r<   r=   rh   rm   rp   rr   r   r   r   r   r   r   r   rf      s   !rf   c                   @   sH   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 )ReSTFormatterzDFormatter that output ReSTructured text format for Sphinx docs.
    c                 C   s   |S r2   r   rl   r   r   r   rh     s    zReSTFormatter.escapec                 C   s(   |  | |  dt|  |    d S )N=rc   lenrl   r   r   r   rm     s    
zReSTFormatter.titlec                 C   s(   |  | |  dt|  |    d S )N-r   ro   r   r   r   rp     s    
z"ReSTFormatter.begin_module_sectionc                 C   s   |    d S r2   rk   r/   r   r   r   rr   $  s    z ReSTFormatter.end_module_sectionc                 C   s   |  d|| |  d |    |r8|  d| |    | D ]~\}}|r|d }	|d }
|d }|d }tjt||d |d	 d
}|  d|	|
||d |d	 | qH|  dt| qH|    d S )Nz.. function:: {}.{}z   :noindex:z   Alias to: ``{}``r   rt   ru   rv   r   rR   )commitpath	firstlinelastlinez,   - defined by ``{}{}`` at `{}:{}-{} <{}>`_z   - defined by ``{}``)rc   r&   rz   
github_urlr   r{   )r0   rN   r|   r}   r   r~   r   r   r   r   rt   ru   rv   source_linkr   r   r   r   '  s<    
     z"ReSTFormatter.write_supported_itemc                 C   s   d S r2   r   r   r   r   r   r   G  s    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-   rc   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 ]}t }|j}| | | t|||dD ]}|d }	|	dk	r| jd7  _| j| |d j| |d | t	|	| |d |d	 |
d
d qF| jd7  _| j| |d j| |d d qF| | |   qdS )zFormat modules.
    zListings for {})r   r   r   NrR   r   r   r   r   r   )rN   r|   r}   r   r~   r   )rN   r|   )rm   r&   r*   r'   rp   rh   r)   r-   r   r{   getr.   r   r   rr   )
	formatterpackage_nameZmod_sequencer   Z	alias_mapr[   r   rN   r   Znbtyper   r   r   _format_module_infosU  s2    

r   c              	   C   s   t | }t|drt|}n|g}|dkr\t|d d}t|d}t|| | W 5 Q R X nH|dkrt|d d}t|d}t|| | W 5 Q R X ntd|d	S )
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".
    rU   rg   z.htmlw)r`   rstz.rstz#Output format '{}' is not supportedN)	rV   hasattrr]   openrf   r   r   r   r&   )r   ru   output_formatrY   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)descriptionrY   zPackage to inspect)metavartypehelpz--formatr&   rg   z!Output format; i.e. "html", "rst")destdefaultr   z--filera   Zinspector_outputz8Output filename. Defaults to "inspector_output.<format>")
argparseArgumentParserprogram_descriptionadd_argumentr{   
parse_argsrY   r&   ra   r   )parserrd   r   r   ru   r   r   r   r     s0          r   __main__)N)NN)N)"r=   r   rS   r   typesr!   Z
numba.corer   Znumba._versionr   Znumba.core.registryr   Znumba.tests.supportr   r   r   r   r   r)   objectr*   rF   rH   Z_default_module_filtersr]   r^   rf   r   r   r   stripr   r   r'   r   r   r   r   <module>   s:   
+
 4?A
!
