Module micromelon.helper_math
Collection of helpful maths functions and aliases
Expand source code
"""
Collection of helpful maths functions and aliases
"""
from ._math import *
__all__ = [
"isBetween",
"constrain",
"scale",
"isPrime",
"randint",
"random",
]
Functions
def constrain(x, low, high)
-
Restrict a number to a range
Args
x
:number
- the number to restrict
low
:number
- lower bound
high
:number
- upper bound
Raises
Exception if any of the arguments aren't numbers
Returns
x clamped to between low and high inclusive
Expand source code
def constrain(x, low, high): """ Restrict a number to a range Args: x (number): the number to restrict low (number): lower bound high (number): upper bound Raises: Exception if any of the arguments aren't numbers Returns: x clamped to between low and high inclusive """ if not _isNumber(x) or not _isNumber(low) or not _isNumber(high): raise Exception("All arguments to Math.constrain must be numbers") if high < low: temp = low low = high high = temp if x >= high: return high if x <= low: return low return x
def isBetween(x, low, high)
-
Check if a number is between or equal to two other numbers
If the lower bound is greater than the upper bound they will be switchedArgs
x
:number
- the number to check
low
:number
- lower bound
high
:number
- upper bound
Raises
Exception if any of the arguments aren't numbers
Returns
true iff (if and only if) x is between low and high inclusive
Expand source code
def isBetween(x, low, high): """ Check if a number is between or equal to two other numbers If the lower bound is greater than the upper bound they will be switched Args: x (number): the number to check low (number): lower bound high (number): upper bound Raises: Exception if any of the arguments aren't numbers Returns: true iff (if and only if) x is between low and high inclusive """ if not _isNumber(x) or not _isNumber(low) or not _isNumber(high): raise Exception("All arguments to Math.isBetween must be numbers") l = low h = high if low > high: h = low l = high return x >= l and x <= h
def isPrime(n)
-
Determine if a number is a prime number
Simple primality test using the 6k +- 1 optimisation
https://en.wikipedia.org/wiki/Primality_testArgs
n
:int
- number to check
Raises
Exception if n is not an integer
Returns
True if n is prime. False otherwise
Expand source code
def isPrime(n): """ Determine if a number is a prime number Simple primality test using the 6k +- 1 optimisation https://en.wikipedia.org/wiki/Primality_test Args: n (int): number to check Raises: Exception if n is not an integer Returns: True if n is prime. False otherwise """ if not isinstance(n, int): raise Exception("Argument to isPrime must be an integer") if n <= 1: return False elif n <= 3: return True elif n % 2 == 0 or n % 3 == 0: return False i = 5 s = int(_math.sqrt(n)) + 1 while i <= s: if n % i == 0 or n % (i + 2) == 0: return False i += 6 return True
def randint(low, high)
-
Alias to python's random.randint
Generate random integers between two numbersArgs
low
:int
- lower bound
high
:int
- upper bound
Raises
Exception if arguments are not both integers
Returns
a pseudorandom integer between low and high inclusive
Expand source code
def randint(low, high): """ Alias to python's random.randint Generate random integers between two numbers Args: low (int): lower bound high (int): upper bound Raises: Exception if arguments are not both integers Returns: a pseudorandom integer between low and high inclusive """ if not isinstance(low, int) or not isinstance(high, int): raise Exception("Both arguments to randint must be integers") return _rand.randint(low, high)
def random()
-
Alias to python's random.random
Returns
a random floating point number (decimal fraction) between 0 and 1
Expand source code
def random(): """ Alias to python's random.random Returns: a random floating point number (decimal fraction) between 0 and 1 """ return _rand.random()
def scale(x, xmin, xmax, newMin, newMax)
-
Scale a number from the range xmin - xmax to the range newMin - newMax
Output is restricted to between newMin and newMax inclusive
If newMin is greater than newMax or xmin is greater than xmax
it will be treated and inversely proportionalArgs
x
:number
- the input to scale
xmin
:number
- the current minimum for x
xmax
:number
- the current maximum for x
newMin
:number
- the minimum of the range to scale x to
newMax
:number
- the maximum of the range to scale x to
Raises
Exception if any of the arguments aren't numbers
Exception if xmin equals xmax or newMin equals newMax
Returns
x scaled from the range xmin - xmax to the range newMin - newMaxExpand source code
def scale(x, xmin, xmax, newMin, newMax): """ Scale a number from the range xmin - xmax to the range newMin - newMax Output is restricted to between newMin and newMax inclusive If newMin is greater than newMax or xmin is greater than xmax it will be treated and inversely proportional Args: x (number): the input to scale xmin (number): the current minimum for x xmax (number): the current maximum for x newMin (number): the minimum of the range to scale x to newMax (number): the maximum of the range to scale x to Raises: Exception if any of the arguments aren't numbers Exception if xmin equals xmax or newMin equals newMax Returns x scaled from the range xmin - xmax to the range newMin - newMax """ if ( not _isNumber(x) or not _isNumber(xmin) or not _isNumber(xmax) or not _isNumber(newMin) or not _isNumber(newMax) ): raise Exception("All arguments to scale must be numbers") if xmin == xmax or newMin == newMax: raise Exception("Min and max cannot be the same number in scale function") scaled = (((x - xmin) / (xmax - xmin)) * (newMax - newMin)) + newMin return constrain(scaled, newMin, newMax)