Skip to content

Latest commit

 

History

History
85 lines (59 loc) · 2.93 KB

implementing_a_module.md

File metadata and controls

85 lines (59 loc) · 2.93 KB

担当モジュールの実装の入れ方

rosetta/stubs.py は編集しないでください。あれは全モジュールのダミーが入った 動作確認用のファイルで、ここを書き換えると他の担当の作業とぶつかります。

実装は別ファイルに新しいクラスとして書き、ROSETTA 本体に差し込みます。

手順

1. Protocol を確認する

rosetta/interfaces.py の該当 Protocol が、実装すべきメソッドと引数の定義です。

担当 Protocol
SABRA SabraAtlas
CBM CoordinateToBrainMapper
RCS RosettaCandidateSearch

対応するダミー実装(stubs.py の ToySabraAtlas / ToyCBM / ToyRCS)が、 最小限の動く例になっています。読む分にはこちらが早いはずです。

2. 自分のファイルに実装する

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:
        ...

3. 差し込んで動かす

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())

他のモジュールがスタブのままでも動くので、自分の担当だけ単体で検証できます。

4. Protocol を満たしているか確認する

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 だけは レビューを挟ませてください。