Metadata-Version: 2.4
Name: shuffled
Version: 1.2.0
Summary: Iterate randomly over integer ranges
Author-email: Bertrand Bonnefoy-Claudet <bertrand@bertrandbc.com>
License-Expression: MIT
License-File: LICENSE
Keywords: integer,iterator,random
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Typing :: Typed
Requires-Python: >=3.9
Requires-Dist: cryptography
Description-Content-Type: text/markdown

# Shuffled: Random iterators for large integer ranges

Shuffled is a library for iterating randomly and without repetition over integer ranges.
It doesn’t store all the integers in memory so that you can work with ranges of up to
2<sup>128</sup> elements, even with your standard RAM available.

## Installation

``` shell
pip install shuffled
```

## Usage

Example: Generating a permutation of integers.

``` python
>>> from shuffled import Shuffled
>>> shuffled_range = Shuffled(10)
>>> list(shuffled_range)
[4, 1, 2, 9, 8, 5, 3, 0, 6, 7]
>>> same_shuffled_range = Shuffled(10, seed=shuffled_range.seed)
>>> list(same_shuffled_range)
[4, 1, 2, 9, 8, 5, 3, 0, 6, 7]
```

Example: Listing all IP addresses in a subnet in random order.

``` python
>>> import ipaddress
>>> from shuffled import Shuffled
>>> network = ipaddress.IPv4Network('10.0.0.0/8')
>>> shuffled_range = Shuffled(network.num_addresses)
>>> for index in shuffled_range:
...     print(network[index])
...
10.24.41.126
10.67.199.15
10.240.82.199
10.79.219.74
10.166.105.25
10.19.5.91
# Continues for all 16M addresses in the subnet
```

## Release

- Update the [changelog].
- Bump the version identified in [`pyproject.toml`].
- After those changes are merged into `main`, tag the commit on `main` and push it.
  - The CI/CD process will publish the new package version on PyPI.

  [changelog]: CHANGELOG.md
  [`pyproject.toml`]: pyproject.toml
