FigurateNum is a collection of 235 figurate number generators based on the book Figurate Numbers by Michel Deza and Elena Deza, published in 2012.
FigurateNum helps discover patterns in figurate number sequences and supports numerical computation in mathematics-related projects. It integrates with other tools for visualizing geometric structures and serves as a companion to the book.
pip install figuratenumTo enable 2D visualizations via the FigurateViz class (requires numpy and matplotlib), install the optional dependencies:
pip install figuratenum[figurate-viz]Centered Hexagonal Pyramidal
Centered Decagonal Pyramidal
5D Hypercube
The main class, FigurateNum, provides access to all figurate number sequences across different dimensions, while dedicated classes let you work with each dimension separately:
- 79 Plane figurate numbers →
PlaneFigurateNumclass — Explore on GitHub - 86 Space figurate numbers →
SpaceFigurateNumclass — Explore on GitHub - 68 Multidimensional figurate numbers →
MultidimensionalFigurateNumclass — Explore on GitHub - 2 Zoo figurate numbers →
ZooFigurateNumclass — Explore on GitHub
- Gaussian plots (2D) in polar coordinates with customizable colors, visibility options, and export capabilities.
- Seamless integration with any figurate number sequence (
list[int]ortuple[int, ...]).
from figuratenum import FigurateNum, MultidimensionalFigurateNum
# 1. General use: generate any figurate sequence via FigurateNum
seq = FigurateNum()
hyperdodecahedral_gen = seq.hyperdodecahedral()
print([next(hyperdodecahedral_gen) for _ in range(4)])
# Output: [1, 600, 4983, 19468]
# 2. Specialized classes: PlaneFigurateNum, SpaceFigurateNum,
# MultidimensionalFigurateNum, ZooFigurateNum
multi = MultidimensionalFigurateNum()
hypertetrahedron_gen = multi.k_dimensional_centered_hypertetrahedron(21)
print([next(hypertetrahedron_gen) for _ in range(12)])
# Output: [1, 23, 276, 2300, 14950, 80730, 376740,
# 1560780, 5852925, 20160075, 64512240, 193536720]5D Hyperoctahedron
from figuratenum import FigurateNum as fgn
from figuratenum.figurate_viz.FigurateViz import FigurateViz
# Generate figurate numbers
seq_loop = fgn()
gen = seq_loop.five_dimensional_hyperoctahedron()
figuratenum_seq = [next(gen) for _ in range(704)]
# Create and draw the Gaussian plot
viz = FigurateViz(figuratenum_seq, figsize=(6, 6))
viz.gaussian_plot(
circ_color="m", bg_color="k", num_text=False,
num_color="g", ext_circle=True, rotate=-1
).draw()
# Export plots as .svg, .pdf, .png (matplotlib compatible),
# with options e.g., dpi, transparent, bbox_inches, pad_inches, etc.
viz.export_plot(
"figure1.svg", circ_color="m",
transparent=True, rotate=-1
)from figuratenum import NumCollector as nc, FigurateNum
gen = FigurateNum().pentatope()
print(nc.take_to_tuple(gen, 10)) # first 10 values as tuple
# Output: (1, 5, 15, 35, 70, 126, 210, 330, 495, 715)
# Available methods:
# - take(n) : first n values as iterator
# - take_to_list(stop, start=0, step=1)
# - take_to_tuple(stop, start=0, step=1)
# - take_to_array(stop, start=0, step=1)
# - pick(n) : nth value🚨 Version 2.0.0 includes renamed methods and changes in class usage. These changes are incompatible with previous versions. Please review the updated usage instructions below to adapt your code to the new structure.
Show 79 sequences of the PlaneFigurateNum class
polygonaltriangularsquarepentagonalhexagonalheptagonaloctagonalnonagonaldecagonalhendecagonaldodecagonaltridecagonaltetradecagonalpentadecagonalhexadecagonalheptadecagonaloctadecagonalnonadecagonalicosagonalicosihenagonalicosidigonalicositrigonalicositetragonalicosipentagonalicosihexagonalicosiheptagonalicosioctagonalicosinonagonaltriacontagonalcentered_triangularcentered_square=diamondcentered_pentagonalcentered_hexagonalcentered_heptagonalcentered_octagonalcentered_nonagonalcentered_decagonalcentered_hendecagonalcentered_dodecagonal=starcentered_tridecagonalcentered_tetradecagonalcentered_pentadecagonalcentered_hexadecagonalcentered_heptadecagonalcentered_octadecagonalcentered_nonadecagonalcentered_icosagonalcentered_icosihenagonalcentered_icosidigonalcentered_icositrigonalcentered_icositetragonalcentered_icosipentagonalcentered_icosihexagonalcentered_icosiheptagonalcentered_icosioctagonalcentered_icosinonagonalcentered_triacontagonalcentered_mgonal(m)pronic=heteromecic = oblongpoliteimpolitecrossaztec_diamondpolygram(m)=centered_star_polygonal(m)pentagramgnomictruncated_triangulartruncated_squaretruncated_pronictruncated_centered_pol(m)=truncated_centered_mgonal(m)truncated_centered_triangulartruncated_centered_squaretruncated_centered_pentagonaltruncated_centered_hexagonal=truncated_hexgeneralized_mgonal(m, start_numb)generalized_pentagonal(start_numb)generalized_hexagonal(start_numb)generalized_centered_pol(m, start_numb)generalized_pronic(start_numb)
Show 86 sequences of the SpaceFigurateNum class
m_pyramidal(m)triangular_pyramidalsquare_pyramidal=pyramidalpentagonal_pyramidalhexagonal_pyramidalheptagonal_pyramidaloctagonal_pyramidalnonagonal_pyramidaldecagonal_pyramidalhendecagonal_pyramidaldodecagonal_pyramidaltridecagonal_pyramidaltetradecagonal_pyramidalpentadecagonal_pyramidalhexadecagonal_pyramidalheptadecagonal_pyramidaloctadecagonal_pyramidalnonadecagonal_pyramidalicosagonal_pyramidalicosihenagonal_pyramidalicosidigonal_pyramidalicositrigonal_pyramidalicositetragonal_pyramidalicosipentagonal_pyramidalicosihexagonal_pyramidalicosiheptagonal_pyramidalicosioctagonal_pyramidalicosinonagonal_pyramidaltriacontagonal_pyramidaltriangular_tetrahedral[finite]triangular_square_pyramidal[finite]square_tetrahedral[finite]square_square_pyramidal[finite]tetrahedral_square_pyramidal[finite]cubictetrahedraloctahedraldodecahedralicosahedraltruncated_tetrahedraltruncated_cubictruncated_octahedralstella_octangulacentered_cuberhombic_dodecahedralhauy_rhombic_dodecahedralcentered_tetrahedron=centered_tetrahedralcentered_square_pyramid=centered_pyramidcentered_mgonal_pyramid(m)centered_pentagonal_pyramidcentered_hexagonal_pyramidcentered_heptagonal_pyramidcentered_octagonal_pyramidcentered_octahedroncentered_icosahedron=centered_cuboctahedroncentered_dodecahedroncentered_truncated_tetrahedroncentered_truncated_cubecentered_truncated_octahedroncentered_mgonal_pyramidal(m)centered_triangular_pyramidalcentered_square_pyramidalcentered_pentagonal_pyramidalcentered_heptagonal_pyramidalcentered_octagonal_pyramidalcentered_nonagonal_pyramidalcentered_decagonal_pyramidalcentered_hendecagonal_pyramidalcentered_dodecagonal_pyramidalcentered_hexagonal_pyramidal=hex_pyramidalhexagonal_prismmgonal_prism(m)generalized_mgonal_pyramidal(m, start_num)generalized_pentagonal_pyramidal(start_num)generalized_hexagonal_pyramidal(start_num)generalized_cubic(start_num)generalized_octahedral(start_num)generalized_icosahedral(start_num)generalized_dodecahedral(start_num)generalized_centered_cube(start_num)generalized_centered_tetrahedron(start_num)generalized_centered_square_pyramid(start_num)generalized_rhombic_dodecahedral(start_num)generalized_centered_mgonal_pyramidal(m, start_num)generalized_mgonal_prism(m, start_num)generalized_hexagonal_prism(start_num)
Show 68 sequences of the MultidimensionalFigurateNum class
k_dimensional_hypertetrahedron(k)=k_hypertetrahedron(k)=regular_k_polytopic(k)=figurate_of_order_k(k)five_dimensional_hypertetrahedronsix_dimensional_hypertetrahedronk_dimensional_hypercube(k)=k_hypercube(k)five_dimensional_hypercubesix_dimensional_hypercubehypertetrahedral=pentachoron=pentatope=triangulotriangular=cell_5hypercube=octachoron=tesseract=biquadratic=cell_8hyperoctahedral=hexadecachoron=four_cross_polytope=four_orthoplex=cell_16hypericosahedral=hexacosichoron=polytetrahedron=tetraplex=cell_600hyperdodecahedral=hecatonicosachoron=dodecaplex=polydodecahedron=cell_120polyoctahedral=icositetrachoron=octaplex=hyperdiamond=cell_24four_dimensional_hyperoctahedronfive_dimensional_hyperoctahedronsix_dimensional_hyperoctahedronseven_dimensional_hyperoctahedroneight_dimensional_hyperoctahedronnine_dimensional_hyperoctahedronten_dimensional_hyperoctahedronk_dimensional_hyperoctahedron(k)=k_cross_polytope(k)four_dimensional_mgonal_pyramidal(m)=mgonal_pyramidal_of_the_second_order(m)four_dimensional_square_pyramidalfour_dimensional_pentagonal_pyramidalfour_dimensional_hexagonal_pyramidalfour_dimensional_heptagonal_pyramidalfour_dimensional_octagonal_pyramidalfour_dimensional_nonagonal_pyramidalfour_dimensional_decagonal_pyramidalfour_dimensional_hendecagonal_pyramidalfour_dimensional_dodecagonal_pyramidalk_dimensional_mgonal_pyramidal(k, m)=mgonal_pyramidal_of_the_k_2_th_order(k, m)five_dimensional_mgonal_pyramidal(m)five_dimensional_square_pyramidalfive_dimensional_pentagonal_pyramidalfive_dimensional_hexagonal_pyramidalfive_dimensional_heptagonal_pyramidalfive_dimensional_octagonal_pyramidalsix_dimensional_mgonal_pyramidal(m)six_dimensional_square_pyramidalsix_dimensional_pentagonal_pyramidalsix_dimensional_hexagonal_pyramidalsix_dimensional_heptagonal_pyramidalsix_dimensional_octagonal_pyramidalcentered_biquadratick_dimensional_centered_hypercube(k)five_dimensional_centered_hypercubesix_dimensional_centered_hypercubecentered_polytopek_dimensional_centered_hypertetrahedron(k)five_dimensional_centered_hypertetrahedronsix_dimensional_centered_hypertetrahedroncentered_hyperoctahedral=orthoplexnexus(k)k_dimensional_centered_hyperoctahedron(k)five_dimensional_centered_hyperoctahedronsix_dimensional_centered_hyperoctahedrongeneralized_pentatope(start_num = 0)generalized_k_dimensional_hypertetrahedron(k = 5, start_num = 0)generalized_biquadratic(start_num = 0)generalized_k_dimensional_hypercube(k = 5, start_num = 0)generalized_hyperoctahedral(start_num = 0)generalized_k_dimensional_hyperoctahedron(k = 5, start_num = 0)generalized_hyperdodecahedral(start_num = 0)generalized_hypericosahedral(start_num = 0)generalized_polyoctahedral(start_num = 0)generalized_k_dimensional_mgonal_pyramidal(k, m, start_num = 0)generalized_k_dimensional_centered_hypercube(k, start_num = 0)generalized_nexus(k, start_num = 0)
Show 2 sequences of the ZooFigurateNum class
cuban_primepell
By default, FigurateNum uses optimized, mathematically equivalent versions that are significantly faster, especially for multidimensional figurate numbers. Incremental computation and precomputed values allow step-by-step results without recalculating everything. The original formulas from the book are available via the *_from_book() methods for reference and testing.
FigurateNum is currently under development, and we warmly invite your contributions. Just fork the project and then submit a pull request:
- Sequences from Chapters 1, 2, and 3 of the book
- New sequences not included in the book: If you have new sequences, please provide the source.
- Tests, documentation and errata (located at
docs/errata/errata-figuratenum.tex).
When making commits, please use the following conventional prefixes to indicate the nature of the changes: feat, refactor, fix, docs, and test.