o
    Ëý°jŠ  ã                   @   sŽ   d dl mZ d dlmZmZmZmZmZ ddlm	Z	 ddl
mZmZ er.ddlmZmZmZ G dd„ deƒZd	d
ddded ddfdd„ZdS )é    )Ú
itemgetter)ÚCallableÚIterableÚ
NamedTupleÚOptionalÚTYPE_CHECKINGé   )Úerrors)Úis_renderableÚ	rich_cast)ÚConsoleÚConsoleOptionsÚRenderableTypec                   @   s¦   e Zd ZU dZeed< 	 eed< 	 edefdd„ƒZddd„Zd	edd fd
d„Z	d	edd fdd„Z
	ddee dee dd fdd„Ze								 ddd„ƒZdS )ÚMeasurementzSStores the minimum and maximum widths (in characters) required to render an object.ÚminimumÚmaximumÚreturnc                 C   s   | j | j S )z+Get difference between maximum and minimum.)r   r   )Úself© r   ú‹/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/pip/_vendor/rich/measure.pyÚspan   s   zMeasurement.spanc                 C   s4   | \}}t td|ƒ|ƒ}ttd|ƒtdt||ƒƒƒS )z“Get measurement that ensures that minimum <= maximum and minimum >= 0

        Returns:
            Measurement: A normalized measurement.
        r   )ÚminÚmaxr   )r   r   r   r   r   r   Ú	normalize   s   zMeasurement.normalizeÚwidthc                 C   s   | \}}t t||ƒt||ƒƒS )z¾Get a RenderableWith where the widths are <= width.

        Args:
            width (int): Maximum desired width.

        Returns:
            Measurement: New Measurement object.
        )r   r   ©r   r   r   r   r   r   r   Úwith_maximum"   s   	zMeasurement.with_maximumc                 C   s(   | \}}t d|ƒ}tt ||ƒt ||ƒƒS )z¾Get a RenderableWith where the widths are >= width.

        Args:
            width (int): Minimum desired width.

        Returns:
            Measurement: New Measurement object.
        r   )r   r   r   r   r   r   Úwith_minimum.   s   	
zMeasurement.with_minimumNÚ	min_widthÚ	max_widthc                 C   s,   | }|dur|  |¡}|dur| |¡}|S )aN  Clamp a measurement within the specified range.

        Args:
            min_width (int): Minimum desired width, or ``None`` for no minimum. Defaults to None.
            max_width (int): Maximum desired width, or ``None`` for no maximum. Defaults to None.

        Returns:
            Measurement: New Measurement object.
        N)r   r   )r   r   r   Úmeasurementr   r   r   Úclamp;   s   

zMeasurement.clampÚconsoler   Úoptionsr   Ú
renderabler   c                 C   s¢   |j }|dk rtddƒS t|tƒr|j||jd�}t|ƒ}t|ƒrHt|ddƒ}|durC|||ƒ 	¡  
|¡}|jdk r?tddƒS | 	¡ S td|ƒS t d|›d�¡‚)aí  Get a measurement for a renderable.

        Args:
            console (~rich.console.Console): Console instance.
            options (~rich.console.ConsoleOptions): Console options.
            renderable (RenderableType): An object that may be rendered with Rich.

        Raises:
            errors.NotRenderableError: If the object is not renderable.

        Returns:
            Measurement: Measurement object containing range of character widths required to render the object.
        r   r   )ÚmarkupÚ__rich_measure__NzUnable to get render width for zD; a str, Segment, or object with __rich_console__ method is required)r   r   Ú
isinstanceÚstrÚ
render_strr%   r   r
   Úgetattrr   r   r   r	   ÚNotRenderableError)Úclsr"   r#   r$   Ú
_max_widthÚget_console_widthÚrender_widthr   r   r   ÚgetN   s*   


þý



ÿzMeasurement.get)r   r   )NN)r"   r   r#   r   r$   r   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚintÚ__annotations__Úpropertyr   r   r   r   r   r!   Úclassmethodr0   r   r   r   r   r      s:   
 

ÿÿÿ
þÿÿÿþr   r"   r   r#   r   Úrenderablesr   r   c                    sT   |st ddƒS t j‰‡ ‡‡fdd„|D ƒ}t t|tdƒd�jt|tdƒd�jƒ}|S )a§  Get a measurement that would fit a number of renderables.

    Args:
        console (~rich.console.Console): Console instance.
        options (~rich.console.ConsoleOptions): Console options.
        renderables (Iterable[RenderableType]): One or more renderable objects.

    Returns:
        Measurement: Measurement object containing range of character widths required to
            contain all given renderables.
    r   c                    s   g | ]}ˆˆ ˆ|ƒ‘qS r   r   )Ú.0r$   ©r"   Úget_measurementr#   r   r   Ú
<listcomp>Ž   s    ÿz'measure_renderables.<locals>.<listcomp>)Úkeyr   )r   r0   r   r   r   r   )r"   r#   r9   ÚmeasurementsÚmeasured_widthr   r;   r   Úmeasure_renderables{   s   
ÿþrA   N)Úoperatorr   Útypingr   r   r   r   r   Ú r	   Úprotocolr
   r   r"   r   r   r   r   rA   r   r   r   r   Ú<module>   s     pÿþýü