ecgenpy package¶
Submodules¶
ecgenpy.combin module¶
Combinations
- ecgenpy.combin.EMK(n: int, k: int, Zero=0, One=1)[source]¶
The EMK function generates combinations by swapping pairs of integers using the EMK algorithm.
- Parameters:
n – The parameter n represents the total number of elements in the combination. It is an
integer value :type n: int :param k: The parameter k represents the number of ones in each combination :type k: int :param Zero: The Zero parameter is the value that represents a zero in the generated combinations. In the example code, it is set to 0, defaults to 0 (optional) :param One: The value that represents a “1” in the combinations generated by the algorithm, defaults to 1 (optional)
Examples
>>> for s in EMK(6, 3, Zero="◾", One="◽"): ... print("".join(s)) ... ◽◽◽◾◾◾ ◽◽◾◽◾◾ ◽◾◽◽◾◾ ◾◽◽◽◾◾ ◾◽◽◾◽◾ ◽◾◽◾◽◾ ◽◽◾◾◽◾ ◽◾◾◽◽◾ ◾◽◾◽◽◾ ◾◾◽◽◽◾ ◾◾◽◽◾◽ ◽◾◾◽◾◽ ◾◽◾◽◾◽ ◾◽◽◾◾◽ ◽◾◽◾◾◽ ◽◽◾◾◾◽ ◽◾◾◾◽◽ ◾◽◾◾◽◽ ◾◾◽◾◽◽ ◾◾◾◽◽◽
- ecgenpy.combin.EMK_gen(n: int, k: int) Generator[source]¶
Generate all combinations by homogeneous revoling-door
The EMK_gen function generates combinations (by swapping pairs of integers) using the EMK algorithm.
- Parameters:
n – The parameter n represents the total number of elements in the set, and k represents
the number of elements to be selected in each combination :type n: int :param k: The parameter k represents the number of elements to be selected in each combination :type k: int :return: The function EMK_gen returns a generator object that yields pairs of integers (x, y).
Examples
>>> for x, y in EMK_gen(6, 3): ... print(f"swap {x} and {y}") ... swap 2 and 3 swap 1 and 2 swap 0 and 1 swap 3 and 4 swap 1 and 0 swap 2 and 1 swap 1 and 3 swap 0 and 1 swap 1 and 2 swap 4 and 5 swap 2 and 0 swap 0 and 1 swap 3 and 2 swap 1 and 0 swap 2 and 1 swap 1 and 4 swap 0 and 1 swap 1 and 2 swap 2 and 3
- ecgenpy.combin.EMK_neg(n: int, k: int) Generator[source]¶
The EMK_neg function generates combinations (by swapping pairs of integers in reverse order) using the EMK algorithm.
- Parameters:
n – The parameter n represents the total number of elements in the set, and k represents
the number of elements to be selected in each combination :type n: int :param k: The parameter k represents the number of elements to be selected in each combination :type k: int :return: The function EMK_gen returns a generator object that yields pairs of integers (x, y).
- ecgenpy.combin.comb(n: int, k: int) int[source]¶
The comb function calculates the number of combinations of k elements from a set of n elements using recursion and memoization.
- Parameters:
n – The parameter n represents the total number of items or elements available for selection
in the combination :type n: int :param k: The parameter k represents the number of items to choose from the set of n items. In other words, it represents the size of the combination :type k: int :return: The function comb returns the number of combinations of n items taken k at a time.
Examples
>>> comb(6, 3) 20 >>> comb(6, 4) == comb(6, 2) True >>> comb(6, 5) == comb(6, 1) True >>> comb(6, 6) == comb(6, 0) True
ecgenpy.ehr module¶
- ecgenpy.ehr.Ehr(n: int) Generator[source]¶
The function Ehr generates all permutations of a given length using the EHR algorithm.
- Parameters:
n (int) – The parameter n represents the number of elements in the permutation
Examples
>>> fruits = list("🍉🍌🍇🍏") >>> for lst in Ehr(4): ... mylst = list(fruits[i] for i in lst) ... print("".join(mylst)) ... 🍉🍌🍇🍏 🍌🍉🍇🍏 🍇🍉🍌🍏 🍉🍇🍌🍏 🍌🍇🍉🍏 🍇🍌🍉🍏 🍏🍌🍉🍇 🍉🍌🍏🍇 🍌🍉🍏🍇 🍏🍉🍌🍇 🍉🍏🍌🍇 🍌🍏🍉🍇 🍇🍏🍉🍌 🍏🍇🍉🍌 🍉🍇🍏🍌 🍇🍉🍏🍌 🍏🍉🍇🍌 🍉🍏🍇🍌 🍌🍏🍇🍉 🍇🍏🍌🍉 🍏🍇🍌🍉 🍌🍇🍏🍉 🍇🍌🍏🍉
- ecgenpy.ehr.Ehr_gen(n: int) Generator[source]¶
The function Ehr generates all permutations of a given length using the EHR algorithm.
The Ehr_gen function is a generator that generates all permutations of length n using the Ehr algorithm. It yields the indices of the elements to be swapped with the first element (index 0) in each permutation. The algorithm works by maintaining two lists, b and c, where b represents the current permutation and c keeps track of the state of the algorithm. The algorithm iterates through the elements of c and updates the elements of b accordingly to generate all possible permutations.
- Parameters:
n (int) – The parameter n represents the number of elements in the permutation
Examples
>>> for i in Ehr_gen(4): ... print(f"swap 0 and {i}") ... swap 0 and 1 swap 0 and 2 swap 0 and 1 swap 0 and 2 swap 0 and 1 swap 0 and 3 swap 0 and 2 swap 0 and 1 swap 0 and 2 swap 0 and 1 swap 0 and 2 swap 0 and 3 swap 0 and 1 swap 0 and 2 swap 0 and 1 swap 0 and 2 swap 0 and 1 swap 0 and 3 swap 0 and 2 swap 0 and 1 swap 0 and 2 swap 0 and 1 swap 0 and 2
ecgenpy.gray_code module¶
- ecgenpy.gray_code.BRGC(n: int) Generator[source]¶
The function BRGC generates a binary reflected gray code sequence of length n.
- Parameters:
n (int) – The parameter n represents the number of bits in the binary code
Examples
>>> s = "◾◽" >>> for lst in BRGC(4): ... mylst = list(s[i] for i in lst) ... print("".join(mylst)) ... ◾◾◾◾ ◽◾◾◾ ◽◽◾◾ ◾◽◾◾ ◾◽◽◾ ◽◽◽◾ ◽◾◽◾ ◾◾◽◾ ◾◾◽◽ ◽◾◽◽ ◽◽◽◽ ◾◽◽◽ ◾◽◾◽ ◽◽◾◽ ◽◾◾◽ ◾◾◾◽
- ecgenpy.gray_code.BRGC_gen(n: int) Generator[source]¶
The function BRGC_gen generates a sequence of binary reflected gray code numbers up to a given length n.
- Parameters:
n (int) – The parameter n represents the number of bits in the binary reflected gray code sequence
- Returns:
The function BRGC_gen returns a generator object.
Examples
>>> for i in BRGC_gen(4): ... print(f"flip {i}") ... flip 0 flip 1 flip 0 flip 2 flip 0 flip 1 flip 0 flip 3 flip 0 flip 1 flip 0 flip 2 flip 0 flip 1 flip 0
ecgenpy.set_bipart module¶
Set Partition
A set partition of the set [n] = {1,2,3,…,n} is a collection B0, B1, … Bj of disjoint subsets of [n] whose union is [n]. Each Bj is called a block. Below we show the partitions of [4]. The periods separtate the individual sets so that, for example, 1.23.4 is the partition {{1},{2,3},{4}}.
1 block: 1234 2 blocks: 123.4 124.3 134.2 1.234 12.34 13.24 14.23 3 blocks: 1.2.34 1.24.3 14.2.3 13.2.4 12.3.4 4 blocks: 1.2.3.4
Each partition above has its blocks listed in increasing order of smallest element; thus block 0 contains element 1, block1 contains the smallest element not in block 0, and so on. A Restricted Growth string (or RG string) is a sring a[1..n] where a[i] is the block in which element i occurs. Restricted Growth strings are often called restricted growth functions. Here are the RG strings corresponding to the partitions shown above.
1 block: 0000 2 blocks: 0001, 0010, 0100, 0111, 0011, 0101, 0110 3 blocks: 0122, 0121, 0112, 0120, 0102,
…more
Reference: Frank Ruskey. Simple combinatorial Gray codes constructed by reversing sublists. Lecture Notes in Computer Science, #762, 201-208. Also downloadable from http://webhome.cs.uvic.ca/~ruskey/Publications/SimpleGray/SimpleGray.html
- ecgenpy.set_bipart.GEN0(n: int) Generator[source]¶
S(n,k,0) even k
- Parameters:
n (int) – [description]
- Yields:
[type] – [description]
- ecgenpy.set_bipart.GEN1(n: int) Generator[source]¶
S(n,k,1) even k
- Parameters:
n (int) – [description]
- Yields:
[type] – [description]
- ecgenpy.set_bipart.NEG1(n: int) Generator[source]¶
S’(n,k,1) even k
- Parameters:
n (int) – [description]
- Yields:
[type] – [description]
- ecgenpy.set_bipart.set_bipart(n: int) Generator[source]¶
[summary]
- Parameters:
n (int) – [description]
- Yields:
[type] – [description]
Examples
>>> n = 5 >>> b = [0] * n + [1] >>> print(b[1:]) [0, 0, 0, 0, 1] >>> for x in set_bipart(n): ... old = b[x] ... b[x] = 1 - b[x] ... print(b[1:], ": Move {} from B{} to B{}".format(x, old, b[x])) ... [0, 0, 0, 1, 1] : Move 4 from B0 to B1 [0, 1, 0, 1, 1] : Move 2 from B0 to B1 [0, 1, 1, 1, 1] : Move 3 from B0 to B1 [0, 0, 1, 1, 1] : Move 2 from B1 to B0 [0, 0, 1, 0, 1] : Move 4 from B1 to B0 [0, 1, 1, 0, 1] : Move 2 from B0 to B1 [0, 1, 0, 0, 1] : Move 3 from B1 to B0 [0, 1, 0, 0, 0] : Move 5 from B1 to B0 [0, 1, 1, 0, 0] : Move 3 from B0 to B1 [0, 0, 1, 0, 0] : Move 2 from B1 to B0 [0, 0, 1, 1, 0] : Move 4 from B0 to B1 [0, 1, 1, 1, 0] : Move 2 from B0 to B1 [0, 1, 0, 1, 0] : Move 3 from B1 to B0 [0, 0, 0, 1, 0] : Move 2 from B1 to B0
ecgenpy.set_partition module¶
Set Partition
A set partition of the set [n] = {1,2,3,…,n} is a collection B0, B1, … Bj of disjoint subsets of [n] whose union is [n]. Each Bj is called a block. Below we show the partitions of [4]. The periods separtate the individual sets so that, for example, 1.23.4 is the partition {{1},{2,3},{4}}.
1 block: 1234 2 blocks: 123.4 124.3 134.2 1.234 12.34 13.24 14.23 3 blocks: 1.2.34 1.24.3 14.2.3 13.2.4 12.3.4 4 blocks: 1.2.3.4
Each partition above has its blocks listed in increasing order of smallest element; thus block 0 contains element 1, block1 contains the smallest element not in block 0, and so on. A Restricted Growth string (or RG string) is a sring a[1..n] where a[i] is the block in whcih element i occurs. Restricted Growth strings are often called restricted growth functions. Here are the RG strings corresponding to the partitions shown above.
1 block: 0000 2 blocks: 0001, 0010, 0100, 0111, 0011, 0101, 0110 3 blocks: 0122, 0121, 0112, 0120, 0102,
…more
Reference: Frank Ruskey. Simple combinatorial Gray codes constructed by reversing sublists. Lecture Notes in Computer Science, #762, 201-208. Also downloadable from http://webhome.cs.uvic.ca/~ruskey/Publications/SimpleGray/SimpleGray.html
- ecgenpy.set_partition.GEN0_even(n: int, k: int) Generator[source]¶
S(n,k,0) even k
The function GEN0_even generates a sequence of tuples that satisfy certain conditions based on the values of n and k.
- Parameters:
n – The parameter n represents the total number of elements in a sequence. It is an integer
value :type n: int :param k: The parameter k represents the number of elements to be selected from a set of n elements. It is used in the context of generating even-sized subsets of a set :type k: int
- ecgenpy.set_partition.NEG0_even(n: int, k: int) Generator[source]¶
S’(n,k,0) even k
The function NEG0_even generates a sequence of tuples that satisfy certain conditions based on the input parameters n and k.
- Parameters:
n – The parameter n represents the total number of elements in a sequence or set. It is an
integer value :type n: int :param k: The parameter k represents the number of elements to be selected from a set of n elements. It is used to control the iteration and recursion in the function :type k: int
- ecgenpy.set_partition.set_partition(n: int, k: int) Generator[source]¶
The set_partition function generates all possible set partitions of a set of size n into k blocks.
- Parameters:
Examples
>>> n, k = 5, 2 >>> b = [0] * (n - k + 1) + list(range(k)) >>> print(b[1:]) [0, 0, 0, 0, 1] >>> for x, y in set_partition(n, k): ... old = b[x] ... b[x] = y ... print(b[1:], f": Move {x} from block {old} to {y}") ... [0, 0, 0, 1, 1] : Move 4 from block 0 to 1 [0, 1, 0, 1, 1] : Move 2 from block 0 to 1 [0, 1, 1, 1, 1] : Move 3 from block 0 to 1 [0, 0, 1, 1, 1] : Move 2 from block 1 to 0 [0, 0, 1, 0, 1] : Move 4 from block 1 to 0 [0, 1, 1, 0, 1] : Move 2 from block 0 to 1 [0, 1, 0, 0, 1] : Move 3 from block 1 to 0 [0, 1, 0, 0, 0] : Move 5 from block 1 to 0 [0, 1, 1, 0, 0] : Move 3 from block 0 to 1 [0, 0, 1, 0, 0] : Move 2 from block 1 to 0 [0, 0, 1, 1, 0] : Move 4 from block 0 to 1 [0, 1, 1, 1, 0] : Move 2 from block 0 to 1 [0, 1, 0, 1, 0] : Move 3 from block 1 to 0 [0, 0, 0, 1, 0] : Move 2 from block 1 to 0
- ecgenpy.set_partition.stirling2nd(n: int, k: int) int[source]¶
The stirling2nd function calculates the Stirling number of the second kind for given values of n and k.
- Parameters:
n (int) – The parameter n represents the total number of objects or elements in a set
k – The parameter k represents the number of non-empty subsets that need to be formed from a
set of n elements :type k: int :return: The function stirling2nd returns an integer, which is the Stirling number of the second kind for the given values of n and k.
Examples
>>> stirling2nd(5, 2) 15
ecgenpy.sjt module¶
Steinhaus-Johnson-Trotter algorithm
- ecgenpy.sjt.PlainChanges(n)[source]¶
Generate the swaps for the Steinhaus-Johnson-Trotter algorithm (original method).
- ecgenpy.sjt.SJT(n: int) Generator[source]¶
The function SJT generates all permutations of length n using the Steinhaus-Johnson-Trotter algorithm.
- Parameters:
n (int) – The parameter n represents the number of elements in the permutation
- Returns:
The function SJT returns a generator object.
Examples
>>> fruits = list("🍉🍌🍇🍏") >>> for lst in SJT(4): ... mylst = list(fruits[i] for i in lst) ... print("".join(mylst)) ... 🍉🍌🍇🍏 🍉🍌🍏🍇 🍉🍏🍌🍇 🍏🍉🍌🍇 🍏🍉🍇🍌 🍉🍏🍇🍌 🍉🍇🍏🍌 🍉🍇🍌🍏 🍇🍉🍌🍏 🍇🍉🍏🍌 🍇🍏🍉🍌 🍏🍇🍉🍌 🍏🍇🍌🍉 🍇🍏🍌🍉 🍇🍌🍏🍉 🍇🍌🍉🍏 🍌🍇🍉🍏 🍌🍇🍏🍉 🍌🍏🍇🍉 🍏🍌🍇🍉 🍏🍌🍉🍇 🍌🍏🍉🍇 🍌🍉🍏🍇 🍌🍉🍇🍏
- ecgenpy.sjt.SJT_gen(n: int) Generator[source]¶
The function SJT_gen generates all permutations of length n using the Steinhaus-Johnson-Trotter algorithm.
Note
The list returns to the original permutations after all swaps.
- Parameters:
n (int) – The parameter n represents the number of elements in the permutation
- Returns:
The function SJT_gen returns a generator object.
Examples
>>> for i in SJT_gen(4): ... print("swap {} and {}".format(i, i + 1)) ... swap 2 and 3 swap 1 and 2 swap 0 and 1 swap 2 and 3 swap 0 and 1 swap 1 and 2 swap 2 and 3 swap 0 and 1 swap 2 and 3 swap 1 and 2 swap 0 and 1 swap 2 and 3 swap 0 and 1 swap 1 and 2 swap 2 and 3 swap 0 and 1 swap 2 and 3 swap 1 and 2 swap 0 and 1 swap 2 and 3 swap 0 and 1 swap 1 and 2 swap 2 and 3 swap 0 and 1
ecgenpy.sjt_list module¶
- ecgenpy.sjt_list.SJT2(n: int) Generator[source]¶
The function SJT2 generates all permutations of length n using the Steinhaus-Johnson-Trotter algorithm.
- Parameters:
n (int) – The parameter n represents the number of elements in the permutation
- Returns:
The function SJT2 is a generator function, which means it yields values instead of
returning them. It generates all permutations of length n using the Steinhaus-Johnson-Trotter algorithm. Each permutation is represented as a list of integers.
ecgenpy.skeleton module¶
This is a skeleton file that can serve as a starting point for a Python
console script. To run this script uncomment the following lines in the
[options.entry_points] section in setup.cfg:
console_scripts =
fibonacci = ecgenpy.skeleton:run
Then run pip install . (or pip install -e . for editable mode)
which will install the command fibonacci inside your current environment.
Besides console scripts, the header (i.e. until _logger…) of this file can
also be used as template for Python modules.
Note
This file can be renamed depending on your needs or safely removed if not needed.
References
- ecgenpy.skeleton.main(args)[source]¶
Wrapper allowing
fib()to be called with string arguments in a CLI fashionInstead of returning the value from
fib(), it prints the result to thestdoutin a nicely formatted message.- Parameters:
args (List[str]) – command line parameters as list of strings (for example
["--verbose", "42"]).
- ecgenpy.skeleton.parse_args(args)[source]¶
Parse command line parameters
- Parameters:
args (List[str]) – command line parameters as list of strings (for example
["--help"]).- Returns:
command line parameters namespace
- Return type: