Skip to main content

A library for managing lottery results.

Project description

Pactole

A Python library for managing lottery results.

Installation

Add pactole to your project:

pip install -U pactole

Or with uv:

uv add -U pactole

Documentation

See the complete documentation index: Documentation.

Requirements

Requires Python 3 (version 3.10 or newer).

Usage

import pactole

What you can do with Pactole

With built-in lottery classes (EuroMillions, EuroDreams), you can:

  • Compute last/next draw dates from any date.
  • Build validated tickets from numbers or component ranks.
  • Generate random ticket batches (generate) with optional rank-space partitioning.
  • Query and export historical draws (get_records, count, dump).
  • Search historical results for a ticket and filter by winning rank (find_records).

EuroMillions: plan, generate, and analyze

from datetime import date

from pactole import EuroMillions

lottery = EuroMillions()
today = date(2026, 2, 19)

# 1) Plan around draw days
print(lottery.draw_days.days)
print(lottery.get_last_draw_date(from_date=today))
print(lottery.get_next_draw_date(from_date=today))

# 2) Build a ticket from user input
ticket = lottery.get_combination(numbers=[3, 15, 22, 28, 44], stars=[2, 9])
print(ticket.numbers.values, ticket.stars.values, ticket.rank)

# 3) Generate candidate tickets for the next draw
# partitions spreads picks across slices of the full rank space
suggested = lottery.generate(n=6, partitions=3)
for candidate in suggested:
    print(candidate)

# 4) Inspect history and evaluate your ticket
total_records = lottery.count()
records = list(lottery.get_records())
matches = list(lottery.find_records(ticket))

print(total_records, len(records), len(matches))

# Optional: keep only rank 4 (strict) or better than/equal to rank 4 (non-strict)
exact_rank_4 = list(lottery.find_records(ticket, target_rank=4, strict=True))
at_least_rank_4 = list(lottery.find_records(ticket, target_rank=4, strict=False))
print(len(exact_rank_4), len(at_least_rank_4))

EuroDreams: same workflow, different components

from datetime import date

from pactole import EuroDreams

lottery = EuroDreams()
today = date(2026, 2, 19)

# Draw planning
print(lottery.get_last_draw_date(from_date=today))
print(lottery.get_next_draw_date(from_date=today))

# Ticket creation (numbers + dream)
ticket = lottery.get_combination(numbers=[2, 3, 5, 7, 9, 38], dream=[3])
print(ticket.numbers.values, ticket.dream.values, ticket.rank)

# Ticket suggestions
combinations = lottery.generate(n=3)
print(combinations)

# History lookup for this ticket
records = list(lottery.get_records())
matches = list(lottery.find_records(ticket))
print(len(records), len(matches))

Useful API methods at a glance

  • get_last_draw_date(from_date=...) / get_next_draw_date(from_date=...): draw-day planning.
  • get_combination(...): build a validated game-specific ticket.
  • generate(n=..., partitions=...): create random tickets.
  • count(): total number of cached draw records.
  • get_records(force=False): iterate over structured DrawRecord objects.
  • dump(force=False): export raw dictionary rows (ready for tools like Pandas).
  • find_records(..., target_rank=..., strict=...): search matches in history.

See detailed usage guides:

Environment variables

Built-in lotteries and providers can be configured with environment variables.

  • PACTOLE_CACHE_ROOT
  • FDJ_ARCHIVES_PAGE_URL
  • EUROMILLIONS_PROVIDER_CLASS, EUROMILLIONS_DRAW_DAYS, EUROMILLIONS_DRAW_DAY_REFRESH_TIME, EUROMILLIONS_CACHE_NAME, EUROMILLIONS_ARCHIVES_PAGE
  • EURODREAMS_PROVIDER_CLASS, EURODREAMS_DRAW_DAYS, EURODREAMS_DRAW_DAY_REFRESH_TIME, EURODREAMS_CACHE_NAME, EURODREAMS_ARCHIVES_PAGE

See the full reference with defaults and behavior: Environment variables.

License

MIT License - See LICENSE file for details.

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

pactole-0.3.2.tar.gz (183.3 kB view details)

Uploaded Source

Built Distribution

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

pactole-0.3.2-py3-none-any.whl (50.4 kB view details)

Uploaded Python 3

File details

Details for the file pactole-0.3.2.tar.gz.

File metadata

  • Download URL: pactole-0.3.2.tar.gz
  • Upload date:
  • Size: 183.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for pactole-0.3.2.tar.gz
Algorithm Hash digest
SHA256 2ee2e6cd79abd7ad31e8220688ceca0c7fa28429b21fbdce151cfa189f91d49e
MD5 964f2d69e2dd35e8465ad4b4698042ad
BLAKE2b-256 882f4854246f7c221398ff7724314c9740671cb17d657d535f08e7e3b4a23b54

See more details on using hashes here.

File details

Details for the file pactole-0.3.2-py3-none-any.whl.

File metadata

  • Download URL: pactole-0.3.2-py3-none-any.whl
  • Upload date:
  • Size: 50.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for pactole-0.3.2-py3-none-any.whl
Algorithm Hash digest
SHA256 0b8c6ae5ef7a88bb187de255a66d875f57dd62bb4da59eecd1ecb02c02983e75
MD5 2eb631288093d16448afed93445cf0a4
BLAKE2b-256 102d4c16eb1bce3a512b0641724ec2a58beabf20119b7b698df55d737f13a432

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