# Source code for resqpy.olio.factors

```"""Factorization and functions supporting grid extent determination from corner points."""

[docs]def factorize(n):
"""Returns list of prime factors of positive integer n."""
i = 2
factors = []
while True:
q, r = divmod(n, i)
if r:
i += 1
if i > n:
return factors
else:
factors.append(i)
if q < i:
return factors
n = q

[docs]def combinatorial(numbers):
"""Returns a list of all possible product combinations of numbers from list numbers, with some duplicates."""
if len(numbers) == 0:
return []
tail = combinatorial(numbers[1:])
for o in tail:
c.append(o)
return sorted(c)

[docs]def all_factors_from_primes(primes):
"""Returns a sorted list of unique factors from prime factorization."""
all = list(set(combinatorial(primes)))
all.append(1)
return sorted(all)

[docs]def all_factors(n):
"""Returns a sorted list of unique factors of n."""
primes = factorize(n)
return all_factors_from_primes(primes)

[docs]def remove_subset(primary, subset):
"""Remove all elements of subset from primary list."""

for e in subset:
primary.remove(e)
```