o
    w!g                     @  sn   d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	 er.d dl
mZ d dlmZmZ G dd	 d	Zd
S )    )annotations)defaultdict)Path)TYPE_CHECKING)Kind)GriffeLoader)AliasObjectc                   @  s.   e Zd ZdZdddZdd
dZdddZdS )Statsz$Load statistics for a Griffe loader.loaderr   returnNonec              
   C  s   || _ 	 ttdddddddd}|jj }tjdtjdtj	dtj
di| _	 t|| _	 || _	 tdd |j D | _	 d| _	 d| _	 d| _	 |D ]}| | qMdS )zoInitialiwe the stats object.

        Parameters:
            loader: The loader to compute stats for.
        r   ) .py.pyiz.pycz.pyoz.pydz.soc                 s  s    | ]}t |V  qd S )N)len).0lines r   O/mnt/skqttb/ctump_chatbot/chatbot/lib/python3.10/site-packages/_griffe/stats.py	<genexpr>:   s    z!Stats.__init__.<locals>.<genexpr>N)r   r   intmodules_collectionmembersvaluesr   MODULECLASSFUNCTION	ATTRIBUTEby_kindr   packagesmodules_by_extensionsumlines_collectionr   time_spent_visitingtime_spent_inspectingtime_spent_serializing
_itercount)selfr   r!   top_modulesmoduler   r   r   __init__   sF   
zStats.__init__rootObject | Aliasc                 C  s   |j rd S | j|j  d7  < |jr2t|jtr$| j|jj  d7  < n|jd u r2| jd  d7  < |j	
 D ]}| | q7d S )N   r   )is_aliasr   kind	is_module
isinstancefilepathr   r!   suffixr   r   r'   )r(   r,   memberr   r   r   r'   I   s   
zStats._itercountstrc                 C  s  g }| j }| jtj }| jtj }| jtj }| jtj }t||||f}|d |d |d |d|  |d|  |d|  |d|  |d| d	| d
 | j	}|d }	|d }
|d }||	 |
 | }|d |d| j
  |d |d |d|	  |d|  |d|
  |d|  |d t| D ]\}}|r|d| d|  q| jd }| jd }|| }|| d }|| d }| jj}|rdn|
}z|| }W n ty   d}Y nw |	| |r|
nd }z|| }W n ty    d}Y nw |d |d| d| d|dd|dd	 |d | d| d|dd|dd	 | jd }|| }|d!| d|dd" d#|S )$zQFormat the statistics as text.

        Returns:
            Text stats.
        
Statisticsz---------------------zNumber of loaded objectsz  Modules: z  Classes: z  Functions: z  Attributes: z	  Total: z across z	 packagesr   r   r   zTotal number of lines: Modulesz  Builtin: z  Compiled: z  Regular: z	  Stubs: z  Per extension:z    z: i  d   r   zTime spent visiting modules (z): zms, z.02fzms/module (z%)zTime spent inspecting modules (zTime spent serializing: z	ms/module
)r    r   r   r   r   r   r   r"   appendr!   r   sorteditemsr$   r%   r   force_inspectionZeroDivisionErrorr&   join)r(   r   r    modulesclasses	functions
attributesobjectsper_extbuiltinregularstubscompiledextnumber
visit_timeinspect_time
total_timevisit_percentinspect_percentr>   visited_modulesvisit_time_per_moduleinspected_modulesinspect_time_per_moduleserialize_timeserialize_time_per_moduler   r   r   as_textU   s   











zStats.as_textN)r   r   r   r   )r,   r-   r   r   )r   r6   )__name__
__module____qualname____doc__r+   r'   rX   r   r   r   r   r
      s
    

5r
   N)
__future__r   collectionsr   pathlibr   typingr   _griffe.enumerationsr   _griffe.loaderr   _griffe.modelsr   r	   r
   r   r   r   r   <module>   s   