a
    hbòfŠ  ã                   @   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
ed ddœ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edœdd„ƒZd dœdd„Zed d	œd
d„Z	ed d	œdd„Z
dee ee d dœdd„Zedddd 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   úU/home/httpd/docs/test/DocsMgr/lib/python3.9/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)Úwidthr   c                 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_widthr   c                 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.clampr   r   r   )ÚconsoleÚoptionsÚ
renderabler   c                 C   s¨   |j }|dk rtddƒS t|tƒr2|j||jd�}t|ƒ}t|ƒr’t|ddƒ}|dur†|||ƒ 	¡  
|¡}|jdk r~tddƒS | 	¡ S td|ƒS nt d|›d�¡‚dS )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)NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚintÚ__annotations__Úpropertyr   r   r   r   r   r!   Úclassmethodr0   r   r   r   r   r      s"   

 ÿþþr   r   r   r   )r"   r#   Úrenderablesr   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   qü