jarvisplot 1.3.0__tar.gz → 1.3.2__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 (75) hide show
  1. {jarvisplot-1.3.0 → jarvisplot-1.3.2/JarvisPLOT.egg-info}/PKG-INFO +43 -11
  2. {jarvisplot-1.3.0/jarvisplot.egg-info → jarvisplot-1.3.2/JarvisPLOT.egg-info}/SOURCES.txt +28 -7
  3. {jarvisplot-1.3.0/jarvisplot.egg-info → jarvisplot-1.3.2}/PKG-INFO +43 -11
  4. {jarvisplot-1.3.0 → jarvisplot-1.3.2}/README.md +40 -8
  5. jarvisplot-1.3.2/jarvisplot/Figure/adapters.py +6 -0
  6. jarvisplot-1.3.0/jarvisplot/Figure/adapters.py → jarvisplot-1.3.2/jarvisplot/Figure/adapters_rect.py +1 -72
  7. jarvisplot-1.3.2/jarvisplot/Figure/adapters_ternary.py +89 -0
  8. jarvisplot-1.3.2/jarvisplot/Figure/colorbar_runtime.py +221 -0
  9. jarvisplot-1.3.2/jarvisplot/Figure/config_runtime.py +87 -0
  10. jarvisplot-1.3.2/jarvisplot/Figure/figure.py +1009 -0
  11. jarvisplot-1.3.2/jarvisplot/Figure/layer_runtime.py +282 -0
  12. jarvisplot-1.3.2/jarvisplot/Figure/layout_runtime.py +228 -0
  13. jarvisplot-1.3.2/jarvisplot/Figure/load_data.py +100 -0
  14. {jarvisplot-1.3.0 → jarvisplot-1.3.2}/jarvisplot/Figure/preprocessor.py +33 -430
  15. jarvisplot-1.3.2/jarvisplot/Figure/preprocessor_runtime.py +479 -0
  16. jarvisplot-1.3.0/jarvisplot/Figure/load_data.py → jarvisplot-1.3.2/jarvisplot/Figure/profile_runtime.py +22 -139
  17. jarvisplot-1.3.2/jarvisplot/Figure/style_runtime.py +40 -0
  18. {jarvisplot-1.3.0 → jarvisplot-1.3.2}/jarvisplot/cli.py +6 -2
  19. {jarvisplot-1.3.0 → jarvisplot-1.3.2}/jarvisplot/config.py +4 -3
  20. {jarvisplot-1.3.0 → jarvisplot-1.3.2}/jarvisplot/core.py +18 -280
  21. jarvisplot-1.3.2/jarvisplot/core_assets.py +63 -0
  22. jarvisplot-1.3.2/jarvisplot/core_runtime.py +239 -0
  23. jarvisplot-1.3.2/jarvisplot/data_loader.py +490 -0
  24. jarvisplot-1.3.2/jarvisplot/data_loader_hdf5.py +205 -0
  25. jarvisplot-1.3.2/jarvisplot/data_loader_runtime.py +910 -0
  26. jarvisplot-1.3.2/jarvisplot/data_loader_summary.py +83 -0
  27. jarvisplot-1.3.2/jarvisplot/utils/expression.py +66 -0
  28. {jarvisplot-1.3.0 → jarvisplot-1.3.2}/jarvisplot/utils/interpolator.py +6 -22
  29. jarvisplot-1.3.2/jarvisplot/utils/pathing.py +31 -0
  30. {jarvisplot-1.3.0 → jarvisplot-1.3.2}/pyproject.toml +3 -3
  31. jarvisplot-1.3.2/tests/test_data_loader_contracts.py +96 -0
  32. jarvisplot-1.3.2/tests/test_docs_status_labels.py +46 -0
  33. jarvisplot-1.3.2/tests/test_figure_contracts.py +189 -0
  34. jarvisplot-1.3.2/tests/test_pathing_contracts.py +75 -0
  35. jarvisplot-1.3.2/tests/test_template_json.py +10 -0
  36. jarvisplot-1.3.0/jarvisplot/Figure/figure.py +0 -1891
  37. jarvisplot-1.3.0/jarvisplot/data_loader.py +0 -1669
  38. {jarvisplot-1.3.0/jarvisplot.egg-info → jarvisplot-1.3.2/JarvisPLOT.egg-info}/dependency_links.txt +0 -0
  39. {jarvisplot-1.3.0/jarvisplot.egg-info → jarvisplot-1.3.2/JarvisPLOT.egg-info}/entry_points.txt +0 -0
  40. {jarvisplot-1.3.0/jarvisplot.egg-info → jarvisplot-1.3.2/JarvisPLOT.egg-info}/requires.txt +0 -0
  41. {jarvisplot-1.3.0/jarvisplot.egg-info → jarvisplot-1.3.2/JarvisPLOT.egg-info}/top_level.txt +0 -0
  42. {jarvisplot-1.3.0 → jarvisplot-1.3.2}/jarvisplot/Figure/__init__.py +0 -0
  43. {jarvisplot-1.3.0 → jarvisplot-1.3.2}/jarvisplot/Figure/cards/std_axes_adapter_config.json +0 -0
  44. {jarvisplot-1.3.0 → jarvisplot-1.3.2}/jarvisplot/Figure/data_pipelines.py +0 -0
  45. {jarvisplot-1.3.0 → jarvisplot-1.3.2}/jarvisplot/Figure/helper.py +0 -0
  46. {jarvisplot-1.3.0 → jarvisplot-1.3.2}/jarvisplot/Figure/method_registry.py +0 -0
  47. {jarvisplot-1.3.0 → jarvisplot-1.3.2}/jarvisplot/__init__.py +0 -0
  48. {jarvisplot-1.3.0 → jarvisplot-1.3.2}/jarvisplot/cache_store.py +0 -0
  49. {jarvisplot-1.3.0 → jarvisplot-1.3.2}/jarvisplot/cards/a4paper/1x1/ternary.json +0 -0
  50. {jarvisplot-1.3.0 → jarvisplot-1.3.2}/jarvisplot/cards/a4paper/2x1/rect.json +0 -0
  51. {jarvisplot-1.3.0 → jarvisplot-1.3.2}/jarvisplot/cards/a4paper/2x1/rect5x1.json +0 -0
  52. {jarvisplot-1.3.0 → jarvisplot-1.3.2}/jarvisplot/cards/a4paper/2x1/rect_cmap.json +0 -0
  53. {jarvisplot-1.3.0 → jarvisplot-1.3.2}/jarvisplot/cards/a4paper/2x1/ternary.json +0 -0
  54. {jarvisplot-1.3.0 → jarvisplot-1.3.2}/jarvisplot/cards/a4paper/2x1/ternary_cmap.json +0 -0
  55. {jarvisplot-1.3.0 → jarvisplot-1.3.2}/jarvisplot/cards/a4paper/4x1/rect.json +0 -0
  56. {jarvisplot-1.3.0 → jarvisplot-1.3.2}/jarvisplot/cards/a4paper/4x1/rect_cmap.json +0 -0
  57. {jarvisplot-1.3.0 → jarvisplot-1.3.2}/jarvisplot/cards/a4paper/4x1/ternary.json +0 -0
  58. {jarvisplot-1.3.0 → jarvisplot-1.3.2}/jarvisplot/cards/a4paper/4x1/ternary_cmap.json +0 -0
  59. {jarvisplot-1.3.0 → jarvisplot-1.3.2}/jarvisplot/cards/args.json +0 -0
  60. {jarvisplot-1.3.0 → jarvisplot-1.3.2}/jarvisplot/cards/colors/colormaps.json +0 -0
  61. {jarvisplot-1.3.0 → jarvisplot-1.3.2}/jarvisplot/cards/default/output.json +0 -0
  62. {jarvisplot-1.3.0 → jarvisplot-1.3.2}/jarvisplot/cards/gambit/1x1/ternary.json +0 -0
  63. {jarvisplot-1.3.0 → jarvisplot-1.3.2}/jarvisplot/cards/gambit/2x1/rect_cmap.json +0 -0
  64. {jarvisplot-1.3.0 → jarvisplot-1.3.2}/jarvisplot/cards/gambit/2x1/ternary.json +0 -0
  65. {jarvisplot-1.3.0 → jarvisplot-1.3.2}/jarvisplot/cards/gambit/2x1/ternary_cmap.json +0 -0
  66. {jarvisplot-1.3.0 → jarvisplot-1.3.2}/jarvisplot/cards/icons/JarvisHEP.png +0 -0
  67. {jarvisplot-1.3.0 → jarvisplot-1.3.2}/jarvisplot/cards/icons/gambit.png +0 -0
  68. {jarvisplot-1.3.0 → jarvisplot-1.3.2}/jarvisplot/cards/icons/gambit_small.png +0 -0
  69. {jarvisplot-1.3.0 → jarvisplot-1.3.2}/jarvisplot/cards/style_preference.json +0 -0
  70. {jarvisplot-1.3.0 → jarvisplot-1.3.2}/jarvisplot/client.py +0 -0
  71. {jarvisplot-1.3.0 → jarvisplot-1.3.2}/jarvisplot/inner_func.py +0 -0
  72. {jarvisplot-1.3.0 → jarvisplot-1.3.2}/jarvisplot/memtrace.py +0 -0
  73. {jarvisplot-1.3.0 → jarvisplot-1.3.2}/jarvisplot/utils/__init__.py +0 -0
  74. {jarvisplot-1.3.0 → jarvisplot-1.3.2}/jarvisplot/utils/cmaps.py +0 -0
  75. {jarvisplot-1.3.0 → jarvisplot-1.3.2}/setup.cfg +0 -0
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
- Name: jarvisplot
3
- Version: 1.3.0
4
- Summary: JarvisPLOT: YAML-driven plotting engine
2
+ Name: JarvisPLOT
3
+ Version: 1.3.2
4
+ Summary: Jarvis-PLOT: YAML-driven plotting engine
5
5
  Requires-Python: >=3.10
6
6
  Description-Content-Type: text/markdown
7
7
  Requires-Dist: loguru
@@ -18,19 +18,37 @@ Requires-Dist: scipy
18
18
  Requires-Dist: shapely
19
19
  Requires-Dist: deepmerge
20
20
 
21
- # JarvisPLOT
21
+ # Jarvis-PLOT
22
22
 
23
- JarvisPLOT is a lightweight, Python/Matplotlib-based plotting framework developed for **Jarvis-HEP**,
23
+ Jarvis-PLOT is a lightweight, Python/Matplotlib-based plotting framework developed for **Jarvis-HEP**,
24
24
  but it can also be used as a **standalone scientific plotting tool**.
25
25
 
26
26
  It provides a simple command-line interface (CLI) to generate publication-quality figures from YAML configuration files, with most layout and style decisions handled by predefined profiles and style cards.
27
27
 
28
28
  ---
29
29
 
30
- ## Installation
30
+ ## Installation
31
31
 
32
- ```bash
33
- pip install jarvisplot
32
+ ```bash
33
+ pip install Jarvis-PLOT
34
+ ```
35
+
36
+ The PyPI distribution name is now `Jarvis-PLOT`.
37
+ The Python import package and entrypoint remain unchanged:
38
+
39
+ ```python
40
+ import jarvisplot
41
+ ```
42
+
43
+ ```bash
44
+ jplot path/to/config.yaml
45
+ ```
46
+
47
+ If you have an older environment that still uses the historical package name, replace:
48
+
49
+ ```bash
50
+ pip uninstall jarvisplot
51
+ pip install Jarvis-PLOT
34
52
  ```
35
53
 
36
54
  ## Command-Line Usage
@@ -41,7 +59,7 @@ Display help information:
41
59
  jplot -h
42
60
  ```
43
61
 
44
- Run JarvisPLOT with one or more YAML configuration files:
62
+ Run Jarvis-PLOT with one or more YAML configuration files:
45
63
 
46
64
  ```bash
47
65
  jplot path/to/config.yaml
@@ -56,7 +74,7 @@ jplot path/to/config.yaml --rebuild-cache
56
74
  ### Project Workdir and Cache
57
75
 
58
76
  - You can set `project.workdir` in YAML.
59
- - If `output.dir` is omitted, JarvisPLOT now defaults to `<workdir>/plots/`.
77
+ - If `output.dir` is omitted, Jarvis-PLOT defaults to `<workdir>/plots/`.
60
78
  - Data cache is stored in `<workdir>/.cache/`.
61
79
  - Profiling pipelines are prebuilt once and reused from cache when source fingerprint and profile settings are unchanged.
62
80
  - Profiling uses a fast two-stage grid reduction (`pregrid` + render `bin`) for large datasets.
@@ -76,7 +94,7 @@ jplot ./bin/SUSYRun2_GEWMSSM.yaml
76
94
 
77
95
  - Figures are saved automatically to the output paths defined in the YAML configuration.
78
96
  - Common output formats include PNG and PDF (backend-dependent).
79
- - JarvisPLOT works in headless environments (SSH, batch jobs) without any GUI backend.
97
+ - Jarvis-PLOT works in headless environments (SSH, batch jobs) without any GUI backend.
80
98
 
81
99
  ---
82
100
 
@@ -103,6 +121,20 @@ jplot ./bin/SUSYRun2_GEWMSSM.yaml
103
121
  ### Documentation
104
122
  [https://pengxuan-zhu-phys.github.io/Jarvis-Docs/](https://pengxuan-zhu-phys.github.io/Jarvis-Docs/)
105
123
 
124
+ ### Repository Docs
125
+
126
+ Tracked project docs live in `docs/`.
127
+
128
+ - `docs/README.md` - repo doc index
129
+ - `docs/context/JARVIS_PLOT_CONTEXT.md` - primary Codex-facing boundary doc
130
+ - `docs/context/CODE_MAP_JARVIS_PLOT.md` - concrete code owner map
131
+ - `docs/context/JARVIS_PLOT_FRAMEWORK_LOGIC.md` - runtime execution contract
132
+ - `docs/roadmap/IMPLEMENTATION_ROADMAP.md` - active backlog and future work list
133
+ - `docs/dev/DEVELOPER_RULES.md` - current pipeline and cache rules
134
+ - `docs/dev/MEMORY_OPTIMIZATION_GUIDE.md` - narrow-table memory notes
135
+
136
+ Read the context docs and roadmap before changing parsing, transforms, rendering, or layout-related behavior.
137
+
106
138
  ---
107
139
 
108
140
  ## License
@@ -1,28 +1,42 @@
1
1
  README.md
2
2
  pyproject.toml
3
+ JarvisPLOT.egg-info/PKG-INFO
4
+ JarvisPLOT.egg-info/SOURCES.txt
5
+ JarvisPLOT.egg-info/dependency_links.txt
6
+ JarvisPLOT.egg-info/entry_points.txt
7
+ JarvisPLOT.egg-info/requires.txt
8
+ JarvisPLOT.egg-info/top_level.txt
3
9
  jarvisplot/__init__.py
4
10
  jarvisplot/cache_store.py
5
11
  jarvisplot/cli.py
6
12
  jarvisplot/client.py
7
13
  jarvisplot/config.py
8
14
  jarvisplot/core.py
15
+ jarvisplot/core_assets.py
16
+ jarvisplot/core_runtime.py
9
17
  jarvisplot/data_loader.py
18
+ jarvisplot/data_loader_hdf5.py
19
+ jarvisplot/data_loader_runtime.py
20
+ jarvisplot/data_loader_summary.py
10
21
  jarvisplot/inner_func.py
11
22
  jarvisplot/memtrace.py
12
- jarvisplot.egg-info/PKG-INFO
13
- jarvisplot.egg-info/SOURCES.txt
14
- jarvisplot.egg-info/dependency_links.txt
15
- jarvisplot.egg-info/entry_points.txt
16
- jarvisplot.egg-info/requires.txt
17
- jarvisplot.egg-info/top_level.txt
18
23
  jarvisplot/Figure/__init__.py
19
24
  jarvisplot/Figure/adapters.py
25
+ jarvisplot/Figure/adapters_rect.py
26
+ jarvisplot/Figure/adapters_ternary.py
27
+ jarvisplot/Figure/colorbar_runtime.py
28
+ jarvisplot/Figure/config_runtime.py
20
29
  jarvisplot/Figure/data_pipelines.py
21
30
  jarvisplot/Figure/figure.py
22
31
  jarvisplot/Figure/helper.py
32
+ jarvisplot/Figure/layer_runtime.py
33
+ jarvisplot/Figure/layout_runtime.py
23
34
  jarvisplot/Figure/load_data.py
24
35
  jarvisplot/Figure/method_registry.py
25
36
  jarvisplot/Figure/preprocessor.py
37
+ jarvisplot/Figure/preprocessor_runtime.py
38
+ jarvisplot/Figure/profile_runtime.py
39
+ jarvisplot/Figure/style_runtime.py
26
40
  jarvisplot/Figure/cards/std_axes_adapter_config.json
27
41
  jarvisplot/cards/args.json
28
42
  jarvisplot/cards/style_preference.json
@@ -47,4 +61,11 @@ jarvisplot/cards/icons/gambit.png
47
61
  jarvisplot/cards/icons/gambit_small.png
48
62
  jarvisplot/utils/__init__.py
49
63
  jarvisplot/utils/cmaps.py
50
- jarvisplot/utils/interpolator.py
64
+ jarvisplot/utils/expression.py
65
+ jarvisplot/utils/interpolator.py
66
+ jarvisplot/utils/pathing.py
67
+ tests/test_data_loader_contracts.py
68
+ tests/test_docs_status_labels.py
69
+ tests/test_figure_contracts.py
70
+ tests/test_pathing_contracts.py
71
+ tests/test_template_json.py
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
- Name: jarvisplot
3
- Version: 1.3.0
4
- Summary: JarvisPLOT: YAML-driven plotting engine
2
+ Name: JarvisPLOT
3
+ Version: 1.3.2
4
+ Summary: Jarvis-PLOT: YAML-driven plotting engine
5
5
  Requires-Python: >=3.10
6
6
  Description-Content-Type: text/markdown
7
7
  Requires-Dist: loguru
@@ -18,19 +18,37 @@ Requires-Dist: scipy
18
18
  Requires-Dist: shapely
19
19
  Requires-Dist: deepmerge
20
20
 
21
- # JarvisPLOT
21
+ # Jarvis-PLOT
22
22
 
23
- JarvisPLOT is a lightweight, Python/Matplotlib-based plotting framework developed for **Jarvis-HEP**,
23
+ Jarvis-PLOT is a lightweight, Python/Matplotlib-based plotting framework developed for **Jarvis-HEP**,
24
24
  but it can also be used as a **standalone scientific plotting tool**.
25
25
 
26
26
  It provides a simple command-line interface (CLI) to generate publication-quality figures from YAML configuration files, with most layout and style decisions handled by predefined profiles and style cards.
27
27
 
28
28
  ---
29
29
 
30
- ## Installation
30
+ ## Installation
31
31
 
32
- ```bash
33
- pip install jarvisplot
32
+ ```bash
33
+ pip install Jarvis-PLOT
34
+ ```
35
+
36
+ The PyPI distribution name is now `Jarvis-PLOT`.
37
+ The Python import package and entrypoint remain unchanged:
38
+
39
+ ```python
40
+ import jarvisplot
41
+ ```
42
+
43
+ ```bash
44
+ jplot path/to/config.yaml
45
+ ```
46
+
47
+ If you have an older environment that still uses the historical package name, replace:
48
+
49
+ ```bash
50
+ pip uninstall jarvisplot
51
+ pip install Jarvis-PLOT
34
52
  ```
35
53
 
36
54
  ## Command-Line Usage
@@ -41,7 +59,7 @@ Display help information:
41
59
  jplot -h
42
60
  ```
43
61
 
44
- Run JarvisPLOT with one or more YAML configuration files:
62
+ Run Jarvis-PLOT with one or more YAML configuration files:
45
63
 
46
64
  ```bash
47
65
  jplot path/to/config.yaml
@@ -56,7 +74,7 @@ jplot path/to/config.yaml --rebuild-cache
56
74
  ### Project Workdir and Cache
57
75
 
58
76
  - You can set `project.workdir` in YAML.
59
- - If `output.dir` is omitted, JarvisPLOT now defaults to `<workdir>/plots/`.
77
+ - If `output.dir` is omitted, Jarvis-PLOT defaults to `<workdir>/plots/`.
60
78
  - Data cache is stored in `<workdir>/.cache/`.
61
79
  - Profiling pipelines are prebuilt once and reused from cache when source fingerprint and profile settings are unchanged.
62
80
  - Profiling uses a fast two-stage grid reduction (`pregrid` + render `bin`) for large datasets.
@@ -76,7 +94,7 @@ jplot ./bin/SUSYRun2_GEWMSSM.yaml
76
94
 
77
95
  - Figures are saved automatically to the output paths defined in the YAML configuration.
78
96
  - Common output formats include PNG and PDF (backend-dependent).
79
- - JarvisPLOT works in headless environments (SSH, batch jobs) without any GUI backend.
97
+ - Jarvis-PLOT works in headless environments (SSH, batch jobs) without any GUI backend.
80
98
 
81
99
  ---
82
100
 
@@ -103,6 +121,20 @@ jplot ./bin/SUSYRun2_GEWMSSM.yaml
103
121
  ### Documentation
104
122
  [https://pengxuan-zhu-phys.github.io/Jarvis-Docs/](https://pengxuan-zhu-phys.github.io/Jarvis-Docs/)
105
123
 
124
+ ### Repository Docs
125
+
126
+ Tracked project docs live in `docs/`.
127
+
128
+ - `docs/README.md` - repo doc index
129
+ - `docs/context/JARVIS_PLOT_CONTEXT.md` - primary Codex-facing boundary doc
130
+ - `docs/context/CODE_MAP_JARVIS_PLOT.md` - concrete code owner map
131
+ - `docs/context/JARVIS_PLOT_FRAMEWORK_LOGIC.md` - runtime execution contract
132
+ - `docs/roadmap/IMPLEMENTATION_ROADMAP.md` - active backlog and future work list
133
+ - `docs/dev/DEVELOPER_RULES.md` - current pipeline and cache rules
134
+ - `docs/dev/MEMORY_OPTIMIZATION_GUIDE.md` - narrow-table memory notes
135
+
136
+ Read the context docs and roadmap before changing parsing, transforms, rendering, or layout-related behavior.
137
+
106
138
  ---
107
139
 
108
140
  ## License
@@ -1,16 +1,34 @@
1
- # JarvisPLOT
1
+ # Jarvis-PLOT
2
2
 
3
- JarvisPLOT is a lightweight, Python/Matplotlib-based plotting framework developed for **Jarvis-HEP**,
3
+ Jarvis-PLOT is a lightweight, Python/Matplotlib-based plotting framework developed for **Jarvis-HEP**,
4
4
  but it can also be used as a **standalone scientific plotting tool**.
5
5
 
6
6
  It provides a simple command-line interface (CLI) to generate publication-quality figures from YAML configuration files, with most layout and style decisions handled by predefined profiles and style cards.
7
7
 
8
8
  ---
9
9
 
10
- ## Installation
10
+ ## Installation
11
11
 
12
- ```bash
13
- pip install jarvisplot
12
+ ```bash
13
+ pip install Jarvis-PLOT
14
+ ```
15
+
16
+ The PyPI distribution name is now `Jarvis-PLOT`.
17
+ The Python import package and entrypoint remain unchanged:
18
+
19
+ ```python
20
+ import jarvisplot
21
+ ```
22
+
23
+ ```bash
24
+ jplot path/to/config.yaml
25
+ ```
26
+
27
+ If you have an older environment that still uses the historical package name, replace:
28
+
29
+ ```bash
30
+ pip uninstall jarvisplot
31
+ pip install Jarvis-PLOT
14
32
  ```
15
33
 
16
34
  ## Command-Line Usage
@@ -21,7 +39,7 @@ Display help information:
21
39
  jplot -h
22
40
  ```
23
41
 
24
- Run JarvisPLOT with one or more YAML configuration files:
42
+ Run Jarvis-PLOT with one or more YAML configuration files:
25
43
 
26
44
  ```bash
27
45
  jplot path/to/config.yaml
@@ -36,7 +54,7 @@ jplot path/to/config.yaml --rebuild-cache
36
54
  ### Project Workdir and Cache
37
55
 
38
56
  - You can set `project.workdir` in YAML.
39
- - If `output.dir` is omitted, JarvisPLOT now defaults to `<workdir>/plots/`.
57
+ - If `output.dir` is omitted, Jarvis-PLOT defaults to `<workdir>/plots/`.
40
58
  - Data cache is stored in `<workdir>/.cache/`.
41
59
  - Profiling pipelines are prebuilt once and reused from cache when source fingerprint and profile settings are unchanged.
42
60
  - Profiling uses a fast two-stage grid reduction (`pregrid` + render `bin`) for large datasets.
@@ -56,7 +74,7 @@ jplot ./bin/SUSYRun2_GEWMSSM.yaml
56
74
 
57
75
  - Figures are saved automatically to the output paths defined in the YAML configuration.
58
76
  - Common output formats include PNG and PDF (backend-dependent).
59
- - JarvisPLOT works in headless environments (SSH, batch jobs) without any GUI backend.
77
+ - Jarvis-PLOT works in headless environments (SSH, batch jobs) without any GUI backend.
60
78
 
61
79
  ---
62
80
 
@@ -83,6 +101,20 @@ jplot ./bin/SUSYRun2_GEWMSSM.yaml
83
101
  ### Documentation
84
102
  [https://pengxuan-zhu-phys.github.io/Jarvis-Docs/](https://pengxuan-zhu-phys.github.io/Jarvis-Docs/)
85
103
 
104
+ ### Repository Docs
105
+
106
+ Tracked project docs live in `docs/`.
107
+
108
+ - `docs/README.md` - repo doc index
109
+ - `docs/context/JARVIS_PLOT_CONTEXT.md` - primary Codex-facing boundary doc
110
+ - `docs/context/CODE_MAP_JARVIS_PLOT.md` - concrete code owner map
111
+ - `docs/context/JARVIS_PLOT_FRAMEWORK_LOGIC.md` - runtime execution contract
112
+ - `docs/roadmap/IMPLEMENTATION_ROADMAP.md` - active backlog and future work list
113
+ - `docs/dev/DEVELOPER_RULES.md` - current pipeline and cache rules
114
+ - `docs/dev/MEMORY_OPTIMIZATION_GUIDE.md` - narrow-table memory notes
115
+
116
+ Read the context docs and roadmap before changing parsing, transforms, rendering, or layout-related behavior.
117
+
86
118
  ---
87
119
 
88
120
  ## License
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env python3
2
+
3
+ from .adapters_rect import StdAxesAdapter
4
+ from .adapters_ternary import TernaryAxesAdapter
5
+
6
+ __all__ = ["StdAxesAdapter", "TernaryAxesAdapter"]
@@ -13,6 +13,7 @@ from .helper import _auto_clip, _mask_by_extend, voronoi_finite_polygons_2d, _cl
13
13
 
14
14
 
15
15
  # —— Basic Adapter: Forward to the underlying Axes, merge default parameters, perform automatic clipping ——
16
+
16
17
  class StdAxesAdapter:
17
18
  def __init__(self, ax: Axes, defaults: Optional[Dict[str, Dict[str, Any]]] = None,
18
19
  clip_path=None):
@@ -963,75 +964,3 @@ class StdAxesAdapter:
963
964
  return [palette[i % len(palette)] for i in range(n)]
964
965
 
965
966
  # —— Ternary 适配器:在 Std 基础上增加 (a,b,c)->(x,y) 投影 ——
966
- class TernaryAxesAdapter(StdAxesAdapter):
967
- def __init__(self, ax: Axes, defaults: Optional[Dict[str, Any]] = None,
968
- clip_path=None):
969
- # Allow a flat defaults dict like {"facecolor": "..."} and keep it internal.
970
- d = dict(defaults) if isinstance(defaults, dict) else {}
971
- facecolor = d.pop("facecolor", None)
972
-
973
- super().__init__(ax, defaults=d or None, clip_path=clip_path)
974
-
975
- if facecolor is not None:
976
- self.set_facecolor(facecolor)
977
-
978
- self.status = "init"
979
-
980
- def set_facecolor(self, color, zorder=-100):
981
- self.ax.fill(
982
- [0.0, 1.0, 0.5],
983
- [0.0, 0.0, 1.0],
984
- facecolor=color,
985
- edgecolor="none",
986
- zorder=zorder
987
- )
988
-
989
- @staticmethod
990
- def _lbr_to_xy(a, b, c):
991
- s = (a + b + c)
992
- s = np.where(s == 0.0, 1.0, s) # 避免除零
993
- aa, bb, cc = a/s, b/s, c/s
994
- x = bb + 0.5 * cc
995
- y = cc
996
- return x, y
997
-
998
- def scatter(self, **kwargs):
999
- if {"left", "right", "bottom"}.issubset(kwargs.keys()):
1000
- x, y = self._lbr_to_xy(kwargs.pop('left'), kwargs.pop('right'), kwargs.pop('bottom'))
1001
- kwargs['x'] = x
1002
- kwargs['y'] = y
1003
- return super().scatter(**kwargs)
1004
-
1005
- def grid_profile(self, **kwargs):
1006
- if {"left", "right", "bottom"}.issubset(kwargs.keys()):
1007
- x, y = self._lbr_to_xy(kwargs.pop('left'), kwargs.pop('right'), kwargs.pop('bottom'))
1008
- kwargs['x'] = x
1009
- kwargs['y'] = y
1010
- return super().grid_profile(**kwargs)
1011
-
1012
-
1013
- def plot(self, **kwargs):
1014
- if {"left", "right", "bottom"}.issubset(kwargs.keys()):
1015
- x, y = self._lbr_to_xy(kwargs.pop('left'), kwargs.pop('right'), kwargs.pop('bottom'))
1016
- kwargs['x'] = x
1017
- kwargs['y'] = y
1018
- return super().plot(**kwargs)
1019
-
1020
-
1021
- def tricontour(self, **kwargs):
1022
- if {"left", "right", "bottom"}.issubset(kwargs.keys()):
1023
- x, y = self._lbr_to_xy(kwargs.pop('left'), kwargs.pop('right'), kwargs.pop('bottom'))
1024
- kwargs['x'] = x
1025
- kwargs['y'] = y
1026
- return super().tricontour( **kwargs)
1027
-
1028
-
1029
- def tricontourf(self, **kwargs):
1030
- if {"left", "right", "bottom"}.issubset(kwargs.keys()):
1031
- x, y = self._lbr_to_xy(kwargs.pop('left'), kwargs.pop('right'), kwargs.pop('bottom'))
1032
- kwargs['x'] = x
1033
- kwargs['y'] = y
1034
-
1035
- return super().tricontourf(**kwargs)
1036
- # else:
1037
- # raise ValueError("scatter() needs either (a,b,c) or (x,y) inputs")
@@ -0,0 +1,89 @@
1
+ #!/usr/bin/env python3
2
+
3
+ from __future__ import annotations
4
+ from typing import Any, Dict, Optional
5
+ import numpy as np
6
+ import os
7
+ import json
8
+
9
+ from matplotlib.axes import Axes
10
+ from matplotlib.collections import PolyCollection
11
+ #
12
+ from .helper import _auto_clip, _mask_by_extend, voronoi_finite_polygons_2d, _clip_poly_to_rect
13
+ from .adapters_rect import StdAxesAdapter
14
+
15
+
16
+ # —— Basic Adapter: Forward to the underlying Axes, merge default parameters, perform automatic clipping ——
17
+
18
+ class TernaryAxesAdapter(StdAxesAdapter):
19
+ def __init__(self, ax: Axes, defaults: Optional[Dict[str, Any]] = None,
20
+ clip_path=None):
21
+ # Allow a flat defaults dict like {"facecolor": "..."} and keep it internal.
22
+ d = dict(defaults) if isinstance(defaults, dict) else {}
23
+ facecolor = d.pop("facecolor", None)
24
+
25
+ super().__init__(ax, defaults=d or None, clip_path=clip_path)
26
+
27
+ if facecolor is not None:
28
+ self.set_facecolor(facecolor)
29
+
30
+ self.status = "init"
31
+
32
+ def set_facecolor(self, color, zorder=-100):
33
+ self.ax.fill(
34
+ [0.0, 1.0, 0.5],
35
+ [0.0, 0.0, 1.0],
36
+ facecolor=color,
37
+ edgecolor="none",
38
+ zorder=zorder
39
+ )
40
+
41
+ @staticmethod
42
+ def _lbr_to_xy(a, b, c):
43
+ s = (a + b + c)
44
+ s = np.where(s == 0.0, 1.0, s) # 避免除零
45
+ aa, bb, cc = a/s, b/s, c/s
46
+ x = bb + 0.5 * cc
47
+ y = cc
48
+ return x, y
49
+
50
+ def scatter(self, **kwargs):
51
+ if {"left", "right", "bottom"}.issubset(kwargs.keys()):
52
+ x, y = self._lbr_to_xy(kwargs.pop('left'), kwargs.pop('right'), kwargs.pop('bottom'))
53
+ kwargs['x'] = x
54
+ kwargs['y'] = y
55
+ return super().scatter(**kwargs)
56
+
57
+ def grid_profile(self, **kwargs):
58
+ if {"left", "right", "bottom"}.issubset(kwargs.keys()):
59
+ x, y = self._lbr_to_xy(kwargs.pop('left'), kwargs.pop('right'), kwargs.pop('bottom'))
60
+ kwargs['x'] = x
61
+ kwargs['y'] = y
62
+ return super().grid_profile(**kwargs)
63
+
64
+
65
+ def plot(self, **kwargs):
66
+ if {"left", "right", "bottom"}.issubset(kwargs.keys()):
67
+ x, y = self._lbr_to_xy(kwargs.pop('left'), kwargs.pop('right'), kwargs.pop('bottom'))
68
+ kwargs['x'] = x
69
+ kwargs['y'] = y
70
+ return super().plot(**kwargs)
71
+
72
+
73
+ def tricontour(self, **kwargs):
74
+ if {"left", "right", "bottom"}.issubset(kwargs.keys()):
75
+ x, y = self._lbr_to_xy(kwargs.pop('left'), kwargs.pop('right'), kwargs.pop('bottom'))
76
+ kwargs['x'] = x
77
+ kwargs['y'] = y
78
+ return super().tricontour( **kwargs)
79
+
80
+
81
+ def tricontourf(self, **kwargs):
82
+ if {"left", "right", "bottom"}.issubset(kwargs.keys()):
83
+ x, y = self._lbr_to_xy(kwargs.pop('left'), kwargs.pop('right'), kwargs.pop('bottom'))
84
+ kwargs['x'] = x
85
+ kwargs['y'] = y
86
+
87
+ return super().tricontourf(**kwargs)
88
+ # else:
89
+ # raise ValueError("scatter() needs either (a,b,c) or (x,y) inputs")