Skip to main content

Pseudo-lists containing arrangements of item selection types that commonly arise in combinatorics, such as combinations, permutations and subsets.

Project description

Trotter

Welcome to trotter, a set of Python classes for representing sequences of structures of item selections commonly encountered in combinatorics.

Classes have been defined according to whether order is important, items may be repeated, and length is specified:

Class Order Important Repetition Allowed Specified Length
Amalgams Yes Yes Yes
Permutations Yes No Yes
Compounds Yes No No
Compositions No Yes Yes
Combinations No No Yes
Subsets No No No

Instances of these classes are indexable pseudo-lists containing all possible selections of items. Since the number of possible arrangements can grow very quickly with the number of items available (and the number of items taken at a time, where applicable), instances do not actually store all arrangements but are rather containers of mappings between integers and arrangements. This makes it possible to create instances that "contain" very large numbers of arrangements.

Installation

pip install trotter

Example: combinations of words

from trotter import Combinations

items = ["the", "parrot", "is", "not", "pining"]
combos = Combinations(3, items)

print(repr(combos))
Combinations(3, ['the', 'parrot', 'is', 'not', 'pining'])
print(str(combos))
A pseudo-list containing 10 3-combinations of ['the', 'parrot', 'is', 'not', 'pining'].
print(len(combos))
10
for combo in combos:
    print(" ".join(combo))
the parrot is
the parrot not
the parrot pining
the is not
the is pining
the not pining
parrot is not
parrot is pining
parrot not pining
is not pining
print(combos.index("the parrot pining".split()))
2
print(combos[2])
['the', 'parrot', 'pining']

Example: subsets of characters in a string

The items can be presented as a list of objects or a string, which is interpreted as a list of characters. Here's an example where we use a string.

for i, subset in enumerate(Subsets("spam")):
     print(f"[{i}] '{subset}'")
[0] ''
[1] 's'
[2] 'p'
[3] 'sp'
[4] 'a'
[5] 'sa'
[6] 'pa'
[7] 'spa'
[8] 'm'
[9] 'sm'
[10] 'pm'
[11] 'spm'
[12] 'am'
[13] 'sam'
[14] 'pam'
[15] 'spam'

Example: many permutations!

from trotter import Permutations
letters = "abcdefghijklmnopqrstuvwxyz"
permutations = Permutations(10, letters)
print(permutations)
A pseudo-list containing 19275223968000 10-permutations of 'abcdefghijklmnopqrstuvwxyz'.

That's almost twenty trillion! Luckily, we're only dealing with a pseudo-list, and those permutations are not actually stored!

Notice that the word algorithms is a ten-letter permutation of the letters of the alphabet. At what position in the pseudo-list is this word?

print(permutations.index("algorithms"))
6831894769563

Luckily, we were able to find it without a brute-force search! Let's check that result...

print(permutations[6831894769563])
algorithms

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

trotter-1.1.0.tar.gz (9.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

trotter-1.1.0-py3-none-any.whl (11.1 kB view details)

Uploaded Python 3

File details

Details for the file trotter-1.1.0.tar.gz.

File metadata

  • Download URL: trotter-1.1.0.tar.gz
  • Upload date:
  • Size: 9.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.0 CPython/3.10.0

File hashes

Hashes for trotter-1.1.0.tar.gz
Algorithm Hash digest
SHA256 83e5a0b36d63bd82392faf37a5064534b1d65af6f941d1b1c4dde8062d31508d
MD5 b14b0cdbd903ed57f5861a2a05305962
BLAKE2b-256 3999efb2d2ed4c5019e131e8cfdad7c5019bb3fd9407cd8ce9bbf9c6938d194c

See more details on using hashes here.

File details

Details for the file trotter-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: trotter-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 11.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.0 CPython/3.10.0

File hashes

Hashes for trotter-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 146670fdae65bdab22608add0bbca0185b38379f4088901cfad0213d83db4043
MD5 05e4cae6c8ef548ed10481b8b13c94b3
BLAKE2b-256 3b6c13b67fd2bdb5501d6fbe59ad896fd5f933d5d7f6e104d1b5750df0ff85c7

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page