Skip to main content

Belt conveyor calculation library

Project description

Eytelwein logo

Eytelwein

Open-source belt conveyor calculation library for Python

CI Docs License Python


Eytelwein provides production-grade engineering calculations for belt conveyor systems — from steady-state resistance and drive layout to idler roll loading and horizontal curve forces. All public functions use Pint Quantity objects for full dimensional safety: units in, units out, no silent conversion errors.

Highlights

  • Dimensionally safe — every input and output carries explicit physical units
  • Dual-layer architecture — bare-math _module.py (fast, unit-free) + public module.py (Quantity-wrapped, validated)
  • Comprehensive test suite — 1 455 tests covering core and extended calculations
  • Typedpy.typed marker, compatible with mypy strict mode

Module Overview

Module Description
eytelwein.belt_conveyor_design.core Volume/mass flow, belt tensions, drive layout, belt design, tension distribution, minimum pulley diameters, resistance & power
eytelwein.belt_conveyor_design.extended Extended methods — mass inertia, design of conveyor belt, additional drive layout functions
eytelwein.idler_design Idler roll load factor calculations
eytelwein.horizontal_curves Lateral force analysis for horizontally curved belt conveyors
eytelwein.main Shared utilities — unit registry singleton, physical constants

Installation

# Clone the repository
git clone https://github.com/mdVoith/eytelwein.git
cd eytelwein

# Create the project environment
uv sync

PyPI packages and wheels are not published yet. Use a local clone (or download the repository as a ZIP) and run commands from the project root.

Documentation

Hosted documentation (GitHub Pages):

Build docs locally from repository root:

uv run sphinx-apidoc -o docs/source src/eytelwein --force --separate
uv run sphinx-build -b html docs/source docs/_build/html

Generated HTML entry page:

  • docs/_build/html/index.html

Quick Start

from eytelwein.main.units import get_unit_registry
u = get_unit_registry()

from eytelwein.belt_conveyor_design import usable_belt_width

# Calculate usable belt width for a 1200 mm belt
b = usable_belt_width(belt_width=1200 * u.mm)
print(b)  # 1050.0 millimeter

Real-World Example Script

For a more practical, end-to-end workflow, run the example script in examples/real_world_cross_section_flow.py.

It demonstrates a compact sizing pipeline with hard-coded values:

  • usable belt width from belt geometry
  • cross-section of fill from trough geometry
  • volume flow from cross-section and belt speed
  • mass flow from volume flow and bulk density
  • inverse cross-check for required usable width
python examples/real_world_cross_section_flow.py

Feature Examples

Dedicated, runnable scripts are available under examples/features/.

  • a_output_unit_minimum_tension.py Demonstrates changing output units for the same calculation (minimum belt tension in N and kN).
  • b_imperial_input_dual_output.py Uses imperial inputs and calls the same function twice to produce imperial output and SI output.
  • c_unit_errors_are_caught.py Shows dimensional unit mismatch handling (expected ValueError).
  • d_physically_invalid_inputs_are_caught.py Shows physically invalid input handling (expected ValueError).
  • e_output_precision_control.py Shows how to control rounding with precision (default, custom, and unrounded output).
  • f_round_trip_consistency.py Shows forward/inverse round-trip checks and validates numerical consistency within explicit tolerances.
  • g_constants_and_enums.py Shows using public enums (IdlerSets) and shared constants in practical calculations.

Run each from repository root:

python examples/features/a_output_unit_minimum_tension.py
python examples/features/b_imperial_input_dual_output.py
python examples/features/c_unit_errors_are_caught.py
python examples/features/d_physically_invalid_inputs_are_caught.py
python examples/features/e_output_precision_control.py
python examples/features/f_round_trip_consistency.py
python examples/features/g_constants_and_enums.py

Advanced Example (Private API, Not Recommended)

Advanced example scripts live under examples/advanced/ and are intentionally separate from the standard feature examples.

Use this path only if you explicitly accept the tradeoffs:

  • advanced
  • unstable API surface
  • no unit safety
  • no backwards-compatibility promise

h_private_functions_not_recommended.py compares public and private calls with the same intended inputs, shows that private angle inputs must be radians, and demonstrates that private helpers can skip public-layer validation.

Run from repository root:

python examples/advanced/h_private_functions_not_recommended.py

Architecture

src/eytelwein/
├── belt_conveyor_design/
│   ├── core/           # Fundamental steady-state calculations
│   │   ├── _module.py  # Pure math (float in / float out)
│   │   └── module.py   # Quantity-wrapped public API
│   ├── extended/       # Additional / derived calculations
│   ├── data/           # Lookup tables (CSV)
│   └── constants.py    # Enums & domain constants
├── idler_design/
│   └── core/           # Idler roll load factors
├── horizontal_curves/
│   └── core/           # Lateral force components
└── main/
    ├── units.py        # UnitRegistry singleton
    └── constants.py    # Physical constants (via scipy)

Mathematical Background

The calculations implement established belt conveyor engineering methodologies covering:

  • Resistance and power — main, secondary, and gradient resistances for steady-state operation
  • Belt tensions — minimum tensions from sag constraints, tension distribution across belt width
  • Drive system layout — torque, power, and speed relationships for single and multi-drive configurations
  • Volume and mass flow — cross-sectional fill geometry, reduction factors for inclined conveyors
  • Minimum pulley diameters — based on belt tension member type and load classification
  • Idler roll loading — load distribution factors for various trough configurations
  • Horizontal curves — centripetal, gravity, and tilted-idler restraining forces (conventional and improved methods)

Development

# Clone and install
git clone https://github.com/mdVoith/eytelwein.git
cd eytelwein
uv sync

# Run checks
uv run pytest               # 1455 tests
uv run ruff check src/ tests/
uv run mypy src/
uv run sphinx-apidoc -o docs/source src/eytelwein --force --separate
uv run sphinx-build -b html docs/source docs/_build/html

Contributing

See CONTRIBUTING.md for development guidelines.

License

Apache-2.0 — see LICENSE and NOTICE.

Copyright (c) Voith Group.

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

eytelwein-0.1.1.tar.gz (190.7 kB view details)

Uploaded Source

Built Distribution

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

eytelwein-0.1.1-py3-none-any.whl (91.9 kB view details)

Uploaded Python 3

File details

Details for the file eytelwein-0.1.1.tar.gz.

File metadata

  • Download URL: eytelwein-0.1.1.tar.gz
  • Upload date:
  • Size: 190.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for eytelwein-0.1.1.tar.gz
Algorithm Hash digest
SHA256 6cba76ed1f454b1003248a993aabcb1d8dd90bca6cfb8da9f7edf9fa1d5a8563
MD5 5db1e7055d7b4406defbf98f67b942df
BLAKE2b-256 2945ce327ad15193e6fa16e4ee6d9604db262d93512c7a0b0da4ebbbe3553165

See more details on using hashes here.

Provenance

The following attestation bundles were made for eytelwein-0.1.1.tar.gz:

Publisher: publish.yml on mdVoith/eytelwein

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file eytelwein-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: eytelwein-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 91.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for eytelwein-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a0d54c130e19c9cc0eddfe93dcbe2145b94416b98e50bd6b67a1c0a34f4b2b96
MD5 65bdcad0fc47731fd3b2d2cf51ff1e8f
BLAKE2b-256 0e1db5ee6db69bb2c0aabd34baff8c7fa654f236fe6faeb2e4a72e3fda4b95f9

See more details on using hashes here.

Provenance

The following attestation bundles were made for eytelwein-0.1.1-py3-none-any.whl:

Publisher: publish.yml on mdVoith/eytelwein

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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