o
    h_                     @  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
 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rTd 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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(Z2G d"d# d#e(Z3G d$d% d%e(Z4dLd-d.Z5dMd3d4Z6dNd8d9Z7dOd=d>Z8dd?dPdAdBZ9dQdEdFZ:dRdHdIZ;e< Z=dSdJdKZ>dS )T    )annotationsN)Path)TYPE_CHECKINGAny)ForeStyle)BreakageKindExplanationStyleParameterKind)AliasResolutionError)_WORKTREE_PREFIX)logger)IterableIterator)Alias	AttributeClassFunctionObjectc                   @  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)r   r   r   r   )selfr   r   r   r    r    V/var/www/html/openai_agents/venv/lib/python3.10/site-packages/griffe/_internal/diff.py__init__'   s   	zBreakage.__init__c                 C     | j jS N)r   valuer   r    r    r!   __str__9      zBreakage.__str__c                 C  r#   r$   )r   namer&   r    r    r!   __repr__<   r(   zBreakage.__repr__F)fullr+   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_pathr   r   )r   r   pathr   r   )r   r+   r-   r    r    r!   as_dict?   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_)getattrr%   )r   r2   r    r    r!   explainP   s   	zBreakage.explainr   c                 C     | j jr	| j jjS | j jS r$   )r   is_aliasparentfilepathr&   r    r    r!   	_filepath[      
zBreakage._filepathc                 C  r6   r$   )r   r7   r8   relative_filepathr&   r    r    r!   _relative_filepatha   r;   zBreakage._relative_filepathc                 C  r6   r$   )r   r7   r8   relative_package_filepathr&   r    r    r!   _relative_package_filepathg   r;   z#Breakage._relative_package_filepathc                 C  sL   | j  r#| j j}t|D ]\}}|tr"t||d d     S q| j S )N   )r=   is_absoluteparts	enumerate
startswithr   r   )r   rB   indexpartr    r    r!   	_locationm   s   

zBreakage._locationc                 C  s   | j jr| j jS | j jS r$   )r   r7   r0   canonical_pathr&   r    r    r!   _canonical_pathy   s   zBreakage._canonical_pathc                 C  s   | j jr
| j jjjS | j jjS r$   )r   r7   r8   moduler0   r&   r    r    r!   _module_path   s   
zBreakage._module_pathc                 C  s   | j t| jd d  pdS )N   z<module>)rI   lenrK   r&   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_REMOVEDr=   rG   r   r7   alias_linenolinenor&   r    r    r!   _lineno   s
   zBreakage._linenoTcolorsrU   c                C  s6   |rt jnd}|rt jnd}| | j | d| j S )Nr   :)r   BRIGHT	RESET_ALLrG   rS   )r   rU   brightresetr    r    r!   _format_location   s   zBreakage._format_locationc                C  s   | j S r$   )rN   r   rU   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 Nr   )r   YELLOWRESETr   r%   )r   rU   yellowrZ   r    r    r!   _format_kind   s   zBreakage._format_kindc                C  
   t | jS r$   )r   r   r\   r    r    r!   _format_old_value      
zBreakage._format_old_valuec                C  rc   r$   )r   r   r\   r    r    r!   _format_new_value   re   zBreakage._format_new_valuec                 C  sv   |    d|   d|   }|  }|  }|r$|r$| d| }n|r)|}n|r.|}nd}|r9| d| S |S )N:  -> r   )r[   r]   rb   rd   rf   r   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 )Nrg   rV   z  Old: z  New: z  Details: r   
)r[   r]   rb   rd   rf   appendr   join)r   linesr   rk   rl   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`: **FrT   unset`rh   r   rg   )rN   r   r%   rd   rf   ri   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=FrT   z
::warning ,z::ru   rv   rh   r   rg   )rG   rS   r]   r   r%   rd   rf   )r   locationtitlerj   rk   rl   rm   r    r    r!   _explain_github   s&   zBreakage._explain_githubN)r   )
r   r   r   r   r   r   r   r   r   r   r   r   )r+   r,   r-   r   r   r.   )r2   r	   r   r   )r   r   )r   rO   rU   r,   r   r   )__name__
__module____qualname____doc____annotations__r"   r'   r*   r1   r	   ONE_LINEr5   propertyr:   r=   r?   rG   rI   rK   rN   rS   r[   r]   rb   rd   rf   rn   rs   rw   r{   r    r    r    r!   r   !   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   r   r   c                      t  j d| jj dS N()superrN   r   r)   r&   	__class__r    r!   rN         z%ParameterMovedBreakage._relative_pathTrT   rU   r,   c                  <   |rt jnd}|rt jnd}t j d| | jj | dS Nr   r   r   r   BLUEr`   r   rN   r   r)   r   rU   bluerZ   r   r    r!   r]          z$ParameterMovedBreakage._format_titlec                C     dS r^   r    r\   r    r    r!   rd        z(ParameterMovedBreakage._format_old_valuec                C  r   r^   r    r\   r    r    r!   rf     r   z(ParameterMovedBreakage._format_new_valuer|   r}   )r~   r   r   r   r   PARAMETER_MOVEDr   r   r   rN   r]   rd   rf   __classcell__r    r    r   r!   r         
 r   c                      r   )ParameterRemovedBreakagez/Specific breakage class for removed parameters.r   r   r   r   c                   r   r   r   r&   r   r    r!   rN     r   z'ParameterRemovedBreakage._relative_pathTrT   rU   r,   c                  r   r   r   r   r   r    r!   r]     r   z&ParameterRemovedBreakage._format_titlec                C  r   r^   r    r\   r    r    r!   rd     r   z*ParameterRemovedBreakage._format_old_valuec                C  r   r^   r    r\   r    r    r!   rf     r   z*ParameterRemovedBreakage._format_new_valuer|   r}   )r~   r   r   r   r   PARAMETER_REMOVEDr   r   r   rN   r]   rd   rf   r   r    r    r   r!   r   	  r   r   c                      r   )ParameterChangedKindBreakagez:Specific breakage class for parameters whose kind changed.r   r   r   r   c                   r   r   r   r&   r   r    r!   rN   #  r   z+ParameterChangedKindBreakage._relative_pathTrT   rU   r,   c                  r   r   r   r   r   r    r!   r]   '  r   z*ParameterChangedKindBreakage._format_titlec                C     t | jjjS r$   )r   r   r   r%   r\   r    r    r!   rd   ,     z.ParameterChangedKindBreakage._format_old_valuec                C  r   r$   )r   r   r   r%   r\   r    r    r!   rf   /  r   z.ParameterChangedKindBreakage._format_new_valuer|   r}   )r~   r   r   r   r   PARAMETER_CHANGED_KINDr   r   r   rN   r]   rd   rf   r   r    r    r   r!   r     r   r   c                      r   )ParameterChangedDefaultBreakagezCSpecific breakage class for parameters whose default value changed.r   r   r   r   c                   r   r   r   r&   r   r    r!   rN   8  r   z.ParameterChangedDefaultBreakage._relative_pathTrT   rU   r,   c                  r   r   r   r   r   r    r!   r]   <  r   z-ParameterChangedDefaultBreakage._format_titlec                C     t | jjS r$   )r   r   defaultr\   r    r    r!   rd   A     z1ParameterChangedDefaultBreakage._format_old_valuec                C  r   r$   )r   r   r   r\   r    r    r!   rf   D  r   z1ParameterChangedDefaultBreakage._format_new_valuer|   r}   )r~   r   r   r   r   PARAMETER_CHANGED_DEFAULTr   r   r   rN   r]   rd   rf   r   r    r    r   r!   r   3  r   r   c                      r   ) ParameterChangedRequiredBreakagez=Specific breakage class for parameters which became required.r   r   r   r   c                   r   r   r   r&   r   r    r!   rN   M  r   z/ParameterChangedRequiredBreakage._relative_pathTrT   rU   r,   c                  r   r   r   r   r   r    r!   r]   Q  r   z.ParameterChangedRequiredBreakage._format_titlec                C  r   r^   r    r\   r    r    r!   rd   V  r   z2ParameterChangedRequiredBreakage._format_old_valuec                C  r   r^   r    r\   r    r    r!   rf   Y  r   z2ParameterChangedRequiredBreakage._format_new_valuer|   r}   )r~   r   r   r   r   PARAMETER_CHANGED_REQUIREDr   r   r   rN   r]   rd   rf   r   r    r    r   r!   r   H  r   r   c                      r   )ParameterAddedRequiredBreakagez=Specific breakage class for new parameters added as required.r   r   r   r   c                   r   r   )r   rN   r   r)   r&   r   r    r!   rN   b  r   z-ParameterAddedRequiredBreakage._relative_pathTrT   rU   r,   c                  r   r   )r   r   r`   r   rN   r   r)   r   r   r    r!   r]   f  r   z,ParameterAddedRequiredBreakage._format_titlec                C  r   r^   r    r\   r    r    r!   rd   k  r   z0ParameterAddedRequiredBreakage._format_old_valuec                C  r   r^   r    r\   r    r    r!   rf   n  r   z0ParameterAddedRequiredBreakage._format_new_valuer|   r}   )r~   r   r   r   r   PARAMETER_ADDED_REQUIREDr   r   r   rN   r]   rd   rf   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     
 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   TrT   rU   r,   r   r   c                C  r   r^   r    r\   r    r    r!   rd   }  r   z'ObjectRemovedBreakage._format_old_valuec                C  r   r^   r    r\   r    r    r!   rf     r   z'ObjectRemovedBreakage._format_new_valueNr}   )
r~   r   r   r   r   rP   r   r   rd   rf   r    r    r    r!   r   x  
   
 r   c                   @  r   )ObjectChangedKindBreakagez7Specific breakage class for objects whose kind changed.r   r   TrT   rU   r,   r   r   c                C  r#   r$   )r   r%   r\   r    r    r!   rd     r(   z+ObjectChangedKindBreakage._format_old_valuec                C  r#   r$   )r   r%   r\   r    r    r!   rf     r(   z+ObjectChangedKindBreakage._format_new_valueNr}   )
r~   r   r   r   r   OBJECT_CHANGED_KINDr   r   rd   rf   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   TrT   rU   r,   r   r   c                C     dd dd | jD  d S )N[, c                 s      | ]}|j V  qd S r$   rH   .0baser    r    r!   	<genexpr>      z=ClassRemovedBaseBreakage._format_old_value.<locals>.<genexpr>])rq   r   r\   r    r    r!   rd        z*ClassRemovedBaseBreakage._format_old_valuec                C  r   )Nr   r   c                 s  r   r$   r   r   r    r    r!   r     r   z=ClassRemovedBaseBreakage._format_new_value.<locals>.<genexpr>r   )rq   r   r\   r    r    r!   rf     r   z*ClassRemovedBaseBreakage._format_new_valueNr}   )
r~   r   r   r   r   CLASS_REMOVED_BASEr   r   rd   rf   r    r    r    r!   r     r   r   	old_classr   	new_class
seen_pathsset[str]r   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   )basesrM   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    )r)   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   )r   )
parametersr
   var_positionalvar_keywordrC   r)   r   keyword_onlypositional_onlypositional_or_keywordr   requiredr   _POSITIONALrE   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_indexr   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 )Nru   )r%   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   )r7   targetr   r   debugr0   _type_based_yield)r   r   r   
old_member
new_memberr    r    r!   _alias_incompatibilities
  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   r0   KeyErrorr7   	is_moduler   r   )r   r   r   r)   r   r   r    r    r!   r     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   )r0   addr7   r   r   r   r  r   is_classr   is_functionr   is_attributer   )r   r   r   r    r    r!   r   /  s:   
r   r,   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   T  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_changesl  s   r  )r   r   r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   )r   r   r   r   r   r,   )r   r   r   r   r   r   )?
__future__r   r  pathlibr   typingr   r   coloramar   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   object	_sentinelr  r    r    r    r!   <module>   sP    T


K
	

%