
    	hYF                     <   U d 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lm
Z
 ddlmZ dd	lmZ dd
lmZ ddlm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lmZ dZeeeeegee         f                  ed<   dZeeeeegdf                  ed<   dZee         ed<   dedefdZ dede
e         fdZ!dee         de
e         fdZ"dede#fdZ$dede#fdZ%dede#fdZ&dede#fdZ'dede#fd Z(dede#fd!Z)dede#fd"Z*dede#fd#Z+dede#fd$Z,	 d8d&ed'ed(ed)e#dee
e                  f
d*Z-d9d'ed(ed+ede
e         fd,Z.d9d'ed(ed+ede
e         fd-Z/de
e         ddfd.Z0	 d9d'e	e         d(e	e         d+ede
e         fd/Z1	 d9d'ee         d(ee         d+ede
e         fd0Z2	 d9d'ee         d(ee         d+ede
e         fd1Z3	 d9d'eeef         d(eeef         d+ede
e         fd2Z4d'ed(ed+ede
e         fd3Z5d9d4ed5ed+ede
e         fd6Z6de#fd7Z7dS ):z"Utilities for assertion debugging.    N)AbstractSet)Any)Callable)Iterable)List)Mapping)Optional)Sequence)	normalize)outcomes)_pformat_dispatch)saferepr)saferepr_unlimited)Config_reprcompare_assertion_pass_configexplanationreturnc                 h    t          |           }t          |          }d                    |          S )a  Format an explanation.

    Normally all embedded newlines are escaped, however there are
    three exceptions: \n{, \n} and \n~.  The first two are intended
    cover nested explanations, see function and attribute explanations
    for examples (.visit_Call(), visit_Attribute()).  The last one is
    for when one explanation needs to span multiple lines, e.g. when
    displaying diffs.
    
)_split_explanation_format_linesjoin)r   linesresults      c/var/www/html/web-builder-api.evdpl.com/venv/lib/python3.11/site-packages/_pytest/assertion/util.pyformat_explanationr   $   s0     {++E5!!F99V    c                     | pd                     d          }|d         g}|dd         D ]7}|r |d         dv r|                    |           $|dxx         d|z   z  cc<   8|S )	zReturn a list of individual lines in the explanation.

    This will return a list of lines split on '\n{', '\n}' and '\n~'.
    Any other newlines will be escaped and appear in the line as the
    literal '\n' characters.
     r   r      N){}~>z\n)splitappend)r   	raw_linesr   valuess       r   r   r   3   s     "))$//Iq\NEABB- ( ( 	(fQi#777LL    "III'IIIILr   r   c                 r   t          | dd                   }dg}dg}| dd         D ]x}|                    d          r|d         rd}nd}|                    t          |                     |dxx         dz  cc<   |                    d           |                    dd	t          |          dz
  z  z   |z   |dd         z              |                    d
          rH|                                 |                                 ||d         xx         |dd         z  cc<   |d         dv sJ |dxx         dz  cc<   |                    d          rt          |          nt          |          dz
  }|                    d	|z  |dd         z              zt          |          dk    sJ |S )a  Format the individual lines.

    This will replace the '{', '}' and '~' characters of our mini formatting
    language with the proper 'where ...', 'and ...' and ' + ...' text, taking
    care of indentation along the way.

    Return a list of formatted lines.
    Nr"   r   r#   r'   zand   zwhere z +  r$   )r%   r&   r%   )list
startswithr)   lenpop)r   r   stackstackcntlinesindents          r   r   r   D   s    %)__FCEsHabb	 4 4??3 	4| LLV%%%RLLLALLLOOAMM$Ua!881<tABBxGHHHH__S!! 	4IIKKKLLNNN59abb)7j(((("IIINIII#'??3#7#7KSZZZSZZ!^FMM$-$qrr(23333u::????Mr   xc                 l    t          | t          j        j                  ot          | t                     S N)
isinstancecollectionsabcr
   strr7   s    r   
issequencer?   g   s)    a122M:a;M;M7MMr   c                 ,    t          | t                    S r9   )r:   r=   r>   s    r   istextrA   k   s    ar   c                 ,    t          | t                    S r9   )r:   dictr>   s    r   isdictrD   o   s    ar   c                 :    t          | t          t          f          S r9   )r:   set	frozensetr>   s    r   issetrH   s   s    a#y)***r   objc                 R    t          | t                    ot          | dd           d uS )N_fields)r:   tuplegetattrrI   s    r   isnamedtuplerO   w   s(    c5!!Ogc9d&C&C4&OOr   c                 (    t          | dd           d uS )N__dataclass_fields__rM   rN   s    r   	isdataclsrS   {   s    3.55TAAr   c                 (    t          | dd           d uS )N__attrs_attrs__rR   rN   s    r   isattrsrV      s    3)400<<r   c                 d    	 t          |            t          |            S # t          $ r Y dS w xY w)NF)iterrA   	TypeErrorrN   s    r   
isiterablerZ      sB    S			#;;   uus   ! 
//c                     t          | j        d          rDt          | j        j        d          r*| j        j        j        }t	          |           rd|v S |dk    S dS )a  Check if an instance of an object contains the default eq

    First, we check if the object's __eq__ attribute has __code__,
    if so, we check the equally of the method code filename (__code__.co_filename)
    to the default one generated by the dataclass and attr module
    for dataclasses the default co_filename is <string>, for attrs class, the __eq__ should contain "attrs eq generated"
    __code__co_filenamezattrs generated eqz<string>T)hasattr__eq__r\   r]   rV   )rI   code_filenames     r   has_default_eqra      sd     sz:&& +73:3F+V+V +
+73<< 	9'=88
**4r   Fopleftright	use_asciic                 *   |                      d          }t          |t                    o6t          |t                    o!t          d|          t          d|          k    }|dk    r#t	          ||          }t	          ||          }n<dt          |          z
  dz
  dz  }t          |||          }t          |||          }| d| d| }	d	}
	 |d
k    rt          |||          }
n5|dk    r/t          |          r t          |          rt          |||          }
ni# t          j        $ r  t          $ rM d                    t          j        j                                                                                  dg}
Y nw xY w|
sd	S |	g|
z   S )z<Return specialised explanations for some operators/operands.verboseNFDr"   )re   A      )maxsizere    Nz==znot inz?(pytest_assertion plugin: representation of details failed: {}.z+ Probably an object has a faulty __repr__.))	getoptionr:   r=   r   r   r0   r   _compare_eq_anyrA   _notin_textr   Exit	Exceptionformat_pytest_codeExceptionInfofrom_current_getreprcrash)configrb   rc   rd   re   rg   	left_repr
right_reprrk   summaryr   s              r   assertrepr_comparer|      s    y))G
 	4 	>uc""	>eT""iu&=&==  {{&tyAAA	'CCC


 c"gg! T7iHHH	eW	JJJ
..R..*..GK
::)$w??KK8^^d|| @u @)$w??=    
 
 
MTT+88::HHJJ  :	

  t9{""s   AD" "A#FFrg   c                    g }t          |           r"t          |          rt          | ||          }nddlm} t	          | |          st	          ||          r>t	          | |          r| n|}t	          | |          r|n| }|                    |          }nt          |           t          |          k    r?t          |           st          |           st          |           rt          | ||          }nt          |           r!t          |          rt          | ||          }n_t          |           r!t          |          rt          | ||          }n/t          |           r t          |          rt!          | ||          }t#          |           r5t#          |          r&t%          | ||          }|                    |           |S )Nr   )
ApproxBase)rA   
_diff_text_pytest.python_apir~   r:   _repr_comparetyperS   rV   rO   _compare_eq_clsr?   _compare_eq_sequencerH   _compare_eq_setrD   _compare_eq_dictrZ   _compare_eq_iterableextend)rc   rd   rg   r   r~   approx_side
other_sideexpls           r   rn   rn      s   Kd|| %u % ug66111111dJ'' 	A:eZ+H+H 	A",T:">">I$$EK",T:">">HDJ%33J??KK$ZZ4;;&&dOO '&t}} '0<T0B0B ' *$w??KK 	A*U"3"3 	A.tUGDDKK4[[ 	AU5\\ 	A)$w??KKD\\ 	AfUmm 	A*4@@Kd 	%
5 1 1 	%'eW==Dt$$$r   c                 z   ddl m} g }|dk     rd}t          t          t	          |           t	          |                              D ]}| |         ||         k    r n|dk    r|dz  }d|z  g}| |d         } ||d         }t	          |           t	          |          k    rot          t	          |                     D ]}| |          ||          k    r n|dk    r4|dz  }|d                    |          gz  }| d|          } |d|          }d	}|                                 s|                                r>t          t          |                     } t          t          |                    }|d
gz  }|d  ||	                    |          | 	                    |                    D             z  }|S )zReturn the explanation for the diff between text.

    Unless --verbose is used this will skip leading and trailing
    characters which are identical to keep the diff minimal.
    r   )ndiffr"   *   
   z@Skipping %s identical leading characters in diff, use -v to showNzASkipping {} identical trailing characters in diff, use -v to showTz;Strings contain only whitespace, escaping them using repr()c                 8    g | ]}|                     d           S )r   )strip.0r4   s     r   
<listcomp>z_diff_text.<locals>.<listcomp>   s4        	

4  r   )
difflibr   rangeminr0   rr   isspacereprr=   
splitlines)rc   rd   rg   r   r   ikeependss          r   r   r      s    K{{s3t99c%jj1122 	 	AAw%("" #r66GARUVVK 8D!""IEt99E

""3t99%%  8uaRy((E )2vvR99?   CaRCycrc
H||~~ W WCIISZZ  UVV   E%**844dooh6O6OPP   K r   c                     | d         dd         }|dv r!d| d         dd         z   | d<   |g| z   | dd<   | d         dd         }|dv r#| d         dd         dz   | d<   | |gz   | dd<   dS dS )	z6Move opening/closing parenthesis/bracket to own lines.r   Nr"   )([r#   rl   r'   ))]r$   , )r   openingclosings      r    _surrounding_parens_on_own_linesr   '  s    AhrrlG/!!q!""%a9u$aaaBinG/!!"IcrcNS(b	G9$aaa "!r   c                 `   |dk    rt                      sdgS dd l}t          j        |                                           }t          j        |                                          }t          |          }t          |          }||k    rBt          |                                           }t          |                                          }|dk    s|dk    rt          |           t          |           dg}|                    d |	                    ||          D                        |S )Nr   zUse -v to get more diffr"   z
Full diff:c              3   >   K   | ]}|                                 V  d S r9   )rstripr   s     r   	<genexpr>z'_compare_eq_iterable.<locals>.<genexpr>L  s;             r   )
running_on_cir   pprintpformatr   r0   r   r   r   r   )	rc   rd   rg   r   left_formattingright_formatting
lines_leftlines_rightr   s	            r   r   r   3  s;    !||MOO|)**NNNnT**5577O~e,,7799 _%%J&''K[  +D11<<>>,U33>>@@A~~q(999()9:::.K   ")--0@/"R"R      r   c                 @   t          | t                    ot          |t                    }g }t          |           }t          |          }t          t	          ||                    D ]R}| |         ||         k    r>|r| ||dz            }|||dz            }	n| |         }||         }	|d| d|d|	gz  } nS|r|S ||z
  }
|
rX|
dk    rd}t          | |                   }nd|
z
  }
d}t          ||                   }|
dk    r|| d| gz  }n|d	||
|fz  gz  }|S )
Nr"   z	At index z diff:  != r   LeftRightz contains one more item: z/%s contains %d more items, first extra item: %s)r:   bytesr0   r   r   r   )rc   rd   rg   comparing_bytesr   len_left	len_rightr   
left_valueright_valuelen_diffdir_with_moreextras                r   r   r   R  s    !u--J*UE2J2JOK4yyHE

I3x++,,  7eAh ' "!a!e)_
#AAI.!!W
#AhSSS*SSKSSTTKE# &   )#H a<<"MT)_--EE8|H#MU8_--Eq==}NNuNNOOKKA (E23 K r   c                    g }| |z
  }|| z
  }|r<|                     d           |D ]$}|                     t          |                     %|r<|                     d           |D ]$}|                     t          |                     %|S )NzExtra items in the left set:zExtra items in the right set:)r)   r   )rc   rd   rg   r   	diff_left
diff_rightitems          r   r   r     s     KuIJ /9::: 	/ 	/Dx~~.... /:;;; 	/ 	/Dx~~....r   c                     g }t                     }t                    }|                    |          } fd|D             }|r|dk     r|dt          |          z  gz  }n1|r/|dgz  }|t          j        |                                          z  } fd|D             }|rA|dgz  }|D ]8}	|t          |	 |	         i          dz   t          |	|	         i          z   gz  }9||z
  }
t          |
          }|rg|                    d||d	k    rd
ndfz             |                    t          j         fd|
D                                                                  ||z
  }t          |          }|rg|                    d||d	k    rd
ndfz             |                    t          j        fd|D                                                                  |S )Nc                 F    i | ]}|         |         k    ||         S r   r   r   krc   rd   s     r   
<dictcomp>z$_compare_eq_dict.<locals>.<dictcomp>  s1    >>>1$q'U1X*=*=AtAw*=*=*=r   rj   ,Omitting %s identical items, use -vv to showzCommon items:c                 8    h | ]}|         |         k    |S r   r   r   s     r   	<setcomp>z#_compare_eq_dict.<locals>.<setcomp>  s+    555!aE!H!4!4A!4!4!4r   zDiffering items:r   zLeft contains %d more item%s:r"   r!   r5   c                 "    i | ]}||         S r   r   )r   r   rc   s     r   r   z$_compare_eq_dict.<locals>.<dictcomp>  s    ;;;1AtAw;;;r   zRight contains %d more item%s:c                 "    i | ]}||         S r   r   )r   r   rd   s     r   r   z$_compare_eq_dict.<locals>.<dictcomp>  s    ===AAuQx===r   )	rF   intersectionr0   r   r   r   r   r)   r   )rc   rd   rg   r   set_left	set_rightcommonsamediffr   
extra_leftlen_extra_leftextra_rightlen_extra_rights   ``            r   r   r     sr     K4yyHE

I""9--F>>>>>>>>D 9!FTRSS	 9((v~d++6688855555v555D W*++ 	W 	WAHaa\22V;h5QR8}>U>UUVVKKI%J__N 
+^q%8%8rrcBC	
 	
 	
 	N;;;;
;;;<<GGII	
 	
 	
 h&K+&&O 
,o&:&:DE	
 	
 	
 	N=======>>IIKK	
 	
 	
 r   c           
         t          |           sg S t          |           r&dd l}|                    |           }d |D             }n<t	          |           r| j        }d |D             }nt          |           r| j        }nJ dg }g }|D ]O}t          | |          t          ||          k    r|	                    |           :|	                    |           Pg }	|s|r|	dgz  }	|r,|dk     r&|		                    dt          |          z             n1|r/|	d	gz  }	|	t          j        |                                          z  }	|r|	d
gz  }	|	t          j        |                                          z  }	|D ]W}t          | |          }
t          ||          }|	dd|z  |d|
d|gz  }	|	fdt          |
||          D             z  }	X|	S )Nr   c                 *    g | ]}|j         	|j        S r   )comparename)r   infos     r   r   z#_compare_eq_cls.<locals>.<listcomp>  s!    LLLt|L49LLLr   c                 <    g | ]}t          |d           |j        S )eq)rM   r   )r   fields     r   r   z#_compare_eq_cls.<locals>.<listcomp>  s*    VVV%PTAUAUV5:VVVr   Fr-   r!   rj   r   zMatching attributes:zDiffering attributes:z'Drill down into differing attribute %s:z: r   c                     g | ]}|z   S r   r   )r   r4   r6   s     r   r   z#_compare_eq_cls.<locals>.<listcomp>  s-          r   )ra   rS   dataclassesfieldsrV   rU   rO   rK   rM   r)   r0   r   r   r   rn   )rc   rd   rg   r   
all_fieldsfields_to_checkr   r   r   r   
field_leftfield_rightr6   s               @r   r   r     sq   $ 	  ''--
LLLLL	 )
VV:VVV	d		 ,uFDD   475%#8#888KKKKK t t 9!ICPTIIUVVVV	 9.//v~d++66888 /00v~d++66888 	 	E u--J!%//K9EA&,feeeZZZM K
     +JWMM   KK r   termtextc                    |                     |           }|d |         }||t          |           z   d          }||z   }t          |||          }dt          | d          z  g}|D ]y}	|	                    d          r|	                    d          r.|	                    d          r!|                    d|	dd          z              d|                    |	           z|S )	Nz%s is contained here:r   )rk   Skippingz- z+ r-   rj   )findr0   r   r   r/   r)   )
r   r   rg   indexheadtailcorrect_textr   newdiffr4   s
             r   ro   ro     s    IIdOOE<DD		!##$D$;LdL'22D&$)C)C)CCDG ! !??:&& 	??4   	??4   	!NN4$qrr(?++++NN4    Nr   c                  <    ddg} t          d | D                       S )z0Check if we're currently running on a CI system.CIBUILD_NUMBERc              3   2   K   | ]}|t           j        v V  d S r9   )osenviron)r   vars     r   r   z running_on_ci.<locals>.<genexpr>
  s)      55Ssbj 555555r   )any)env_varss    r   r   r     s)    n%H55H555555r   )F)r   )8__doc__collections.abcr;   r   r   typingr   r   r   r   r   r   r	   r
   unicodedatar   _pytest._coders   r   _pytest._io.safereprr   r   r   _pytest.configr   r   r=   object__annotations__r   intr   r   r   r   boolr?   rA   rD   rH   rO   rS   rV   rZ   ra   r|   rn   r   r   r   r   r   r   r   ro   r   r   r   r   <module>r     s   ( ( (     				                                                  ! ! ! ! ! !           2 2 2 2 2 2 ) ) ) ) ) ) 3 3 3 3 3 3 ! ! ! ! ! ! JNhxff 5x} DEF M M M >B(Cc?D#89: A A A !&	      C C    C DI    " #  49        FN# N$ N N N Nc d    c d    +S +T + + + +Pc Pd P P P PB3 B4 B B B B= = = = = =C D    		   , ?D1# 1#1#1#'*1#7;1#d3i1# 1# 1# 1#h   #  c  C  S	        F- -S - -s -49 - - - -`	%DI 	%$ 	% 	% 	% 	% ?@ 
3- (8;	#Y   @ ?@2 2
3-2 (28;2	#Y2 2 2 2l EF 
c
#.s#3>A	#Y   $ GH& &
#s(
&$+CH$5&@C&	#Y& & & &R0# 0c 0C 0DI 0 0 0 0f c  s 49    &6t 6 6 6 6 6 6r   