GRAYBYTE WORDPRESS FILE MANAGER3787

Server IP : 198.54.121.189 / Your IP : 216.73.216.112
System : Linux premium69.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64
PHP Version : 7.4.33
Disable Function : NONE
cURL : ON | WGET : ON | Sudo : OFF | Pkexec : OFF
Directory : /opt/alt/python38/lib/python3.8/site-packages/pip/_vendor/rich/
Upload Files :
Current_dir [ Not Writeable ] Document_root [ Writeable ]

Command :


Current File : /opt/alt/python38/lib/python3.8/site-packages/pip/_vendor/rich//_ratio.py
import sys
from fractions import Fraction
from math import ceil
from typing import cast, List, Optional, Sequence

if sys.version_info >= (3, 8):
    from typing import Protocol
else:
    from pip._vendor.typing_extensions import Protocol  # pragma: no cover


class Edge(Protocol):
    """Any object that defines an edge (such as Layout)."""

    size: Optional[int] = None
    ratio: int = 1
    minimum_size: int = 1


def ratio_resolve(total: int, edges: Sequence[Edge]) -> List[int]:
    """Divide total space to satisfy size, ratio, and minimum_size, constraints.

    The returned list of integers should add up to total in most cases, unless it is
    impossible to satisfy all the constraints. For instance, if there are two edges
    with a minimum size of 20 each and `total` is 30 then the returned list will be
    greater than total. In practice, this would mean that a Layout object would
    clip the rows that would overflow the screen height.

    Args:
        total (int): Total number of characters.
        edges (List[Edge]): Edges within total space.

    Returns:
        List[int]: Number of characters for each edge.
    """
    # Size of edge or None for yet to be determined
    sizes = [(edge.size or None) for edge in edges]

    _Fraction = Fraction

    # While any edges haven't been calculated
    while None in sizes:
        # Get flexible edges and index to map these back on to sizes list
        flexible_edges = [
            (index, edge)
            for index, (size, edge) in enumerate(zip(sizes, edges))
            if size is None
        ]
        # Remaining space in total
        remaining = total - sum(size or 0 for size in sizes)
        if remaining <= 0:
            # No room for flexible edges
            return [
                ((edge.minimum_size or 1) if size is None else size)
                for size, edge in zip(sizes, edges)
            ]
        # Calculate number of characters in a ratio portion
        portion = _Fraction(
            remaining, sum((edge.ratio or 1) for _, edge in flexible_edges)
        )

        # If any edges will be less than their minimum, replace size with the minimum
        for index, edge in flexible_edges:
            if portion * edge.ratio <= edge.minimum_size:
                sizes[index] = edge.minimum_size
                # New fixed size will invalidate calculations, so we need to repeat the process
                break
        else:
            # Distribute flexible space and compensate for rounding error
            # Since edge sizes can only be integers we need to add the remainder
            # to the following line
            remainder = _Fraction(0)
            for index, edge in flexible_edges:
                size, remainder = divmod(portion * edge.ratio + remainder, 1)
                sizes[index] = size
            break
    # Sizes now contains integers only
    return cast(List[int], sizes)


def ratio_reduce(
    total: int, ratios: List[int], maximums: List[int], values: List[int]
) -> List[int]:
    """Divide an integer total in to parts based on ratios.

    Args:
        total (int): The total to divide.
        ratios (List[int]): A list of integer ratios.
        maximums (List[int]): List of maximums values for each slot.
        values (List[int]): List of values

    Returns:
        List[int]: A list of integers guaranteed to sum to total.
    """
    ratios = [ratio if _max else 0 for ratio, _max in zip(ratios, maximums)]
    total_ratio = sum(ratios)
    if not total_ratio:
        return values[:]
    total_remaining = total
    result: List[int] = []
    append = result.append
    for ratio, maximum, value in zip(ratios, maximums, values):
        if ratio and total_ratio > 0:
            distributed = min(maximum, round(ratio * total_remaining / total_ratio))
            append(value - distributed)
            total_remaining -= distributed
            total_ratio -= ratio
        else:
            append(value)
    return result


def ratio_distribute(
    total: int, ratios: List[int], minimums: Optional[List[int]] = None
) -> List[int]:
    """Distribute an integer total in to parts based on ratios.

    Args:
        total (int): The total to divide.
        ratios (List[int]): A list of integer ratios.
        minimums (List[int]): List of minimum values for each slot.

    Returns:
        List[int]: A list of integers guaranteed to sum to total.
    """
    if minimums:
        ratios = [ratio if _min else 0 for ratio, _min in zip(ratios, minimums)]
    total_ratio = sum(ratios)
    assert total_ratio > 0, "Sum of ratios must be > 0"

    total_remaining = total
    distributed_total: List[int] = []
    append = distributed_total.append
    if minimums is None:
        _minimums = [0] * len(ratios)
    else:
        _minimums = minimums
    for ratio, minimum in zip(ratios, _minimums):
        if total_ratio > 0:
            distributed = max(minimum, ceil(ratio * total_remaining / total_ratio))
        else:
            distributed = total_remaining
        append(distributed)
        total_ratio -= ratio
        total_remaining -= distributed
    return distributed_total


if __name__ == "__main__":
    from dataclasses import dataclass

    @dataclass
    class E:

        size: Optional[int] = None
        ratio: int = 1
        minimum_size: int = 1

    resolved = ratio_resolve(110, [E(None, 1, 1), E(None, 1, 1), E(None, 1, 1)])
    print(sum(resolved))

[ Back ]
Name
Size
Last Modified
Owner / Group
Permissions
Options
..
--
March 03 2024 22:49:50
root / linksafe
0755
__pycache__
--
March 03 2024 22:49:50
root / linksafe
0755
__init__.py
5.805 KB
November 13 2023 21:40:26
root / linksafe
0644
__main__.py
8.602 KB
November 13 2023 21:40:26
root / linksafe
0644
_cell_widths.py
9.859 KB
November 13 2023 21:40:26
root / linksafe
0644
_emoji_codes.py
136.948 KB
November 13 2023 21:40:26
root / linksafe
0644
_emoji_replace.py
1.039 KB
November 13 2023 21:40:26
root / linksafe
0644
_export_format.py
2.064 KB
November 13 2023 21:40:26
root / linksafe
0644
_extension.py
0.259 KB
November 13 2023 21:40:26
root / linksafe
0644
_inspect.py
9.468 KB
November 13 2023 21:40:26
root / linksafe
0644
_log_render.py
3.149 KB
November 13 2023 21:40:26
root / linksafe
0644
_loop.py
1.207 KB
November 13 2023 21:40:26
root / linksafe
0644
_palettes.py
6.897 KB
November 13 2023 21:40:26
root / linksafe
0644
_pick.py
0.413 KB
November 13 2023 21:40:26
root / linksafe
0644
_ratio.py
5.344 KB
November 13 2023 21:40:26
root / linksafe
0644
_spinners.py
19.452 KB
November 13 2023 21:40:26
root / linksafe
0644
_stack.py
0.343 KB
November 13 2023 21:40:26
root / linksafe
0644
_timer.py
0.407 KB
November 13 2023 21:40:26
root / linksafe
0644
_win32_console.py
22.285 KB
November 13 2023 21:40:26
root / linksafe
0644
_windows.py
1.881 KB
November 13 2023 21:40:26
root / linksafe
0644
_windows_renderer.py
2.718 KB
November 13 2023 21:40:26
root / linksafe
0644
_wrap.py
1.797 KB
November 13 2023 21:40:26
root / linksafe
0644
abc.py
0.869 KB
November 13 2023 21:40:26
root / linksafe
0644
align.py
10.125 KB
November 13 2023 21:40:26
root / linksafe
0644
ansi.py
6.66 KB
November 13 2023 21:40:26
root / linksafe
0644
bar.py
3.188 KB
November 13 2023 21:40:26
root / linksafe
0644
box.py
9.633 KB
November 13 2023 21:40:26
root / linksafe
0644
cells.py
4.397 KB
November 13 2023 21:40:26
root / linksafe
0644
color.py
17.536 KB
November 13 2023 21:40:26
root / linksafe
0644
color_triplet.py
1.029 KB
November 13 2023 21:40:26
root / linksafe
0644
columns.py
6.964 KB
November 13 2023 21:40:26
root / linksafe
0644
console.py
93.638 KB
November 13 2023 21:40:26
root / linksafe
0644
constrain.py
1.258 KB
November 13 2023 21:40:26
root / linksafe
0644
containers.py
5.368 KB
November 13 2023 21:40:26
root / linksafe
0644
control.py
6.475 KB
November 13 2023 21:40:26
root / linksafe
0644
default_styles.py
7.768 KB
November 13 2023 21:40:26
root / linksafe
0644
diagnose.py
0.949 KB
November 13 2023 21:40:26
root / linksafe
0644
emoji.py
2.442 KB
November 13 2023 21:40:26
root / linksafe
0644
errors.py
0.627 KB
November 13 2023 21:40:26
root / linksafe
0644
file_proxy.py
1.578 KB
November 13 2023 21:40:26
root / linksafe
0644
filesize.py
2.448 KB
November 13 2023 21:40:26
root / linksafe
0644
highlighter.py
9.36 KB
November 13 2023 21:40:26
root / linksafe
0644
json.py
4.933 KB
November 13 2023 21:40:26
root / linksafe
0644
jupyter.py
3.176 KB
November 13 2023 21:40:26
root / linksafe
0644
layout.py
13.744 KB
November 13 2023 21:40:26
root / linksafe
0644
live.py
13.84 KB
November 13 2023 21:40:26
root / linksafe
0644
live_render.py
3.581 KB
November 13 2023 21:40:26
root / linksafe
0644
logging.py
11.202 KB
November 13 2023 21:40:26
root / linksafe
0644
markup.py
8.006 KB
November 13 2023 21:40:26
root / linksafe
0644
measure.py
5.181 KB
November 13 2023 21:40:26
root / linksafe
0644
padding.py
4.854 KB
November 13 2023 21:40:26
root / linksafe
0644
pager.py
0.809 KB
November 13 2023 21:40:26
root / linksafe
0644
palette.py
3.316 KB
November 13 2023 21:40:26
root / linksafe
0644
panel.py
8.539 KB
November 13 2023 21:40:26
root / linksafe
0644
pretty.py
35.719 KB
November 13 2023 21:40:26
root / linksafe
0644
progress.py
58.346 KB
November 13 2023 21:40:26
root / linksafe
0644
progress_bar.py
7.97 KB
November 13 2023 21:40:26
root / linksafe
0644
prompt.py
11.038 KB
November 13 2023 21:40:26
root / linksafe
0644
protocol.py
1.358 KB
November 13 2023 21:40:26
root / linksafe
0644
region.py
0.162 KB
November 13 2023 21:40:26
root / linksafe
0644
repr.py
4.345 KB
November 13 2023 21:40:26
root / linksafe
0644
rule.py
4.661 KB
November 13 2023 21:40:26
root / linksafe
0644
scope.py
2.775 KB
November 13 2023 21:40:26
root / linksafe
0644
screen.py
1.554 KB
November 13 2023 21:40:26
root / linksafe
0644
segment.py
23.656 KB
November 13 2023 21:40:26
root / linksafe
0644
spinner.py
4.271 KB
November 13 2023 21:40:26
root / linksafe
0644
status.py
4.321 KB
November 13 2023 21:40:26
root / linksafe
0644
style.py
25.625 KB
November 13 2023 21:40:26
root / linksafe
0644
styled.py
1.229 KB
November 13 2023 21:40:26
root / linksafe
0644
syntax.py
33.884 KB
November 13 2023 21:40:26
root / linksafe
0644
table.py
38.589 KB
November 13 2023 21:40:26
root / linksafe
0644
terminal_theme.py
3.291 KB
November 13 2023 21:40:26
root / linksafe
0644
text.py
43.619 KB
November 13 2023 21:40:26
root / linksafe
0644
theme.py
3.542 KB
November 13 2023 21:40:26
root / linksafe
0644
themes.py
0.1 KB
November 13 2023 21:40:26
root / linksafe
0644
traceback.py
25.449 KB
November 13 2023 21:40:26
root / linksafe
0644
tree.py
8.954 KB
November 13 2023 21:40:26
root / linksafe
0644

GRAYBYTE WORDPRESS FILE MANAGER @ 2025
CONTACT ME
Static GIF