This is to announce a package I just registered, Combinat.jl.

Here is the README

This module is a Julia port of some GAP combinatorics and basic number theory. The only dependency is the package `Primes`

.

The list of functions it exports are:

Classical enumerations:

`combinations, arrangements, partitions, partition_tuples, compositions, multisets`

functions to count them without computing them:

`ncombinations, narrangements, npartitions, npartition_tuples, ncompositions, nmultisets`

some functions on partitions and permutations:

`lcm_partitions, gcd_partitions, conjugate_partition, dominates, tableaux, robinson_schensted`

counting functions:

`bell, stirling1, stirling2, catalan`

number theory

`divisors, prime_residues, primitiveroot, bernoulli`

some structural manipulations not yet in Julia:

`groupby, tally, tally_sorted, collectby, unique_sorted!`

matrix blocks:

`blocks, diagblocks`

Have a look at the individual docstrings and enjoy (any feedback is welcome).

After writing most of this module I became aware of the package `Combinatorics`

which has a considerable overlap. However there are some fundamental disagreements between these two packages which makes `Combinatorics`

not easily usable for me:

- often I use sorting in algorithms when
`Combinatorics`

use hashing. Thus the algorithms cannot be applied to the same objects (and sorting is often faster). I provide optionally a hashing variant of some algorithms. -
`Combinatorics.combinations`

does not include the empty set. - I use lower case for functions and Camel case for structs (Iterators).
`Combinatorics`

does not have functions for classical enumerations but only (lowercase) iterators.

Some less fundamental disagreements is disagreement on names. However I would welcome discussions with the authors of `Combinatorics`

to see if both packages could be made more compatible.