rosetta/stubs.py は編集しないでください。あれは全モジュールのダミーが入った
動作確認用のファイルで、ここを書き換えると他の担当の作業とぶつかります。
実装は別ファイルに新しいクラスとして書き、ROSETTA 本体に差し込みます。
rosetta/interfaces.py の該当 Protocol が、実装すべきメソッドと引数の定義です。
| 担当 | Protocol |
|---|---|
| SABRA | SabraAtlas |
| CBM | CoordinateToBrainMapper |
| RCS | RosettaCandidateSearch |
対応するダミー実装(stubs.py の ToySabraAtlas / ToyCBM / ToyRCS)が、
最小限の動く例になっています。読む分にはこちらが早いはずです。
rosetta_cbm/ ← 例:CBM の実装(ディレクトリ名は任意)
├── __init__.py
└── mapper.py class SuzukiCBM: ...
継承は不要です。Protocol を満たしていれば通ります(構造的部分型)。
from rosetta.types import CBMResult, CBMStatus, Evidence, ExtractedRegionMention
class SuzukiCBM:
version = "cbm-0.1.0"
def map_paper(self, doi: str, *, top_n: int = 5) -> CBMResult:
...from rosetta import Rosetta, RosettaQuery
from rosetta.stubs import ToySabraAtlas, ToyRCS, ToyHomba, ToyEBL
from rosetta_cbm import SuzukiCBM
rosetta = Rosetta(
cbm=SuzukiCBM(), # 自分の実装
rcs=ToyRCS(ToyHomba(), ToyEBL()), # 他はスタブのまま
sabra=ToySabraAtlas(),
)
print(rosetta.resolve(RosettaQuery(doi="10.1234/xxxx")).to_dict())他のモジュールがスタブのままでも動くので、自分の担当だけ単体で検証できます。
from rosetta import CoordinateToBrainMapper
assert isinstance(SuzukiCBM(), CoordinateToBrainMapper)メソッド名の食い違いはこれで気づけます。引数名までは見てくれないので、
interfaces.py の定義と突き合わせてください。
遠慮なく言ってください。 実装しにくい取り決めは取り決めのほうが悪いので、
interfaces.py を直します。Issue か Slack でご連絡ください。
ただし interfaces.py と types.py の変更は全担当に影響するため、
これらのファイルの直接の編集は避け、PR か相談の形でお願いします。
main… 動く状態を保つ- 作業は各自のブランチで(例
cbm/coordinate-extraction) mainへの取り込みは PR で
規模が小さいうちは厳密でなくて構いませんが、interfaces.py に触る PR だけは
レビューを挟ませてください。