
    ESj$                    z    d Z ddlmZ ddlmZ ddlmZ ddlmZ dZ	e	dz  Z
dZdd	Zdd
Z	 	 	 	 	 	 	 	 ddZd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.
    )annotations)running_on_ci)Config)Item   P   zuse '-vv' to showc                D    t        |      \  }}}|rt        | ||      S | S )zGTruncate this assertion explanation if the given test item is eligible.)	max_lines	max_chars)_get_truncation_parameters_truncate_explanation)explanationitemshould_truncater
   r   s        k/Users/ahmed/devFolder/Ultron/claude-voice/.venv/lib/python3.12/site-packages/_pytest/assertion/truncate.pytruncate_if_requiredr      s4    ,Ft,L)OY	$
 	

     c                Z   | j                   j                  d      }t        ||nt              }| j                   j                  d      }t        ||nt              }| j                   j                  t        j                        }|dk  xr t                }|xr |dkD  xs |dkD  }|||fS )zgReturn the truncation parameters related to the given item, as (should truncate, max lines, max chars).truncation_limit_linestruncation_limit_chars   r   )	configgetiniintDEFAULT_MAX_LINESDEFAULT_MAX_CHARSget_verbosityr   VERBOSITY_ASSERTIONSr   )r   r
   r   verboser   s        r   r   r      s     ""#;<I!6I<MNI""#;<I!6I<MNIkk''(C(CDGk9-/&9O%J9q=+IIMOIy00r   c                l   |dz   }|dk(  st        |       |dz   k  r|dk(  st        d | D              |k  r| S | }n| d| }|dkD  xr t        d |D              |kD  }|rt        ||      }|dxx   dz  cc<   t        |       t        |      z
  t        |      z   }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 max_lines, or max_chars - whichever the input reaches
    first, taking the truncation explanation into account. The remaining lines
    will be replaced by a usage message.

    If max_chars=0, no truncation by character count is performed.
    If max_lines=0, no truncation by line count is performed.

    When this function is launched we know max_lines > 0 or max_chars > 0
    because _get_truncation_parameters was called first.
    F   r   r   c              3  2   K   | ]  }t        |        y wNlen).0ss     r   	<genexpr>z(_truncate_explanation.<locals>.<genexpr>U   s      =AQ   Nc              3  2   K   | ]  }t        |        y wr#   r$   )r&   es     r   r(   z(_truncate_explanation.<locals>.<genexpr>^   s     6 51A 5r)   z... z...Full output truncated (z line   r'   z
 hidden), )r%   sum_truncate_by_char_countr   	USAGE_MSG)input_linesr
   r   tolerable_max_charstruncated_explanationneed_to_truncate_chartruncated_line_counts          r   r   r   4   s   : 	B  A~[)Y]:>S = ==ATT + !,JY 7 	A 	M6 5669LL   7!9!
 "&K3455<Q8RR 	
 %%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)r2   r   iterated_char_countiterated_index
input_linetruncated_result
final_linefinal_line_truncate_points           r   r0   r0   q   s    &/&<"
Z09<s:. '= #?N3^,J$-0C$C! :!:;
J'r   N)r   	list[str]r   r   returnr@   )r   r   rA   ztuple[bool, int, int])r2   r@   r
   r   r   r   rA   r@   )r2   r@   r   r   rA   r@   )__doc__
__future__r   _pytest.compatr   _pytest.configr   _pytest.nodesr   r   r   r1   r   r   r   r0    r   r   <module>rH      si    # ( !   %* 		1*::: : 	:zr   