Skip to main content

AutoTau

AutoTau 是一个用于拟合指数上升/下降过程时间常数 τ 的 Python 工具,面向瞬态或周期信号的 τ 提取与分析。

模型形式:

  • 上升(turn-on):y = A * (1 - exp(-t/τ)) + C
  • 下降(turn-off):y = A * exp(-t/τ) + C

主要功能

  • 指定窗口的 τ 拟合(TauFitter),输出 τ、R²、调整后 R²,并支持绘图。
  • 滑动窗口自动搜索最佳拟合区间(AutoTauFitter),可选并行执行。
  • 多周期自动拟合(CyclesAutoTauFitter),自动从前两个周期推断窗口并应用到全部周期。
  • 窗口搜索与拟合解耦:WindowFinder 只找窗口;CyclesTauFitter/ParallelCyclesTauFitter 使用手动窗口拟合。
  • 多进程并行周期拟合(ParallelCyclesTauFitter),默认返回 pandas.DataFrame。
  • PyQt5 图形界面(v0.5.0 新增):支持从 Excel 粘贴数据、自动/手动拟合、可视化结果、导出 CSV/Excel。

安装

pip install autotau

安装 GUI 版本(包含 PyQt5):

pip install autotau[gui]

本地开发安装:

pip install -e .
# 或带 GUI
pip install -e ".[gui]"

Python 版本要求:>=3.6。

快速开始

1) 单窗口拟合(TauFitter)

import numpy as np
from autotau import TauFitter

time = np.linspace(0, 0.4, 400)
signal = np.where(
    time <= 0.2,
    1 - np.exp(-time / 0.05),
    np.exp(-(time - 0.2) / 0.05),
)

fitter = TauFitter(
    time,
    signal,
    t_on_idx=[0.0, 0.2],
    t_off_idx=[0.2, 0.4],
    normalize=False,
    language="en",
)

fitter.fit_tau_on(interp=True, points_after_interp=200)
fitter.fit_tau_off(interp=True, points_after_interp=200)

print("tau_on:", fitter.get_tau_on())
print("tau_off:", fitter.get_tau_off())
print("R2_on:", fitter.tau_on_r_squared, "R2_adj_on:", fitter.tau_on_r_squared_adj)

2) 自动窗口搜索(AutoTauFitter)

假设已有 time、signal(同采样、按时间升序),且包含一个完整周期。

from autotau import AutoTauFitter

auto_fitter = AutoTauFitter(
    time,
    signal,
    sample_step=time[1] - time[0],
    period=0.4,
    window_scalar_min=0.2,
    window_scalar_max=1/3,
    window_points_step=10,
    window_start_idx_step=1,
    normalize=False,
    language="en",
    show_progress=True,
)

auto_fitter.fit_tau_on_and_off()

print("best tau_on:", auto_fitter.best_tau_on_fitter.get_tau_on())
print("best tau_off:", auto_fitter.best_tau_off_fitter.get_tau_off())
print("on window:", auto_fitter.best_tau_on_window_start_time, auto_fitter.best_tau_on_window_end_time)

3) 多周期自动拟合(CyclesAutoTauFitter)

假设 time、signal 为多周期数据,period 为单周期长度。

from autotau import CyclesAutoTauFitter

period = 0.4
sample_rate = 1000

cycles_fitter = CyclesAutoTauFitter(
    time,
    signal,
    period=period,
    sample_rate=sample_rate,
    window_scalar_min=0.2,
    window_scalar_max=1/3,
    window_points_step=10,
    window_start_idx_step=1,
    normalize=False,
    language="en",
)

results = cycles_fitter.fit_all_cycles(r_squared_threshold=0.95)
summary = cycles_fitter.get_summary_data()
print(summary.head())

4) 手动窗口 + 并行多周期拟合

先在前两个周期搜索窗口,再并行拟合全部周期。

from autotau import WindowFinder, ParallelCyclesTauFitter

two_period_mask = time <= time[0] + 2 * period
time_subset = time[two_period_mask]
signal_subset = signal[two_period_mask]

finder = WindowFinder(
    time_subset,
    signal_subset,
    sample_step=1 / sample_rate,
    period=period,
    window_scalar_min=0.2,
    window_scalar_max=1/3,
    show_progress=True,
    max_workers=4,
)
windows = finder.find_best_windows()

fitter = ParallelCyclesTauFitter(
    time,
    signal,
    period=period,
    sample_rate=sample_rate,
    window_on_offset=windows["on"]["offset"],
    window_on_size=windows["on"]["size"],
    window_off_offset=windows["off"]["offset"],
    window_off_size=windows["off"]["size"],
    show_progress=True,
    max_workers=4,
)

df = fitter.fit_all_cycles()  # 默认返回 DataFrame

并行使用建议

  • AutoTauFitter 可通过注入 executor 并行化窗口搜索:
    from concurrent.futures import ProcessPoolExecutor
    from autotau import AutoTauFitter
    
    with ProcessPoolExecutor(max_workers=8) as executor:
        fitter = AutoTauFitter(time, signal, sample_step=..., period=..., executor=executor)
        fitter.fit_tau_on_and_off()
    
  • CyclesAutoTauFitter 可通过 fitter_factory 传入自定义 AutoTauFitter(例如带并行的版本)。
  • ParallelCyclesTauFitter 已内置多进程“分块并行”,适合周期数较多的场景。
  • Windows 下使用多进程时,请将并行入口放在 if __name__ == "__main__": 中。

API 概览

  • TauFitter:指定窗口拟合 τ,输出拟合参数与 R²。
  • AutoTauFitter:滑动窗口搜索最佳拟合区间(可选并行)。
  • CyclesAutoTauFitter:多周期自动拟合,支持低 R² 周期的再拟合。
  • WindowFinder:只搜索窗口,不做拟合。
  • CyclesTauFitter:使用手动窗口拟合多个周期(串行)。
  • ParallelCyclesTauFitter:使用手动窗口拟合多个周期(并行,默认返回 DataFrame)。
  • ParallelAutoTauFitter / ParallelCyclesAutoTauFitter:保留兼容但已废弃,建议改用 AutoTauFitter(..., executor=...) 与 CyclesAutoTauFitter(..., fitter_factory=...)。

图形界面(GUI)

v0.5.0 新增 PyQt5 图形界面,支持:

  • 从 Excel 复制粘贴两列数据(时间、信号)
  • 自动模式:自动搜索最佳拟合窗口
  • 手动模式:手动指定窗口参数
  • 可视化:原始数据、τ 演化图、R² 质量图
  • 导出结果到 CSV/Excel

启动 GUI

# 方式 1:模块启动
python -m autotau.gui

# 方式 2:命令行(安装后)
autotau-gui

使用流程

  1. 从 Excel 复制两列数据(时间 + 信号)
  2. 点击"Parse Clipboard"解析数据
  3. 设置周期(Period)和采样率(Sample Rate)
  4. 选择拟合模式(Auto/Manual)
  5. 点击"Fit Data"开始拟合
  6. 查看结果图表,导出 CSV/Excel

示例与数据

  • 示例脚本:examples/basic_examples.py
  • 示例数据:autotau/transient.csv

更新日志

v0.6.0

  • GUI 完全解耦:GUI 现在使用独立的拟合模块,不再依赖 core 模块的实现
  • 修复 GUI 卡死问题:使用正确的 QThread 信号机制,确保拟合操作真正在后台线程执行
  • 新增 autotau.gui.fitters 模块:包含 ExponentialFitter、WindowSearcher、CyclesFitter、AutoCyclesFitter
  • 避免 multiprocessing 和 matplotlib 与 GUI 的冲突

v0.5.0

  • 新增 PyQt5 图形界面(GUI)
  • 支持从 Excel 粘贴数据、自动/手动拟合、可视化、导出

v0.4.5

  • 优化分块并行策略
  • 修复窗口偏移量计算问题

许可证

MIT License,见 LICENSE。

Metadata

Release files for autotau 0.6.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for autotau 0.6.0
File Size Uploaded Provenance
autotau-0.6.0.tar.gz 64.2 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for autotau 0.6.0
File Interpreter ABI Platform
autotau-0.6.0-py3-none-any.whl Python 3 none any Details

Total release size: 138.7 kB

Release files / autotau-0.6.0.tar.gz

Download URL autotau-0.6.0.tar.gz
Size 64.2 kB
Tags Source
SHA-256 checksum
How to use checksums
9ff25fc90057ef978d5113f7425c3d506192d7ab1cc4c6cc0fb21188b4859c80
BLAKE2b-256 checksum
How to use checksums
7f545d8653a3eaddd78e03afc2516fec419805ccb30668686c1f9d6086713a7f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.9

Release files / autotau-0.6.0-py3-none-any.whl

Download URL autotau-0.6.0-py3-none-any.whl
Size 74.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
bab9880a9b7a21179e3438b88813ed85c254ddcabdfae422d4c2752d940addd4
BLAKE2b-256 checksum
How to use checksums
ebcc443959322a6208a49549608c1ac83fdd0368ee5d18a0f3ec743c1563a1e3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.9

Security for autotau 0.6.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page