GRAYBYTE WORDPRESS FILE MANAGER3530

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/hc_python/lib/python3.12/site-packages/pip/_vendor/rich/
Upload Files :
Current_dir [ Not Writeable ] Document_root [ Writeable ]

Command :


Current File : /opt/hc_python/lib/python3.12/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
..
--
May 23 2025 08:31:17
root / root
0755
__pycache__
--
May 23 2025 08:31:18
root / root
0755
__init__.py
5.947 KB
May 23 2025 08:31:17
root / root
0644
__main__.py
8.278 KB
May 23 2025 08:31:17
root / root
0644
_cell_widths.py
9.97 KB
May 23 2025 08:31:17
root / root
0644
_emoji_codes.py
136.948 KB
May 23 2025 08:31:17
root / root
0644
_emoji_replace.py
1.039 KB
May 23 2025 08:31:17
root / root
0644
_export_format.py
2.078 KB
May 23 2025 08:31:17
root / root
0644
_extension.py
0.259 KB
May 23 2025 08:31:17
root / root
0644
_fileno.py
0.78 KB
May 23 2025 08:31:17
root / root
0644
_inspect.py
9.429 KB
May 23 2025 08:31:17
root / root
0644
_log_render.py
3.149 KB
May 23 2025 08:31:17
root / root
0644
_loop.py
1.207 KB
May 23 2025 08:31:17
root / root
0644
_null_file.py
1.361 KB
May 23 2025 08:31:17
root / root
0644
_palettes.py
6.897 KB
May 23 2025 08:31:17
root / root
0644
_pick.py
0.413 KB
May 23 2025 08:31:17
root / root
0644
_ratio.py
5.343 KB
May 23 2025 08:31:17
root / root
0644
_spinners.py
19.452 KB
May 23 2025 08:31:17
root / root
0644
_stack.py
0.343 KB
May 23 2025 08:31:17
root / root
0644
_timer.py
0.407 KB
May 23 2025 08:31:17
root / root
0644
_win32_console.py
22.222 KB
May 23 2025 08:31:17
root / root
0644
_windows.py
1.88 KB
May 23 2025 08:31:17
root / root
0644
_windows_renderer.py
2.718 KB
May 23 2025 08:31:17
root / root
0644
_wrap.py
3.324 KB
May 23 2025 08:31:17
root / root
0644
abc.py
0.869 KB
May 23 2025 08:31:17
root / root
0644
align.py
10.224 KB
May 23 2025 08:31:17
root / root
0644
ansi.py
6.759 KB
May 23 2025 08:31:17
root / root
0644
bar.py
3.187 KB
May 23 2025 08:31:17
root / root
0644
box.py
10.577 KB
May 23 2025 08:31:17
root / root
0644
cells.py
5.01 KB
May 23 2025 08:31:17
root / root
0644
color.py
17.784 KB
May 23 2025 08:31:17
root / root
0644
color_triplet.py
1.029 KB
May 23 2025 08:31:17
root / root
0644
columns.py
6.964 KB
May 23 2025 08:31:17
root / root
0644
console.py
98.208 KB
May 23 2025 08:31:17
root / root
0644
constrain.py
1.258 KB
May 23 2025 08:31:17
root / root
0644
containers.py
5.373 KB
May 23 2025 08:31:17
root / root
0644
control.py
6.475 KB
May 23 2025 08:31:17
root / root
0644
default_styles.py
8.063 KB
May 23 2025 08:31:17
root / root
0644
diagnose.py
0.975 KB
May 23 2025 08:31:17
root / root
0644
emoji.py
2.442 KB
May 23 2025 08:31:17
root / root
0644
errors.py
0.627 KB
May 23 2025 08:31:17
root / root
0644
file_proxy.py
1.644 KB
May 23 2025 08:31:17
root / root
0644
filesize.py
2.426 KB
May 23 2025 08:31:17
root / root
0644
highlighter.py
9.361 KB
May 23 2025 08:31:17
root / root
0644
json.py
4.913 KB
May 23 2025 08:31:17
root / root
0644
jupyter.py
3.176 KB
May 23 2025 08:31:17
root / root
0644
layout.py
13.676 KB
May 23 2025 08:31:17
root / root
0644
live.py
13.936 KB
May 23 2025 08:31:17
root / root
0644
live_render.py
3.58 KB
May 23 2025 08:31:17
root / root
0644
logging.py
12.166 KB
May 23 2025 08:31:17
root / root
0644
markup.py
8.253 KB
May 23 2025 08:31:17
root / root
0644
measure.py
5.181 KB
May 23 2025 08:31:17
root / root
0644
padding.py
4.793 KB
May 23 2025 08:31:17
root / root
0644
pager.py
0.809 KB
May 23 2025 08:31:17
root / root
0644
palette.py
3.316 KB
May 23 2025 08:31:17
root / root
0644
panel.py
10.962 KB
May 23 2025 08:31:17
root / root
0644
pretty.py
35.538 KB
May 23 2025 08:31:17
root / root
0644
progress.py
58.942 KB
May 23 2025 08:31:17
root / root
0644
progress_bar.py
7.971 KB
May 23 2025 08:31:17
root / root
0644
prompt.py
12.155 KB
May 23 2025 08:31:17
root / root
0644
protocol.py
1.358 KB
May 23 2025 08:31:17
root / root
0644
py.typed
0 KB
May 23 2025 08:31:17
root / root
0644
region.py
0.162 KB
May 23 2025 08:31:17
root / root
0644
repr.py
4.327 KB
May 23 2025 08:31:17
root / root
0644
rule.py
4.494 KB
May 23 2025 08:31:17
root / root
0644
scope.py
2.776 KB
May 23 2025 08:31:17
root / root
0644
screen.py
1.554 KB
May 23 2025 08:31:17
root / root
0644
segment.py
24.163 KB
May 23 2025 08:31:17
root / root
0644
spinner.py
4.262 KB
May 23 2025 08:31:17
root / root
0644
status.py
4.32 KB
May 23 2025 08:31:17
root / root
0644
style.py
26.425 KB
May 23 2025 08:31:17
root / root
0644
styled.py
1.229 KB
May 23 2025 08:31:17
root / root
0644
syntax.py
34.925 KB
May 23 2025 08:31:17
root / root
0644
table.py
39.11 KB
May 23 2025 08:31:17
root / root
0644
terminal_theme.py
3.291 KB
May 23 2025 08:31:17
root / root
0644
text.py
46.438 KB
May 23 2025 08:31:17
root / root
0644
theme.py
3.683 KB
May 23 2025 08:31:17
root / root
0644
themes.py
0.1 KB
May 23 2025 08:31:17
root / root
0644
traceback.py
34.346 KB
May 23 2025 08:31:17
root / root
0644
tree.py
9.229 KB
May 23 2025 08:31:17
root / root
0644

GRAYBYTE WORDPRESS FILE MANAGER @ 2025
CONTACT ME
Static GIF