fix: add butterfly_factor fn

This commit is contained in:
v0xie 2024-02-07 04:54:14 -08:00
parent a4668a16b6
commit 81c16c965e

View File

@ -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