{
  "appeals": 1,
  "budgets": {
    "baseline_limit_s": 600,
    "verification_timeout_s": 600,
    "worker": {
      "max_completion_tokens": 96000,
      "max_turns": 60,
      "max_wall_seconds": 1500.0,
      "prompt_token_budget": 160000
    }
  },
  "issue": "PipelineML breaks on kedro-viz 9.2.0\n## Description\r\n\r\nPipelineML breaks on kedro-viz 9.2.0\r\n\r\n## Context\r\n\r\nThe new kedro-viz 9.2.0 release heavily refactors graph generation for namespaced pipelines - https://github.com/kedro-org/kedro-viz/pull/1897. It now uses `only_nodes_with_namespace` and `__sub__` pipeline methods, but PipelineML doesn't have them implemented. \r\n\r\n## Steps to Reproduce\r\n\r\n1. Have a PipelineML specified in kedro project (by using `pipeline_ml_factory`)\r\n2. Run kedro viz\r\n\r\n## Expected Result\r\n\r\nKedro viz should run, and pipeline should display training nodes\r\n\r\n## Actual Result\r\n\r\nKedro viz cannot run at all\r\n\r\n```\r\n  File \"repo/venv/lib/python3.10/site-packages/kedro_viz/data_access/repositories/modular_pipelines.py\", line 61, in populate_tree\r\n    sub_pipeline = pipeline.only_nodes_with_namespace(modular_pipeline_id)\r\n  File \"repo/venv/lib/python3.10/site-packages/kedro_mlflow/pipeline/pipeline_ml.py\", line 168, in only_nodes_with_namespace\r\n    raise NotImplementedError(MSG_NOT_IMPLEMENTED)\r\nNotImplementedError: This method is not implemented because it does not make sense for 'PipelineML'. Manipulate directly the training pipeline and recreate the 'PipelineML' with 'pipeline_ml_factory' factory.\r\n\r\n```\r\n\r\n```\r\n  File \"repo/venv/lib/python3.10/site-packages/kedro_viz/data_access/repositories/modular_pipelines.py\", line 62, in populate_tree\r\n    rest_of_the_pipeline = pipeline - sub_pipeline\r\n  File \"repo/venv/lib/python3.10/site-packages/kedro_mlflow/pipeline/pipeline_ml.py\", line 239, in __sub__\r\n    raise NotImplementedError(MSG_NOT_IMPLEMENTED)\r\nNotImplementedError: This method is not implemented because it does not make sense for 'PipelineML'. Manipulate directly the training pipeline and recreate the 'PipelineML' with 'pipeline_ml_factory' factory.\r\n\r\n```\r\n\r\n\r\n## Workaround\r\n\r\nQuick and dirty implementation in PipelineML class:\r\n\r\n```py\r\ndef only_nodes_with_namespace(\r\n    self, node_namespace: str\r\n) -> \"Pipeline\":  # pragma: no cover\r\n    return self.training.only_nodes_with_namespace(node_namespace)\r\n```\r\n\r\n```py\r\ndef __sub__(self, other):  # pragma: no cover\r\n      return self.training - other\r\n```\r\n\r\nCan't use `self._turn_pipeline_to_ml(...)` here as the pipelines are not consistent anymore\r\n\r\n## Your Environment\r\n\r\n<!-- Include as many relevant details about the environment in which you experienced the bug: -->\r\n\r\n* `kedro` and `kedro-mlflow` : 0.19.6 and 0.12.2\r\n* Python version used (`python -V`): 3.10.11\r\n* Operating system and version: M2 Sonoma 14.5\r\n\r\n## Does the bug also happen with the last version on master?\r\n\r\nProbably yes",
  "source": {
    "image": "docker.io/swerebenchv2/galileo-galilei-kedro-mlflow:585-61864f0",
    "platform": "linux/amd64",
    "python": "python",
    "setup": [
      "python -c 'import base64; from pathlib import Path; Path('\"'\"'/tmp/receipts-galileo-galilei__kedro-mlflow-585-test.patch'\"'\"').write_bytes(base64.b64decode('\"'\"'ZGlmZiAtLWdpdCBhL3Rlc3RzL3BpcGVsaW5lL3Rlc3RfcGlwZWxpbmVfbWwucHkgYi90ZXN0cy9waXBlbGluZS90ZXN0X3BpcGVsaW5lX21sLnB5CmluZGV4IDM3NzQwNTguLmE1NmY4ZmYgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3BpcGVsaW5lL3Rlc3RfcGlwZWxpbmVfbWwucHkKKysrIGIvdGVzdHMvcGlwZWxpbmUvdGVzdF9waXBlbGluZV9tbC5weQpAQCAtMSw2ICsxLDYgQEAKIGltcG9ydCBweXRlc3QKIGZyb20ga2Vkcm8uaW8gaW1wb3J0IERhdGFDYXRhbG9nLCBNZW1vcnlEYXRhc2V0Ci1mcm9tIGtlZHJvLnBpcGVsaW5lIGltcG9ydCBQaXBlbGluZSwgbm9kZQorZnJvbSBrZWRyby5waXBlbGluZSBpbXBvcnQgUGlwZWxpbmUsIG5vZGUsIHBpcGVsaW5lCiBmcm9tIGtlZHJvX2RhdGFzZXRzLnBhbmRhcyBpbXBvcnQgQ1NWRGF0YXNldAogCiBmcm9tIGtlZHJvX21sZmxvdy5waXBlbGluZSBpbXBvcnQgcGlwZWxpbmVfbWxfZmFjdG9yeQpAQCAtMTE5LDYgKzExOSwxOCBAQCBkZWYgcGlwZWxpbmVfbWxfd2l0aF9pbnRlcm1lZGlhcnlfYXJ0aWZhY3RzKCk6CiAgICAgcmV0dXJuIHBpcGVsaW5lX21sX3dpdGhfaW50ZXJtZWRpYXJ5X2FydGlmYWN0cwogCiAKK0BweXRlc3QuZml4dHVyZQorZGVmIHBpcGVsaW5lX21sX3dpdGhfbmFtZXNwYWNlKHBpcGVsaW5lX21sX3dpdGhfdGFnKToKKyAgICBwaXBlbGluZV9tbF93aXRoX25hbWVzcGFjZSA9IHBpcGVsaW5lX21sX2ZhY3RvcnkoCisgICAgICAgIHRyYWluaW5nPXBpcGVsaW5lKHBpcGVsaW5lX21sX3dpdGhfdGFnLnRyYWluaW5nLCBuYW1lc3BhY2U9InRtcF9uYW1lc3BhY2UiKSwKKyAgICAgICAgaW5mZXJlbmNlPXBpcGVsaW5lKAorICAgICAgICAgICAgcGlwZWxpbmVfbWxfd2l0aF90YWcuaW5mZXJlbmNlLCBpbnB1dHM9eyJtb2RlbCI6ICJ0bXBfbmFtZXNwYWNlLm1vZGVsIn0KKyAgICAgICAgKSwKKyAgICAgICAgaW5wdXRfbmFtZT1waXBlbGluZV9tbF93aXRoX3RhZy5pbnB1dF9uYW1lLAorICAgICkKKyAgICByZXR1cm4gcGlwZWxpbmVfbWxfd2l0aF9uYW1lc3BhY2UKKworCiBAcHl0ZXN0LmZpeHR1cmUKIGRlZiBwaXBlbGluZV9tbF93aXRoX2lucHV0c19hcnRpZmFjdHMoKToKICAgICBmdWxsX3BpcGVsaW5lID0gUGlwZWxpbmUoCkBAIC0yNDYsNiArMjU4LDUyIEBAIGRlZiBjYXRhbG9nX3dpdGhfcGFyYW1ldGVycygpOgogICAgIHJldHVybiBjYXRhbG9nX3dpdGhfcGFyYW1ldGVycwogCiAKK2RlZiB0ZXN0X3BpcGVsaW5lX21sX29ubHlfbm9kZXNfd2l0aF9uYW1lc3BhY2UoCisgICAgY2FwbG9nLAorICAgIHBpcGVsaW5lX21sX3dpdGhfbmFtZXNwYWNlLAorKToKKyAgICAiIiJXaGVuIHRoZSBwaXBlbGluZSBpcyBmaWx0ZXJlZCB3aXRoIG9ubHlfbm9kZXNfd2l0aF9uYW1lc3BhY2UsIHdlIHJldHVybiBvbmx5IHRoZSB0cmFpbmluZyBwaXBlbGluZS4gVGhpcyBpcyBmb3Iga2Vkcm8gdml6IGNvbXBhdGliaWxpdHkiIiIKKworICAgICMgcGlwZWxpbmVfbWxfd2l0aF9uYW1lc3BhY2UgYXJlIGZpeHR1cmUgaW4gY29uZnRlc3QKKworICAgICMgcmVtZW1iZXIgOiB0aGUgYXJndW1lbnRzIGFyZSBpdGVyYWJsZSwgc28gZG8gbm90IHBhc3Mgc3RyaW5nIGRpcmVjdGx5IChlLmcgWyJ0cmFpbmluZyJdIHJhdGhlciB0aGFuIHRyYWluaW5nKQorCisgICAgZmlsdGVyZWRfcGlwZWxpbmVfbWwgPSBwaXBlbGluZV9tbF93aXRoX25hbWVzcGFjZS5vbmx5X25vZGVzX3dpdGhfbmFtZXNwYWNlKAorICAgICAgICBub2RlX25hbWVzcGFjZT0idG1wX25hbWVzcGFjZSIKKyAgICApCisKKyAgICAjIFBpcGVsaW5lTUwgY2xhc3MgbXVzdCBiZSBwcmVzZXJ2ZWQgd2hlbiBmaWx0ZXJpbmcKKyAgICAjIGluZmVyZW5jZSBzaG91bGQgYmUgdW5tb2RpZmllZAorICAgICMgdHJhaW5pbmcgcGlwZWxpbmUgbm9kZXMgbXVzdCBiZSBpZGVudGljYWwgdG8ga2Vkcm8gZmlsdGVyaW5nLgorICAgIGFzc2VydCBpc2luc3RhbmNlKGZpbHRlcmVkX3BpcGVsaW5lX21sLCBQaXBlbGluZSkKKyAgICBhc3NlcnQgbm90IGlzaW5zdGFuY2UoZmlsdGVyZWRfcGlwZWxpbmVfbWwsIFBpcGVsaW5lTUwpCisgICAgYXNzZXJ0IHN0cihmaWx0ZXJlZF9waXBlbGluZV9tbCkgPT0gc3RyKHBpcGVsaW5lX21sX3dpdGhfbmFtZXNwYWNlLnRyYWluaW5nKQorICAgIGFzc2VydCAia2Vkcm8tdml6IGJ1dCBzaG91bGQgbmV2ZXIgYmUiIGluIGNhcGxvZy50ZXh0CisKKworZGVmIHRlc3RfcGlwZWxpbmVfbWxfc3Vic3RyYWN0aW9uKAorICAgIGNhcGxvZywKKyAgICBwaXBlbGluZV9tbF93aXRoX2ludGVybWVkaWFyeV9hcnRpZmFjdHMsCispOgorICAgICIiIldoZW4gdGhlIHBpcGVsaW5lIGlzIGZpbHRlcmVkIHdpdGggb25seV9ub2Rlc193aXRoX25hbWVzcGFjZSwgd2UgcmV0dXJuIG9ubHkgdGhlIHRyYWluaW5nIHBpcGVsaW5lLiBUaGlzIGlzIGZvciBrZWRybyB2aXogY29tcGF0aWJpbGl0eSIiIgorCisgICAgIyBwaXBlbGluZV9tbF93aXRoX25hbWVzcGFjZSBhcmUgZml4dHVyZSBpbiBjb25mdGVzdAorCisgICAgIyByZW1lbWJlciA6IHRoZSBhcmd1bWVudHMgYXJlIGl0ZXJhYmxlLCBzbyBkbyBub3QgcGFzcyBzdHJpbmcgZGlyZWN0bHkgKGUuZyBbInRyYWluaW5nIl0gcmF0aGVyIHRoYW4gdHJhaW5pbmcpCisKKyAgICBmaWx0ZXJlZF9waXBlbGluZV9tbCA9ICgKKyAgICAgICAgcGlwZWxpbmVfbWxfd2l0aF9pbnRlcm1lZGlhcnlfYXJ0aWZhY3RzCisgICAgICAgIC0gcGlwZWxpbmVfbWxfd2l0aF9pbnRlcm1lZGlhcnlfYXJ0aWZhY3RzLmluZmVyZW5jZQorICAgICkKKworICAgICMgUGlwZWxpbmVNTCBjbGFzcyBtdXN0IGJlIHByZXNlcnZlZCB3aGVuIGZpbHRlcmluZworICAgICMgaW5mZXJlbmNlIHNob3VsZCBiZSB1bm1vZGlmaWVkCisgICAgIyB0cmFpbmluZyBwaXBlbGluZSBub2RlcyBtdXN0IGJlIGlkZW50aWNhbCB0byBrZWRybyBmaWx0ZXJpbmcuCisgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZmlsdGVyZWRfcGlwZWxpbmVfbWwsIFBpcGVsaW5lKQorICAgIGFzc2VydCBub3QgaXNpbnN0YW5jZShmaWx0ZXJlZF9waXBlbGluZV9tbCwgUGlwZWxpbmVNTCkKKyAgICBhc3NlcnQgImtlZHJvLXZpeiBidXQgc2hvdWxkIG5ldmVyIGJlIiBpbiBjYXBsb2cudGV4dAorCisKIEBweXRlc3QubWFyay5wYXJhbWV0cml6ZSgKICAgICAidGFncyxmcm9tX25vZGVzLHRvX25vZGVzLG5vZGVfbmFtZXMsZnJvbV9pbnB1dHMiLAogICAgIFsK'\"'\"'))'",
      "git apply /tmp/receipts-galileo-galilei__kedro-mlflow-585-test.patch"
    ],
    "workdir": "/kedro-mlflow"
  },
  "spec_paths": [
    "tests/pipeline/test_pipeline_ml.py"
  ],
  "spec_tests": [
    "tests/pipeline/test_pipeline_ml.py::test_pipeline_ml_only_nodes_with_namespace",
    "tests/pipeline/test_pipeline_ml.py::test_pipeline_ml_substraction"
  ],
  "suite_scope": "--no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning tests/pipeline/test_pipeline_ml.py"
}
