Metadata-Version: 2.4
Name: RCAEval
Version: 1.6.0
Summary: RCAEval: A Benchmark for Root Cause Analysis of Microservice Systems
Description-Content-Type: text/markdown
License-File: LICENSE
Provides-Extra: default
Requires-Dist: aiobotocore==2.5.0; extra == "default"
Requires-Dist: aiohttp>=3.8.4; extra == "default"
Requires-Dist: aiohttp-retry==2.8.3; extra == "default"
Requires-Dist: aioitertools==0.11.0; extra == "default"
Requires-Dist: aiosignal==1.3.1; extra == "default"
Requires-Dist: amqp==5.1.1; extra == "default"
Requires-Dist: antlr4-python3-runtime==4.9.3; extra == "default"
Requires-Dist: appdirs==1.4.4; extra == "default"
Requires-Dist: asttokens==2.2.1; extra == "default"
Requires-Dist: async-timeout==4.0.2; extra == "default"
Requires-Dist: asyncssh==2.13.1; extra == "default"
Requires-Dist: atpublic==3.1.1; extra == "default"
Requires-Dist: attrs==23.1.0; extra == "default"
Requires-Dist: backcall==0.2.0; extra == "default"
Requires-Dist: billiard==3.6.4.0; extra == "default"
Requires-Dist: boto3==1.26.76; extra == "default"
Requires-Dist: botocore==1.29.76; extra == "default"
Requires-Dist: cairocffi==1.5.1; extra == "default"
Requires-Dist: CairoSVG==2.7.0; extra == "default"
Requires-Dist: causal-learn>=0.1.3.3; extra == "default"
Requires-Dist: causality==0.0.10; extra == "default"
Requires-Dist: celery==5.2.7; extra == "default"
Requires-Dist: certifi==2023.5.7; extra == "default"
Requires-Dist: cffi>=1.15.1; extra == "default"
Requires-Dist: cfgv==3.3.1; extra == "default"
Requires-Dist: charset-normalizer==3.1.0; extra == "default"
Requires-Dist: click==8.1.3; extra == "default"
Requires-Dist: click-didyoumean==0.3.0; extra == "default"
Requires-Dist: click-plugins==1.1.1; extra == "default"
Requires-Dist: click-repl==0.2.0; extra == "default"
Requires-Dist: colorama==0.4.6; extra == "default"
Requires-Dist: comm==0.1.3; extra == "default"
Requires-Dist: configobj==5.0.8; extra == "default"
Requires-Dist: contourpy>=1.0.7; extra == "default"
Requires-Dist: cryptography>=40.0.2; extra == "default"
Requires-Dist: cssselect2==0.7.0; extra == "default"
Requires-Dist: cycler==0.11.0; extra == "default"
Requires-Dist: debugpy>=1.6.7; extra == "default"
Requires-Dist: decorator==5.1.1; extra == "default"
Requires-Dist: defusedxml==0.7.1; extra == "default"
Requires-Dist: dictdiffer==0.9.0; extra == "default"
Requires-Dist: diskcache==5.6.1; extra == "default"
Requires-Dist: distlib==0.3.6; extra == "default"
Requires-Dist: distro==1.8.0; extra == "default"
Requires-Dist: dpath==2.1.5; extra == "default"
Requires-Dist: dulwich==0.21.5; extra == "default"
Requires-Dist: et-xmlfile==1.1.0; extra == "default"
Requires-Dist: exceptiongroup==1.1.1; extra == "default"
Requires-Dist: executing==1.2.0; extra == "default"
Requires-Dist: filelock==3.12.0; extra == "default"
Requires-Dist: flatten-dict==0.4.2; extra == "default"
Requires-Dist: flufl.lock==7.1.1; extra == "default"
Requires-Dist: fonttools==4.39.4; extra == "default"
Requires-Dist: frozenlist>=1.3.3; extra == "default"
Requires-Dist: fsspec==2023.5.0; extra == "default"
Requires-Dist: funcy==2.0; extra == "default"
Requires-Dist: gitdb==4.0.10; extra == "default"
Requires-Dist: GitPython==3.1.31; extra == "default"
Requires-Dist: grandalf==0.8; extra == "default"
Requires-Dist: graphviz==0.20.1; extra == "default"
Requires-Dist: hydra-core==1.3.2; extra == "default"
Requires-Dist: identify==2.5.24; extra == "default"
Requires-Dist: idna==3.4; extra == "default"
Requires-Dist: igraph>=0.10.4; extra == "default"
Requires-Dist: iniconfig==2.0.0; extra == "default"
Requires-Dist: ipykernel==6.23.1; extra == "default"
Requires-Dist: ipython==8.13.2; extra == "default"
Requires-Dist: iterative-telemetry==0.0.8; extra == "default"
Requires-Dist: jedi==0.18.2; extra == "default"
Requires-Dist: jmespath==1.0.1; extra == "default"
Requires-Dist: joblib==1.2.0; extra == "default"
Requires-Dist: jupyter_client==8.2.0; extra == "default"
Requires-Dist: jupyter_core==5.3.0; extra == "default"
Requires-Dist: kiwisolver>=1.4.4; extra == "default"
Requires-Dist: kombu==5.2.4; extra == "default"
Requires-Dist: lazy_loader==0.2; extra == "default"
Requires-Dist: littleutils==0.2.2; extra == "default"
Requires-Dist: numpy<2; python_version < "3.13" and extra == "default"
Requires-Dist: numpy>=2.1; python_version >= "3.13" and extra == "default"
Requires-Dist: llvmlite; extra == "default"
Requires-Dist: markdown-it-py==2.2.0; extra == "default"
Requires-Dist: mdurl==0.1.2; extra == "default"
Requires-Dist: multidict>=6.0.4; extra == "default"
Requires-Dist: nanotime==0.5.2; extra == "default"
Requires-Dist: nest-asyncio==1.5.6; extra == "default"
Requires-Dist: networkx==2.5; python_version < "3.13" and extra == "default"
Requires-Dist: networkx>=3.4; python_version >= "3.13" and extra == "default"
Requires-Dist: nodeenv==1.8.0; extra == "default"
Requires-Dist: numba; extra == "default"
Requires-Dist: omegaconf==2.3.0; extra == "default"
Requires-Dist: openpyxl==3.1.2; extra == "default"
Requires-Dist: orjson>=3.8.12; extra == "default"
Requires-Dist: outdated==0.2.2; extra == "default"
Requires-Dist: packaging==23.1; extra == "default"
Requires-Dist: pandas>2.0.1; extra == "default"
Requires-Dist: parso==0.8.3; extra == "default"
Requires-Dist: pathspec==0.11.1; extra == "default"
Requires-Dist: patsy>=0.5.6; extra == "default"
Requires-Dist: pexpect==4.8.0; extra == "default"
Requires-Dist: pickleshare==0.7.5; extra == "default"
Requires-Dist: Pillow>=9.5.0; extra == "default"
Requires-Dist: pingouin>=0.5.3; extra == "default"
Requires-Dist: platformdirs==3.5.1; extra == "default"
Requires-Dist: pluggy>=1.0.0; extra == "default"
Requires-Dist: pre-commit==3.3.2; extra == "default"
Requires-Dist: prompt-toolkit==3.0.38; extra == "default"
Requires-Dist: psutil>=5.9.5; extra == "default"
Requires-Dist: ptyprocess==0.7.0; extra == "default"
Requires-Dist: pure-eval==0.2.2; extra == "default"
Requires-Dist: pyagrum; extra == "default"
Requires-Dist: pycparser==2.21; extra == "default"
Requires-Dist: pydot==1.4.2; extra == "default"
Requires-Dist: pydotplus==2.0.2; extra == "default"
Requires-Dist: Pygments==2.15.1; extra == "default"
Requires-Dist: pygtrie==2.5.0; extra == "default"
Requires-Dist: pyparsing==3.0.9; extra == "default"
Requires-Dist: pytest>=7.3.1; extra == "default"
Requires-Dist: python-dateutil==2.8.2; extra == "default"
Requires-Dist: python-igraph>=0.10.4; extra == "default"
Requires-Dist: pytz==2023.3; extra == "default"
Requires-Dist: PyYAML; extra == "default"
Requires-Dist: pyzmq>=25.0.2; extra == "default"
Requires-Dist: requests==2.30.0; extra == "default"
Requires-Dist: rich==13.3.5; extra == "default"
Requires-Dist: ruamel.yaml==0.17.26; extra == "default"
Requires-Dist: ruamel.yaml.clib>=0.2.7; extra == "default"
Requires-Dist: s3fs==2023.5.0; extra == "default"
Requires-Dist: s3transfer==0.6.1; extra == "default"
Requires-Dist: scikit-learn; extra == "default"
Requires-Dist: scikit-network>=0.31.0; extra == "default"
Requires-Dist: scipy>=1.10.1; extra == "default"
Requires-Dist: seaborn==0.12.2; extra == "default"
Requires-Dist: shortuuid==1.0.11; extra == "default"
Requires-Dist: shtab==1.6.1; extra == "default"
Requires-Dist: six==1.16.0; extra == "default"
Requires-Dist: smmap==5.0.0; extra == "default"
Requires-Dist: sqltrie==0.3.1; extra == "default"
Requires-Dist: stack-data==0.6.2; extra == "default"
Requires-Dist: statsmodels>=0.14.2; extra == "default"
Requires-Dist: tabulate==0.9.0; extra == "default"
Requires-Dist: texttable==1.6.7; extra == "default"
Requires-Dist: threadpoolctl==3.1.0; extra == "default"
Requires-Dist: tigramite>=4.2.2.1; extra == "default"
Requires-Dist: tinycss2==1.2.1; extra == "default"
Requires-Dist: tk==0.1.0; extra == "default"
Requires-Dist: tomli==2.0.1; extra == "default"
Requires-Dist: tomlkit==0.11.8; extra == "default"
Requires-Dist: torch>=1.12.1; extra == "default"
Requires-Dist: tornado==6.3.2; extra == "default"
Requires-Dist: tqdm==4.65.0; extra == "default"
Requires-Dist: traitlets==5.9.0; extra == "default"
Requires-Dist: typing_extensions>=4.5.0; extra == "default"
Requires-Dist: tzdata==2023.3; extra == "default"
Requires-Dist: urllib3==1.26.15; extra == "default"
Requires-Dist: vine==5.0.0; extra == "default"
Requires-Dist: virtualenv==20.23.0; extra == "default"
Requires-Dist: voluptuous==0.13.1; extra == "default"
Requires-Dist: wcwidth==0.2.6; extra == "default"
Requires-Dist: webencodings==0.5.1; extra == "default"
Requires-Dist: wrapt==1.15.0; extra == "default"
Requires-Dist: xarray>=2023.5.0; extra == "default"
Requires-Dist: yarl>=1.9.2; extra == "default"
Requires-Dist: zc.lockfile==3.0.post1; extra == "default"
Requires-Dist: toml; extra == "default"
Provides-Extra: rcd
Requires-Dist: aiobotocore==2.5.0; extra == "rcd"
Requires-Dist: aiohttp==3.8.4; extra == "rcd"
Requires-Dist: aiohttp-retry==2.8.3; extra == "rcd"
Requires-Dist: aioitertools==0.11.0; extra == "rcd"
Requires-Dist: aiosignal==1.3.1; extra == "rcd"
Requires-Dist: amqp==5.1.1; extra == "rcd"
Requires-Dist: antlr4-python3-runtime==4.9.3; extra == "rcd"
Requires-Dist: appdirs==1.4.4; extra == "rcd"
Requires-Dist: asttokens==2.2.1; extra == "rcd"
Requires-Dist: async-timeout==4.0.2; extra == "rcd"
Requires-Dist: asyncssh==2.13.1; extra == "rcd"
Requires-Dist: atpublic==3.1.1; extra == "rcd"
Requires-Dist: attrs==23.1.0; extra == "rcd"
Requires-Dist: backcall==0.2.0; extra == "rcd"
Requires-Dist: billiard==3.6.4.0; extra == "rcd"
Requires-Dist: boto3==1.26.76; extra == "rcd"
Requires-Dist: botocore==1.29.76; extra == "rcd"
Requires-Dist: cairocffi==1.5.1; extra == "rcd"
Requires-Dist: CairoSVG==2.7.0; extra == "rcd"
Requires-Dist: causal-learn==0.1.2.3; extra == "rcd"
Requires-Dist: causality==0.0.10; extra == "rcd"
Requires-Dist: celery==5.2.7; extra == "rcd"
Requires-Dist: certifi==2023.5.7; extra == "rcd"
Requires-Dist: cffi==1.15.1; extra == "rcd"
Requires-Dist: cfgv==3.3.1; extra == "rcd"
Requires-Dist: charset-normalizer==3.1.0; extra == "rcd"
Requires-Dist: click==8.1.3; extra == "rcd"
Requires-Dist: click-didyoumean==0.3.0; extra == "rcd"
Requires-Dist: click-plugins==1.1.1; extra == "rcd"
Requires-Dist: click-repl==0.2.0; extra == "rcd"
Requires-Dist: colorama==0.4.6; extra == "rcd"
Requires-Dist: comm==0.1.3; extra == "rcd"
Requires-Dist: configobj==5.0.8; extra == "rcd"
Requires-Dist: contourpy==1.0.7; extra == "rcd"
Requires-Dist: cryptography==40.0.2; extra == "rcd"
Requires-Dist: cssselect2==0.7.0; extra == "rcd"
Requires-Dist: cycler==0.11.0; extra == "rcd"
Requires-Dist: debugpy==1.6.7; extra == "rcd"
Requires-Dist: decorator==5.1.1; extra == "rcd"
Requires-Dist: defusedxml==0.7.1; extra == "rcd"
Requires-Dist: dictdiffer==0.9.0; extra == "rcd"
Requires-Dist: diskcache==5.6.1; extra == "rcd"
Requires-Dist: distlib==0.3.6; extra == "rcd"
Requires-Dist: distro==1.8.0; extra == "rcd"
Requires-Dist: dpath==2.1.5; extra == "rcd"
Requires-Dist: dulwich==0.21.5; extra == "rcd"
Requires-Dist: dvc==2.57.3; extra == "rcd"
Requires-Dist: dvc-data==0.51.0; extra == "rcd"
Requires-Dist: dvc-http==2.30.2; extra == "rcd"
Requires-Dist: dvc-objects==0.22.0; extra == "rcd"
Requires-Dist: dvc-render==0.5.3; extra == "rcd"
Requires-Dist: dvc-s3==2.22.0; extra == "rcd"
Requires-Dist: dvc-studio-client==0.9.2; extra == "rcd"
Requires-Dist: dvc-task==0.2.1; extra == "rcd"
Requires-Dist: et-xmlfile==1.1.0; extra == "rcd"
Requires-Dist: exceptiongroup==1.1.1; extra == "rcd"
Requires-Dist: executing==1.2.0; extra == "rcd"
Requires-Dist: filelock==3.12.0; extra == "rcd"
Requires-Dist: flatten-dict==0.4.2; extra == "rcd"
Requires-Dist: flufl.lock==7.1.1; extra == "rcd"
Requires-Dist: fonttools==4.39.4; extra == "rcd"
Requires-Dist: frozenlist==1.3.3; extra == "rcd"
Requires-Dist: fsspec==2023.5.0; extra == "rcd"
Requires-Dist: funcy==2.0; extra == "rcd"
Requires-Dist: gitdb==4.0.10; extra == "rcd"
Requires-Dist: GitPython==3.1.31; extra == "rcd"
Requires-Dist: grandalf==0.8; extra == "rcd"
Requires-Dist: graphviz==0.20.1; extra == "rcd"
Requires-Dist: hydra-core==1.3.2; extra == "rcd"
Requires-Dist: identify==2.5.24; extra == "rcd"
Requires-Dist: idna==3.4; extra == "rcd"
Requires-Dist: igraph==0.10.4; extra == "rcd"
Requires-Dist: iniconfig==2.0.0; extra == "rcd"
Requires-Dist: ipykernel==6.23.1; extra == "rcd"
Requires-Dist: iterative-telemetry==0.0.8; extra == "rcd"
Requires-Dist: jedi==0.18.2; extra == "rcd"
Requires-Dist: jmespath==1.0.1; extra == "rcd"
Requires-Dist: joblib==1.2.0; extra == "rcd"
Requires-Dist: jupyter_client==8.2.0; extra == "rcd"
Requires-Dist: jupyter_core==5.3.0; extra == "rcd"
Requires-Dist: kiwisolver==1.4.4; extra == "rcd"
Requires-Dist: kombu==5.2.4; extra == "rcd"
Requires-Dist: lazy_loader==0.2; extra == "rcd"
Requires-Dist: littleutils==0.2.2; extra == "rcd"
Requires-Dist: llvmlite==0.39.1; extra == "rcd"
Requires-Dist: markdown-it-py==2.2.0; extra == "rcd"
Requires-Dist: mdurl==0.1.2; extra == "rcd"
Requires-Dist: multidict==6.0.4; extra == "rcd"
Requires-Dist: nanotime==0.5.2; extra == "rcd"
Requires-Dist: nest-asyncio==1.5.6; extra == "rcd"
Requires-Dist: networkx==2.5; extra == "rcd"
Requires-Dist: nodeenv==1.8.0; extra == "rcd"
Requires-Dist: numba==0.56.4; extra == "rcd"
Requires-Dist: numpy==1.23.5; extra == "rcd"
Requires-Dist: omegaconf==2.3.0; extra == "rcd"
Requires-Dist: openpyxl==3.1.2; extra == "rcd"
Requires-Dist: orjson==3.8.12; extra == "rcd"
Requires-Dist: outdated==0.2.2; extra == "rcd"
Requires-Dist: packaging==23.1; extra == "rcd"
Requires-Dist: pandas==2.0.1; extra == "rcd"
Requires-Dist: pandas-flavor==0.5.0; extra == "rcd"
Requires-Dist: parso==0.8.3; extra == "rcd"
Requires-Dist: pathspec==0.11.1; extra == "rcd"
Requires-Dist: patsy==0.5.3; extra == "rcd"
Requires-Dist: pexpect==4.8.0; extra == "rcd"
Requires-Dist: pickleshare==0.7.5; extra == "rcd"
Requires-Dist: Pillow==9.5.0; extra == "rcd"
Requires-Dist: pingouin==0.5.3; extra == "rcd"
Requires-Dist: platformdirs==3.5.1; extra == "rcd"
Requires-Dist: pluggy==1.0.0; extra == "rcd"
Requires-Dist: pre-commit==3.3.2; extra == "rcd"
Requires-Dist: prompt-toolkit==3.0.38; extra == "rcd"
Requires-Dist: psutil==5.9.5; extra == "rcd"
Requires-Dist: ptyprocess==0.7.0; extra == "rcd"
Requires-Dist: pure-eval==0.2.2; extra == "rcd"
Requires-Dist: pyagrum==1.8.0; extra == "rcd"
Requires-Dist: pycparser==2.21; extra == "rcd"
Requires-Dist: pydot==1.4.2; extra == "rcd"
Requires-Dist: pydotplus==2.0.2; extra == "rcd"
Requires-Dist: pygit2==1.12.1; extra == "rcd"
Requires-Dist: Pygments==2.15.1; extra == "rcd"
Requires-Dist: pygtrie==2.5.0; extra == "rcd"
Requires-Dist: pyparsing==3.0.9; extra == "rcd"
Requires-Dist: pytest==7.3.1; extra == "rcd"
Requires-Dist: python-dateutil==2.8.2; extra == "rcd"
Requires-Dist: python-igraph==0.10.4; extra == "rcd"
Requires-Dist: pytz==2023.3; extra == "rcd"
Requires-Dist: PyYAML==6.0; extra == "rcd"
Requires-Dist: pyzmq==25.0.2; extra == "rcd"
Requires-Dist: requests==2.30.0; extra == "rcd"
Requires-Dist: rich==13.3.5; extra == "rcd"
Requires-Dist: ruamel.yaml==0.17.26; extra == "rcd"
Requires-Dist: ruamel.yaml.clib==0.2.7; extra == "rcd"
Requires-Dist: s3fs==2023.5.0; extra == "rcd"
Requires-Dist: s3transfer==0.6.1; extra == "rcd"
Requires-Dist: scikit-learn==1.2.2; extra == "rcd"
Requires-Dist: scikit-network==0.31.0; extra == "rcd"
Requires-Dist: scipy==1.10.1; extra == "rcd"
Requires-Dist: scmrepo==1.0.3; extra == "rcd"
Requires-Dist: seaborn==0.12.2; extra == "rcd"
Requires-Dist: shortuuid==1.0.11; extra == "rcd"
Requires-Dist: shtab==1.6.1; extra == "rcd"
Requires-Dist: six==1.16.0; extra == "rcd"
Requires-Dist: smmap==5.0.0; extra == "rcd"
Requires-Dist: sqltrie==0.3.1; extra == "rcd"
Requires-Dist: stack-data==0.6.2; extra == "rcd"
Requires-Dist: statsmodels==0.14.0; extra == "rcd"
Requires-Dist: tabulate==0.9.0; extra == "rcd"
Requires-Dist: texttable==1.6.7; extra == "rcd"
Requires-Dist: threadpoolctl==3.1.0; extra == "rcd"
Requires-Dist: tigramite==4.2.2.1; extra == "rcd"
Requires-Dist: tinycss2==1.2.1; extra == "rcd"
Requires-Dist: tk==0.1.0; extra == "rcd"
Requires-Dist: tomli==2.0.1; extra == "rcd"
Requires-Dist: tomlkit==0.11.8; extra == "rcd"
Requires-Dist: torch==1.12.1; extra == "rcd"
Requires-Dist: tornado==6.3.2; extra == "rcd"
Requires-Dist: tqdm==4.65.0; extra == "rcd"
Requires-Dist: traitlets==5.9.0; extra == "rcd"
Requires-Dist: typing_extensions==4.5.0; extra == "rcd"
Requires-Dist: tzdata==2023.3; extra == "rcd"
Requires-Dist: urllib3==1.26.15; extra == "rcd"
Requires-Dist: vine==5.0.0; extra == "rcd"
Requires-Dist: virtualenv==20.23.0; extra == "rcd"
Requires-Dist: voluptuous==0.13.1; extra == "rcd"
Requires-Dist: wcwidth==0.2.6; extra == "rcd"
Requires-Dist: webencodings==0.5.1; extra == "rcd"
Requires-Dist: wrapt==1.15.0; extra == "rcd"
Requires-Dist: yarl==1.9.2; extra == "rcd"
Requires-Dist: zc.lockfile==3.0.post1; extra == "rcd"
Provides-Extra: eventadl
Requires-Dist: appnope==0.1.4; extra == "eventadl"
Requires-Dist: asttokens==3.0.0; extra == "eventadl"
Requires-Dist: boto3==1.38.13; extra == "eventadl"
Requires-Dist: botocore==1.38.13; extra == "eventadl"
Requires-Dist: certifi==2025.4.26; extra == "eventadl"
Requires-Dist: charset-normalizer==3.4.2; extra == "eventadl"
Requires-Dist: comm==0.2.2; extra == "eventadl"
Requires-Dist: contourpy==1.3.2; extra == "eventadl"
Requires-Dist: cycler==0.12.1; extra == "eventadl"
Requires-Dist: debugpy==1.8.14; extra == "eventadl"
Requires-Dist: decorator==5.2.1; extra == "eventadl"
Requires-Dist: et_xmlfile==2.0.0; extra == "eventadl"
Requires-Dist: executing==2.2.0; extra == "eventadl"
Requires-Dist: filelock==3.18.0; extra == "eventadl"
Requires-Dist: fonttools==4.57.0; extra == "eventadl"
Requires-Dist: fsspec==2025.3.2; extra == "eventadl"
Requires-Dist: future==0.16.0; extra == "eventadl"
Requires-Dist: hf-xet==1.1.0; extra == "eventadl"
Requires-Dist: huggingface-hub==0.31.1; extra == "eventadl"
Requires-Dist: idna==3.10; extra == "eventadl"
Requires-Dist: iniconfig==2.1.0; extra == "eventadl"
Requires-Dist: ipykernel==6.29.5; extra == "eventadl"
Requires-Dist: ipython==9.2.0; extra == "eventadl"
Requires-Dist: ipython_pygments_lexers==1.1.1; extra == "eventadl"
Requires-Dist: jedi==0.19.2; extra == "eventadl"
Requires-Dist: Jinja2==3.1.6; extra == "eventadl"
Requires-Dist: jmespath==1.0.1; extra == "eventadl"
Requires-Dist: joblib==1.5.0; extra == "eventadl"
Requires-Dist: jupyter_client==8.6.3; extra == "eventadl"
Requires-Dist: jupyter_core==5.7.2; extra == "eventadl"
Requires-Dist: kiwisolver==1.4.8; extra == "eventadl"
Requires-Dist: llvmlite==0.44.0; extra == "eventadl"
Requires-Dist: MarkupSafe==3.0.2; extra == "eventadl"
Requires-Dist: matplotlib==3.10.3; extra == "eventadl"
Requires-Dist: matplotlib-inline==0.1.7; extra == "eventadl"
Requires-Dist: mpmath==1.3.0; extra == "eventadl"
Requires-Dist: nest-asyncio==1.6.0; extra == "eventadl"
Requires-Dist: networkx==3.4.2; extra == "eventadl"
Requires-Dist: numba==0.61.2; extra == "eventadl"
Requires-Dist: numpy==2.2.5; extra == "eventadl"
Requires-Dist: openpyxl==3.1.5; extra == "eventadl"
Requires-Dist: packaging==25.0; extra == "eventadl"
Requires-Dist: pandas==2.2.3; extra == "eventadl"
Requires-Dist: parso==0.8.4; extra == "eventadl"
Requires-Dist: pexpect==4.9.0; extra == "eventadl"
Requires-Dist: pillow==11.2.1; extra == "eventadl"
Requires-Dist: platformdirs==4.3.8; extra == "eventadl"
Requires-Dist: pluggy==1.5.0; extra == "eventadl"
Requires-Dist: prompt_toolkit==3.0.51; extra == "eventadl"
Requires-Dist: psutil==7.0.0; extra == "eventadl"
Requires-Dist: ptyprocess==0.7.0; extra == "eventadl"
Requires-Dist: pure_eval==0.2.3; extra == "eventadl"
Requires-Dist: Pygments==2.19.1; extra == "eventadl"
Requires-Dist: pyparsing==3.2.3; extra == "eventadl"
Requires-Dist: pytest==8.3.5; extra == "eventadl"
Requires-Dist: python-dateutil==2.9.0.post0; extra == "eventadl"
Requires-Dist: pytz==2025.2; extra == "eventadl"
Requires-Dist: PyYAML==6.0.2; extra == "eventadl"
Requires-Dist: pyzmq==26.4.0; extra == "eventadl"
Requires-Dist: regex==2024.11.6; extra == "eventadl"
Requires-Dist: requests==2.32.3; extra == "eventadl"
Requires-Dist: s3transfer==0.12.0; extra == "eventadl"
Requires-Dist: safetensors==0.5.3; extra == "eventadl"
Requires-Dist: scikit-learn==1.6.1; extra == "eventadl"
Requires-Dist: scipy==1.15.3; extra == "eventadl"
Requires-Dist: setuptools==80.4.0; extra == "eventadl"
Requires-Dist: six==1.17.0; extra == "eventadl"
Requires-Dist: stack-data==0.6.3; extra == "eventadl"
Requires-Dist: stumpy==1.13.0; extra == "eventadl"
Requires-Dist: sympy==1.14.0; extra == "eventadl"
Requires-Dist: threadpoolctl==3.6.0; extra == "eventadl"
Requires-Dist: tokenizers==0.21.1; extra == "eventadl"
Requires-Dist: tornado==6.4.2; extra == "eventadl"
Requires-Dist: tqdm==4.67.1; extra == "eventadl"
Requires-Dist: traitlets==5.14.3; extra == "eventadl"
Requires-Dist: transformers==4.51.3; extra == "eventadl"
Requires-Dist: typing_extensions==4.13.2; extra == "eventadl"
Requires-Dist: tzdata==2025.2; extra == "eventadl"
Requires-Dist: urllib3==2.4.0; extra == "eventadl"
Requires-Dist: wcwidth==0.2.13; extra == "eventadl"
Dynamic: description
Dynamic: description-content-type
Dynamic: license-file
Dynamic: provides-extra
Dynamic: summary

# 🕵️ RCAEval: A Benchmark for Root Cause Analysis

[![Hugging Face Dataset](https://img.shields.io/badge/%F0%9F%A4%97%20Hugging%20Face-Dataset-yellow)](https://huggingface.co/datasets/phamquiluan/RCAEval)
[![pypi package](https://img.shields.io/pypi/v/RCAEval.svg)](https://pypi.org/project/RCAEval)
[![Downloads](https://static.pepy.tech/personalized-badge/rcaeval?period=total&units=international_system&left_color=black&right_color=orange&left_text=Downloads)](https://pepy.tech/project/rcaeval)
[![CircleCI](https://dl.circleci.com/status-badge/img/gh/phamquiluan/RCAEval/tree/main.svg?style=svg)](https://dl.circleci.com/status-badge/redirect/gh/phamquiluan/RCAEval/tree/main)
[![Build and test](https://github.com/phamquiluan/RCAEval/actions/workflows/build-and-test.yml/badge.svg)](https://github.com/phamquiluan/RCAEval/actions/workflows/build-and-test.yml)
[![Upload Python Package](https://github.com/phamquiluan/RCAEval/actions/workflows/python-publish.yml/badge.svg)](https://github.com/phamquiluan/RCAEval/actions/workflows/python-publish.yml)

[FSE 2026](https://arxiv.org/abs/2604.13522)
[WWW 2025](https://dl.acm.org/doi/10.1145/3701716.3715290)
[ASE 2024](https://dl.acm.org/doi/abs/10.1145/3691620.3695065)
[FSE 2024](https://dl.acm.org/doi/full/10.1145/3660805)

RCAEval is an open-source benchmark that offers nine datasets with 735 real failure cases, and an evaluation framework for root cause analysis (RCA) in microservice systems. It includes 15 reproducible baselines covering metric-based, trace-based, and multi-source RCA methods.



<p align="center">
<img width=1000 src= "./docs/readme.jpg"/>
</p>

**Table of Contents** 
  * [Prerequisites](#prerequisites)
  * [Installation](#installation)
  * [How-to-use](#how-to-use)
    + [Data format](#data-format)
    + [Basic usage example](#basic-usage-example)
  * [Available Datasets](#available-datasets)
  * [Available Baselines](#available-baselines)
  * [Benchmark](#benchmark)
  * [For TORAI Paper](#for-torai-paper)
  * [For EventADL Paper](#for-eventadl-paper)
  * [Licensing](#licensing)
  * [Acknowledgments](#acknowledgments)
  * [Change Logs](#change-logs)
  * [Citation](#citation)
  * [Contact](#contact)

## Prerequisites

We recommend using machines equipped with at least 8 cores, 16GB RAM, and ~50GB available disk space with Ubuntu 22.04 or Ubuntu 20.04, and **Python3.12** (Python 3.14 is also supported).

## Installation

The `default` environment, which is used for most methods, can be easily installed as follows. Detailed installation instructions for all methods are in [SETUP.md](docs/SETUP.md).


Open your terminal and run the following commands

```bash
sudo apt update -y
sudo apt install -y build-essential \
  libxml2 libxml2-dev zlib1g-dev \
  python3-tk graphviz
```

Clone RCAEval from GitHub

```bash
git clone https://github.com/phamquiluan/RCAEval.git && cd RCAEval
```

Create virtual environment with Python 3.12 (refer [SETUP.md](docs/SETUP.md) to see how to install Python3.12 on Linux)

```bash
python3.12 -m venv env
. env/bin/activate
```

Install RCAEval using pip

```bash
pip install -e .[default]
```

Or, install RCAEval from PyPI

```bash
# Install RCAEval from PyPI
pip install RCAEval[default]
```

Test the installation

```bash
python -m pytest tests/test.py::test_basic
```

Expected output after running the above command (it takes less than 1 minute)

```bash 
$ pytest tests/test.py::test_basic
============================== test session starts ===============================
platform linux -- Python 3.12.12, pytest-7.3.1, pluggy-1.0.0
rootdir: /home/ubuntu/RCAEval
plugins: dvc-2.57.3, hydra-core-1.3.2
collected 1 item                                                                 

tests/test.py .                                                            [100%]

=============================== 1 passed in 3.16s ================================
```

## How-to-use

### Data format

The telemetry data must be presented as `pandas.DataFrame`. We require the data to have a column named `time` that stores the timestep. A sample of valid data could be downloaded using the `download_data()` or `download_multi_source_data()` method that we will demonstrate shortly below.

### Basic usage example

A basic example to use BARO, a metric-based RCA baseline, to perform RCA are presented as follows,

```python
# You can put the code here to a file named test.py
from RCAEval.e2e import baro
from RCAEval.utility import download_data, read_data

# download a sample data to data.csv
download_data()

# read data from data.csv
data = read_data("data.csv")
anomaly_detected_timestamp = 1692569339

# perform root cause analysis
root_causes = baro(data, anomaly_detected_timestamp)["ranks"]

# print the top 5 root causes
print("Top 5 root causes:", root_causes[:5])
```

Expected output after running the above code (it takes around 1 minute)

```
$ python test.py
Downloading data.csv..: 100%|████████████████████| 570k/570k [00:00<00:00, 19.8MiB/s]
Top 5 root causes: ['emailservice_mem', 'recommendationservice_mem', 'cartservice_mem', 'checkoutservice_latency', 'cartservice_latency']
```

A tutorial of using Multi-source BARO to diagnose failure using multi-source telemetry data (metrics, logs, and traces) is presented in [docs/multi-source-rca-demo.ipynb](docs/multi-source-rca-demo.ipynb). 

A tutorial of using BARO to diagnose code-level faults is presented in [docs/code-level-rca.ipynb](docs/code-level-rca.ipynb).


## Available Datasets

RCAEval benchmark includes nine datasets organized into three benchmark suites (RE1, RE2, RE3), each covering three microservice systems (Online Boutique, Sock Shop, Train Ticket). Together, these datasets feature 735 failure cases with 11 fault types. Each failure case includes annotated root cause service and root cause indicator (e.g., specific metric or log indicating the root cause).

| Dataset | System | Cases | Fault Types | Metrics | Logs | Traces |
|---------|--------|-------|-------------|---------|------|--------|
| RE1-OB | Online Boutique | 125 | cpu, mem, disk, delay, loss | 49-59 | N/A | N/A |
| RE1-SS | Sock Shop | 125 | cpu, mem, disk, delay, loss | 57-63 | N/A | N/A |
| RE1-TT | Train Ticket | 125 | cpu, mem, disk, delay, loss | 198-238 | N/A | N/A |
| RE2-OB | Online Boutique | 90 | cpu, mem, disk, delay, loss, socket | 69-77 | Yes | Yes |
| RE2-SS | Sock Shop | 90 | cpu, mem, disk, delay, loss, socket | 74-82 | Yes | N/A |
| RE2-TT | Train Ticket | 90 | cpu, mem, disk, delay, loss, socket | 340-376 | Yes | Yes |
| RE3-OB | Online Boutique | 30 | f1, f2, f3, f4, f5 | 68-101 | Yes | Yes |
| RE3-SS | Sock Shop | 30 | f1, f2, f3, f4 | 80-107 | Yes | N/A |
| RE3-TT | Train Ticket | 30 | f1, f2, f3, f4 | 294-322 | Yes | Yes |
| TORAI-OB | Online Boutique | 90 | cpu, mem, disk, delay, loss, socket | 69-77 | Yes | Yes |
| TORAI-SS | Sock Shop | 90 | cpu, mem, disk, delay, loss, socket | 74-82 | Yes | N/A |
| TORAI-TT | Train Ticket | 90 | cpu, mem, disk, delay, loss, socket | 340-376 | Yes | Yes |

**RE1 Datasets (375 cases):** Metric-only data supporting metric-based RCA methods. Five fault types (CPU, MEM, DISK, DELAY, LOSS) across five services per system, with five repetitions per fault-service pair.

**RE2 Datasets (270 cases):** Multi-source data (metrics, logs, traces) supporting multi-source RCA methods. Six fault types (adds SOCKET) across five services per system, with three repetitions per fault-service pair.

**RE3 Datasets (90 cases):** Multi-source data focusing on code-level faults (F1-F5). Supports diagnosing code-level faults through telemetry data, e.g., leveraging stack traces in logs or response codes in traces.


### File Structure

Each dataset directory follows the naming convention: `{benchmark}_{service}_{fault}_{instance}`
- `metrics.json`: Time-series metrics data
- `inject_time.txt`: Fault injection timestamp (Unix timestamp)
- `logs.csv`: Log data (RE2 and RE3 only)
- `traces.csv`: Trace data (RE2 and RE3 only)

Our datasets and their description are publicly available with the following information:
- Hugging Face (**recommended**): [https://huggingface.co/datasets/phamquiluan/RCAEval](https://huggingface.co/datasets/phamquiluan/RCAEval) (Parquet, 3.4GB on disk, downloadable one suite or one case at a time)
- Figshare: [https://figshare.com/articles/dataset/RCAEval_A_Benchmark_for_Root_Cause_Analysis_of_Microservice_Systems/31048672](https://figshare.com/articles/dataset/RCAEval_A_Benchmark_for_Root_Cause_Analysis_of_Microservice_Systems/31048672) (more structured format, with additional preprocessed series)
- Zenodo: [https://zenodo.org/records/14590730](https://zenodo.org/records/14590730) (DOI for citation: https://doi.org/10.5281/zenodo.14590730)

The Hugging Face copy stores the same 735 cases as Parquet instead of `metrics.json` /
`logs.csv` / `traces.csv`. It is 3.4GB to download against 5.2GB of zip archives on
Zenodo, and about eleven times smaller once extracted, since those archives expand to
roughly 38GB. Unlike a zip archive it can also be fetched a suite or a single case at a
time, so you never download telemetry you will not use:

```python
from huggingface_hub import snapshot_download

# one suite (use "re2*" or "re3*" for the others, or omit to get all 735 cases)
snapshot_download(
    repo_id="phamquiluan/RCAEval",
    repo_type="dataset",
    allow_patterns="re1*",
    local_dir="data",
)
```

`cases.parquet` in that repository indexes all 735 cases with their ground-truth root
cause service, fault type, injection time, and telemetry sizes, so you can select a
subset before downloading any telemetry:

```python
import pandas as pd

idx = pd.read_parquet("hf://datasets/phamquiluan/RCAEval/cases.parquet")
print(idx[idx.dataset == "RE2-TT"][["case", "root_cause_service", "fault", "n_metrics"]])
```

`RCAEval.utility.read_metrics`, `read_logs` and `read_traces` read either layout, so code
written against the original files works unchanged with the Parquet copy:

```python
from RCAEval.utility import read_metrics

df = read_metrics("data/re1ob_adservice_cpu_1")  # metrics.parquet or metrics.json
```

We also provide utility functions to download our datasets using Python. The downloaded datasets will be available at directory `data`.

```python
from RCAEval.utility import (
    download_re1_dataset,
    download_re2_dataset,
    download_re3_dataset,
)

download_re1_dataset()
download_re2_dataset()
download_re3_dataset()
```
<details>
<summary>Expected output after running the above code (it takes half an hour to download and extract the datasets. )</summary>

```
$ python test.py
Downloading RE1.zip..: 100%|█████████████████████| 390M/390M [01:02<00:00, 6.22MiB/s]
Downloading RE2.zip..: 100%|███████████████████| 4.21G/4.21G [11:23<00:00, 6.17MiB/s]
Downloading RE3.zip..: 100%|█████████████████████| 534M/534M [01:29<00:00, 5.97MiB/s]
```
</details>


## Available Baselines 

RCAEval stores all the RCA methods in the `e2e` module (implemented in `RCAEval.e2e`). There are many RCA baselines available: RUN, CausalRCA, CIRCA, RCD, MicroCause, EasyRCA, MSCRED, BARO, 𝜖-Diagnosis, TraceRCA, MicroRank, PDiagnose, Multi-source BARO, Multi-source RCD, Multi-source CIRCA, TORAI, EventADL.

## Benchmark 

We provide a script named `main.py` to assist in reproducing the results from [our RCAEval paper](https://arxiv.org/pdf/2412.17015). This script can be executed using Python with the following syntax: 

```
python main.py [-h] [--dataset DATASET] [--method METHOD]
```

The available options and their descriptions are as follows:

```
options:
  -h, --help            Show this help message and exit
  --dataset DATASET     Choose a dataset. Valid options:
                        [re2-ob, re2-ss, re2-tt, etc.]
  --method METHOD       Choose a method (`causalrca`, `microcause`, `e_diagnosis`, `baro`, `rcd`, `circa`, etc.)
```

For example, in Table 6, BARO achieves Avg@5 of 0.72, 0.99, 1, 0.83, 0.64, and 0.8 for CPU, MEM, DISK, SOCKET, DELAY, LOSS, and AVERAGE on the Train Ticket dataset. To reproduce these results, you can run the following commands:

```bash
python  main.py --method baro --dataset re2-tt
```

The expected output should be exactly as presented in the paper (it takes less than 1 minute to run the code)

```
$ python  main.py --method baro --dataset re2-tt --length 20
100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 90/90 [00:45<00:00,  1.98it/s]
--- Evaluation results ---
Avg@5-CPU:   0.72
Avg@5-MEM:   0.99
Avg@5-DISK:  1.0
Avg@5-SOCKET: 0.83
Avg@5-DELAY: 0.63
Avg@5-LOSS:  0.64
---
Avg speed: 0.51
```

We can replace the baro method with other methods (e.g., circa) and substitute re2-tt with other datasets to replicate the corresponding results shown in Table 6. This reproduction process is also integrated into our Continuous Integration (CI) setup. For more details, refer to the [.circleci/config.yml](.circleci/config.yml) file.

### Multi-source RCA benchmark

The multi-source methods (Multi-source BARO, Multi-source RCD, and Multi-source CIRCA) consume metrics, logs, and traces together. They run on the RE2/RE3 datasets, which include the required `logts.csv`, `tracets_err.csv`, and `tracets_lat.csv` files in each failure case:

```bash
# Multi-source BARO (Python 3.12, default environment)
python main.py --method mmbaro --dataset re2-ob

# Multi-source CIRCA (Python 3.12, default environment)
python main.py --method mmcirca --dataset re2-ob

# Multi-source RCD (requires the RCD environment: Python 3.8, `pip install -e .[rcd]`, see docs/SETUP.md)
python main.py --method mmrcd --dataset re2-ob
```

A function-level tutorial using Multi-source BARO on a single failure case is available in [docs/multi-source-rca-demo.ipynb](docs/multi-source-rca-demo.ipynb).


## For TORAI Paper

**TORAI Datasets (270 cases):** A processed version of the RE2 datasets, containing pre-aggregated time-series for metrics, logs, and traces (where available). These datasets are used by the TORAI method and are available separately on Figshare: [https://doi.org/10.6084/m9.figshare.31925976](https://doi.org/10.6084/m9.figshare.31925976). 

TORAI requires a separate Python 3.8 environment and its own datasets. For full instructions, see [docs/TORAI.md](docs/TORAI.md) for installation and reproducibility instructions.

```bash
python main.py --method torai --dataset torai-ob --length 10
```

<details>
<summary>Expected output (it takes less than 1 minute)</summary>

```
--- Evaluation results ---
Avg@5-CPU:   0.96
Avg@5-MEM:   0.93
Avg@5-DISK:  1.0
Avg@5-SOCKET: 0.93
Avg@5-DELAY: 0.8
Avg@5-LOSS:  0.84
```
</details>


## For EventADL Paper

EventADL localizes root-cause actors/resources over CloudTrail-style API-call event logs, rather than the metrics/traces/logs used by other RCAEval methods. It requires a separate Python 3.12 environment. For full instructions, see [docs/EVENTADL.md](docs/EVENTADL.md) for installation and usage instructions.

```bash
python main.py --method eventadl --dataset eventadl-falcon
```

## Licensing

This repository includes code from various sources with different licenses. We have included their corresponding LICENSE into the [LICENSES](LICENSES) directory:

- **BARO**: Licensed under the [MIT License](LICENSES/LICENSE-BARO). Original source: [BARO GitHub Repository](https://github.com/phamquiluan/baro/blob/main/LICENSE).
- **CausalRCA**: No License. Original source: [CausalRCA GitHub Repository](https://github.com/AXinx/CausalRCA_code).
- **CIRCA**: Licensed under the [BSD 3-Clause License](LICENSES/LICENSE-CIRCA). Original source: [CIRCA GitHub Repository](https://github.com/NetManAIOps/CIRCA/blob/master/LICENSE).
- **E-Diagnosis**: Licensed under the [BSD 3-Clause License](LICENSES/LICENSE-E-Diagnosis). Original source: [PyRCA GitHub Repository](https://github.com/salesforce/PyRCA/blob/main/LICENSE).
- **MicroCause**: Licensed under the [Apache License 2.0](LICENSES/LICENSE-MicroCause). Original source: [MicroCause GitHub Repository](https://github.com/PanYicheng/dycause_rca/blob/main/LICENSE).
- **RCD**: Licensed under the [MIT License](LICENSES/LICENSE-RCD). Original source: [RCD GitHub Repository](https://github.com/azamikram/rcd).
- **RUN**: No License. Original source: [RUN GitHub Repository](https://github.com/zmlin1998/RUN).

**For the code implemented by us and for our datasets, we distribute them under the [MIT LICENSE](LICENSE)**.

## Acknowledgments

We would like to express our sincere gratitude to the researchers and developers who created the baselines used in our study. Their work has been instrumental in making this project possible. We deeply appreciate the time, effort, and expertise that have gone into developing and maintaining these resources. This project would not have been feasible without their contributions.

## Change Logs
- [Aug 2026] Published all nine datasets (735 cases) on [Hugging Face](https://huggingface.co/datasets/phamquiluan/RCAEval) as Parquet, 3.4GB on disk and downloadable one suite or one case at a time, with a `cases.parquet` index of every case and its ground-truth root cause. Added `read_metrics`, `read_logs` and `read_traces`, which read either the original or the Parquet layout.
- [Jul 2026] Made the multi-source RCA benchmark runnable via `main.py` (Multi-source BARO/RCD/CIRCA) and fixed PyPI packaging so wheels include all subpackages.
- [Jul 2026] Added EventADL, an event-log root cause localization method accepted at FSE'26.
- [Jun 2026] The version of RCAEval with TORAI used in our FSE'26 paper is available in the [fse26 branch](https://github.com/phamquiluan/RCAEval/tree/fse26).
- [Apr 2026] Added TORAI, a multi-source RCA method accepted at FSE'26.
- [Mar 2025] The version of RCAEval used in our WWW'25 paper are available in the [www25 branch](https://github.com/phamquiluan/RCAEval/tree/www25).
- [Dec 2024] The prior version of RCAEval used in our ASE'24 paper are available in the [ase24 branch](https://github.com/phamquiluan/RCAEval/tree/ase24).

## Citation

```bibtex
@article{pham2026eventadl,
  title={EventADL: Open-Box Anomaly Detection and Localization Framework for Events in Cloud-Based Service Systems},
  author={Pham, Luan and Nicolet, Victor and Dodds, Joey and Guan, Hui and Kroening, Daniel},
  journal={Proceedings of the ACM on Software Engineering},
  volume={3},
  number={FSE},
  pages={4070--4093},
  year={2026}
}
```

```bibtex
@article{pham2026torai,
  title={TORAI: Multi-source Root Cause Analysis for Blind Spots in Microservice Service Call Graph},
  author={Pham, Luan and Ha, Huong and Zhang, Xiuzhen and Zhang, Hongyu},
  journal={Proceedings of the ACM on Software Engineering},
  volume={3},
  number={FSE},
  pages={2928--2951},
  year={2026}
}
```

```bibtex
@inproceedings{pham2025rcaeval,
  title={RCAEval: A Benchmark for Root Cause Analysis of Microservice Systems with Telemetry Data},
  author={Pham, Luan and Zhang, Hongyu and Ha, Huong and Salim, Flora and Zhang, Xiuzhen},
  booktitle={Companion Proceedings of the ACM on Web Conference 2025},
  pages={777--780},
  year={2025}
}
```

```bibtex
@inproceedings{pham2024root,
  title={Root Cause Analysis for Microservice System based on Causal Inference: How Far Are We?},
  author={Pham, Luan and Ha, Huong and Zhang, Hongyu},
  booktitle={Proceedings of the 39th IEEE/ACM International Conference on Automated Software Engineering},
  pages={706--715},
  year={2024}
}
```

```bibtex
@inproceedings{pham2024baro,
  title={BARO: Robust root cause analysis for microservices via multivariate bayesian online change point detection},
  author={Pham, Luan and Ha, Huong and Zhang, Hongyu},
  journal={Proceedings of the ACM on Software Engineering},
  volume={1},
  number={FSE},
  pages={2214--2237},
  year={2024},
}
```

## Contact

[phamquiluan\@gmail.com](mailto:phamquiluan@gmail.com?subject=RCAEval)
