Skip to main content

Python library for number classification — 2140+ named number types, zero dependencies

Project description

numclassify

PyPI version Downloads Python Tests License

Given a number, what is it?

Most number-theory libraries — labmath, eulerlib, pyntlib — compute things: factor integers, find GCDs, generate primes. numclassify solves a different problem. Hand it a number and it tells you every named mathematical type that number belongs to, across 2140+ categories, with zero external dependencies.

153   →  Armstrong, Harshad, Triangular, Abundant, ...
1729  →  Taxicab (Hardy-Ramanujan), Carmichael, Zeisel, ...
28    →  Perfect, Triangular, Hexagonal, Semiprime, ...

Try it in your browser: numclassify Playground


Installation

pip install numclassify

Python 3.8+ required. No external dependencies.


Quick Start

import numclassify as nc

# Boolean checks
nc.is_prime(17)       # True
nc.is_perfect(28)     # True

# Classify a single number
nc.classify(1729)
# {
#   'number': 1729,
#   'score': 22,            # total true properties (incl. figurate)
#   'notable_score': 18,    # score excluding polygonal figurate noise
#   'true_properties': ['Taxicab', 'Carmichael', ...],
#   'categories': {'primes': [...], 'sequences': [...], ...}
# }

# Batch classify
nc.classify_batch([6, 28, 496])

# Find numbers in a range with a given property
nc.find_by_property(start=1, end=1000, Perfect=True)
# [6, 28, 496]

# Stream over large ranges without loading everything into memory
for result in nc.stream(1, 1_000_000, min_score=20):
    print(result)

# Stream only numbers with a specific property
for result in nc.stream(1, 10_000, has_property="prime"):
    print(result)

# All true properties of a number (returns a dict of True properties)
nc.get_true_properties(1729)

# Pretty-print a formatted table
nc.print_properties(153)
# ┌─────────────────────────────────────────┐
# │  Properties of 153                      │
# ├─────────────────────────────────────────┤
# │  armstrong         ✓                    │
# │  harshad           ✓                    │
# │  triangular        ✓                    │
# │  ...                                    │
# └─────────────────────────────────────────┘

CLI

# Classify a number
numclassify check 1729

# JSON output for piping
numclassify check 153 --json

# Find numbers of a type
numclassify find armstrong --limit 10

# Filter a range
numclassify range 1 20 --filter prime

# Compare two numbers
numclassify compare 6 28

# List all types in a category
numclassify list --category primes

# Get info and OEIS reference for a type
numclassify info armstrong

Number Categories

Category Count Examples
Polygonal figurate ~1003 Triangular, Square, Pentagonal, Chiliagonal
Centered polygonal ~998 Centered Triangular, Centered Hexagonal
Prime families 40 Twin, Mersenne, Sophie Germain, Wilson, Safe
Digital invariants 13 Armstrong, Spy, Harshad, Disarium, Happy, Neon
Divisor-based 27 Perfect, Abundant, Weird, Amicable, Practical
Sequences 16 Fibonacci, Lucas, Catalan, Bell, Padovan
Powers 13 Perfect Square, Taxicab, Sum of Two Squares
Number theory 14 Evil, Carmichael, Keith, Autobiographical
Combinatorial 10 Factorial, Primorial, Subfactorial
Recreational 6 Kaprekar, Automorphic, Palindrome
Exam types 8 Armstrong, Strong, Sunny, Buzz, Magic, Unique
Total 2140+

Custom Types

The @register decorator lets you add your own number types. Once registered, the type appears everywhere — classify(), find_by_property(), the CLI, all of it.

from numclassify import register

@register(name="my_type", category="custom")
def is_my_type(n: int) -> bool:
    return n > 0 and n % 7 == 0 and str(n)[0] == "4"

import numclassify as nc
nc.is_my_type(42)           # True
nc.get_true_properties(42)  # [..., 'my_type', ...]

See examples/ for runnable scripts covering all major features.


API Reference

Function Description
classify(n) Returns {number, score, notable_score, true_properties, categories}
classify_batch(numbers) Classify a list; returns list of dicts
random_number(max_n) Classify a randomly selected number
find_by_property(start, end, **filters) Numbers in range matching property filters
stream(start, end, min_score, has_property) Generator — memory-safe range classification
get_all_properties(n) Dict of every type mapped to True/False
get_true_properties(n) List of True property names only
print_properties(n) Pretty-print property table to stdout
count_properties(n) Count of True properties
most_special_in_range(lo, hi, verbose) Number in range with the most True properties
find_in_range(fn, lo, hi) Numbers where callable fn returns True
find_any_in_range(predicates, lo, hi) Integers in range satisfying at least one predicate
find_all_in_range(predicates, lo, hi) Integers in range satisfying all predicates
register Decorator to add custom number types
is_prime(n) Convenience boolean
is_armstrong(n) Convenience boolean
is_perfect(n) Convenience boolean

Full docs: aratrikghosh2011-tech.github.io/numclassify


License

MIT © 2026 Aratrik Ghosh

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

numclassify-0.4.2.tar.gz (70.5 kB view details)

Uploaded Source

Built Distribution

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

numclassify-0.4.2-py3-none-any.whl (50.5 kB view details)

Uploaded Python 3

File details

Details for the file numclassify-0.4.2.tar.gz.

File metadata

  • Download URL: numclassify-0.4.2.tar.gz
  • Upload date:
  • Size: 70.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for numclassify-0.4.2.tar.gz
Algorithm Hash digest
SHA256 4c3239bec52353c87f8b7bcd8586f19924ec57204aac1f95350bcafe315e2dfe
MD5 0acb598b3d9a1b163f5fe4153f121dab
BLAKE2b-256 03c97f573ec1ba62ba900f9b6c27c0d06704d7574241392e505840b284a9a598

See more details on using hashes here.

Provenance

The following attestation bundles were made for numclassify-0.4.2.tar.gz:

Publisher: publish.yml on aratrikghosh2011-tech/numclassify

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file numclassify-0.4.2-py3-none-any.whl.

File metadata

  • Download URL: numclassify-0.4.2-py3-none-any.whl
  • Upload date:
  • Size: 50.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for numclassify-0.4.2-py3-none-any.whl
Algorithm Hash digest
SHA256 d1f0dc8639c2d6d85b6f851370703ecc0f8f6d4189bd3af873d6521a983b831a
MD5 cd20b8ca59a2a6e80cd5ab0e30ce004a
BLAKE2b-256 79e80b086dfc30117b322b90993795cb66f5de09eab8433b841cb6404cba7541

See more details on using hashes here.

Provenance

The following attestation bundles were made for numclassify-0.4.2-py3-none-any.whl:

Publisher: publish.yml on aratrikghosh2011-tech/numclassify

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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