Modules¶
amazon_prime¶
-
class
pupy.amazon_prime.
OctopusPrime
(plim: int = 100)[source]¶ OctopusPrime, the 8-leg autobot, here to help you find PRIMES
───────────▄▄▄▄▄▄▄▄▄─────────── ────────▄█████████████▄──────── █████──█████████████████──█████ ▐████▌─▀███▄───────▄███▀─▐████▌ ─█████▄──▀███▄───▄███▀──▄█████─ ─▐██▀███▄──▀███▄███▀──▄███▀██▌─ ──███▄▀███▄──▀███▀──▄███▀▄███── ──▐█▄▀█▄▀███─▄─▀─▄─███▀▄█▀▄█▌── ───███▄▀█▄██─██▄██─██▄█▀▄███─── ────▀███▄▀██─█████─██▀▄███▀──── ───█▄─▀█████─█████─█████▀─▄█─── ───███────────███────────███─── ───███▄────▄█─███─█▄────▄███─── ───█████─▄███─███─███▄─█████─── ───█████─████─███─████─█████─── ───█████─████─███─████─█████─── ───█████─████─███─████─█████─── ───█████─████▄▄▄▄▄████─█████─── ────▀███─█████████████─███▀──── ──────▀█─███─▄▄▄▄▄─███─█▀────── ─────────▀█▌▐█████▌▐█▀───────── ────────────███████────────────
-
pupy.amazon_prime.
is_prime
(number: int) → bool[source]¶ Checks if a number is prime given that number as a param
Parameters: number (int) – number to check if is prime Returns: -> True if number is prime Return type: bool >>> is_prime(1) False >>> is_prime(2) True >>> is_prime(3) True >>> is_prime(4) False >>> is_prime(5) True >>> is_prime(6) False >>> is_prime(7) True >>> is_prime(100) False >>> is_prime(89) True
-
pupy.amazon_prime.
prime_factorization_gen
(n: int) → Iterator[int][source]¶ generates all numbers in the prime factorization of n
Parameters: n (int) – number to be factored >>> list(prime_factorization_gen(12)) [2, 2, 3] >>> list(prime_factorization_gen(16)) [2, 2, 2, 2]
-
pupy.amazon_prime.
prime_factors_gen
(n: int) → Iterator[Any][source]¶ prime factors generator
Parameters: n (int) – number to be factorized >>> list(prime_factors_gen(12)) [2, 3] >>> list(prime_factors_gen(16)) [2]
-
pupy.amazon_prime.
prime_gen
(plim: int = 0, kprimes: Union[None, Iterable[int]] = None) → Iterator[int][source]¶ Infinite (within reason) prime number generator
My big modification is the pdiv_dictionary() function that recreats the dictionary of divisors so that you can continue to generate prime numbers from a (sorted) list of prime numbers.
- Based on:
- eratosthenes by David Eppstein, UC Irvine, 28 Feb 2002 http://code.activestate.com/recipes/117119/ and the thread at the url
Parameters: - plim (int) – prime_limit; default=0 makes for an infinite generator
- kprimes (iter) – known_primes as an iterable (Default value = None)
>>> list(prime_gen(50)) [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47] >>> list(prime_gen(10)) [2, 3, 5, 7]
foreign¶
Iter Funks¶
foreign => ‘for … in …’ (its a pun)
-
pupy.foreign.
chunks
(it: Union[List[int], str], chunk_size: int) → Iterable[Any][source]¶ Yields chunks of something slicable with length <= chunk_size
Parameters: - it –
- chunk_size (int) – size of the chunks
-
pupy.foreign.
digits_list
(number: int) → List[int][source]¶ Returns a list of the digits in num
Parameters: number (int) – number w/ digits to be listsed Returns: -> digits in a list Return type: list
-
pupy.foreign.
dirs_gen
(dirpath: str = '.', abspath: bool = True) → Iterable[str][source]¶ Yields paths beneath dirpath param; dirpath defaults to os.getcwd()
Parameters: - dirpath – Directory path to walking down/through.
- abspath – Yield the absolute path
Returns: Generator object that yields dir-paths (absolute or relative)
-
pupy.foreign.
exhaust
(it: Iterable[Any]) → None[source]¶ Exhaust an interable / use it up; useful for evaluating a map object.
Parameters: it – iterable object to run through Returns: None
-
pupy.foreign.
files_gen
(dirpath: str = ', ', abspath: bool = True) → Iterable[str][source]¶ Yields paths beneath dirpath param; dirpath defaults to os.getcwd()
Parameters: - dirpath – Directory path to walking down/through.
- abspath – Yield the absolute path
Returns: Generator object that yields filepaths (absolute or relative)
-
pupy.foreign.
int_from_digits
(digits: Iterable[int]) → int[source]¶ Converts an iterable of digits digits to a number
The iteratble can be ints or strings/chars
Return type: int
-
pupy.foreign.
is_permutation
(a: Union[int, List[int], str], b: Union[int, List[int], str]) → bool[source]¶ Checks if two integers or lists are permutations lists are permutations
Parameters: - a (int or list) – possible perumtation of b
- b (int or list) – possible perumtation of a
Returns: True if a and b are permutations of one another; False otherwise
Return type: bool
It works for list!!!
>>> a = [1, 2, 3, 4] >>> b = [4, 3, 2, 1] >>> is_permutation(a, b) True >>> a = [1, 3, 2, 4] >>> b = [4, 3, 2, 1] >>> is_permutation(a, b) True >>> a = [1, 3, 2, 4] >>> b = [4, 3, 2, 1, 1] >>> is_permutation(a, b) # False cuz of the extra 'one' False
It works for integers!?!?!?
>>> a = 1234 >>> b = 4321 >>> is_permutation(a, b) True >>> a = 12344 >>> b = 43212 >>> is_permutation(a, b) False
It also works for strings!!!
>>> a = 'abcd' >>> b = 'dbca' >>> is_permutation(a, b) # False cuz of the extra 'one' True >>> a = 'pood' >>> b = 'doop' >>> is_permutation(a, b) # False cuz of the extra 'one' True >>> a = 'snorkel' >>> b = 'doop' >>> is_permutation(a, b) # False cuz of the extra 'one' False
-
pupy.foreign.
iter_product
(l: Iterable[int]) → Union[int, float][source]¶ Product of all the elements in a list or tuple
Parameters: l – list with integer elements Returns: product of all the elements in a list Return type: int
-
pupy.foreign.
rotate
(rlist: List[int], rn: int = 1, left_rotate: bool = True) → List[int][source]¶ Rotate a list (rlist) by rn indices to the left or right
Parameters: - rlist (list or tuple) – list/toople or slicable to be rotated
- rn (int) – steps bywhich to rotate (Default value = 1)
- left_rotate (bool) – True (default) left rotates; False right rotates.
Returns: rotated list
Return type: list
>>> rotate([1, 2, 3, 4], left_rotate=True) [2, 3, 4, 1] >>> rotate([1, 2, 3, 4], left_rotate=False) [4, 1, 2, 3] >>> rotate([1, 2, 3, 4], rn=4, left_rotate=False) [1, 2, 3, 4]
maths¶
-
class
pupy.maths.
Trigon
(pt1: Tuple[int, int], pt2: Tuple[int, int], pt3: Tuple[int, int])[source]¶ Trigon object composed of three points connected by lines.
-
inner_triangles
(point)[source]¶ Triangle funk that returns the three triangles w/ a point
The point (p) is connected to each point of a triangle. with points, a, b, and c. The three triangles are t1=(a, b, p), t2=(a, c, p), and t3 = (b, c, p).
Parameters: point (tuple or Vuple) – point to connect to Triangle Vertices Returns: t1, t2, t3-> Three triangles
-
-
class
pupy.maths.
Vuple
[source]¶ VUPLE == Vector+Tuple
-
static
angle
(v1: Any, v2: Any, radians: bool = False) → float[source]¶ Parameters: - v1 –
- v2 –
- radians – (Default value = False)
-
static
cross
(v1: Any, v2: Any) → int[source]¶ Cross product of two 2d vectors
Parameters: - v1 – first vector
- v2 – second vector
Returns: cross product of v1 and v2
-
static
-
pupy.maths.
degrees_2_radians
(degs: float) → float[source]¶ Converts degrees to radians
Parameters: degs – >>> from math import pi >>> degrees_2_radians(360.0) == 2*pi True
-
pupy.maths.
disjoint
(a: Union[List[int], List[Union[str, int]]], b: Union[List[int], List[Union[str, int]]]) → bool[source]¶ Parameters: - a –
- b –
>>> a = [1, 2, 3, 4] >>> b = [2, 3, 4, 5] >>> disjoint(a, b) False >>> a = [1, 2, 3, 4] >>> b = [5, 6, 7, 8] >>> disjoint(a, b) True >>> a = ['joe', 'frank', 3, 4] >>> b = [5, 6, 7, 'frank'] >>> disjoint(a, b) False
-
pupy.maths.
divisors_gen
(n: int) → Iterator[int][source]¶ Divisors generator
Parameters: n (int) – number w/ divisors to be generated >>> list(divisors_gen(1)) [1] >>> list(divisors_gen(4)) [1, 2, 4] >>> list(divisors_gen(16)) [1, 2, 4, 8, 16]
-
pupy.maths.
expo
(d: int, n: int) → int[source]¶ greatest exponent for a divisor of n
Parameters: - d (int) – divisor
- n (int) – number be divided
Returns: number of times a divisor divides n
Return type: int
>>> expo(100, 2) 2 >>> expo(12, 5) 0 >>> expo(12, 2) 2 >>> expo(160, 4) 2 >>> expo(1000, 4) 1
-
pupy.maths.
fib_r
(n: int) → int[source]¶ Recursively the nth fibonacci number
Parameters: n (int) – nth fibonacci sequence number Returns: the nth fibonacci number Return type: int >>> fib_r(1) 1 >>> fib_r(2) 2 >>> fib_r(6) 13
-
pupy.maths.
gcd_it
(a: int, b: int) → int[source]¶ iterative gcd
Parameters: - a –
- b –
>>> from pupy.maths import gcd_it >>> from pupy.maths import gcd_r >>> gcd_it(1, 4) == gcd_r(1, 4) True >>> gcd_it(2, 6) == gcd_r(2, 6) True >>> gcd_it(3, 14) == gcd_r(3, 14) True >>> gcd_it(4, 300) == gcd_r(4, 300) True
-
pupy.maths.
gcd_r
(a: int, b: int) → int[source]¶ recursive greatest common divisor
Parameters: - a –
- b –
>>> from pupy.maths import gcd_it >>> from pupy.maths import gcd_r >>> gcd_it(1, 4) == gcd_r(1, 4) True >>> gcd_it(2, 6) == gcd_r(2, 6) True >>> gcd_it(3, 14) == gcd_r(3, 14) True >>> gcd_it(4, 300) == gcd_r(4, 300) True
-
pupy.maths.
n_permutations_with_replacements
(it: Union[Tuple[int, int, int, int], Tuple[int, int, int, int, int, int, int], Tuple[int, int, int, int, int], Tuple[int, int, int, int, int, int]]) → int[source]¶ >>> n_permutations_with_replacements((1, 2, 3, 4)) 24 >>> n_permutations_with_replacements((1, 2, 3, 4, 3)) 60 >>> n_permutations_with_replacements((1, 2, 3, 4, 3, 3)) 120 >>> n_permutations_with_replacements((1, 2, 3, 4, 3, 4, 4)) 420
-
pupy.maths.
partitions_gen
(numero: int, min_p: int = 1, max_p: Optional[int] = None)[source]¶ Partitions generator
Adapted from: code.activestate.com/recipes/218332-generator-for-integer-partitions/min_p
Parameters: - numero (int) – number for which to yield partiton tuples
- min_p (int) – smallest part size (Default value = 1)
- max_p (int) – largest part size (Default value = None)
-
pupy.maths.
power_mod
(number: int, exponent: int, mod: int) → int[source]¶ Parameters: - number –
- exponent –
- mod –
>>> power_mod(2, 4, 3) 2 >>> power_mod(12, 3, 4) 144 >>> power_mod(123, 2, 3) 123 >>> power_mod(120, 6, 10) 14400 >>> power_mod(120, 6, 1) 14400
-
pupy.maths.
pytriple_gen
(max_c: int) → Iterator[Tuple[int, int, int]][source]¶ primative pythagorean triples generator
special thanks to 3Blue1Brown’s video on pythagorean triples https://www.youtube.com/watch?v=QJYmyhnaaek&t=300s
Parameters: max_c (int) – max value of c to yeild triples up to
-
pupy.maths.
radians_2_degrees
(rads: float) → float[source]¶ Converts radians to degrees
Parameters: rads – >>> from math import pi >>> radians_2_degrees(2*pi) == 360.0 True >>> radians_2_degrees(2*pi) 360.0
-
pupy.maths.
reverse_num
(n: int) → int[source]¶ Reverses a number
Parameters: n (int) – number to be reversed Returns: reversed of a number Return type: int >>> reverse_num(1) 1 >>> reverse_num(12345) 54321 >>> reverse_num(54321) 12345 >>> reverse_num(54321000) 12345
-
pupy.maths.
set_cmp
(a: Union[Set[int], List[int]], b: Union[Set[int], List[int]]) → Tuple[Set[int], Set[int], Set[int]][source]¶ Compare the elements of two iterables (a and b)
Parameters: - a – first iterable to compare elements of
- b – second iterable to compare elements of
Returns: tuple of sets of the form (common elements, in a only, in b only)
>>> a = [n for n in range(6)] >>> a [0, 1, 2, 3, 4, 5] >>> b = list(range(3, 9)) >>> b [3, 4, 5, 6, 7, 8] >>> set_cmp(a, b) ({3, 4, 5}, {0, 1, 2}, {8, 6, 7})
Savings & Loads¶
Savings & Loads¶
Common funks for ur everyday savings and loads.
If you are a friend of Jasm/Json/Jason-Greenberg like myself, ‘pip install ujson’ for a better time.
If you need it… you can always… pip install (msgpack, toml, ruamel.yaml) for the whole shebang.
-
pupy.savings_n_loads.
lbytes
(filepath: str) → None[source]¶ Read bytes from file path
Parameters: filepath – filepath as as string to read bites from Returns: some bytes…
-
pupy.savings_n_loads.
ljasm
(filepath: str) → Union[None, bool, int, float, str, List[Any], Dict[str, Any]][source]¶ Alias for ljson (which stands for ‘load-json’)
-
pupy.savings_n_loads.
ljson
(filepath: str) → Union[None, bool, int, float, str, List[Any], Dict[str, Any]][source]¶ Load a json file given a filepath and return the file-data
Parameters: filepath – path to the jasm file you want to load Returns: Loaded file contents
-
pupy.savings_n_loads.
load_jasm
(filepath: str) → Union[None, bool, int, float, str, List[Any], Dict[str, Any]][source]¶ Alias for ljson (which stands for ‘load-json’)
-
pupy.savings_n_loads.
lstring
(filepath: str) → str[source]¶ (lstring) Read and return the file-contents as a string given a filepath
Parameters: filepath – Path to a file to read Returns: Content of the file read as a string
-
pupy.savings_n_loads.
safepath
(path_str: str) → str[source]¶ Checks if a file/dir path is save/unused; returns an unused path.
Parameters: path_str – file or dir path Returns: A file/dir path that does not exist and contains the given path
-
pupy.savings_n_loads.
save_jasm
(filepath: str, data: Union[None, bool, int, float, str, List[Any], Dict[str, Any]], minify: bool = False) → None[source]¶ Alias for sjson (which stands for ‘save-json’)
-
pupy.savings_n_loads.
shebang
(filepath: str) → Union[None, str][source]¶ returns the shebang path given a filepath or None if it does not exist.
Parameters: filepath – path to a file w/ a shebange line Returns: shebang line or None
-
pupy.savings_n_loads.
sjasm
(filepath: str, data: Union[None, bool, int, float, str, List[Any], Dict[str, Any]], minify: bool = False) → None[source]¶ Alias for sjson (which stands for ‘save-json’)
-
pupy.savings_n_loads.
sjson
(filepath: str, data: Union[None, bool, int, float, str, List[Any], Dict[str, Any]], minify: bool = False) → None[source]¶ Save json-serial-ize-able data to a specific filepath.
Parameters: - filepath – destination filepath
- data – json cereal-izable dictionary/list/thing
- minify – Bool flag – minify the json file
Returns: None
-
pupy.savings_n_loads.
sstring
(filepath: str, string: str) → None[source]¶ Writes a string to filepath
Parameters: - filepath – Filepath save location
- string – File as a string to be saved
Returns: None? what do you want? confirmation?
Note
Decorated w/ @mkdirs Function is decorated with @mkdirs decorator; @mkdirs creates parent directories for the given filepath if they do not already exist.