Metadata-Version: 2.4
Name: phm-algo-ias
Version: 1.5.3
Summary: Example algo package with Cython-compiled submodules
Author: Your Name
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Cython
Classifier: Programming Language :: C
Requires-Python: >=3.11
Description-Content-Type: text/markdown
Requires-Dist: passlib==1.7.4
Requires-Dist: pandas==2.2.3
Requires-Dist: numpy==2.0.1
Requires-Dist: scipy==1.14.0
Requires-Dist: scikit-learn==1.5.1
Requires-Dist: matplotlib==3.9.2
Requires-Dist: seaborn==0.13.2
Requires-Dist: openpyxl==3.1.5
Requires-Dist: statsmodels==0.14.4

# 應用場域
|     | 機台種類                             | 特徵採用        | |
| --- | --------------------------------- | --------- | ------------------------ |
| | 固定式轉動機械        | 時域、頻域、fail mode |     |
|  | 非固定式轉動機械      | 時域、頻域 |      |

# 參數列表

|     | 演算法功能                                       | 建模參數                     | 適用機械          | 客戶、用途               |
| --- | ------------------------------------------- | ------------------------ | ------------- | ------------------- |
| 0.1 | DEMO_1 (每分鐘訓練以及推論)                     | "0, 0, 1, 1, 2, 1, 1, 1" |       固定式轉動機械      | DEMO (Segmentation) |
| 0.2 | DEMO_2 (時窗=60s, step=30s做訓練以及推論 )      | "0, 0, 1, 1, 2, 1, 1, 4" |       固定式轉動機械      | DEMO (Rolling)      |
| 0.3 | DEMO_1 (每分鐘訓練以及推論)                     | "0, 0, 1, 2, 2, 1, 1, 1" |       非固定式轉動機械     | DEMO (Segmentation) |
| 0.4 | DEMO_2 (時窗=60s, step=30s做訓練以及推論)       | "0, 0, 1, 2, 2, 1, 1, 4" |       非固定式轉動機械     | DEMO (Rolling)      |
| 1-1 | Rolling 一般建模 (時域、頻域、fail mode)        | "1, 0, 1, 1, 2, 1, 1, 3" |       固定式轉動機械       |                     |
| 1-2 | Rolling 一般建模 (時域、頻域)                   | "1, 0, 1, 2, 2, 1, 1, 3" |       非固定式轉動機械     | KDY、USUN、南科TSMC     |
| 2-1 | 快速建模-暫態 (頻域)                            | "1, 0, 1, 2, 2, 1, 1, 2" |        非固定式轉動機械   | 南科TSMC              |
| 2-2 | 快速建模-穩態 (頻域)                            | "1, 0, 1, 2, 2, 1, 1, 3" |        非固定式轉動機械   | 南科TSMC              |

# 參數意義
|   | 0 | 1 | 2 | 3 | 4 |
|---|---|---|---|---|---|
| 1. 時間長度設定 | min | hour |  |  |  |
| 2. 測試資料群值處理 | close | open |  |  |  |
| 3. 低解析度特徵篩選 | close | open |  |  |  |
| 4. 特徵選擇 |  | Time, Frequency, fail mode | Time, Frequency | Frequency |  |
| 5. Scale |  | df_scaled = df | Standardize() | minmax() |  |
| 6. 模型 |  | PCA + T² |  |  |  |
| 7. rul_deadline |  | T² + 12 * σ(T²) → Score | Warning: T² + 24 * σ(T²) → Score<br>rul_deadline = 0 |  |  |
| 8. feature_extraction_setting |  | 每小時取特徵<br>小時不足1800筆則刪除 | 依資料進行rolling計算<br>Window = 120s<br>Step = 60s (暫態) | Rolling計算<br>Window = 3600s<br>Step = 1800s (穩態) | Rolling計算 Window = 60s ,Step = 30s  |

# error_stage列表
|Training | error_stage                         | 程式步驟 |
|-----|-----------------------------------|---------------------------|
|    | Error_01                            | df 轉換成每秒一筆資料 |
|    | Error_02                            | 出廠設定參數 |
|    | Error_03                            | 前處理 |
|    | Error_04                            | 特徵分類/挑選 |
|    | Error_05                            | 低解析度特徵篩選 |
|    | Error_06                            | 特徵萃取 |
|    | Error_07                            | 資料正規化 |
|    | Error_08                            | 建模 |
|    | Error_09                            | RUL 計算 |

|Inference | error_stage                         | 程式步驟 |
|-----|-----------------------------------|---------------------------|
|    | Error_01                            | df 轉換成每秒一筆資料 |
|    | Error_02                            | 檢查資料筆數 (是否<301) |
|    | Error_03                            | 出廠設定參數 |
|    | Error_04                            | 前處理 |
|    | Error_05                            | 特徵萃取 |
|    | Error_06                            | 資料正規化 |
|    | Error_07                            | 計算 HI & T2 & 嫌疑度變量 |





# 產生 whl 檔案

本專案使用 `pyproject.toml` 搭配 `setup.py` 進行打包，`setup.py` 會透過 Cython 將 `algo` package 內的 Python 模組編譯後放入 wheel。

## 本機產生 wheel

建議使用 Python 3.11 環境，並先安裝建置工具：

```bash
python -m pip install -U pip
python -m pip install build setuptools==80.9.0 wheel==0.45.1 Cython==3.1.3 setuptools-scm
```

確認目前 git tag，例如：

```bash
git describe --tags --abbrev=0
```

產生 wheel：

```bash
SETUPTOOLS_SCM_PRETEND_VERSION=1.5.2 python -m build --wheel
```

完成後，wheel 檔案會產生在：

```bash
dist/
```

> `SETUPTOOLS_SCM_PRETEND_VERSION` 請依實際要發佈的版本調整；若目前最新 tag 是 `v1.5.2`，可填 `1.5.2`。

## 產生 Linux manylinux wheel

專案內已有 `build_multarch.sh`，主要使用 `cibuildwheel` 建置 Linux wheel。若要手動建置，可參考以下流程：

```bash
python -m pip install -U pip cibuildwheel

export CIBW_ARCHS_LINUX="x86_64 aarch64"
export CIBW_BUILD="cp311-*"
export CIBW_MANYLINUX_X86_64_IMAGE="quay.io/pypa/manylinux_2_28_x86_64"
export CIBW_MANYLINUX_AARCH64_IMAGE="quay.io/pypa/manylinux_2_28_aarch64"
export CIBW_TEST_SKIP="*"
export CIBW_REPAIR_WHEEL_COMMAND='auditwheel repair --only-plat -w {dest_dir} {wheel}'
export CIBW_ENVIRONMENT='SETUPTOOLS_SCM_PRETEND_VERSION="1.5.2"'

cibuildwheel --platform linux
```

完成後，wheel 檔案會產生在：

```bash
wheelhouse/
```

注意：`build_multarch.sh` 最後包含 `twine upload`，會將 `wheelhouse/*` 上傳到 PyPI repository。如果只想產生 whl 檔案，請不要直接執行整支 `build_multarch.sh`，或先移除/註解最後的 upload 指令。

## 清理建置產物

若需要清理本機產生的 build artifact，可執行：

```bash
python setup.py clean
```
