The most comprehensive Python library for number classification - 3000+ number types
Project description
numclassify
The most comprehensive Python library for number classification — 3000+ number types, zero dependencies.
Overview
Most number-theory libraries — labmath, eulerlib, pyntlib — are built around computation: factoring integers, finding GCDs, generating primes. numclassify solves a different problem: given a number, what is it?
153 → Armstrong, Harshad, Triangular, Abundant ...
1729 → Taxicab (Hardy-Ramanujan), Carmichael, Zeisel ...
28 → Perfect, Triangular, Hexagonal, Semiprime ...
Over 3000 named number types are supported, with instant lookup, no external dependencies, and a fully typed API.
Installation
pip install numclassify
To install from source in editable mode:
git clone https://github.com/aratrikghosh2011-tech/numclassify.git
cd numclassify
pip install -e .
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, 'true_properties': ['Taxicab', 'Carmichael', ...], 'score': 22}
# Classify multiple numbers at once
nc.classify_batch([6, 28, 496])
# Query by property
nc.find_by_property(start=1, end=1000, Perfect=True)
# [6, 28, 496]
# Memory-safe streaming over large ranges
for result in nc.stream(1, 1_000_000):
if result['score'] > 30:
print(result)
# Random number classification
nc.random_number()
# All true properties of a number
nc.get_true_properties(1729)
# Pretty-print everything
nc.print_properties(153)
# ┌─────────────────────────────────────────┐
# │ Properties of 153 │
# ├─────────────────────────────────────────┤
# │ armstrong ✓ │
# │ harshad ✓ │
# │ triangular ✓ │
# │ ... │
# └─────────────────────────────────────────┘
CLI
numclassify ships with a fully-featured command-line interface.
Check a number:
$ numclassify check 1729
1729 properties:
taxicab ✓
carmichael ✓
zeisel ✓
odd ✓
deficient ✓
squarefree ✓
JSON output (pipe-friendly):
$ numclassify check 153 --json
{"armstrong": true, "harshad": true, "triangular": true, "abundant": true, ...}
Find numbers of a type:
$ numclassify find armstrong --limit 10
1, 2, 3, 4, 5, 6, 7, 8, 9, 153
Filter a range:
$ numclassify range 1 20 --filter prime
2, 3, 5, 7, 11, 13, 17, 19
Compare two numbers:
$ numclassify compare 6 28
Comparing 6 and 28
──────────────────
Shared (13): Perfect, Triangular, Hexagonal, ...
Only in 6 (21): Armstrong, Factorial, Palindrome, ...
Only in 28 (8): Happy, Keith, Padovan, ...
List all registered types in a category:
$ numclassify list --category primes
twin_prime, mersenne_prime, sophie_germain_prime, safe_prime,
wilson_prime, fermat_prime, ... (41 total)
Get info about a type:
$ numclassify info armstrong
Name: armstrong
Category: digital_invariants
Description: A number equal to the sum of its digits each raised to the power
of the number of digits. Also called narcissistic numbers.
OEIS: A005188
Examples: 1, 2, 3, 153, 370, 371, 407, 1634, 8208, 9474
Number Categories
| Category | Count | Examples |
|---|---|---|
| Polygonal (figurate) | 998 | Triangular, Square, Pentagonal, Chiliagonal |
| Centered Polygonal | 998 | Centered Triangular, Centered Hexagonal |
| Prime families | 41 | Twin, Mersenne, Sophie Germain, Wilson, Safe |
| Digital invariants | 10 | Armstrong, Spy, Harshad, Disarium, Happy, Neon |
| Divisor-based | 27 | Perfect, Abundant, Weird, Amicable, Practical |
| Sequences | 15 | 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, Catalan |
| Recreational | 5 | Kaprekar, Automorphic, Palindrome |
| Total | 3000+ |
Adding Custom Number Types
The @register decorator lets you define and integrate your own number types in a few lines. Once registered, the type is automatically available through the full API and CLI.
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(49) # False (doesn't start with 4)
nc.is_my_type(42) # True
nc.get_true_properties(42) # [..., 'my_type', ...]
API Reference
| Function | Description |
|---|---|
classify(n) |
Returns a dict with the number, its true properties, and a score |
classify_batch(numbers) |
Classify a list of numbers; returns a list of dicts |
random_number(max_n) |
Classify a randomly selected number up to max_n |
find_by_property(start, end, **filters) |
Find numbers in a range matching given property filters |
stream(start, end) |
Generator yielding classify results one at a time; memory-safe |
is_prime(n) |
Returns True if n is prime |
is_armstrong(n) |
Returns True if n is an Armstrong (narcissistic) number |
get_all_properties(n) |
Dict mapping every registered type to True or False |
get_true_properties(n) |
List of only the properties that hold for n |
print_properties(n) |
Pretty-prints a formatted property table to stdout |
find_in_range(fn, lo, hi) |
All integers in [lo, hi] where fn returns True |
count_properties(n) |
Number of types that apply to n |
most_special_in_range(lo, hi) |
Number in [lo, hi] with the greatest count of true properties |
Full API documentation: github.com/aratrikghosh2011-tech/numclassify
Requirements
- Python 3.8 or higher
- No external dependencies
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file numclassify-0.2.1.tar.gz.
File metadata
- Download URL: numclassify-0.2.1.tar.gz
- Upload date:
- Size: 46.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cad9444213355f35a900d8d724fb6b1c7ca011f3182865bad854adc7ccc98994
|
|
| MD5 |
ced1006d2f2b7a451d1f0e07a69eb4e9
|
|
| BLAKE2b-256 |
a7ff30ceb09d90cb4f20f858a2f825c9cbe546c70d26e5b870b8aa8c862f0eeb
|
Provenance
The following attestation bundles were made for numclassify-0.2.1.tar.gz:
Publisher:
publish.yml on aratrikghosh2011-tech/numclassify
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
numclassify-0.2.1.tar.gz -
Subject digest:
cad9444213355f35a900d8d724fb6b1c7ca011f3182865bad854adc7ccc98994 - Sigstore transparency entry: 1790818923
- Sigstore integration time:
-
Permalink:
aratrikghosh2011-tech/numclassify@b88ab782b299dd25471c6bfe475b31c7a1517404 -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/aratrikghosh2011-tech
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b88ab782b299dd25471c6bfe475b31c7a1517404 -
Trigger Event:
push
-
Statement type:
File details
Details for the file numclassify-0.2.1-py3-none-any.whl.
File metadata
- Download URL: numclassify-0.2.1-py3-none-any.whl
- Upload date:
- Size: 47.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fa3a51ef0281bcf238cc98af9cef6d3a9d3423daf7168f544ad87ab932b5ce8a
|
|
| MD5 |
5bc852722a36b866bddcbcc3bfe9f572
|
|
| BLAKE2b-256 |
ab41734b83faf679b6c788e2e13a44d632b4d98aba7bc8c35b2da68134f78619
|
Provenance
The following attestation bundles were made for numclassify-0.2.1-py3-none-any.whl:
Publisher:
publish.yml on aratrikghosh2011-tech/numclassify
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
numclassify-0.2.1-py3-none-any.whl -
Subject digest:
fa3a51ef0281bcf238cc98af9cef6d3a9d3423daf7168f544ad87ab932b5ce8a - Sigstore transparency entry: 1790818954
- Sigstore integration time:
-
Permalink:
aratrikghosh2011-tech/numclassify@b88ab782b299dd25471c6bfe475b31c7a1517404 -
Branch / Tag:
refs/tags/v0.2.1 - Owner: https://github.com/aratrikghosh2011-tech
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b88ab782b299dd25471c6bfe475b31c7a1517404 -
Trigger Event:
push
-
Statement type: