rust-pyfunc


Namerust-pyfunc JSON
Version 0.27.0 PyPI version JSON
download
home_pageNone
SummaryA collection of high-performance Python functions implemented in Rust
upload_time2025-07-21 19:29:22
maintainerNone
docs_urlNone
authorchenzongwei
requires_python>=3.8
licenseMIT
keywords python rust algorithms performance
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Rust_Pyfunc [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/chen-001/rust_pyfunc)

一个专注于高性能计算的Python库,通过Rust实现计算密集型算法,专门为金融数据分析、时间序列处理和统计计算提供显著的速度提升。

## 安装
```shell
pip install rust_pyfunc
```

## 使用
```python
import rust_pyfunc as rp
```

## 贡献指南

### 贡献原则

1. **性能优先**: 只有能显著提升性能的函数才考虑用Rust实现
2. **安全第一**: 所有代码必须通过内存安全检查,避免越界访问
3. **接口清晰**: Python接口要简洁易用,类型提示完整
4. **文档完善**: 每个函数都需要详细的文档和使用示例
5. **测试充分**: 必须包含正确性测试和性能对比测试

### 欢迎所有类型的贡献

我们欢迎并感谢所有形式的贡献!无论你的技能水平如何,都有适合你的贡献方式:

🚀 **功能贡献**:
- 新的算法实现(数值计算、统计分析、机器学习等)
- 性能优化(加速现有函数、并行化处理)
- 新模块开发(创建全新的功能领域)

📝 **文档贡献**:
- 改进函数文档和使用示例
- 添加教程和最佳实践指南
- 翻译文档到其他语言

🧪 **测试和质量保证**:
- 添加更多测试用例
- 改进测试覆盖率
- 发现和修复bug

🔧 **工程改进**:
- CI/CD流程优化
- 构建系统改进
- 配置文件和脚本优化

💡 **想法和建议**:
- 提出新功能请求
- 报告问题和改进建议
- 参与设计讨论

### 开发环境设置

**必要工具**:
```bash
# 1. 安装Rust工具链
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source ~/.cargo/env

# 2. 确保Python环境(支持Python 3.8+)
# 可以使用现有的Python环境,无需创建新环境
python --version  # 确认版本 >= 3.8

# 3. 安装构建工具
pip install maturin

# 4. 安装可选的开发依赖
pip install numpy pandas pytest  # 用于测试和验证
```

**Fork和克隆项目**:
```bash
# 1. 在GitHub上Fork项目到你的账户
# 访问 https://github.com/chen-001/rust_pyfunc 点击Fork

# 2. 克隆你的Fork
git clone https://github.com/your-username/rust_pyfunc.git
cd rust_pyfunc

# 3. 添加原始仓库为upstream(保持与主仓库同步)
git remote add upstream https://github.com/chen-001/rust_pyfunc.git

# 4. 验证环境
maturin --version
```

### Upstream远程仓库的作用与使用

**Upstream的好处**:
- 🔄 **保持同步**: 随时获取主仓库的最新更新
- 🚀 **清洁的PR**: 基于最新代码创建Pull Request
- 🔀 **冲突预防**: 及时发现和解决合并冲突
- 📈 **协作便利**: 与其他贡献者保持代码一致性

**常用操作流程**:
```bash
# 获取主仓库最新更改
git fetch upstream

# 切换到本地main分支
git checkout main

# 将upstream的main分支合并到本地main
git merge upstream/main

# 推送更新到你的Fork
git push origin main

# 基于最新代码创建新功能分支
git checkout -b feature/your-new-feature

# 开发完成后,再次同步(确保没有冲突)
git fetch upstream
git rebase upstream/main

# 推送功能分支并创建PR
git push origin feature/your-new-feature
```

**最佳实践建议**:
- 💡 每次开始新功能前先同步:`git pull upstream main`
- 🔍 定期检查主仓库更新:`git fetch upstream && git log upstream/main --oneline -10`
- 🎯 保持分支整洁:使用rebase而非merge来整理提交历史
- ⚡ 快速同步命令:`git fetch upstream && git checkout main && git merge upstream/main && git push origin main`

### 快速构建指南

**推荐的构建方式**:
```bash
# 开发模式构建(推荐用于开发)
maturin develop

# 查看详细构建输出
maturin develop --verbose

# 释放模式构建(用于正式使用,速度更快)
maturin develop --release
```

**验证安装**:
```bash
# 验证模块导入
python -c "import rust_pyfunc as rp; print('✅ 导入成功')"

# 查看可用函数
python -c "import rust_pyfunc as rp; print(dir(rp))"
```

### 添加新函数的步骤

#### 第一步:规划和设计

1. **选择或创建模块**:
   
   **现有模块**(可选择加入):
   - `time_series/` - 时间序列分析
   - `statistics/` - 统计计算
   - `sequence/` - 序列分析
   - `text/` - 文本处理
   - `parallel_computing/` - 并行计算
   - `trading_analysis/` - 交易分析

   **创建新模块**(推荐方式):
   ```bash
   # 创建新的功能模块
   mkdir src/your_new_module
   touch src/your_new_module/mod.rs
   touch src/your_new_module/your_function.rs
   ```

2. **编写Python参考实现**(重要!用于验证正确性):
```python
# 示例:在tests/目录下创建测试文件
def python_prototype(data):
    """Python实现版本,用于验证正确性"""
    # 实现算法逻辑
    return result
```

#### 第二步:Rust实现

1. **创建或修改Rust模块**(推荐创建新文件):
```rust
// src/your_module/your_function.rs
use pyo3::prelude::*;
use numpy::{PyArray1, PyReadonlyArray1};

#[pyfunction]
pub fn your_function_name(
    input: PyReadonlyArray1<f64>,
    param: f64,
) -> PyResult<Py<PyArray1<f64>>> {
    // Rust实现
    // 注意:添加边界检查和错误处理
    todo!()
}
```

2. **在模块中声明函数**:
```rust
// src/your_new_module/mod.rs
pub mod your_function;
pub use your_function::*;
```

3. **在lib.rs中添加模块和导出函数**:
```rust
// src/lib.rs 
// 添加模块声明(文件顶部附近)
mod your_new_module;

// 在#[pymodule]函数中导出(约21-65行)
#[pymodule]
fn rust_pyfunc(_py: Python, m: &PyModule) -> PyResult<()> {
    // ... existing functions ...
    m.add_function(wrap_pyfunction!(your_new_module::your_function_name, m)?)?;
    Ok(())
}
```

**新模块的完整结构**:
```
src/your_new_module/
├── mod.rs          # 模块声明文件
├── your_function.rs # 具体函数实现
└── utils.rs        # (可选)辅助函数
```

#### 第三步:添加类型提示

**创建新的类型提示文件**(如果是新模块):
```python
# python/rust_pyfunc/your_new_module.pyi
"""Your new module type hints"""
from typing import Optional
import numpy as np
from numpy.typing import NDArray

def your_function_name(
    input: NDArray[np.float64],
    param: float,
) -> NDArray[np.float64]:
    """详细的函数文档
    
    参数说明:
    ----------
    input : NDArray[np.float64]
        输入数据描述
    param : float
        参数描述
        
    返回值:
    -------
    NDArray[np.float64]
        返回值描述
        
    示例:
    -------
    >>> import rust_pyfunc as rp
    >>> result = rp.your_function_name(data, 1.5)
    """
    ...
```

如果是加入现有模块,则在对应的.pyi文件中添加函数声明即可。

#### 第四步:编写测试

**在tests/目录下创建测试文件**:
```python
# tests/test_your_function.py
import numpy as np
import rust_pyfunc as rp
import time

def python_reference_implementation(data, param=1.5):
    """Python参考实现 - 必须先实现这个!
    
    这个函数是验证Rust实现正确性的金标准。
    请用最直观、最容易理解的方式实现算法逻辑。
    """
    import numpy as np
    # 这里实现你的算法逻辑
    # 例如:计算某种移动平均
    result = []
    for i in range(len(data)):
        if i == 0:
            result.append(data[i])
        else:
            # 指数移动平均示例
            result.append(param * data[i] + (1 - param) * result[-1])
    return np.array(result)

def test_correctness():
    """正确性验证 - 最重要的测试!"""
    # 生成多种测试数据
    test_cases = [
        np.random.randn(100),           # 随机数据
        np.arange(50, dtype=float),     # 递增序列
        np.ones(30) * 5.0,              # 常数序列
        np.array([1.0, -1.0] * 25),     # 交替序列
    ]
    
    for i, data in enumerate(test_cases):
        print(f"🧪 测试用例 {i+1}: 长度={len(data)}")
        
        # Python参考实现
        python_result = python_reference_implementation(data, 1.5)
        
        # Rust实现
        rust_result = rp.your_function_name(data, 1.5)
        
        # 严格比较结果
        np.testing.assert_allclose(
            rust_result, python_result, 
            rtol=1e-12, atol=1e-15,
            err_msg=f"测试用例 {i+1} 失败"
        )
        print(f"   ✅ 测试用例 {i+1} 通过")
    
    print("🎉 所有正确性测试通过!")

def test_performance():
    """性能对比测试 - 展示Rust的优势"""
    print("🏃‍♂️ 开始性能测试...")
    
    # 多种规模的测试数据
    test_sizes = [1000, 10000, 100000]
    
    for size in test_sizes:
        print(f"\n📊 测试数据规模: {size:,} 个元素")
        data = np.random.randn(size)
        
        # 预热(避免首次调用的开销)
        _ = python_reference_implementation(data[:100])
        _ = rp.your_function_name(data[:100], 1.5)
        
        # 测试Python版本
        print("   ⏱️  测试Python实现...")
        python_times = []
        for _ in range(10):  # 多次测试取平均
            start = time.perf_counter()
            python_result = python_reference_implementation(data, 1.5)
            python_times.append(time.perf_counter() - start)
        avg_python_time = sum(python_times) / len(python_times)
        
        # 测试Rust版本
        print("   ⚡ 测试Rust实现...")
        rust_times = []
        for _ in range(10):  # 多次测试取平均
            start = time.perf_counter()
            rust_result = rp.your_function_name(data, 1.5)
            rust_times.append(time.perf_counter() - start)
        avg_rust_time = sum(rust_times) / len(rust_times)
        
        # 计算性能提升
        speedup = avg_python_time / avg_rust_time
        
        print(f"   📈 Python: {avg_python_time*1000:.2f}ms")
        print(f"   🚀 Rust:   {avg_rust_time*1000:.2f}ms")
        print(f"   ⚡ 加速比: {speedup:.1f}x")
        
        # 验证结果一致性
        np.testing.assert_allclose(rust_result, python_result, rtol=1e-10)
        print(f"   ✅ 结果验证通过")
    
    print(f"\n🎯 性能测试完成!Rust实现展现了显著的性能优势。")

if __name__ == "__main__":
    test_correctness()
    test_performance()
```

#### 第五步:构建和测试

```bash
# 构建项目
maturin develop
# 或使用项目的快捷脚本
./alter.sh 2>&1

# 运行测试
python tests/test_your_function.py

# 验证导入
python -c "import rust_pyfunc as rp; print('✅ 模块导入成功')"
python -c "import rust_pyfunc as rp; print(dir(rp))"  # 查看所有可用函数
```

**重要提醒**:
- ⚠️ **必须先写Python参考实现**,用于验证Rust版本的正确性
- 🧪 **多种测试用例**:随机数据、边界条件、特殊值
- ⚡ **性能测试**:展示Rust相对于Python的加速效果
- 📝 **详细文档**:函数用途、参数、返回值、使用示例

### 代码规范

#### Rust代码规范

```rust
// ✅ 好的示例
#[pyfunction]
pub fn calculate_moving_average(
    data: PyReadonlyArray1<f64>,
    window: usize,
) -> PyResult<Py<PyArray1<f64>>> {
    let data = data.as_array();
    let n = data.len();
    
    // 边界检查
    if window == 0 || window > n {
        return Err(PyErr::new::<pyo3::exceptions::PyValueError, _>(
            "窗口大小必须在1到数据长度之间"
        ));
    }
    
    let mut result = Vec::with_capacity(n - window + 1);
    
    // 使用迭代器和并行处理(如果适用)
    for i in 0..=(n - window) {
        let sum: f64 = data.slice(s![i..i + window]).sum();
        result.push(sum / window as f64);
    }
    
    Python::with_gil(|py| {
        Ok(PyArray1::from_vec(py, result).to_owned())
    })
}
```

#### 必须遵循的安全规范

1. **边界检查**: 所有数组访问都要检查边界
2. **错误处理**: 使用`PyResult`和适当的错误类型
3. **内存管理**: 避免内存泄漏,正确使用`Python::with_gil`
4. **并发安全**: 如果使用并行,确保线程安全

#### 性能优化建议

```rust
// 使用rayon并行处理
use rayon::prelude::*;

// 并行版本
let result: Vec<f64> = (0..=n-window)
    .into_par_iter()
    .map(|i| {
        let sum: f64 = data.slice(s![i..i + window]).sum();
        sum / window as f64
    })
    .collect();
```

### 文档要求

每个函数都需要包含:

1. **功能描述**: 清晰说明函数用途
2. **参数说明**: 每个参数的类型、含义、约束
3. **返回值说明**: 返回值类型和含义
4. **性能特性**: 时间复杂度、预期速度提升
5. **使用示例**: 至少2个实际使用案例
6. **注意事项**: 使用限制、边界条件

### 贡献流程(Fork + Pull Request)

#### 第一步:Fork和设置

```bash
# 1. 在GitHub上Fork项目
# 访问 https://github.com/chen-001/rust_pyfunc
# 点击右上角的 "Fork" 按钮

# 2. 克隆你的Fork到本地
git clone https://github.com/your-username/rust_pyfunc.git
cd rust_pyfunc

# 3. 添加原仓库为upstream(保持同步用)
git remote add upstream https://github.com/chen-001/rust_pyfunc.git

# 4. 验证远程仓库配置
git remote -v
# origin    https://github.com/your-username/rust_pyfunc.git (fetch)
# origin    https://github.com/your-username/rust_pyfunc.git (push)
# upstream  https://github.com/chen-001/rust_pyfunc.git (fetch)
# upstream  https://github.com/chen-001/rust_pyfunc.git (push)
```

#### 第二步:创建功能分支

```bash
# 1. 确保在main分支且是最新的
git checkout main
git pull upstream main

# 2. 创建并切换到功能分支
git checkout -b feature/your-function-name
# 或者创建修复分支
git checkout -b fix/issue-description
```

#### 第三步:开发和提交

```bash
# 开发你的功能...
# 按照前面的步骤添加Rust实现、类型提示、测试等

# 分阶段提交,保持提交历史清晰
git add src/your_new_module/
git commit -m "feat: 添加your_function_name的Rust实现

- 实现高性能算法XYZ
- 支持多种数据类型输入
- 包含完整的错误处理"

git add python/rust_pyfunc/your_new_module.pyi
git commit -m "docs: 添加your_function_name的类型提示

- 完整的函数签名和文档
- 详细的参数说明和示例"

git add tests/test_your_function.py
git commit -m "test: 添加your_function_name的测试

- 正确性验证测试
- 多场景性能对比测试
- 边界条件测试"
```

#### 第四步:测试和验证

```bash
# 构建项目
maturin develop

# 运行你的测试
python tests/test_your_function.py

# 运行所有测试(确保没有破坏现有功能)
python -m pytest tests/ -v

# 检查代码格式(如果项目有linting配置)
cargo fmt --check
cargo clippy
```

#### 第五步:推送和创建Pull Request

```bash
# 推送到你的Fork
git push origin feature/your-function-name

# 如果是第一次推送这个分支
git push -u origin feature/your-function-name
```

然后在GitHub上:
1. 访问你的Fork页面
2. GitHub会提示创建Pull Request,点击 "Compare & pull request"
3. 填写PR信息(见下面的模板)

#### Pull Request模板

**标题格式**:
- `feat: 添加your_function_name函数` (新功能)
- `fix: 修复issue_description` (bug修复)
- `docs: 改进documentation_part` (文档改进)
- `test: 添加test_description` (测试改进)

**PR描述模板**:
```markdown
## 📝 变更描述
简要描述此PR的目的和实现的功能

## ✨ 新增功能
- 实现了高性能的XXX算法
- 支持YYY数据类型
- 提供ZZZ接口

## 🚀 性能提升
- 相比Python实现提升 XX 倍
- 处理100万数据点仅需 XX ms
- 内存使用减少 XX%

## 🧪 测试情况
- [x] 正确性测试通过
- [x] 性能测试完成
- [x] 边界条件测试
- [x] 现有功能回归测试

## 📊 性能测试结果
```
数据规模    | Python时间 | Rust时间  | 加速比
----------|-----------|----------|-------
1,000     | 10.5ms    | 0.8ms    | 13.1x
10,000    | 105ms     | 7.2ms    | 14.6x
100,000   | 1.05s     | 72ms     | 14.6x
```

## 🔗 相关Issue
修复 #issue_number (如果有相关issue)

## ✅ 检查清单
- [x] 代码编译通过
- [x] 所有测试通过
- [x] 添加了类型提示
- [x] 更新了文档
- [x] 遵循了代码规范
```

### 示例:完整的贡献流程

假设我们要添加一个计算指数移动平均(EMA)的函数,完整的贡献过程如下:

#### 准备阶段
```bash
# 1. Fork项目并克隆
git clone https://github.com/your-username/rust_pyfunc.git
cd rust_pyfunc
git remote add upstream https://github.com/chen-001/rust_pyfunc.git

# 2. 创建功能分支
git checkout main
git pull upstream main
git checkout -b feature/exponential-moving-average
```

#### 开发阶段
```bash
# 3. 创建新模块结构
mkdir -p src/moving_averages
touch src/moving_averages/mod.rs
touch src/moving_averages/ema.rs

# 4. 实现Python参考版本(重要!)
# tests/test_ema.py - 先写Python实现用于验证
```

**Python参考实现**:
```python
# tests/test_ema.py
import numpy as np

def python_ema(data, alpha=0.1):
    """Python参考实现 - 指数移动平均"""
    result = np.zeros_like(data)
    result[0] = data[0]
    for i in range(1, len(data)):
        result[i] = alpha * data[i] + (1 - alpha) * result[i-1]
    return result
```

**Rust实现**:
```rust
// src/moving_averages/ema.rs
use pyo3::prelude::*;
use numpy::{PyArray1, PyReadonlyArray1};

#[pyfunction]
pub fn exponential_moving_average(
    data: PyReadonlyArray1<f64>,
    alpha: f64,
) -> PyResult<Py<PyArray1<f64>>> {
    let data = data.as_array();
    let n = data.len();
    
    if alpha <= 0.0 || alpha > 1.0 {
        return Err(PyErr::new::<pyo3::exceptions::PyValueError, _>(
            "alpha必须在(0, 1]范围内"
        ));
    }
    
    let mut result = Vec::with_capacity(n);
    if n > 0 {
        result.push(data[0]);
        for i in 1..n {
            let ema = alpha * data[i] + (1.0 - alpha) * result[i-1];
            result.push(ema);
        }
    }
    
    Python::with_gil(|py| {
        Ok(PyArray1::from_vec(py, result).to_owned())
    })
}
```

#### 集成和测试
```bash
# 5. 添加到模块系统
echo "pub mod ema;" >> src/moving_averages/mod.rs
echo "pub use ema::*;" >> src/moving_averages/mod.rs

# 在src/lib.rs中添加
# mod moving_averages;
# m.add_function(wrap_pyfunction!(moving_averages::exponential_moving_average, m)?)?;

# 6. 创建类型提示文件
# python/rust_pyfunc/moving_averages.pyi

# 7. 构建和测试
maturin develop
python tests/test_ema.py

# 8. 分阶段提交
git add src/moving_averages/
git commit -m "feat: 实现指数移动平均(EMA)的Rust核心算法

- 高性能EMA计算,支持任意alpha参数
- 完整的边界检查和错误处理
- 内存高效的向量化实现"

git add python/rust_pyfunc/moving_averages.pyi
git commit -m "docs: 添加EMA函数的类型提示和文档

- 完整的函数签名和参数说明
- 详细的使用示例和注意事项"

git add tests/test_ema.py
git commit -m "test: 添加EMA函数的完整测试套件

- Python参考实现用于正确性验证
- 多规模性能基准测试
- 边界条件和错误处理测试
- 测试结果:比纯Python实现快25倍"
```

#### 提交PR
```bash
# 9. 推送到你的Fork
git push -u origin feature/exponential-moving-average

# 10. 在GitHub上创建Pull Request
# 标题:feat: 添加指数移动平均(EMA)计算函数
# 使用前面提供的PR模板填写描述
```

**预期性能测试结果**:
```
📊 EMA性能测试结果:
数据规模    | Python时间 | Rust时间  | 加速比
----------|-----------|----------|-------
1,000     | 2.1ms     | 0.08ms   | 26.3x
10,000    | 21ms      | 0.8ms    | 26.3x
100,000   | 210ms     | 8ms      | 26.3x
```

这个完整示例展示了:
- ✅ Fork + PR的标准协作流程
- ✅ 创建新模块的完整过程
- ✅ Python参考实现的重要性
- ✅ 分阶段清晰的git提交历史
- ✅ 完整的测试和验证流程

### 贡献者支持

如果在贡献过程中遇到问题:

1. **查看现有代码**: 参考`src/time_series/`等模块的实现
2. **运行测试**: 使用`python -m pytest tests/`检查回归
3. **性能分析**: 使用`criterion`进行基准测试
4. **提出Issue**: 在GitHub上描述遇到的问题

我们欢迎任何形式的贡献,从bug修复到新功能实现!

## License

MIT License


            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "rust-pyfunc",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "python, rust, algorithms, performance",
    "author": "chenzongwei",
    "author_email": null,
    "download_url": "https://files.pythonhosted.org/packages/1e/ba/ece0b01dc40e0f9254fa12e867b2f2002d2bdc6f3716aaede1d33bcd7b99/rust_pyfunc-0.27.0.tar.gz",
    "platform": null,
    "description": "# Rust_Pyfunc [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/chen-001/rust_pyfunc)\n\n\u4e00\u4e2a\u4e13\u6ce8\u4e8e\u9ad8\u6027\u80fd\u8ba1\u7b97\u7684Python\u5e93\uff0c\u901a\u8fc7Rust\u5b9e\u73b0\u8ba1\u7b97\u5bc6\u96c6\u578b\u7b97\u6cd5\uff0c\u4e13\u95e8\u4e3a\u91d1\u878d\u6570\u636e\u5206\u6790\u3001\u65f6\u95f4\u5e8f\u5217\u5904\u7406\u548c\u7edf\u8ba1\u8ba1\u7b97\u63d0\u4f9b\u663e\u8457\u7684\u901f\u5ea6\u63d0\u5347\u3002\n\n## \u5b89\u88c5\n```shell\npip install rust_pyfunc\n```\n\n## \u4f7f\u7528\n```python\nimport rust_pyfunc as rp\n```\n\n## \u8d21\u732e\u6307\u5357\n\n### \u8d21\u732e\u539f\u5219\n\n1. **\u6027\u80fd\u4f18\u5148**: \u53ea\u6709\u80fd\u663e\u8457\u63d0\u5347\u6027\u80fd\u7684\u51fd\u6570\u624d\u8003\u8651\u7528Rust\u5b9e\u73b0\n2. **\u5b89\u5168\u7b2c\u4e00**: \u6240\u6709\u4ee3\u7801\u5fc5\u987b\u901a\u8fc7\u5185\u5b58\u5b89\u5168\u68c0\u67e5\uff0c\u907f\u514d\u8d8a\u754c\u8bbf\u95ee\n3. **\u63a5\u53e3\u6e05\u6670**: Python\u63a5\u53e3\u8981\u7b80\u6d01\u6613\u7528\uff0c\u7c7b\u578b\u63d0\u793a\u5b8c\u6574\n4. **\u6587\u6863\u5b8c\u5584**: \u6bcf\u4e2a\u51fd\u6570\u90fd\u9700\u8981\u8be6\u7ec6\u7684\u6587\u6863\u548c\u4f7f\u7528\u793a\u4f8b\n5. **\u6d4b\u8bd5\u5145\u5206**: \u5fc5\u987b\u5305\u542b\u6b63\u786e\u6027\u6d4b\u8bd5\u548c\u6027\u80fd\u5bf9\u6bd4\u6d4b\u8bd5\n\n### \u6b22\u8fce\u6240\u6709\u7c7b\u578b\u7684\u8d21\u732e\n\n\u6211\u4eec\u6b22\u8fce\u5e76\u611f\u8c22\u6240\u6709\u5f62\u5f0f\u7684\u8d21\u732e\uff01\u65e0\u8bba\u4f60\u7684\u6280\u80fd\u6c34\u5e73\u5982\u4f55\uff0c\u90fd\u6709\u9002\u5408\u4f60\u7684\u8d21\u732e\u65b9\u5f0f\uff1a\n\n\ud83d\ude80 **\u529f\u80fd\u8d21\u732e**:\n- \u65b0\u7684\u7b97\u6cd5\u5b9e\u73b0\uff08\u6570\u503c\u8ba1\u7b97\u3001\u7edf\u8ba1\u5206\u6790\u3001\u673a\u5668\u5b66\u4e60\u7b49\uff09\n- \u6027\u80fd\u4f18\u5316\uff08\u52a0\u901f\u73b0\u6709\u51fd\u6570\u3001\u5e76\u884c\u5316\u5904\u7406\uff09\n- \u65b0\u6a21\u5757\u5f00\u53d1\uff08\u521b\u5efa\u5168\u65b0\u7684\u529f\u80fd\u9886\u57df\uff09\n\n\ud83d\udcdd **\u6587\u6863\u8d21\u732e**:\n- \u6539\u8fdb\u51fd\u6570\u6587\u6863\u548c\u4f7f\u7528\u793a\u4f8b\n- \u6dfb\u52a0\u6559\u7a0b\u548c\u6700\u4f73\u5b9e\u8df5\u6307\u5357\n- \u7ffb\u8bd1\u6587\u6863\u5230\u5176\u4ed6\u8bed\u8a00\n\n\ud83e\uddea **\u6d4b\u8bd5\u548c\u8d28\u91cf\u4fdd\u8bc1**:\n- \u6dfb\u52a0\u66f4\u591a\u6d4b\u8bd5\u7528\u4f8b\n- \u6539\u8fdb\u6d4b\u8bd5\u8986\u76d6\u7387\n- \u53d1\u73b0\u548c\u4fee\u590dbug\n\n\ud83d\udd27 **\u5de5\u7a0b\u6539\u8fdb**:\n- CI/CD\u6d41\u7a0b\u4f18\u5316\n- \u6784\u5efa\u7cfb\u7edf\u6539\u8fdb\n- \u914d\u7f6e\u6587\u4ef6\u548c\u811a\u672c\u4f18\u5316\n\n\ud83d\udca1 **\u60f3\u6cd5\u548c\u5efa\u8bae**:\n- \u63d0\u51fa\u65b0\u529f\u80fd\u8bf7\u6c42\n- \u62a5\u544a\u95ee\u9898\u548c\u6539\u8fdb\u5efa\u8bae\n- \u53c2\u4e0e\u8bbe\u8ba1\u8ba8\u8bba\n\n### \u5f00\u53d1\u73af\u5883\u8bbe\u7f6e\n\n**\u5fc5\u8981\u5de5\u5177**:\n```bash\n# 1. \u5b89\u88c5Rust\u5de5\u5177\u94fe\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\nsource ~/.cargo/env\n\n# 2. \u786e\u4fddPython\u73af\u5883\uff08\u652f\u6301Python 3.8+\uff09\n# \u53ef\u4ee5\u4f7f\u7528\u73b0\u6709\u7684Python\u73af\u5883\uff0c\u65e0\u9700\u521b\u5efa\u65b0\u73af\u5883\npython --version  # \u786e\u8ba4\u7248\u672c >= 3.8\n\n# 3. \u5b89\u88c5\u6784\u5efa\u5de5\u5177\npip install maturin\n\n# 4. \u5b89\u88c5\u53ef\u9009\u7684\u5f00\u53d1\u4f9d\u8d56\npip install numpy pandas pytest  # \u7528\u4e8e\u6d4b\u8bd5\u548c\u9a8c\u8bc1\n```\n\n**Fork\u548c\u514b\u9686\u9879\u76ee**:\n```bash\n# 1. \u5728GitHub\u4e0aFork\u9879\u76ee\u5230\u4f60\u7684\u8d26\u6237\n# \u8bbf\u95ee https://github.com/chen-001/rust_pyfunc \u70b9\u51fbFork\n\n# 2. \u514b\u9686\u4f60\u7684Fork\ngit clone https://github.com/your-username/rust_pyfunc.git\ncd rust_pyfunc\n\n# 3. \u6dfb\u52a0\u539f\u59cb\u4ed3\u5e93\u4e3aupstream\uff08\u4fdd\u6301\u4e0e\u4e3b\u4ed3\u5e93\u540c\u6b65\uff09\ngit remote add upstream https://github.com/chen-001/rust_pyfunc.git\n\n# 4. \u9a8c\u8bc1\u73af\u5883\nmaturin --version\n```\n\n### Upstream\u8fdc\u7a0b\u4ed3\u5e93\u7684\u4f5c\u7528\u4e0e\u4f7f\u7528\n\n**Upstream\u7684\u597d\u5904**\uff1a\n- \ud83d\udd04 **\u4fdd\u6301\u540c\u6b65**: \u968f\u65f6\u83b7\u53d6\u4e3b\u4ed3\u5e93\u7684\u6700\u65b0\u66f4\u65b0\n- \ud83d\ude80 **\u6e05\u6d01\u7684PR**: \u57fa\u4e8e\u6700\u65b0\u4ee3\u7801\u521b\u5efaPull Request\n- \ud83d\udd00 **\u51b2\u7a81\u9884\u9632**: \u53ca\u65f6\u53d1\u73b0\u548c\u89e3\u51b3\u5408\u5e76\u51b2\u7a81\n- \ud83d\udcc8 **\u534f\u4f5c\u4fbf\u5229**: \u4e0e\u5176\u4ed6\u8d21\u732e\u8005\u4fdd\u6301\u4ee3\u7801\u4e00\u81f4\u6027\n\n**\u5e38\u7528\u64cd\u4f5c\u6d41\u7a0b**\uff1a\n```bash\n# \u83b7\u53d6\u4e3b\u4ed3\u5e93\u6700\u65b0\u66f4\u6539\ngit fetch upstream\n\n# \u5207\u6362\u5230\u672c\u5730main\u5206\u652f\ngit checkout main\n\n# \u5c06upstream\u7684main\u5206\u652f\u5408\u5e76\u5230\u672c\u5730main\ngit merge upstream/main\n\n# \u63a8\u9001\u66f4\u65b0\u5230\u4f60\u7684Fork\ngit push origin main\n\n# \u57fa\u4e8e\u6700\u65b0\u4ee3\u7801\u521b\u5efa\u65b0\u529f\u80fd\u5206\u652f\ngit checkout -b feature/your-new-feature\n\n# \u5f00\u53d1\u5b8c\u6210\u540e\uff0c\u518d\u6b21\u540c\u6b65\uff08\u786e\u4fdd\u6ca1\u6709\u51b2\u7a81\uff09\ngit fetch upstream\ngit rebase upstream/main\n\n# \u63a8\u9001\u529f\u80fd\u5206\u652f\u5e76\u521b\u5efaPR\ngit push origin feature/your-new-feature\n```\n\n**\u6700\u4f73\u5b9e\u8df5\u5efa\u8bae**\uff1a\n- \ud83d\udca1 \u6bcf\u6b21\u5f00\u59cb\u65b0\u529f\u80fd\u524d\u5148\u540c\u6b65\uff1a`git pull upstream main`\n- \ud83d\udd0d \u5b9a\u671f\u68c0\u67e5\u4e3b\u4ed3\u5e93\u66f4\u65b0\uff1a`git fetch upstream && git log upstream/main --oneline -10`\n- \ud83c\udfaf \u4fdd\u6301\u5206\u652f\u6574\u6d01\uff1a\u4f7f\u7528rebase\u800c\u975emerge\u6765\u6574\u7406\u63d0\u4ea4\u5386\u53f2\n- \u26a1 \u5feb\u901f\u540c\u6b65\u547d\u4ee4\uff1a`git fetch upstream && git checkout main && git merge upstream/main && git push origin main`\n\n### \u5feb\u901f\u6784\u5efa\u6307\u5357\n\n**\u63a8\u8350\u7684\u6784\u5efa\u65b9\u5f0f**:\n```bash\n# \u5f00\u53d1\u6a21\u5f0f\u6784\u5efa\uff08\u63a8\u8350\u7528\u4e8e\u5f00\u53d1\uff09\nmaturin develop\n\n# \u67e5\u770b\u8be6\u7ec6\u6784\u5efa\u8f93\u51fa\nmaturin develop --verbose\n\n# \u91ca\u653e\u6a21\u5f0f\u6784\u5efa\uff08\u7528\u4e8e\u6b63\u5f0f\u4f7f\u7528\uff0c\u901f\u5ea6\u66f4\u5feb\uff09\nmaturin develop --release\n```\n\n**\u9a8c\u8bc1\u5b89\u88c5**:\n```bash\n# \u9a8c\u8bc1\u6a21\u5757\u5bfc\u5165\npython -c \"import rust_pyfunc as rp; print('\u2705 \u5bfc\u5165\u6210\u529f')\"\n\n# \u67e5\u770b\u53ef\u7528\u51fd\u6570\npython -c \"import rust_pyfunc as rp; print(dir(rp))\"\n```\n\n### \u6dfb\u52a0\u65b0\u51fd\u6570\u7684\u6b65\u9aa4\n\n#### \u7b2c\u4e00\u6b65\uff1a\u89c4\u5212\u548c\u8bbe\u8ba1\n\n1. **\u9009\u62e9\u6216\u521b\u5efa\u6a21\u5757**\uff1a\n   \n   **\u73b0\u6709\u6a21\u5757**\uff08\u53ef\u9009\u62e9\u52a0\u5165\uff09\uff1a\n   - `time_series/` - \u65f6\u95f4\u5e8f\u5217\u5206\u6790\n   - `statistics/` - \u7edf\u8ba1\u8ba1\u7b97\n   - `sequence/` - \u5e8f\u5217\u5206\u6790\n   - `text/` - \u6587\u672c\u5904\u7406\n   - `parallel_computing/` - \u5e76\u884c\u8ba1\u7b97\n   - `trading_analysis/` - \u4ea4\u6613\u5206\u6790\n\n   **\u521b\u5efa\u65b0\u6a21\u5757**\uff08\u63a8\u8350\u65b9\u5f0f\uff09\uff1a\n   ```bash\n   # \u521b\u5efa\u65b0\u7684\u529f\u80fd\u6a21\u5757\n   mkdir src/your_new_module\n   touch src/your_new_module/mod.rs\n   touch src/your_new_module/your_function.rs\n   ```\n\n2. **\u7f16\u5199Python\u53c2\u8003\u5b9e\u73b0**\uff08\u91cd\u8981\uff01\u7528\u4e8e\u9a8c\u8bc1\u6b63\u786e\u6027\uff09\uff1a\n```python\n# \u793a\u4f8b\uff1a\u5728tests/\u76ee\u5f55\u4e0b\u521b\u5efa\u6d4b\u8bd5\u6587\u4ef6\ndef python_prototype(data):\n    \"\"\"Python\u5b9e\u73b0\u7248\u672c\uff0c\u7528\u4e8e\u9a8c\u8bc1\u6b63\u786e\u6027\"\"\"\n    # \u5b9e\u73b0\u7b97\u6cd5\u903b\u8f91\n    return result\n```\n\n#### \u7b2c\u4e8c\u6b65\uff1aRust\u5b9e\u73b0\n\n1. **\u521b\u5efa\u6216\u4fee\u6539Rust\u6a21\u5757**\uff08\u63a8\u8350\u521b\u5efa\u65b0\u6587\u4ef6\uff09\uff1a\n```rust\n// src/your_module/your_function.rs\nuse pyo3::prelude::*;\nuse numpy::{PyArray1, PyReadonlyArray1};\n\n#[pyfunction]\npub fn your_function_name(\n    input: PyReadonlyArray1<f64>,\n    param: f64,\n) -> PyResult<Py<PyArray1<f64>>> {\n    // Rust\u5b9e\u73b0\n    // \u6ce8\u610f\uff1a\u6dfb\u52a0\u8fb9\u754c\u68c0\u67e5\u548c\u9519\u8bef\u5904\u7406\n    todo!()\n}\n```\n\n2. **\u5728\u6a21\u5757\u4e2d\u58f0\u660e\u51fd\u6570**\uff1a\n```rust\n// src/your_new_module/mod.rs\npub mod your_function;\npub use your_function::*;\n```\n\n3. **\u5728lib.rs\u4e2d\u6dfb\u52a0\u6a21\u5757\u548c\u5bfc\u51fa\u51fd\u6570**\uff1a\n```rust\n// src/lib.rs \n// \u6dfb\u52a0\u6a21\u5757\u58f0\u660e\uff08\u6587\u4ef6\u9876\u90e8\u9644\u8fd1\uff09\nmod your_new_module;\n\n// \u5728#[pymodule]\u51fd\u6570\u4e2d\u5bfc\u51fa\uff08\u7ea621-65\u884c\uff09\n#[pymodule]\nfn rust_pyfunc(_py: Python, m: &PyModule) -> PyResult<()> {\n    // ... existing functions ...\n    m.add_function(wrap_pyfunction!(your_new_module::your_function_name, m)?)?;\n    Ok(())\n}\n```\n\n**\u65b0\u6a21\u5757\u7684\u5b8c\u6574\u7ed3\u6784**\uff1a\n```\nsrc/your_new_module/\n\u251c\u2500\u2500 mod.rs          # \u6a21\u5757\u58f0\u660e\u6587\u4ef6\n\u251c\u2500\u2500 your_function.rs # \u5177\u4f53\u51fd\u6570\u5b9e\u73b0\n\u2514\u2500\u2500 utils.rs        # \uff08\u53ef\u9009\uff09\u8f85\u52a9\u51fd\u6570\n```\n\n#### \u7b2c\u4e09\u6b65\uff1a\u6dfb\u52a0\u7c7b\u578b\u63d0\u793a\n\n**\u521b\u5efa\u65b0\u7684\u7c7b\u578b\u63d0\u793a\u6587\u4ef6**\uff08\u5982\u679c\u662f\u65b0\u6a21\u5757\uff09\uff1a\n```python\n# python/rust_pyfunc/your_new_module.pyi\n\"\"\"Your new module type hints\"\"\"\nfrom typing import Optional\nimport numpy as np\nfrom numpy.typing import NDArray\n\ndef your_function_name(\n    input: NDArray[np.float64],\n    param: float,\n) -> NDArray[np.float64]:\n    \"\"\"\u8be6\u7ec6\u7684\u51fd\u6570\u6587\u6863\n    \n    \u53c2\u6570\u8bf4\u660e\uff1a\n    ----------\n    input : NDArray[np.float64]\n        \u8f93\u5165\u6570\u636e\u63cf\u8ff0\n    param : float\n        \u53c2\u6570\u63cf\u8ff0\n        \n    \u8fd4\u56de\u503c\uff1a\n    -------\n    NDArray[np.float64]\n        \u8fd4\u56de\u503c\u63cf\u8ff0\n        \n    \u793a\u4f8b\uff1a\n    -------\n    >>> import rust_pyfunc as rp\n    >>> result = rp.your_function_name(data, 1.5)\n    \"\"\"\n    ...\n```\n\n\u5982\u679c\u662f\u52a0\u5165\u73b0\u6709\u6a21\u5757\uff0c\u5219\u5728\u5bf9\u5e94\u7684.pyi\u6587\u4ef6\u4e2d\u6dfb\u52a0\u51fd\u6570\u58f0\u660e\u5373\u53ef\u3002\n\n#### \u7b2c\u56db\u6b65\uff1a\u7f16\u5199\u6d4b\u8bd5\n\n**\u5728tests/\u76ee\u5f55\u4e0b\u521b\u5efa\u6d4b\u8bd5\u6587\u4ef6**\uff1a\n```python\n# tests/test_your_function.py\nimport numpy as np\nimport rust_pyfunc as rp\nimport time\n\ndef python_reference_implementation(data, param=1.5):\n    \"\"\"Python\u53c2\u8003\u5b9e\u73b0 - \u5fc5\u987b\u5148\u5b9e\u73b0\u8fd9\u4e2a\uff01\n    \n    \u8fd9\u4e2a\u51fd\u6570\u662f\u9a8c\u8bc1Rust\u5b9e\u73b0\u6b63\u786e\u6027\u7684\u91d1\u6807\u51c6\u3002\n    \u8bf7\u7528\u6700\u76f4\u89c2\u3001\u6700\u5bb9\u6613\u7406\u89e3\u7684\u65b9\u5f0f\u5b9e\u73b0\u7b97\u6cd5\u903b\u8f91\u3002\n    \"\"\"\n    import numpy as np\n    # \u8fd9\u91cc\u5b9e\u73b0\u4f60\u7684\u7b97\u6cd5\u903b\u8f91\n    # \u4f8b\u5982\uff1a\u8ba1\u7b97\u67d0\u79cd\u79fb\u52a8\u5e73\u5747\n    result = []\n    for i in range(len(data)):\n        if i == 0:\n            result.append(data[i])\n        else:\n            # \u6307\u6570\u79fb\u52a8\u5e73\u5747\u793a\u4f8b\n            result.append(param * data[i] + (1 - param) * result[-1])\n    return np.array(result)\n\ndef test_correctness():\n    \"\"\"\u6b63\u786e\u6027\u9a8c\u8bc1 - \u6700\u91cd\u8981\u7684\u6d4b\u8bd5\uff01\"\"\"\n    # \u751f\u6210\u591a\u79cd\u6d4b\u8bd5\u6570\u636e\n    test_cases = [\n        np.random.randn(100),           # \u968f\u673a\u6570\u636e\n        np.arange(50, dtype=float),     # \u9012\u589e\u5e8f\u5217\n        np.ones(30) * 5.0,              # \u5e38\u6570\u5e8f\u5217\n        np.array([1.0, -1.0] * 25),     # \u4ea4\u66ff\u5e8f\u5217\n    ]\n    \n    for i, data in enumerate(test_cases):\n        print(f\"\ud83e\uddea \u6d4b\u8bd5\u7528\u4f8b {i+1}: \u957f\u5ea6={len(data)}\")\n        \n        # Python\u53c2\u8003\u5b9e\u73b0\n        python_result = python_reference_implementation(data, 1.5)\n        \n        # Rust\u5b9e\u73b0\n        rust_result = rp.your_function_name(data, 1.5)\n        \n        # \u4e25\u683c\u6bd4\u8f83\u7ed3\u679c\n        np.testing.assert_allclose(\n            rust_result, python_result, \n            rtol=1e-12, atol=1e-15,\n            err_msg=f\"\u6d4b\u8bd5\u7528\u4f8b {i+1} \u5931\u8d25\"\n        )\n        print(f\"   \u2705 \u6d4b\u8bd5\u7528\u4f8b {i+1} \u901a\u8fc7\")\n    \n    print(\"\ud83c\udf89 \u6240\u6709\u6b63\u786e\u6027\u6d4b\u8bd5\u901a\u8fc7\uff01\")\n\ndef test_performance():\n    \"\"\"\u6027\u80fd\u5bf9\u6bd4\u6d4b\u8bd5 - \u5c55\u793aRust\u7684\u4f18\u52bf\"\"\"\n    print(\"\ud83c\udfc3\u200d\u2642\ufe0f \u5f00\u59cb\u6027\u80fd\u6d4b\u8bd5...\")\n    \n    # \u591a\u79cd\u89c4\u6a21\u7684\u6d4b\u8bd5\u6570\u636e\n    test_sizes = [1000, 10000, 100000]\n    \n    for size in test_sizes:\n        print(f\"\\n\ud83d\udcca \u6d4b\u8bd5\u6570\u636e\u89c4\u6a21: {size:,} \u4e2a\u5143\u7d20\")\n        data = np.random.randn(size)\n        \n        # \u9884\u70ed\uff08\u907f\u514d\u9996\u6b21\u8c03\u7528\u7684\u5f00\u9500\uff09\n        _ = python_reference_implementation(data[:100])\n        _ = rp.your_function_name(data[:100], 1.5)\n        \n        # \u6d4b\u8bd5Python\u7248\u672c\n        print(\"   \u23f1\ufe0f  \u6d4b\u8bd5Python\u5b9e\u73b0...\")\n        python_times = []\n        for _ in range(10):  # \u591a\u6b21\u6d4b\u8bd5\u53d6\u5e73\u5747\n            start = time.perf_counter()\n            python_result = python_reference_implementation(data, 1.5)\n            python_times.append(time.perf_counter() - start)\n        avg_python_time = sum(python_times) / len(python_times)\n        \n        # \u6d4b\u8bd5Rust\u7248\u672c\n        print(\"   \u26a1 \u6d4b\u8bd5Rust\u5b9e\u73b0...\")\n        rust_times = []\n        for _ in range(10):  # \u591a\u6b21\u6d4b\u8bd5\u53d6\u5e73\u5747\n            start = time.perf_counter()\n            rust_result = rp.your_function_name(data, 1.5)\n            rust_times.append(time.perf_counter() - start)\n        avg_rust_time = sum(rust_times) / len(rust_times)\n        \n        # \u8ba1\u7b97\u6027\u80fd\u63d0\u5347\n        speedup = avg_python_time / avg_rust_time\n        \n        print(f\"   \ud83d\udcc8 Python: {avg_python_time*1000:.2f}ms\")\n        print(f\"   \ud83d\ude80 Rust:   {avg_rust_time*1000:.2f}ms\")\n        print(f\"   \u26a1 \u52a0\u901f\u6bd4: {speedup:.1f}x\")\n        \n        # \u9a8c\u8bc1\u7ed3\u679c\u4e00\u81f4\u6027\n        np.testing.assert_allclose(rust_result, python_result, rtol=1e-10)\n        print(f\"   \u2705 \u7ed3\u679c\u9a8c\u8bc1\u901a\u8fc7\")\n    \n    print(f\"\\n\ud83c\udfaf \u6027\u80fd\u6d4b\u8bd5\u5b8c\u6210\uff01Rust\u5b9e\u73b0\u5c55\u73b0\u4e86\u663e\u8457\u7684\u6027\u80fd\u4f18\u52bf\u3002\")\n\nif __name__ == \"__main__\":\n    test_correctness()\n    test_performance()\n```\n\n#### \u7b2c\u4e94\u6b65\uff1a\u6784\u5efa\u548c\u6d4b\u8bd5\n\n```bash\n# \u6784\u5efa\u9879\u76ee\nmaturin develop\n# \u6216\u4f7f\u7528\u9879\u76ee\u7684\u5feb\u6377\u811a\u672c\n./alter.sh 2>&1\n\n# \u8fd0\u884c\u6d4b\u8bd5\npython tests/test_your_function.py\n\n# \u9a8c\u8bc1\u5bfc\u5165\npython -c \"import rust_pyfunc as rp; print('\u2705 \u6a21\u5757\u5bfc\u5165\u6210\u529f')\"\npython -c \"import rust_pyfunc as rp; print(dir(rp))\"  # \u67e5\u770b\u6240\u6709\u53ef\u7528\u51fd\u6570\n```\n\n**\u91cd\u8981\u63d0\u9192**\uff1a\n- \u26a0\ufe0f **\u5fc5\u987b\u5148\u5199Python\u53c2\u8003\u5b9e\u73b0**\uff0c\u7528\u4e8e\u9a8c\u8bc1Rust\u7248\u672c\u7684\u6b63\u786e\u6027\n- \ud83e\uddea **\u591a\u79cd\u6d4b\u8bd5\u7528\u4f8b**\uff1a\u968f\u673a\u6570\u636e\u3001\u8fb9\u754c\u6761\u4ef6\u3001\u7279\u6b8a\u503c\n- \u26a1 **\u6027\u80fd\u6d4b\u8bd5**\uff1a\u5c55\u793aRust\u76f8\u5bf9\u4e8ePython\u7684\u52a0\u901f\u6548\u679c\n- \ud83d\udcdd **\u8be6\u7ec6\u6587\u6863**\uff1a\u51fd\u6570\u7528\u9014\u3001\u53c2\u6570\u3001\u8fd4\u56de\u503c\u3001\u4f7f\u7528\u793a\u4f8b\n\n### \u4ee3\u7801\u89c4\u8303\n\n#### Rust\u4ee3\u7801\u89c4\u8303\n\n```rust\n// \u2705 \u597d\u7684\u793a\u4f8b\n#[pyfunction]\npub fn calculate_moving_average(\n    data: PyReadonlyArray1<f64>,\n    window: usize,\n) -> PyResult<Py<PyArray1<f64>>> {\n    let data = data.as_array();\n    let n = data.len();\n    \n    // \u8fb9\u754c\u68c0\u67e5\n    if window == 0 || window > n {\n        return Err(PyErr::new::<pyo3::exceptions::PyValueError, _>(\n            \"\u7a97\u53e3\u5927\u5c0f\u5fc5\u987b\u57281\u5230\u6570\u636e\u957f\u5ea6\u4e4b\u95f4\"\n        ));\n    }\n    \n    let mut result = Vec::with_capacity(n - window + 1);\n    \n    // \u4f7f\u7528\u8fed\u4ee3\u5668\u548c\u5e76\u884c\u5904\u7406\uff08\u5982\u679c\u9002\u7528\uff09\n    for i in 0..=(n - window) {\n        let sum: f64 = data.slice(s![i..i + window]).sum();\n        result.push(sum / window as f64);\n    }\n    \n    Python::with_gil(|py| {\n        Ok(PyArray1::from_vec(py, result).to_owned())\n    })\n}\n```\n\n#### \u5fc5\u987b\u9075\u5faa\u7684\u5b89\u5168\u89c4\u8303\n\n1. **\u8fb9\u754c\u68c0\u67e5**: \u6240\u6709\u6570\u7ec4\u8bbf\u95ee\u90fd\u8981\u68c0\u67e5\u8fb9\u754c\n2. **\u9519\u8bef\u5904\u7406**: \u4f7f\u7528`PyResult`\u548c\u9002\u5f53\u7684\u9519\u8bef\u7c7b\u578b\n3. **\u5185\u5b58\u7ba1\u7406**: \u907f\u514d\u5185\u5b58\u6cc4\u6f0f\uff0c\u6b63\u786e\u4f7f\u7528`Python::with_gil`\n4. **\u5e76\u53d1\u5b89\u5168**: \u5982\u679c\u4f7f\u7528\u5e76\u884c\uff0c\u786e\u4fdd\u7ebf\u7a0b\u5b89\u5168\n\n#### \u6027\u80fd\u4f18\u5316\u5efa\u8bae\n\n```rust\n// \u4f7f\u7528rayon\u5e76\u884c\u5904\u7406\nuse rayon::prelude::*;\n\n// \u5e76\u884c\u7248\u672c\nlet result: Vec<f64> = (0..=n-window)\n    .into_par_iter()\n    .map(|i| {\n        let sum: f64 = data.slice(s![i..i + window]).sum();\n        sum / window as f64\n    })\n    .collect();\n```\n\n### \u6587\u6863\u8981\u6c42\n\n\u6bcf\u4e2a\u51fd\u6570\u90fd\u9700\u8981\u5305\u542b\uff1a\n\n1. **\u529f\u80fd\u63cf\u8ff0**: \u6e05\u6670\u8bf4\u660e\u51fd\u6570\u7528\u9014\n2. **\u53c2\u6570\u8bf4\u660e**: \u6bcf\u4e2a\u53c2\u6570\u7684\u7c7b\u578b\u3001\u542b\u4e49\u3001\u7ea6\u675f\n3. **\u8fd4\u56de\u503c\u8bf4\u660e**: \u8fd4\u56de\u503c\u7c7b\u578b\u548c\u542b\u4e49\n4. **\u6027\u80fd\u7279\u6027**: \u65f6\u95f4\u590d\u6742\u5ea6\u3001\u9884\u671f\u901f\u5ea6\u63d0\u5347\n5. **\u4f7f\u7528\u793a\u4f8b**: \u81f3\u5c112\u4e2a\u5b9e\u9645\u4f7f\u7528\u6848\u4f8b\n6. **\u6ce8\u610f\u4e8b\u9879**: \u4f7f\u7528\u9650\u5236\u3001\u8fb9\u754c\u6761\u4ef6\n\n### \u8d21\u732e\u6d41\u7a0b\uff08Fork + Pull Request\uff09\n\n#### \u7b2c\u4e00\u6b65\uff1aFork\u548c\u8bbe\u7f6e\n\n```bash\n# 1. \u5728GitHub\u4e0aFork\u9879\u76ee\n# \u8bbf\u95ee https://github.com/chen-001/rust_pyfunc\n# \u70b9\u51fb\u53f3\u4e0a\u89d2\u7684 \"Fork\" \u6309\u94ae\n\n# 2. \u514b\u9686\u4f60\u7684Fork\u5230\u672c\u5730\ngit clone https://github.com/your-username/rust_pyfunc.git\ncd rust_pyfunc\n\n# 3. \u6dfb\u52a0\u539f\u4ed3\u5e93\u4e3aupstream\uff08\u4fdd\u6301\u540c\u6b65\u7528\uff09\ngit remote add upstream https://github.com/chen-001/rust_pyfunc.git\n\n# 4. \u9a8c\u8bc1\u8fdc\u7a0b\u4ed3\u5e93\u914d\u7f6e\ngit remote -v\n# origin    https://github.com/your-username/rust_pyfunc.git (fetch)\n# origin    https://github.com/your-username/rust_pyfunc.git (push)\n# upstream  https://github.com/chen-001/rust_pyfunc.git (fetch)\n# upstream  https://github.com/chen-001/rust_pyfunc.git (push)\n```\n\n#### \u7b2c\u4e8c\u6b65\uff1a\u521b\u5efa\u529f\u80fd\u5206\u652f\n\n```bash\n# 1. \u786e\u4fdd\u5728main\u5206\u652f\u4e14\u662f\u6700\u65b0\u7684\ngit checkout main\ngit pull upstream main\n\n# 2. \u521b\u5efa\u5e76\u5207\u6362\u5230\u529f\u80fd\u5206\u652f\ngit checkout -b feature/your-function-name\n# \u6216\u8005\u521b\u5efa\u4fee\u590d\u5206\u652f\ngit checkout -b fix/issue-description\n```\n\n#### \u7b2c\u4e09\u6b65\uff1a\u5f00\u53d1\u548c\u63d0\u4ea4\n\n```bash\n# \u5f00\u53d1\u4f60\u7684\u529f\u80fd...\n# \u6309\u7167\u524d\u9762\u7684\u6b65\u9aa4\u6dfb\u52a0Rust\u5b9e\u73b0\u3001\u7c7b\u578b\u63d0\u793a\u3001\u6d4b\u8bd5\u7b49\n\n# \u5206\u9636\u6bb5\u63d0\u4ea4\uff0c\u4fdd\u6301\u63d0\u4ea4\u5386\u53f2\u6e05\u6670\ngit add src/your_new_module/\ngit commit -m \"feat: \u6dfb\u52a0your_function_name\u7684Rust\u5b9e\u73b0\n\n- \u5b9e\u73b0\u9ad8\u6027\u80fd\u7b97\u6cd5XYZ\n- \u652f\u6301\u591a\u79cd\u6570\u636e\u7c7b\u578b\u8f93\u5165\n- \u5305\u542b\u5b8c\u6574\u7684\u9519\u8bef\u5904\u7406\"\n\ngit add python/rust_pyfunc/your_new_module.pyi\ngit commit -m \"docs: \u6dfb\u52a0your_function_name\u7684\u7c7b\u578b\u63d0\u793a\n\n- \u5b8c\u6574\u7684\u51fd\u6570\u7b7e\u540d\u548c\u6587\u6863\n- \u8be6\u7ec6\u7684\u53c2\u6570\u8bf4\u660e\u548c\u793a\u4f8b\"\n\ngit add tests/test_your_function.py\ngit commit -m \"test: \u6dfb\u52a0your_function_name\u7684\u6d4b\u8bd5\n\n- \u6b63\u786e\u6027\u9a8c\u8bc1\u6d4b\u8bd5\n- \u591a\u573a\u666f\u6027\u80fd\u5bf9\u6bd4\u6d4b\u8bd5\n- \u8fb9\u754c\u6761\u4ef6\u6d4b\u8bd5\"\n```\n\n#### \u7b2c\u56db\u6b65\uff1a\u6d4b\u8bd5\u548c\u9a8c\u8bc1\n\n```bash\n# \u6784\u5efa\u9879\u76ee\nmaturin develop\n\n# \u8fd0\u884c\u4f60\u7684\u6d4b\u8bd5\npython tests/test_your_function.py\n\n# \u8fd0\u884c\u6240\u6709\u6d4b\u8bd5\uff08\u786e\u4fdd\u6ca1\u6709\u7834\u574f\u73b0\u6709\u529f\u80fd\uff09\npython -m pytest tests/ -v\n\n# \u68c0\u67e5\u4ee3\u7801\u683c\u5f0f\uff08\u5982\u679c\u9879\u76ee\u6709linting\u914d\u7f6e\uff09\ncargo fmt --check\ncargo clippy\n```\n\n#### \u7b2c\u4e94\u6b65\uff1a\u63a8\u9001\u548c\u521b\u5efaPull Request\n\n```bash\n# \u63a8\u9001\u5230\u4f60\u7684Fork\ngit push origin feature/your-function-name\n\n# \u5982\u679c\u662f\u7b2c\u4e00\u6b21\u63a8\u9001\u8fd9\u4e2a\u5206\u652f\ngit push -u origin feature/your-function-name\n```\n\n\u7136\u540e\u5728GitHub\u4e0a\uff1a\n1. \u8bbf\u95ee\u4f60\u7684Fork\u9875\u9762\n2. GitHub\u4f1a\u63d0\u793a\u521b\u5efaPull Request\uff0c\u70b9\u51fb \"Compare & pull request\"\n3. \u586b\u5199PR\u4fe1\u606f\uff08\u89c1\u4e0b\u9762\u7684\u6a21\u677f\uff09\n\n#### Pull Request\u6a21\u677f\n\n**\u6807\u9898\u683c\u5f0f**\uff1a\n- `feat: \u6dfb\u52a0your_function_name\u51fd\u6570` \uff08\u65b0\u529f\u80fd\uff09\n- `fix: \u4fee\u590dissue_description` \uff08bug\u4fee\u590d\uff09\n- `docs: \u6539\u8fdbdocumentation_part` \uff08\u6587\u6863\u6539\u8fdb\uff09\n- `test: \u6dfb\u52a0test_description` \uff08\u6d4b\u8bd5\u6539\u8fdb\uff09\n\n**PR\u63cf\u8ff0\u6a21\u677f**\uff1a\n```markdown\n## \ud83d\udcdd \u53d8\u66f4\u63cf\u8ff0\n\u7b80\u8981\u63cf\u8ff0\u6b64PR\u7684\u76ee\u7684\u548c\u5b9e\u73b0\u7684\u529f\u80fd\n\n## \u2728 \u65b0\u589e\u529f\u80fd\n- \u5b9e\u73b0\u4e86\u9ad8\u6027\u80fd\u7684XXX\u7b97\u6cd5\n- \u652f\u6301YYY\u6570\u636e\u7c7b\u578b\n- \u63d0\u4f9bZZZ\u63a5\u53e3\n\n## \ud83d\ude80 \u6027\u80fd\u63d0\u5347\n- \u76f8\u6bd4Python\u5b9e\u73b0\u63d0\u5347 XX \u500d\n- \u5904\u7406100\u4e07\u6570\u636e\u70b9\u4ec5\u9700 XX ms\n- \u5185\u5b58\u4f7f\u7528\u51cf\u5c11 XX%\n\n## \ud83e\uddea \u6d4b\u8bd5\u60c5\u51b5\n- [x] \u6b63\u786e\u6027\u6d4b\u8bd5\u901a\u8fc7\n- [x] \u6027\u80fd\u6d4b\u8bd5\u5b8c\u6210\n- [x] \u8fb9\u754c\u6761\u4ef6\u6d4b\u8bd5\n- [x] \u73b0\u6709\u529f\u80fd\u56de\u5f52\u6d4b\u8bd5\n\n## \ud83d\udcca \u6027\u80fd\u6d4b\u8bd5\u7ed3\u679c\n```\n\u6570\u636e\u89c4\u6a21    | Python\u65f6\u95f4 | Rust\u65f6\u95f4  | \u52a0\u901f\u6bd4\n----------|-----------|----------|-------\n1,000     | 10.5ms    | 0.8ms    | 13.1x\n10,000    | 105ms     | 7.2ms    | 14.6x\n100,000   | 1.05s     | 72ms     | 14.6x\n```\n\n## \ud83d\udd17 \u76f8\u5173Issue\n\u4fee\u590d #issue_number \uff08\u5982\u679c\u6709\u76f8\u5173issue\uff09\n\n## \u2705 \u68c0\u67e5\u6e05\u5355\n- [x] \u4ee3\u7801\u7f16\u8bd1\u901a\u8fc7\n- [x] \u6240\u6709\u6d4b\u8bd5\u901a\u8fc7\n- [x] \u6dfb\u52a0\u4e86\u7c7b\u578b\u63d0\u793a\n- [x] \u66f4\u65b0\u4e86\u6587\u6863\n- [x] \u9075\u5faa\u4e86\u4ee3\u7801\u89c4\u8303\n```\n\n### \u793a\u4f8b\uff1a\u5b8c\u6574\u7684\u8d21\u732e\u6d41\u7a0b\n\n\u5047\u8bbe\u6211\u4eec\u8981\u6dfb\u52a0\u4e00\u4e2a\u8ba1\u7b97\u6307\u6570\u79fb\u52a8\u5e73\u5747(EMA)\u7684\u51fd\u6570\uff0c\u5b8c\u6574\u7684\u8d21\u732e\u8fc7\u7a0b\u5982\u4e0b\uff1a\n\n#### \u51c6\u5907\u9636\u6bb5\n```bash\n# 1. Fork\u9879\u76ee\u5e76\u514b\u9686\ngit clone https://github.com/your-username/rust_pyfunc.git\ncd rust_pyfunc\ngit remote add upstream https://github.com/chen-001/rust_pyfunc.git\n\n# 2. \u521b\u5efa\u529f\u80fd\u5206\u652f\ngit checkout main\ngit pull upstream main\ngit checkout -b feature/exponential-moving-average\n```\n\n#### \u5f00\u53d1\u9636\u6bb5\n```bash\n# 3. \u521b\u5efa\u65b0\u6a21\u5757\u7ed3\u6784\nmkdir -p src/moving_averages\ntouch src/moving_averages/mod.rs\ntouch src/moving_averages/ema.rs\n\n# 4. \u5b9e\u73b0Python\u53c2\u8003\u7248\u672c\uff08\u91cd\u8981\uff01\uff09\n# tests/test_ema.py - \u5148\u5199Python\u5b9e\u73b0\u7528\u4e8e\u9a8c\u8bc1\n```\n\n**Python\u53c2\u8003\u5b9e\u73b0**\uff1a\n```python\n# tests/test_ema.py\nimport numpy as np\n\ndef python_ema(data, alpha=0.1):\n    \"\"\"Python\u53c2\u8003\u5b9e\u73b0 - \u6307\u6570\u79fb\u52a8\u5e73\u5747\"\"\"\n    result = np.zeros_like(data)\n    result[0] = data[0]\n    for i in range(1, len(data)):\n        result[i] = alpha * data[i] + (1 - alpha) * result[i-1]\n    return result\n```\n\n**Rust\u5b9e\u73b0**\uff1a\n```rust\n// src/moving_averages/ema.rs\nuse pyo3::prelude::*;\nuse numpy::{PyArray1, PyReadonlyArray1};\n\n#[pyfunction]\npub fn exponential_moving_average(\n    data: PyReadonlyArray1<f64>,\n    alpha: f64,\n) -> PyResult<Py<PyArray1<f64>>> {\n    let data = data.as_array();\n    let n = data.len();\n    \n    if alpha <= 0.0 || alpha > 1.0 {\n        return Err(PyErr::new::<pyo3::exceptions::PyValueError, _>(\n            \"alpha\u5fc5\u987b\u5728(0, 1]\u8303\u56f4\u5185\"\n        ));\n    }\n    \n    let mut result = Vec::with_capacity(n);\n    if n > 0 {\n        result.push(data[0]);\n        for i in 1..n {\n            let ema = alpha * data[i] + (1.0 - alpha) * result[i-1];\n            result.push(ema);\n        }\n    }\n    \n    Python::with_gil(|py| {\n        Ok(PyArray1::from_vec(py, result).to_owned())\n    })\n}\n```\n\n#### \u96c6\u6210\u548c\u6d4b\u8bd5\n```bash\n# 5. \u6dfb\u52a0\u5230\u6a21\u5757\u7cfb\u7edf\necho \"pub mod ema;\" >> src/moving_averages/mod.rs\necho \"pub use ema::*;\" >> src/moving_averages/mod.rs\n\n# \u5728src/lib.rs\u4e2d\u6dfb\u52a0\n# mod moving_averages;\n# m.add_function(wrap_pyfunction!(moving_averages::exponential_moving_average, m)?)?;\n\n# 6. \u521b\u5efa\u7c7b\u578b\u63d0\u793a\u6587\u4ef6\n# python/rust_pyfunc/moving_averages.pyi\n\n# 7. \u6784\u5efa\u548c\u6d4b\u8bd5\nmaturin develop\npython tests/test_ema.py\n\n# 8. \u5206\u9636\u6bb5\u63d0\u4ea4\ngit add src/moving_averages/\ngit commit -m \"feat: \u5b9e\u73b0\u6307\u6570\u79fb\u52a8\u5e73\u5747(EMA)\u7684Rust\u6838\u5fc3\u7b97\u6cd5\n\n- \u9ad8\u6027\u80fdEMA\u8ba1\u7b97\uff0c\u652f\u6301\u4efb\u610falpha\u53c2\u6570\n- \u5b8c\u6574\u7684\u8fb9\u754c\u68c0\u67e5\u548c\u9519\u8bef\u5904\u7406\n- \u5185\u5b58\u9ad8\u6548\u7684\u5411\u91cf\u5316\u5b9e\u73b0\"\n\ngit add python/rust_pyfunc/moving_averages.pyi\ngit commit -m \"docs: \u6dfb\u52a0EMA\u51fd\u6570\u7684\u7c7b\u578b\u63d0\u793a\u548c\u6587\u6863\n\n- \u5b8c\u6574\u7684\u51fd\u6570\u7b7e\u540d\u548c\u53c2\u6570\u8bf4\u660e\n- \u8be6\u7ec6\u7684\u4f7f\u7528\u793a\u4f8b\u548c\u6ce8\u610f\u4e8b\u9879\"\n\ngit add tests/test_ema.py\ngit commit -m \"test: \u6dfb\u52a0EMA\u51fd\u6570\u7684\u5b8c\u6574\u6d4b\u8bd5\u5957\u4ef6\n\n- Python\u53c2\u8003\u5b9e\u73b0\u7528\u4e8e\u6b63\u786e\u6027\u9a8c\u8bc1\n- \u591a\u89c4\u6a21\u6027\u80fd\u57fa\u51c6\u6d4b\u8bd5\n- \u8fb9\u754c\u6761\u4ef6\u548c\u9519\u8bef\u5904\u7406\u6d4b\u8bd5\n- \u6d4b\u8bd5\u7ed3\u679c\uff1a\u6bd4\u7eafPython\u5b9e\u73b0\u5feb25\u500d\"\n```\n\n#### \u63d0\u4ea4PR\n```bash\n# 9. \u63a8\u9001\u5230\u4f60\u7684Fork\ngit push -u origin feature/exponential-moving-average\n\n# 10. \u5728GitHub\u4e0a\u521b\u5efaPull Request\n# \u6807\u9898\uff1afeat: \u6dfb\u52a0\u6307\u6570\u79fb\u52a8\u5e73\u5747(EMA)\u8ba1\u7b97\u51fd\u6570\n# \u4f7f\u7528\u524d\u9762\u63d0\u4f9b\u7684PR\u6a21\u677f\u586b\u5199\u63cf\u8ff0\n```\n\n**\u9884\u671f\u6027\u80fd\u6d4b\u8bd5\u7ed3\u679c**\uff1a\n```\n\ud83d\udcca EMA\u6027\u80fd\u6d4b\u8bd5\u7ed3\u679c:\n\u6570\u636e\u89c4\u6a21    | Python\u65f6\u95f4 | Rust\u65f6\u95f4  | \u52a0\u901f\u6bd4\n----------|-----------|----------|-------\n1,000     | 2.1ms     | 0.08ms   | 26.3x\n10,000    | 21ms      | 0.8ms    | 26.3x\n100,000   | 210ms     | 8ms      | 26.3x\n```\n\n\u8fd9\u4e2a\u5b8c\u6574\u793a\u4f8b\u5c55\u793a\u4e86\uff1a\n- \u2705 Fork + PR\u7684\u6807\u51c6\u534f\u4f5c\u6d41\u7a0b\n- \u2705 \u521b\u5efa\u65b0\u6a21\u5757\u7684\u5b8c\u6574\u8fc7\u7a0b\n- \u2705 Python\u53c2\u8003\u5b9e\u73b0\u7684\u91cd\u8981\u6027\n- \u2705 \u5206\u9636\u6bb5\u6e05\u6670\u7684git\u63d0\u4ea4\u5386\u53f2\n- \u2705 \u5b8c\u6574\u7684\u6d4b\u8bd5\u548c\u9a8c\u8bc1\u6d41\u7a0b\n\n### \u8d21\u732e\u8005\u652f\u6301\n\n\u5982\u679c\u5728\u8d21\u732e\u8fc7\u7a0b\u4e2d\u9047\u5230\u95ee\u9898\uff1a\n\n1. **\u67e5\u770b\u73b0\u6709\u4ee3\u7801**: \u53c2\u8003`src/time_series/`\u7b49\u6a21\u5757\u7684\u5b9e\u73b0\n2. **\u8fd0\u884c\u6d4b\u8bd5**: \u4f7f\u7528`python -m pytest tests/`\u68c0\u67e5\u56de\u5f52\n3. **\u6027\u80fd\u5206\u6790**: \u4f7f\u7528`criterion`\u8fdb\u884c\u57fa\u51c6\u6d4b\u8bd5\n4. **\u63d0\u51faIssue**: \u5728GitHub\u4e0a\u63cf\u8ff0\u9047\u5230\u7684\u95ee\u9898\n\n\u6211\u4eec\u6b22\u8fce\u4efb\u4f55\u5f62\u5f0f\u7684\u8d21\u732e\uff0c\u4ecebug\u4fee\u590d\u5230\u65b0\u529f\u80fd\u5b9e\u73b0\uff01\n\n## License\n\nMIT License\n\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "A collection of high-performance Python functions implemented in Rust",
    "version": "0.27.0",
    "project_urls": {
        "Source Code": "https://github.com/chen-001/rust_pyfunc"
    },
    "split_keywords": [
        "python",
        " rust",
        " algorithms",
        " performance"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "3aa94ab6b62b5a757eff14c4ea2be514978016b1dfba06f183ff4f06b0e7a784",
                "md5": "3da0d162ec77378c4e059ccbb0a502fe",
                "sha256": "c3088b1d2ec35d46c7564a18f60fec5f3de9d183da092f2271910a5e51b73288"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "3da0d162ec77378c4e059ccbb0a502fe",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 864446,
            "upload_time": "2025-07-21T19:27:22",
            "upload_time_iso_8601": "2025-07-21T19:27:22.285925Z",
            "url": "https://files.pythonhosted.org/packages/3a/a9/4ab6b62b5a757eff14c4ea2be514978016b1dfba06f183ff4f06b0e7a784/rust_pyfunc-0.27.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "a27ed780b94f034e18a1679944232d5bb5484e06f273adfc6d9e34a11ca07602",
                "md5": "354c3bae1d38530fb4e610351e4a7bfb",
                "sha256": "743e3b4e1d113edfe77a21bd1db7e966cc4d11562652da7de9173f931b944e95"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
            "has_sig": false,
            "md5_digest": "354c3bae1d38530fb4e610351e4a7bfb",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 944933,
            "upload_time": "2025-07-21T19:27:24",
            "upload_time_iso_8601": "2025-07-21T19:27:24.338523Z",
            "url": "https://files.pythonhosted.org/packages/a2/7e/d780b94f034e18a1679944232d5bb5484e06f273adfc6d9e34a11ca07602/rust_pyfunc-0.27.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "44a153485cbde5c0343a46024cd315a2e601d43d7724e1c98155b74f3bcf9f80",
                "md5": "31bb836b7a8b899bfd8c1bf1cdc2829c",
                "sha256": "cf5f4963fc3481cce0807fe57533cb3acc2449b7bdb84f54f8b8b41d77bbfc8a"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "31bb836b7a8b899bfd8c1bf1cdc2829c",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 967854,
            "upload_time": "2025-07-21T19:27:25",
            "upload_time_iso_8601": "2025-07-21T19:27:25.670710Z",
            "url": "https://files.pythonhosted.org/packages/44/a1/53485cbde5c0343a46024cd315a2e601d43d7724e1c98155b74f3bcf9f80/rust_pyfunc-0.27.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "40e05e1c706f409d4b0853959cb94cd7688bab0840c6ea57c487fc37b61b6a07",
                "md5": "61a9ea25f5434da3b2c3a4cdc42f6f54",
                "sha256": "b866ebdb1434d4169ab32df5351d65c35058384b5d4988dcb614b4cf118591ff"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "has_sig": false,
            "md5_digest": "61a9ea25f5434da3b2c3a4cdc42f6f54",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 1025754,
            "upload_time": "2025-07-21T19:27:27",
            "upload_time_iso_8601": "2025-07-21T19:27:27.015487Z",
            "url": "https://files.pythonhosted.org/packages/40/e0/5e1c706f409d4b0853959cb94cd7688bab0840c6ea57c487fc37b61b6a07/rust_pyfunc-0.27.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "5ce833de00d02e3881e60012a3465878139e0197ca08d0c8e4f7748830940892",
                "md5": "e35a832892fa8d400d80352aa9851343",
                "sha256": "f252dbea6632113c8d14a1c6ec257480ea28979c9fcb7ff5a8ded6e1ff7316ee"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl",
            "has_sig": false,
            "md5_digest": "e35a832892fa8d400d80352aa9851343",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 1116362,
            "upload_time": "2025-07-21T19:27:28",
            "upload_time_iso_8601": "2025-07-21T19:27:28.649933Z",
            "url": "https://files.pythonhosted.org/packages/5c/e8/33de00d02e3881e60012a3465878139e0197ca08d0c8e4f7748830940892/rust_pyfunc-0.27.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "657dc0ba647cc2e26ce343b5d97d65a2c63f444f9b9835d44ca481de820fa07c",
                "md5": "bb0dc29fbb1ca1d92aa296966e64ee05",
                "sha256": "4ce4cf39c9924abb5829aa54c4c0d78096aa532fc343c70688fe4dad8d17a6ae"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "bb0dc29fbb1ca1d92aa296966e64ee05",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 943151,
            "upload_time": "2025-07-21T19:27:30",
            "upload_time_iso_8601": "2025-07-21T19:27:30.079073Z",
            "url": "https://files.pythonhosted.org/packages/65/7d/c0ba647cc2e26ce343b5d97d65a2c63f444f9b9835d44ca481de820fa07c/rust_pyfunc-0.27.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "7903ee66e73d971de313021dd430a617075f2d625a554fac859015483c2a0908",
                "md5": "d530ea89265062de99657a5bcc5f105f",
                "sha256": "cb1ce4ae5f11baa9aba7c0a6b43edf01f589f9387f9b5d42776b88d687cdd915"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-cp310-cp310-win32.whl",
            "has_sig": false,
            "md5_digest": "d530ea89265062de99657a5bcc5f105f",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 758037,
            "upload_time": "2025-07-21T19:27:31",
            "upload_time_iso_8601": "2025-07-21T19:27:31.386543Z",
            "url": "https://files.pythonhosted.org/packages/79/03/ee66e73d971de313021dd430a617075f2d625a554fac859015483c2a0908/rust_pyfunc-0.27.0-cp310-cp310-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "2147205136f970c2c89b2ea85506886632002dde0ae2d0a40c28bc46ed16b150",
                "md5": "f25e9110c42608edeecc320c3c58fa1e",
                "sha256": "1663a3ece3773e2fb91eacc55fd11fdf87194b0c302347e6ac15689a0fccbc2a"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-cp310-cp310-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "f25e9110c42608edeecc320c3c58fa1e",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 787966,
            "upload_time": "2025-07-21T19:27:33",
            "upload_time_iso_8601": "2025-07-21T19:27:33.167630Z",
            "url": "https://files.pythonhosted.org/packages/21/47/205136f970c2c89b2ea85506886632002dde0ae2d0a40c28bc46ed16b150/rust_pyfunc-0.27.0-cp310-cp310-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "16d01841adc06fbdc45bfbda4fceb4d9a32442bb7c43e2e3770d7df44528429c",
                "md5": "05d56e2be9d2661e4434c5265a200967",
                "sha256": "d3045593c0d98e142c392ec3b852ec8b70ef10771e3ec07259678e45880f1d06"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-cp311-cp311-macosx_10_12_x86_64.whl",
            "has_sig": false,
            "md5_digest": "05d56e2be9d2661e4434c5265a200967",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 892064,
            "upload_time": "2025-07-21T19:27:34",
            "upload_time_iso_8601": "2025-07-21T19:27:34.967984Z",
            "url": "https://files.pythonhosted.org/packages/16/d0/1841adc06fbdc45bfbda4fceb4d9a32442bb7c43e2e3770d7df44528429c/rust_pyfunc-0.27.0-cp311-cp311-macosx_10_12_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "ebd196b1c85c03215f70b9aed6fa05d5bdd815751550cf86793aaeb83e5806d2",
                "md5": "e51ca318d507b148cb6df33019d76ad5",
                "sha256": "6d5ee725b6a37f281a26c2d39ba1b3a777cf46b99761788e4fc72096bf687ed5"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-cp311-cp311-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "e51ca318d507b148cb6df33019d76ad5",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 801550,
            "upload_time": "2025-07-21T19:27:36",
            "upload_time_iso_8601": "2025-07-21T19:27:36.414066Z",
            "url": "https://files.pythonhosted.org/packages/eb/d1/96b1c85c03215f70b9aed6fa05d5bdd815751550cf86793aaeb83e5806d2/rust_pyfunc-0.27.0-cp311-cp311-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "3b4dd03f64f787054c187f74699becb91504717aa8fe82a9d4d2d55447adb779",
                "md5": "a24a84727c9acf64d18bbcd97c0d001d",
                "sha256": "acc67b27117ffe7abfb9c9cd897fc28b2b7557e8bceb4ee5ffc3dcfd399f7ec7"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "a24a84727c9acf64d18bbcd97c0d001d",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 864447,
            "upload_time": "2025-07-21T19:27:37",
            "upload_time_iso_8601": "2025-07-21T19:27:37.802403Z",
            "url": "https://files.pythonhosted.org/packages/3b/4d/d03f64f787054c187f74699becb91504717aa8fe82a9d4d2d55447adb779/rust_pyfunc-0.27.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "1bef8af96262044e690cde2bfec03ea35efb22d9e6c57e6982cf57b13bb4c3e4",
                "md5": "9be22c13abd15cfa1cf6128f9a53d6d2",
                "sha256": "cd04410a075ea0b0ed0378a1a006b587a2d6dfce1125a2d01d64ea055b669255"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
            "has_sig": false,
            "md5_digest": "9be22c13abd15cfa1cf6128f9a53d6d2",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 944933,
            "upload_time": "2025-07-21T19:27:39",
            "upload_time_iso_8601": "2025-07-21T19:27:39.160860Z",
            "url": "https://files.pythonhosted.org/packages/1b/ef/8af96262044e690cde2bfec03ea35efb22d9e6c57e6982cf57b13bb4c3e4/rust_pyfunc-0.27.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "6351fbeac532905f4ad55c6cfef51d772a6891908a4994a94ce64eb1bc8b4165",
                "md5": "e0615796d592a669b6e51f33a7fb7307",
                "sha256": "ebdbc0690a12b355f41acd0bcf35b6fe682a0883a4d6d15a1b50002977c60a63"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "e0615796d592a669b6e51f33a7fb7307",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 967854,
            "upload_time": "2025-07-21T19:27:40",
            "upload_time_iso_8601": "2025-07-21T19:27:40.901785Z",
            "url": "https://files.pythonhosted.org/packages/63/51/fbeac532905f4ad55c6cfef51d772a6891908a4994a94ce64eb1bc8b4165/rust_pyfunc-0.27.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "47aa199cb8cdd5757bf692fe9efdd8031d8a2dd5c32aba718f7a1cb16329b163",
                "md5": "c4c862f94f805c4cfc7a42d449cfa9fb",
                "sha256": "a3df889ee67234e23f57c6e2fd5ce974ee090d87a8c9124661ad4303fe61db8e"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "has_sig": false,
            "md5_digest": "c4c862f94f805c4cfc7a42d449cfa9fb",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 1025753,
            "upload_time": "2025-07-21T19:27:42",
            "upload_time_iso_8601": "2025-07-21T19:27:42.212060Z",
            "url": "https://files.pythonhosted.org/packages/47/aa/199cb8cdd5757bf692fe9efdd8031d8a2dd5c32aba718f7a1cb16329b163/rust_pyfunc-0.27.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "359eee74f1aad400af91b5a7914dd15a0649861da7c2b9a11e9b524541098ac4",
                "md5": "35e536320800313e7f10cdd23f363856",
                "sha256": "32443d316d16eccb050e6c824d1528047222da49b43a8e970fb1b14ac507c17f"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl",
            "has_sig": false,
            "md5_digest": "35e536320800313e7f10cdd23f363856",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 1116363,
            "upload_time": "2025-07-21T19:27:43",
            "upload_time_iso_8601": "2025-07-21T19:27:43.658623Z",
            "url": "https://files.pythonhosted.org/packages/35/9e/ee74f1aad400af91b5a7914dd15a0649861da7c2b9a11e9b524541098ac4/rust_pyfunc-0.27.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "d78aebb2dc34586f6bffa27e37d920e45c9d708b5453660b6867d22356d1b100",
                "md5": "0e620a164f5b0f7e84d1c84b251fa9ec",
                "sha256": "020a382f62b5ac2f8a424dc8c10f9c0d47c8e961643a32fd2772f7374fb11b38"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "0e620a164f5b0f7e84d1c84b251fa9ec",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 943151,
            "upload_time": "2025-07-21T19:27:46",
            "upload_time_iso_8601": "2025-07-21T19:27:46.166446Z",
            "url": "https://files.pythonhosted.org/packages/d7/8a/ebb2dc34586f6bffa27e37d920e45c9d708b5453660b6867d22356d1b100/rust_pyfunc-0.27.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "dd1ae28463be4df71be585319ddc35fb59f4f955e62aead2f92698f737785e5d",
                "md5": "8b1645a28f7f433bc874650c58c79203",
                "sha256": "9c66505142da886d28fd850b7b68a1ca13cf22c0f31850fc1aad6dfcc2999ffd"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-cp311-cp311-win32.whl",
            "has_sig": false,
            "md5_digest": "8b1645a28f7f433bc874650c58c79203",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 758039,
            "upload_time": "2025-07-21T19:27:47",
            "upload_time_iso_8601": "2025-07-21T19:27:47.953777Z",
            "url": "https://files.pythonhosted.org/packages/dd/1a/e28463be4df71be585319ddc35fb59f4f955e62aead2f92698f737785e5d/rust_pyfunc-0.27.0-cp311-cp311-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "96973e30898b595090f26389e72a3e5e6e923fbc24f7a3fa81ab581e76e33ef3",
                "md5": "7d1e92c6a67fb0a6310a10730a866887",
                "sha256": "9feb33a8d2a8a440b9d69c694630bdfc41494efe457eade2a72c67a934b56d47"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-cp311-cp311-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "7d1e92c6a67fb0a6310a10730a866887",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 787976,
            "upload_time": "2025-07-21T19:27:49",
            "upload_time_iso_8601": "2025-07-21T19:27:49.955357Z",
            "url": "https://files.pythonhosted.org/packages/96/97/3e30898b595090f26389e72a3e5e6e923fbc24f7a3fa81ab581e76e33ef3/rust_pyfunc-0.27.0-cp311-cp311-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "fbdf15181be38def4339d2c0ea56b1692822d03634efc9e91a67a05becd95cb3",
                "md5": "6c10c0a4da35e0dec6d36718aeb503e9",
                "sha256": "d527c135e62372ae901b19bda7e6ce6fda85885afb45d1f1e4ee05a3702ab8bf"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-cp312-cp312-macosx_10_12_x86_64.whl",
            "has_sig": false,
            "md5_digest": "6c10c0a4da35e0dec6d36718aeb503e9",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 892064,
            "upload_time": "2025-07-21T19:27:51",
            "upload_time_iso_8601": "2025-07-21T19:27:51.390000Z",
            "url": "https://files.pythonhosted.org/packages/fb/df/15181be38def4339d2c0ea56b1692822d03634efc9e91a67a05becd95cb3/rust_pyfunc-0.27.0-cp312-cp312-macosx_10_12_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "f6514f43302fc3df6522959e12f22f37dfe531f1049ae8333fa6ac9e9eaf372b",
                "md5": "3b2b1d3d6c24bc7ef090c630e74d38fb",
                "sha256": "5b969e85f21e658fa82ad45e417c5d8c3447e5d7316626a0b162853044d9e329"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-cp312-cp312-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "3b2b1d3d6c24bc7ef090c630e74d38fb",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 801553,
            "upload_time": "2025-07-21T19:27:52",
            "upload_time_iso_8601": "2025-07-21T19:27:52.754934Z",
            "url": "https://files.pythonhosted.org/packages/f6/51/4f43302fc3df6522959e12f22f37dfe531f1049ae8333fa6ac9e9eaf372b/rust_pyfunc-0.27.0-cp312-cp312-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "092d9a7f25cd7a78efb9e24067585c3f378081663c6d2de18eacec6a17f615d1",
                "md5": "f0396e679a560a23e5b8393fe2ded90f",
                "sha256": "dbf5248252a78739c20b30795e74ee24cdda377bcacda1f310575c46da35b9ff"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "f0396e679a560a23e5b8393fe2ded90f",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 864446,
            "upload_time": "2025-07-21T19:27:54",
            "upload_time_iso_8601": "2025-07-21T19:27:54.035495Z",
            "url": "https://files.pythonhosted.org/packages/09/2d/9a7f25cd7a78efb9e24067585c3f378081663c6d2de18eacec6a17f615d1/rust_pyfunc-0.27.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "15e46cc304eef71faa7783661cca5ff50fbf7eb85f4ce95f7463bce641fb15d5",
                "md5": "936373bfa7f9f6dec69dfc8dcbd42c73",
                "sha256": "35072815a49700e2ce96c9eb0b40eff4522c79bcf54198f5b7c2f7168b008774"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
            "has_sig": false,
            "md5_digest": "936373bfa7f9f6dec69dfc8dcbd42c73",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 944933,
            "upload_time": "2025-07-21T19:27:55",
            "upload_time_iso_8601": "2025-07-21T19:27:55.776521Z",
            "url": "https://files.pythonhosted.org/packages/15/e4/6cc304eef71faa7783661cca5ff50fbf7eb85f4ce95f7463bce641fb15d5/rust_pyfunc-0.27.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "625adc8c9af2471ada74d0faf5ae8ce1d0d0a948d6e66f5739f7024215a704c5",
                "md5": "ca261b7f970226b742576db44706e5c1",
                "sha256": "314bb949e77077bbc4c17f65ead3505a0abb8bc1a19fe3d5a3a27ee9cd6142f4"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "ca261b7f970226b742576db44706e5c1",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 967855,
            "upload_time": "2025-07-21T19:27:57",
            "upload_time_iso_8601": "2025-07-21T19:27:57.180824Z",
            "url": "https://files.pythonhosted.org/packages/62/5a/dc8c9af2471ada74d0faf5ae8ce1d0d0a948d6e66f5739f7024215a704c5/rust_pyfunc-0.27.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "cd7ed628082586bbb9e08e66c92c7a75edc4fa65abeea9db207a4cddebb61532",
                "md5": "a01da8593b16f229f8ba0042f78b4499",
                "sha256": "30e080e4eda6bc94ba72259c41e725834d74fbbb1c0a8fb8d48ffa443b46498f"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "has_sig": false,
            "md5_digest": "a01da8593b16f229f8ba0042f78b4499",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 1025754,
            "upload_time": "2025-07-21T19:27:58",
            "upload_time_iso_8601": "2025-07-21T19:27:58.664104Z",
            "url": "https://files.pythonhosted.org/packages/cd/7e/d628082586bbb9e08e66c92c7a75edc4fa65abeea9db207a4cddebb61532/rust_pyfunc-0.27.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "1fee8b134d01113b45520970103ca24aa262c7b8dd44662ba7742707efe2d1df",
                "md5": "508fd0c7e25eb7fccb141c5bbf4080c6",
                "sha256": "08fcd226b5c688fae72a0969d65011f99637def6a2dd5c72625b5931a16b6c41"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl",
            "has_sig": false,
            "md5_digest": "508fd0c7e25eb7fccb141c5bbf4080c6",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 1116363,
            "upload_time": "2025-07-21T19:28:00",
            "upload_time_iso_8601": "2025-07-21T19:28:00.529493Z",
            "url": "https://files.pythonhosted.org/packages/1f/ee/8b134d01113b45520970103ca24aa262c7b8dd44662ba7742707efe2d1df/rust_pyfunc-0.27.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "678fcca295cd15d2f43bbded10bf5878ce7f5c1c5e584e19799ccc2f5d1dfb87",
                "md5": "7bfe57970d1376b37603c3aef59c0b91",
                "sha256": "9711c4e42a0349685808107e61cb7717aba65c2c9c716d7e2db4f3de48a19842"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "7bfe57970d1376b37603c3aef59c0b91",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 943150,
            "upload_time": "2025-07-21T19:28:02",
            "upload_time_iso_8601": "2025-07-21T19:28:02.171701Z",
            "url": "https://files.pythonhosted.org/packages/67/8f/cca295cd15d2f43bbded10bf5878ce7f5c1c5e584e19799ccc2f5d1dfb87/rust_pyfunc-0.27.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "5c3db0502ef67493f78a56f6b122a3c5ac78ad895f082b8016f17ee1c43304d2",
                "md5": "7a734969c249a452300ea54f146de1f5",
                "sha256": "6c6f8398871a37036c380da2d1fc0a76fcf71bd5c5d3cd8cccf90d1e8d96b3cc"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-cp312-cp312-win32.whl",
            "has_sig": false,
            "md5_digest": "7a734969c249a452300ea54f146de1f5",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 758038,
            "upload_time": "2025-07-21T19:28:03",
            "upload_time_iso_8601": "2025-07-21T19:28:03.575323Z",
            "url": "https://files.pythonhosted.org/packages/5c/3d/b0502ef67493f78a56f6b122a3c5ac78ad895f082b8016f17ee1c43304d2/rust_pyfunc-0.27.0-cp312-cp312-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "fb49abc7d1fb5d5ad025651929ff44d9534eeb115057c55087c5ce306c6efb03",
                "md5": "773d75603fd0df176f01a10a21072c0c",
                "sha256": "0b8fdbd0099784a48a2b81a052db5a85c50dde9ab0dbb02dd0f7e632b182b14f"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-cp312-cp312-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "773d75603fd0df176f01a10a21072c0c",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 787969,
            "upload_time": "2025-07-21T19:28:05",
            "upload_time_iso_8601": "2025-07-21T19:28:05.131960Z",
            "url": "https://files.pythonhosted.org/packages/fb/49/abc7d1fb5d5ad025651929ff44d9534eeb115057c55087c5ce306c6efb03/rust_pyfunc-0.27.0-cp312-cp312-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "7ee75fedad777dbc1ec24acc06ea6eaae8093d4213ffa4e1e5b8f76e407b25be",
                "md5": "ffb566e97355b7f0b22df42d3054083a",
                "sha256": "cd6238c68c293a3e9533c557bddaa85f7d0a776ca73ca1e2a9155cbd88f14c2e"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-cp313-cp313-macosx_10_12_x86_64.whl",
            "has_sig": false,
            "md5_digest": "ffb566e97355b7f0b22df42d3054083a",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.8",
            "size": 892065,
            "upload_time": "2025-07-21T19:28:06",
            "upload_time_iso_8601": "2025-07-21T19:28:06.461625Z",
            "url": "https://files.pythonhosted.org/packages/7e/e7/5fedad777dbc1ec24acc06ea6eaae8093d4213ffa4e1e5b8f76e407b25be/rust_pyfunc-0.27.0-cp313-cp313-macosx_10_12_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "fb5908a2c198f880b95abfcabde3d9d3b2fdcc8fd34374dc21669bde5d8eae46",
                "md5": "1d480582f8dc49669f3e3e7c8a261b3a",
                "sha256": "401c2bb7cdf4f77ec1c1f06a1144ffd5902d5642b4a23d37ddafe0c0abf978b3"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-cp313-cp313-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "1d480582f8dc49669f3e3e7c8a261b3a",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.8",
            "size": 801553,
            "upload_time": "2025-07-21T19:28:07",
            "upload_time_iso_8601": "2025-07-21T19:28:07.846786Z",
            "url": "https://files.pythonhosted.org/packages/fb/59/08a2c198f880b95abfcabde3d9d3b2fdcc8fd34374dc21669bde5d8eae46/rust_pyfunc-0.27.0-cp313-cp313-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "8d989000e71bc027e48b0e01d7a3cfcb482b74f32ff5f393f77351efeb0b706d",
                "md5": "7a38cf40f195b56f7df738afdac8c6fa",
                "sha256": "f44d16b05da023696ab887f9be7d1d34b7520fbe3f58a5f4a5704f4b4252d408"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "7a38cf40f195b56f7df738afdac8c6fa",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.8",
            "size": 864446,
            "upload_time": "2025-07-21T19:28:09",
            "upload_time_iso_8601": "2025-07-21T19:28:09.312944Z",
            "url": "https://files.pythonhosted.org/packages/8d/98/9000e71bc027e48b0e01d7a3cfcb482b74f32ff5f393f77351efeb0b706d/rust_pyfunc-0.27.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "6497335aa7bf5d1f97773a7d368d84ec1e89bc037476b88df4414b2e6f03d633",
                "md5": "d65e37f8f03cf64670245a49f151a1a7",
                "sha256": "cae1aab8d5197b22b4b7fbe5798a30a057c8739d538c855315f0ecd341c364fb"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
            "has_sig": false,
            "md5_digest": "d65e37f8f03cf64670245a49f151a1a7",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.8",
            "size": 944933,
            "upload_time": "2025-07-21T19:28:10",
            "upload_time_iso_8601": "2025-07-21T19:28:10.870460Z",
            "url": "https://files.pythonhosted.org/packages/64/97/335aa7bf5d1f97773a7d368d84ec1e89bc037476b88df4414b2e6f03d633/rust_pyfunc-0.27.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "823596039bb32fee7ab89eb75d4555b30f6d0010772021c3723672b49e4b1e90",
                "md5": "d11d196e849a311bfdf99c722b5b7ec1",
                "sha256": "66edbad9ddd156e13086e8bb92f50f924e70445de41171f65e4956a7bd9bbe1a"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "d11d196e849a311bfdf99c722b5b7ec1",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.8",
            "size": 967854,
            "upload_time": "2025-07-21T19:28:12",
            "upload_time_iso_8601": "2025-07-21T19:28:12.436456Z",
            "url": "https://files.pythonhosted.org/packages/82/35/96039bb32fee7ab89eb75d4555b30f6d0010772021c3723672b49e4b1e90/rust_pyfunc-0.27.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "8ee160dcb22f5529bd5d541033e9cdd21e363508a879dfe5591005d8e80bb858",
                "md5": "687374347a9ad79f5169f16fba8ed0aa",
                "sha256": "dca64b018842354a74de0644bec413262e6f4874075f28886a01da12effb94fc"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "has_sig": false,
            "md5_digest": "687374347a9ad79f5169f16fba8ed0aa",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.8",
            "size": 1025755,
            "upload_time": "2025-07-21T19:28:14",
            "upload_time_iso_8601": "2025-07-21T19:28:14.417766Z",
            "url": "https://files.pythonhosted.org/packages/8e/e1/60dcb22f5529bd5d541033e9cdd21e363508a879dfe5591005d8e80bb858/rust_pyfunc-0.27.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "cf3acbb5f83a066c6297766f66b4ba58f191941f83498931029f1d1e9ae7e806",
                "md5": "b7b96734582a78aab2a2723d7d3d0bc3",
                "sha256": "f8fa61a5de241038bb496e41712f15749753b26d5837b752c34d0d9234f3f1ab"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl",
            "has_sig": false,
            "md5_digest": "b7b96734582a78aab2a2723d7d3d0bc3",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.8",
            "size": 1116364,
            "upload_time": "2025-07-21T19:28:16",
            "upload_time_iso_8601": "2025-07-21T19:28:16.263049Z",
            "url": "https://files.pythonhosted.org/packages/cf/3a/cbb5f83a066c6297766f66b4ba58f191941f83498931029f1d1e9ae7e806/rust_pyfunc-0.27.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "1606b603a418f34b456d9f074685db3b2bd041c0fa4ef4368bb5264cb791e793",
                "md5": "9be5f8b4fa8993068153ae635e2c305e",
                "sha256": "ef3c1ab49385445de1ec1bf3a60b95f5a334fc1b9b2810434b8112b62af925ef"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "9be5f8b4fa8993068153ae635e2c305e",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.8",
            "size": 943153,
            "upload_time": "2025-07-21T19:28:17",
            "upload_time_iso_8601": "2025-07-21T19:28:17.722384Z",
            "url": "https://files.pythonhosted.org/packages/16/06/b603a418f34b456d9f074685db3b2bd041c0fa4ef4368bb5264cb791e793/rust_pyfunc-0.27.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "78550900767d96158a63d81763be0a07f6812f22413b73beb65fd60925aed86c",
                "md5": "3c7a0ffc65d389ff302b2f4a4275947e",
                "sha256": "b53194705ecd399736e42b448b30c928d6f7cc8b72dfa12a0fdacbe7962c8590"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-cp313-cp313-win32.whl",
            "has_sig": false,
            "md5_digest": "3c7a0ffc65d389ff302b2f4a4275947e",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.8",
            "size": 758040,
            "upload_time": "2025-07-21T19:28:19",
            "upload_time_iso_8601": "2025-07-21T19:28:19.315042Z",
            "url": "https://files.pythonhosted.org/packages/78/55/0900767d96158a63d81763be0a07f6812f22413b73beb65fd60925aed86c/rust_pyfunc-0.27.0-cp313-cp313-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "02057cdac723f3399336616257e39ae553d39eb940f429e0a3653ba6de54e551",
                "md5": "3233a7e7eabad7fb82d46850d9810a53",
                "sha256": "c3b17670aab558032f17de1b47855b19a3605c6f6207d284d201a36701b67eda"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-cp313-cp313-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "3233a7e7eabad7fb82d46850d9810a53",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.8",
            "size": 787966,
            "upload_time": "2025-07-21T19:28:20",
            "upload_time_iso_8601": "2025-07-21T19:28:20.708584Z",
            "url": "https://files.pythonhosted.org/packages/02/05/7cdac723f3399336616257e39ae553d39eb940f429e0a3653ba6de54e551/rust_pyfunc-0.27.0-cp313-cp313-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "80c1496427b312a2bc05fb4b4f4a2f9c5e99e1083b80a405f54956ad5f60fd5a",
                "md5": "5a1d1bbb52e77281b36b018860ab2730",
                "sha256": "3d368a6805d928ee01ecd5d5e259d2b22c4dbb2f4491df298ec6232aee91a433"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "5a1d1bbb52e77281b36b018860ab2730",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 864702,
            "upload_time": "2025-07-21T19:28:22",
            "upload_time_iso_8601": "2025-07-21T19:28:22.124681Z",
            "url": "https://files.pythonhosted.org/packages/80/c1/496427b312a2bc05fb4b4f4a2f9c5e99e1083b80a405f54956ad5f60fd5a/rust_pyfunc-0.27.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "a3f2f40f5c6ee34bb767f17466d4cfb18a8515188967528a1e06daad6f51e321",
                "md5": "6adf9fc7b1f85aeed7865ca95d511923",
                "sha256": "3f660080e8241a065d7109f177883465871d7bd97692c9c5d86f8792792dc75a"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
            "has_sig": false,
            "md5_digest": "6adf9fc7b1f85aeed7865ca95d511923",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 945396,
            "upload_time": "2025-07-21T19:28:23",
            "upload_time_iso_8601": "2025-07-21T19:28:23.614394Z",
            "url": "https://files.pythonhosted.org/packages/a3/f2/f40f5c6ee34bb767f17466d4cfb18a8515188967528a1e06daad6f51e321/rust_pyfunc-0.27.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "6b724a4e4ce33d82b3c8e16fc0595654ecc3e051d3f25abedacce08af1a6dd30",
                "md5": "8e6671085733aa7e329173a94d2f98c6",
                "sha256": "1eb6b9562d8cdb67cb208b913f45772f04ce5944471d3147dae596d02aba0de6"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "8e6671085733aa7e329173a94d2f98c6",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 968314,
            "upload_time": "2025-07-21T19:28:25",
            "upload_time_iso_8601": "2025-07-21T19:28:25.068051Z",
            "url": "https://files.pythonhosted.org/packages/6b/72/4a4e4ce33d82b3c8e16fc0595654ecc3e051d3f25abedacce08af1a6dd30/rust_pyfunc-0.27.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "a7e69cae4ffe4d1d277fb82148ebf22761ff7b62697f925bf28c49fd3a881e34",
                "md5": "c094869c1bde9ead09e3342796875303",
                "sha256": "7f79adefa7e80287b2e0d9f339d4e6d495b7ba8b17c6ec0e06ffa81f98dbc51c"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "has_sig": false,
            "md5_digest": "c094869c1bde9ead09e3342796875303",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 1026547,
            "upload_time": "2025-07-21T19:28:26",
            "upload_time_iso_8601": "2025-07-21T19:28:26.655437Z",
            "url": "https://files.pythonhosted.org/packages/a7/e6/9cae4ffe4d1d277fb82148ebf22761ff7b62697f925bf28c49fd3a881e34/rust_pyfunc-0.27.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "4f80b134db9ece5569925accbf6c3dbbd13c99dc9830300268cebf5191681a24",
                "md5": "12e22322c2ed13fa1d53d6a66eaeba1f",
                "sha256": "b817073322d3ca994a23fd5058a5996d221c7090aaf9ee03b84d2a9a4b7f4bfb"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl",
            "has_sig": false,
            "md5_digest": "12e22322c2ed13fa1d53d6a66eaeba1f",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 1116586,
            "upload_time": "2025-07-21T19:28:28",
            "upload_time_iso_8601": "2025-07-21T19:28:28.134655Z",
            "url": "https://files.pythonhosted.org/packages/4f/80/b134db9ece5569925accbf6c3dbbd13c99dc9830300268cebf5191681a24/rust_pyfunc-0.27.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "7715fa39a4a42ec3fb655dca3f88e4a12c320f0c93567cedd79a9482ae3d850c",
                "md5": "2c1ca405097573de28c7da1153eedf8e",
                "sha256": "44f6b5163936375b88a9a688cbcff32704ec79c47cb5a6dd1a8a07cc69e50c85"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "2c1ca405097573de28c7da1153eedf8e",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 943832,
            "upload_time": "2025-07-21T19:28:29",
            "upload_time_iso_8601": "2025-07-21T19:28:29.664743Z",
            "url": "https://files.pythonhosted.org/packages/77/15/fa39a4a42ec3fb655dca3f88e4a12c320f0c93567cedd79a9482ae3d850c/rust_pyfunc-0.27.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "d7bb9eca1d539c04812b079f9c5de66c481920a0815bfc80860bf1af528231d9",
                "md5": "f779c45d8652ddf197bdc2780cb705b4",
                "sha256": "35bd790817ae3a2722150225d0f33d7ef70ba2f49fc00e6cf3ba08880800a1c8"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "f779c45d8652ddf197bdc2780cb705b4",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8",
            "size": 864716,
            "upload_time": "2025-07-21T19:28:31",
            "upload_time_iso_8601": "2025-07-21T19:28:31.200403Z",
            "url": "https://files.pythonhosted.org/packages/d7/bb/9eca1d539c04812b079f9c5de66c481920a0815bfc80860bf1af528231d9/rust_pyfunc-0.27.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "4989e8a08360409b3fffbd258d71e7bdd5b103c4e8f4e0681989392e93695e70",
                "md5": "8d5f2ea98e9015fff5b5b673f743854b",
                "sha256": "de1c92578f93633e3953e540341448c8b76a4e355f2e310fbe4e184337cfbb8a"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
            "has_sig": false,
            "md5_digest": "8d5f2ea98e9015fff5b5b673f743854b",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8",
            "size": 945349,
            "upload_time": "2025-07-21T19:28:32",
            "upload_time_iso_8601": "2025-07-21T19:28:32.674040Z",
            "url": "https://files.pythonhosted.org/packages/49/89/e8a08360409b3fffbd258d71e7bdd5b103c4e8f4e0681989392e93695e70/rust_pyfunc-0.27.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e2e4def72fbc83ce728b8743b7ee768eee5d6d51a4c6fb04b5556cb9d2ea7139",
                "md5": "b91527045a35970b8fe6f3f3fa1550a4",
                "sha256": "b6bc1551c5de5fcfd09338583d2653b0a5bc62092eb030e6f41092f1c4b1df6d"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "b91527045a35970b8fe6f3f3fa1550a4",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8",
            "size": 968166,
            "upload_time": "2025-07-21T19:28:34",
            "upload_time_iso_8601": "2025-07-21T19:28:34.136050Z",
            "url": "https://files.pythonhosted.org/packages/e2/e4/def72fbc83ce728b8743b7ee768eee5d6d51a4c6fb04b5556cb9d2ea7139/rust_pyfunc-0.27.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "ee9fcf5d3efc5642b86bc101b6c49b99375381bab7a389392c9f07813e356a02",
                "md5": "2c195c8930689d6a4d0cc8c36ddd8c1b",
                "sha256": "fd1a719527b8163e5487da894b6e2c0e4ca13a2bcb079e30f1c173c0f2d63112"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "has_sig": false,
            "md5_digest": "2c195c8930689d6a4d0cc8c36ddd8c1b",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8",
            "size": 1026089,
            "upload_time": "2025-07-21T19:28:35",
            "upload_time_iso_8601": "2025-07-21T19:28:35.533823Z",
            "url": "https://files.pythonhosted.org/packages/ee/9f/cf5d3efc5642b86bc101b6c49b99375381bab7a389392c9f07813e356a02/rust_pyfunc-0.27.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "56ff1629f1b106320ea61bdccb664dadebe7678b2096c044045533af872ca44d",
                "md5": "db7fd19565bc5cc23d94743a4fc586a2",
                "sha256": "3455933a6851f4f6f7c777d658516d9dc7c3785cd22fd796bee70ce09a36ea13"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl",
            "has_sig": false,
            "md5_digest": "db7fd19565bc5cc23d94743a4fc586a2",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8",
            "size": 1116481,
            "upload_time": "2025-07-21T19:28:37",
            "upload_time_iso_8601": "2025-07-21T19:28:37.626990Z",
            "url": "https://files.pythonhosted.org/packages/56/ff/1629f1b106320ea61bdccb664dadebe7678b2096c044045533af872ca44d/rust_pyfunc-0.27.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "99de1cc7e7a9cece01279b6fede07c70e012de99ff1ae79a17ff967c76a06175",
                "md5": "bab5b60be3b7c572aaf4fe916e7ac4b3",
                "sha256": "e4933b765e5d53a4bf554dd6941a06c0dfea80937ea08d50b96f96a0835f9482"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "bab5b60be3b7c572aaf4fe916e7ac4b3",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8",
            "size": 943650,
            "upload_time": "2025-07-21T19:28:39",
            "upload_time_iso_8601": "2025-07-21T19:28:39.528715Z",
            "url": "https://files.pythonhosted.org/packages/99/de/1cc7e7a9cece01279b6fede07c70e012de99ff1ae79a17ff967c76a06175/rust_pyfunc-0.27.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "5fc1d0eea67f9b3d0c8c469817ef00dab197a3dc16c390016e5b434bd620d5b6",
                "md5": "3e1711883b902198e43efec27d61b469",
                "sha256": "64f45ed6e6d80d2b27a1da4de6c027b7e9d2940bbd5dd56a24746ca4eb996360"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-cp39-cp39-win32.whl",
            "has_sig": false,
            "md5_digest": "3e1711883b902198e43efec27d61b469",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8",
            "size": 758307,
            "upload_time": "2025-07-21T19:28:41",
            "upload_time_iso_8601": "2025-07-21T19:28:41.268357Z",
            "url": "https://files.pythonhosted.org/packages/5f/c1/d0eea67f9b3d0c8c469817ef00dab197a3dc16c390016e5b434bd620d5b6/rust_pyfunc-0.27.0-cp39-cp39-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "652f1747bb98ca64afdcd0e58fc02c55b6fcc83dde957ff272ed492b50233c93",
                "md5": "66bde6963941715d4572ffcae21337c3",
                "sha256": "ca7957ed7111902402fc5a47ef6555512b2487ab95276fc254d73f5029c720c2"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-cp39-cp39-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "66bde6963941715d4572ffcae21337c3",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8",
            "size": 788165,
            "upload_time": "2025-07-21T19:28:42",
            "upload_time_iso_8601": "2025-07-21T19:28:42.744576Z",
            "url": "https://files.pythonhosted.org/packages/65/2f/1747bb98ca64afdcd0e58fc02c55b6fcc83dde957ff272ed492b50233c93/rust_pyfunc-0.27.0-cp39-cp39-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "95cdd9d0dac03c63a8915b2e8484f6a7e77bfcd24f76120b95f06e2f7df4f090",
                "md5": "6977a89baa610e31ec8646d876279218",
                "sha256": "0c65bc9ebd35333de1f01eec380bf864075d6e04305376b8df72ce382c13b3c7"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "6977a89baa610e31ec8646d876279218",
            "packagetype": "bdist_wheel",
            "python_version": "pp310",
            "requires_python": ">=3.8",
            "size": 864454,
            "upload_time": "2025-07-21T19:28:44",
            "upload_time_iso_8601": "2025-07-21T19:28:44.551802Z",
            "url": "https://files.pythonhosted.org/packages/95/cd/d9d0dac03c63a8915b2e8484f6a7e77bfcd24f76120b95f06e2f7df4f090/rust_pyfunc-0.27.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "ea340772a3d3dd88bd376ac554aa486f3f24fd058900a0d9969a36d57c69d364",
                "md5": "aa448c5a6b0a5d7063462b243ac71f6d",
                "sha256": "f052441989efe2571cb7198689d8be1d4ff3d021f08cd08b76efccbda0fce525"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
            "has_sig": false,
            "md5_digest": "aa448c5a6b0a5d7063462b243ac71f6d",
            "packagetype": "bdist_wheel",
            "python_version": "pp310",
            "requires_python": ">=3.8",
            "size": 944928,
            "upload_time": "2025-07-21T19:28:46",
            "upload_time_iso_8601": "2025-07-21T19:28:46.111738Z",
            "url": "https://files.pythonhosted.org/packages/ea/34/0772a3d3dd88bd376ac554aa486f3f24fd058900a0d9969a36d57c69d364/rust_pyfunc-0.27.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "f6ab82e68ab1c57eff6617583aa6778ab6b783fa14d59115d36e1ce48dd89af3",
                "md5": "2947ae32463fcf85033393f92d2d7495",
                "sha256": "9298743221e7aa654991bbad62adf66b83066f1f7df2689aba32b660765df31d"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "2947ae32463fcf85033393f92d2d7495",
            "packagetype": "bdist_wheel",
            "python_version": "pp310",
            "requires_python": ">=3.8",
            "size": 968831,
            "upload_time": "2025-07-21T19:28:48",
            "upload_time_iso_8601": "2025-07-21T19:28:48.398184Z",
            "url": "https://files.pythonhosted.org/packages/f6/ab/82e68ab1c57eff6617583aa6778ab6b783fa14d59115d36e1ce48dd89af3/rust_pyfunc-0.27.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "f7603689b60b11c08237e1a0e88ed1a116c9aafdf366192029c2dbe73ce151ba",
                "md5": "ad49de87ec2352d5b2cfd8b40eb512f6",
                "sha256": "f84473fa78cf62f82a7f810ad5378f552de17355a4619c57d4d3dbdb0134c42b"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "has_sig": false,
            "md5_digest": "ad49de87ec2352d5b2cfd8b40eb512f6",
            "packagetype": "bdist_wheel",
            "python_version": "pp310",
            "requires_python": ">=3.8",
            "size": 1025555,
            "upload_time": "2025-07-21T19:28:50",
            "upload_time_iso_8601": "2025-07-21T19:28:50.144783Z",
            "url": "https://files.pythonhosted.org/packages/f7/60/3689b60b11c08237e1a0e88ed1a116c9aafdf366192029c2dbe73ce151ba/rust_pyfunc-0.27.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "0b96820619ab82f6658696c3fe14ad75bcc15821ca7f52abdbc53ac08ae3bcb3",
                "md5": "0a41314cf5c86158413318735258c017",
                "sha256": "028dc3d8e09ea96ff1f9921e84b486ecbcfb103084daa6a162da8790208d5c12"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl",
            "has_sig": false,
            "md5_digest": "0a41314cf5c86158413318735258c017",
            "packagetype": "bdist_wheel",
            "python_version": "pp310",
            "requires_python": ">=3.8",
            "size": 1115703,
            "upload_time": "2025-07-21T19:28:51",
            "upload_time_iso_8601": "2025-07-21T19:28:51.709090Z",
            "url": "https://files.pythonhosted.org/packages/0b/96/820619ab82f6658696c3fe14ad75bcc15821ca7f52abdbc53ac08ae3bcb3/rust_pyfunc-0.27.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "3054eed6e3b3816e964bfb2ab92bcf29f2cd2e05ddcbbc8447228fac334901f7",
                "md5": "5bc10ecda407717425de38500e06dd32",
                "sha256": "f919b85c114a0b8cbf87bac9042f84e64862fdaebd1a85f06cd580e59520e737"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "5bc10ecda407717425de38500e06dd32",
            "packagetype": "bdist_wheel",
            "python_version": "pp310",
            "requires_python": ">=3.8",
            "size": 943035,
            "upload_time": "2025-07-21T19:28:53",
            "upload_time_iso_8601": "2025-07-21T19:28:53.280076Z",
            "url": "https://files.pythonhosted.org/packages/30/54/eed6e3b3816e964bfb2ab92bcf29f2cd2e05ddcbbc8447228fac334901f7/rust_pyfunc-0.27.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "b10d828f75142b3e6b11321f762def7a3f17f3b4ea0586817e26130152ecbb40",
                "md5": "ff60a49d9688c93b61589b7447c02130",
                "sha256": "308cd8b07aaa72b622d7d6cbd77bb6f1df51a53e78eff4a7c62b9942bb1f3a1b"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "ff60a49d9688c93b61589b7447c02130",
            "packagetype": "bdist_wheel",
            "python_version": "pp311",
            "requires_python": ">=3.8",
            "size": 864453,
            "upload_time": "2025-07-21T19:28:55",
            "upload_time_iso_8601": "2025-07-21T19:28:55.679486Z",
            "url": "https://files.pythonhosted.org/packages/b1/0d/828f75142b3e6b11321f762def7a3f17f3b4ea0586817e26130152ecbb40/rust_pyfunc-0.27.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e1a7f6efbadb85930b2a5ddad4cfff8827d290d2fa3b8d12e47c818ce07b60ea",
                "md5": "d098bb8c65046c6de2d84c33dbb698bc",
                "sha256": "6d32d48e488212023a9cfb1d3ccd7912c56de3fcf807b38baa99a1d5882e37f6"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
            "has_sig": false,
            "md5_digest": "d098bb8c65046c6de2d84c33dbb698bc",
            "packagetype": "bdist_wheel",
            "python_version": "pp311",
            "requires_python": ">=3.8",
            "size": 944928,
            "upload_time": "2025-07-21T19:28:57",
            "upload_time_iso_8601": "2025-07-21T19:28:57.758867Z",
            "url": "https://files.pythonhosted.org/packages/e1/a7/f6efbadb85930b2a5ddad4cfff8827d290d2fa3b8d12e47c818ce07b60ea/rust_pyfunc-0.27.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "105357c4a10e879a7b24dfea25dcb0c3f66e7c4bbcacfcc08c92974dc0c10c5e",
                "md5": "cada86f6bdadf2302ec224caf4215322",
                "sha256": "35aa71165200894e1cc1e81a1045bf6aec83027a45fecb2a311dda5b8400cacc"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-pp311-pypy311_pp73-manylinux_2_17_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "cada86f6bdadf2302ec224caf4215322",
            "packagetype": "bdist_wheel",
            "python_version": "pp311",
            "requires_python": ">=3.8",
            "size": 968831,
            "upload_time": "2025-07-21T19:29:00",
            "upload_time_iso_8601": "2025-07-21T19:29:00.400816Z",
            "url": "https://files.pythonhosted.org/packages/10/53/57c4a10e879a7b24dfea25dcb0c3f66e7c4bbcacfcc08c92974dc0c10c5e/rust_pyfunc-0.27.0-pp311-pypy311_pp73-manylinux_2_17_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "d1753d86be331af10e11ae15f2485d3687b7ce7e1d08f1d4f67a35e27d45e3e9",
                "md5": "23bd559008b9c7db32345a263cba5651",
                "sha256": "94df8dd060567ce4710fc196925f19e2f5e49020aee8ed57177b4e42e8d527dc"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "has_sig": false,
            "md5_digest": "23bd559008b9c7db32345a263cba5651",
            "packagetype": "bdist_wheel",
            "python_version": "pp311",
            "requires_python": ">=3.8",
            "size": 1025557,
            "upload_time": "2025-07-21T19:29:01",
            "upload_time_iso_8601": "2025-07-21T19:29:01.969402Z",
            "url": "https://files.pythonhosted.org/packages/d1/75/3d86be331af10e11ae15f2485d3687b7ce7e1d08f1d4f67a35e27d45e3e9/rust_pyfunc-0.27.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "a88181955eaba2d5046004828bb19e99d3b0a8b601bf0147b5e0c5e6c5fc4d1d",
                "md5": "01e4d23ce0ab409ae27ee1a413b79273",
                "sha256": "e63c6dd1c180963da6db4658f5af1e5785d436362b708d6c3d11a45ab7ca8bd5"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl",
            "has_sig": false,
            "md5_digest": "01e4d23ce0ab409ae27ee1a413b79273",
            "packagetype": "bdist_wheel",
            "python_version": "pp311",
            "requires_python": ">=3.8",
            "size": 1115703,
            "upload_time": "2025-07-21T19:29:03",
            "upload_time_iso_8601": "2025-07-21T19:29:03.510330Z",
            "url": "https://files.pythonhosted.org/packages/a8/81/81955eaba2d5046004828bb19e99d3b0a8b601bf0147b5e0c5e6c5fc4d1d/rust_pyfunc-0.27.0-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "c7bd7c33115f2e1f7ddf5317e7a0032685e1047be8b17a1fd3ffc2908dfdada8",
                "md5": "2eb0fa2644d1fec4cd825581cff15cda",
                "sha256": "49ecc692696a9be340a166884d284e17044adbc2150b67770b394310b1a02ca9"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "2eb0fa2644d1fec4cd825581cff15cda",
            "packagetype": "bdist_wheel",
            "python_version": "pp311",
            "requires_python": ">=3.8",
            "size": 943034,
            "upload_time": "2025-07-21T19:29:05",
            "upload_time_iso_8601": "2025-07-21T19:29:05.111754Z",
            "url": "https://files.pythonhosted.org/packages/c7/bd/7c33115f2e1f7ddf5317e7a0032685e1047be8b17a1fd3ffc2908dfdada8/rust_pyfunc-0.27.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e2f31cb538500c528df4b67919b18d795d25c9a98b7fc5420d0daf75063c2e3c",
                "md5": "962decbc9f21d70919fc003c34636a08",
                "sha256": "dd0788b90d05c356e1ddfa7408242dd501ade6d661f75fa89f80ea1d1e14e0a7"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "962decbc9f21d70919fc003c34636a08",
            "packagetype": "bdist_wheel",
            "python_version": "pp38",
            "requires_python": ">=3.8",
            "size": 864868,
            "upload_time": "2025-07-21T19:29:08",
            "upload_time_iso_8601": "2025-07-21T19:29:08.304233Z",
            "url": "https://files.pythonhosted.org/packages/e2/f3/1cb538500c528df4b67919b18d795d25c9a98b7fc5420d0daf75063c2e3c/rust_pyfunc-0.27.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "46196a5a1df97cde0b45394eadac8d9d9bb1c6a6eeaa717fc45cd0dbbee0ae72",
                "md5": "e15ad4c67cdf4e7a5b91ddc552b2bfaf",
                "sha256": "b5f46150d011de6ad66aad063dc1b7956d871f42b94fee1e983c2439dd942fe1"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
            "has_sig": false,
            "md5_digest": "e15ad4c67cdf4e7a5b91ddc552b2bfaf",
            "packagetype": "bdist_wheel",
            "python_version": "pp38",
            "requires_python": ">=3.8",
            "size": 944943,
            "upload_time": "2025-07-21T19:29:09",
            "upload_time_iso_8601": "2025-07-21T19:29:09.804839Z",
            "url": "https://files.pythonhosted.org/packages/46/19/6a5a1df97cde0b45394eadac8d9d9bb1c6a6eeaa717fc45cd0dbbee0ae72/rust_pyfunc-0.27.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "2cc3209d9ba6a9b2e38947817a776d07874f9fc4cac4ca37a693351e340d2d34",
                "md5": "2057e07ea8b065d35cea5d365b108ddc",
                "sha256": "0b8d5949b91cda9371da48a49046f7db3e0c5d31cc5b671aaeb24348b0f54ac4"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "has_sig": false,
            "md5_digest": "2057e07ea8b065d35cea5d365b108ddc",
            "packagetype": "bdist_wheel",
            "python_version": "pp38",
            "requires_python": ">=3.8",
            "size": 1025814,
            "upload_time": "2025-07-21T19:29:11",
            "upload_time_iso_8601": "2025-07-21T19:29:11.557872Z",
            "url": "https://files.pythonhosted.org/packages/2c/c3/209d9ba6a9b2e38947817a776d07874f9fc4cac4ca37a693351e340d2d34/rust_pyfunc-0.27.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "ce528d2cefcbe75c3266d84ee3d5bf44563a813c2a1cdfc0f6c5c6a83f901caf",
                "md5": "5e6b806651bc7710df5aa0c5c8a77e80",
                "sha256": "803d18cd7a3461c48b5b9f0242025555bff00a8ba182e4b27895584b2a239d1a"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl",
            "has_sig": false,
            "md5_digest": "5e6b806651bc7710df5aa0c5c8a77e80",
            "packagetype": "bdist_wheel",
            "python_version": "pp38",
            "requires_python": ">=3.8",
            "size": 1115925,
            "upload_time": "2025-07-21T19:29:13",
            "upload_time_iso_8601": "2025-07-21T19:29:13.604126Z",
            "url": "https://files.pythonhosted.org/packages/ce/52/8d2cefcbe75c3266d84ee3d5bf44563a813c2a1cdfc0f6c5c6a83f901caf/rust_pyfunc-0.27.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "c451c137f5e8b4acef81c698cca56f6ecd42298993fb912e4c1213804d29bbba",
                "md5": "2ab4b8f41dfd81e38e5b0eda560c5266",
                "sha256": "ec3c048d4c869c28a6d20a3d2bcaf7169c11d65463b6149ae7689505cdde4eb1"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "2ab4b8f41dfd81e38e5b0eda560c5266",
            "packagetype": "bdist_wheel",
            "python_version": "pp39",
            "requires_python": ">=3.8",
            "size": 864449,
            "upload_time": "2025-07-21T19:29:15",
            "upload_time_iso_8601": "2025-07-21T19:29:15.305678Z",
            "url": "https://files.pythonhosted.org/packages/c4/51/c137f5e8b4acef81c698cca56f6ecd42298993fb912e4c1213804d29bbba/rust_pyfunc-0.27.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "4957e05aaf8d37a873a599ce7b844e9e5219d6f2e7d7244e443b8d88d6e9cafc",
                "md5": "d56aa1b7844b7055ef5f15b5570b45d8",
                "sha256": "9a47c2ea0abf4cb327f2f621efae1bdc368db5aaf45ed4a12a1a6eee5f2bc0ab"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
            "has_sig": false,
            "md5_digest": "d56aa1b7844b7055ef5f15b5570b45d8",
            "packagetype": "bdist_wheel",
            "python_version": "pp39",
            "requires_python": ">=3.8",
            "size": 944923,
            "upload_time": "2025-07-21T19:29:17",
            "upload_time_iso_8601": "2025-07-21T19:29:17.251161Z",
            "url": "https://files.pythonhosted.org/packages/49/57/e05aaf8d37a873a599ce7b844e9e5219d6f2e7d7244e443b8d88d6e9cafc/rust_pyfunc-0.27.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "3f606c489158c5ba397841716f656745365f08cdee35711319c9d72d72625170",
                "md5": "865ff340ee371abfb8cce8cd4c38bbbe",
                "sha256": "291039f17f7d868e6327a919bc24fd52f340848c87b1cf8d58874e76c356ccf4"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "has_sig": false,
            "md5_digest": "865ff340ee371abfb8cce8cd4c38bbbe",
            "packagetype": "bdist_wheel",
            "python_version": "pp39",
            "requires_python": ">=3.8",
            "size": 1025551,
            "upload_time": "2025-07-21T19:29:19",
            "upload_time_iso_8601": "2025-07-21T19:29:19.121470Z",
            "url": "https://files.pythonhosted.org/packages/3f/60/6c489158c5ba397841716f656745365f08cdee35711319c9d72d72625170/rust_pyfunc-0.27.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "1742b35928f445ee9deca075780953989a6d4c6b21882054f1340dacaffeb873",
                "md5": "3cd817aa20742715a93380a252521334",
                "sha256": "f0fca1cfccf405414ab8a744fa8a35d7e07186c24a11a007f8566221690d1c41"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl",
            "has_sig": false,
            "md5_digest": "3cd817aa20742715a93380a252521334",
            "packagetype": "bdist_wheel",
            "python_version": "pp39",
            "requires_python": ">=3.8",
            "size": 1115700,
            "upload_time": "2025-07-21T19:29:21",
            "upload_time_iso_8601": "2025-07-21T19:29:21.044472Z",
            "url": "https://files.pythonhosted.org/packages/17/42/b35928f445ee9deca075780953989a6d4c6b21882054f1340dacaffeb873/rust_pyfunc-0.27.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "1ebaece0b01dc40e0f9254fa12e867b2f2002d2bdc6f3716aaede1d33bcd7b99",
                "md5": "9fdfe298f5e3e0b15836a00695d7bc85",
                "sha256": "c8f2b78ccad271be0afff8eadeb84bc2c2325caf40750c4a73f0b2161a5a2bc8"
            },
            "downloads": -1,
            "filename": "rust_pyfunc-0.27.0.tar.gz",
            "has_sig": false,
            "md5_digest": "9fdfe298f5e3e0b15836a00695d7bc85",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 228571,
            "upload_time": "2025-07-21T19:29:22",
            "upload_time_iso_8601": "2025-07-21T19:29:22.956026Z",
            "url": "https://files.pythonhosted.org/packages/1e/ba/ece0b01dc40e0f9254fa12e867b2f2002d2bdc6f3716aaede1d33bcd7b99/rust_pyfunc-0.27.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-07-21 19:29:22",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "chen-001",
    "github_project": "rust_pyfunc",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "rust-pyfunc"
}
        
Elapsed time: 1.70141s