実装リファレンス¶
このページは、教材で使う peano の実装を探すための索引です。
教材本文には、その場の問いを考えるために必要な実装を抜粋します。
前後の処理、import、別の演算まで確認したいときは、ここから完全なファイルを開いてください。
下のリンクは、ブラウザで実行するwheelと同じビルド時点のソースを表示します。
抜粋の読み方¶
- 「実ファイルから抜粋」と書かれたコードは、import、docstring、空行、 対象外のメソッドを除き、実装と同じです。表示幅のための改行だけ変えることがあります。
...を含むコードは説明用の短縮です。短縮であることを本文にも明記します。- メソッド本体だけでなく、直前の
@logや@dataclassも振る舞いの一部として読みます。 - テストの抜粋は証明ではなく、どの入力でどの性質を検査するかを確認する材料です。
章から実ファイルを探す¶
| 教材 | 実装ファイル | まず探す名前 | 対応するテスト |
|---|---|---|---|
| 00 Pythonの仕組み | peano/utils.py |
log, _public_return_annotation |
tests/test_utils.py |
| 01 自然数 | peano/natural_number.py |
NaturalNumber, successor, structural_str, __eq__, __add__ |
tests/test_natural_number.py |
| 02 整数 | peano/integer.py |
Integer, _coerce_integer, normalize |
tests/test_integer.py |
| 03 有理数 | peano/rational.py |
Rational, reduction, _coerce_rational |
tests/test_rational.py |
| 04 多項式 | peano/polynomial.py |
Polynomial, sturm_sequence, count_real_roots |
tests/test_polynomial.py |
| 05 代数的実根 | peano/algebraic_root.py |
RationalInterval, AlgebraicRoot, _bisect |
tests/test_algebraic_root.py |
型をまたぐ等値性とハッシュの契約は、
tests/test_numeric_tower.py
にまとまっています。
リポジトリ全体は
pythonic-peano-arithmetic
から参照できます。教材内のスナップショットは「いま実行している版」、
GitHubは履歴や他ファイルをたどるための参照先です。
呼び出しの全体像¶
利用者が書く一行と、実装内の処理は次の順につながります。
left + right
↓ Pythonが left.__add__(right) へ委譲
@log が作った inner(...)
↓
元の __add__(...) が (result, message_factory) を返す
↓
inner がログ有効時だけ message_factory() を評価して送り、result だけを返す
通常の教材出力は、規則名と式だけを表示します。log_levelの数値は
表示範囲を絞る内部情報であり、計算内容ではないためです。
ロギング実装を調査するときだけ、fmtで内部レベルを表示できます。
数の作成では、dataclass が生成する処理と、手書きの検査がつながります。
Rational(p, q)
↓ dataclassが生成した __init__ が属性を設定
Rational.__post_init__()
↓ 型と分母0を検査
作成に成功した Rational
各章では、この索引を覚える必要はありません。予想問題の直前までに、 必要なコードと参照先を本文内へもう一度示します。