
    [Fi              
           d 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
dZd	Z	 ddee   de	dee   dee   fdZde	defdZ	 	 ddee   dee   dee   dee   fdZdee   dedee   fdZy
)zUtilities for truncating assertion output.

Current default behaviour is to truncate assertion explanations at
terminal lines, unless running with an assertions verbosity level of at least 2 or running on CI.
    )List)Optional)util)Config)Item   i  zuse '-vv' to showNexplanationitem
max_lengthreturnc                 2    t        |      rt        |       S | S )zGTruncate this assertion explanation if the given test item is eligible.)_should_truncate_item_truncate_explanation)r	   r
   r   s      l/var/www/html/BankruptcyAI-uat/bankruptcy-ai/venv/lib/python3.12/site-packages/_pytest/assertion/truncate.pytruncate_if_requiredr      s     T"$[11    c                     | j                   j                  t        j                        }|dk  xr t	        j
                          S )z9Whether or not this test item is eligible for truncation.   )configget_verbosityr   VERBOSITY_ASSERTIONSr   running_on_ci)r
   verboses     r   r   r      s7    kk''(C(CDGQ;3t11333r   input_lines	max_lines	max_charsc                    |t         }|t        }t        dj                  |             }|dz   }|dz   }t        |       |k  r||k  r| S | d| }d}t        dj                  |            |kD  rt	        ||      }nd}t        |       t        |      z
  }|d   r|d   dz   |d<   |r|d	z  }nd|d<   g |dd
| d|d	k(  rdnd dt
         S )a  Truncate given list of strings that makes up the assertion explanation.

    Truncates to either 8 lines, or 640 characters - whichever the input reaches
    first, taking the truncation explanation into account. The remaining lines
    will be replaced by a usage message.
    N F   r   TFz...   z...Full output truncated (z linesz
 hidden), )DEFAULT_MAX_LINESDEFAULT_MAX_CHARSlenjoin_truncate_by_char_count	USAGE_MSG)	r   r   r   input_char_counttolerable_max_charstolerable_max_linestruncated_explanationtruncated_chartruncated_line_counts	            r   r   r   #   s=    %	%	 277;/0 	B  $a-K// 33'
3N
277()*-@@ 7!9!
 {+c2G.HHR $9"$=$Eb! A%  %*b!	
 %%9$:%%*2
4Jyk	K r   c                     d}t        |       D ]&  \  }}|t        |      z   |kD  r n|t        |      z  }( | d  }| |   }|r
||z
  }|d | }|j                  |       |S )Nr   )	enumerater%   append)r   r   iterated_char_countiterated_index
input_linetruncated_result
final_linefinal_line_truncate_points           r   r'   r'   g   s    &/&< /"
Z09<s:./ #?N3^,J$-0C$C! :!:;
J'r   )N)NN)__doc__typingr   r   _pytest.assertionr   _pytest.configr   _pytest.nodesr   r#   r$   r(   strintr   boolr   r   r'    r   r   <module>rA      s      " !    	 EIc"&4<SM	#Y4 4 4  $#AcA}A }A 
#Y	AHc s tCy r   