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.
Why numclassify?
Most number-theory libraries — labmath, eulerlib, pyntlib — answer computational questions: factor this, find the GCD, generate primes up to N.
numclassify answers a different question: what kind of number is this?
153→ Armstrong, Narcissistic, Harshad, Triangular, Abundant…1729→ Taxicab (Hardy-Ramanujan), Zeisel, Carmichael…28→ Perfect, Triangular, Hexagonal, Semiprime…
Over 3000 named number types, instant lookup, no external dependencies.
Installation
pip install numclassify
Or clone and install 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_armstrong(153) # True
nc.is_perfect(28) # True
# All true properties of a number
nc.get_true_properties(1729)
# ['taxicab', 'zeisel', 'carmichael', 'odd', 'composite',
# 'deficient', 'squarefree', 'cubefree', 'powerful_not_perfect_power']
# Search a range
nc.find_in_range(nc.is_armstrong, 1, 10000)
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371, 407, 1634, 8208, 9474]
# Pretty-print everything about a number
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
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 Your Own Number Type
The @register decorator lets you plug in custom types in 6 lines:
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"
# Now works everywhere
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 |
|---|---|
is_prime(n) |
Returns True if n is a standard prime |
is_armstrong(n) |
Returns True if n is a narcissistic/Armstrong number |
get_all_properties(n) |
Dict of every registered type → True/False |
get_true_properties(n) |
List of only the properties that are True |
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 |
find_all_in_range(lo, hi) |
Dict mapping every number in range to its true properties |
count_properties(n) |
Count of how many types apply to n |
most_special_in_range(lo, hi) |
The number in [lo, hi] with the most true properties |
Full API docs: github.com/aratrikghosh2011-tech/numclassify
Requirements
- Python 3.8 or higher
- Zero external dependencies
License
MIT © 2026 Aratrik Ghosh
Project details
Release history Release notifications | RSS feed
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.1.0.tar.gz.
File metadata
- Download URL: numclassify-0.1.0.tar.gz
- Upload date:
- Size: 42.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6f7828f84be31f896a664b509c02250cd558246f5271f8e2d97d754c6b1781c4
|
|
| MD5 |
4b60bd3ed7707811ba9503391f38baeb
|
|
| BLAKE2b-256 |
bd41d8bc12e0f091ce5ff3635fcbf45db36a0513c9e1a9738944b54ed88eb62a
|
Provenance
The following attestation bundles were made for numclassify-0.1.0.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.1.0.tar.gz -
Subject digest:
6f7828f84be31f896a664b509c02250cd558246f5271f8e2d97d754c6b1781c4 - Sigstore transparency entry: 1339329982
- Sigstore integration time:
-
Permalink:
aratrikghosh2011-tech/numclassify@1129c589c0e60bb8067f17da1f7e7c44d3c46f08 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/aratrikghosh2011-tech
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@1129c589c0e60bb8067f17da1f7e7c44d3c46f08 -
Trigger Event:
push
-
Statement type:
File details
Details for the file numclassify-0.1.0-py3-none-any.whl.
File metadata
- Download URL: numclassify-0.1.0-py3-none-any.whl
- Upload date:
- Size: 45.4 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 |
9c401964c1bcbe7b6b02de68861125b2606e88bb36b5931cb87b21fbc904fc73
|
|
| MD5 |
b8058efdbabd9472a9a6801e414fa789
|
|
| BLAKE2b-256 |
0d008d7d9c1af16e0d5fa5f54fb928cbb765f8fd48ca30297b512cee08d0fea3
|
Provenance
The following attestation bundles were made for numclassify-0.1.0-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.1.0-py3-none-any.whl -
Subject digest:
9c401964c1bcbe7b6b02de68861125b2606e88bb36b5931cb87b21fbc904fc73 - Sigstore transparency entry: 1339329986
- Sigstore integration time:
-
Permalink:
aratrikghosh2011-tech/numclassify@1129c589c0e60bb8067f17da1f7e7c44d3c46f08 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/aratrikghosh2011-tech
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@1129c589c0e60bb8067f17da1f7e7c44d3c46f08 -
Trigger Event:
push
-
Statement type: