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 [] head = numbers[0] c = [head] tail = combinatorial(numbers[1:]) for o in tail: if o != head: c.append(o) c.append(head * 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)