Skip to main content

High-performance Cython implementation of Romberg Integration algorithm

Project description

Romberg Integration - 高精度数值积分库

English | 中文

License Python Cython

一个基于 Cython 的高性能 Romberg 积分数值库,提供递归和动态规划两种算法实现。

快速开始安装API 文档示例单元测试


项目简介

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_tableprecision_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 三角组合函数

性能特点

优化措施

  1. 静态类型

    • 使用 long double 进行高精度计算
    • 避免 Python 对象的开销
  2. 编译指令

    # cython: language_level=3, boundscheck=False, wraparound=False, cdivision=True
    
    • boundscheck=False: 禁用边界检查
    • wraparound=False: 禁用负索引包装
    • cdivision=True: 启用 C 风格除法
  3. C 库函数

    • 使用 libc.mathpowfabs
    • 避免 Python 函数调用开销
  4. 编译优化

    • -O3: 最大优化级别
    • -march=native: 利用本地 CPU 特性
    • -ffast-math: 快速数学运算

性能对比

C++ 原生版 Cython 版
编译 g++ 直接编译 Cython -> C/C++
运行速度 原生 C++ 接近原生 C++
Python 可用性 需额外包装 原生 Python 支持
易用性
接口一致性 - ✓ 完全兼容

算法说明

Romberg 积分算法

Romberg 积分是一种外推加速方法,通过组合不同步长的梯形法则结果来提高精度。

基本原理

  1. 使用梯形法则计算初值:$T(m, 0)$
  2. 使用 Richardson 外推公式逐步改进:

$$T(m, k) = \frac{4^k T(m, k-1) - T(m-1, k-1)}{4^k - 1}$$

  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 文件。

作者

更新日志

v1.0.0 (2026-01-27)

  • ✨ 初始发布
  • ✓ 实现递归方法
  • ✓ 实现动态规划方法
  • ✓ 完整的单元测试(10/10)
  • ✓ 详细的 API 文档
  • ✓ GitHub Actions CI/CD

相关资源


Romberg Integration - High-Precision Numerical Integration Library

中文 | English

License Python Cython

A high-performance Romberg numerical integration library built with Cython, offering both recursive and dynamic programming algorithm implementations.

Quick StartInstallationAPI ReferenceExamplesTests


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 double type 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_table and precision_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

  1. Static Typing

    • Uses long double for high-precision computation
    • Avoids Python object overhead
  2. Compilation Directives

    # cython: language_level=3, boundscheck=False, wraparound=False, cdivision=True
    
    • boundscheck=False: Disables boundary checks
    • wraparound=False: Disables negative index wrapping
    • cdivision=True: Enables C-style division
  3. C Library Functions

    • Uses pow and fabs from libc.math
    • Avoids Python function call overhead
  4. 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:

  1. Use trapezoid rule for initial values: $T(m, 0)$
  2. Progressively improve using Richardson extrapolation formula:

$$T(m, k) = \frac{4^k T(m, k-1) - T(m-1, k-1)}{4^k - 1}$$

  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

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

rombergintegration-1.0.0.tar.gz (116.5 kB view details)

Uploaded Source

Built Distributions

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

rombergintegration-1.0.0-cp312-cp312-win_amd64.whl (44.9 kB view details)

Uploaded CPython 3.12Windows x86-64

rombergintegration-1.0.0-cp312-cp312-win32.whl (41.7 kB view details)

Uploaded CPython 3.12Windows x86

rombergintegration-1.0.0-cp312-cp312-musllinux_1_2_x86_64.whl (216.4 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

rombergintegration-1.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (219.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

rombergintegration-1.0.0-cp312-cp312-macosx_11_0_arm64.whl (47.8 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

rombergintegration-1.0.0-cp312-cp312-macosx_10_9_x86_64.whl (48.1 kB view details)

Uploaded CPython 3.12macOS 10.9+ x86-64

rombergintegration-1.0.0-cp311-cp311-win_amd64.whl (44.5 kB view details)

Uploaded CPython 3.11Windows x86-64

rombergintegration-1.0.0-cp311-cp311-win32.whl (41.4 kB view details)

Uploaded CPython 3.11Windows x86

rombergintegration-1.0.0-cp311-cp311-musllinux_1_2_x86_64.whl (204.9 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

rombergintegration-1.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (206.9 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

rombergintegration-1.0.0-cp311-cp311-macosx_11_0_arm64.whl (47.6 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

rombergintegration-1.0.0-cp311-cp311-macosx_10_9_x86_64.whl (47.4 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

rombergintegration-1.0.0-cp310-cp310-win_amd64.whl (44.4 kB view details)

Uploaded CPython 3.10Windows x86-64

rombergintegration-1.0.0-cp310-cp310-win32.whl (41.6 kB view details)

Uploaded CPython 3.10Windows x86

rombergintegration-1.0.0-cp310-cp310-musllinux_1_2_x86_64.whl (192.1 kB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

rombergintegration-1.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (193.6 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

rombergintegration-1.0.0-cp310-cp310-macosx_11_0_arm64.whl (47.7 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

rombergintegration-1.0.0-cp310-cp310-macosx_10_9_x86_64.whl (47.4 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

rombergintegration-1.0.0-cp39-cp39-win_amd64.whl (44.7 kB view details)

Uploaded CPython 3.9Windows x86-64

rombergintegration-1.0.0-cp39-cp39-win32.whl (41.8 kB view details)

Uploaded CPython 3.9Windows x86

rombergintegration-1.0.0-cp39-cp39-musllinux_1_2_x86_64.whl (192.9 kB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ x86-64

rombergintegration-1.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (194.2 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

rombergintegration-1.0.0-cp39-cp39-macosx_11_0_arm64.whl (48.4 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

rombergintegration-1.0.0-cp39-cp39-macosx_10_9_x86_64.whl (48.0 kB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

rombergintegration-1.0.0-cp38-cp38-win_amd64.whl (45.5 kB view details)

Uploaded CPython 3.8Windows x86-64

rombergintegration-1.0.0-cp38-cp38-win32.whl (42.6 kB view details)

Uploaded CPython 3.8Windows x86

rombergintegration-1.0.0-cp38-cp38-musllinux_1_2_x86_64.whl (198.9 kB view details)

Uploaded CPython 3.8musllinux: musl 1.2+ x86-64

rombergintegration-1.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (200.4 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

rombergintegration-1.0.0-cp38-cp38-macosx_11_0_arm64.whl (49.2 kB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

rombergintegration-1.0.0-cp38-cp38-macosx_10_9_x86_64.whl (49.0 kB view details)

Uploaded CPython 3.8macOS 10.9+ x86-64

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

Hashes for rombergintegration-1.0.0.tar.gz
Algorithm Hash digest
SHA256 667493b2cf64f1930a9b0a035e1d4747ec6f662925e1ce658d47b85f4d617887
MD5 bd1e4a0f6df89f06661033265abc82b8
BLAKE2b-256 dfb2fd29985a1f057b63a4d969ccf765b9f23e6033adc64e5d76fe10fe207025

See more details on using hashes here.

File details

Details for the file rombergintegration-1.0.0-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for rombergintegration-1.0.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 237b60f6fd944a15b36f1894f9e741f8a8f4dc86f0ba0df30f0e4abe5d2a632b
MD5 3c1e051683cf41b7757163518219f2e5
BLAKE2b-256 5ad00468420f4ac96ecb15d1fd7506ec9d7631fed7acf340b9a75a8125fe4249

See more details on using hashes here.

File details

Details for the file rombergintegration-1.0.0-cp312-cp312-win32.whl.

File metadata

File hashes

Hashes for rombergintegration-1.0.0-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 b8cc58abdcb8eec307dd5a15a4db2514d260760737c6c53a48c1cdf726db529e
MD5 e41ed2c9b39360379d3977c0328b4461
BLAKE2b-256 c94f65f6039218dac175152c237d7fc9a65db67f6d67341c7125ff9d9c8391cd

See more details on using hashes here.

File details

Details for the file rombergintegration-1.0.0-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for rombergintegration-1.0.0-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 cbca1ff80f44a7a66a663fd4b4c5fc1fc1998fef1e0b1dc4b08ef5f0ca117444
MD5 77c6234ac27935b63f84059f57522915
BLAKE2b-256 204483bce8a6d26cd9a2d99a2e895d43949e7bf3dae8c3941f60410a86fdb8f2

See more details on using hashes here.

File details

Details for the file rombergintegration-1.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for rombergintegration-1.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1a77331e385dd47f7c0aea1508ed5b2317c2f21336fc6e1054764e01554aca80
MD5 7220b724c3c4d0b925d366f3cabd21de
BLAKE2b-256 3cc4fffae33edd6f0f9134053c5c9387572bbc5c8c5e0bd0642176c389c053be

See more details on using hashes here.

File details

Details for the file rombergintegration-1.0.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rombergintegration-1.0.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2c7a1335b1c30dce9124e4c0e6f24e43a478d505e17e07caafeeff7643358b50
MD5 2a269b35ed39ee58aa54d4b37aef918a
BLAKE2b-256 9960bc39d15d9e52567a926c58a17c21f1f3df9f6f057352aec4efa5b722f18c

See more details on using hashes here.

File details

Details for the file rombergintegration-1.0.0-cp312-cp312-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for rombergintegration-1.0.0-cp312-cp312-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 708dd4f451c728d233c4d5713879ad4b29150024ab6c15bf40153f967ca0daa3
MD5 27af2a371416797aa611fc8a70d9709c
BLAKE2b-256 19192c07914e785af353b02709ed3653e85001fd3ad9010d13e4d1469cf57446

See more details on using hashes here.

File details

Details for the file rombergintegration-1.0.0-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for rombergintegration-1.0.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 88f345dd7b65d99c6dfb8e2360993ef34ff52c717216c8bf41559c3964ae260d
MD5 4c08e8f8fe4d1fa4bbdb60c31d2b2c72
BLAKE2b-256 354c4a8cee3541b68d03e3894d9cf14d49262c41e88a22c1b234bd6600d51cdd

See more details on using hashes here.

File details

Details for the file rombergintegration-1.0.0-cp311-cp311-win32.whl.

File metadata

File hashes

Hashes for rombergintegration-1.0.0-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 b04332a3fab754946e0e9cccf932eeb2a2538a685e5eb14e46f963be7ae5dd4f
MD5 d01a98c619796c09e3dfbba8b7797518
BLAKE2b-256 59bb0f931c17643e1d935dcd84c5d648b4aa8aa9c20ddc04020c41b7558f329c

See more details on using hashes here.

File details

Details for the file rombergintegration-1.0.0-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for rombergintegration-1.0.0-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 a9443a303dca13412b37d5f9cc6b6c592fa980609fd32cce06c1ea697a3feabc
MD5 0e53cb406e02ab32736cb5ea1dfc89d0
BLAKE2b-256 2d7df79babfb23879a8b79ca4a691eddab3fa9d6161bc6c04037d89c89b0e032

See more details on using hashes here.

File details

Details for the file rombergintegration-1.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for rombergintegration-1.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 53e668b925cfe08ac56647392b36702d41031f1e428d715638b6cf73af8ec74b
MD5 ffbf5c2bb487e6bd0bd1694025a5697d
BLAKE2b-256 f85ceede69b9f69dcd19464cb44f0ef5437b09272057fb3d8e88313df38dcccc

See more details on using hashes here.

File details

Details for the file rombergintegration-1.0.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rombergintegration-1.0.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 fcc1f476d375917f285ffb83d10e7a29509cacd4725a838554e115aad2f486b1
MD5 43bd26556e7b2907c5486864717b9087
BLAKE2b-256 85404a0294a2a32e4d1df0f999c662c857c6e9facb6c592d114a04b826531d39

See more details on using hashes here.

File details

Details for the file rombergintegration-1.0.0-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for rombergintegration-1.0.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 c26d93301a09fdb0a26880e43d2a480bc0484540293d4d6f615ab7b4efcec57a
MD5 f3b2a3a66b15cc6c05a21dd25b9d8c19
BLAKE2b-256 3fe1833a65e559b1c5dcdd7cb80bc220ba5588e162ba737d4fb992b9130f0ed3

See more details on using hashes here.

File details

Details for the file rombergintegration-1.0.0-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for rombergintegration-1.0.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 ff424a6d4d3a1a3ce601828d2f866bbbf20e0a03c6e78a211d8deace73cc209f
MD5 738a7c7e52eb64e7d847b909583a614e
BLAKE2b-256 d586b495c3694283cb96a5387d76127f2919538696d4a545a120f382ad5384f7

See more details on using hashes here.

File details

Details for the file rombergintegration-1.0.0-cp310-cp310-win32.whl.

File metadata

File hashes

Hashes for rombergintegration-1.0.0-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 f21e14fdeab247fd05584d05185f6fb9e8ef269812760c829ea66a9c6718f0d6
MD5 d23854b06e9a089e2ef29cb2ded3f19e
BLAKE2b-256 2d4da22e1a0ef81cbe824ee675a32cbfad0001aed07012ed1d13380438df3582

See more details on using hashes here.

File details

Details for the file rombergintegration-1.0.0-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for rombergintegration-1.0.0-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 f1a13124aa30fb253f8cf301bf46f5d5744e370c37de8caa77728ddbaf1d6473
MD5 45b94e4080289f1a24bc1cb84220fa81
BLAKE2b-256 758bb800a75457c1af59b6d0d7736f288820f780e6d49ed054632305e280f6a1

See more details on using hashes here.

File details

Details for the file rombergintegration-1.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for rombergintegration-1.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3aa951d4725aefe5f99095add456de0675d75cc9b7194e41ac849688a231bce7
MD5 3b8dd5334c655edbfab64741f41c9d55
BLAKE2b-256 d0580ee42f19809e9a6097a37fb010a3a37f03ae669fd548a0f74cf80d7b28a7

See more details on using hashes here.

File details

Details for the file rombergintegration-1.0.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rombergintegration-1.0.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f365312e428fc62ce7d276672c69a5de876a6e9540879ffc92c802a3bab1d44f
MD5 5da3593e51c15ed59762522d526d544c
BLAKE2b-256 700b3aaabaa54ae2db1f64e8500fd077717d069c0351a26aebcde4c8f63179f7

See more details on using hashes here.

File details

Details for the file rombergintegration-1.0.0-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for rombergintegration-1.0.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 ee663ddec14f7334ca0dcd541748bae353d2993c729c82c88fe0cd5e54e6f125
MD5 ed5a6603576fcdb8877ee15b58fc1012
BLAKE2b-256 59a60ab9c5853aeaf50abbd2312824aed90134d6a5b2b7549306490062995955

See more details on using hashes here.

File details

Details for the file rombergintegration-1.0.0-cp39-cp39-win_amd64.whl.

File metadata

File hashes

Hashes for rombergintegration-1.0.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 a1e0405f6c50f280b0cea48e8f7db8f46ef001e0bc82d43ebd60ae5fe247105c
MD5 acaab1d457c33637cd94850d8c08a56a
BLAKE2b-256 fa681d9f375ae275c1fb1a61048f6031cea1e90f02ea715d0c33992fce153e85

See more details on using hashes here.

File details

Details for the file rombergintegration-1.0.0-cp39-cp39-win32.whl.

File metadata

File hashes

Hashes for rombergintegration-1.0.0-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 24f73ba89f68d6c6283fa679eb3e0c9f687a9dd76a74cbb8f49e0461e8be20fb
MD5 6401c826e2c5af6ec8e3cec1e60fcd29
BLAKE2b-256 e462d0d63c78a11660a59a7a5acf9d4fc4c5b643b184faabfd27650971563d76

See more details on using hashes here.

File details

Details for the file rombergintegration-1.0.0-cp39-cp39-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for rombergintegration-1.0.0-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 78488cc2d75fed8a54152b34730476b28a577593fdcb84e66b795c30b4468306
MD5 2fcf892bde15d253566471810ce464e7
BLAKE2b-256 db98c2539c25ca9e7825db825007ca40898dda052fd0bbb81840f8ae6d916781

See more details on using hashes here.

File details

Details for the file rombergintegration-1.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for rombergintegration-1.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 86ecdae4595312314b94e7fb96c12ee7b7aed64a2db64585df14fd76a5a7ebcb
MD5 5851ee7fa0dc85d8f237d9b02c89d727
BLAKE2b-256 44b9964bd7ad84ce82912d8d47f3544d7c903a7cac9a57fa941868068381d5e6

See more details on using hashes here.

File details

Details for the file rombergintegration-1.0.0-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rombergintegration-1.0.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 91742ea67a368a209206b9cb72be324b664a561e1fc9c8af03af4bf9b95cf0f1
MD5 037dc1bb49897c1fc623b53d7b34ca3c
BLAKE2b-256 c794c222d18b8d582a15d21afb9d4d987406ff5d4672b04690f7a2b4d712e42a

See more details on using hashes here.

File details

Details for the file rombergintegration-1.0.0-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for rombergintegration-1.0.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 0eb4c38739cd84c3a4a02d3a45bd451f9e31d3c292abc9ee0393ab9e32c4f637
MD5 e7a113a6b4f35767cc5821f684951140
BLAKE2b-256 9bf0baf9dc50d4ac4f63bab48bcace11628114db0270c57304f90998c98bcd3b

See more details on using hashes here.

File details

Details for the file rombergintegration-1.0.0-cp38-cp38-win_amd64.whl.

File metadata

File hashes

Hashes for rombergintegration-1.0.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 8185cabbd125dc51731a563650b837a6ba051fa8434fcdc1df99a82febbe91c2
MD5 5b80e141da9c93c11137a3ade0b4009b
BLAKE2b-256 3ecd170c0a76f56c290916ac8a0abbb829801a9404be04d444eaa81698bce91a

See more details on using hashes here.

File details

Details for the file rombergintegration-1.0.0-cp38-cp38-win32.whl.

File metadata

File hashes

Hashes for rombergintegration-1.0.0-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 bce438ff51d48ab825c090d7b5aa7216219746a09ff141b07d12411bf168fc12
MD5 83efd82fe568413bbc7ddee84010e5ec
BLAKE2b-256 a7ff41424544c25387d6a6880cfb638344d6b51f9f9702b9f2526ee3d8045601

See more details on using hashes here.

File details

Details for the file rombergintegration-1.0.0-cp38-cp38-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for rombergintegration-1.0.0-cp38-cp38-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 2406a5e3f07d1b2b0d06604d6f0bc63167dd6588e6f206508f00ce84b9833cbb
MD5 6031ba53ce983ec4c03c210c95dadbae
BLAKE2b-256 7a5d93f8f36a6fca59bfc500dd226547735786d33d92d45e70a70bf569634001

See more details on using hashes here.

File details

Details for the file rombergintegration-1.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for rombergintegration-1.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 caad257a647daf871f774590e2a2ae69faaf0ed58c2bda02b39b724faa9c528f
MD5 db49766508f7c67a97878b88b16f8cfb
BLAKE2b-256 159c841c8fb5b1a3855369430dc38c94aca84e4d99b77c513e6773d4bf5b697f

See more details on using hashes here.

File details

Details for the file rombergintegration-1.0.0-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rombergintegration-1.0.0-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6a1858fe1b63d183408a04a8bf99d5434e7f880ec0cd51073f6ae24347374ff2
MD5 cf88444fb4d0e6c1391d2a8e5e4ce3c9
BLAKE2b-256 400315349b36fcd5f37f6244c20c580c6f9448c2f87ea21d5d1481647d811865

See more details on using hashes here.

File details

Details for the file rombergintegration-1.0.0-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for rombergintegration-1.0.0-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 2ced6e875d203537e736ae598e9ac921a4bffee6c5c7874df3795afb07129f6e
MD5 60484680e81e6f0f48d07d49fa6f2e52
BLAKE2b-256 e0ea2bd78e891629f4633fb136c1d1af844ace1f9e80d5d5679df30fca634912

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