♻️ core 잔여 지표 nullable 입력 전환#19
Conversation
This stack of pull requests is managed by Graphite. Learn more about stacking. |
sjquant
left a comment
There was a problem hiding this comment.
[CCI]
200k all-Some release 벤치에서 CCI가 main 1.49ms에서 PR #19 8.24ms로 약 5.5배 느려졌습니다. 현재 구현은 각 출력 인덱스마다 Vec::with_capacity(period)를 만들고 window 값을 복사한 뒤 합계와 평균편차를 계산합니다. nullable strict semantics는 유지하되 window slice를 두 번 순회해서 valid 여부/sum과 mean deviation을 계산하거나, 고정 버퍼를 재사용하면 per-row heap allocation 없이 기존 구조에 가깝게 줄일 수 있습니다.
[PSL]
PSL은 main의 단일 rolling count 루프가 PR #19에서 positive_changes 전체 벡터 생성, rolling_sum_strict 전체 스캔, 결과 변환 스캔으로 바뀌면서 0.32ms에서 0.78ms로 약 2.5배 느려졌습니다. nullable gap 처리는 change valid_count와 positive count를 한 루프에서 유지하고, 빠지는 change를 closes[i - period + 1]/closes[i - period]로 제거하면 중간 벡터와 반복 스캔 없이 보존할 수 있습니다.
[MFI]
MFI는 all-Some 200k 벤치에서 main 1.15ms에서 PR #19 1.70ms로 약 1.5배 느려졌습니다. 현재는 typical price, positive/negative money flow, 두 rolling sum 결과를 모두 materialize한 뒤 마지막에 다시 나눗셈을 합니다. strict-window nullable 처리는 money flow의 pos/neg rolling sums와 valid_count를 한 흐름에서 유지하는 방식으로도 가능해서, 전체 벡터 여러 개와 추가 패스를 줄일 수 있습니다.
|
@sjquant
|
Merge activity
|
## 요약 - 이 PR은 `#17` 위에 쌓인 stacked PR입니다. 리뷰는 `core-nullable-composites` 대비로 봐주시면 됩니다. - 남아 있던 dense-to-nullable bridge helper인 `ema_dense`, `rsi_dense`를 제거하고, 마지막 adapter 의존 indicator를 직접 nullable 입력 계약으로 전환합니다. - 하위 PR들에서 이미 정리한 nullable semantics를 그대로 재사용하면서, dense adapter 층만 걷어내는 좁은 범위의 cleanup입니다. ## 변경 사항 - `erbull`, `erbear`, `cv`, `stochrsi`를 `&[Option<f64>]` 입력 기준으로 전환합니다. - 각 indicator가 `ema`, `rsi` 같은 nullable 본체를 직접 사용하도록 정리합니다. - `ema_dense`, `rsi_dense`를 제거합니다. - gap 전파와 재개 동작이 기존 nullable contract를 그대로 따르는지 확인하는 테스트를 보강합니다. ## 리뷰 포인트 - touched indicator가 dense adapter 없이도 동일한 aligned nullable semantics를 유지하는지 - `EMA`/`RSI` 기반 파생 지표가 gap 이후 조기 emission 없이 기존 contract를 그대로 따르는지 - `core` 내부에 `_dense` adapter가 더 이상 남지 않는지 ## 범위 외 - 남아 있던 dense public indicator API의 최종 nullable 전환은 상위 PR `#19`에서 다룹니다. - `plugin/polars` nullable adapter 마이그레이션은 이번 stack 범위 밖입니다. ## 테스트 계획 - [x] `cargo fmt --package techr-core --check` - [x] `cargo test -p techr-core`
b3621a1 to
0a5645b
Compare

요약
#18위에 쌓인 stacked PR입니다. 리뷰는core-remove-dense-adapters대비로 봐주시면 됩니다.core에 남아 있던 마지막 dense public indicator API를 nullable 입력 계약으로 전환해, 공개 surface 기준 nullable 마이그레이션을 마무리합니다.core의 공개 API에는&[f64]기반 indicator entrypoint가 남지 않도록 맞춥니다.변경 사항
mom,roc,psl,cci,mfi를 nullable 입력 기준으로 전환합니다.aroon,aroonosc,willr,pchan,stochf,stochs,ichimoku를 nullable extrema/window semantics에 맞게 전환합니다.core/src/utils.rs의rolling_max_min,rolling_argmax_argmin,rolling_midpoint를 full valid window를 요구하는 nullable helper로 정리합니다.stochrsi경로를 새 nullable extrema helper에 맞게 정리합니다.리뷰 포인트
core공개 API에&[f64]기반 indicator가 더 이상 남지 않는지stoch*,aroon*,ichimoku,cci,mfi가 대표적인 확인 포인트입니다.범위 외
plugin/polarsnullable adapter 마이그레이션은 여전히 후속 작업입니다.core공개 API와 helper semantics 정리에 집중하며, 별도의 성능 최적화 패스는 포함하지 않습니다.테스트 계획
cargo fmt --package techr-core --checkcargo test -p techr-corerg '^pub fn .*\\[f64\\]' core/src결과 없음 확인