jarvisplot 2.0.1__tar.gz → 2.0.3__tar.gz

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 (216) hide show
  1. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/JarvisPLOT.egg-info/PKG-INFO +1 -1
  2. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/PKG-INFO +1 -1
  3. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/Figure/figure.py +5 -2
  4. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/Figure/layout_runtime.py +15 -0
  5. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/capabilities.py +35 -1
  6. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/core.py +12 -1
  7. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/manual_cards/workflow.yaml +2 -1
  8. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/templates_catalog.py +3 -8
  9. jarvisplot-2.0.3/jarvisplot/verbs/cap.py +629 -0
  10. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/verbs/config_cmd.py +1 -1
  11. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/verbs/explain.py +2 -3
  12. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/verbs/suggest.py +2 -3
  13. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/verbs/validate.py +2 -8
  14. jarvisplot-2.0.3/jarvisplot/yaml_io.py +154 -0
  15. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/pyproject.toml +1 -1
  16. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_agent_digest.py +25 -0
  17. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_capabilities.py +85 -0
  18. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_config_edit.py +45 -0
  19. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_figure_contracts.py +33 -0
  20. jarvisplot-2.0.1/jarvisplot/verbs/cap.py +0 -189
  21. jarvisplot-2.0.1/jarvisplot/yaml_io.py +0 -64
  22. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/JarvisPLOT.egg-info/SOURCES.txt +0 -0
  23. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/JarvisPLOT.egg-info/dependency_links.txt +0 -0
  24. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/JarvisPLOT.egg-info/entry_points.txt +0 -0
  25. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/JarvisPLOT.egg-info/requires.txt +0 -0
  26. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/JarvisPLOT.egg-info/top_level.txt +0 -0
  27. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/README.md +0 -0
  28. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/Figure/__init__.py +0 -0
  29. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/Figure/adapters_rect.py +0 -0
  30. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/Figure/adapters_ternary.py +0 -0
  31. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/Figure/cards/std_axes_adapter_config.json +0 -0
  32. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/Figure/colorbar_runtime.py +0 -0
  33. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/Figure/config_runtime.py +0 -0
  34. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/Figure/data_pipelines.py +0 -0
  35. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/Figure/density_cell_runtime.py +0 -0
  36. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/Figure/design_runtime.py +0 -0
  37. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/Figure/dynesty_runtime.py +0 -0
  38. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/Figure/figure_types.py +0 -0
  39. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/Figure/helper.py +0 -0
  40. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/Figure/interp_2d_runtime.py +0 -0
  41. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/Figure/interp_natural_neighbor.py +0 -0
  42. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/Figure/interp_natural_neighbor_exact.py +0 -0
  43. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/Figure/layer_runtime.py +0 -0
  44. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/Figure/method_registry.py +0 -0
  45. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/Figure/posterior_density_runtime.py +0 -0
  46. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/Figure/posterior_hpd.py +0 -0
  47. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/Figure/posterior_mesh.py +0 -0
  48. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/Figure/preprocessor.py +0 -0
  49. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/Figure/preprocessor_runtime.py +0 -0
  50. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/Figure/profile_runtime.py +0 -0
  51. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/Figure/style_runtime.py +0 -0
  52. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/__init__.py +0 -0
  53. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/agent_digest.py +0 -0
  54. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/agent_io.py +0 -0
  55. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cache_store.py +0 -0
  56. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/a4paper/1x1/ternary.json +0 -0
  57. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/a4paper/2x1/dynesty_runplot.json +0 -0
  58. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/a4paper/2x1/rect.json +0 -0
  59. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/a4paper/2x1/rect5x1.json +0 -0
  60. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/a4paper/2x1/rect_cmap.json +0 -0
  61. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/a4paper/2x1/ternary.json +0 -0
  62. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/a4paper/2x1/ternary_cmap.json +0 -0
  63. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/a4paper/4x1/rect.json +0 -0
  64. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/a4paper/4x1/rect_cmap.json +0 -0
  65. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/a4paper/4x1/ternary.json +0 -0
  66. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/a4paper/4x1/ternary_cmap.json +0 -0
  67. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/args.json +0 -0
  68. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/colors/colormaps.json +0 -0
  69. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/default/output.json +0 -0
  70. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/flowchart/default.json +0 -0
  71. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/gambit/1x1/ternary.json +0 -0
  72. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/gambit/2x1/rect_cmap.json +0 -0
  73. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/gambit/2x1/ternary.json +0 -0
  74. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/gambit/2x1/ternary_cmap.json +0 -0
  75. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/icons/JarvisHEP.png +0 -0
  76. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/icons/flowchart/JarvisHEP.png +0 -0
  77. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/icons/flowchart/calculator.png +0 -0
  78. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/icons/flowchart/inputfile.png +0 -0
  79. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/icons/flowchart/opera.png +0 -0
  80. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/icons/flowchart/outputfile.png +0 -0
  81. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/icons/flowchart/sampler.png +0 -0
  82. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/icons/gambit.png +0 -0
  83. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/icons/gambit_small.png +0 -0
  84. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/style_preference.json +0 -0
  85. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cli.py +0 -0
  86. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cli_help.py +0 -0
  87. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/client.py +0 -0
  88. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/column_demand.py +0 -0
  89. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/column_probe.py +0 -0
  90. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/config.py +0 -0
  91. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/config_address.py +0 -0
  92. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/core_assets.py +0 -0
  93. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/core_runtime.py +0 -0
  94. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/data_access.py +0 -0
  95. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/data_loader.py +0 -0
  96. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/data_loader_hdf5.py +0 -0
  97. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/data_loader_runtime.py +0 -0
  98. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/data_loader_summary.py +0 -0
  99. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/diagnostic_guidance.py +0 -0
  100. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/diagnostics.py +0 -0
  101. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/dryrun_runtime.py +0 -0
  102. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/expr_names.py +0 -0
  103. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/fix_apply.py +0 -0
  104. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/flowchart.py +0 -0
  105. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/inner_func.py +0 -0
  106. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/man_catalog.py +0 -0
  107. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/man_methods.py +0 -0
  108. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/man_render_agent.py +0 -0
  109. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/man_render_human.py +0 -0
  110. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/man_transforms.py +0 -0
  111. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/manual_cards/agent-output.yaml +0 -0
  112. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/manual_cards/cli-map.yaml +0 -0
  113. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/manual_cards/data-columns.yaml +0 -0
  114. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/manual_cards/diagnostics.yaml +0 -0
  115. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/manual_cards/dryrun-viz.yaml +0 -0
  116. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/manual_cards/layer-method.yaml +0 -0
  117. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/manual_cards/manifest.yaml +0 -0
  118. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/manual_cards/method_notes.yaml +0 -0
  119. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/manual_cards/style-axes.yaml +0 -0
  120. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/manual_cards/type-posterior-2d.yaml +0 -0
  121. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/manual_cards/type-profile-2d.yaml +0 -0
  122. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/manual_cards/validate.yaml +0 -0
  123. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/manual_cards/yaml-root.yaml +0 -0
  124. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/memtrace.py +0 -0
  125. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/method_contracts.py +0 -0
  126. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/render_health.py +0 -0
  127. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/core/common.json +0 -0
  128. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/core/dataset.json +0 -0
  129. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/core/figure.json +0 -0
  130. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/core/layer.json +0 -0
  131. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/core/transform.json +0 -0
  132. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/manifest.json +0 -0
  133. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/bar.json +0 -0
  134. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/barh.json +0 -0
  135. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/contour.json +0 -0
  136. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/contourf.json +0 -0
  137. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/dynesty_runplot.json +0 -0
  138. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/errorbar.json +0 -0
  139. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/fill.json +0 -0
  140. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/fill_between.json +0 -0
  141. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/fill_betweenx.json +0 -0
  142. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/hist.json +0 -0
  143. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/imshow.json +0 -0
  144. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/jpcontour.json +0 -0
  145. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/jpcontourf.json +0 -0
  146. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/jpfield.json +0 -0
  147. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/pcolor.json +0 -0
  148. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/pcolormesh.json +0 -0
  149. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/plot.json +0 -0
  150. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/quiver.json +0 -0
  151. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/scatter.json +0 -0
  152. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/step.json +0 -0
  153. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/tricontour.json +0 -0
  154. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/tricontourf.json +0 -0
  155. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/tripcolor.json +0 -0
  156. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/tripcolor_axes.json +0 -0
  157. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/triplot.json +0 -0
  158. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/voronoi.json +0 -0
  159. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/voronoif.json +0 -0
  160. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/plot-config.json +0 -0
  161. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema_catalog.py +0 -0
  162. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema_diagnostics.py +0 -0
  163. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/transform_contracts.py +0 -0
  164. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/utils/__init__.py +0 -0
  165. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/utils/cmaps.py +0 -0
  166. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/utils/dataframes.py +0 -0
  167. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/utils/expression.py +0 -0
  168. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/utils/interpolator.py +0 -0
  169. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/utils/pathing.py +0 -0
  170. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/validation.py +0 -0
  171. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/verbs/__init__.py +0 -0
  172. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/verbs/data.py +0 -0
  173. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/verbs/doctor.py +0 -0
  174. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/verbs/dryrun.py +0 -0
  175. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/verbs/man.py +0 -0
  176. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/verbs/template.py +0 -0
  177. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/setup.cfg +0 -0
  178. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_agent_envelope.py +0 -0
  179. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_axis_title.py +0 -0
  180. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_cli_help.py +0 -0
  181. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_cli_verbs.py +0 -0
  182. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_cmaps.py +0 -0
  183. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_column_existence.py +0 -0
  184. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_config_addressing.py +0 -0
  185. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_config_expand.py +0 -0
  186. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_data_access.py +0 -0
  187. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_data_describe.py +0 -0
  188. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_data_head_eval.py +0 -0
  189. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_data_loader_contracts.py +0 -0
  190. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_data_pipelines.py +0 -0
  191. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_density_cell_transform.py +0 -0
  192. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_diagnostic_guidance.py +0 -0
  193. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_docs_status_labels.py +0 -0
  194. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_doctor_partial.py +0 -0
  195. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_explain.py +0 -0
  196. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_figure_type_expander.py +0 -0
  197. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_fix_application.py +0 -0
  198. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_flowchart_renderer.py +0 -0
  199. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_interp_2d_transform.py +0 -0
  200. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_interp_natural_neighbor.py +0 -0
  201. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_interpolator_contracts.py +0 -0
  202. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_jpcontour_methods.py +0 -0
  203. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_man_cli.py +0 -0
  204. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_method_contracts.py +0 -0
  205. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_parse_data_metadata.py +0 -0
  206. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_pathing_contracts.py +0 -0
  207. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_posterior_hpd.py +0 -0
  208. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_render_health.py +0 -0
  209. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_row_ledger.py +0 -0
  210. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_schema_catalog.py +0 -0
  211. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_suggest.py +0 -0
  212. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_suggest_axes.py +0 -0
  213. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_template_catalog.py +0 -0
  214. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_template_json.py +0 -0
  215. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_transform_contracts.py +0 -0
  216. {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_validate_no_matplotlib.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: JarvisPLOT
3
- Version: 2.0.1
3
+ Version: 2.0.3
4
4
  Summary: Jarvis-PLOT: YAML-driven plotting engine
5
5
  Requires-Python: >=3.10
6
6
  Description-Content-Type: text/markdown
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: JarvisPLOT
3
- Version: 2.0.1
3
+ Version: 2.0.3
4
4
  Summary: Jarvis-PLOT: YAML-driven plotting engine
5
5
  Requires-Python: >=3.10
6
6
  Description-Content-Type: text/markdown
@@ -26,6 +26,7 @@ from .layout_runtime import (
26
26
  apply_manual_ticks,
27
27
  ensure_numbered_rect_axes,
28
28
  has_manual_ticks,
29
+ hide_log_minor_tick_labels,
29
30
  is_numbered_ax,
30
31
  )
31
32
  from .colorbar_runtime import (
@@ -802,6 +803,7 @@ class Figure:
802
803
  self.ax.set_yscale("log")
803
804
  from matplotlib.ticker import LogLocator
804
805
  self.ax.yaxis.set_minor_locator(LogLocator(subs='auto'))
806
+ hide_log_minor_tick_labels(self.ax, "y")
805
807
  else:
806
808
  self.ax.yaxis.set_minor_locator(AutoMinorLocator())
807
809
 
@@ -809,6 +811,7 @@ class Figure:
809
811
  self.ax.set_xscale("log")
810
812
  from matplotlib.ticker import LogLocator
811
813
  self.ax.xaxis.set_minor_locator(LogLocator(subs='auto'))
814
+ hide_log_minor_tick_labels(self.ax, "x")
812
815
  else:
813
816
  self.ax.xaxis.set_minor_locator(AutoMinorLocator())
814
817
 
@@ -838,8 +841,8 @@ class Figure:
838
841
 
839
842
  # Apply manual ticks here at initialization if provided in YAML
840
843
  ax_ticks_cfg = self.frame.get('ax', {}).get('ticks', {})
841
- # self._apply_manual_ticks(self.ax, "x", ax_ticks_cfg.get('x', {}))
842
- # self._apply_manual_ticks(self.ax, "y", ax_ticks_cfg.get('y', {}))
844
+ self._apply_manual_ticks(self.ax, "x", ax_ticks_cfg.get('x', {}))
845
+ self._apply_manual_ticks(self.ax, "y", ax_ticks_cfg.get('y', {}))
843
846
 
844
847
 
845
848
  self.ax.tick_params(**self.frame['ax']['ticks'].get("both", {}))
@@ -61,6 +61,19 @@ def apply_axis_title(fig, ax_obj, ax_name: str) -> None:
61
61
  ax_obj.text(s=str(title), **text_params)
62
62
 
63
63
 
64
+ def hide_log_minor_tick_labels(ax_obj, which: str) -> None:
65
+ """Keep log minor tick marks, but hide their labels by default."""
66
+ target = ax_obj.ax if hasattr(ax_obj, "ax") else ax_obj
67
+ if which == "x":
68
+ target.tick_params(
69
+ axis="x", which="minor", labelbottom=False, labeltop=False
70
+ )
71
+ elif which == "y":
72
+ target.tick_params(
73
+ axis="y", which="minor", labelleft=False, labelright=False
74
+ )
75
+
76
+
64
77
  def ensure_numbered_rect_axes(fig, ax_name: str, kwgs: dict):
65
78
  if not is_numbered_ax(ax_name):
66
79
  raise ValueError(f"Illegal dynamic axes name '{ax_name}'. Only ax<NUMBER> is allowed.")
@@ -88,12 +101,14 @@ def ensure_numbered_rect_axes(fig, ax_name: str, kwgs: dict):
88
101
  if fig.frame.get(ax_name, {}).get("yscale", "").lower() == "log":
89
102
  ax_obj.set_yscale("log")
90
103
  ax_obj.yaxis.set_minor_locator(LogLocator(subs="auto"))
104
+ hide_log_minor_tick_labels(ax_obj, "y")
91
105
  else:
92
106
  ax_obj.yaxis.set_minor_locator(AutoMinorLocator())
93
107
 
94
108
  if fig.frame.get(ax_name, {}).get("xscale", "").lower() == "log":
95
109
  ax_obj.set_xscale("log")
96
110
  ax_obj.xaxis.set_minor_locator(LogLocator(subs="auto"))
111
+ hide_log_minor_tick_labels(ax_obj, "x")
97
112
  else:
98
113
  ax_obj.xaxis.set_minor_locator(AutoMinorLocator())
99
114
 
@@ -15,7 +15,8 @@ Two rules keep this honest:
15
15
  derived from the registry, card directory or schema that the runtime actually
16
16
  consults, and ``tests/test_capabilities.py`` fails if the two drift apart.
17
17
  - **Stay cheap.** Agents call this constantly, so the collectors read JSON and
18
- module-level dicts; nothing here imports matplotlib.
18
+ module-level dicts. The cmap collector also inspects Matplotlib's live
19
+ registry because agents may need the complete built-in cmap vocabulary.
19
20
  """
20
21
 
21
22
  from __future__ import annotations
@@ -226,9 +227,42 @@ def _cmaps() -> dict[str, Any]:
226
227
  for entry in entries
227
228
  if isinstance(entry, dict) and entry.get("name")
228
229
  )
230
+ jarvis_and_reversed = set(names) | {f"{name}_r" for name in names}
231
+ matplotlib_entries: list[dict[str, Any]] = []
232
+ try:
233
+ from matplotlib import colormaps
234
+
235
+ matplotlib_names = sorted(
236
+ str(name) for name in colormaps if str(name) not in jarvis_and_reversed
237
+ )
238
+ matplotlib_registry = set(str(name) for name in colormaps)
239
+ for name in matplotlib_names:
240
+ cmap = colormaps[name]
241
+ if name.endswith("_r") and name[:-2] in matplotlib_registry:
242
+ reverse = name[:-2]
243
+ elif f"{name}_r" in matplotlib_registry:
244
+ reverse = f"{name}_r"
245
+ else:
246
+ reverse = None
247
+ samples = getattr(cmap, "N", None)
248
+ matplotlib_entries.append(
249
+ {
250
+ "name": name,
251
+ "type": type(cmap).__name__,
252
+ "N": int(samples) if isinstance(samples, int) else samples,
253
+ "reverse": reverse,
254
+ }
255
+ )
256
+ matplotlib_note = (
257
+ "Matplotlib registry entries include the normal and _r reverse names."
258
+ )
259
+ except Exception as exc:
260
+ matplotlib_note = f"Matplotlib registry unavailable: {exc}"
229
261
  return {
230
262
  "jarvis": names,
231
263
  "jarvis_reversed": [f"{name}_r" for name in names],
264
+ "matplotlib": matplotlib_entries,
265
+ "matplotlib_note": matplotlib_note,
232
266
  "note": (
233
267
  "Every matplotlib colormap is also available. Jarvis colormaps are "
234
268
  "registered from cards/colors/colormaps.json; each has an _r reverse."
@@ -285,11 +285,22 @@ class JarvisPLOT():
285
285
  def _maybe_write_agent_digest(self, figure_cfg, figobj) -> None:
286
286
  """Write figure-level agent_output digest after a successful plot."""
287
287
  try:
288
- from .agent_digest import load_figure_source_dataframe, maybe_write_figure_digest
288
+ from .agent_digest import (
289
+ load_figure_source_dataframe,
290
+ maybe_write_figure_digest,
291
+ parse_agent_output,
292
+ )
289
293
  from .cli import JPLOT_VERSION
290
294
 
291
295
  if not isinstance(figure_cfg, dict):
292
296
  return
297
+ # Do not load the source dataframe just to discover that no agent
298
+ # digest was requested. This matters after rendering releases the
299
+ # last layer's source data.
300
+ root_config = getattr(self.yaml, "config", {}) or {}
301
+ root_output = root_config.get("output", {}) if isinstance(root_config, dict) else {}
302
+ if parse_agent_output(figure_cfg, root_output=root_output) is None:
303
+ return
293
304
  # Prefer raw YAML figure block (pre type-expand may have type: fields).
294
305
  # After expand_figure_types, config figures are already expanded; still OK.
295
306
  df = load_figure_source_dataframe(self, figure_cfg)
@@ -65,6 +65,7 @@ human:
65
65
  title: Rules
66
66
  items:
67
67
  - Never invent method, style, or cmap strings — use jplot cap.
68
+ - 'Write scalar-only leaf lists/maps in compact flow style: xlim: [0.1, 5.0] and labels: {x: $x$, y: $y$}; keep complex parent structures expanded.'
68
69
  - Bare path renders: jplot plot.yaml (there is no jplot run).
69
70
  - Optional tools: suggest, config set/expand — not the main author path.
70
71
  - Need layers control: jplot config expand plot.yaml --figure NAME --write
@@ -72,7 +73,7 @@ agent:
72
73
  body_markdown: |
73
74
  ## Full agent playbook
74
75
  1. **Discover** — `data describe` + `cap` subsets.
75
- 2. **Author** — edit `*.yaml` in the workspace (type macros preferred).
76
+ 2. **Author** — edit `*.yaml` in the workspace (type macros preferred); write scalar-only leaf lists/maps in compact flow style, e.g. `xlim: [0.1, 5.0]` and `labels: {x: $x$, y: $y$}`.
76
77
  3. **Judge (light only)** — `validate` / `doctor --json`. No heavy re-run; partial on type: is OK.
77
78
  4. **Execute once** — `jplot <file>` for PNG/PDF + agent_output digest.
78
79
  5. **Learn** — `explain JP-*` or `man diagnostics`; figure content from digest, not doctor mesh.
@@ -7,6 +7,8 @@ from __future__ import annotations
7
7
  from copy import deepcopy
8
8
  from typing import Any
9
9
 
10
+ from .yaml_io import dump_yaml_doc
11
+
10
12
  __all__ = [
11
13
  "TEMPLATE_KINDS",
12
14
  "get_template",
@@ -42,20 +44,13 @@ def get_template(kind: str) -> dict[str, Any]:
42
44
 
43
45
  def render_template_yaml(kind: str, *, values: dict[str, Any] | None = None) -> str:
44
46
  """Fill slot defaults with ``values`` and return YAML text."""
45
- import yaml
46
-
47
47
  spec = get_template(kind)
48
48
  slots = {s["name"]: s.get("default") for s in spec.get("slots") or []}
49
49
  if values:
50
50
  slots.update({k: v for k, v in values.items() if v is not None})
51
51
  body = deepcopy(spec["skeleton"])
52
52
  _apply_slots(body, slots)
53
- return yaml.safe_dump(
54
- body,
55
- sort_keys=False,
56
- allow_unicode=True,
57
- default_flow_style=False,
58
- )
53
+ return dump_yaml_doc(body, meta={"engine": "pyyaml"})
59
54
 
60
55
 
61
56
  def _apply_slots(node: Any, slots: dict[str, Any]) -> None: