forgegraph 0.6.0__tar.gz → 0.6.1__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 (333) hide show
  1. {forgegraph-0.6.0 → forgegraph-0.6.1}/CHANGELOG.md +11 -0
  2. {forgegraph-0.6.0 → forgegraph-0.6.1}/CONTRIBUTING.md +1 -1
  3. {forgegraph-0.6.0 → forgegraph-0.6.1}/PKG-INFO +2 -1
  4. {forgegraph-0.6.0 → forgegraph-0.6.1}/README.md +1 -0
  5. forgegraph-0.6.1/docs/examples/acme_polarization.yaml +24 -0
  6. forgegraph-0.6.1/docs/examples/assay_summary.yaml +33 -0
  7. forgegraph-0.6.1/docs/examples/cells.layout.yaml +26 -0
  8. forgegraph-0.6.1/docs/examples/co2.yaml +28 -0
  9. forgegraph-0.6.1/docs/examples/dose_response.yaml +33 -0
  10. forgegraph-0.6.1/docs/examples/durability.yaml +26 -0
  11. forgegraph-0.6.1/docs/examples/lab_polarization.yaml +24 -0
  12. forgegraph-0.6.1/docs/examples/packs/lab/formats/poster.yaml +11 -0
  13. forgegraph-0.6.1/docs/examples/packs/lab/pack.yaml +5 -0
  14. forgegraph-0.6.1/docs/examples/packs/lab/themes/lab_theme.yaml +13 -0
  15. forgegraph-0.6.1/docs/examples/penguins.yaml +29 -0
  16. forgegraph-0.6.1/docs/examples/polarization.yaml +24 -0
  17. forgegraph-0.6.1/docs/examples/savings.yaml +58 -0
  18. forgegraph-0.6.1/docs/examples/tips_side_by_side.yaml +46 -0
  19. forgegraph-0.6.1/docs/examples/tips_stacked.yaml +42 -0
  20. {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/packs/forgegraph_default/pack.md +1 -1
  21. forgegraph-0.6.1/docs/site/gallery.md +123 -0
  22. forgegraph-0.6.1/docs/site/guides/configs.md +38 -0
  23. forgegraph-0.6.1/docs/site/guides/graphs.md +74 -0
  24. forgegraph-0.6.1/docs/site/guides/layers.md +57 -0
  25. forgegraph-0.6.1/docs/site/guides/layouts.md +66 -0
  26. forgegraph-0.6.1/docs/site/guides/provenance.md +41 -0
  27. forgegraph-0.6.1/docs/site/guides/schedules.md +42 -0
  28. forgegraph-0.6.1/docs/site/guides/series.md +92 -0
  29. forgegraph-0.6.1/docs/site/guides/themes-formats-packs.md +70 -0
  30. forgegraph-0.6.1/docs/site/help/troubleshooting.md +133 -0
  31. forgegraph-0.6.1/docs/site/release-notes.md +3 -0
  32. {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/specifications/layer_reference.md +1 -1
  33. {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/specifications/pack.md +1 -1
  34. {forgegraph-0.6.0 → forgegraph-0.6.1}/mkdocs.yml +21 -1
  35. {forgegraph-0.6.0 → forgegraph-0.6.1}/pyproject.toml +1 -1
  36. {forgegraph-0.6.0 → forgegraph-0.6.1}/scripts/docs_site.py +113 -1
  37. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/drawing/layers.py +14 -6
  38. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/packs/forgegraph_default/pack.yaml +1 -1
  39. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/specifications/layer_reference.yaml +1 -1
  40. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/specifications/pack.yaml +1 -1
  41. forgegraph-0.6.1/tests/test_docs_site.py +27 -0
  42. {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_layers.py +48 -0
  43. {forgegraph-0.6.0 → forgegraph-0.6.1}/uv.lock +1 -1
  44. {forgegraph-0.6.0 → forgegraph-0.6.1}/.gitignore +0 -0
  45. {forgegraph-0.6.0 → forgegraph-0.6.1}/.pre-commit-config.yaml +0 -0
  46. {forgegraph-0.6.0 → forgegraph-0.6.1}/CITATION.cff +0 -0
  47. {forgegraph-0.6.0 → forgegraph-0.6.1}/LICENSE +0 -0
  48. {forgegraph-0.6.0 → forgegraph-0.6.1}/SECURITY.md +0 -0
  49. {forgegraph-0.6.0 → forgegraph-0.6.1}/TRADEMARKS.md +0 -0
  50. {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/design/architecture.md +0 -0
  51. {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/design/initial-specification.md +0 -0
  52. {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/packs/acme/formats/slide.md +0 -0
  53. {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/packs/acme/graphspecs/polarization-curve.md +0 -0
  54. {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/packs/acme/layouts/dashboard.md +0 -0
  55. {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/packs/acme/pack.md +0 -0
  56. {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/packs/acme/schedules/workday.md +0 -0
  57. {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/packs/acme/themes/acme.md +0 -0
  58. {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/packs/forgegraph_default/catalogs/formats/compact_format.md +0 -0
  59. {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/packs/forgegraph_default/catalogs/formats/wide_format.md +0 -0
  60. {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/packs/forgegraph_default/catalogs/themes/light_theme.md +0 -0
  61. {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/packs/forgegraph_default/formats/compact_format.md +0 -0
  62. {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/packs/forgegraph_default/formats/wide_format.md +0 -0
  63. {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/packs/forgegraph_default/graphspecs/graphspec_example.md +0 -0
  64. {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/packs/forgegraph_default/layouts/layout.md +0 -0
  65. {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/packs/forgegraph_default/schedules/schedule.md +0 -0
  66. {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/packs/forgegraph_default/themes/light_theme.md +0 -0
  67. {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/site/get-started/installation.md +0 -0
  68. {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/site/get-started/quickstart.md +0 -0
  69. {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/site/get-started/skill.md +0 -0
  70. {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/site/index.md +0 -0
  71. {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/site/reference/python-api.md +0 -0
  72. {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/site/stylesheets/extra.css +0 -0
  73. {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/specifications/catalogs/graphtype_xy.md +0 -0
  74. {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/specifications/catalogs/layer_error_bar.md +0 -0
  75. {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/specifications/catalogs/layer_note.md +0 -0
  76. {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/specifications/catalogs/layer_reference.md +0 -0
  77. {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/specifications/config.md +0 -0
  78. {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/specifications/format.md +0 -0
  79. {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/specifications/graphspec_example.md +0 -0
  80. {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/specifications/graphtype_xy.md +0 -0
  81. {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/specifications/layer_error_bar.md +0 -0
  82. {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/specifications/layer_note.md +0 -0
  83. {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/specifications/layout_example.md +0 -0
  84. {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/specifications/provenance.md +0 -0
  85. {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/specifications/schedule.md +0 -0
  86. {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/specifications/styles.md +0 -0
  87. {forgegraph-0.6.0 → forgegraph-0.6.1}/docs/specifications/theme.md +0 -0
  88. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/README.md +0 -0
  89. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/dashboard/forgegraph.toml +0 -0
  90. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/dashboard/lab_throughput.layout.md +0 -0
  91. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/dashboard/lab_throughput.layout.yaml +0 -0
  92. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/dashboard/lost_runs.parquet +0 -0
  93. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/dashboard/lost_runs.yaml +0 -0
  94. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/dashboard/ops/formats/dashboard.md +0 -0
  95. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/dashboard/ops/formats/dashboard.yaml +0 -0
  96. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/dashboard/ops/pack.yaml +0 -0
  97. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/dashboard/prep_lab_dashboard.py +0 -0
  98. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/dashboard/run_time.parquet +0 -0
  99. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/dashboard/run_time.yaml +0 -0
  100. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/dashboard/runs_gc_ms_01.yaml +0 -0
  101. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/dashboard/runs_hplc_01.yaml +0 -0
  102. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/dashboard/runs_hplc_02.yaml +0 -0
  103. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/dashboard/runs_icp_oes_01.yaml +0 -0
  104. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/dashboard/samples_weekly.yaml +0 -0
  105. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/dashboard/throughput_weekly.yaml +0 -0
  106. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/dashboard/weekly_gc_ms_01.parquet +0 -0
  107. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/dashboard/weekly_hplc_01.parquet +0 -0
  108. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/dashboard/weekly_hplc_02.parquet +0 -0
  109. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/dashboard/weekly_icp_oes_01.parquet +0 -0
  110. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/dashboard/weekly_runs.parquet +0 -0
  111. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/dashboard/weekly_samples.parquet +0 -0
  112. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/paper/cell_durability.parquet +0 -0
  113. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/paper/cell_performance.layout.md +0 -0
  114. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/paper/cell_performance.layout.yaml +0 -0
  115. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/paper/cell_polarization.parquet +0 -0
  116. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/paper/forgegraph.toml +0 -0
  117. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/paper/hfr_time.yaml +0 -0
  118. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/paper/journal/formats/journal-double.md +0 -0
  119. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/paper/journal/formats/journal-double.yaml +0 -0
  120. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/paper/journal/pack.yaml +0 -0
  121. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/paper/polarization.yaml +0 -0
  122. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/paper/prep_cells.py +0 -0
  123. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/layouts/paper/voltage_time.yaml +0 -0
  124. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/packs/acme/formats/slide.yaml +0 -0
  125. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/packs/acme/graphspecs/polarization-curve.yaml +0 -0
  126. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/packs/acme/layouts/dashboard.yaml +0 -0
  127. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/packs/acme/pack.yaml +0 -0
  128. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/packs/acme/references/house.md +0 -0
  129. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/packs/acme/schedules/workday.yaml +0 -0
  130. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/packs/acme/themes/acme.yaml +0 -0
  131. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/sample-data/README.md +0 -0
  132. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/sample-data/air_passengers.csv +0 -0
  133. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/sample-data/air_passengers_by_month.csv +0 -0
  134. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/sample-data/anscombe.csv +0 -0
  135. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/sample-data/assay_summary.csv +0 -0
  136. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/sample-data/cell_durability.csv +0 -0
  137. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/sample-data/cell_polarization.csv +0 -0
  138. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/sample-data/co2_monthly.csv +0 -0
  139. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/sample-data/diamonds.csv +0 -0
  140. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/sample-data/dose_response.csv +0 -0
  141. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/sample-data/economics.csv +0 -0
  142. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/sample-data/enzyme_kinetics.csv +0 -0
  143. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/sample-data/fmri.csv +0 -0
  144. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/sample-data/gapminder.csv +0 -0
  145. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/sample-data/geyser.csv +0 -0
  146. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/sample-data/growth.csv +0 -0
  147. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/sample-data/iris.csv +0 -0
  148. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/sample-data/lab_export.xlsx +0 -0
  149. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/sample-data/lab_runs.xlsx +0 -0
  150. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/sample-data/penguins.csv +0 -0
  151. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/sample-data/seaice.csv +0 -0
  152. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/sample-data/sensor_log_eu.csv +0 -0
  153. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/sample-data/stocks.csv +0 -0
  154. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/sample-data/tips.csv +0 -0
  155. {forgegraph-0.6.0 → forgegraph-0.6.1}/examples/sample-data/weather.xlsx +0 -0
  156. {forgegraph-0.6.0 → forgegraph-0.6.1}/scripts/build_example_data.py +0 -0
  157. {forgegraph-0.6.0 → forgegraph-0.6.1}/scripts/build_recreations.py +0 -0
  158. {forgegraph-0.6.0 → forgegraph-0.6.1}/scripts/build_sample_data.py +0 -0
  159. {forgegraph-0.6.0 → forgegraph-0.6.1}/scripts/check_denylist.py +0 -0
  160. {forgegraph-0.6.0 → forgegraph-0.6.1}/scripts/forgemark.py +0 -0
  161. {forgegraph-0.6.0 → forgegraph-0.6.1}/scripts/mirror_specs.py +0 -0
  162. {forgegraph-0.6.0 → forgegraph-0.6.1}/scripts/report_skill_evals.py +0 -0
  163. {forgegraph-0.6.0 → forgegraph-0.6.1}/scripts/run_skill_evals.py +0 -0
  164. {forgegraph-0.6.0 → forgegraph-0.6.1}/scripts/smoke_installed.py +0 -0
  165. {forgegraph-0.6.0 → forgegraph-0.6.1}/scripts/visual_changelog.py +0 -0
  166. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/__init__.py +0 -0
  167. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/__main__.py +0 -0
  168. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/canvas.py +0 -0
  169. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/catalog_build/__init__.py +0 -0
  170. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/catalog_build/build.py +0 -0
  171. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/catalog_build/cards.py +0 -0
  172. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/catalog_build/examples.py +0 -0
  173. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/catalog_build/files.py +0 -0
  174. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/catalog_build/page.py +0 -0
  175. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/cli/__init__.py +0 -0
  176. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/cli/catalog.py +0 -0
  177. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/cli/graphs.py +0 -0
  178. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/cli/jobs.py +0 -0
  179. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/cli/schema.py +0 -0
  180. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/cli/skill.py +0 -0
  181. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/data.py +0 -0
  182. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/drawing/__init__.py +0 -0
  183. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/drawing/axes.py +0 -0
  184. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/drawing/colorbar.py +0 -0
  185. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/drawing/dates.py +0 -0
  186. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/drawing/errors.py +0 -0
  187. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/drawing/export.py +0 -0
  188. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/drawing/figure.py +0 -0
  189. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/drawing/key.py +0 -0
  190. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/drawing/labels.py +0 -0
  191. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/drawing/layout.py +0 -0
  192. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/drawing/limits.py +0 -0
  193. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/drawing/lint.py +0 -0
  194. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/drawing/marks.py +0 -0
  195. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/drawing/markup.py +0 -0
  196. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/drawing/page.py +0 -0
  197. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/drawing/readout.py +0 -0
  198. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/drawing/spacing.py +0 -0
  199. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/drawing/style.py +0 -0
  200. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/drawing/text.py +0 -0
  201. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/drawing/ticks.py +0 -0
  202. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/drawing/xy.py +0 -0
  203. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/drawn.py +0 -0
  204. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/fonts/IBMPlexSerif-Bold.ttf +0 -0
  205. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/fonts/IBMPlexSerif-Light.ttf +0 -0
  206. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/fonts/IBMPlexSerif-Medium.ttf +0 -0
  207. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/fonts/IBMPlexSerif-Regular.ttf +0 -0
  208. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/fonts/IBMPlexSerif-SemiBold.ttf +0 -0
  209. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/fonts/OFL-IBMPlexSerif.txt +0 -0
  210. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/fonts/OFL-Roboto.txt +0 -0
  211. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/fonts/OFL-SourceSans3.md +0 -0
  212. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/fonts/Roboto-Bold.ttf +0 -0
  213. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/fonts/Roboto-Italic.ttf +0 -0
  214. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/fonts/Roboto-Light.ttf +0 -0
  215. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/fonts/Roboto-Medium.ttf +0 -0
  216. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/fonts/Roboto-Regular.ttf +0 -0
  217. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/fonts/Roboto-SemiBold.ttf +0 -0
  218. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/fonts/SourceSans3-Bold.ttf +0 -0
  219. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/fonts/SourceSans3-It.ttf +0 -0
  220. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/fonts/SourceSans3-Light.ttf +0 -0
  221. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/fonts/SourceSans3-Medium.ttf +0 -0
  222. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/fonts/SourceSans3-Regular.ttf +0 -0
  223. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/fonts/SourceSans3-Semibold.ttf +0 -0
  224. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/fonts/__init__.py +0 -0
  225. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/forgemark.py +0 -0
  226. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/graph.py +0 -0
  227. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/jobs/__init__.py +0 -0
  228. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/jobs/run.py +0 -0
  229. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/jobs/status.py +0 -0
  230. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/layouts/__init__.py +0 -0
  231. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/layouts/separators.py +0 -0
  232. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/packs/__init__.py +0 -0
  233. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/packs/forgegraph_default/catalogs/formats/compact_format.yaml +0 -0
  234. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/packs/forgegraph_default/catalogs/formats/wide_format.yaml +0 -0
  235. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/packs/forgegraph_default/catalogs/themes/light_theme.yaml +0 -0
  236. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/packs/forgegraph_default/formats/compact_format.yaml +0 -0
  237. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/packs/forgegraph_default/formats/wide_format.yaml +0 -0
  238. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/packs/forgegraph_default/graphspecs/dated.parquet +0 -0
  239. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/packs/forgegraph_default/graphspecs/fanned.parquet +0 -0
  240. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/packs/forgegraph_default/graphspecs/graphspec_example.yaml +0 -0
  241. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/packs/forgegraph_default/graphspecs/polarization.parquet +0 -0
  242. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/packs/forgegraph_default/graphspecs/reinforced.parquet +0 -0
  243. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/packs/forgegraph_default/layouts/layout.yaml +0 -0
  244. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/packs/forgegraph_default/schedules/schedule.yaml +0 -0
  245. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/packs/forgegraph_default/themes/light_theme.yaml +0 -0
  246. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/skill/__init__.py +0 -0
  247. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/skill/forgegraph/SKILL.md +0 -0
  248. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/skill/forgegraph/examples/bars.yaml +0 -0
  249. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/skill/forgegraph/examples/figure.layout.yaml +0 -0
  250. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/skill/forgegraph/examples/figure.schedule.yaml +0 -0
  251. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/skill/forgegraph/examples/layers.yaml +0 -0
  252. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/skill/forgegraph/examples/xy.parquet +0 -0
  253. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/skill/forgegraph/examples/xy.yaml +0 -0
  254. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/skill/forgegraph/references/requests.md +0 -0
  255. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/skill/forgegraph/references/themes_formats_configs.md +0 -0
  256. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/spec/__init__.py +0 -0
  257. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/spec/access.py +0 -0
  258. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/spec/common.py +0 -0
  259. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/spec/explain.py +0 -0
  260. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/spec/layers.py +0 -0
  261. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/spec/layout.py +0 -0
  262. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/spec/loaded.py +0 -0
  263. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/spec/parameters.py +0 -0
  264. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/spec/provenance.py +0 -0
  265. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/spec/registry.py +0 -0
  266. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/spec/resolve.py +0 -0
  267. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/spec/schedule.py +0 -0
  268. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/spec/series.py +0 -0
  269. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/spec/tags.py +0 -0
  270. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/spec/validate.py +0 -0
  271. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/specifications/catalogs/graphtype_xy.yaml +0 -0
  272. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/specifications/catalogs/layer_error_bar.yaml +0 -0
  273. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/specifications/catalogs/layer_note.yaml +0 -0
  274. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/specifications/catalogs/layer_reference.yaml +0 -0
  275. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/specifications/config.toml +0 -0
  276. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/specifications/format.yaml +0 -0
  277. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/specifications/graphspec_example.yaml +0 -0
  278. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/specifications/graphtype_xy.yaml +0 -0
  279. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/specifications/layer_error_bar.yaml +0 -0
  280. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/specifications/layer_note.yaml +0 -0
  281. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/specifications/layout_example.yaml +0 -0
  282. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/specifications/provenance.yaml +0 -0
  283. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/specifications/schedule.yaml +0 -0
  284. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/specifications/styles.yaml +0 -0
  285. {forgegraph-0.6.0 → forgegraph-0.6.1}/src/forgegraph/specifications/theme.yaml +0 -0
  286. {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/baselines/crowded_runs.png +0 -0
  287. {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/baselines/flow_sweep_wide.png +0 -0
  288. {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/baselines/fuel_by_size.png +0 -0
  289. {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/baselines/layout_anode_layers.png +0 -0
  290. {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/baselines/layout_screening_and_rate.png +0 -0
  291. {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/baselines/polarization.png +0 -0
  292. {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/baselines/polarization_narrow.png +0 -0
  293. {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/baselines/precipitation_loglog.png +0 -0
  294. {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/baselines/replicates.png +0 -0
  295. {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/baselines/screening_scatter.png +0 -0
  296. {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/baselines/separator_colorbar.png +0 -0
  297. {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/conftest.py +0 -0
  298. {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/fixtures/catalog_comments.html +0 -0
  299. {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/pack_helpers.py +0 -0
  300. {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/recreations.py +0 -0
  301. {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/render_helpers.py +0 -0
  302. {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/spec_mirror.py +0 -0
  303. {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_axes.py +0 -0
  304. {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_blank.py +0 -0
  305. {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_catalog.py +0 -0
  306. {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_catalog_files.py +0 -0
  307. {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_catalog_inputs.py +0 -0
  308. {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_catalog_page.py +0 -0
  309. {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_cli.py +0 -0
  310. {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_dates.py +0 -0
  311. {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_denylist.py +0 -0
  312. {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_jobs.py +0 -0
  313. {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_key_position.py +0 -0
  314. {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_labels.py +0 -0
  315. {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_layout.py +0 -0
  316. {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_lint.py +0 -0
  317. {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_marks.py +0 -0
  318. {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_markup.py +0 -0
  319. {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_packaging.py +0 -0
  320. {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_packs.py +0 -0
  321. {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_perturbation.py +0 -0
  322. {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_readout.py +0 -0
  323. {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_regression.py +0 -0
  324. {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_render.py +0 -0
  325. {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_schedule.py +0 -0
  326. {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_series.py +0 -0
  327. {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_smoke.py +0 -0
  328. {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_spec_comments.py +0 -0
  329. {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_spec_mirrors.py +0 -0
  330. {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_specs.py +0 -0
  331. {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_styles.py +0 -0
  332. {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_tags.py +0 -0
  333. {forgegraph-0.6.0 → forgegraph-0.6.1}/tests/test_text.py +0 -0
@@ -2,6 +2,17 @@
2
2
 
3
3
  ForgeGraph follows [semantic versioning](https://semver.org). Before 1.0, a minor version may change how graphs look or how specs are written.
4
4
 
5
+ ## 0.6.1 (2026-10-31)
6
+
7
+ ### Changes
8
+
9
+ - **A reference line for each look.** With `per_series`, a reference layer now draws a line for each look its series are drawn in: each color, marker shape, marker fill and line style. Before, groups that differed only in marker shape, fill or line style shared one line. Lines that `split` draws, such as replicates, still share one.
10
+ - **Guides on the documentation site.** The site now has a guide to each part of ForgeGraph, a gallery of worked examples, help with every lint issue and common error, and the release notes.
11
+
12
+ ### Bug Fixes
13
+
14
+ - `per_series` with series colored on a scale is now an error. Before, it drew a single line over all the rows in the palette's first color.
15
+
5
16
  ## 0.6.0 (2026-10-30)
6
17
 
7
18
  ### New Features
@@ -33,7 +33,7 @@ uv run python scripts/build_recreations.py --baselines
33
33
 
34
34
  ## The documentation site
35
35
 
36
- The site is built with MkDocs from docs/site. Its Reference pages are generated as it's built: the commands from the CLI, the specifications and the built-in pack from their files, and the Python API from the docstrings (scripts/docs_site.py). To build it and read it while you work:
36
+ The site is built with MkDocs from docs/site. Its Reference pages are generated as it's built: the commands from the CLI, the specifications and the built-in pack from their files, and the Python API from the docstrings (scripts/docs_site.py). The guides' and gallery's graphs are drawn as it's built, from the GraphSpecs, layouts and pack in docs/examples and the layouts in examples/layouts, with data from examples/sample-data, so an example that can't be drawn standard and lint-clean fails the build. To build it and read it while you work:
37
37
 
38
38
  ```bash
39
39
  uv run --group docs mkdocs serve
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: forgegraph
3
- Version: 0.6.0
3
+ Version: 0.6.1
4
4
  Summary: Fast, consistent, publication-quality graphs from pandas DataFrames, usable by people and AI agents.
5
5
  Project-URL: Repository, https://github.com/sskaye/forgegraph
6
6
  Project-URL: Issues, https://github.com/sskaye/forgegraph/issues
@@ -172,6 +172,7 @@ ForgeGraph is [MIT-licensed](https://github.com/sskaye/forgegraph/blob/main/LICE
172
172
 
173
173
  ## Documentation
174
174
 
175
+ - [Documentation site](https://sskaye.github.io/forgegraph/): getting started, and a reference for every specification, command and Python function.
175
176
  - [Specifications](https://github.com/sskaye/forgegraph/blob/main/docs/specifications): the file that defines each kind of spec, every parameter with its default, range and description.
176
177
  - [Built-in pack](https://github.com/sskaye/forgegraph/blob/main/docs/packs/forgegraph_default): forgegraph_default's specs.
177
178
  - [Changelog](https://github.com/sskaye/forgegraph/blob/main/CHANGELOG.md).
@@ -142,6 +142,7 @@ ForgeGraph is [MIT-licensed](https://github.com/sskaye/forgegraph/blob/main/LICE
142
142
 
143
143
  ## Documentation
144
144
 
145
+ - [Documentation site](https://sskaye.github.io/forgegraph/): getting started, and a reference for every specification, command and Python function.
145
146
  - [Specifications](https://github.com/sskaye/forgegraph/blob/main/docs/specifications): the file that defines each kind of spec, every parameter with its default, range and description.
146
147
  - [Built-in pack](https://github.com/sskaye/forgegraph/blob/main/docs/packs/forgegraph_default): forgegraph_default's specs.
147
148
  - [Changelog](https://github.com/sskaye/forgegraph/blob/main/CHANGELOG.md).
@@ -0,0 +1,24 @@
1
+ name: acme_polarization
2
+ version: 0
3
+ description: The polarization curves in the example acme pack's theme and slide format.
4
+ extends: None
5
+ parameters: !var
6
+ specifications:
7
+ graph_type: xy
8
+ theme: acme/acme
9
+ format: acme/slide
10
+ text:
11
+ title: Polarization curves
12
+ data:
13
+ file: cell_polarization.parquet
14
+ preprocessing: examples/sample-data/cell_polarization.csv, unchanged
15
+ axis:
16
+ x:
17
+ data:
18
+ column: current_density_a_cm2
19
+ title: Current density (A/cm^2)
20
+ y:
21
+ title: Voltage (V)
22
+ series:
23
+ voltage_v:
24
+ color: cell
@@ -0,0 +1,33 @@
1
+ name: assay_summary
2
+ version: 0
3
+ description: Each compound's mean response at each dose, with error bars from the standard deviations in the data.
4
+ extends: None
5
+ parameters: !var
6
+ specifications:
7
+ graph_type: xy
8
+ theme: forgegraph_default/light_theme
9
+ format: forgegraph_default/compact_format
10
+ text:
11
+ title: Dose response
12
+ data:
13
+ file: assay_summary.parquet
14
+ preprocessing: examples/sample-data/assay_summary.csv, unchanged
15
+ axis:
16
+ x:
17
+ data:
18
+ column: dose_uM
19
+ type: categorical
20
+ title: Dose (µM)
21
+ y:
22
+ title: Response (%)
23
+ series:
24
+ mean_response_pct:
25
+ color: compound
26
+ layers:
27
+ spread:
28
+ type: error_bar
29
+ value:
30
+ lower: sd_pct
31
+ upper: sd_pct
32
+ aggregation:
33
+ function: None
@@ -0,0 +1,26 @@
1
+ name: cells
2
+ version: 0
3
+ description: The fuel cells' graphs under one tab, beside a tab of the CO₂ record.
4
+ extends: forgegraph_default/layout
5
+
6
+ parameters:
7
+ specifications:
8
+ format: forgegraph_default/compact_format
9
+ tabs:
10
+ Cells:
11
+ tabs:
12
+ Polarization:
13
+ grid:
14
+ areas: [[curves]]
15
+ tiles:
16
+ curves: polarization.yaml
17
+ Durability:
18
+ grid:
19
+ areas: [[voltage]]
20
+ tiles:
21
+ voltage: durability.yaml
22
+ CO2:
23
+ grid:
24
+ areas: [[record]]
25
+ tiles:
26
+ record: co2.yaml
@@ -0,0 +1,28 @@
1
+ name: co2
2
+ version: 0
3
+ description: Monthly CO₂ at Mauna Loa, on a date axis, with the line broken where a month is missing.
4
+ extends: None
5
+ parameters: !var
6
+ specifications:
7
+ graph_type: xy
8
+ theme: forgegraph_default/light_theme
9
+ format: forgegraph_default/compact_format
10
+ text:
11
+ title: Atmospheric CO_{2}
12
+ data:
13
+ file: co2_monthly.parquet
14
+ preprocessing: examples/sample-data/co2_monthly.csv, with its dates read as dates and -99.99 as missing
15
+ axis:
16
+ x:
17
+ data:
18
+ column: date
19
+ title: None
20
+ y:
21
+ title: CO_{2} (ppm)
22
+ series:
23
+ Monthly mean:
24
+ column: co2_ppm
25
+ marker:
26
+ show: false
27
+ line:
28
+ missing_values: gap
@@ -0,0 +1,33 @@
1
+ name: dose_response
2
+ version: 0
3
+ description: The mean response of three compounds at each dose, with error bars of one standard deviation and a note.
4
+ extends: None
5
+ parameters: !var
6
+ specifications:
7
+ graph_type: xy
8
+ theme: forgegraph_default/light_theme
9
+ format: forgegraph_default/compact_format
10
+ text:
11
+ title: Dose response
12
+ data:
13
+ file: dose_response.parquet
14
+ preprocessing: examples/sample-data/dose_response.csv, unchanged
15
+ axis:
16
+ x:
17
+ data:
18
+ column: dose_uM
19
+ type: categorical
20
+ title: Dose (µM)
21
+ y:
22
+ title: Response (%)
23
+ series:
24
+ response_pct:
25
+ aggregation:
26
+ function: mean
27
+ color: compound
28
+ layers:
29
+ spread:
30
+ type: error_bar
31
+ replicates:
32
+ type: note
33
+ text: Mean ± SD of 3 replicates
@@ -0,0 +1,26 @@
1
+ name: durability
2
+ version: 0
3
+ description: Each cell's voltage over a 200-hour durability test, as lines without markers.
4
+ extends: None
5
+ parameters: !var
6
+ specifications:
7
+ graph_type: xy
8
+ theme: forgegraph_default/light_theme
9
+ format: forgegraph_default/compact_format
10
+ text:
11
+ title: Durability test
12
+ data:
13
+ file: cell_durability.parquet
14
+ preprocessing: examples/sample-data/cell_durability.csv, unchanged
15
+ axis:
16
+ x:
17
+ data:
18
+ column: hours
19
+ title: Time (h)
20
+ y:
21
+ title: Voltage (V)
22
+ series:
23
+ voltage_v:
24
+ color: cell
25
+ marker:
26
+ show: false
@@ -0,0 +1,24 @@
1
+ name: lab_polarization
2
+ version: 0
3
+ description: The polarization curves in the lab pack's theme and poster format.
4
+ extends: None
5
+ parameters: !var
6
+ specifications:
7
+ graph_type: xy
8
+ theme: lab/lab_theme
9
+ format: lab/poster
10
+ text:
11
+ title: Polarization curves
12
+ data:
13
+ file: cell_polarization.parquet
14
+ preprocessing: examples/sample-data/cell_polarization.csv, unchanged
15
+ axis:
16
+ x:
17
+ data:
18
+ column: current_density_a_cm2
19
+ title: Current density (A/cm^2)
20
+ y:
21
+ title: Voltage (V)
22
+ series:
23
+ voltage_v:
24
+ color: cell
@@ -0,0 +1,11 @@
1
+ name: poster
2
+ version: 0
3
+ description: A graph for a poster, wider than the built-in compact format and with larger text.
4
+ extends: forgegraph_default/compact_format
5
+
6
+ parameters:
7
+ figure:
8
+ width: 200
9
+ base_size: 22
10
+ output:
11
+ file_types: [png, pdf]
@@ -0,0 +1,5 @@
1
+ name: lab
2
+ version: 1.0.0
3
+ description: A lab's house style, for the guide to themes, formats and packs.
4
+ issues: https://github.com/sskaye/forgegraph/issues
5
+ requires: ">=0.6, <1"
@@ -0,0 +1,13 @@
1
+ name: lab_theme
2
+ version: 0
3
+ description: The lab's look, the built-in theme with Paul Tol's bright colors and horizontal grid lines.
4
+ extends: forgegraph_default/light_theme
5
+
6
+ parameters:
7
+ series:
8
+ colors: tol_bright
9
+ grid:
10
+ y:
11
+ show: true
12
+ title:
13
+ weight: bold
@@ -0,0 +1,29 @@
1
+ name: penguins
2
+ version: 0
3
+ description: Bill depth against bill length for three penguin species, as markers colored and shaped by species.
4
+ extends: None
5
+ parameters: !var
6
+ specifications:
7
+ graph_type: xy
8
+ theme: forgegraph_default/light_theme
9
+ format: forgegraph_default/compact_format
10
+ text:
11
+ title: Penguin bills
12
+ data:
13
+ file: penguins.parquet
14
+ preprocessing: examples/sample-data/penguins.csv, unchanged
15
+ axis:
16
+ x:
17
+ data:
18
+ column: bill_length_mm
19
+ title: Bill length (mm)
20
+ y:
21
+ title: Bill depth (mm)
22
+ series:
23
+ bill_depth_mm:
24
+ color: species
25
+ line:
26
+ show: false
27
+ marker:
28
+ shape: species
29
+ size: 0.3
@@ -0,0 +1,24 @@
1
+ name: polarization
2
+ version: 0
3
+ description: Polarization curves of three fuel cells, voltage against current density.
4
+ extends: None
5
+ parameters: !var
6
+ specifications:
7
+ graph_type: xy
8
+ theme: forgegraph_default/light_theme
9
+ format: forgegraph_default/compact_format
10
+ text:
11
+ title: Polarization curves
12
+ data:
13
+ file: cell_polarization.parquet
14
+ preprocessing: examples/sample-data/cell_polarization.csv, unchanged
15
+ axis:
16
+ x:
17
+ data:
18
+ column: current_density_a_cm2
19
+ title: Current density (A/cm^2)
20
+ y:
21
+ title: Voltage (V)
22
+ series:
23
+ voltage_v:
24
+ color: cell
@@ -0,0 +1,58 @@
1
+ name: savings
2
+ version: 0
3
+ description: The personal savings rate by month, with a line at its mean and a band one standard deviation either side.
4
+ extends: None
5
+ parameters: !var
6
+ specifications:
7
+ graph_type: xy
8
+ theme: forgegraph_default/light_theme
9
+ format: forgegraph_default/compact_format
10
+ text:
11
+ title: Personal savings rate
12
+ data:
13
+ file: economics.parquet
14
+ preprocessing: examples/sample-data/economics.csv, with its dates read as dates
15
+ axis:
16
+ x:
17
+ data:
18
+ column: date
19
+ title: None
20
+ y:
21
+ title: Savings rate (%)
22
+ series:
23
+ Savings rate:
24
+ column: psavert
25
+ marker:
26
+ show: false
27
+ layers:
28
+ spread:
29
+ type: reference
30
+ axis: y
31
+ line_1:
32
+ value: psavert
33
+ aggregation:
34
+ function: mean
35
+ offset:
36
+ function: stddev
37
+ multiplier: -1
38
+ line:
39
+ style: None
40
+ line_2:
41
+ value: psavert
42
+ aggregation:
43
+ function: mean
44
+ offset:
45
+ function: stddev
46
+ line:
47
+ style: None
48
+ mean:
49
+ type: reference
50
+ axis: y
51
+ line_1:
52
+ value: psavert
53
+ aggregation:
54
+ function: mean
55
+ label:
56
+ text: aggregation_value
57
+ position: end_above
58
+ inside: false
@@ -0,0 +1,46 @@
1
+ name: tips_side_by_side
2
+ version: 0
3
+ description: The mean tip on each day, for women and men side by side, with the 95 % confidence interval of each mean.
4
+ extends: None
5
+ parameters: !var
6
+ specifications:
7
+ graph_type: xy
8
+ theme: forgegraph_default/light_theme
9
+ format: forgegraph_default/compact_format
10
+ text:
11
+ title: Tips by day
12
+ data:
13
+ file: tips.parquet
14
+ preprocessing: examples/sample-data/tips.csv, unchanged
15
+ axis:
16
+ x:
17
+ data:
18
+ column: day
19
+ order:
20
+ method: value
21
+ direction: descending
22
+ title: None
23
+ y:
24
+ title: Mean tip ($)
25
+ arrangement:
26
+ offset: side_by_side
27
+ legend:
28
+ key:
29
+ inside: false
30
+ series:
31
+ tip:
32
+ aggregation:
33
+ function: mean
34
+ color: sex
35
+ line:
36
+ show: false
37
+ marker:
38
+ show: false
39
+ bar:
40
+ show: true
41
+ layers:
42
+ spread:
43
+ type: error_bar
44
+ value:
45
+ aggregation:
46
+ function: ci
@@ -0,0 +1,42 @@
1
+ name: tips_stacked
2
+ version: 0
3
+ description: The total of the bills on each day, stacked by lunch and dinner, with each day's total written above.
4
+ extends: None
5
+ parameters: !var
6
+ specifications:
7
+ graph_type: xy
8
+ theme: forgegraph_default/light_theme
9
+ format: forgegraph_default/compact_format
10
+ text:
11
+ title: Bills by day
12
+ data:
13
+ file: tips.parquet
14
+ preprocessing: examples/sample-data/tips.csv, unchanged
15
+ axis:
16
+ x:
17
+ data:
18
+ column: day
19
+ order:
20
+ method: value
21
+ direction: descending
22
+ title: None
23
+ y:
24
+ title: Total of the bills ($)
25
+ arrangement:
26
+ stacking: sum
27
+ total:
28
+ show: true
29
+ legend:
30
+ key:
31
+ inside: false
32
+ series:
33
+ total_bill:
34
+ aggregation:
35
+ function: sum
36
+ color: time
37
+ line:
38
+ show: false
39
+ marker:
40
+ show: false
41
+ bar:
42
+ show: true
@@ -3,7 +3,7 @@
3
3
  This page mirrors src/forgegraph/packs/forgegraph_default/pack.yaml, which is the specification. A test fails if they ever differ.
4
4
 
5
5
  name: forgegraph_default          *# \[text\]; The pack's name, which its specs' names start with (pack/name); a pip pack's must match its entry point.*\
6
- version: 0.6.0          *# \[text\]; The pack's release version.*\
6
+ version: 0.6.1          *# \[text\]; The pack's release version.*\
7
7
  description: ForgeGraph's built-in default pack. So it’s always possible to create a graph.          *# \[text\]; One line, describing what the pack is.*\
8
8
  issues: https://github.com/sskaye/forgegraph/issues          *# \[text\]; Where to file feature requests and bug reports about the pack.*\
9
9
  requires: ">=0.6, <0.7"          *# \[None, version specifier\]; The ForgeGraph version required for the pack. pip format, e.g. ">=0.6, <1". If None, it works with any version.*
@@ -0,0 +1,123 @@
1
+ # Gallery
2
+
3
+ Worked examples, each drawn from its GraphSpec as this site is built. The data is the [sample data](https://github.com/sskaye/forgegraph/tree/main/examples/sample-data) in the repository: synthetic look-alikes of the datasets data-visualization tutorials use, saved as Parquet. Open a GraphSpec to see how the graph is made; the [guides](guides/graphs.md) explain each part.
4
+
5
+ ## Lines and markers
6
+
7
+ Polarization curves of three fuel cells, one line for each cell, named beside it. Data: cell_polarization.csv.
8
+
9
+ ![Voltage against current density for cells A, B and C.](images/polarization.png){ width="480" }
10
+
11
+ ??? example "GraphSpec"
12
+
13
+ ```yaml
14
+ --8<-- "docs/examples/polarization.yaml"
15
+ ```
16
+
17
+ ## Lines over time
18
+
19
+ Each cell's voltage over a 200-hour durability test, as lines without markers. Data: cell_durability.csv.
20
+
21
+ ![Each cell's voltage over 200 hours.](images/durability.png){ width="480" }
22
+
23
+ ??? example "GraphSpec"
24
+
25
+ ```yaml
26
+ --8<-- "docs/examples/durability.yaml"
27
+ ```
28
+
29
+ ## Dates
30
+
31
+ Monthly CO₂ at Mauna Loa on a date axis, with the line broken where a month is missing. Data: co2_monthly.csv, with its dates read as dates and −99.99, which marks a missing month, read as missing.
32
+
33
+ ![Monthly CO2 from 1958, rising with a yearly cycle.](images/co2.png){ width="480" }
34
+
35
+ ??? example "GraphSpec"
36
+
37
+ ```yaml
38
+ --8<-- "docs/examples/co2.yaml"
39
+ ```
40
+
41
+ ## Groups by color and shape
42
+
43
+ Bill depth against bill length for three penguin species, as markers with a color and a shape for each species. Data: penguins.csv.
44
+
45
+ ![Bill depth against bill length, a color and shape for each species.](images/penguins.png){ width="480" }
46
+
47
+ ??? example "GraphSpec"
48
+
49
+ ```yaml
50
+ --8<-- "docs/examples/penguins.yaml"
51
+ ```
52
+
53
+ ## Stacked bars
54
+
55
+ The total of the bills on each day, stacked by lunch and dinner, with each day's total, and the days in order of their totals. Data: tips.csv.
56
+
57
+ ![Bars of the total bills on each day, dinner and lunch stacked.](images/tips_stacked.png){ width="480" }
58
+
59
+ ??? example "GraphSpec"
60
+
61
+ ```yaml
62
+ --8<-- "docs/examples/tips_stacked.yaml"
63
+ ```
64
+
65
+ ## Bars side by side, with error bars
66
+
67
+ The mean tip on each day, for women and men side by side, each with the 95 % confidence interval of its mean. Data: tips.csv.
68
+
69
+ ![Bars of the mean tip on each day, women and men side by side, with error bars.](images/tips_side_by_side.png){ width="480" }
70
+
71
+ ??? example "GraphSpec"
72
+
73
+ ```yaml
74
+ --8<-- "docs/examples/tips_side_by_side.yaml"
75
+ ```
76
+
77
+ ## Error bars and a note
78
+
79
+ Three compounds' mean response at each dose, with error bars of one standard deviation of the replicates, and a note saying so. Data: dose_response.csv.
80
+
81
+ ![The mean response of three compounds at each dose, with error bars and a note.](images/dose_response.png){ width="480" }
82
+
83
+ ??? example "GraphSpec"
84
+
85
+ ```yaml
86
+ --8<-- "docs/examples/dose_response.yaml"
87
+ ```
88
+
89
+ ## A reference line and band
90
+
91
+ The personal savings rate by month, with a line at its mean, labelled outside the plot, and a band one standard deviation either side. Data: economics.csv, with its dates read as dates.
92
+
93
+ ![The savings rate by month, with a band around the mean and a dashed line at it.](images/savings.png){ width="480" }
94
+
95
+ ??? example "GraphSpec"
96
+
97
+ ```yaml
98
+ --8<-- "docs/examples/savings.yaml"
99
+ ```
100
+
101
+ ## A dashboard
102
+
103
+ The Overview tab of a lab's throughput dashboard, from [examples/layouts/dashboard](https://github.com/sskaye/forgegraph/tree/main/examples/layouts/dashboard). Its other tab shows the runs on each instrument.
104
+
105
+ ![Completed runs per week across the top, with failed runs, samples per week and run time below.](images/lab_throughput-overview.png)
106
+
107
+ ??? example "Layout"
108
+
109
+ ```yaml
110
+ --8<-- "examples/layouts/dashboard/lab_throughput.layout.yaml"
111
+ ```
112
+
113
+ ## A house style
114
+
115
+ The polarization curves in the example acme pack's theme, a serif look with a light grid and no box, and its 16:9 slide format. Its parameters differ from the first example's only in the theme and format. The pack is in [examples/packs/acme](https://github.com/sskaye/forgegraph/tree/main/examples/packs/acme).
116
+
117
+ ![The polarization curves in a serif font with a light grid, on a wide slide.](images/acme_polarization.png)
118
+
119
+ ??? example "GraphSpec"
120
+
121
+ ```yaml
122
+ --8<-- "docs/examples/acme_polarization.yaml"
123
+ ```
@@ -0,0 +1,38 @@
1
+ # Configs
2
+
3
+ A **config** lists the packs that may be used: their themes, formats, GraphSpecs, layouts and schedules. It's how a person or an organization requires its house style, and how a graph made outside it is marked.
4
+
5
+ ```toml
6
+ packs = ["forgegraph_default", "./lab"]
7
+ ```
8
+
9
+ Built-in and pip packs are listed by name, and folder packs by their path from the config file. `forgegraph schema config` lists the settings.
10
+
11
+ ## The main config and folder configs
12
+
13
+ - **The main config**, `~/.config/forgegraph/config.toml` on every platform, or the file the `FORGEGRAPH_CONFIG` environment variable names, applies to all work. ForgeGraph writes it, listing the built-in pack, the first time a command reads the configs, such as `catalog` or `render`, and never overwrites it.
14
+ - **A folder config**, `forgegraph.toml`, applies to the files in its folder and in every folder below it. A file uses the nearest one: in its own folder, or else in the closest folder above it.
15
+
16
+ When both apply, a file may use only the packs the folder config lists. The configs are found from the file being drawn, not from the folder a command is run in, so a scheduled run is checked the same way as one by hand. `forgegraph catalog` and `forgegraph pack-notes` take `--folder` to show what may be used in another folder.
17
+
18
+ The example paper figure's folder has a config listing the built-in pack and its own journal pack:
19
+
20
+ ```toml
21
+ --8<-- "examples/layouts/paper/forgegraph.toml"
22
+ ```
23
+
24
+ ## Non-standard graphs
25
+
26
+ A pack that a folder config lists but the main config doesn't still works, but it's **non-standard**: whatever is drawn with it is watermarked, the record saved in the file names the pack, and ForgeGraph's commands say so:
27
+
28
+ ```text
29
+ Non-standard: pack 'acme' isn't in the main config (~/.config/forgegraph/config.toml), so whatever is drawn with it is watermarked
30
+ ```
31
+
32
+ That way you can make and try a pack without changing an organization's main config, and nothing drawn with it passes as standard. List the pack in the main config to draw it as standard. A folder config can't give a pack the name of one the main config lists or a built-in pack's, so a folder can't swap an organization's pack for its own copy.
33
+
34
+ What's drawn on `fg.blank`, a themed canvas for drawing with matplotlib what no graph type can, is always non-standard, and watermarked the same way.
35
+
36
+ ## Building on other packs
37
+
38
+ A config limits what a drawn file may name, not what a pack may build on. A pack's specs may extend specs in any pack a config that applies lists, or in an installed pip pack, even one a GraphSpec may not use. A spec made by extending is usable only if its own pack is allowed.