Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[No.203]Workflow を新しいIDでcopy する機能 #496

Open
wants to merge 26 commits into
base: develop-main
Choose a base branch
from

Conversation

tsuchiyama-araya
Copy link
Collaborator

@tsuchiyama-araya tsuchiyama-araya commented Dec 3, 2024

【内容】
実装画面 → RECORD画面

「RUN ALL」を実行すれば同じワークフローを作成できることは理解しているが、再実行が必要なため時間がかかる。
そのため、実行状態を保持したまま、新しいIDや名前でワークフローをコピーできる機能が欲しい。
Reproduce機能の一つのオプションとして実装するのが適切だと思われる。
→ 右上のDeleteボタンの横に「Duplicate」ボタンを追加する。

Evidence
Screenshot 2024-12-17 at 11 23 08

@tsuchiyama-araya tsuchiyama-araya added the enhancement New feature or request label Dec 3, 2024
@tsuchiyama-araya tsuchiyama-araya self-assigned this Dec 3, 2024
@tsuchiyama-araya tsuchiyama-araya linked an issue Dec 3, 2024 that may be closed by this pull request
7 tasks
frontend/src/store/slice/Experiments/ExperimentsSlice.ts Outdated Show resolved Hide resolved
studio/app/common/core/experiment/experiment_writer.py Outdated Show resolved Hide resolved
studio/app/common/core/experiment/experiment_writer.py Outdated Show resolved Hide resolved
studio/app/common/core/experiment/experiment_writer.py Outdated Show resolved Hide resolved
studio/app/common/routers/experiment.py Outdated Show resolved Hide resolved
studio/app/common/schemas/experiment.py Show resolved Hide resolved
studio/app/common/routers/experiment.py Outdated Show resolved Hide resolved
@tsuchiyama-araya
Copy link
Collaborator Author

@itutu-tienday
ご指摘いただき、ありがとうございました。
ご指摘いただいた箇所を修正いたしましたので、
お手数をおかけしますが、再度ご確認いただけますと幸いです。

@tsuchiyama-araya
Copy link
Collaborator Author

Evidence追記
Screenshot 2024-12-17 at 15 17 51
Screenshot 2024-12-17 at 15 16 40

studio/app/common/core/experiment/experiment_writer.py Outdated Show resolved Hide resolved
) as file:
content = file.read()

if old_unique_id in content:
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

この判定はやや危険がある可能性あり。(想定しないマッチパターンも拾う可能性)
判定条件の精度を高めた方が良い。
→ どの位置に unique_id が含まれ得るか、仕様を整理の上、その条件で正規表現で指定し置換する形がベター。

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

こちらで適当な experiment の directory を id で grep してみたところ、pkl ファイルなどの中にも、idが含まれているようであることを確認。

※このケースは、想定されていたでしょうか?
※この状況を踏まえると、もしかすると、「1.copy」「2.copy元をdelete」「3.copy先を操作(workflow runなど)」の操作を行うと、pkl内のファイルパスがリンク切れとなり、エラーが生じるようなことは想定されないでしょうか?

$ grep -inrl "834359c6" * 
experiment.yaml
snakemake.yaml
suite2p_file_convert_sybncuz8n1/suite2p_file_convert.pkl
suite2p_file_convert_sybncuz8n1/suite2p/plane0/ops.npy
suite2p_registration_obwi55dmml/suite2p_registration.pkl
suite2p_roi_wavpgxg6co/suite2p_roi.pkl

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

この判定はやや危険がある可能性あり。(想定しないマッチパターンも拾う可能性)
→ どの位置に unique_id が含まれ得るか、仕様を整理の上、その条件で正規表現で指定し置換する形がベター。

まだ上記が対応されていない模様。(単純な str.replace が用いられている)
指摘の意図を踏まえ、改善策を適用してください。

frontend/src/store/slice/Experiments/ExperimentsSlice.ts Outdated Show resolved Hide resolved
@tsuchiyama-araya
Copy link
Collaborator Author

@itutu-tienday
お疲れ様です。
指摘した内容を修正しました。お手数ですが、再度ご確認お願い致します。

) as file:
content = file.read()

if old_unique_id in content:
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

この判定はやや危険がある可能性あり。(想定しないマッチパターンも拾う可能性)
→ どの位置に unique_id が含まれ得るか、仕様を整理の上、その条件で正規表現で指定し置換する形がベター。

まだ上記が対応されていない模様。(単純な str.replace が用いられている)
指摘の意図を踏まえ、改善策を適用してください。

logger.error(f"Error replacing unique_id in files: {e}")
return False

def __update_yaml(self, file_path: str, old_id: str, new_id: str) -> None:
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

関数名(__update_xxx)がやや単純であり、関数名から機能が把握しづらく見える。
用途(copy_data からしか参照されない関数でもある)を明確にした名称とする。

except Exception as e:
logger.warning(f"Failed to update YAML {file_path}: {e}")

def __update_pickle(self, file_path: str, old_id: str, new_id: str) -> None:
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

他の `def __update_xxx' と同様、関数名を refactoring する

except Exception as e:
logger.warning(f"Failed to update Pickle {file_path}: {e}")

def __update_npy(self, file_path: str, old_id: str, new_id: str) -> None:
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

他の `def __update_xxx' と同様、関数名を refactoring する

except Exception as e:
logger.warning(f"Failed to update NPY {file_path}: {e}")

def __replace_ids_recursive(
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

この処理(def copy_data からの呼び出し)は、自動テスト(想定通りに各データが置換されているかどうか)を用意しておくのがよいと思われる。

※自動テストの実装作業は、簡易に対応可能であればこのPR内で、多少の時間を要する場合は、別issueで対応を想定してください。

else:
return obj

def __update_experiment_config_name(self, output_dir: str) -> bool:
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

他の `def __update_xxx' と同様、関数名を refactoring する


config["name"] = f"{config.get('name', 'experiment')}_copy"
with open(config_path, "w") as file:
yaml.safe_dump(config, file)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

他の箇所のyaml保存では、yaml の dump には yaml.dump が使用されています。
yaml.safe_dump の方が本来適切そうですが、箇所により使用されるyaml出力関数が異なるのは、あまり適切ではなさそうです。

ここで yaml.safe_dump を利用している明確な意図はありますか?
特に明確な意図がなければ、他の箇所とコードを統一しておいてください。


config["name"] = f"{config.get('name', 'experiment')}_copy"
with open(config_path, "w") as file:
yaml.safe_dump(config, file)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ここで yaml dump すると、experiment.yaml 内の構造(key の order)が全体的に変更されています。
以下を参考に、構造を維持する調整を適用してください。

  • f76722a

  • また上記の仕様(yamlファイルの構造維持)を、テストケースにも追記しておいてください。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[No.203]Workflow を新しいIDでcopy する機能
3 participants