fix: add butterfly_factor fn
This commit is contained in:
parent
a4668a16b6
commit
81c16c965e
|
@ -66,3 +66,29 @@ def factorization(dimension: int, factor:int=-1) -> tuple[int, int]:
|
||||||
n, m = m, n
|
n, m = m, n
|
||||||
return m, n
|
return m, n
|
||||||
|
|
||||||
|
# from https://github.com/KohakuBlueleaf/LyCORIS/blob/dev/lycoris/modules/boft.py
|
||||||
|
def butterfly_factor(dimension: int, factor: int = -1) -> tuple[int, int]:
|
||||||
|
"""
|
||||||
|
m = 2k
|
||||||
|
n = 2**p
|
||||||
|
m*n = dim
|
||||||
|
"""
|
||||||
|
|
||||||
|
# Find the first solution and check if it is even doable
|
||||||
|
m = n = 0
|
||||||
|
while m <= factor:
|
||||||
|
m += 2
|
||||||
|
while dimension % m != 0 and m < dimension:
|
||||||
|
m += 2
|
||||||
|
if m > factor:
|
||||||
|
break
|
||||||
|
if sum(int(i) for i in f"{dimension//m:b}") == 1:
|
||||||
|
n = dimension // m
|
||||||
|
|
||||||
|
if n == 0:
|
||||||
|
raise ValueError(
|
||||||
|
f"It is impossible to decompose {dimension} with factor {factor} under BOFT constrains."
|
||||||
|
)
|
||||||
|
|
||||||
|
#log_butterfly_factorize(dimension, factor, (dimension // n, n))
|
||||||
|
return dimension // n, n
|
||||||
|
|
Loading…
Reference in New Issue