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.
Files changed (506) hide show
  1. clio_kit/__init__.py +334 -0
  2. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/.claude-plugin/plugin.json +5 -0
  3. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/.gitignore +27 -0
  4. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/.mcp.json +9 -0
  5. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/README.md +323 -0
  6. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/docs/adios_setup.md +86 -0
  7. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/docs/basic_install.md +110 -0
  8. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/docs/example_uses.md +113 -0
  9. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/pyproject.toml +57 -0
  10. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/sample_data/data1.bp/data.0 +0 -0
  11. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/sample_data/data1.bp/md.0 +0 -0
  12. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/sample_data/data1.bp/md.idx +0 -0
  13. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/sample_data/data1.bp/mmd.0 +0 -0
  14. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/sample_data/data2.bp/data.0 +0 -0
  15. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/sample_data/data2.bp/md.0 +0 -0
  16. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/sample_data/data2.bp/md.idx +0 -0
  17. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/sample_data/data2.bp/mmd.0 +0 -0
  18. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/sample_data/data3.bp/data.0 +0 -0
  19. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/sample_data/data3.bp/md.0 +0 -0
  20. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/sample_data/data3.bp/md.idx +0 -0
  21. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/sample_data/data3.bp/mmd.0 +0 -0
  22. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/sample_data/data4.bp/data.0 +0 -0
  23. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/sample_data/data4.bp/md.0 +0 -0
  24. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/sample_data/data4.bp/md.idx +0 -0
  25. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/sample_data/data4.bp/mmd.0 +0 -0
  26. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/server.json +56 -0
  27. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/src/adios_mcp/__init__.py +0 -0
  28. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/src/adios_mcp/implementation/__init__.py +21 -0
  29. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/src/adios_mcp/implementation/bp5_attributes.py +52 -0
  30. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/src/adios_mcp/implementation/bp5_inspect_variables.py +36 -0
  31. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/src/adios_mcp/implementation/bp5_inspect_variables_at_step.py +46 -0
  32. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/src/adios_mcp/implementation/bp5_list.py +16 -0
  33. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/src/adios_mcp/implementation/bp5_read_variable_at_step.py +39 -0
  34. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/src/adios_mcp/mcp_handlers.py +100 -0
  35. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/src/adios_mcp/server.py +164 -0
  36. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/tests/__init__.py +0 -0
  37. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/tests/test_bp5_attributes.py +140 -0
  38. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/tests/test_bp5_inspect_variables.py +165 -0
  39. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/tests/test_bp5_inspect_variables_at_step.py +166 -0
  40. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/tests/test_bp5_list.py +152 -0
  41. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/tests/test_bp5_read_variable_at_step.py +196 -0
  42. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/tests/test_mcp_handlers.py +468 -0
  43. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/tests/test_server.py +350 -0
  44. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/adios/uv.lock +1840 -0
  45. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/.claude-plugin/plugin.json +5 -0
  46. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/.gitignore +30 -0
  47. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/.mcp.json +9 -0
  48. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/README.md +366 -0
  49. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/demo.py +91 -0
  50. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/docs/basic_install.md +115 -0
  51. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/pyproject.toml +45 -0
  52. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/server.json +87 -0
  53. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/src/arxiv_mcp/__init__.py +0 -0
  54. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/src/arxiv_mcp/capabilities/__init__.py +21 -0
  55. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/src/arxiv_mcp/capabilities/arxiv_base.py +183 -0
  56. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/src/arxiv_mcp/capabilities/category_search.py +89 -0
  57. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/src/arxiv_mcp/capabilities/date_search.py +55 -0
  58. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/src/arxiv_mcp/capabilities/download_paper.py +201 -0
  59. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/src/arxiv_mcp/capabilities/export_utils.py +110 -0
  60. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/src/arxiv_mcp/capabilities/paper_details.py +145 -0
  61. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/src/arxiv_mcp/capabilities/text_search.py +107 -0
  62. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/src/arxiv_mcp/mcp_handlers.py +370 -0
  63. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/src/arxiv_mcp/server.py +300 -0
  64. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/tests/__init__.py +0 -0
  65. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/tests/test_advanced_scenarios.py +463 -0
  66. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/tests/test_arxiv_base.py +393 -0
  67. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/tests/test_arxiv_base_errors.py +512 -0
  68. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/tests/test_category_search.py +97 -0
  69. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/tests/test_date_search.py +245 -0
  70. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/tests/test_download_paper.py +220 -0
  71. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/tests/test_edge_cases.py +342 -0
  72. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/tests/test_export_utils.py +170 -0
  73. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/tests/test_fastmcp_tools.py +415 -0
  74. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/tests/test_integration.py +201 -0
  75. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/tests/test_mcp_handlers.py +826 -0
  76. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/tests/test_paper_details.py +146 -0
  77. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/tests/test_server.py +934 -0
  78. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/tests/test_text_search.py +123 -0
  79. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/arxiv/uv.lock +1769 -0
  80. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/.claude-plugin/plugin.json +5 -0
  81. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/.mcp.json +9 -0
  82. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/README.md +224 -0
  83. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/assets/mcp-client.png +0 -0
  84. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/assets/mcp-clientstartchronolog.png +0 -0
  85. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/assets/mcp-retievecopilot.png +0 -0
  86. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/assets/mcp-retrieve-diseasepred.png +0 -0
  87. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/docs/Chronolog_setup.md +146 -0
  88. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/pyproject.toml +63 -0
  89. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/server.json +51 -0
  90. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/src/chronomcp/__init__.py +21 -0
  91. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/src/chronomcp/capabilities/__init__.py +0 -0
  92. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/src/chronomcp/capabilities/record_handler.py +18 -0
  93. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/src/chronomcp/capabilities/retrieve_handler.py +45 -0
  94. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/src/chronomcp/capabilities/start_handler.py +37 -0
  95. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/src/chronomcp/capabilities/stop_handler.py +25 -0
  96. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/src/chronomcp/reader_script/CMakeLists.txt +46 -0
  97. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/src/chronomcp/reader_script/HDF5ArchiveReadingAgent.h +140 -0
  98. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/src/chronomcp/reader_script/reader.cpp +113 -0
  99. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/src/chronomcp/server.py +115 -0
  100. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/src/chronomcp/utils/config.py +47 -0
  101. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/src/chronomcp/utils/helpers.py +37 -0
  102. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/tests/__init__.py +0 -0
  103. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/tests/test_helpers.py +36 -0
  104. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/tests/test_integration.py +61 -0
  105. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/tests/test_record_handler.py +67 -0
  106. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/tests/test_retrieve_handler.py +71 -0
  107. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/tests/test_server.py +113 -0
  108. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/tests/test_start_handler.py +39 -0
  109. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/tests/test_stop_handler.py +49 -0
  110. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/tests/test_utils.py +47 -0
  111. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/chronolog/uv.lock +1830 -0
  112. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/compression/.claude-plugin/plugin.json +5 -0
  113. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/compression/.gitignore +54 -0
  114. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/compression/.mcp.json +9 -0
  115. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/compression/README.md +291 -0
  116. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/compression/data/sample_data.csv +51 -0
  117. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/compression/data/sample_log.txt +93 -0
  118. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/compression/pyproject.toml +44 -0
  119. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/compression/pytest.ini +6 -0
  120. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/compression/server.json +43 -0
  121. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/compression/src/compression_mcp/__init__.py +0 -0
  122. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/compression/src/compression_mcp/capabilities/__init__.py +21 -0
  123. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/compression/src/compression_mcp/capabilities/compression_base.py +99 -0
  124. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/compression/src/compression_mcp/mcp_handlers.py +40 -0
  125. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/compression/src/compression_mcp/server.py +108 -0
  126. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/compression/tests/__init__.py +1 -0
  127. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/compression/tests/test_compression_handler.py +109 -0
  128. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/compression/tests/test_integration.py +34 -0
  129. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/compression/tests/test_mcp_handlers.py +33 -0
  130. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/compression/tests/test_server_basic.py +155 -0
  131. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/compression/tests/test_server_coverage_completion.py +104 -0
  132. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/compression/tests/test_server_execution_simple.py +132 -0
  133. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/compression/uv.lock +1781 -0
  134. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/darshan/.claude-plugin/plugin.json +5 -0
  135. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/darshan/.mcp.json +9 -0
  136. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/darshan/README.md +334 -0
  137. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/darshan/pyproject.toml +62 -0
  138. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/darshan/server.json +75 -0
  139. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/darshan/src/darshan_mcp/__init__.py +21 -0
  140. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/darshan/src/darshan_mcp/capabilities/__init__.py +1 -0
  141. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/darshan/src/darshan_mcp/capabilities/darshan_parser.py +857 -0
  142. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/darshan/src/darshan_mcp/server.py +315 -0
  143. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/darshan/tests/__init__.py +1 -0
  144. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/darshan/tests/test_darshan_parser.py +400 -0
  145. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/darshan/tests/test_darshan_parser_error_paths.py +454 -0
  146. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/darshan/tests/test_darshan_parser_posix_mpiio.py +460 -0
  147. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/darshan/tests/test_darshan_parser_text_parsing.py +519 -0
  148. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/darshan/tests/test_darshan_parser_timeline.py +506 -0
  149. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/darshan/tests/test_server.py +360 -0
  150. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/darshan/tests/test_server_main.py +156 -0
  151. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/darshan/uv.lock +2525 -0
  152. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/hdf5/.claude-plugin/plugin.json +5 -0
  153. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/hdf5/.gitignore +88 -0
  154. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/hdf5/.mcp.json +9 -0
  155. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/hdf5/README.md +725 -0
  156. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/hdf5/TESTING.md +291 -0
  157. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/hdf5/docs/ARCHITECTURE.md +425 -0
  158. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/hdf5/docs/EXAMPLES.md +421 -0
  159. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/hdf5/docs/MIGRATION.md +257 -0
  160. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/hdf5/docs/TOOLS.md +499 -0
  161. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/hdf5/docs/TRANSPORTS.md +274 -0
  162. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/hdf5/examples/README.md +103 -0
  163. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/hdf5/examples/create_demo_data.py +70 -0
  164. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/hdf5/examples/demo_script.py +106 -0
  165. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/hdf5/pyproject.toml +66 -0
  166. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/hdf5/server.json +165 -0
  167. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/hdf5/src/hdf5_mcp/__init__.py +21 -0
  168. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/hdf5/src/hdf5_mcp/config.py +409 -0
  169. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/hdf5/src/hdf5_mcp/resources.py +610 -0
  170. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/hdf5/src/hdf5_mcp/server.py +2363 -0
  171. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/hdf5/src/hdf5_mcp/utils.py +384 -0
  172. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/hdf5/tests/conftest.py +145 -0
  173. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/hdf5/tests/test_config_module.py +836 -0
  174. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/hdf5/tests/test_placeholder.py +6 -0
  175. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/hdf5/tests/test_resources_module.py +870 -0
  176. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/hdf5/tests/test_utils_module.py +720 -0
  177. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/hdf5/uv.lock +2103 -0
  178. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/.claude-plugin/plugin.json +5 -0
  179. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/.mcp.json +9 -0
  180. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/README.md +582 -0
  181. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/docs/GUIDE.md +105 -0
  182. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/docs/assets/Screenshot 2025-05-15 160800.png +0 -0
  183. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/docs/assets/Screenshot 2025-05-15 162219.png +0 -0
  184. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/docs/assets/Screenshot 2025-05-15 162322.png +0 -0
  185. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/docs/assets/Screenshot 2025-05-15 162545.png +0 -0
  186. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/docs/assets/Screenshot 2025-05-15 162922.png +0 -0
  187. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/docs/assets/Screenshot 2025-05-15 163023.png +0 -0
  188. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/docs/assets/Screenshot 2025-05-15 163516.png +0 -0
  189. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/docs/assets/Screenshot 2025-05-15 163651.png +0 -0
  190. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/docs/assets/Screenshot 2025-05-15 163759.png +0 -0
  191. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/docs/basic_install.md +93 -0
  192. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/pyproject.toml +55 -0
  193. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/requirements.txt +9 -0
  194. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/server.json +150 -0
  195. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/src/jarvis_mcp/__init__.py +0 -0
  196. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/src/jarvis_mcp/capabilities/__init__.py +21 -0
  197. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/src/jarvis_mcp/capabilities/jarvis_handler.py +144 -0
  198. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/src/jarvis_mcp/server.py +612 -0
  199. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/tests/__init__.py +1 -0
  200. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/tests/conftest.py +180 -0
  201. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/tests/run_tests.py +150 -0
  202. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/tests/test_basic.py +267 -0
  203. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/tests/test_edge_cases.py +361 -0
  204. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/tests/test_integration.py +395 -0
  205. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/tests/test_jarvis_handler.py +479 -0
  206. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/tests/test_performance.py +0 -0
  207. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/tests/test_server.py +700 -0
  208. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/tests/test_server_direct.py +655 -0
  209. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/tests/utils.py +593 -0
  210. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/jarvis/uv.lock +2081 -0
  211. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/lmod/.claude-plugin/plugin.json +5 -0
  212. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/lmod/.mcp.json +9 -0
  213. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/lmod/README.md +328 -0
  214. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/lmod/pyproject.toml +44 -0
  215. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/lmod/server.json +75 -0
  216. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/lmod/src/lmod_mcp/__init__.py +0 -0
  217. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/lmod/src/lmod_mcp/capabilities/__init__.py +21 -0
  218. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/lmod/src/lmod_mcp/capabilities/lmod_handler.py +397 -0
  219. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/lmod/src/lmod_mcp/server.py +275 -0
  220. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/lmod/tests/__init__.py +1 -0
  221. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/lmod/tests/test_lmod_handler.py +446 -0
  222. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/lmod/tests/test_server.py +462 -0
  223. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/lmod/uv.lock +1749 -0
  224. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/ndp/.claude-plugin/plugin.json +5 -0
  225. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/ndp/.mcp.json +9 -0
  226. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/ndp/README.md +282 -0
  227. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/ndp/docs/mcp_development_guide.md +660 -0
  228. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/ndp/docs/ndp_api.md +220 -0
  229. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/ndp/docs/ndp_docs.md +305 -0
  230. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/ndp/pyproject.toml +71 -0
  231. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/ndp/server.json +47 -0
  232. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/ndp/src/ndp_mcp/__init__.py +8 -0
  233. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/ndp/src/ndp_mcp/server.py +395 -0
  234. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/ndp/tests/__init__.py +1 -0
  235. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/ndp/tests/conftest.py +61 -0
  236. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/ndp/tests/test_init.py +31 -0
  237. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/ndp/tests/test_main.py +135 -0
  238. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/ndp/tests/test_mcp_tool_handlers.py +509 -0
  239. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/ndp/tests/test_mcp_tools.py +35 -0
  240. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/ndp/tests/test_ndp_client.py +324 -0
  241. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/ndp/tests/test_server.py +129 -0
  242. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/ndp/uv.lock +1976 -0
  243. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/.claude-plugin/plugin.json +5 -0
  244. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/.gitignore +257 -0
  245. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/.mcp.json +9 -0
  246. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/README.md +305 -0
  247. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/pyproject.toml +48 -0
  248. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/server.json +78 -0
  249. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/__init__.py +0 -0
  250. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/capabilities/__init__.py +21 -0
  251. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/capabilities/cpu_info.py +104 -0
  252. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/capabilities/disk_info.py +112 -0
  253. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/capabilities/gpu_info.py +118 -0
  254. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/capabilities/hardware_summary.py +91 -0
  255. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/capabilities/memory_info.py +71 -0
  256. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/capabilities/network_info.py +127 -0
  257. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/capabilities/performance_monitor.py +128 -0
  258. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/capabilities/process_info.py +101 -0
  259. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/capabilities/remote_node_info.py +478 -0
  260. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/capabilities/sensor_info.py +132 -0
  261. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/capabilities/system_info.py +78 -0
  262. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/capabilities/utils.py +107 -0
  263. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/mcp_handlers.py +819 -0
  264. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/server.py +376 -0
  265. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/utils/__init__.py +21 -0
  266. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/src/node_hardware_mcp/utils/output_formatter.py +347 -0
  267. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/tests/conftest.py +230 -0
  268. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/tests/test_capabilities.py +703 -0
  269. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/tests/test_complete.py +431 -0
  270. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/tests/test_coverage_boost.py +1031 -0
  271. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/tests/test_direct_coverage.py +911 -0
  272. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/tests/test_mcp_handlers.py +428 -0
  273. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/node-hardware/tests/test_server.py +77 -0
  274. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/.claude-plugin/plugin.json +5 -0
  275. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/.gitignore +237 -0
  276. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/.mcp.json +9 -0
  277. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/README.md +329 -0
  278. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/example_script/create_sample_data.py +273 -0
  279. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/pyproject.toml +72 -0
  280. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/pytest.ini +12 -0
  281. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/server.json +95 -0
  282. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/src/pandas_mcp/__init__.py +0 -0
  283. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/src/pandas_mcp/implementation/__init__.py +21 -0
  284. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/src/pandas_mcp/implementation/data_cleaning.py +302 -0
  285. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/src/pandas_mcp/implementation/data_io.py +294 -0
  286. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/src/pandas_mcp/implementation/data_profiling.py +209 -0
  287. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/src/pandas_mcp/implementation/filtering.py +378 -0
  288. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/src/pandas_mcp/implementation/memory_optimization.py +384 -0
  289. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/src/pandas_mcp/implementation/output_formatter.py +373 -0
  290. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/src/pandas_mcp/implementation/pandas_statistics.py +203 -0
  291. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/src/pandas_mcp/implementation/time_series.py +319 -0
  292. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/src/pandas_mcp/implementation/transformations.py +359 -0
  293. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/src/pandas_mcp/implementation/validation.py +411 -0
  294. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/src/pandas_mcp/mcp_handlers.py +176 -0
  295. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/src/pandas_mcp/server.py +666 -0
  296. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/tests/__init__.py +1 -0
  297. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/tests/test_capabilities.py +213 -0
  298. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/tests/test_data_cleaning.py +367 -0
  299. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/tests/test_data_io.py +563 -0
  300. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/tests/test_data_profiling.py +313 -0
  301. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/tests/test_filtering.py +498 -0
  302. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/tests/test_mcp_handlers.py +175 -0
  303. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/tests/test_memory_optimization.py +496 -0
  304. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/tests/test_output_formatter.py +398 -0
  305. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/tests/test_pandas_statistics.py +380 -0
  306. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/tests/test_time_series.py +343 -0
  307. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/tests/test_transformations.py +522 -0
  308. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/pandas/tests/test_validation.py +396 -0
  309. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/.claude-plugin/plugin.json +5 -0
  310. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/.gitignore +29 -0
  311. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/.mcp.json +9 -0
  312. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/README.md +357 -0
  313. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/USAGE_GUIDE.md +188 -0
  314. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/pyproject.toml +46 -0
  315. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/pytest.ini +4 -0
  316. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/server.json +87 -0
  317. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/src/parallel_sort_mcp/__init__.py +0 -0
  318. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/src/parallel_sort_mcp/implementation/__init__.py +21 -0
  319. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/src/parallel_sort_mcp/implementation/export_handler.py +314 -0
  320. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/src/parallel_sort_mcp/implementation/filter_handler.py +619 -0
  321. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/src/parallel_sort_mcp/implementation/parallel_processor.py +574 -0
  322. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/src/parallel_sort_mcp/implementation/pattern_detection.py +536 -0
  323. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/src/parallel_sort_mcp/implementation/sort_handler.py +133 -0
  324. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/src/parallel_sort_mcp/implementation/statistics_handler.py +343 -0
  325. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/src/parallel_sort_mcp/mcp_handlers.py +164 -0
  326. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/src/parallel_sort_mcp/server.py +437 -0
  327. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/tests/__init__.py +3 -0
  328. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/tests/test_edge_cases.py +224 -0
  329. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/tests/test_export_handler.py +268 -0
  330. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/tests/test_filter_advanced.py +455 -0
  331. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/tests/test_filter_handler.py +350 -0
  332. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/tests/test_mcp_handlers.py +270 -0
  333. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/tests/test_mcp_handlers_errors.py +171 -0
  334. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/tests/test_parallel_processor.py +821 -0
  335. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/tests/test_pattern_detection.py +254 -0
  336. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/tests/test_server.py +38 -0
  337. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/tests/test_server_main.py +120 -0
  338. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/tests/test_sort_handler.py +217 -0
  339. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/tests/test_statistics_handler.py +177 -0
  340. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parallel-sort/uv.lock +1946 -0
  341. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/.claude-plugin/plugin.json +5 -0
  342. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/.gitignore +140 -0
  343. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/.mcp.json +9 -0
  344. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/LICENSE +38 -0
  345. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/README.md +559 -0
  346. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/USAGE_README.md +263 -0
  347. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/prompt.md +12 -0
  348. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/pyproject.toml +72 -0
  349. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/pytest.ini +6 -0
  350. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/requirements.txt +2 -0
  351. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/scripts/__init__.py +3 -0
  352. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/scripts/automate_setup.py +490 -0
  353. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/scripts/build_paraview.py +265 -0
  354. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/scripts/configure_paraview.py +267 -0
  355. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/scripts/install_deps.py +273 -0
  356. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/scripts/installation_example.py +40 -0
  357. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/scripts/launch_gui.py +79 -0
  358. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/scripts/launch_server.py +121 -0
  359. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/scripts/test_installation.py +355 -0
  360. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/server.json +139 -0
  361. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/src/paraview_mcp/__init__.py +0 -0
  362. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/src/paraview_mcp/implementation/__init__.py +0 -0
  363. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/src/paraview_mcp/implementation/paraview_capabilities.py +2202 -0
  364. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/src/paraview_mcp/server.py +1066 -0
  365. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/src/paraview_mcp/viz.html +47 -0
  366. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/tests/__init__.py +0 -0
  367. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/tests/test_paraview_adios2.py +510 -0
  368. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/tests/test_paraview_capabilities.py +656 -0
  369. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/tests/test_paraview_filters.py +611 -0
  370. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/tests/test_paraview_rendering.py +575 -0
  371. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/tests/test_paraview_utilities.py +527 -0
  372. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/tests/test_server.py +175 -0
  373. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/paraview/uv.lock +2015 -0
  374. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/.claude-plugin/plugin.json +5 -0
  375. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/.gitignore +57 -0
  376. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/.mcp.json +9 -0
  377. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/README.md +368 -0
  378. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/data/data.csv +76 -0
  379. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/data/huge_log.txt +10 -0
  380. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/data/small_log.txt +4 -0
  381. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/data/weather_data.parquet +0 -0
  382. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/datasets/batch_1.parquet +0 -0
  383. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/datasets/batch_large_strings.parquet +0 -0
  384. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/evaluation.xml +43 -0
  385. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/images/compress.png +0 -0
  386. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/images/getResource.png +0 -0
  387. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/images/listResources.png +0 -0
  388. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/images/listTools.png +0 -0
  389. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/images/pandas.png +0 -0
  390. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/images/parquet.png +0 -0
  391. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/images/sort.png +0 -0
  392. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/images/tests.png +0 -0
  393. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/pyproject.toml +48 -0
  394. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/pytest.ini +6 -0
  395. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/server.json +51 -0
  396. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/src/__init__.py +3 -0
  397. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/src/parquet_mcp/__init__.py +3 -0
  398. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/src/parquet_mcp/capabilities/__init__.py +1 -0
  399. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/src/parquet_mcp/capabilities/parquet_handler.py +839 -0
  400. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/src/parquet_mcp/server.py +199 -0
  401. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/tests/README.md +133 -0
  402. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/tests/__init__.py +4 -0
  403. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/tests/conftest.py +68 -0
  404. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/tests/test_additional_edge_cases.py +233 -0
  405. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/tests/test_aggregate_column.py +343 -0
  406. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/tests/test_boundary_rows.py +286 -0
  407. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/tests/test_column_selection.py +242 -0
  408. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/tests/test_data_types.py +222 -0
  409. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/tests/test_default_parameters.py +195 -0
  410. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/tests/test_estimate_slice_size.py +269 -0
  411. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/tests/test_filter_edge_cases.py +249 -0
  412. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/tests/test_filter_operations.py +418 -0
  413. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/tests/test_filtered_slice.py +273 -0
  414. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/tests/test_filtering.py +320 -0
  415. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/tests/test_get_column_preview.py +234 -0
  416. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/tests/test_json_response_validation.py +351 -0
  417. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/tests/test_malformed_files.py +234 -0
  418. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/tests/test_null_handling.py +153 -0
  419. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/tests/test_path_security.py +222 -0
  420. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/tests/test_performance.py +309 -0
  421. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/tests/test_read_slice.py +146 -0
  422. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/tests/test_response_format.py +269 -0
  423. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/tests/test_server.py +97 -0
  424. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/tests/test_summarize.py +54 -0
  425. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/tests/test_tool_consistency.py +280 -0
  426. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/parquet/uv.lock +1855 -0
  427. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/plot/.claude-plugin/plugin.json +5 -0
  428. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/plot/.gitignore +20 -0
  429. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/plot/.mcp.json +9 -0
  430. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/plot/README.md +351 -0
  431. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/plot/data/sample_data.csv +11 -0
  432. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/plot/data/temperature.csv +48471 -0
  433. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/plot/pyproject.toml +51 -0
  434. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/plot/pytest.ini +15 -0
  435. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/plot/server.json +59 -0
  436. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/plot/src/plot_mcp/__init__.py +0 -0
  437. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/plot/src/plot_mcp/implementation/__init__.py +21 -0
  438. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/plot/src/plot_mcp/implementation/plot_capabilities.py +387 -0
  439. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/plot/src/plot_mcp/server.py +315 -0
  440. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/plot/tests/__init__.py +3 -0
  441. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/plot/tests/conftest.py +49 -0
  442. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/plot/tests/test_capabilities.py +385 -0
  443. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/plot/tests/test_complete.py +644 -0
  444. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/plot/tests/test_handlers.py +431 -0
  445. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/plot/tests/test_integration.py +479 -0
  446. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/plot/tests/test_server.py +261 -0
  447. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/plot/uv.lock +2250 -0
  448. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/.claude-plugin/plugin.json +5 -0
  449. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/.gitignore +71 -0
  450. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/.mcp.json +9 -0
  451. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/README.md +313 -0
  452. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/docs/MCP_SERVER_GUIDE.md +57 -0
  453. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/docs/basic_install.md +93 -0
  454. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/docs/run.md +375 -0
  455. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/docs/slurm_installation/NATIVE_SLURM_SUCCESS_REPORT.md +139 -0
  456. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/docs/slurm_installation/SLURM_INSTALLATION_GUIDE.md +491 -0
  457. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/docs/slurm_installation/final_verification.sh +209 -0
  458. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/docs/slurm_installation/install_slurm.sh +350 -0
  459. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/docs/slurm_installation/parallel_job.sh +64 -0
  460. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/docs/slurm_installation/quick_native_test.sh +11 -0
  461. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/docs/slurm_installation/slurm.conf +40 -0
  462. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/docs/slurm_installation/slurm_config.conf +32 -0
  463. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/example_scripts/README.md +242 -0
  464. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/example_scripts/SLURM_SCRIPT_GENERATION_PROMPT.md +236 -0
  465. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/example_scripts/array_job.sh +60 -0
  466. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/example_scripts/data_processing.sh +140 -0
  467. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/example_scripts/generate_slurm_script.sh +395 -0
  468. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/example_scripts/hello_world.sh +0 -0
  469. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/example_scripts/long_simulation.sh +121 -0
  470. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/example_scripts/python_computation.sh +0 -0
  471. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/logs/README.md +39 -0
  472. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/pyproject.toml +48 -0
  473. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/pytest.ini +6 -0
  474. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/server.json +87 -0
  475. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/src/slurm_mcp/__init__.py +4 -0
  476. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/src/slurm_mcp/implementation/__init__.py +21 -0
  477. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/src/slurm_mcp/implementation/array_jobs.py +118 -0
  478. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/src/slurm_mcp/implementation/cluster_info.py +63 -0
  479. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/src/slurm_mcp/implementation/job_cancellation.py +49 -0
  480. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/src/slurm_mcp/implementation/job_details.py +87 -0
  481. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/src/slurm_mcp/implementation/job_listing.py +75 -0
  482. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/src/slurm_mcp/implementation/job_output.py +91 -0
  483. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/src/slurm_mcp/implementation/job_status.py +50 -0
  484. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/src/slurm_mcp/implementation/job_submission.py +167 -0
  485. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/src/slurm_mcp/implementation/node_allocation.py +493 -0
  486. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/src/slurm_mcp/implementation/node_info.py +52 -0
  487. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/src/slurm_mcp/implementation/queue_info.py +104 -0
  488. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/src/slurm_mcp/implementation/slurm_handler.py +59 -0
  489. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/src/slurm_mcp/implementation/utils.py +24 -0
  490. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/src/slurm_mcp/mcp_handlers.py +349 -0
  491. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/src/slurm_mcp/server.py +519 -0
  492. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/tests/__init__.py +4 -0
  493. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/tests/conftest.py +433 -0
  494. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/tests/test_capabilities.py +364 -0
  495. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/tests/test_coverage_improvement.py +1524 -0
  496. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/tests/test_init.py +20 -0
  497. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/tests/test_integration.py +395 -0
  498. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/tests/test_mcp_handlers.py +733 -0
  499. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/tests/test_node_allocation_coverage.py +347 -0
  500. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/tests/test_performance.py +559 -0
  501. clio_kit-2.0.0.data/data/clio-kit-mcp-servers/slurm/tests/test_server_tools.py +1236 -0
  502. clio_kit-2.0.0.dist-info/METADATA +345 -0
  503. clio_kit-2.0.0.dist-info/RECORD +506 -0
  504. clio_kit-2.0.0.dist-info/WHEEL +4 -0
  505. clio_kit-2.0.0.dist-info/entry_points.txt +2 -0
  506. 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