Randomization

Re-seeding

As a source of randomness coolname uses standard random module, specifically random.randrange() function.

To re-seed the default generator, simply call random.seed():

import os, random
random.seed(os.urandom(128))

coolname itself never calls random.seed().

Replacing the random number generator

By default, all instances of RandomGenerator share the same random number generator.

To replace it for a custom generator:

from coolname import RandomGenerator
import random, os
seed = os.urandom(128)
generator = RandomGenerator(config, random=random.Random(seed))

To replace it for coolname.generate() and coolname.generate_slug():

import coolname
import random, os
seed = os.urandom(128)
coolname.replace_random(random.Random(seed))

How randomization works

In this section we dive into details of how coolname generates random sequences.

Let’s say we have following config:

config = {
    'all': {
        'type': 'cartesian',
        'lists': ['price', 'color', 'object']
    },
    # 2 items
    'price': {
        'type': 'words',
        'words': ['cheap', 'expensive']
    },
    # 3 items
    'color': {
        'type': 'words',
        'words': ['black', 'white', 'red']
    },
    # 5 + 6 = 11 items
    'object': {
        'type': 'nested',
        'lists': ['footwear', 'hat']
    },
    # 5 items
    'footwear': {
        'type': 'words',
        'words': ['shoes', 'boots', 'sandals', 'sneakers', 'socks']
    },
    # 6 items
    'hat': {
        'type': 'phrases',
        'phrases': ['top hat', 'fedora', 'beret', 'cricket cap', 'panama', 'sombrero']
    }
}
import coolname
generator = coolname.RandomGenerator(config)

The overall number of combinations is 2 × 3 × (5 + 6) = 66.

You can imagine a space of possible combinations as a virtual N-dimensional array. In this example, it’s 3-dimensional, with sides equal to 2, 3 and 11.

When user calls RandomGenerator.generate_slug(), a random integer is generated via randrange(66). Then, the integer is used to pick an element from 3-dimensional array.

Possible combinations

randrange() returns

generate_slug() returns

0

cheap-black-top-hat

1

cheap-black-fedora

2

cheap-black-beret

3

cheap-black-cricket-cap

4

cheap-black-panama

5

cheap-black-sombrero

6

cheap-black-shoes

7

cheap-black-boots

8

cheap-black-sandals

9

cheap-black-sneakers

10

cheap-black-socks

11

cheap-white-top-hat

12

cheap-white-fedora

63

expensive-red-sandals

64

expensive-red-sneakers

65

expensive-red-socks

Note

Actual order of combinations is an implementation detail, you should not rely on it.