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.
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/JarvisPLOT.egg-info/PKG-INFO +1 -1
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/PKG-INFO +1 -1
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/Figure/figure.py +5 -2
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/Figure/layout_runtime.py +15 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/capabilities.py +35 -1
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/core.py +12 -1
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/manual_cards/workflow.yaml +2 -1
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/templates_catalog.py +3 -8
- jarvisplot-2.0.3/jarvisplot/verbs/cap.py +629 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/verbs/config_cmd.py +1 -1
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/verbs/explain.py +2 -3
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/verbs/suggest.py +2 -3
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/verbs/validate.py +2 -8
- jarvisplot-2.0.3/jarvisplot/yaml_io.py +154 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/pyproject.toml +1 -1
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_agent_digest.py +25 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_capabilities.py +85 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_config_edit.py +45 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_figure_contracts.py +33 -0
- jarvisplot-2.0.1/jarvisplot/verbs/cap.py +0 -189
- jarvisplot-2.0.1/jarvisplot/yaml_io.py +0 -64
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/JarvisPLOT.egg-info/SOURCES.txt +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/JarvisPLOT.egg-info/dependency_links.txt +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/JarvisPLOT.egg-info/entry_points.txt +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/JarvisPLOT.egg-info/requires.txt +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/JarvisPLOT.egg-info/top_level.txt +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/README.md +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/Figure/__init__.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/Figure/adapters_rect.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/Figure/adapters_ternary.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/Figure/cards/std_axes_adapter_config.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/Figure/colorbar_runtime.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/Figure/config_runtime.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/Figure/data_pipelines.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/Figure/density_cell_runtime.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/Figure/design_runtime.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/Figure/dynesty_runtime.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/Figure/figure_types.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/Figure/helper.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/Figure/interp_2d_runtime.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/Figure/interp_natural_neighbor.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/Figure/interp_natural_neighbor_exact.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/Figure/layer_runtime.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/Figure/method_registry.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/Figure/posterior_density_runtime.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/Figure/posterior_hpd.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/Figure/posterior_mesh.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/Figure/preprocessor.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/Figure/preprocessor_runtime.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/Figure/profile_runtime.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/Figure/style_runtime.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/__init__.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/agent_digest.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/agent_io.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cache_store.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/a4paper/1x1/ternary.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/a4paper/2x1/dynesty_runplot.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/a4paper/2x1/rect.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/a4paper/2x1/rect5x1.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/a4paper/2x1/rect_cmap.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/a4paper/2x1/ternary.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/a4paper/2x1/ternary_cmap.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/a4paper/4x1/rect.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/a4paper/4x1/rect_cmap.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/a4paper/4x1/ternary.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/a4paper/4x1/ternary_cmap.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/args.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/colors/colormaps.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/default/output.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/flowchart/default.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/gambit/1x1/ternary.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/gambit/2x1/rect_cmap.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/gambit/2x1/ternary.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/gambit/2x1/ternary_cmap.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/icons/JarvisHEP.png +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/icons/flowchart/JarvisHEP.png +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/icons/flowchart/calculator.png +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/icons/flowchart/inputfile.png +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/icons/flowchart/opera.png +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/icons/flowchart/outputfile.png +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/icons/flowchart/sampler.png +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/icons/gambit.png +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/icons/gambit_small.png +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cards/style_preference.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cli.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/cli_help.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/client.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/column_demand.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/column_probe.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/config.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/config_address.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/core_assets.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/core_runtime.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/data_access.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/data_loader.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/data_loader_hdf5.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/data_loader_runtime.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/data_loader_summary.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/diagnostic_guidance.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/diagnostics.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/dryrun_runtime.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/expr_names.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/fix_apply.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/flowchart.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/inner_func.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/man_catalog.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/man_methods.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/man_render_agent.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/man_render_human.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/man_transforms.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/manual_cards/agent-output.yaml +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/manual_cards/cli-map.yaml +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/manual_cards/data-columns.yaml +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/manual_cards/diagnostics.yaml +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/manual_cards/dryrun-viz.yaml +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/manual_cards/layer-method.yaml +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/manual_cards/manifest.yaml +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/manual_cards/method_notes.yaml +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/manual_cards/style-axes.yaml +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/manual_cards/type-posterior-2d.yaml +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/manual_cards/type-profile-2d.yaml +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/manual_cards/validate.yaml +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/manual_cards/yaml-root.yaml +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/memtrace.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/method_contracts.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/render_health.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/core/common.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/core/dataset.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/core/figure.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/core/layer.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/core/transform.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/manifest.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/bar.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/barh.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/contour.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/contourf.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/dynesty_runplot.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/errorbar.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/fill.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/fill_between.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/fill_betweenx.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/hist.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/imshow.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/jpcontour.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/jpcontourf.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/jpfield.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/pcolor.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/pcolormesh.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/plot.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/quiver.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/scatter.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/step.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/tricontour.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/tricontourf.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/tripcolor.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/tripcolor_axes.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/triplot.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/voronoi.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/methods/voronoif.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema/plot-config.json +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema_catalog.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/schema_diagnostics.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/transform_contracts.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/utils/__init__.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/utils/cmaps.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/utils/dataframes.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/utils/expression.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/utils/interpolator.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/utils/pathing.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/validation.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/verbs/__init__.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/verbs/data.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/verbs/doctor.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/verbs/dryrun.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/verbs/man.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/jarvisplot/verbs/template.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/setup.cfg +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_agent_envelope.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_axis_title.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_cli_help.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_cli_verbs.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_cmaps.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_column_existence.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_config_addressing.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_config_expand.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_data_access.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_data_describe.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_data_head_eval.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_data_loader_contracts.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_data_pipelines.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_density_cell_transform.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_diagnostic_guidance.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_docs_status_labels.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_doctor_partial.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_explain.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_figure_type_expander.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_fix_application.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_flowchart_renderer.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_interp_2d_transform.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_interp_natural_neighbor.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_interpolator_contracts.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_jpcontour_methods.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_man_cli.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_method_contracts.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_parse_data_metadata.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_pathing_contracts.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_posterior_hpd.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_render_health.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_row_ledger.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_schema_catalog.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_suggest.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_suggest_axes.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_template_catalog.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_template_json.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_transform_contracts.py +0 -0
- {jarvisplot-2.0.1 → jarvisplot-2.0.3}/tests/test_validate_no_matplotlib.py +0 -0
|
@@ -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
|
-
|
|
842
|
-
|
|
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
|
|
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
|
|
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
|
|
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:
|