RFC: Decompose the four grade-D complexity hotspots
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
調査の方向性
まず、指定された4つのエントリポイント(_compute_fp.py:159、markov/ddp.py:299、optimize/scalar_maximization.py:5、game_theory/howson_lcp.py:36)を読み、その後、既存のスイートと Radon を実行します。PR ごとに1つの関数に取り組み、公開 API と数値出力を維持します。3つの非 jitted 関数が Radon グレード C 以上に達し、スイートが引き続きグリーンであれば完了です。
索引モデルが issue の本文から書いたものです。
説明
Problem
Radon rates exactly four functions at cyclomatic-complexity grade D — everything else in the package is C or better, so the complexity is concentrated and tractable:
| Function | Location | CC |
|---|---|---|
_compute_fixed_point_ig |
_compute_fp.py:159 |
25 |
DiscreteDP.__init__ |
markov/ddp.py:299 |
24 |
brent_max |
optimize/scalar_maximization.py:5 |
24 |
polym_lcp_solver |
game_theory/howson_lcp.py:36 |
23 |
DiscreteDP.__init__ alone dispatches dense/sparse × full/state-action-pairs input forms inline; _compute_fixed_point_ig interleaves algorithm and bookkeeping. High-CC plus hand-verified numerics is where regressions hide.
Proposed change
One PR per function; behavior-preserving extraction only:
DiscreteDP.__init__→ extract_parse_full_form(...)/_parse_sa_form(...)validators returning a normalized bundle._compute_fixed_point_ig→ separate the iteration loop from error/logging bookkeeping.brent_maxis Numba-jitted — some branching is inherent to Brent; treat as best-effort.- Guard with before/after output equality on existing tests (coverage in these regions is strong).
Related context: #480 (repeated logic in several modules).
Acceptance criteria
- Radon grade ≤ C for the three non-jitted functions; no public API change
- Suite green with unchanged numerical outputs
From the July 2026 technical-debt audit (AI-assisted; claims verified against 28d4b3b on 2026-07-25).
- 主要言語
- Python
- スター
- 2.4k
- フォーク
- 2.3k
- 平均マージ
- 5日 19時間
- マージ済み PR(30日)
- 8
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートなし
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
QuantEcon/QuantEcon.py のほかの issue
-
documentation
難易度 1/5 1時間未満 初心者へのやさしさ 92/100
QuantEcon/QuantEcon.py#988 ·
メンテナーはふだん 1 日以内に返信
-
BUG: solve_discrete_riccati_system returns NaN instead of raising when the iteration overflows対応中かも @mayuriphad が今日担当しました。 オープンbug
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
QuantEcon/QuantEcon.py#986 ·
メンテナーはふだん 1 日以内に返信
-
DOC: Document the commit-message prefix convention対応中かも @nicolasdmolina が 37 日前に担当しました。 オープンdocumentation good first issue low-priority
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
QuantEcon/QuantEcon.py#902 · コメント 2 件 ·
メンテナーはふだん 1 日以内に返信
-
documentation security
難易度 2/5 1〜2日 初心者へのやさしさ 68/100
QuantEcon/QuantEcon.py#891 ·
メンテナーはふだん 1 日以内に返信
-
bug documentation
難易度 2/5 1〜3時間 初心者へのやさしさ 45/100
QuantEcon/QuantEcon.py#987 ·
メンテナーはふだん 1 日以内に返信
QuantEcon/QuantEcon.py の issue をすべて見る
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
ok-oldking/ok-wuthering-waves#1785 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
healthchecks/healthchecks#1349 ·
-
deployment release-lag
難易度 1/5 1時間未満 初心者へのやさしさ 68/100
nolte/kamerplanter#2374 ·
メンテナーはふだん 1 日以内に返信
-
bug v1 v2
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
modelcontextprotocol/python-sdk#3725 ·
メンテナーはふだん 1 日以内に返信
-
batchterms() drops queries without a similar() clause, misaligning results with inputs対応中かも @MohammadHijjawi97 が今日担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 86/100
メンテナーはふだん 1 日以内に返信