clio-kit 2.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- clio_kit/__init__.py +334 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/.claude-plugin/plugin.json +5 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/.gitignore +27 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/.mcp.json +9 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/README.md +323 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/docs/adios_setup.md +86 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/docs/basic_install.md +110 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/docs/example_uses.md +113 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/pyproject.toml +57 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/sample_data/data1.bp/data.0 +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/sample_data/data1.bp/md.0 +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/sample_data/data1.bp/md.idx +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/sample_data/data1.bp/mmd.0 +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/sample_data/data2.bp/data.0 +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/sample_data/data2.bp/md.0 +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/sample_data/data2.bp/md.idx +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/sample_data/data2.bp/mmd.0 +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/sample_data/data3.bp/data.0 +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/sample_data/data3.bp/md.0 +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/sample_data/data3.bp/md.idx +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/sample_data/data3.bp/mmd.0 +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/sample_data/data4.bp/data.0 +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/sample_data/data4.bp/md.0 +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/sample_data/data4.bp/md.idx +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/sample_data/data4.bp/mmd.0 +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/server.json +56 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/src/adios_mcp/__init__.py +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/src/adios_mcp/implementation/__init__.py +21 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/src/adios_mcp/implementation/bp5_attributes.py +52 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/src/adios_mcp/implementation/bp5_inspect_variables.py +36 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/src/adios_mcp/implementation/bp5_inspect_variables_at_step.py +46 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/src/adios_mcp/implementation/bp5_list.py +16 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/src/adios_mcp/implementation/bp5_read_variable_at_step.py +39 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/src/adios_mcp/mcp_handlers.py +100 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/src/adios_mcp/server.py +164 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/tests/__init__.py +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/tests/test_bp5_attributes.py +140 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/tests/test_bp5_inspect_variables.py +165 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/tests/test_bp5_inspect_variables_at_step.py +166 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/tests/test_bp5_list.py +152 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/tests/test_bp5_read_variable_at_step.py +196 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/tests/test_mcp_handlers.py +468 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/tests/test_server.py +350 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/uv.lock +1840 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/.claude-plugin/plugin.json +5 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/.gitignore +30 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/.mcp.json +9 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/README.md +366 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/demo.py +91 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/docs/basic_install.md +115 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/pyproject.toml +45 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/server.json +87 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/src/arxiv_mcp/__init__.py +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/src/arxiv_mcp/capabilities/__init__.py +21 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/src/arxiv_mcp/capabilities/arxiv_base.py +183 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/src/arxiv_mcp/capabilities/category_search.py +89 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/src/arxiv_mcp/capabilities/date_search.py +55 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/src/arxiv_mcp/capabilities/download_paper.py +201 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/src/arxiv_mcp/capabilities/export_utils.py +110 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/src/arxiv_mcp/capabilities/paper_details.py +145 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/src/arxiv_mcp/capabilities/text_search.py +107 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/src/arxiv_mcp/mcp_handlers.py +370 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/src/arxiv_mcp/server.py +300 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/tests/__init__.py +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/tests/test_advanced_scenarios.py +463 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/tests/test_arxiv_base.py +393 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/tests/test_arxiv_base_errors.py +512 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/tests/test_category_search.py +97 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/tests/test_date_search.py +245 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/tests/test_download_paper.py +220 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/tests/test_edge_cases.py +342 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/tests/test_export_utils.py +170 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/tests/test_fastmcp_tools.py +415 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/tests/test_integration.py +201 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/tests/test_mcp_handlers.py +826 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/tests/test_paper_details.py +146 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/tests/test_server.py +934 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/tests/test_text_search.py +123 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/uv.lock +1769 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/.claude-plugin/plugin.json +5 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/.mcp.json +9 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/README.md +224 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/assets/mcp-client.png +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/assets/mcp-clientstartchronolog.png +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/assets/mcp-retievecopilot.png +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/assets/mcp-retrieve-diseasepred.png +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/docs/Chronolog_setup.md +146 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/pyproject.toml +63 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/server.json +51 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/src/chronomcp/__init__.py +21 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/src/chronomcp/capabilities/__init__.py +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/src/chronomcp/capabilities/record_handler.py +18 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/src/chronomcp/capabilities/retrieve_handler.py +45 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/src/chronomcp/capabilities/start_handler.py +37 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/src/chronomcp/capabilities/stop_handler.py +25 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/src/chronomcp/reader_script/CMakeLists.txt +46 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/src/chronomcp/reader_script/HDF5ArchiveReadingAgent.h +140 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/src/chronomcp/reader_script/reader.cpp +113 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/src/chronomcp/server.py +115 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/src/chronomcp/utils/config.py +47 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/src/chronomcp/utils/helpers.py +37 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/tests/__init__.py +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/tests/test_helpers.py +36 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/tests/test_integration.py +61 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/tests/test_record_handler.py +67 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/tests/test_retrieve_handler.py +71 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/tests/test_server.py +113 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/tests/test_start_handler.py +39 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/tests/test_stop_handler.py +49 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/tests/test_utils.py +47 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/uv.lock +1830 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/compression/.claude-plugin/plugin.json +5 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/compression/.gitignore +54 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/compression/.mcp.json +9 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/compression/README.md +291 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/compression/data/sample_data.csv +51 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/compression/data/sample_log.txt +93 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/compression/pyproject.toml +44 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/compression/pytest.ini +6 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/compression/server.json +43 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/compression/src/compression_mcp/__init__.py +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/compression/src/compression_mcp/capabilities/__init__.py +21 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/compression/src/compression_mcp/capabilities/compression_base.py +99 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/compression/src/compression_mcp/mcp_handlers.py +40 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/compression/src/compression_mcp/server.py +108 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/compression/tests/__init__.py +1 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/compression/tests/test_compression_handler.py +109 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/compression/tests/test_integration.py +34 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/compression/tests/test_mcp_handlers.py +33 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/compression/tests/test_server_basic.py +155 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/compression/tests/test_server_coverage_completion.py +104 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/compression/tests/test_server_execution_simple.py +132 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/compression/uv.lock +1781 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/darshan/.claude-plugin/plugin.json +5 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/darshan/.mcp.json +9 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/darshan/README.md +334 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/darshan/pyproject.toml +62 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/darshan/server.json +75 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/darshan/src/darshan_mcp/__init__.py +21 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/darshan/src/darshan_mcp/capabilities/__init__.py +1 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/darshan/src/darshan_mcp/capabilities/darshan_parser.py +857 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/darshan/src/darshan_mcp/server.py +315 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/darshan/tests/__init__.py +1 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/darshan/tests/test_darshan_parser.py +400 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/darshan/tests/test_darshan_parser_error_paths.py +454 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/darshan/tests/test_darshan_parser_posix_mpiio.py +460 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/darshan/tests/test_darshan_parser_text_parsing.py +519 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/darshan/tests/test_darshan_parser_timeline.py +506 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/darshan/tests/test_server.py +360 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/darshan/tests/test_server_main.py +156 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/darshan/uv.lock +2525 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/hdf5/.claude-plugin/plugin.json +5 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/hdf5/.gitignore +88 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/hdf5/.mcp.json +9 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/hdf5/README.md +725 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/hdf5/TESTING.md +291 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/hdf5/docs/ARCHITECTURE.md +425 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/hdf5/docs/EXAMPLES.md +421 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/hdf5/docs/MIGRATION.md +257 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/hdf5/docs/TOOLS.md +499 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/hdf5/docs/TRANSPORTS.md +274 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/hdf5/examples/README.md +103 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/hdf5/examples/create_demo_data.py +70 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/hdf5/examples/demo_script.py +106 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/hdf5/pyproject.toml +66 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/hdf5/server.json +165 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/hdf5/src/hdf5_mcp/__init__.py +21 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/hdf5/src/hdf5_mcp/config.py +409 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/hdf5/src/hdf5_mcp/resources.py +610 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/hdf5/src/hdf5_mcp/server.py +2363 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/hdf5/src/hdf5_mcp/utils.py +384 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/hdf5/tests/conftest.py +145 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/hdf5/tests/test_config_module.py +836 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/hdf5/tests/test_placeholder.py +6 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/hdf5/tests/test_resources_module.py +870 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/hdf5/tests/test_utils_module.py +720 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/hdf5/uv.lock +2103 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/.claude-plugin/plugin.json +5 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/.mcp.json +9 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/README.md +582 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/docs/GUIDE.md +105 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/docs/assets/Screenshot 2025-05-15 160800.png +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/docs/assets/Screenshot 2025-05-15 162219.png +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/docs/assets/Screenshot 2025-05-15 162322.png +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/docs/assets/Screenshot 2025-05-15 162545.png +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/docs/assets/Screenshot 2025-05-15 162922.png +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/docs/assets/Screenshot 2025-05-15 163023.png +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/docs/assets/Screenshot 2025-05-15 163516.png +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/docs/assets/Screenshot 2025-05-15 163651.png +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/docs/assets/Screenshot 2025-05-15 163759.png +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/docs/basic_install.md +93 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/pyproject.toml +55 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/requirements.txt +9 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/server.json +150 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/src/jarvis_mcp/__init__.py +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/src/jarvis_mcp/capabilities/__init__.py +21 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/src/jarvis_mcp/capabilities/jarvis_handler.py +144 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/src/jarvis_mcp/server.py +612 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/tests/__init__.py +1 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/tests/conftest.py +180 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/tests/run_tests.py +150 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/tests/test_basic.py +267 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/tests/test_edge_cases.py +361 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/tests/test_integration.py +395 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/tests/test_jarvis_handler.py +479 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/tests/test_performance.py +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/tests/test_server.py +700 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/tests/test_server_direct.py +655 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/tests/utils.py +593 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/uv.lock +2081 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/lmod/.claude-plugin/plugin.json +5 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/lmod/.mcp.json +9 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/lmod/README.md +328 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/lmod/pyproject.toml +44 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/lmod/server.json +75 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/lmod/src/lmod_mcp/__init__.py +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/lmod/src/lmod_mcp/capabilities/__init__.py +21 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/lmod/src/lmod_mcp/capabilities/lmod_handler.py +397 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/lmod/src/lmod_mcp/server.py +275 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/lmod/tests/__init__.py +1 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/lmod/tests/test_lmod_handler.py +446 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/lmod/tests/test_server.py +462 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/lmod/uv.lock +1749 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/ndp/.claude-plugin/plugin.json +5 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/ndp/.mcp.json +9 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/ndp/README.md +282 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/ndp/docs/mcp_development_guide.md +660 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/ndp/docs/ndp_api.md +220 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/ndp/docs/ndp_docs.md +305 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/ndp/pyproject.toml +71 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/ndp/server.json +47 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/ndp/src/ndp_mcp/__init__.py +8 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/ndp/src/ndp_mcp/server.py +395 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/ndp/tests/__init__.py +1 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/ndp/tests/conftest.py +61 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/ndp/tests/test_init.py +31 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/ndp/tests/test_main.py +135 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/ndp/tests/test_mcp_tool_handlers.py +509 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/ndp/tests/test_mcp_tools.py +35 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/ndp/tests/test_ndp_client.py +324 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/ndp/tests/test_server.py +129 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/ndp/uv.lock +1976 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/.claude-plugin/plugin.json +5 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/.gitignore +257 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/.mcp.json +9 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/README.md +305 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/pyproject.toml +48 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/server.json +78 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/__init__.py +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/capabilities/__init__.py +21 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/capabilities/cpu_info.py +104 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/capabilities/disk_info.py +112 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/capabilities/gpu_info.py +118 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/capabilities/hardware_summary.py +91 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/capabilities/memory_info.py +71 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/capabilities/network_info.py +127 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/capabilities/performance_monitor.py +128 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/capabilities/process_info.py +101 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/capabilities/remote_node_info.py +478 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/capabilities/sensor_info.py +132 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/capabilities/system_info.py +78 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/capabilities/utils.py +107 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/mcp_handlers.py +819 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/server.py +376 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/utils/__init__.py +21 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/utils/output_formatter.py +347 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/tests/conftest.py +230 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/tests/test_capabilities.py +703 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/tests/test_complete.py +431 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/tests/test_coverage_boost.py +1031 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/tests/test_direct_coverage.py +911 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/tests/test_mcp_handlers.py +428 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/tests/test_server.py +77 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/.claude-plugin/plugin.json +5 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/.gitignore +237 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/.mcp.json +9 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/README.md +329 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/example_script/create_sample_data.py +273 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/pyproject.toml +72 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/pytest.ini +12 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/server.json +95 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/src/pandas_mcp/__init__.py +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/src/pandas_mcp/implementation/__init__.py +21 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/src/pandas_mcp/implementation/data_cleaning.py +302 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/src/pandas_mcp/implementation/data_io.py +294 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/src/pandas_mcp/implementation/data_profiling.py +209 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/src/pandas_mcp/implementation/filtering.py +378 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/src/pandas_mcp/implementation/memory_optimization.py +384 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/src/pandas_mcp/implementation/output_formatter.py +373 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/src/pandas_mcp/implementation/pandas_statistics.py +203 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/src/pandas_mcp/implementation/time_series.py +319 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/src/pandas_mcp/implementation/transformations.py +359 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/src/pandas_mcp/implementation/validation.py +411 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/src/pandas_mcp/mcp_handlers.py +176 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/src/pandas_mcp/server.py +666 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/tests/__init__.py +1 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/tests/test_capabilities.py +213 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/tests/test_data_cleaning.py +367 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/tests/test_data_io.py +563 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/tests/test_data_profiling.py +313 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/tests/test_filtering.py +498 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/tests/test_mcp_handlers.py +175 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/tests/test_memory_optimization.py +496 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/tests/test_output_formatter.py +398 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/tests/test_pandas_statistics.py +380 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/tests/test_time_series.py +343 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/tests/test_transformations.py +522 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/tests/test_validation.py +396 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/.claude-plugin/plugin.json +5 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/.gitignore +29 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/.mcp.json +9 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/README.md +357 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/USAGE_GUIDE.md +188 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/pyproject.toml +46 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/pytest.ini +4 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/server.json +87 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/src/parallel_sort_mcp/__init__.py +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/src/parallel_sort_mcp/implementation/__init__.py +21 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/src/parallel_sort_mcp/implementation/export_handler.py +314 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/src/parallel_sort_mcp/implementation/filter_handler.py +619 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/src/parallel_sort_mcp/implementation/parallel_processor.py +574 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/src/parallel_sort_mcp/implementation/pattern_detection.py +536 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/src/parallel_sort_mcp/implementation/sort_handler.py +133 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/src/parallel_sort_mcp/implementation/statistics_handler.py +343 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/src/parallel_sort_mcp/mcp_handlers.py +164 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/src/parallel_sort_mcp/server.py +437 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/tests/__init__.py +3 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/tests/test_edge_cases.py +224 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/tests/test_export_handler.py +268 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/tests/test_filter_advanced.py +455 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/tests/test_filter_handler.py +350 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/tests/test_mcp_handlers.py +270 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/tests/test_mcp_handlers_errors.py +171 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/tests/test_parallel_processor.py +821 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/tests/test_pattern_detection.py +254 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/tests/test_server.py +38 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/tests/test_server_main.py +120 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/tests/test_sort_handler.py +217 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/tests/test_statistics_handler.py +177 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/uv.lock +1946 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/.claude-plugin/plugin.json +5 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/.gitignore +140 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/.mcp.json +9 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/LICENSE +38 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/README.md +559 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/USAGE_README.md +263 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/prompt.md +12 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/pyproject.toml +72 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/pytest.ini +6 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/requirements.txt +2 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/scripts/__init__.py +3 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/scripts/automate_setup.py +490 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/scripts/build_paraview.py +265 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/scripts/configure_paraview.py +267 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/scripts/install_deps.py +273 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/scripts/installation_example.py +40 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/scripts/launch_gui.py +79 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/scripts/launch_server.py +121 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/scripts/test_installation.py +355 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/server.json +139 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/src/paraview_mcp/__init__.py +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/src/paraview_mcp/implementation/__init__.py +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/src/paraview_mcp/implementation/paraview_capabilities.py +2202 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/src/paraview_mcp/server.py +1066 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/src/paraview_mcp/viz.html +47 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/tests/__init__.py +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/tests/test_paraview_adios2.py +510 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/tests/test_paraview_capabilities.py +656 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/tests/test_paraview_filters.py +611 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/tests/test_paraview_rendering.py +575 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/tests/test_paraview_utilities.py +527 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/tests/test_server.py +175 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/uv.lock +2015 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/.claude-plugin/plugin.json +5 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/.gitignore +57 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/.mcp.json +9 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/README.md +368 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/data/data.csv +76 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/data/huge_log.txt +10 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/data/small_log.txt +4 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/data/weather_data.parquet +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/datasets/batch_1.parquet +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/datasets/batch_large_strings.parquet +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/evaluation.xml +43 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/images/compress.png +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/images/getResource.png +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/images/listResources.png +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/images/listTools.png +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/images/pandas.png +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/images/parquet.png +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/images/sort.png +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/images/tests.png +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/pyproject.toml +48 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/pytest.ini +6 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/server.json +51 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/src/__init__.py +3 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/src/parquet_mcp/__init__.py +3 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/src/parquet_mcp/capabilities/__init__.py +1 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/src/parquet_mcp/capabilities/parquet_handler.py +839 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/src/parquet_mcp/server.py +199 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/tests/README.md +133 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/tests/__init__.py +4 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/tests/conftest.py +68 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/tests/test_additional_edge_cases.py +233 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/tests/test_aggregate_column.py +343 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/tests/test_boundary_rows.py +286 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/tests/test_column_selection.py +242 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/tests/test_data_types.py +222 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/tests/test_default_parameters.py +195 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/tests/test_estimate_slice_size.py +269 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/tests/test_filter_edge_cases.py +249 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/tests/test_filter_operations.py +418 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/tests/test_filtered_slice.py +273 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/tests/test_filtering.py +320 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/tests/test_get_column_preview.py +234 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/tests/test_json_response_validation.py +351 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/tests/test_malformed_files.py +234 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/tests/test_null_handling.py +153 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/tests/test_path_security.py +222 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/tests/test_performance.py +309 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/tests/test_read_slice.py +146 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/tests/test_response_format.py +269 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/tests/test_server.py +97 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/tests/test_summarize.py +54 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/tests/test_tool_consistency.py +280 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/uv.lock +1855 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/plot/.claude-plugin/plugin.json +5 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/plot/.gitignore +20 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/plot/.mcp.json +9 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/plot/README.md +351 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/plot/data/sample_data.csv +11 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/plot/data/temperature.csv +48471 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/plot/pyproject.toml +51 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/plot/pytest.ini +15 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/plot/server.json +59 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/plot/src/plot_mcp/__init__.py +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/plot/src/plot_mcp/implementation/__init__.py +21 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/plot/src/plot_mcp/implementation/plot_capabilities.py +387 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/plot/src/plot_mcp/server.py +315 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/plot/tests/__init__.py +3 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/plot/tests/conftest.py +49 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/plot/tests/test_capabilities.py +385 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/plot/tests/test_complete.py +644 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/plot/tests/test_handlers.py +431 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/plot/tests/test_integration.py +479 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/plot/tests/test_server.py +261 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/plot/uv.lock +2250 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/.claude-plugin/plugin.json +5 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/.gitignore +71 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/.mcp.json +9 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/README.md +313 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/docs/MCP_SERVER_GUIDE.md +57 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/docs/basic_install.md +93 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/docs/run.md +375 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/docs/slurm_installation/NATIVE_SLURM_SUCCESS_REPORT.md +139 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/docs/slurm_installation/SLURM_INSTALLATION_GUIDE.md +491 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/docs/slurm_installation/final_verification.sh +209 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/docs/slurm_installation/install_slurm.sh +350 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/docs/slurm_installation/parallel_job.sh +64 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/docs/slurm_installation/quick_native_test.sh +11 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/docs/slurm_installation/slurm.conf +40 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/docs/slurm_installation/slurm_config.conf +32 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/example_scripts/README.md +242 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/example_scripts/SLURM_SCRIPT_GENERATION_PROMPT.md +236 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/example_scripts/array_job.sh +60 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/example_scripts/data_processing.sh +140 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/example_scripts/generate_slurm_script.sh +395 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/example_scripts/hello_world.sh +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/example_scripts/long_simulation.sh +121 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/example_scripts/python_computation.sh +0 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/logs/README.md +39 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/pyproject.toml +48 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/pytest.ini +6 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/server.json +87 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/src/slurm_mcp/__init__.py +4 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/src/slurm_mcp/implementation/__init__.py +21 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/src/slurm_mcp/implementation/array_jobs.py +118 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/src/slurm_mcp/implementation/cluster_info.py +63 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/src/slurm_mcp/implementation/job_cancellation.py +49 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/src/slurm_mcp/implementation/job_details.py +87 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/src/slurm_mcp/implementation/job_listing.py +75 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/src/slurm_mcp/implementation/job_output.py +91 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/src/slurm_mcp/implementation/job_status.py +50 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/src/slurm_mcp/implementation/job_submission.py +167 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/src/slurm_mcp/implementation/node_allocation.py +493 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/src/slurm_mcp/implementation/node_info.py +52 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/src/slurm_mcp/implementation/queue_info.py +104 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/src/slurm_mcp/implementation/slurm_handler.py +59 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/src/slurm_mcp/implementation/utils.py +24 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/src/slurm_mcp/mcp_handlers.py +349 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/src/slurm_mcp/server.py +519 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/tests/__init__.py +4 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/tests/conftest.py +433 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/tests/test_capabilities.py +364 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/tests/test_coverage_improvement.py +1524 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/tests/test_init.py +20 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/tests/test_integration.py +395 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/tests/test_mcp_handlers.py +733 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/tests/test_node_allocation_coverage.py +347 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/tests/test_performance.py +559 -0
- clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/tests/test_server_tools.py +1236 -0
- clio_kit-2.0.0.dist-info/METADATA +345 -0
- clio_kit-2.0.0.dist-info/RECORD +506 -0
- clio_kit-2.0.0.dist-info/WHEEL +4 -0
- clio_kit-2.0.0.dist-info/entry_points.txt +2 -0
- clio_kit-2.0.0.dist-info/licenses/LICENSE +29 -0
|
@@ -0,0 +1,364 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Tests for Slurm capabilities.
|
|
3
|
+
Tests real Slurm job submission and status checking.
|
|
4
|
+
Requires Slurm to be installed and available on the system.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import pytest
|
|
8
|
+
import os
|
|
9
|
+
import tempfile
|
|
10
|
+
from slurm_mcp.implementation.slurm_handler import (
|
|
11
|
+
submit_slurm_job,
|
|
12
|
+
get_job_status,
|
|
13
|
+
cancel_slurm_job,
|
|
14
|
+
list_slurm_jobs,
|
|
15
|
+
get_slurm_info,
|
|
16
|
+
get_job_details,
|
|
17
|
+
get_job_output,
|
|
18
|
+
get_queue_info,
|
|
19
|
+
submit_array_job,
|
|
20
|
+
get_node_info,
|
|
21
|
+
_check_slurm_available,
|
|
22
|
+
_create_sbatch_script,
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class TestSlurmCapabilities:
|
|
27
|
+
"""Test suite for Slurm capabilities."""
|
|
28
|
+
|
|
29
|
+
def test_slurm_availability_check(self):
|
|
30
|
+
"""Test Slurm availability detection."""
|
|
31
|
+
# This will return True or False based on actual system
|
|
32
|
+
result = _check_slurm_available()
|
|
33
|
+
assert isinstance(result, bool)
|
|
34
|
+
|
|
35
|
+
def test_sbatch_script_creation_basic(self, temp_script):
|
|
36
|
+
"""Test basic SBATCH script generation."""
|
|
37
|
+
cores = 4
|
|
38
|
+
sbatch_script = _create_sbatch_script(temp_script, cores)
|
|
39
|
+
|
|
40
|
+
assert os.path.exists(sbatch_script)
|
|
41
|
+
|
|
42
|
+
with open(sbatch_script, "r") as f:
|
|
43
|
+
content = f.read()
|
|
44
|
+
|
|
45
|
+
# Check for basic SBATCH directives
|
|
46
|
+
assert "#!/bin/bash" in content
|
|
47
|
+
assert f"#SBATCH --cpus-per-task={cores}" in content
|
|
48
|
+
assert "#SBATCH --job-name=mcp_job" in content
|
|
49
|
+
assert "#SBATCH --output=logs/slurm_output/slurm_%j.out" in content
|
|
50
|
+
assert "#SBATCH --error=logs/slurm_output/slurm_%j.err" in content
|
|
51
|
+
|
|
52
|
+
# Cleanup
|
|
53
|
+
os.unlink(sbatch_script)
|
|
54
|
+
|
|
55
|
+
def test_sbatch_script_creation_enhanced(self, temp_script, job_parameters):
|
|
56
|
+
"""Test enhanced SBATCH script generation with all parameters."""
|
|
57
|
+
cores = 4
|
|
58
|
+
sbatch_script = _create_sbatch_script(
|
|
59
|
+
temp_script,
|
|
60
|
+
cores,
|
|
61
|
+
memory=job_parameters["memory"],
|
|
62
|
+
time_limit=job_parameters["time_limit"],
|
|
63
|
+
job_name=job_parameters["job_name"],
|
|
64
|
+
partition=job_parameters["partition"],
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
assert os.path.exists(sbatch_script)
|
|
68
|
+
|
|
69
|
+
with open(sbatch_script, "r") as f:
|
|
70
|
+
content = f.read()
|
|
71
|
+
|
|
72
|
+
# Check for enhanced SBATCH directives
|
|
73
|
+
assert f"#SBATCH --mem={job_parameters['memory']}" in content
|
|
74
|
+
assert f"#SBATCH --time={job_parameters['time_limit']}" in content
|
|
75
|
+
assert f"#SBATCH --job-name={job_parameters['job_name']}" in content
|
|
76
|
+
assert f"#SBATCH --partition={job_parameters['partition']}" in content
|
|
77
|
+
|
|
78
|
+
# Cleanup
|
|
79
|
+
os.unlink(sbatch_script)
|
|
80
|
+
|
|
81
|
+
def test_job_submission_validation(self, temp_script):
|
|
82
|
+
"""Test job submission parameter validation."""
|
|
83
|
+
# Test invalid cores
|
|
84
|
+
with pytest.raises(ValueError):
|
|
85
|
+
submit_slurm_job(temp_script, 0)
|
|
86
|
+
|
|
87
|
+
with pytest.raises(ValueError):
|
|
88
|
+
submit_slurm_job(temp_script, -1)
|
|
89
|
+
|
|
90
|
+
# Test invalid script path
|
|
91
|
+
with pytest.raises(FileNotFoundError):
|
|
92
|
+
submit_slurm_job("/nonexistent/script.sh", 4)
|
|
93
|
+
|
|
94
|
+
def test_enhanced_job_submission(self, temp_script, job_parameters):
|
|
95
|
+
"""Test job submission with enhanced parameters."""
|
|
96
|
+
result = submit_slurm_job(
|
|
97
|
+
temp_script,
|
|
98
|
+
4,
|
|
99
|
+
memory=job_parameters["memory"],
|
|
100
|
+
time_limit=job_parameters["time_limit"],
|
|
101
|
+
job_name=job_parameters["job_name"],
|
|
102
|
+
partition=job_parameters["partition"],
|
|
103
|
+
)
|
|
104
|
+
|
|
105
|
+
# Should return a dictionary with job_id
|
|
106
|
+
assert isinstance(result, dict)
|
|
107
|
+
assert "job_id" in result
|
|
108
|
+
assert len(result["job_id"]) > 0
|
|
109
|
+
|
|
110
|
+
def test_job_status_structure(self, sample_job_id):
|
|
111
|
+
"""Test that job status returns proper structure."""
|
|
112
|
+
status = get_job_status(sample_job_id)
|
|
113
|
+
|
|
114
|
+
required_keys = ["job_id", "status", "reason", "real_slurm"]
|
|
115
|
+
for key in required_keys:
|
|
116
|
+
assert key in status
|
|
117
|
+
|
|
118
|
+
assert isinstance(status["real_slurm"], bool)
|
|
119
|
+
assert status["job_id"] == sample_job_id
|
|
120
|
+
|
|
121
|
+
def test_cancel_job_functionality(self, sample_job_id):
|
|
122
|
+
"""Test job cancellation functionality."""
|
|
123
|
+
result = cancel_slurm_job(sample_job_id)
|
|
124
|
+
|
|
125
|
+
# Should return proper structure
|
|
126
|
+
required_keys = ["job_id", "status", "message", "real_slurm"]
|
|
127
|
+
for key in required_keys:
|
|
128
|
+
assert key in result
|
|
129
|
+
|
|
130
|
+
assert result["job_id"] == sample_job_id
|
|
131
|
+
assert result["status"] in ["cancelled", "error"]
|
|
132
|
+
|
|
133
|
+
def test_list_jobs_functionality(self):
|
|
134
|
+
"""Test job listing functionality."""
|
|
135
|
+
# Test without filters
|
|
136
|
+
result = list_slurm_jobs()
|
|
137
|
+
|
|
138
|
+
# Should return proper structure
|
|
139
|
+
required_keys = ["jobs", "count", "real_slurm"]
|
|
140
|
+
for key in required_keys:
|
|
141
|
+
assert key in result
|
|
142
|
+
|
|
143
|
+
assert isinstance(result["jobs"], list)
|
|
144
|
+
assert isinstance(result["count"], int)
|
|
145
|
+
assert result["count"] == len(result["jobs"])
|
|
146
|
+
|
|
147
|
+
# Test with user filter
|
|
148
|
+
result_filtered = list_slurm_jobs(user="testuser")
|
|
149
|
+
assert "user_filter" in result_filtered
|
|
150
|
+
assert result_filtered["user_filter"] == "testuser"
|
|
151
|
+
|
|
152
|
+
# Test with state filter
|
|
153
|
+
result_state = list_slurm_jobs(state="RUNNING")
|
|
154
|
+
assert "state_filter" in result_state
|
|
155
|
+
assert result_state["state_filter"] == "RUNNING"
|
|
156
|
+
|
|
157
|
+
def test_cluster_info_functionality(self):
|
|
158
|
+
"""Test cluster information functionality."""
|
|
159
|
+
result = get_slurm_info()
|
|
160
|
+
|
|
161
|
+
# Should return proper structure
|
|
162
|
+
required_keys = ["cluster_name", "partitions", "real_slurm"]
|
|
163
|
+
for key in required_keys:
|
|
164
|
+
assert key in result
|
|
165
|
+
|
|
166
|
+
assert isinstance(result["partitions"], list)
|
|
167
|
+
assert isinstance(result["real_slurm"], bool)
|
|
168
|
+
|
|
169
|
+
# Check partition structure if any partitions exist
|
|
170
|
+
if result["partitions"]:
|
|
171
|
+
partition = result["partitions"][0]
|
|
172
|
+
partition_keys = ["partition", "avail_idle", "timelimit", "nodes", "state"]
|
|
173
|
+
for key in partition_keys:
|
|
174
|
+
assert key in partition
|
|
175
|
+
|
|
176
|
+
def test_job_details_functionality(self, sample_job_id):
|
|
177
|
+
"""Test detailed job information retrieval."""
|
|
178
|
+
result = get_job_details(sample_job_id)
|
|
179
|
+
|
|
180
|
+
required_keys = ["job_id", "real_slurm"]
|
|
181
|
+
for key in required_keys:
|
|
182
|
+
assert key in result
|
|
183
|
+
|
|
184
|
+
assert result["job_id"] == sample_job_id
|
|
185
|
+
assert isinstance(result["real_slurm"], bool)
|
|
186
|
+
|
|
187
|
+
# Should have either details or error
|
|
188
|
+
assert "details" in result or "error" in result
|
|
189
|
+
|
|
190
|
+
def test_job_output_functionality(self, sample_job_id):
|
|
191
|
+
"""Test job output retrieval functionality."""
|
|
192
|
+
for output_type in ["stdout", "stderr"]:
|
|
193
|
+
result = get_job_output(sample_job_id, output_type)
|
|
194
|
+
|
|
195
|
+
required_keys = ["job_id", "output_type", "real_slurm"]
|
|
196
|
+
for key in required_keys:
|
|
197
|
+
assert key in result
|
|
198
|
+
|
|
199
|
+
assert result["job_id"] == sample_job_id
|
|
200
|
+
assert result["output_type"] == output_type
|
|
201
|
+
|
|
202
|
+
# Should have either content or error
|
|
203
|
+
assert "content" in result or "error" in result
|
|
204
|
+
|
|
205
|
+
def test_queue_info_functionality(self):
|
|
206
|
+
"""Test queue information functionality."""
|
|
207
|
+
# Test without partition filter
|
|
208
|
+
result = get_queue_info()
|
|
209
|
+
|
|
210
|
+
required_keys = ["jobs", "total_jobs", "state_summary", "real_slurm"]
|
|
211
|
+
for key in required_keys:
|
|
212
|
+
assert key in result
|
|
213
|
+
|
|
214
|
+
assert isinstance(result["jobs"], list)
|
|
215
|
+
assert isinstance(result["total_jobs"], int)
|
|
216
|
+
assert isinstance(result["state_summary"], dict)
|
|
217
|
+
|
|
218
|
+
# Test with partition filter
|
|
219
|
+
result_filtered = get_queue_info(partition="compute")
|
|
220
|
+
assert "partition_filter" in result_filtered
|
|
221
|
+
assert result_filtered["partition_filter"] == "compute"
|
|
222
|
+
|
|
223
|
+
def test_array_job_submission(self, array_script, array_parameters):
|
|
224
|
+
"""Test array job submission functionality."""
|
|
225
|
+
result = submit_array_job(
|
|
226
|
+
array_script,
|
|
227
|
+
array_parameters["array_range"],
|
|
228
|
+
cores=array_parameters["cores"],
|
|
229
|
+
memory=array_parameters["memory"],
|
|
230
|
+
time_limit=array_parameters["time_limit"],
|
|
231
|
+
job_name=array_parameters["job_name"],
|
|
232
|
+
)
|
|
233
|
+
|
|
234
|
+
if "error" not in result:
|
|
235
|
+
required_keys = ["array_job_id", "array_range", "real_slurm"]
|
|
236
|
+
for key in required_keys:
|
|
237
|
+
assert key in result
|
|
238
|
+
|
|
239
|
+
assert result["array_range"] == array_parameters["array_range"]
|
|
240
|
+
assert isinstance(result["real_slurm"], bool)
|
|
241
|
+
|
|
242
|
+
def test_node_info_functionality(self):
|
|
243
|
+
"""Test node information functionality."""
|
|
244
|
+
result = get_node_info()
|
|
245
|
+
|
|
246
|
+
required_keys = ["nodes", "total_nodes", "real_slurm"]
|
|
247
|
+
for key in required_keys:
|
|
248
|
+
assert key in result
|
|
249
|
+
|
|
250
|
+
assert isinstance(result["nodes"], list)
|
|
251
|
+
assert isinstance(result["total_nodes"], int)
|
|
252
|
+
assert result["total_nodes"] == len(result["nodes"])
|
|
253
|
+
|
|
254
|
+
# Check node structure if any nodes exist
|
|
255
|
+
if result["nodes"]:
|
|
256
|
+
node = result["nodes"][0]
|
|
257
|
+
node_keys = ["node_name", "state", "cpus", "memory"]
|
|
258
|
+
for key in node_keys:
|
|
259
|
+
assert key in node
|
|
260
|
+
|
|
261
|
+
def test_job_workflow_integration(self, temp_script):
|
|
262
|
+
"""Test complete job workflow integration."""
|
|
263
|
+
# Submit job
|
|
264
|
+
submit_result = submit_slurm_job(
|
|
265
|
+
temp_script, cores=2, job_name="integration_test"
|
|
266
|
+
)
|
|
267
|
+
assert isinstance(submit_result, dict)
|
|
268
|
+
assert "job_id" in submit_result
|
|
269
|
+
|
|
270
|
+
job_id = submit_result["job_id"]
|
|
271
|
+
|
|
272
|
+
# Check status
|
|
273
|
+
status = get_job_status(job_id)
|
|
274
|
+
assert status["job_id"] == job_id
|
|
275
|
+
|
|
276
|
+
# Get details
|
|
277
|
+
details = get_job_details(job_id)
|
|
278
|
+
assert details["job_id"] == job_id
|
|
279
|
+
|
|
280
|
+
# Try to cancel (should work even if job doesn't exist)
|
|
281
|
+
cancel_result = cancel_slurm_job(job_id)
|
|
282
|
+
assert cancel_result["job_id"] == job_id
|
|
283
|
+
|
|
284
|
+
def test_error_handling(self):
|
|
285
|
+
"""Test error handling in various scenarios."""
|
|
286
|
+
# Test with invalid job ID
|
|
287
|
+
status = get_job_status("invalid_job_id")
|
|
288
|
+
assert "job_id" in status
|
|
289
|
+
assert "real_slurm" in status
|
|
290
|
+
|
|
291
|
+
# Test cancellation of non-existent job
|
|
292
|
+
cancel_result = cancel_slurm_job("999999999")
|
|
293
|
+
assert "job_id" in cancel_result
|
|
294
|
+
assert "status" in cancel_result
|
|
295
|
+
|
|
296
|
+
def test_real_slurm_detection(self):
|
|
297
|
+
"""Test that real Slurm detection works properly."""
|
|
298
|
+
is_real = _check_slurm_available()
|
|
299
|
+
|
|
300
|
+
# Test job submission only if Slurm is available
|
|
301
|
+
if is_real:
|
|
302
|
+
with tempfile.NamedTemporaryFile(mode="w", suffix=".sh", delete=False) as f:
|
|
303
|
+
f.write("#!/bin/bash\necho 'test'\n")
|
|
304
|
+
script_path = f.name
|
|
305
|
+
|
|
306
|
+
os.chmod(script_path, 0o755)
|
|
307
|
+
|
|
308
|
+
try:
|
|
309
|
+
submit_result = submit_slurm_job(script_path, 2)
|
|
310
|
+
job_id = submit_result["job_id"]
|
|
311
|
+
status = get_job_status(job_id)
|
|
312
|
+
|
|
313
|
+
# The real_slurm flag should be True
|
|
314
|
+
assert status["real_slurm"]
|
|
315
|
+
|
|
316
|
+
# Should return a valid job ID
|
|
317
|
+
assert isinstance(job_id, str)
|
|
318
|
+
assert job_id.isdigit()
|
|
319
|
+
assert 1 <= len(job_id) <= 10
|
|
320
|
+
finally:
|
|
321
|
+
os.unlink(script_path)
|
|
322
|
+
else:
|
|
323
|
+
# If Slurm is not available, submission should fail
|
|
324
|
+
with tempfile.NamedTemporaryFile(mode="w", suffix=".sh", delete=False) as f:
|
|
325
|
+
f.write("#!/bin/bash\necho 'test'\n")
|
|
326
|
+
script_path = f.name
|
|
327
|
+
|
|
328
|
+
os.chmod(script_path, 0o755)
|
|
329
|
+
|
|
330
|
+
try:
|
|
331
|
+
with pytest.raises(RuntimeError, match="Slurm is not available"):
|
|
332
|
+
submit_slurm_job(script_path, 2)
|
|
333
|
+
finally:
|
|
334
|
+
os.unlink(script_path)
|
|
335
|
+
|
|
336
|
+
def test_job_submission_with_valid_script(self, temp_script, valid_cores):
|
|
337
|
+
"""Test job submission with valid script and cores."""
|
|
338
|
+
submit_result = submit_slurm_job(temp_script, valid_cores)
|
|
339
|
+
|
|
340
|
+
assert isinstance(submit_result, dict)
|
|
341
|
+
assert "job_id" in submit_result
|
|
342
|
+
job_id = submit_result["job_id"]
|
|
343
|
+
assert isinstance(job_id, str)
|
|
344
|
+
assert job_id.isdigit()
|
|
345
|
+
|
|
346
|
+
def test_job_submission_with_invalid_file(self, valid_cores):
|
|
347
|
+
"""Test job submission with non-existent file."""
|
|
348
|
+
with pytest.raises(FileNotFoundError):
|
|
349
|
+
submit_slurm_job("nonexistent_file.sh", valid_cores)
|
|
350
|
+
|
|
351
|
+
def test_job_submission_with_invalid_cores(self, temp_script, invalid_cores):
|
|
352
|
+
"""Test job submission with invalid core count."""
|
|
353
|
+
with pytest.raises(ValueError):
|
|
354
|
+
submit_slurm_job(temp_script, invalid_cores)
|
|
355
|
+
|
|
356
|
+
def test_job_status_check(self, sample_job_id):
|
|
357
|
+
"""Test job status checking."""
|
|
358
|
+
status = get_job_status(sample_job_id)
|
|
359
|
+
|
|
360
|
+
assert isinstance(status, dict)
|
|
361
|
+
assert "job_id" in status
|
|
362
|
+
assert "status" in status
|
|
363
|
+
assert "reason" in status
|
|
364
|
+
assert status["job_id"] == sample_job_id
|