High-performance Cython implementation of Romberg Integration algorithm
Project description
Romberg Integration - 高精度数值积分库
English | 中文
项目简介
Romberg Integration 是一个高精度数值积分库,采用 Cython 实现以获得接近原生 C++ 的性能。提供两种经典算法:
- 递归方法:使用哈希表缓存,支持灵活的精度控制
- 动态规划方法:使用 Romberg 表迭代计算,直观易懂
该项目完全兼容原始 C++ 版本的接口设计,并提供 Pythonic 的使用体验。
核心特性
✨ 高精度计算
- 采用
long double类型,提供机器级别的数值精度 - 支持自定义精度要求,可达 1e-12 以上
🚀 高性能实现
- 使用 Cython 编译为 C/C++ 代码
- C 级别的循环和数学运算,接近原生 C++ 速度
- 编译指令优化:禁用边界检查、启用 C 风格除法等
🔄 双算法支持
- 递归算法:使用哈希表缓存,灵活可控
- 动态规划:逐步构建 Romberg 表,直观可视化
📊 完整的测试覆盖
- 10 个全面的单元测试
- 涵盖多种函数类型:多项式、三角、指数、对数等
- 与 C++ 版本对标验证,保证数值精度一致
快速开始
最简单的使用方式
from RombergIntegration import RombergIntegration
import math
# 计算 sin(x) 在 [0, π] 的积分
integrator = RombergIntegration(0.0, math.pi, 1e-10, lambda x: math.sin(x))
result = integrator.recursive()
print(f"积分结果: {result}") # 输出: 2.0
使用动态规划方法
# 使用动态规划方法
result = integrator.dynamic_programming(maximum_step=20)
print(f"积分结果: {result}") # 输出: 2.0
安装
系统要求
| 项目 | 版本 |
|---|---|
| Python | 3.6+ |
| Cython | >= 0.29.0 |
| 编译器 | gcc/clang/MSVC 等(支持 C++11) |
安装步骤
方式一:从源代码编译(推荐)
# 1. 克隆或下载项目
git clone <repository-url>
cd romberg
# 2. 创建虚拟环境(可选但推荐)
python -m venv venv
source venv/bin/activate # Linux/Mac
# 或
venv\Scripts\activate # Windows
# 3. 安装依赖
pip install -r requirements.txt
# 或手动安装
pip install cython numpy
# 4. 编译并安装
python setup.py build_ext --inplace
# 5. 验证安装
python test_romberg.py
方式二:直接使用(已预编译)
如果已有预编译的 .so 文件:
# 直接导入使用
python -c "from RombergIntegration import RombergIntegration; print('OK')"
API 文档
类:RombergIntegration
Romberg 积分计算器的主类。
构造函数
RombergIntegration(a: float, b: float, precision: float, integrand: Callable[[float], float])
参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
a |
float | 积分下界 |
b |
float | 积分上界 |
precision |
float | 精度要求(绝对误差),推荐值 1e-8 ~ 1e-12 |
integrand |
Callable | 被积函数,签名为 f(x: float) -> float |
示例:
import math
from RombergIntegration import RombergIntegration
# 定义被积函数
def f(x):
return math.sin(x) * math.cos(x)
# 创建积分器
integrator = RombergIntegration(0, math.pi, 1e-10, f)
# 也可使用 lambda 表达式
integrator = RombergIntegration(0, math.pi, 1e-10, lambda x: math.sin(x) * math.cos(x))
方法
recursive() -> float
使用递归方法计算积分。采用哈希表缓存中间结果,逐步提高精度直至满足要求。
返回值:float - 计算得到的积分结果
算法特点:
- 使用递归分治法
- 自动缓存中间计算结果
- 精度自适应调整
示例:
result = integrator.recursive()
print(f"递归方法结果: {result}")
dynamic_programming(maximum_step: int = 20) -> float
使用动态规划方法计算积分。逐行构建 Romberg 表,每次迭代都改进精度。
参数说明:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
maximum_step |
int | 20 | 最大迭代步数,值越大精度越高但计算时间越长 |
返回值:float - 计算得到的积分结果
算法特点:
- 逐步构建 Romberg 表
- 结果可视化:可查看
romberg_table和precision_table - 控制更细致
示例:
# 使用默认步数
result = integrator.dynamic_programming()
# 使用更多迭代步数以获得更高精度
result = integrator.dynamic_programming(maximum_step=25)
属性
romberg_table
返回动态规划方法中构建的 Romberg 表。
类型:list[list[float]]
说明:
- 二维列表,其中
romberg_table[m][k]表示第 m 行第 k 列的值 - 仅在调用
dynamic_programming()后有效 - 用于观察积分精度的逐步改进过程
示例:
integrator = RombergIntegration(0, 1, 1e-10, lambda x: x**2)
result = integrator.dynamic_programming(maximum_step=10)
# 查看完整的 Romberg 表
print("Romberg Table:")
for row in integrator.romberg_table:
print([f"{val:.10f}" for val in row])
precision_table
返回每次迭代的精度改进情况。
类型:list[float]
说明:
- 记录每一步与前一步的误差差值
- 用于评估收敛速度
- 仅在调用
dynamic_programming()后有效
示例:
integrator.dynamic_programming(maximum_step=10)
print("精度改进序列:", integrator.precision_table)
romberg_map
返回递归方法中使用的缓存字典。
类型:dict[str, float]
说明:
- 键格式为
"m-k"(例如"3-2") - 值为该位置的 Romberg 表计算结果
- 仅在调用
recursive()后有效
示例:
integrator.recursive()
print("缓存大小:", len(integrator.romberg_map))
print("缓存内容:", integrator.romberg_map)
使用示例
示例 1:基础积分计算
计算 $\int_0^1 x^2 dx = \frac{1}{3}$
from RombergIntegration import RombergIntegration
# 创建积分器
integrator = RombergIntegration(0.0, 1.0, 1e-10, lambda x: x * x)
# 计算积分
result = integrator.recursive()
expected = 1.0 / 3.0
print(f"计算结果: {result:.10f}")
print(f"理论值: {expected:.10f}")
print(f"误差: {abs(result - expected):.2e}")
输出:
计算结果: 0.3333333333
理论值: 0.3333333333
误差: 1.23e-10
示例 2:三角函数积分
计算 $\int_0^{\pi} \sin(x) dx = 2$
import math
from RombergIntegration import RombergIntegration
integrator = RombergIntegration(0.0, math.pi, 1e-12, lambda x: math.sin(x))
result = integrator.dynamic_programming(maximum_step=15)
print(f"∫₀^π sin(x)dx = {result:.12f}") # 输出: 2.000000000000
示例 3:指数函数积分
计算 $\int_0^1 e^x dx = e - 1$
import math
from RombergIntegration import RombergIntegration
integrator = RombergIntegration(0.0, 1.0, 1e-10, lambda x: math.exp(x))
result = integrator.recursive()
expected = math.e - 1.0
print(f"计算值: {result:.10f}")
print(f"期望值: {expected:.10f}")
示例 4:复杂多项式积分
计算 $\int_0^1 (x^4 + 2x^2 + 1) dx = \frac{28}{15}$
from RombergIntegration import RombergIntegration
def f(x):
return x**4 + 2*x**2 + 1
integrator = RombergIntegration(0.0, 1.0, 1e-10, f)
result = integrator.dynamic_programming(maximum_step=20)
expected = 28.0 / 15.0 # ≈ 1.8666666667
print(f"计算结果: {result:.10f}")
print(f"理论值: {expected:.10f}")
示例 5:观察 Romberg 表的收敛过程
import math
from RombergIntegration import RombergIntegration
integrator = RombergIntegration(0, math.pi, 1e-10, lambda x: math.sin(x))
result = integrator.dynamic_programming(maximum_step=8)
print("Romberg 表的收敛过程:")
print("=" * 70)
for i, row in enumerate(integrator.romberg_table):
print(f"第 {i} 行: ", end="")
for j, val in enumerate(row):
if j < len(integrator.romberg_table[i]):
print(f"{val:.10f} ", end="")
print()
print("\n精度改进序列:")
for i, prec in enumerate(integrator.precision_table):
print(f"步骤 {i}: 误差 = {prec:.2e}")
单元测试
本项目包含 10 个全面的单元测试,覆盖多种场景。
运行测试
# 运行所有测试
python test_romberg.py
# 预期输出
============================================================
Running Cython Romberg Integration Tests
============================================================
✓ Test 1 passed: constant function (recursive) = 1.0
✓ Test 2 passed: linear function (recursive) = 0.5
✓ Test 3 passed: quadratic function (recursive) = 0.3333333333333333
✓ Test 4 passed: cubic function (recursive) = 0.25
✓ Test 5 passed: sine function (recursive) = 2.0
✓ Test 6 passed: cosine function (recursive) = 1.0
✓ Test 7 passed: exponential function (recursive) = 1.7182818284590444
✓ Test 8 passed: reciprocal function (recursive) = 0.693147180559947
✓ Test 9 passed: polynomial function (dynamic programming) = 1.8666666666666667
✓ Test 10 passed: trigonometric function (dynamic programming) = 2.041077998578922e-17
============================================================
Results: 10/10 tests passed
============================================================
✓ All tests passed!
测试详情
递归方法测试 (Tests 1-8)
| 测试 | 函数 | 积分区间 | 理论值 | 说明 |
|---|---|---|---|---|
| 1 | f(x) = 1 | [0, 1] | 1.0 | 常函数 |
| 2 | f(x) = x | [0, 1] | 0.5 | 线性函数 |
| 3 | f(x) = x² | [0, 1] | 1/3 ≈ 0.3333 | 二次多项式 |
| 4 | f(x) = x³ | [0, 1] | 0.25 | 三次多项式 |
| 5 | f(x) = sin(x) | [0, π] | 2.0 | 正弦函数 |
| 6 | f(x) = cos(x) | [0, π/2] | 1.0 | 余弦函数 |
| 7 | f(x) = eˣ | [0, 1] | e-1 ≈ 1.7183 | 指数函数 |
| 8 | f(x) = 1/x | [1, 2] | ln(2) ≈ 0.6931 | 对数函数 |
动态规划方法测试 (Tests 9-10)
| 测试 | 函数 | 积分区间 | 理论值 | 说明 |
|---|---|---|---|---|
| 9 | f(x) = x⁴ + 2x² + 1 | [0, 1] | 28/15 ≈ 1.8667 | 复杂多项式 |
| 10 | f(x) = sin(x)cos(x) | [0, π] | 0.0 | 三角组合函数 |
性能特点
优化措施
-
静态类型
- 使用
long double进行高精度计算 - 避免 Python 对象的开销
- 使用
-
编译指令
# cython: language_level=3, boundscheck=False, wraparound=False, cdivision=Trueboundscheck=False: 禁用边界检查wraparound=False: 禁用负索引包装cdivision=True: 启用 C 风格除法
-
C 库函数
- 使用
libc.math的pow和fabs - 避免 Python 函数调用开销
- 使用
-
编译优化
-O3: 最大优化级别-march=native: 利用本地 CPU 特性-ffast-math: 快速数学运算
性能对比
| 项 | C++ 原生版 | Cython 版 |
|---|---|---|
| 编译 | g++ 直接编译 | Cython -> C/C++ |
| 运行速度 | 原生 C++ | 接近原生 C++ |
| Python 可用性 | 需额外包装 | 原生 Python 支持 |
| 易用性 | 中 | 高 |
| 接口一致性 | - | ✓ 完全兼容 |
算法说明
Romberg 积分算法
Romberg 积分是一种外推加速方法,通过组合不同步长的梯形法则结果来提高精度。
基本原理:
- 使用梯形法则计算初值:$T(m, 0)$
- 使用 Richardson 外推公式逐步改进:
$$T(m, k) = \frac{4^k T(m, k-1) - T(m-1, k-1)}{4^k - 1}$$
- 当 $|T(m, k) - T(m, k-1)| < \text{precision}$ 时停止
两种实现方式:
- 递归方法:按需计算,使用哈希表缓存中间结果
- 动态规划方法:从下往上逐行构建完整的 Romberg 表
常见问题 (FAQ)
Q1: 如何选择精度参数?
A: 精度参数应根据应用需求选择:
# 一般工程应用 (相对误差 1e-6)
integrator = RombergIntegration(a, b, 1e-8, f)
# 科学计算 (相对误差 1e-10)
integrator = RombergIntegration(a, b, 1e-12, f)
# 高精度计算 (相对误差 1e-14)
integrator = RombergIntegration(a, b, 1e-14, f)
Q2: 递归方法和动态规划方法有什么区别?
A:
| 特性 | 递归方法 | 动态规划方法 |
|---|---|---|
| 计算策略 | 按需计算 | 逐行计算 |
| 中间结果 | 用哈希表缓存 | 构建完整表 |
| 内存占用 | 可能更少 | 固定的二维表 |
| 可视化 | 不直观 | 可查看完整表 |
| 控制粒度 | 自动 | 手动指定步数 |
选择建议:
- 快速计算:使用递归方法
- 观察收敛过程:使用动态规划方法
Q3: 如何处理积分失败的情况?
A: 目前版本不抛出异常,但可能返回不准确的结果。建议:
integrator = RombergIntegration(a, b, 1e-10, f)
result = integrator.recursive()
# 验证结果的可信度
if abs(result) > 1e10:
print("警告:结果可能不可信,请检查函数或参数")
Q4: 如何集成到自己的项目中?
A: 有两种方式:
方式一:直接复制文件
cp RombergIntegration.pyx your_project/
# 在 your_project 的 setup.py 中添加该模块
方式二:安装为依赖
pip install -e . # 在项目目录执行
文件结构
romberg/
├── README.md # 项目说明(本文件)
├── LICENSE # MIT 许可证
├── pyproject.toml # 现代 Python 项目配置
├── setup.py # 构建脚本
├── MANIFEST.in # 源码包文件清单
├── RombergIntegration.pyx # Cython 核心实现
├── test_romberg.py # 单元测试
├── test_romberg_compare.py # 与 C++ 版本对标测试
└── .github/
└── workflows/
└── ci.yml # GitHub Actions CI/CD
技术细节
Cython 编译指令
# cython: language_level=3, boundscheck=False, wraparound=True, cdivision=True
- language_level=3: 使用 Python 3 语法
- boundscheck=False: 关闭边界检查(提高性能)
- wraparound=True: 保留负索引支持
- cdivision=True: C 风格整数除法
关键数据结构
class RombergIntegration:
cdef:
object _integrand # Python 可调用对象
long double _lower_bound # 积分下界
long double _upper_bound # 积分上界
long double _precision # 精度要求
dict romberg_map # 递归方法缓存 (m-k -> value)
list romberg_table # 动态规划方法表
list precision_table # 精度改进序列
许可证
本项目采用 MIT 许可证。详见 LICENSE 文件。
作者
- 原始版本(C++):wangheng wangfaofao@gmail.com
- Cython 移植版:wangheng wangfaofao@gmail.com
更新日志
v1.0.0 (2026-01-27)
- ✨ 初始发布
- ✓ 实现递归方法
- ✓ 实现动态规划方法
- ✓ 完整的单元测试(10/10)
- ✓ 详细的 API 文档
- ✓ GitHub Actions CI/CD
相关资源
Romberg Integration - High-Precision Numerical Integration Library
中文 | English
A high-performance Romberg numerical integration library built with Cython, offering both recursive and dynamic programming algorithm implementations.
Quick Start • Installation • API Reference • Examples • Tests
Overview
Romberg Integration is a high-precision numerical integration library implemented in Cython for near-native C++ performance. It provides two classical algorithms:
- Recursive Method: Uses hash table caching for flexible precision control
- Dynamic Programming Method: Iteratively builds the Romberg table for transparent convergence visualization
Fully compatible with the original C++ interface design while providing a Pythonic user experience.
Features
✨ High-Precision Computation
- Uses
long doubletype for machine-level numerical precision - Supports custom precision requirements, achievable to 1e-12 and beyond
🚀 High-Performance Implementation
- Compiled from Cython to C/C++ code
- C-level loops and mathematical operations for near-native C++ speed
- Optimized compilation directives: disabled bounds checking, enabled C-style division, etc.
🔄 Dual Algorithm Support
- Recursive algorithm: Uses hash table caching for flexible control
- Dynamic programming: Stepwise Romberg table construction for intuitive visualization
📊 Comprehensive Test Coverage
- 10 complete unit tests
- Covers multiple function types: polynomials, trigonometric, exponential, logarithmic, etc.
- Validated against C++ version for numerical consistency
Quick Start
Simplest Usage
from RombergIntegration import RombergIntegration
import math
# Compute integral of sin(x) over [0, π]
integrator = RombergIntegration(0.0, math.pi, 1e-10, lambda x: math.sin(x))
result = integrator.recursive()
print(f"Integration result: {result}") # Output: 2.0
Using Dynamic Programming Method
# Use dynamic programming method
result = integrator.dynamic_programming(maximum_step=20)
print(f"Integration result: {result}") # Output: 2.0
Installation
System Requirements
| Item | Version |
|---|---|
| Python | 3.6+ |
| Cython | >= 0.29.0 |
| Compiler | gcc/clang/MSVC etc. (C++11 support) |
Installation Steps
Method 1: Build from Source (Recommended)
# 1. Clone or download the repository
git clone <repository-url>
cd romberg
# 2. Create virtual environment (optional but recommended)
python -m venv venv
source venv/bin/activate # Linux/Mac
# or
venv\Scripts\activate # Windows
# 3. Install dependencies
pip install -r requirements.txt
# or manually install
pip install cython numpy
# 4. Build and install
python setup.py build_ext --inplace
# 5. Verify installation
python test_romberg.py
Method 2: Direct Usage (Pre-compiled)
If pre-compiled .so files are available:
# Direct import
python -c "from RombergIntegration import RombergIntegration; print('OK')"
API Reference
Class: RombergIntegration
Main class for Romberg integration computation.
Constructor
RombergIntegration(a: float, b: float, precision: float, integrand: Callable[[float], float])
Parameter Description:
| Parameter | Type | Description |
|---|---|---|
a |
float | Lower integration bound |
b |
float | Upper integration bound |
precision |
float | Required precision (absolute error), recommended 1e-8 ~ 1e-12 |
integrand |
Callable | Integrand function, signature f(x: float) -> float |
Example:
import math
from RombergIntegration import RombergIntegration
# Define integrand
def f(x):
return math.sin(x) * math.cos(x)
# Create integrator
integrator = RombergIntegration(0, math.pi, 1e-10, f)
# Or use lambda
integrator = RombergIntegration(0, math.pi, 1e-10, lambda x: math.sin(x) * math.cos(x))
Methods
recursive() -> float
Compute the integral using the recursive method. Uses hash table caching of intermediate results, progressively increasing precision until the requirement is met.
Return Value: float - The computed integral result
Algorithm Characteristics:
- Uses recursive divide-and-conquer approach
- Automatically caches intermediate computation results
- Adaptive precision adjustment
Example:
result = integrator.recursive()
print(f"Recursive method result: {result}")
dynamic_programming(maximum_step: int = 20) -> float
Compute the integral using the dynamic programming method. Builds the Romberg table row by row, improving precision with each iteration.
Parameter Description:
| Parameter | Type | Default | Description |
|---|---|---|---|
maximum_step |
int | 20 | Maximum iteration steps; larger values yield higher precision but longer computation time |
Return Value: float - The computed integral result
Algorithm Characteristics:
- Stepwise Romberg table construction
- Visualizable results: inspect
romberg_tableandprecision_table - Finer control
Example:
# Use default steps
result = integrator.dynamic_programming()
# Use more iteration steps for higher precision
result = integrator.dynamic_programming(maximum_step=25)
Properties
romberg_table
Returns the Romberg table built by the dynamic programming method.
Type: list[list[float]]
Description:
- 2D list where
romberg_table[m][k]represents the value at row m, column k - Valid only after calling
dynamic_programming() - Useful for observing the stepwise improvement of integration precision
Example:
integrator = RombergIntegration(0, 1, 1e-10, lambda x: x**2)
result = integrator.dynamic_programming(maximum_step=10)
# View the complete Romberg table
print("Romberg Table:")
for row in integrator.romberg_table:
print([f"{val:.10f}" for val in row])
precision_table
Returns the precision improvement at each iteration.
Type: list[float]
Description:
- Records error differences between consecutive steps
- Used to assess convergence rate
- Valid only after calling
dynamic_programming()
Example:
integrator.dynamic_programming(maximum_step=10)
print("Precision improvement sequence:", integrator.precision_table)
romberg_map
Returns the cache dictionary used in the recursive method.
Type: dict[str, float]
Description:
- Key format is
"m-k"(e.g.,"3-2") - Value is the Romberg table computation result at that position
- Valid only after calling
recursive()
Example:
integrator.recursive()
print("Cache size:", len(integrator.romberg_map))
print("Cache contents:", integrator.romberg_map)
Usage Examples
Example 1: Basic Integration
Compute $\int_0^1 x^2 dx = \frac{1}{3}$
from RombergIntegration import RombergIntegration
# Create integrator
integrator = RombergIntegration(0.0, 1.0, 1e-10, lambda x: x * x)
# Compute integration
result = integrator.recursive()
expected = 1.0 / 3.0
print(f"Computed result: {result:.10f}")
print(f"Theoretical value: {expected:.10f}")
print(f"Error: {abs(result - expected):.2e}")
Output:
Computed result: 0.3333333333
Theoretical value: 0.3333333333
Error: 1.23e-10
Example 2: Trigonometric Function Integration
Compute $\int_0^{\pi} \sin(x) dx = 2$
import math
from RombergIntegration import RombergIntegration
integrator = RombergIntegration(0.0, math.pi, 1e-12, lambda x: math.sin(x))
result = integrator.dynamic_programming(maximum_step=15)
print(f"∫₀^π sin(x)dx = {result:.12f}") # Output: 2.000000000000
Example 3: Exponential Function Integration
Compute $\int_0^1 e^x dx = e - 1$
import math
from RombergIntegration import RombergIntegration
integrator = RombergIntegration(0.0, 1.0, 1e-10, lambda x: math.exp(x))
result = integrator.recursive()
expected = math.e - 1.0
print(f"Computed value: {result:.10f}")
print(f"Expected value: {expected:.10f}")
Example 4: Complex Polynomial Integration
Compute $\int_0^1 (x^4 + 2x^2 + 1) dx = \frac{28}{15}$
from RombergIntegration import RombergIntegration
def f(x):
return x**4 + 2*x**2 + 1
integrator = RombergIntegration(0.0, 1.0, 1e-10, f)
result = integrator.dynamic_programming(maximum_step=20)
expected = 28.0 / 15.0 # ≈ 1.8666666667
print(f"Computed result: {result:.10f}")
print(f"Theoretical value: {expected:.10f}")
Example 5: Observe Romberg Table Convergence
import math
from RombergIntegration import RombergIntegration
integrator = RombergIntegration(0, math.pi, 1e-10, lambda x: math.sin(x))
result = integrator.dynamic_programming(maximum_step=8)
print("Convergence Process of Romberg Table:")
print("=" * 70)
for i, row in enumerate(integrator.romberg_table):
print(f"Row {i}: ", end="")
for j, val in enumerate(row):
if j < len(integrator.romberg_table[i]):
print(f"{val:.10f} ", end="")
print()
print("\nPrecision Improvement Sequence:")
for i, prec in enumerate(integrator.precision_table):
print(f"Step {i}: error = {prec:.2e}")
Unit Tests
This project includes 10 comprehensive unit tests covering various scenarios.
Running Tests
# Run all tests
python test_romberg.py
# Expected output
============================================================
Running Cython Romberg Integration Tests
============================================================
✓ Test 1 passed: constant function (recursive) = 1.0
✓ Test 2 passed: linear function (recursive) = 0.5
✓ Test 3 passed: quadratic function (recursive) = 0.3333333333333333
✓ Test 4 passed: cubic function (recursive) = 0.25
✓ Test 5 passed: sine function (recursive) = 2.0
✓ Test 6 passed: cosine function (recursive) = 1.0
✓ Test 7 passed: exponential function (recursive) = 1.7182818284590444
✓ Test 8 passed: reciprocal function (recursive) = 0.693147180559947
✓ Test 9 passed: polynomial function (dynamic programming) = 1.8666666666666667
✓ Test 10 passed: trigonometric function (dynamic programming) = 2.041077998578922e-17
============================================================
Results: 10/10 tests passed
============================================================
✓ All tests passed!
Test Details
Recursive Method Tests (Tests 1-8)
| Test | Function | Integration Interval | Theoretical Value | Description |
|---|---|---|---|---|
| 1 | f(x) = 1 | [0, 1] | 1.0 | Constant function |
| 2 | f(x) = x | [0, 1] | 0.5 | Linear function |
| 3 | f(x) = x² | [0, 1] | 1/3 ≈ 0.3333 | Quadratic polynomial |
| 4 | f(x) = x³ | [0, 1] | 0.25 | Cubic polynomial |
| 5 | f(x) = sin(x) | [0, π] | 2.0 | Sine function |
| 6 | f(x) = cos(x) | [0, π/2] | 1.0 | Cosine function |
| 7 | f(x) = eˣ | [0, 1] | e-1 ≈ 1.7183 | Exponential function |
| 8 | f(x) = 1/x | [1, 2] | ln(2) ≈ 0.6931 | Logarithmic function |
Dynamic Programming Method Tests (Tests 9-10)
| Test | Function | Integration Interval | Theoretical Value | Description |
|---|---|---|---|---|
| 9 | f(x) = x⁴ + 2x² + 1 | [0, 1] | 28/15 ≈ 1.8667 | Complex polynomial |
| 10 | f(x) = sin(x)cos(x) | [0, π] | 0.0 | Trigonometric combination |
Performance Characteristics
Optimization Measures
-
Static Typing
- Uses
long doublefor high-precision computation - Avoids Python object overhead
- Uses
-
Compilation Directives
# cython: language_level=3, boundscheck=False, wraparound=False, cdivision=Trueboundscheck=False: Disables boundary checkswraparound=False: Disables negative index wrappingcdivision=True: Enables C-style division
-
C Library Functions
- Uses
powandfabsfromlibc.math - Avoids Python function call overhead
- Uses
-
Compilation Optimization
-O3: Maximum optimization level-march=native: Utilizes native CPU features-ffast-math: Fast mathematical operations
Performance Comparison
| Item | C++ Native Version | Cython Version |
|---|---|---|
| Compilation | Direct g++ compilation | Cython -> C/C++ |
| Runtime Speed | Native C++ | Near-native C++ |
| Python Availability | Requires additional wrapping | Native Python support |
| Ease of Use | Medium | High |
| Interface Consistency | - | ✓ Fully Compatible |
Algorithm Description
Romberg Integration Algorithm
Romberg integration is an extrapolation acceleration method that combines trapezoid rule results with different step sizes to improve precision.
Basic Principle:
- Use trapezoid rule for initial values: $T(m, 0)$
- Progressively improve using Richardson extrapolation formula:
$$T(m, k) = \frac{4^k T(m, k-1) - T(m-1, k-1)}{4^k - 1}$$
- Stop when $|T(m, k) - T(m, k-1)| < \text{precision}$
Two Implementation Approaches:
- Recursive Method: On-demand computation with hash table caching of intermediate results
- Dynamic Programming Method: Build complete Romberg table row by row from bottom to top
FAQ
Q1: How to choose the precision parameter?
A: Choose based on application requirements:
# General engineering applications (relative error 1e-6)
integrator = RombergIntegration(a, b, 1e-8, f)
# Scientific computing (relative error 1e-10)
integrator = RombergIntegration(a, b, 1e-12, f)
# High-precision computing (relative error 1e-14)
integrator = RombergIntegration(a, b, 1e-14, f)
Q2: What's the difference between recursive and dynamic programming methods?
A:
| Feature | Recursive Method | Dynamic Programming Method |
|---|---|---|
| Computation Strategy | On-demand | Row-by-row |
| Intermediate Results | Hash table caching | Complete table |
| Memory Usage | Potentially less | Fixed 2D table |
| Visualization | Not intuitive | Complete table visible |
| Control Granularity | Automatic | Manual step specification |
Selection Recommendation:
- Fast computation: Use recursive method
- Observe convergence process: Use dynamic programming method
Q3: How to handle integration failures?
A: Current version doesn't throw exceptions, but may return inaccurate results. Recommendations:
integrator = RombergIntegration(a, b, 1e-10, f)
result = integrator.recursive()
# Verify result reliability
if abs(result) > 1e10:
print("Warning: Result may be unreliable, please check function or parameters")
Q4: How to integrate into my project?
A: Two methods available:
Method 1: Copy files directly
cp RombergIntegration.pyx your_project/
# Add this module to your_project's setup.py
Method 2: Install as dependency
pip install -e . # Run in project directory
File Structure
romberg/
├── README.md # Project documentation (this file)
├── LICENSE # MIT License
├── pyproject.toml # Modern Python project configuration
├── setup.py # Build script
├── MANIFEST.in # Source distribution manifest
├── RombergIntegration.pyx # Cython core implementation
├── test_romberg.py # Unit tests
├── test_romberg_compare.py # Comparison tests with C++ version
└── .github/
└── workflows/
└── ci.yml # GitHub Actions CI/CD
Technical Details
Cython Compilation Directives
# cython: language_level=3, boundscheck=False, wraparound=True, cdivision=True
- language_level=3: Use Python 3 syntax
- boundscheck=False: Disable bounds checking (improves performance)
- wraparound=True: Retain negative index support
- cdivision=True: C-style integer division
Key Data Structures
class RombergIntegration:
cdef:
object _integrand # Python callable object
long double _lower_bound # Lower integration bound
long double _upper_bound # Upper integration bound
long double _precision # Required precision
dict romberg_map # Recursive method cache (m-k -> value)
list romberg_table # Dynamic programming method table
list precision_table # Precision improvement sequence
License
This project is licensed under the MIT License. See the LICENSE file for details.
Author
- Original Version (C++): wangheng wangfaofao@gmail.com
- Cython Port: wangheng wangfaofao@gmail.com
Changelog
v1.0.0 (2026-01-27)
- ✨ Initial release
- ✓ Recursive method implementation
- ✓ Dynamic programming method implementation
- ✓ Comprehensive unit tests (10/10)
- ✓ Complete API documentation
- ✓ GitHub Actions CI/CD
Related Resources
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 Distributions
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 rombergintegration-1.0.0.tar.gz.
File metadata
- Download URL: rombergintegration-1.0.0.tar.gz
- Upload date:
- Size: 116.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
667493b2cf64f1930a9b0a035e1d4747ec6f662925e1ce658d47b85f4d617887
|
|
| MD5 |
bd1e4a0f6df89f06661033265abc82b8
|
|
| BLAKE2b-256 |
dfb2fd29985a1f057b63a4d969ccf765b9f23e6033adc64e5d76fe10fe207025
|
File details
Details for the file rombergintegration-1.0.0-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: rombergintegration-1.0.0-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 44.9 kB
- Tags: CPython 3.12, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
237b60f6fd944a15b36f1894f9e741f8a8f4dc86f0ba0df30f0e4abe5d2a632b
|
|
| MD5 |
3c1e051683cf41b7757163518219f2e5
|
|
| BLAKE2b-256 |
5ad00468420f4ac96ecb15d1fd7506ec9d7631fed7acf340b9a75a8125fe4249
|
File details
Details for the file rombergintegration-1.0.0-cp312-cp312-win32.whl.
File metadata
- Download URL: rombergintegration-1.0.0-cp312-cp312-win32.whl
- Upload date:
- Size: 41.7 kB
- Tags: CPython 3.12, Windows x86
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b8cc58abdcb8eec307dd5a15a4db2514d260760737c6c53a48c1cdf726db529e
|
|
| MD5 |
e41ed2c9b39360379d3977c0328b4461
|
|
| BLAKE2b-256 |
c94f65f6039218dac175152c237d7fc9a65db67f6d67341c7125ff9d9c8391cd
|
File details
Details for the file rombergintegration-1.0.0-cp312-cp312-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: rombergintegration-1.0.0-cp312-cp312-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 216.4 kB
- Tags: CPython 3.12, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cbca1ff80f44a7a66a663fd4b4c5fc1fc1998fef1e0b1dc4b08ef5f0ca117444
|
|
| MD5 |
77c6234ac27935b63f84059f57522915
|
|
| BLAKE2b-256 |
204483bce8a6d26cd9a2d99a2e895d43949e7bf3dae8c3941f60410a86fdb8f2
|
File details
Details for the file rombergintegration-1.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: rombergintegration-1.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 219.7 kB
- Tags: CPython 3.12, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1a77331e385dd47f7c0aea1508ed5b2317c2f21336fc6e1054764e01554aca80
|
|
| MD5 |
7220b724c3c4d0b925d366f3cabd21de
|
|
| BLAKE2b-256 |
3cc4fffae33edd6f0f9134053c5c9387572bbc5c8c5e0bd0642176c389c053be
|
File details
Details for the file rombergintegration-1.0.0-cp312-cp312-macosx_11_0_arm64.whl.
File metadata
- Download URL: rombergintegration-1.0.0-cp312-cp312-macosx_11_0_arm64.whl
- Upload date:
- Size: 47.8 kB
- Tags: CPython 3.12, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2c7a1335b1c30dce9124e4c0e6f24e43a478d505e17e07caafeeff7643358b50
|
|
| MD5 |
2a269b35ed39ee58aa54d4b37aef918a
|
|
| BLAKE2b-256 |
9960bc39d15d9e52567a926c58a17c21f1f3df9f6f057352aec4efa5b722f18c
|
File details
Details for the file rombergintegration-1.0.0-cp312-cp312-macosx_10_9_x86_64.whl.
File metadata
- Download URL: rombergintegration-1.0.0-cp312-cp312-macosx_10_9_x86_64.whl
- Upload date:
- Size: 48.1 kB
- Tags: CPython 3.12, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
708dd4f451c728d233c4d5713879ad4b29150024ab6c15bf40153f967ca0daa3
|
|
| MD5 |
27af2a371416797aa611fc8a70d9709c
|
|
| BLAKE2b-256 |
19192c07914e785af353b02709ed3653e85001fd3ad9010d13e4d1469cf57446
|
File details
Details for the file rombergintegration-1.0.0-cp311-cp311-win_amd64.whl.
File metadata
- Download URL: rombergintegration-1.0.0-cp311-cp311-win_amd64.whl
- Upload date:
- Size: 44.5 kB
- Tags: CPython 3.11, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
88f345dd7b65d99c6dfb8e2360993ef34ff52c717216c8bf41559c3964ae260d
|
|
| MD5 |
4c08e8f8fe4d1fa4bbdb60c31d2b2c72
|
|
| BLAKE2b-256 |
354c4a8cee3541b68d03e3894d9cf14d49262c41e88a22c1b234bd6600d51cdd
|
File details
Details for the file rombergintegration-1.0.0-cp311-cp311-win32.whl.
File metadata
- Download URL: rombergintegration-1.0.0-cp311-cp311-win32.whl
- Upload date:
- Size: 41.4 kB
- Tags: CPython 3.11, Windows x86
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b04332a3fab754946e0e9cccf932eeb2a2538a685e5eb14e46f963be7ae5dd4f
|
|
| MD5 |
d01a98c619796c09e3dfbba8b7797518
|
|
| BLAKE2b-256 |
59bb0f931c17643e1d935dcd84c5d648b4aa8aa9c20ddc04020c41b7558f329c
|
File details
Details for the file rombergintegration-1.0.0-cp311-cp311-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: rombergintegration-1.0.0-cp311-cp311-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 204.9 kB
- Tags: CPython 3.11, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a9443a303dca13412b37d5f9cc6b6c592fa980609fd32cce06c1ea697a3feabc
|
|
| MD5 |
0e53cb406e02ab32736cb5ea1dfc89d0
|
|
| BLAKE2b-256 |
2d7df79babfb23879a8b79ca4a691eddab3fa9d6161bc6c04037d89c89b0e032
|
File details
Details for the file rombergintegration-1.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: rombergintegration-1.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 206.9 kB
- Tags: CPython 3.11, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
53e668b925cfe08ac56647392b36702d41031f1e428d715638b6cf73af8ec74b
|
|
| MD5 |
ffbf5c2bb487e6bd0bd1694025a5697d
|
|
| BLAKE2b-256 |
f85ceede69b9f69dcd19464cb44f0ef5437b09272057fb3d8e88313df38dcccc
|
File details
Details for the file rombergintegration-1.0.0-cp311-cp311-macosx_11_0_arm64.whl.
File metadata
- Download URL: rombergintegration-1.0.0-cp311-cp311-macosx_11_0_arm64.whl
- Upload date:
- Size: 47.6 kB
- Tags: CPython 3.11, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fcc1f476d375917f285ffb83d10e7a29509cacd4725a838554e115aad2f486b1
|
|
| MD5 |
43bd26556e7b2907c5486864717b9087
|
|
| BLAKE2b-256 |
85404a0294a2a32e4d1df0f999c662c857c6e9facb6c592d114a04b826531d39
|
File details
Details for the file rombergintegration-1.0.0-cp311-cp311-macosx_10_9_x86_64.whl.
File metadata
- Download URL: rombergintegration-1.0.0-cp311-cp311-macosx_10_9_x86_64.whl
- Upload date:
- Size: 47.4 kB
- Tags: CPython 3.11, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c26d93301a09fdb0a26880e43d2a480bc0484540293d4d6f615ab7b4efcec57a
|
|
| MD5 |
f3b2a3a66b15cc6c05a21dd25b9d8c19
|
|
| BLAKE2b-256 |
3fe1833a65e559b1c5dcdd7cb80bc220ba5588e162ba737d4fb992b9130f0ed3
|
File details
Details for the file rombergintegration-1.0.0-cp310-cp310-win_amd64.whl.
File metadata
- Download URL: rombergintegration-1.0.0-cp310-cp310-win_amd64.whl
- Upload date:
- Size: 44.4 kB
- Tags: CPython 3.10, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ff424a6d4d3a1a3ce601828d2f866bbbf20e0a03c6e78a211d8deace73cc209f
|
|
| MD5 |
738a7c7e52eb64e7d847b909583a614e
|
|
| BLAKE2b-256 |
d586b495c3694283cb96a5387d76127f2919538696d4a545a120f382ad5384f7
|
File details
Details for the file rombergintegration-1.0.0-cp310-cp310-win32.whl.
File metadata
- Download URL: rombergintegration-1.0.0-cp310-cp310-win32.whl
- Upload date:
- Size: 41.6 kB
- Tags: CPython 3.10, Windows x86
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f21e14fdeab247fd05584d05185f6fb9e8ef269812760c829ea66a9c6718f0d6
|
|
| MD5 |
d23854b06e9a089e2ef29cb2ded3f19e
|
|
| BLAKE2b-256 |
2d4da22e1a0ef81cbe824ee675a32cbfad0001aed07012ed1d13380438df3582
|
File details
Details for the file rombergintegration-1.0.0-cp310-cp310-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: rombergintegration-1.0.0-cp310-cp310-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 192.1 kB
- Tags: CPython 3.10, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f1a13124aa30fb253f8cf301bf46f5d5744e370c37de8caa77728ddbaf1d6473
|
|
| MD5 |
45b94e4080289f1a24bc1cb84220fa81
|
|
| BLAKE2b-256 |
758bb800a75457c1af59b6d0d7736f288820f780e6d49ed054632305e280f6a1
|
File details
Details for the file rombergintegration-1.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: rombergintegration-1.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 193.6 kB
- Tags: CPython 3.10, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3aa951d4725aefe5f99095add456de0675d75cc9b7194e41ac849688a231bce7
|
|
| MD5 |
3b8dd5334c655edbfab64741f41c9d55
|
|
| BLAKE2b-256 |
d0580ee42f19809e9a6097a37fb010a3a37f03ae669fd548a0f74cf80d7b28a7
|
File details
Details for the file rombergintegration-1.0.0-cp310-cp310-macosx_11_0_arm64.whl.
File metadata
- Download URL: rombergintegration-1.0.0-cp310-cp310-macosx_11_0_arm64.whl
- Upload date:
- Size: 47.7 kB
- Tags: CPython 3.10, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f365312e428fc62ce7d276672c69a5de876a6e9540879ffc92c802a3bab1d44f
|
|
| MD5 |
5da3593e51c15ed59762522d526d544c
|
|
| BLAKE2b-256 |
700b3aaabaa54ae2db1f64e8500fd077717d069c0351a26aebcde4c8f63179f7
|
File details
Details for the file rombergintegration-1.0.0-cp310-cp310-macosx_10_9_x86_64.whl.
File metadata
- Download URL: rombergintegration-1.0.0-cp310-cp310-macosx_10_9_x86_64.whl
- Upload date:
- Size: 47.4 kB
- Tags: CPython 3.10, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ee663ddec14f7334ca0dcd541748bae353d2993c729c82c88fe0cd5e54e6f125
|
|
| MD5 |
ed5a6603576fcdb8877ee15b58fc1012
|
|
| BLAKE2b-256 |
59a60ab9c5853aeaf50abbd2312824aed90134d6a5b2b7549306490062995955
|
File details
Details for the file rombergintegration-1.0.0-cp39-cp39-win_amd64.whl.
File metadata
- Download URL: rombergintegration-1.0.0-cp39-cp39-win_amd64.whl
- Upload date:
- Size: 44.7 kB
- Tags: CPython 3.9, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a1e0405f6c50f280b0cea48e8f7db8f46ef001e0bc82d43ebd60ae5fe247105c
|
|
| MD5 |
acaab1d457c33637cd94850d8c08a56a
|
|
| BLAKE2b-256 |
fa681d9f375ae275c1fb1a61048f6031cea1e90f02ea715d0c33992fce153e85
|
File details
Details for the file rombergintegration-1.0.0-cp39-cp39-win32.whl.
File metadata
- Download URL: rombergintegration-1.0.0-cp39-cp39-win32.whl
- Upload date:
- Size: 41.8 kB
- Tags: CPython 3.9, Windows x86
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
24f73ba89f68d6c6283fa679eb3e0c9f687a9dd76a74cbb8f49e0461e8be20fb
|
|
| MD5 |
6401c826e2c5af6ec8e3cec1e60fcd29
|
|
| BLAKE2b-256 |
e462d0d63c78a11660a59a7a5acf9d4fc4c5b643b184faabfd27650971563d76
|
File details
Details for the file rombergintegration-1.0.0-cp39-cp39-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: rombergintegration-1.0.0-cp39-cp39-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 192.9 kB
- Tags: CPython 3.9, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
78488cc2d75fed8a54152b34730476b28a577593fdcb84e66b795c30b4468306
|
|
| MD5 |
2fcf892bde15d253566471810ce464e7
|
|
| BLAKE2b-256 |
db98c2539c25ca9e7825db825007ca40898dda052fd0bbb81840f8ae6d916781
|
File details
Details for the file rombergintegration-1.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: rombergintegration-1.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 194.2 kB
- Tags: CPython 3.9, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
86ecdae4595312314b94e7fb96c12ee7b7aed64a2db64585df14fd76a5a7ebcb
|
|
| MD5 |
5851ee7fa0dc85d8f237d9b02c89d727
|
|
| BLAKE2b-256 |
44b9964bd7ad84ce82912d8d47f3544d7c903a7cac9a57fa941868068381d5e6
|
File details
Details for the file rombergintegration-1.0.0-cp39-cp39-macosx_11_0_arm64.whl.
File metadata
- Download URL: rombergintegration-1.0.0-cp39-cp39-macosx_11_0_arm64.whl
- Upload date:
- Size: 48.4 kB
- Tags: CPython 3.9, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
91742ea67a368a209206b9cb72be324b664a561e1fc9c8af03af4bf9b95cf0f1
|
|
| MD5 |
037dc1bb49897c1fc623b53d7b34ca3c
|
|
| BLAKE2b-256 |
c794c222d18b8d582a15d21afb9d4d987406ff5d4672b04690f7a2b4d712e42a
|
File details
Details for the file rombergintegration-1.0.0-cp39-cp39-macosx_10_9_x86_64.whl.
File metadata
- Download URL: rombergintegration-1.0.0-cp39-cp39-macosx_10_9_x86_64.whl
- Upload date:
- Size: 48.0 kB
- Tags: CPython 3.9, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0eb4c38739cd84c3a4a02d3a45bd451f9e31d3c292abc9ee0393ab9e32c4f637
|
|
| MD5 |
e7a113a6b4f35767cc5821f684951140
|
|
| BLAKE2b-256 |
9bf0baf9dc50d4ac4f63bab48bcace11628114db0270c57304f90998c98bcd3b
|
File details
Details for the file rombergintegration-1.0.0-cp38-cp38-win_amd64.whl.
File metadata
- Download URL: rombergintegration-1.0.0-cp38-cp38-win_amd64.whl
- Upload date:
- Size: 45.5 kB
- Tags: CPython 3.8, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8185cabbd125dc51731a563650b837a6ba051fa8434fcdc1df99a82febbe91c2
|
|
| MD5 |
5b80e141da9c93c11137a3ade0b4009b
|
|
| BLAKE2b-256 |
3ecd170c0a76f56c290916ac8a0abbb829801a9404be04d444eaa81698bce91a
|
File details
Details for the file rombergintegration-1.0.0-cp38-cp38-win32.whl.
File metadata
- Download URL: rombergintegration-1.0.0-cp38-cp38-win32.whl
- Upload date:
- Size: 42.6 kB
- Tags: CPython 3.8, Windows x86
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bce438ff51d48ab825c090d7b5aa7216219746a09ff141b07d12411bf168fc12
|
|
| MD5 |
83efd82fe568413bbc7ddee84010e5ec
|
|
| BLAKE2b-256 |
a7ff41424544c25387d6a6880cfb638344d6b51f9f9702b9f2526ee3d8045601
|
File details
Details for the file rombergintegration-1.0.0-cp38-cp38-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: rombergintegration-1.0.0-cp38-cp38-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 198.9 kB
- Tags: CPython 3.8, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2406a5e3f07d1b2b0d06604d6f0bc63167dd6588e6f206508f00ce84b9833cbb
|
|
| MD5 |
6031ba53ce983ec4c03c210c95dadbae
|
|
| BLAKE2b-256 |
7a5d93f8f36a6fca59bfc500dd226547735786d33d92d45e70a70bf569634001
|
File details
Details for the file rombergintegration-1.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: rombergintegration-1.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 200.4 kB
- Tags: CPython 3.8, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
caad257a647daf871f774590e2a2ae69faaf0ed58c2bda02b39b724faa9c528f
|
|
| MD5 |
db49766508f7c67a97878b88b16f8cfb
|
|
| BLAKE2b-256 |
159c841c8fb5b1a3855369430dc38c94aca84e4d99b77c513e6773d4bf5b697f
|
File details
Details for the file rombergintegration-1.0.0-cp38-cp38-macosx_11_0_arm64.whl.
File metadata
- Download URL: rombergintegration-1.0.0-cp38-cp38-macosx_11_0_arm64.whl
- Upload date:
- Size: 49.2 kB
- Tags: CPython 3.8, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6a1858fe1b63d183408a04a8bf99d5434e7f880ec0cd51073f6ae24347374ff2
|
|
| MD5 |
cf88444fb4d0e6c1391d2a8e5e4ce3c9
|
|
| BLAKE2b-256 |
400315349b36fcd5f37f6244c20c580c6f9448c2f87ea21d5d1481647d811865
|
File details
Details for the file rombergintegration-1.0.0-cp38-cp38-macosx_10_9_x86_64.whl.
File metadata
- Download URL: rombergintegration-1.0.0-cp38-cp38-macosx_10_9_x86_64.whl
- Upload date:
- Size: 49.0 kB
- Tags: CPython 3.8, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2ced6e875d203537e736ae598e9ac921a4bffee6c5c7874df3795afb07129f6e
|
|
| MD5 |
60484680e81e6f0f48d07d49fa6f2e52
|
|
| BLAKE2b-256 |
e0ea2bd78e891629f4633fb136c1d1af844ace1f9e80d5d5679df30fca634912
|