o
    i1d                     @  s  d dl mZ d dlZd dlmZ d dlmZmZ d dlm	Z	m
Z
mZ d dlmZ d dlmZ d dlmZ erLd d	lmZmZ d d
lmZmZmZmZmZ eejejfZeejejfZ eejejfZ!eej"ej#fZ$G dd dZ%G dd dZ&G dd de&Z'G dd de&Z(G dd de&Z)G dd de&Z*G dd de&Z+G dd de&Z,G dd de&Z-G dd de&Z.G dd  d e&Z/G d!d" d"e&Z0G d#d$ d$e&Z1G d%d& d&e&Z2dMd.d/Z3dNd4d5Z4dOd9d:Z5dPd>d?Z6dd@dQdBdCZ7dRdFdGZ8dSdIdJZ9e: Z;dTdKdLZ<dS )U    )annotationsN)Path)TYPE_CHECKINGAny)BreakageKindExplanationStyleParameterKind)AliasResolutionError)_WORKTREE_PREFIX)logger)IterableIterator)Alias	AttributeClassFunctionObjectc                   @  s   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!d Z"d!Z#d"Z$d#Z%d$Z&d%Z'd&Z(d'S )(_ANSIz[30mz[31mz[32mz[33mz[34mz[35mz[36mz[37mz[39mz[90mz[91mz[92mz[93mz[94mz[95mz[96mz[97mz[40mz[41mz[42mz[43mz[44mz[45mz[46mz[47mz[49mz[100mz[101mz[102mz[103mz[104mz[105mz[106mz[107mz[1mz[2mz[22mz[0mN))__name__
__module____qualname__FG_BLACKFG_REDFG_GREEN	FG_YELLOWFG_BLUE
FG_MAGENTAFG_CYANFG_WHITEFG_RESETFG_LIGHTBLACK_EXFG_LIGHTRED_EXFG_LIGHTGREEN_EXFG_LIGHTYELLOW_EXFG_LIGHTBLUE_EXFG_LIGHTMAGENTA_EXFG_LIGHTCYAN_EXFG_LIGHTWHITE_EXBG_BLACKBG_REDBG_GREEN	BG_YELLOWBG_BLUE
BG_MAGENTABG_CYANBG_WHITEBG_RESETBG_LIGHTBLACK_EXBG_LIGHTRED_EXBG_LIGHTGREEN_EXBG_LIGHTYELLOW_EXBG_LIGHTBLUE_EXBG_LIGHTMAGENTA_EXBG_LIGHTCYAN_EXBG_LIGHTWHITE_EXBRIGHTDIMNORMAL	RESET_ALL r=   r=   [/var/www/html/karishye-ai-python/venv/lib/python3.10/site-packages/griffe/_internal/diff.pyr       sN    r   c                   @  sD  e Zd ZU dZded< 	 dHdIddZdJddZdJddZdddKddZe	j
fdLddZedMd!d"ZedMd#d$ZedMd%d&ZedMd'd(ZedJd)d*ZedJd+d,ZedJd-d.ZedNd0d1Zd2d3dOd5d6Zd2d3dOd7d8Zd2d3dOd9d:Zd2d3dOd;d<Zd2d3dOd=d>ZdJd?d@ZdJdAdBZdJdCdDZdJdEdFZdGS )PBreakagez;Breakages can explain what broke from a version to another.r   kind objr   	old_valuer   	new_valuedetailsstrreturnNonec                 C  s"   || _ 	 || _	 || _	 || _dS )zInitialize the breakage.

        Parameters:
            obj: The object related to the breakage.
            old_value: The old value.
            new_value: The new, incompatible value.
            details: Some details about the breakage.
        N)rB   rC   rD   rE   )selfrB   rC   rD   rE   r=   r=   r>   __init__O   s   	zBreakage.__init__c                 C     | j jS N)r@   valuerI   r=   r=   r>   __str__a      zBreakage.__str__c                 C  rK   rL   )r@   namerN   r=   r=   r>   __repr__d   rP   zBreakage.__repr__F)fullrS   boolkwargsdict[str, Any]c                K  s   | j | jj| j| jdS )zReturn this object's data as a dictionary.

        Parameters:
            full: Whether to return full info, or just base info.
            **kwargs: Additional serialization options.

        Returns:
            A dictionary.
        )r@   object_pathrC   rD   )r@   rB   pathrC   rD   )rI   rS   rU   r=   r=   r>   as_dictg   s
   zBreakage.as_dictstyler   c                 C  s   t | d|j  S )zExplain the breakage by showing old and new value.

        Parameters:
            style: The explanation style to use.

        Returns:
            An explanation.
        	_explain_)getattrrM   )rI   rZ   r=   r=   r>   explainx   s   	zBreakage.explainr   c                 C     | j jr	| j jjS | j jS rL   )rB   is_aliasparentfilepathrN   r=   r=   r>   	_filepath      
zBreakage._filepathc                 C  r^   rL   )rB   r_   r`   relative_filepathrN   r=   r=   r>   _relative_filepath   rc   zBreakage._relative_filepathc                 C  r^   rL   )rB   r_   r`   relative_package_filepathrN   r=   r=   r>   _relative_package_filepath   rc   z#Breakage._relative_package_filepathc                 C  sL   | j  r#| j j}t|D ]\}}|tr"t||d d     S q| j S )N   )re   is_absoluteparts	enumerate
startswithr
   r   )rI   rj   indexpartr=   r=   r>   	_location   s   

zBreakage._locationc                 C  s   | j jr| j jS | j jS rL   )rB   r_   rX   canonical_pathrN   r=   r=   r>   _canonical_path   s   zBreakage._canonical_pathc                 C  s   | j jr
| j jjjS | j jjS rL   )rB   r_   r`   modulerX   rN   r=   r=   r>   _module_path   s   
zBreakage._module_pathc                 C  s   | j t| jd d  pdS )N   z<module>)rq   lenrs   rN   r=   r=   r>   _relative_path   s   zBreakage._relative_pathintc                 C  s<   | j tju r| j| jkrdS | jjr| jjpdS | jjpdS )Nr   )	r@   r   OBJECT_REMOVEDre   ro   rB   r_   alias_linenolinenorN   r=   r=   r>   _lineno   s
   zBreakage._linenoTcolorsr}   c                C  s6   |rt jnd}|rt jnd}| | j | d| j S )NrA   :)r   r9   r<   ro   r{   )rI   r}   brightresetr=   r=   r>   _format_location   s   zBreakage._format_locationc                C  s   | j S rL   )rv   rI   r}   r=   r=   r>   _format_title   s   zBreakage._format_titlec                C  s0   |rt jnd}|rt jnd}| | jj | S NrA   )r   r   r   r@   rM   )rI   r}   yellowr   r=   r=   r>   _format_kind   s   zBreakage._format_kindc                C  
   t | jS rL   )rF   rC   r   r=   r=   r>   _format_old_value      
zBreakage._format_old_valuec                C  r   rL   )rF   rD   r   r=   r=   r>   _format_new_value   r   zBreakage._format_new_valuec                 C  sv   |    d|   d|   }|  }|  }|r$|r$| d| }n|r)|}n|r.|}nd}|r9| d| S |S )N:  -> rA   )r   r   r   r   r   rI   explanationoldnewchanger=   r=   r>   _explain_oneline   s    zBreakage._explain_onelinec                 C  s   |    d|   dg}|  }|  }|  }|s|r&|| d n|| |r5|d|  |r?|d|  | jrK|d| j  |d d|S )Nr   r~   z  Old: z  New: z  Details: rA   
)r   r   r   r   r   appendrE   join)rI   linesr@   r   r   r=   r=   r>   _explain_verbose   s   


zBreakage._explain_verbosec                 C  s   d| j  d| jj d}| jdd}|r|dkrd| d}| jdd}|r0|dkr0d| d}|r<|r<| d| }n|rA|}n|rF|}nd	}|rQ| d
| S |S )Nz- `z`: **Fr|   unset`r   rA   r   )rv   r@   rM   r   r   r   r=   r=   r>   _explain_markdown   s"   zBreakage._explain_markdownc                 C  s   d| j  d| j }d| jdd }d| d| d| jj }| jdd}|r2|d	kr2d
| d
}| jdd}|rD|d	krDd
| d
}|rP|rP| d| }n|rU|}n|rZ|}nd}|re| d| S |S )Nzfile=z,line=ztitle=Fr|   z
::warning ,z::r   r   r   rA   r   )ro   r{   r   r@   rM   r   r   )rI   locationtitler   r   r   r   r=   r=   r>   _explain_github  s&   zBreakage._explain_githubN)rA   )
rB   r   rC   r   rD   r   rE   rF   rG   rH   rG   rF   )rS   rT   rU   r   rG   rV   )rZ   r   rG   rF   )rG   r   )rG   rw   r}   rT   rG   rF   )r   r   r   __doc____annotations__rJ   rO   rR   rY   r   ONE_LINEr]   propertyrb   re   rg   ro   rq   rs   rv   r{   r   r   r   r   r   r   r   r   r   r=   r=   r=   r>   r?   I   sD   
 





r?   c                      j   e Zd ZU dZejZded< ed fddZ	dd	d fddZ
dd	dddZdd	dddZ  ZS )ParameterMovedBreakagez-Specific breakage class for moved parameters.r   r@   rG   rF   c                      t  j d| jj dS N()superrv   rC   rQ   rN   	__class__r=   r>   rv   !     z%ParameterMovedBreakage._relative_pathTr|   r}   rT   c                  <   |rt jnd}|rt jnd}t j d| | jj | dS NrA   r   r   r   r   r   r   rv   rC   rQ   rI   r}   bluer   r   r=   r>   r   %      z$ParameterMovedBreakage._format_titlec                C     dS r   r=   r   r=   r=   r>   r   *     z(ParameterMovedBreakage._format_old_valuec                C  r   r   r=   r   r=   r=   r>   r   -  r   z(ParameterMovedBreakage._format_new_valuer   r   )r   r   r   r   r   PARAMETER_MOVEDr@   r   r   rv   r   r   r   __classcell__r=   r=   r   r>   r        
 r   c                      r   )ParameterRemovedBreakagez/Specific breakage class for removed parameters.r   r@   rG   rF   c                   r   r   r   rN   r   r=   r>   rv   6  r   z'ParameterRemovedBreakage._relative_pathTr|   r}   rT   c                  r   r   r   r   r   r=   r>   r   :  r   z&ParameterRemovedBreakage._format_titlec                C  r   r   r=   r   r=   r=   r>   r   ?  r   z*ParameterRemovedBreakage._format_old_valuec                C  r   r   r=   r   r=   r=   r>   r   B  r   z*ParameterRemovedBreakage._format_new_valuer   r   )r   r   r   r   r   PARAMETER_REMOVEDr@   r   r   rv   r   r   r   r   r=   r=   r   r>   r   1  r   r   c                      r   )ParameterChangedKindBreakagez:Specific breakage class for parameters whose kind changed.r   r@   rG   rF   c                   r   r   r   rN   r   r=   r>   rv   K  r   z+ParameterChangedKindBreakage._relative_pathTr|   r}   rT   c                  r   r   r   r   r   r=   r>   r   O  r   z*ParameterChangedKindBreakage._format_titlec                C     t | jjjS rL   )rF   rC   r@   rM   r   r=   r=   r>   r   T     z.ParameterChangedKindBreakage._format_old_valuec                C  r   rL   )rF   rD   r@   rM   r   r=   r=   r>   r   W  r   z.ParameterChangedKindBreakage._format_new_valuer   r   )r   r   r   r   r   PARAMETER_CHANGED_KINDr@   r   r   rv   r   r   r   r   r=   r=   r   r>   r   F  r   r   c                      r   )ParameterChangedDefaultBreakagezCSpecific breakage class for parameters whose default value changed.r   r@   rG   rF   c                   r   r   r   rN   r   r=   r>   rv   `  r   z.ParameterChangedDefaultBreakage._relative_pathTr|   r}   rT   c                  r   r   r   r   r   r=   r>   r   d  r   z-ParameterChangedDefaultBreakage._format_titlec                C     t | jjS rL   )rF   rC   defaultr   r=   r=   r>   r   i     z1ParameterChangedDefaultBreakage._format_old_valuec                C  r   rL   )rF   rD   r   r   r=   r=   r>   r   l  r   z1ParameterChangedDefaultBreakage._format_new_valuer   r   )r   r   r   r   r   PARAMETER_CHANGED_DEFAULTr@   r   r   rv   r   r   r   r   r=   r=   r   r>   r   [  r   r   c                      r   ) ParameterChangedRequiredBreakagez=Specific breakage class for parameters which became required.r   r@   rG   rF   c                   r   r   r   rN   r   r=   r>   rv   u  r   z/ParameterChangedRequiredBreakage._relative_pathTr|   r}   rT   c                  r   r   r   r   r   r=   r>   r   y  r   z.ParameterChangedRequiredBreakage._format_titlec                C  r   r   r=   r   r=   r=   r>   r   ~  r   z2ParameterChangedRequiredBreakage._format_old_valuec                C  r   r   r=   r   r=   r=   r>   r     r   z2ParameterChangedRequiredBreakage._format_new_valuer   r   )r   r   r   r   r   PARAMETER_CHANGED_REQUIREDr@   r   r   rv   r   r   r   r   r=   r=   r   r>   r   p  r   r   c                      r   )ParameterAddedRequiredBreakagez=Specific breakage class for new parameters added as required.r   r@   rG   rF   c                   r   r   )r   rv   rD   rQ   rN   r   r=   r>   rv     r   z-ParameterAddedRequiredBreakage._relative_pathTr|   r}   rT   c                  r   r   )r   r   r   r   rv   rD   rQ   r   r   r=   r>   r     r   z,ParameterAddedRequiredBreakage._format_titlec                C  r   r   r=   r   r=   r=   r>   r     r   z0ParameterAddedRequiredBreakage._format_old_valuec                C  r   r   r=   r   r=   r=   r>   r     r   z0ParameterAddedRequiredBreakage._format_new_valuer   r   )r   r   r   r   r   PARAMETER_ADDED_REQUIREDr@   r   r   rv   r   r   r   r   r=   r=   r   r>   r     r   r   c                   @      e Zd ZU dZejZded< dS )ReturnChangedTypeBreakagez=Specific breakage class for return values which changed type.r   r@   N)r   r   r   r   r   RETURN_CHANGED_TYPEr@   r   r=   r=   r=   r>   r        
 r   c                   @  @   e Zd ZU dZejZded< dddd
dZdddddZ	dS )ObjectRemovedBreakagez,Specific breakage class for removed objects.r   r@   Tr|   r}   rT   rG   rF   c                C  r   r   r=   r   r=   r=   r>   r     r   z'ObjectRemovedBreakage._format_old_valuec                C  r   r   r=   r   r=   r=   r>   r     r   z'ObjectRemovedBreakage._format_new_valueNr   )
r   r   r   r   r   rx   r@   r   r   r   r=   r=   r=   r>   r     
   
 r   c                   @  r   )ObjectChangedKindBreakagez7Specific breakage class for objects whose kind changed.r   r@   Tr|   r}   rT   rG   rF   c                C  rK   rL   )rC   rM   r   r=   r=   r>   r     rP   z+ObjectChangedKindBreakage._format_old_valuec                C  rK   rL   )rD   rM   r   r=   r=   r>   r     rP   z+ObjectChangedKindBreakage._format_new_valueNr   )
r   r   r   r   r   OBJECT_CHANGED_KINDr@   r   r   r   r=   r=   r=   r>   r     r   r   c                   @  r   )AttributeChangedTypeBreakagez:Specific breakage class for attributes whose type changed.r   r@   N)r   r   r   r   r   ATTRIBUTE_CHANGED_TYPEr@   r   r=   r=   r=   r>   r     r   r   c                   @  r   )AttributeChangedValueBreakagez;Specific breakage class for attributes whose value changed.r   r@   N)r   r   r   r   r   ATTRIBUTE_CHANGED_VALUEr@   r   r=   r=   r=   r>   r     r   r   c                   @  r   )ClassRemovedBaseBreakagez1Specific breakage class for removed base classes.r   r@   Tr|   r}   rT   rG   rF   c                C     dd dd | jD  d S )N[, c                 s      | ]}|j V  qd S rL   rp   .0baser=   r=   r>   	<genexpr>      z=ClassRemovedBaseBreakage._format_old_value.<locals>.<genexpr>])r   rC   r   r=   r=   r>   r        z*ClassRemovedBaseBreakage._format_old_valuec                C  r   )Nr   r   c                 s  r   rL   r   r   r=   r=   r>   r     r   z=ClassRemovedBaseBreakage._format_new_value.<locals>.<genexpr>r   )r   rD   r   r=   r=   r>   r     r   z*ClassRemovedBaseBreakage._format_new_valueNr   )
r   r   r   r   r   CLASS_REMOVED_BASEr@   r   r   r   r=   r=   r=   r>   r     r   r   	old_classr   	new_class
seen_pathsset[str]rG   Iterable[Breakage]c                c  sV    dE d H  |j | j krt|j t| j k rt|| j |j V  t| ||dE d H  d S )Nr=   r   )basesru   r   _member_incompatibilities)r   r   r   r=   r=   r>   _class_incompatibilities  s
   
 r   old_functionr   new_functionIterator[Breakage]c              	   c  s   dd |j D }dd |j D }tj|v }tj|v }t| j D ]\}}|j|j vrN|jtju r2|pC|jtju o9|pC|jtj	u oC|oC|}|sMt
||d V  q |j |j }	|	jra|jsat|||	V  |jtv r|	jtv r||j}
|
|krd| d|
 d|
| dd	}t|||	|d
V  |j|	jurt|jtju o|	jtju |jtju o|	jtju |jtj	u o|	jtv |	jtju o|jtjuo| |	jtju o|jtjuo| f}|rt|||	V  t|||	}|j o|	j }|jtvo|	jtv}|r|rz|j|	jkr|V  W q  ty   |V  Y q w q |j D ]}	|	j| j vr,|	jr,t|d |	V  qt| |s?t|| j|jV  d S d S )Nc                 S  s   g | ]}|j qS r=   )rQ   r   paramr=   r=   r>   
<listcomp>      z/_function_incompatibilities.<locals>.<listcomp>c                 S  s   h | ]}|j qS r=   )r@   r   r=   r=   r>   	<setcomp>  r   z._function_incompatibilities.<locals>.<setcomp>zposition: from z to z (+r   )rE   )
parametersr   var_positionalvar_keywordrk   rQ   r@   keyword_onlypositional_onlypositional_or_keywordr   requiredr   _POSITIONALrm   r   any_POSITIONAL_KEYWORD_ONLYr   r   	_VARIADICr   	Exceptionr   _returns_are_compatibler   returns)r   r   new_param_namesparam_kindshas_variadic_argshas_variadic_kwargs	old_index	old_param	swallowed	new_param	new_indexrE   incompatible_kindbreakagenon_requirednon_variadicr=   r=   r>   _function_incompatibilities  sx   





r  old_attributer   new_attributec                 c  sF    | j |j kr!|j d u rt|| j dV  d S t|| j |j V  d S d S )Nr   )rM   r   )r  r  r=   r=   r>   _attribute_incompatibilities)  s   
r  old_objObject | Aliasnew_objc                c  sf    z| j r| jn| }|j r|jn|}W n ty&   td| j|j Y d S w t|||dE d H  d S )Nz2API check: %s | %s: skip alias with unknown targetr   )r_   targetr	   r   debugrX   _type_based_yield)r  r  r   
old_member
new_memberr=   r=   r>   _alias_incompatibilities2  s   r  r   set[str] | Nonec             	   c  s    |d u rt  n|}| j D ]C\}}|jstd| j| qtd| j| z|j| }W n tyG   |js;|j	s>|jrEt
||d V  Y qw t|||dE d H  qd S )Nz(API check: %s.%s: skip non-public objectzAPI check: %s.%sr   )setall_membersitems	is_publicr   r  rX   KeyErrorr_   	is_moduler   r  )r  r  r   rQ   r  r  r=   r=   r>   r   B  s    r   r  r  c                c  s    | j |v rd S || j  | js|jr t| ||dE d H  d S |j| jkr1t|| j|jV  d S | jr@t| ||dE d H  d S | jrOt	| ||dE d H  d S | j
r\t| |E d H  d S | jrit| |E d H  d S d S )Nr   )rX   addr_   r  r@   r   r&  r   is_classr   is_functionr  is_attributer  )r  r  r   r=   r=   r>   r  W  s:   
r  rT   c                 C  sj   | j d u rdS |j d u rdS tt |j | j kr#	 W d    dS W d    dS 1 s.w   Y  dS )NTF)r  
contextlibsuppressAttributeError)r   r   r=   r=   r>   r  |  s   


r  c                 c  s    t | |E dH  dS )aX  Find breaking changes between two versions of the same API.

    The function will iterate recursively on all objects
    and yield breaking changes with detailed information.

    Parameters:
        old_obj: The old version of an object.
        new_obj: The new version of an object.

    Yields:
        Breaking changes.

    Examples:
        >>> import sys, griffe
        >>> new = griffe.load("pkg")
        >>> old = griffe.load_git("pkg", "1.2.3")
        >>> for breakage in griffe.find_breaking_changes(old, new)
        ...     print(breakage.explain(style=style), file=sys.stderr)
    N)r   )r  r  r=   r=   r>   find_breaking_changes  s   r.  )r   r   r   r   r   r   rG   r   )r   r   r   r   rG   r   )r  r   r  r   rG   r   )r  r  r  r  r   r   rG   r   )r  r  r  r  r   r   rG   r   )r  r  r  r  r   r   rG   r   )r   r   r   r   rG   rT   )r  r  r  r  rG   r   )=
__future__r   r+  pathlibr   typingr   r   griffe._internal.enumerationsr   r   r   griffe._internal.exceptionsr	   griffe._internal.gitr
   griffe._internal.loggerr   collections.abcr   r   griffe._internal.modelsr   r   r   r   r   	frozensetr   r   r   r   _KEYWORDr  r   r   r  r   r?   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r   r  r  object	_sentinelr.  r=   r=   r=   r>   <module>   sP   ) T


K
	

%