Skip to main content

Python display library for engineering calculations - matrices, equations, symbolic math with SymPy

Project description

hekatan

Python display library for engineering calculations — equations, matrices, figures, academic papers.

PyPI version Python License: MIT Downloads

hekatan turns your Python engineering scripts into publication-quality HTML documents — with proper math notation, matrices with brackets, fraction bars, integrals, summations, design checks, and academic paper layouts. Zero dependencies. No LaTeX required.


Installation

pip install hekatan

Requires Python 3.8+. No external dependencies.

Quick Start

from hekatan import matrix, eq, var, fraction, title, text, check, show

title("Beam Design")
text("Rectangular section properties:")

var("b", 300, "mm", "beam width")
var("h", 500, "mm", "beam height")
eq("A", 300 * 500, "mm^2")

title("Stiffness Matrix", level=2)
K = [[12, 6, -12, 6],
     [6, 4, -6, 2],
     [-12, -6, 12, -6],
     [6, 2, -6, 4]]
matrix(K, "K")

title("Design Check", level=2)
fraction("M_u", "phi * b * d^2", "R_n")
check("sigma", 150, 250, "MPa")  # 150 <= 250 -> OK

show()  # Opens formatted HTML in your browser

Rich Equations

The eq_block() function renders equations with fractions, integrals, summations, and equation numbers — using Hekatan Calc notation:

from hekatan import eq_block, show

# Fractions: (numerator)/(denominator) with recursive nesting
eq_block("k = (E * A)/(L)  (1)")

# Integrals with limits
eq_block("∫_{a}^{b} f(x)*dx = F(b) - F(a)  (5.5)")

# Summation
eq_block("A = Σ_{i=1}^{N} f_i * Delta*x  (5.2)")

# Nested fractions + integrals
eq_block("I = ∫_{0}^{1} (1)/(e^{3x})*dx ≈ 0.3167  (5.13)")

# Partial derivatives as fractions
eq_block("(∂^2M_x)/(∂x^2) + (∂^2M_y)/(∂y^2) + q = 0  (1.1)")

# Multiple equations at once
eq_block(
    "sigma = (N)/(A) + (M * y)/(I_z)  (2)",
    "epsilon = (partial u)/(partial x)  (3)",
)

show()

Equation Number Syntax

Equation numbers are placed at the end with 2+ spaces before the parenthesized number:

eq_block("F = m*a  (1)")              # Simple: (1)
eq_block("D = (E*h^3)/(12)  (1.3)")   # Dotted: (1.3)
eq_block("N_x = ∫ sigma_x*dz  (1.5a)")  # With suffix: (1.5a)

Subscript & Superscript Rules

Notation Renders as Notes
x^2 Simple superscript (digits only)
x^{2n} x²ⁿ Braced superscript (any content)
N_x N with subscript x Simple subscript (one letter)
N_{xy} N with subscript xy Braced subscript (any content)
∂^2M_x ∂²Mₓ ^ takes digits, _ takes letter

Academic Paper Layout

Create publication-quality documents with paper configuration, headers, footers, author blocks, abstracts, and multi-column layouts:

from hekatan import (
    paper, header, footer, author, abstract_block,
    title, heading, text, markdown, eq_block, figure,
    columns, column, end_columns, table, show, clear,
)

clear()

# Paper config: page size, fonts, accent color
paper(
    size="A4",
    margin="20mm 18mm 25mm 18mm",
    fontsize="10pt",
    accent="#F27835",
)

# Header bar
header(left="Journal of Civil Engineering", right="Vol 70, 2018")

# Title and authors
title("Method of Incompatible Modes")
author("Ivo Kozar", "University of Rijeka, Croatia")

# Abstract with keywords
abstract_block(
    "This paper presents the method of incompatible modes...",
    keywords=["finite elements", "incompatible modes"],
    lang="english",
)

# Two-column layout (CSS multi-column flow)
columns(2, css_columns=True)
heading("1. Introduction", 2)
markdown("""
The **finite element method** is based on:
- Weak formulation
- Shape functions
- Assembly procedure
""")

# Rich equations
eq_block("u(x) = N(x) * d + M(x) * alpha  (1)")

# SVG figures with captions
figure('<svg width="400" height="200">...</svg>',
       caption="Beam element with shape functions",
       number="1", width="90%")
end_columns()

show("paper_output.html")

How It Works

Each function works in 3 modes (auto-detected):

Mode When Behavior
Hekatan Inside Hekatan Calc (WPF/CLI) Emits @@DSL commands to stdout
Standalone Regular Python script show() generates HTML, opens in browser
Console Fallback ASCII formatted output

Mode is auto-detected via HEKATAN_RENDER=1 environment variable. You can force a mode with set_mode("standalone"), set_mode("hekatan"), or set_mode("console").

API Reference

Core Math

Function Description Example
eq(name, value, unit) Equation: name = value eq("F", 25.5, "kN")
var(name, value, unit, desc) Variable with description var("b", 300, "mm", "width")
eq_block(*equations) Rich equations with fractions/integrals eq_block("k = (E*A)/(L) (1)")
formula(expr, name, unit) Math formula display formula("A_s * f_y / (0.85 * f_c)")
fraction(num, den, name) Formatted fraction fraction("M", "S", "sigma")
matrix(data, name) Matrix with brackets matrix([[1,2],[3,4]], "A")
table(data, header) Data table table([["x","y"],["1","2"]])

Calculus Operators

Function Description Example
integral(expr, var, lo, hi) Integral display integral("f(x)", "x", "0", "L")
double_integral(...) Double integral double_integral("f", "x", "0", "a", "y", "0", "b")
derivative(func, var, order) Derivative df/dx derivative("y", "x")
partial(func, var, order) Partial derivative partial("u", "x")
summation(expr, var, lo, hi) Summation operator summation("a_i", "i", "1", "n")
product_op(expr, var, lo, hi) Product operator product_op("a_i", "i", "1", "n")
sqrt(expr, name, index) Square/nth root sqrt("a^2 + b^2", "c")
limit_op(expr, var, to) Limit expression limit_op("sin(x)/x", "x", "0")

Paper Layout

Function Description Example
paper(size, margin, ...) Page configuration paper(size="A4", accent="#F27835")
header(left, right, ...) Page header bar header(left="Journal", right="Vol 1")
footer(left, right) Page footer footer(left="Page 1")
author(name, affil, email) Author block author("Dr. Smith", "MIT")
abstract_block(text, kw) Abstract + keywords abstract_block("...", keywords=[...])

Text & Content

Function Description Example
title(text, level) Heading (h1-h6) title("Results", 2)
heading(text, level) Alias for title() heading("Section", 3)
text(content) Paragraph text text("The beam is safe.")
markdown(content) Markdown text block markdown("**bold** and *italic*")
figure(content, caption, num) Figure with caption figure("img.png", "Fig 1", "1")
image(src, alt, width) Simple image image("photo.jpg", width="60%")
check(name, val, limit, unit) Design verification check("sigma", 150, 250, "MPa")
note(content, kind) Callout/note box note("Check cover", "warning")
code(content, lang) Code block code("import numpy", "python")

Layout

Function Description Example
columns(n, proportions) Start multi-column columns(2, "32:68")
column() Next column column()
end_columns() End columns end_columns()
hr() Horizontal rule hr()
page_break(left, right, ...) Page break with running header page_break(left="Title", right="15")
html_raw(content) Raw HTML html_raw("<div>...</div>")
eq_num(tag) Equation number eq_num("1.2")

Control

Function Description Example
show(filename) Generate HTML + open browser show() or show("out.html")
clear() Clear accumulated buffer clear()
set_mode(mode) Force rendering mode set_mode("console")

Features

  • Zero dependencies — pure Python, no NumPy/LaTeX/MathJax required
  • Greek letters — auto-converts alpha, sigma, phi, Delta, etc. to symbols
  • Subscripts/superscriptsA_s renders as subscript, x^2 as superscript
  • Braced notationA_{steel}, x^{2n} for multi-character sub/superscripts
  • Smart superscript^ only consumes digits (∂^2M stays correct), use ^{x} for letters
  • Word-boundary safe — Greek replacement won't corrupt Spanish/Portuguese words
  • Recursive fractions(a + (b)/(c))/(d) renders nested fraction bars
  • Integrals∫_{a}^{b} renders with proper limits above/below
  • SummationΣ_{i=1}^{N} renders with limits above/below
  • Equation numbers(1.1), (1.5a), (2.3b) all supported
  • CSS columns — flex-based (manual breaks) and CSS multi-column (auto-flow) layouts
  • Column proportionscolumns(2, "32:68") for asymmetric layouts
  • Page breaks with headers — running headers on each page
  • Print-ready@page CSS rules for PDF export via browser print
  • Design checks — pass/fail verification with color-coded output

Integration with Hekatan Calc

When used inside a Hekatan Calc .hcalc document:

# My Calculation

@{python}
from hekatan import matrix, eq, eq_block

K = [[12, 6], [6, 4]]
matrix(K, "K")
eq("det_K", 12*4 - 6*6)
eq_block("sigma = (M * y)/(I_z)  (1)")
@{end python}

The output is automatically formatted with Hekatan Calc's CSS — matrices with brackets, equations with proper serif typography, fraction bars, integral symbols, and more.

Example: FEA Slab Analysis

The examples/ directory includes a full finite element analysis of a rectangular slab using the BFS plate bending element (585 lines). It demonstrates variables, equations, matrices, tables, partial derivatives, double integrals, and design checks — all rendered as a single HTML document.

cd examples
python rectangular_slab_fea.py

License

MIT

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

hekatan-0.9.0.tar.gz (51.9 kB view details)

Uploaded Source

Built Distribution

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

hekatan-0.9.0-py3-none-any.whl (47.8 kB view details)

Uploaded Python 3

File details

Details for the file hekatan-0.9.0.tar.gz.

File metadata

  • Download URL: hekatan-0.9.0.tar.gz
  • Upload date:
  • Size: 51.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for hekatan-0.9.0.tar.gz
Algorithm Hash digest
SHA256 64f210e3c2724963d68385af25ea9d0a3659d1e7ef9f0acf0d0117ccbd4c8ed8
MD5 a48a9adaf36338fe390fa5a1ed4efc00
BLAKE2b-256 65c2628e0fc680e084448b5a2a8ef77336b24157599236ef38b8038eadf65002

See more details on using hashes here.

File details

Details for the file hekatan-0.9.0-py3-none-any.whl.

File metadata

  • Download URL: hekatan-0.9.0-py3-none-any.whl
  • Upload date:
  • Size: 47.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for hekatan-0.9.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b512333234f18c35eba14d8b2bd1d90c838fee0ce5c4c98021fa7d5859f32954
MD5 125cd4dba6c9d470a03f1d6d8f795486
BLAKE2b-256 ed39ae52ef94bb9858c28a1cf477a587f355a052b340decc6e07c3873b905f22

See more details on using hashes here.

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