diff options
author | CodeHatchling <steve@codehatch.com> | 2023-12-05 03:38:13 +0000 |
---|---|---|
committer | CodeHatchling <steve@codehatch.com> | 2023-12-05 03:38:13 +0000 |
commit | 38864816fa8c83d079a49f94674ca3dede9dcaad (patch) | |
tree | dfd1b97ad7c5c66ffc5c8641c6e7cc635441e82b /extensions-builtin/hypertile/hypertile.py | |
parent | 49bbf1140731036875573bb7c44aa7e74623c856 (diff) | |
parent | 22e23dbf29b0bbc807daa57318c31145f8dd0774 (diff) | |
download | stable-diffusion-webui-gfx803-38864816fa8c83d079a49f94674ca3dede9dcaad.tar.gz stable-diffusion-webui-gfx803-38864816fa8c83d079a49f94674ca3dede9dcaad.tar.bz2 stable-diffusion-webui-gfx803-38864816fa8c83d079a49f94674ca3dede9dcaad.zip |
Merge remote-tracking branch 'origin2/dev' into soft-inpainting
# Conflicts:
# modules/processing.py
Diffstat (limited to 'extensions-builtin/hypertile/hypertile.py')
-rw-r--r-- | extensions-builtin/hypertile/hypertile.py | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/extensions-builtin/hypertile/hypertile.py b/extensions-builtin/hypertile/hypertile.py index feb02fd2..0f40e2d3 100644 --- a/extensions-builtin/hypertile/hypertile.py +++ b/extensions-builtin/hypertile/hypertile.py @@ -6,7 +6,6 @@ Original author: @tfernd Github: https://github.com/tfernd/HyperTile from __future__ import annotations -import functools from dataclasses import dataclass from typing import Callable @@ -189,20 +188,27 @@ DEPTH_LAYERS_XL = { RNG_INSTANCE = random.Random() - -def random_divisor(value: int, min_value: int, /, max_options: int = 1) -> int: +@cache +def get_divisors(value: int, min_value: int, /, max_options: int = 1) -> list[int]: """ - Returns a random divisor of value that + Returns divisors of value that x * min_value <= value - if max_options is 1, the behavior is deterministic + in big -> small order, amount of divisors is limited by max_options """ + max_options = max(1, max_options) # at least 1 option should be returned min_value = min(min_value, value) - - # All big divisors of value (inclusive) divisors = [i for i in range(min_value, value + 1) if value % i == 0] # divisors in small -> big order - ns = [value // i for i in divisors[:max_options]] # has at least 1 element # big -> small order + return ns + +def random_divisor(value: int, min_value: int, /, max_options: int = 1) -> int: + """ + Returns a random divisor of value that + x * min_value <= value + if max_options is 1, the behavior is deterministic + """ + ns = get_divisors(value, min_value, max_options=max_options) # get cached divisors idx = RNG_INSTANCE.randint(0, len(ns) - 1) return ns[idx] @@ -212,7 +218,7 @@ def set_hypertile_seed(seed: int) -> None: RNG_INSTANCE.seed(seed) -@functools.cache +@cache def largest_tile_size_available(width: int, height: int) -> int: """ Calculates the largest tile size available for a given width and height |