modules

geometor.durer

GEOMETOR Dürer: Exact symbolic constructions & bilingual codex for Underweysung der Messung (1525).

Provides 100% exact SymPy + geometor.model constructions across all Four Books (Vier Bücher) of Albrecht Dürer’s Underweysung der Messung, mit dem Zirckel un[d] Richtscheyt, in Linien Ebnen unnd gantzen Corporen (Nuremberg, 1525; 2nd ed. 1538; Camerarius Latin ed. 1532):

  • Book I (geometor.durer.conics_perspective): 12-sector Archimedean spirals (Schneckenlinien) and two-view descriptive geometry of conic sections (Elipsis / Eierlini, Parabola / Brennspiegellini, Hiperbole / Gabellini).

  • Book II (geometor.durer.polygons): Exact comparison of Dürer’s Single-Aperture (“Rusty Compass”) Pentagon with Euclid’s Q(phi) regular pentagon, plus cubic-impossibility and quadrature audits for workshop 7-, 11-, and 13-gons and pi = 25/8.

  • Book III (geometor.durer.typography): Compass-and-straightedge Roman Antiqua capitals (A, O, Q) in the 10 x 10 square and modular Gothic Textura minuscules.

  • Book IV (geometor.durer.polyhedra, geometor.durer.conics_perspective): Planar fold-out polyhedral nets for Platonic & Archimedean solids, Delian cube duplication, and central perspective projection onto the glass picture plane.

Submodules

Attributes

PHI

DURER_BOOK4_SOLIDS_CATALOG

EMBEDDED_SVG_STYLE

__version__

Classes

ConcordanceEntry

Single cross-corpus concordance link from Dürer's Underweysung to GEOMETOR.

UnderweysungApparatus

Loaded JSON apparatus registries for resources/underweysung/.

ConicSectionsResult

Exact symbolic audit of Dürer's Book I two-view orthographic conic sections (Figs. 34–37).

DelianCubeCertificate

Symbolic verification of Plato's / Sporus's two-mean-proportionals cube duplication.

PerspectiveApparatusResult

Exact rational perspective projection of a 3D cube onto Dürer's Book IV glass frame.

SpiralVoluteResult

Exact 12-sector Archimedean spiral (Schneckenlini, Book I, Figs. 7 & 17) over Q(sqrt(3)).

HeptagonWorkshopReport

Exact symbolic construction & cubic-impossibility audit for Dürer's Book II heptagon.

PentagonComparisonResult

Exact symbolic result comparing Dürer's single-aperture pentagon with Euclid's pentagon.

WorkshopPolygonEntry

Exact algebraic vs. trigonometric audit for one of Dürer's Book II workshop rules.

Book4SolidCatalogEntry

Historical & combinatorial catalog entry for Dürer's Book IV solids (Figs. 29–43).

PolyhedralFace

Single regular polygon face in an unfolded 2D planar polyhedral net.

PolyhedralNet

Exact 2D planar fold-out net for a Platonic or Archimedean polyhedron.

RomanLetterAResult

Exact symbolic construction of Dürer's Roman Antiqua capital A in a 10 x 10 square.

RomanLetterOQResult

Exact symbolic construction of Dürer's Roman Antiqua O or Q in a 10 x 10 square.

TexturaMinusculesResult

Exact modular construction of Dürer's Gothic Textura minuscules i, n, m.

Functions

default_resources_dir() → pathlib.Path

Locate resources/underweysung/ relative to the repository root.

load_apparatus([resources_dir]) → UnderweysungApparatus

Load all five JSON apparatus files from resources/underweysung/.

construct_durer_conic_sections([model]) → ConicSectionsResult

Construct Dürer's Book I elevation + ground-plan + true-section diagram for the ellipse.

construct_durer_perspective_apparatus([model]) → PerspectiveApparatusResult

Project a 3D cube in Q^3 onto Dürer's picture plane x = 0 from eye E(-12, 3, 5).

construct_durer_spiral_volute([turns, model]) → SpiralVoluteResult

Construct Dürer's Book I Archimedean spiral over Q(sqrt(3)) using 12 angular sectors.

construct_durer_heptagon_workshop([model]) → HeptagonWorkshopReport

Construct Dürer's workshop regular heptagon in the unit circle and audit its cubic residual.

construct_durer_vs_euclid_pentagon([model]) → PentagonComparisonResult

Construct Dürer's single-aperture pentagon and Euclid's exact pentagon on base AB.

construct_durer_polyhedral_nets() → dict[str, PolyhedralNet]

Construct all 6 exact symbolic planar polyhedral nets from Dürer's Book IV.

polyhedral_net_to_model(net[, model]) → geometor.model.Model

Populate a geometor.model.Model with exact vertices, face polygons, and fold/cut seams.

export_svg(svg_text, output_path) → pathlib.Path

Write svg_text to output_path creating parent directories if needed.

generate_all_codex_figures(output_dir) → list[pathlib.Path]

Generate all 10 interactive .euclid-graphic SVG figures for docsrc/_static/figures/.

render_model_svg(model, *[, width, height, padding, ...]) → str

Serialize a Model into a crisp .euclid-graphic SVG string.

construct_durer_roman_letter_A([model]) → RomanLetterAResult

Construct Dürer's Roman capital A inside the 10 x 10 square ABCD.

construct_durer_roman_letter_O([model]) → RomanLetterOQResult

Construct Dürer's Roman capital O inside the 10 x 10 square.

construct_durer_roman_letter_Q([model]) → RomanLetterOQResult

Construct Dürer's Roman capital Q inside the 10 x 10 square.

construct_durer_textura_minuscules([model]) → TexturaMinusculesResult

Construct Dürer's modular Textura minuscules i, n, and m from unit squares.

Package Contents

class geometor.durer.ConcordanceEntry

Single cross-corpus concordance link from Dürer’s Underweysung to GEOMETOR.

id: str
book: int
unit: str
durer_locus: str
german_term: str
latin_1532_term: str
english_title: str
classification: str
sister_repos: tuple[str, ...]
algebraic_field: str
summary: str
class geometor.durer.UnderweysungApparatus

Loaded JSON apparatus registries for resources/underweysung/.

sources_manifest: dict[str, Any]
concordance: tuple[ConcordanceEntry, ...]
persons: dict[str, dict[str, Any]]
citations: dict[str, dict[str, Any]]
glossary: dict[str, dict[str, Any]]
geometor.durer.default_resources_dir() → pathlib.Path

Locate resources/underweysung/ relative to the repository root.

geometor.durer.load_apparatus(resources_dir: str | pathlib.Path | None = None) → UnderweysungApparatus

Load all five JSON apparatus files from resources/underweysung/.

class geometor.durer.ConicSectionsResult

Exact symbolic audit of Dürer’s Book I two-view orthographic conic sections (Figs. 34–37).

model: geometor.model.Model
cone_radius: sympy.Integer
cone_height: sympy.Integer
ellipse_stations: tuple[tuple[int, sympy.Expr, sympy.Expr, sympy.Expr, sympy.Expr], ...]
ellipse_semi_major: sympy.Expr
ellipse_semi_minor: sympy.Expr
ellipse_focal_distance: sympy.Expr
ellipse_eccentricity: sympy.Expr
ellipse_bilateral_symmetry_verified: bool
parabola_focal_length: sympy.Expr
hyperbola_semi_transverse: sympy.Integer
hyperbola_semi_conjugate: sympy.Integer
class geometor.durer.DelianCubeCertificate

Symbolic verification of Plato’s / Sporus’s two-mean-proportionals cube duplication.

given_g: sympy.Expr
given_e: sympy.Expr
first_mean_c: sympy.Expr
second_mean_d: sympy.Expr
volume_ratio: sympy.Expr
proportion_verified: bool
class geometor.durer.PerspectiveApparatusResult

Exact rational perspective projection of a 3D cube onto Dürer’s Book IV glass frame.

model: geometor.model.Model
eye_3d: tuple[sympy.Integer, sympy.Integer, sympy.Integer]
picture_plane_x: sympy.Integer
vanishing_point: sympy.geometry.Point
cube_vertices_3d: dict[str, tuple[sympy.Integer, sympy.Integer, sympy.Integer]]
projected_vertices_2d: dict[str, sympy.geometry.Point]
harmonic_cross_ratio_3d: sympy.Rational
harmonic_cross_ratio_2d: sympy.Expr
cross_ratio_invariant_verified: bool
delian_cube: DelianCubeCertificate
class geometor.durer.SpiralVoluteResult

Exact 12-sector Archimedean spiral (Schneckenlini, Book I, Figs. 7 & 17) over Q(sqrt(3)).

model: geometor.model.Model
center: sympy.geometry.Point
outer_radius: sympy.Integer
sector_count: int
spiral_points: tuple[sympy.geometry.Point, ...]
radii: tuple[sympy.Expr, ...]
geometor.durer.construct_durer_conic_sections(model: geometor.model.Model | None = None) → ConicSectionsResult

Construct Dürer’s Book I elevation + ground-plan + true-section diagram for the ellipse.

Also computes exact focal and asymptotic invariants for Dürer’s Parabola (Brennspiegellini) and Hiperbole (Gabellini).

geometor.durer.construct_durer_perspective_apparatus(model: geometor.model.Model | None = None) → PerspectiveApparatusResult

Project a 3D cube in Q^3 onto Dürer’s picture plane x = 0 from eye E(-12, 3, 5).

Verifies:

  1. Exact rational screen coordinates (y', z') in Q^2 for all 8 cube vertices.

  2. Exact convergence of all 4 depth edges at principal vanishing point V_x = (3, 5).

  3. Exact projective cross-ratio invariance CR(P4', P8'; P6', V_x) = -1 (harmonic range!).

  4. Exact algebraic verification of Plato’s / Sporus’s two mean proportionals (Book IV, Fig. 50) for doubling the cube (g = 1, e = 2 => c = 2^(1/3), d = 2^(2/3), c^3 = 2).

geometor.durer.construct_durer_spiral_volute(turns: int = 2, model: geometor.model.Model | None = None) → SpiralVoluteResult

Construct Dürer’s Book I Archimedean spiral over Q(sqrt(3)) using 12 angular sectors.

Dürer divides the outer circle into 12 radial rays (1..12, every 30°) and divides the outer radius R = 12 into 12 * turns equal radial steps r_k = k / turns, plotting P_k = (r_k * cos(k * 30°), r_k * sin(k * 30°)) with 100% exact coordinates in Q(sqrt(3)).

geometor.durer.PHI: sympy.Expr
class geometor.durer.HeptagonWorkshopReport

Exact symbolic construction & cubic-impossibility audit for Dürer’s Book II heptagon.

model: geometor.model.Model
center: sympy.geometry.Point
circumcircle: sympy.geometry.Circle
equilateral_chord_top: sympy.geometry.Point
equilateral_chord_bottom: sympy.geometry.Point
radius_midpoint: sympy.geometry.Point
workshop_vertices: tuple[sympy.geometry.Point, ...]
durer_chord_quadrance: sympy.Rational
minimal_polynomial_expr: sympy.Expr
minimal_polynomial_at_durer: sympy.Rational
eisenstein_prime: int
quadrature_circle_diameter_over_side: sympy.Expr
quadrature_implied_pi: sympy.Rational
workshop_catalog: tuple[WorkshopPolygonEntry, ...]
class geometor.durer.PentagonComparisonResult

Exact symbolic result comparing Dürer’s single-aperture pentagon with Euclid’s pentagon.

model: geometor.model.Model
base_a: sympy.geometry.Point
base_b: sympy.geometry.Point
durer_vertices: tuple[sympy.geometry.Point, sympy.geometry.Point, sympy.geometry.Point, sympy.geometry.Point, sympy.geometry.Point]
euclid_vertices: tuple[sympy.geometry.Point, sympy.geometry.Point, sympy.geometry.Point, sympy.geometry.Point, sympy.geometry.Point]
durer_aux_points: dict[str, sympy.geometry.Point]
durer_side_quadrances: tuple[sympy.Expr, sympy.Expr, sympy.Expr, sympy.Expr, sympy.Expr]
euclid_side_quadrances: tuple[sympy.Expr, sympy.Expr, sympy.Expr, sympy.Expr, sympy.Expr]
euclid_diagonal_quadrance: sympy.Expr
durer_base_diagonal_quadrance: sympy.Expr
durer_shoulder_diagonal_quadrance: sympy.Expr
durer_base_spread: sympy.Expr
euclid_base_spread: sympy.Expr
durer_equilateral: bool
durer_equiangular: bool
euclid_regular: bool
property durer_base_interior_deg: float

Numerical evaluation (degrees) of Dürer’s interior angle at A and B.

property base_angle_error_deg: float

Signed error (degrees) of Dürer’s base interior angle relative to exact 108°.

property base_angle_error_arcmin: float

Signed error (arcminutes) of Dürer’s base interior angle relative to exact 108°.

class geometor.durer.WorkshopPolygonEntry

Exact algebraic vs. trigonometric audit for one of Dürer’s Book II workshop rules.

n_sides: int
durer_label: str
classification: str
exact_chord_over_r: sympy.Expr
exact_quadrance_over_r2: sympy.Expr
true_chord_over_r_float: float
relative_chord_error: float
central_angle_durer_deg: float
central_angle_true_deg: float
geometor.durer.construct_durer_heptagon_workshop(model: geometor.model.Model | None = None) → HeptagonWorkshopReport

Construct Dürer’s workshop regular heptagon in the unit circle and audit its cubic residual.

In Book II, Figs. 11 & 15, Dürer sets the heptagon chord equal to the half-side of the inscribed equilateral triangle: s_7 = sqrt(3)/2 * R (Q_Durer = 3/4 for R = 1). The true regular heptagon chord quadrance Q_7 = 2*(1 - cos(2*pi/7)) is a root of the Eisenstein-irreducible cubic P_7(q) = q^3 - 7*q^2 + 14*q - 7 = 0, yielding the exact non-zero rational residual P_7(3/4) = -1/64.

geometor.durer.construct_durer_vs_euclid_pentagon(model: geometor.model.Model | None = None) → PentagonComparisonResult

Construct Dürer’s single-aperture pentagon and Euclid’s exact pentagon on base AB.

Parameters:

model (Model | None) – Optional existing geometor.model.Model (created with auto_intersect=False if omitted).

Returns:

Exact symbolic coordinates, quadrances, spreads, and regularity audit.

Return type:

PentagonComparisonResult

geometor.durer.DURER_BOOK4_SOLIDS_CATALOG: tuple[Book4SolidCatalogEntry, ...]
class geometor.durer.Book4SolidCatalogEntry

Historical & combinatorial catalog entry for Dürer’s Book IV solids (Figs. 29–43).

figure_num: int
slub_page: int
german_name_1525: str
english_name: str
family: str
vertex_config: str
vertices: int
edges: int
faces: int
face_summary: str
class geometor.durer.PolyhedralFace

Single regular polygon face in an unfolded 2D planar polyhedral net.

face_id: str
n_gon: int
vertices: tuple[tuple[sympy.Expr, sympy.Expr], ...]
class geometor.durer.PolyhedralNet

Exact 2D planar fold-out net for a Platonic or Archimedean polyhedron.

key: str
title: str
durer_figure: str
family: str
algebraic_field: str
vertices_3d: int
edges_3d: int
faces_3d: int
faces: tuple[PolyhedralFace, ...]
fold_edges: tuple[tuple[tuple[sympy.Expr, sympy.Expr], tuple[sympy.Expr, sympy.Expr]], ...]
cut_edges: tuple[tuple[tuple[sympy.Expr, sympy.Expr], tuple[sympy.Expr, sympy.Expr]], ...]
unit_edge_verified: bool
euler_characteristic: int
seam_count_verified: bool
non_overlapping_verified: bool
geometor.durer.construct_durer_polyhedral_nets() → dict[str, PolyhedralNet]

Construct all 6 exact symbolic planar polyhedral nets from Dürer’s Book IV.

Returns:

Mapping from 'tetrahedron', 'cube', 'octahedron', 'dodecahedron', 'icosahedron', and 'cuboctahedron' to verified exact planar nets.

Return type:

dict[str, PolyhedralNet]

geometor.durer.polyhedral_net_to_model(net: PolyhedralNet, model: geometor.model.Model | None = None) → geometor.model.Model

Populate a geometor.model.Model with exact vertices, face polygons, and fold/cut seams.

geometor.durer.EMBEDDED_SVG_STYLE: str = ''
geometor.durer.export_svg(svg_text: str, output_path: str | pathlib.Path) → pathlib.Path

Write svg_text to output_path creating parent directories if needed.

geometor.durer.generate_all_codex_figures(output_dir: str | pathlib.Path) → list[pathlib.Path]

Generate all 10 interactive .euclid-graphic SVG figures for docsrc/_static/figures/.

geometor.durer.render_model_svg(model: geometor.model.Model, *, width: int = 760, height: int = 560, padding: float = 48.0, math_bounds: tuple[float, float, float, float] | None = None, labeled_keys: dict[str, str] | None = None, extra_annotations: list[tuple[float, float, str]] | None = None, show_lines: bool = True, show_unlabeled_points: bool = False) → str

Serialize a Model into a crisp .euclid-graphic SVG string.

class geometor.durer.RomanLetterAResult

Exact symbolic construction of Dürer’s Roman Antiqua capital A in a 10 x 10 square.

model: geometor.model.Model
square_corners: tuple[sympy.geometry.Point, sympy.geometry.Point, sympy.geometry.Point, sympy.geometry.Point]
thick_stroke: sympy.Integer
thin_stroke: sympy.Rational
outer_serif_radius: sympy.Rational
inner_serif_radius: sympy.Rational
counter_triangle: tuple[sympy.geometry.Point, sympy.geometry.Point, sympy.geometry.Point]
crossbar_quad: tuple[sympy.geometry.Point, sympy.geometry.Point, sympy.geometry.Point, sympy.geometry.Point]
serif_centers: dict[str, sympy.geometry.Point]
class geometor.durer.RomanLetterOQResult

Exact symbolic construction of Dürer’s Roman Antiqua O or Q in a 10 x 10 square.

letter: str
model: geometor.model.Model
square_corners: tuple[sympy.geometry.Point, sympy.geometry.Point, sympy.geometry.Point, sympy.geometry.Point]
center_i: sympy.geometry.Point
shifted_center_f: sympy.geometry.Point
shifted_center_g: sympy.geometry.Point
bowl_radius: sympy.Expr
circle_f: sympy.geometry.Circle
circle_g: sympy.geometry.Circle
crossover_points: tuple[sympy.geometry.Point, sympy.geometry.Point]
tail_points: tuple[sympy.geometry.Point, ...]
class geometor.durer.TexturaMinusculesResult

Exact modular construction of Dürer’s Gothic Textura minuscules i, n, m.

model: geometor.model.Model
stem_width: sympy.Integer
stacked_square_count: int
diamond_side: sympy.Expr
glyph_polygons: dict[str, list[tuple[tuple[sympy.Expr, sympy.Expr], ...]]]
geometor.durer.construct_durer_roman_letter_A(model: geometor.model.Model | None = None) → RomanLetterAResult

Construct Dürer’s Roman capital A inside the 10 x 10 square ABCD.

Dürer labels the framing square (rechte fierung) a top-left (0, 10), b top-right (10, 10), c bottom-left (0, 0), d bottom-right (10, 0), with midlines ef (vertical) and gh (horizontal), thick stroke 1 (1/10 of 10), thin stroke 1/3, outer foot serifs of radius 10/7, and inner foot serifs of radius 1/2.

geometor.durer.construct_durer_roman_letter_O(model: geometor.model.Model | None = None) → RomanLetterOQResult

Construct Dürer’s Roman capital O inside the 10 x 10 square.

geometor.durer.construct_durer_roman_letter_Q(model: geometor.model.Model | None = None) → RomanLetterOQResult

Construct Dürer’s Roman capital Q inside the 10 x 10 square.

geometor.durer.construct_durer_textura_minuscules(model: geometor.model.Model | None = None) → TexturaMinusculesResult

Construct Dürer’s modular Textura minuscules i, n, and m from unit squares.

In Book III (p. 136), Dürer constructs i first because nearly the entire Gothic minuscule alphabet is generated combinatorially from its modular stem. For n (two stems) and m (three stems), adjacent stems touch corner-to-corner at their 45° diamond caps! Wait: look at the spacing when adjacent top diamonds touch corner-to-corner: Top diamond of stem 1 has right corner at x0 + 1/3 + sqrt(2)/2 and left corner at x0 + 1/3 - sqrt(2)/2, so corner-to-corner contact spaces consecutive stems by exact pitch sqrt(2) (leaving interior counter gap sqrt(2) - 1 ≈ 0.414 < 1, matching Dürer’s exact words: “so wirt das felt schlemer zwischen den zügen dann ein zug des pustaben preyt ist”!).

geometor.durer.__version__ = '0.1.0'