starplot 0.20.6__tar.gz → 0.21.0__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 (440) hide show
  1. {starplot-0.20.6 → starplot-0.21.0}/.dockerignore +9 -0
  2. {starplot-0.20.6 → starplot-0.21.0}/.github/workflows/docs.yml +11 -10
  3. {starplot-0.20.6 → starplot-0.21.0}/.github/workflows/release.yml +8 -7
  4. starplot-0.21.0/.github/workflows/test.yml +82 -0
  5. {starplot-0.20.6 → starplot-0.21.0}/.gitignore +21 -20
  6. {starplot-0.20.6 → starplot-0.21.0}/CITATION.cff +2 -2
  7. starplot-0.21.0/CLAUDE.md +46 -0
  8. {starplot-0.20.6 → starplot-0.21.0}/CONTRIBUTING.md +12 -11
  9. starplot-0.21.0/Dockerfile +29 -0
  10. starplot-0.21.0/Makefile +177 -0
  11. {starplot-0.20.6 → starplot-0.21.0}/PKG-INFO +29 -25
  12. {starplot-0.20.6 → starplot-0.21.0}/README.md +20 -18
  13. starplot-0.21.0/data/raw/translations/nl/constellation_names.csv +90 -0
  14. starplot-0.21.0/data/raw/translations/nl/dso_names.csv +153 -0
  15. starplot-0.21.0/data/raw/translations/nl/other_terms.csv +43 -0
  16. starplot-0.21.0/data/raw/translations/nl/readme.md +10 -0
  17. starplot-0.21.0/data/raw/translations/nl/star_names.csv +427 -0
  18. {starplot-0.20.6 → starplot-0.21.0}/data/raw/translations/zh-tw/readme.md +42 -42
  19. {starplot-0.20.6 → starplot-0.21.0}/docs/about.md +15 -4
  20. {starplot-0.20.6 → starplot-0.21.0}/docs/changelog.md +17 -0
  21. {starplot-0.20.6 → starplot-0.21.0}/docs/coming-soon.md +13 -13
  22. {starplot-0.20.6 → starplot-0.21.0}/docs/css/extra.css +374 -90
  23. {starplot-0.20.6 → starplot-0.21.0}/docs/data/dsos.md +2 -0
  24. {starplot-0.20.6 → starplot-0.21.0}/docs/data-sources.md +4 -3
  25. starplot-0.21.0/docs/examples/horizon-gradient.md +14 -0
  26. {starplot-0.20.6 → starplot-0.21.0}/docs/examples.md +54 -59
  27. starplot-0.21.0/docs/images/figure_layout.svg +279 -0
  28. starplot-0.21.0/docs/index.md +74 -0
  29. starplot-0.21.0/docs/installation.md +65 -0
  30. starplot-0.21.0/docs/migration-guides/0.21.0.md +234 -0
  31. starplot-0.21.0/docs/models/comet.md +10 -0
  32. starplot-0.21.0/docs/models/constellation.md +8 -0
  33. starplot-0.21.0/docs/models/dso.md +14 -0
  34. starplot-0.21.0/docs/models/index.md +69 -0
  35. starplot-0.21.0/docs/models/moon.md +8 -0
  36. starplot-0.21.0/docs/models/object-list.md +10 -0
  37. starplot-0.21.0/docs/models/observer.md +30 -0
  38. starplot-0.21.0/docs/models/optics.md +43 -0
  39. starplot-0.21.0/docs/models/planet.md +8 -0
  40. starplot-0.21.0/docs/models/satellite.md +12 -0
  41. starplot-0.21.0/docs/models/star.md +8 -0
  42. starplot-0.21.0/docs/models/sun.md +8 -0
  43. {starplot-0.20.6 → starplot-0.21.0}/docs/object-names/dsos.md +6 -8
  44. starplot-0.21.0/docs/reference-callables.md +135 -0
  45. {starplot-0.20.6 → starplot-0.21.0}/docs/reference-collisions.md +10 -8
  46. {starplot-0.20.6 → starplot-0.21.0}/docs/reference-galaxyplot.md +2 -1
  47. {starplot-0.20.6 → starplot-0.21.0}/docs/reference-horizonplot.md +2 -0
  48. {starplot-0.20.6 → starplot-0.21.0}/docs/reference-localization.md +7 -5
  49. starplot-0.21.0/docs/reference-mapplot.md +13 -0
  50. {starplot-0.20.6 → starplot-0.21.0}/docs/reference-opticplot.md +2 -1
  51. {starplot-0.20.6 → starplot-0.21.0}/docs/reference-positions.md +4 -4
  52. starplot-0.21.0/docs/reference-projections.md +114 -0
  53. {starplot-0.20.6 → starplot-0.21.0}/docs/reference-selecting-objects.md +2 -1
  54. starplot-0.21.0/docs/reference-settings.md +105 -0
  55. {starplot-0.20.6 → starplot-0.21.0}/docs/reference-zenithplot.md +2 -0
  56. starplot-0.21.0/docs/scripts/gradients.py +52 -0
  57. starplot-0.21.0/docs/scripts/markers.py +80 -0
  58. starplot-0.21.0/docs/scripts/projection_list.html +35 -0
  59. starplot-0.21.0/docs/scripts/projection_list.py +180 -0
  60. starplot-0.21.0/docs/scripts/projections.py +171 -0
  61. starplot-0.21.0/docs/scripts/style_explorer.html +545 -0
  62. starplot-0.21.0/docs/scripts/style_explorer.py +427 -0
  63. {starplot-0.20.6 → starplot-0.21.0}/docs/showcase.md +3 -1
  64. starplot-0.21.0/docs/snippets/_newsletter.html +22 -0
  65. starplot-0.21.0/docs/styling/color.md +134 -0
  66. starplot-0.21.0/docs/styling/explorer.md +1 -0
  67. starplot-0.21.0/docs/styling/extensions.md +197 -0
  68. starplot-0.21.0/docs/styling/gradients.md +109 -0
  69. starplot-0.21.0/docs/styling/index.md +205 -0
  70. starplot-0.21.0/docs/styling/layout.md +35 -0
  71. starplot-0.21.0/docs/styling/markers.md +96 -0
  72. starplot-0.21.0/docs/styling/reference.md +90 -0
  73. starplot-0.21.0/docs/tutorial/01.md +35 -0
  74. {starplot-0.20.6 → starplot-0.21.0}/docs/tutorial/02.md +6 -7
  75. {starplot-0.20.6 → starplot-0.21.0}/docs/tutorial/03.md +6 -6
  76. {starplot-0.20.6 → starplot-0.21.0}/docs/tutorial/04.md +5 -5
  77. {starplot-0.20.6 → starplot-0.21.0}/docs/tutorial/05.md +7 -7
  78. {starplot-0.20.6 → starplot-0.21.0}/docs/tutorial/06.md +4 -4
  79. {starplot-0.20.6 → starplot-0.21.0}/docs/tutorial/07.md +5 -4
  80. {starplot-0.20.6 → starplot-0.21.0}/docs/tutorial/08.md +6 -5
  81. {starplot-0.20.6 → starplot-0.21.0}/docs/tutorial/09.md +14 -8
  82. starplot-0.21.0/docs/tutorial/index.md +24 -0
  83. starplot-0.21.0/examples/constellation.py +75 -0
  84. {starplot-0.20.6 → starplot-0.21.0}/examples/examples.py +4 -2
  85. starplot-0.21.0/examples/galaxy.py +36 -0
  86. {starplot-0.20.6 → starplot-0.21.0}/examples/galaxy_custom_marker.py +12 -12
  87. starplot-0.21.0/examples/gradient.py +39 -0
  88. {starplot-0.20.6 → starplot-0.21.0}/examples/horizon_double_cluster.py +7 -9
  89. starplot-0.21.0/examples/horizon_gradient.py +57 -0
  90. {starplot-0.20.6 → starplot-0.21.0}/examples/horizon_sgr.py +2 -2
  91. {starplot-0.20.6 → starplot-0.21.0}/examples/map_big.py +1 -1
  92. {starplot-0.20.6 → starplot-0.21.0}/examples/map_big_dipper.py +7 -5
  93. {starplot-0.20.6 → starplot-0.21.0}/examples/map_canis_major.py +3 -4
  94. {starplot-0.20.6 → starplot-0.21.0}/examples/map_carina.py +10 -26
  95. {starplot-0.20.6 → starplot-0.21.0}/examples/map_cas.py +2 -3
  96. starplot-0.21.0/examples/map_equidistant.py +56 -0
  97. {starplot-0.20.6 → starplot-0.21.0}/examples/map_galaxy.py +14 -16
  98. {starplot-0.20.6 → starplot-0.21.0}/examples/map_milky_way_stars.py +6 -9
  99. {starplot-0.20.6 → starplot-0.21.0}/examples/map_orion.py +6 -5
  100. {starplot-0.20.6 → starplot-0.21.0}/examples/map_orthographic.py +10 -10
  101. {starplot-0.20.6 → starplot-0.21.0}/examples/map_sagittarius.py +5 -6
  102. {starplot-0.20.6 → starplot-0.21.0}/examples/map_virgo_cluster.py +10 -7
  103. {starplot-0.20.6 → starplot-0.21.0}/examples/optic_iss_transit.py +11 -11
  104. {starplot-0.20.6 → starplot-0.21.0}/examples/optic_m45.py +4 -7
  105. {starplot-0.20.6 → starplot-0.21.0}/examples/optic_orion_nebula.py +2 -3
  106. {starplot-0.20.6 → starplot-0.21.0}/examples/optic_solar_eclipse.py +4 -5
  107. {starplot-0.20.6 → starplot-0.21.0}/examples/star_chart_basic.py +2 -3
  108. {starplot-0.20.6 → starplot-0.21.0}/examples/star_chart_detail.py +12 -14
  109. {starplot-0.20.6 → starplot-0.21.0}/examples/star_chart_french.py +2 -3
  110. starplot-0.21.0/hash_checks/flaky.py +7 -0
  111. starplot-0.21.0/hash_checks/galaxy_checks.py +38 -0
  112. {starplot-0.20.6 → starplot-0.21.0}/hash_checks/hashio.py +63 -25
  113. starplot-0.21.0/hash_checks/hashlock.yml +220 -0
  114. {starplot-0.20.6 → starplot-0.21.0}/hash_checks/horizon_checks.py +22 -8
  115. {starplot-0.20.6 → starplot-0.21.0}/hash_checks/map_checks.py +110 -84
  116. {starplot-0.20.6 → starplot-0.21.0}/hash_checks/optic_checks.py +24 -22
  117. starplot-0.21.0/hash_checks/template.html +273 -0
  118. {starplot-0.20.6 → starplot-0.21.0}/hash_checks/zenith_checks.py +14 -20
  119. {starplot-0.20.6 → starplot-0.21.0}/pyproject.toml +21 -16
  120. starplot-0.21.0/scripts/download_test_fonts.py +37 -0
  121. starplot-0.21.0/scripts/list_fonts.py +201 -0
  122. starplot-0.21.0/scripts/marimo.py +115 -0
  123. starplot-0.21.0/scripts/svg.py +175 -0
  124. {starplot-0.20.6 → starplot-0.21.0}/scripts/voronoi.py +10 -10
  125. {starplot-0.20.6 → starplot-0.21.0}/src/starplot/__init__.py +27 -28
  126. starplot-0.21.0/src/starplot/callables.py +203 -0
  127. {starplot-0.20.6 → starplot-0.21.0}/src/starplot/cli.py +5 -3
  128. {starplot-0.20.6 → starplot-0.21.0}/src/starplot/config.py +9 -4
  129. starplot-0.21.0/src/starplot/constants.py +14 -0
  130. {starplot-0.20.6 → starplot-0.21.0}/src/starplot/data/__init__.py +7 -2
  131. {starplot-0.20.6 → starplot-0.21.0}/src/starplot/data/catalogs.py +14 -12
  132. {starplot-0.20.6 → starplot-0.21.0}/src/starplot/data/constellations.py +2 -2
  133. {starplot-0.20.6 → starplot-0.21.0}/src/starplot/data/db.py +1 -2
  134. {starplot-0.20.6 → starplot-0.21.0}/src/starplot/data/dsos.py +2 -2
  135. {starplot-0.20.6 → starplot-0.21.0}/src/starplot/data/ecliptic.py +5 -2
  136. {starplot-0.20.6 → starplot-0.21.0}/src/starplot/data/library/constellation_names.parquet +0 -0
  137. {starplot-0.20.6 → starplot-0.21.0}/src/starplot/data/library/dso_names.parquet +0 -0
  138. {starplot-0.20.6 → starplot-0.21.0}/src/starplot/data/library/star_designations.parquet +0 -0
  139. {starplot-0.20.6 → starplot-0.21.0}/src/starplot/data/stars.py +4 -4
  140. {starplot-0.20.6 → starplot-0.21.0}/src/starplot/data/translations.py +48 -0
  141. {starplot-0.20.6 → starplot-0.21.0}/src/starplot/data/utils.py +4 -2
  142. starplot-0.21.0/src/starplot/geometry.py +609 -0
  143. starplot-0.21.0/src/starplot/mixins.py +136 -0
  144. {starplot-0.20.6 → starplot-0.21.0}/src/starplot/models/__init__.py +11 -11
  145. {starplot-0.20.6 → starplot-0.21.0}/src/starplot/models/base.py +2 -3
  146. {starplot-0.20.6 → starplot-0.21.0}/src/starplot/models/comet.py +8 -8
  147. {starplot-0.20.6 → starplot-0.21.0}/src/starplot/models/constellation.py +7 -7
  148. {starplot-0.20.6 → starplot-0.21.0}/src/starplot/models/dso.py +21 -16
  149. {starplot-0.20.6 → starplot-0.21.0}/src/starplot/models/milky_way.py +2 -2
  150. {starplot-0.20.6 → starplot-0.21.0}/src/starplot/models/moon.py +4 -4
  151. {starplot-0.20.6 → starplot-0.21.0}/src/starplot/models/objects.py +7 -2
  152. {starplot-0.20.6 → starplot-0.21.0}/src/starplot/models/observer.py +17 -19
  153. {starplot-0.20.6 → starplot-0.21.0}/src/starplot/models/optics.py +31 -85
  154. {starplot-0.20.6 → starplot-0.21.0}/src/starplot/models/planet.py +4 -5
  155. {starplot-0.20.6 → starplot-0.21.0}/src/starplot/models/satellite.py +4 -4
  156. {starplot-0.20.6 → starplot-0.21.0}/src/starplot/models/star.py +24 -19
  157. {starplot-0.20.6 → starplot-0.21.0}/src/starplot/models/sun.py +2 -2
  158. {starplot-0.20.6 → starplot-0.21.0}/src/starplot/plots/__init__.py +4 -4
  159. {starplot-0.20.6 → starplot-0.21.0}/src/starplot/plots/base.py +448 -530
  160. {starplot-0.20.6 → starplot-0.21.0}/src/starplot/plots/galaxy.py +111 -156
  161. starplot-0.21.0/src/starplot/plots/horizon.py +385 -0
  162. starplot-0.21.0/src/starplot/plots/map.py +334 -0
  163. {starplot-0.20.6 → starplot-0.21.0}/src/starplot/plots/optic.py +87 -215
  164. {starplot-0.20.6 → starplot-0.21.0}/src/starplot/plots/zenith.py +77 -107
  165. {starplot-0.20.6 → starplot-0.21.0}/src/starplot/plotters/__init__.py +6 -5
  166. {starplot-0.20.6 → starplot-0.21.0}/src/starplot/plotters/arrow.py +52 -61
  167. {starplot-0.20.6 → starplot-0.21.0}/src/starplot/plotters/constellations.py +83 -100
  168. {starplot-0.20.6 → starplot-0.21.0}/src/starplot/plotters/dsos.py +143 -90
  169. starplot-0.21.0/src/starplot/plotters/gridlines.py +91 -0
  170. starplot-0.21.0/src/starplot/plotters/legend.py +82 -0
  171. {starplot-0.20.6 → starplot-0.21.0}/src/starplot/plotters/milkyway.py +31 -15
  172. {starplot-0.20.6 → starplot-0.21.0}/src/starplot/plotters/stars.py +80 -94
  173. {starplot-0.20.6 → starplot-0.21.0}/src/starplot/plotters/text.py +319 -330
  174. starplot-0.21.0/src/starplot/profile.py +16 -0
  175. starplot-0.21.0/src/starplot/projections.py +370 -0
  176. starplot-0.21.0/src/starplot/styles/__init__.py +9 -0
  177. starplot-0.21.0/src/starplot/styles/base.py +19 -0
  178. starplot-0.21.0/src/starplot/styles/constants.py +102 -0
  179. starplot-0.21.0/src/starplot/styles/elements.py +617 -0
  180. starplot-0.21.0/src/starplot/styles/ext/antique.yml +178 -0
  181. starplot-0.21.0/src/starplot/styles/ext/blue_dark.yml +163 -0
  182. starplot-0.21.0/src/starplot/styles/ext/blue_gold.yml +148 -0
  183. starplot-0.21.0/src/starplot/styles/ext/blue_light.yml +119 -0
  184. starplot-0.21.0/src/starplot/styles/ext/blue_medium.yml +142 -0
  185. starplot-0.21.0/src/starplot/styles/ext/blue_night.yml +184 -0
  186. starplot-0.21.0/src/starplot/styles/ext/cb_wong.yml +122 -0
  187. starplot-0.21.0/src/starplot/styles/ext/grayscale.yml +89 -0
  188. starplot-0.21.0/src/starplot/styles/ext/grayscale_dark.yml +134 -0
  189. starplot-0.21.0/src/starplot/styles/ext/horizon.yml +5 -0
  190. {starplot-0.20.6 → starplot-0.21.0}/src/starplot/styles/ext/map.yml +3 -3
  191. starplot-0.21.0/src/starplot/styles/ext/nord.yml +158 -0
  192. starplot-0.21.0/src/starplot/styles/ext/optic.yml +30 -0
  193. starplot-0.21.0/src/starplot/styles/ext/publication.yml +8 -0
  194. starplot-0.21.0/src/starplot/styles/ext/starplot.yml +181 -0
  195. starplot-0.21.0/src/starplot/styles/extensions.py +95 -0
  196. starplot-0.21.0/src/starplot/styles/gradients.py +101 -0
  197. {starplot-0.20.6 → starplot-0.21.0}/src/starplot/styles/helpers.py +5 -6
  198. starplot-0.21.0/src/starplot/styles/plot.py +590 -0
  199. starplot-0.21.0/src/starplot/styles/types.py +48 -0
  200. starplot-0.21.0/src/starplot/svg/__init__.py +2 -0
  201. starplot-0.21.0/src/starplot/svg/canvas.py +1333 -0
  202. starplot-0.21.0/src/starplot/svg/elements.py +356 -0
  203. starplot-0.21.0/src/starplot/svg/fonts.py +278 -0
  204. starplot-0.21.0/src/starplot/svg/layout.py +244 -0
  205. starplot-0.21.0/src/starplot/svg/png.py +16 -0
  206. starplot-0.21.0/src/starplot/svg/symbols.py +296 -0
  207. {starplot-0.20.6 → starplot-0.21.0}/src/starplot/utils.py +63 -72
  208. starplot-0.21.0/src/starplot/warnings.py +9 -0
  209. starplot-0.21.0/tests/conftest.py +36 -0
  210. starplot-0.21.0/tests/data/test_utils.py +106 -0
  211. {starplot-0.20.6/tests → starplot-0.21.0/tests/models}/test_comets.py +6 -4
  212. starplot-0.21.0/tests/models/test_constellation.py +22 -0
  213. starplot-0.21.0/tests/models/test_dso.py +32 -0
  214. {starplot-0.20.6/tests → starplot-0.21.0/tests/models}/test_observer.py +1 -2
  215. starplot-0.21.0/tests/models/test_optics.py +160 -0
  216. {starplot-0.20.6/tests → starplot-0.21.0/tests/models}/test_satellite.py +3 -3
  217. starplot-0.21.0/tests/models/test_solar_system.py +98 -0
  218. starplot-0.21.0/tests/models/test_star.py +49 -0
  219. starplot-0.21.0/tests/plots/__init__.py +0 -0
  220. starplot-0.21.0/tests/plots/test_galaxy.py +120 -0
  221. starplot-0.21.0/tests/plots/test_horizon.py +235 -0
  222. starplot-0.21.0/tests/svg/__init__.py +0 -0
  223. starplot-0.21.0/tests/svg/test_canvas.py +888 -0
  224. starplot-0.21.0/tests/svg/test_elements.py +341 -0
  225. starplot-0.21.0/tests/svg/test_fonts.py +171 -0
  226. starplot-0.21.0/tests/svg/test_layout.py +153 -0
  227. starplot-0.21.0/tests/svg/test_symbols.py +233 -0
  228. {starplot-0.20.6 → starplot-0.21.0}/tests/test_catalogs.py +1 -1
  229. starplot-0.21.0/tests/test_cli.py +115 -0
  230. starplot-0.21.0/tests/test_data.py +18 -0
  231. {starplot-0.20.6 → starplot-0.21.0}/tests/test_geometry.py +33 -0
  232. {starplot-0.20.6 → starplot-0.21.0}/tests/test_languages.py +4 -2
  233. {starplot-0.20.6 → starplot-0.21.0}/tests/test_map.py +2 -2
  234. {starplot-0.20.6 → starplot-0.21.0}/tests/test_optic.py +2 -22
  235. {starplot-0.20.6 → starplot-0.21.0}/tests/test_settings.py +5 -5
  236. {starplot-0.20.6 → starplot-0.21.0}/tests/test_styles.py +14 -15
  237. starplot-0.21.0/tests/test_utils.py +145 -0
  238. {starplot-0.20.6 → starplot-0.21.0}/tests/utils.py +1 -3
  239. {starplot-0.20.6 → starplot-0.21.0}/tutorial/build.py +1 -1
  240. {starplot-0.20.6 → starplot-0.21.0}/tutorial/tutorial_02.py +1 -2
  241. {starplot-0.20.6 → starplot-0.21.0}/tutorial/tutorial_03.py +12 -13
  242. {starplot-0.20.6 → starplot-0.21.0}/tutorial/tutorial_04.py +11 -10
  243. {starplot-0.20.6 → starplot-0.21.0}/tutorial/tutorial_05.py +2 -3
  244. {starplot-0.20.6 → starplot-0.21.0}/tutorial/tutorial_06.py +7 -7
  245. {starplot-0.20.6 → starplot-0.21.0}/tutorial/tutorial_07.py +13 -6
  246. starplot-0.21.0/tutorial/tutorial_08.py +61 -0
  247. starplot-0.21.0/zensical.toml +151 -0
  248. starplot-0.20.6/.github/workflows/test.yml +0 -59
  249. starplot-0.20.6/Dockerfile +0 -27
  250. starplot-0.20.6/Makefile +0 -152
  251. starplot-0.20.6/docs/examples/horizon-gradient.md +0 -16
  252. starplot-0.20.6/docs/examples/optic-moon-saturn.md +0 -12
  253. starplot-0.20.6/docs/index.md +0 -71
  254. starplot-0.20.6/docs/installation.md +0 -48
  255. starplot-0.20.6/docs/reference-callables.md +0 -92
  256. starplot-0.20.6/docs/reference-mapplot.md +0 -94
  257. starplot-0.20.6/docs/reference-models.md +0 -152
  258. starplot-0.20.6/docs/reference-settings.md +0 -55
  259. starplot-0.20.6/docs/reference-styling.md +0 -530
  260. starplot-0.20.6/docs/snippets/_newsletter.html +0 -25
  261. starplot-0.20.6/docs/tutorial/01.md +0 -35
  262. starplot-0.20.6/docs/tutorial.md +0 -23
  263. starplot-0.20.6/examples/horizon_gradient.py +0 -47
  264. starplot-0.20.6/examples/optic_moon_saturn.py +0 -36
  265. starplot-0.20.6/hash_checks/hashlock.yml +0 -164
  266. starplot-0.20.6/hash_checks/template.html +0 -165
  267. starplot-0.20.6/mkdocs.yml +0 -110
  268. starplot-0.20.6/scripts/ecliptic.py +0 -37
  269. starplot-0.20.6/scripts/marimo.py +0 -76
  270. starplot-0.20.6/src/starplot/callables.py +0 -176
  271. starplot-0.20.6/src/starplot/geometry.py +0 -319
  272. starplot-0.20.6/src/starplot/mixins.py +0 -360
  273. starplot-0.20.6/src/starplot/plots/horizon.py +0 -543
  274. starplot-0.20.6/src/starplot/plots/map.py +0 -515
  275. starplot-0.20.6/src/starplot/plotters/debug.py +0 -21
  276. starplot-0.20.6/src/starplot/plotters/experimental.py +0 -722
  277. starplot-0.20.6/src/starplot/plotters/gradients.py +0 -153
  278. starplot-0.20.6/src/starplot/plotters/legend.py +0 -253
  279. starplot-0.20.6/src/starplot/profile.py +0 -16
  280. starplot-0.20.6/src/starplot/projections.py +0 -184
  281. starplot-0.20.6/src/starplot/styles/__init__.py +0 -6
  282. starplot-0.20.6/src/starplot/styles/base.py +0 -1344
  283. starplot-0.20.6/src/starplot/styles/ext/antique.yml +0 -175
  284. starplot-0.20.6/src/starplot/styles/ext/blue_dark.yml +0 -163
  285. starplot-0.20.6/src/starplot/styles/ext/blue_gold.yml +0 -147
  286. starplot-0.20.6/src/starplot/styles/ext/blue_light.yml +0 -123
  287. starplot-0.20.6/src/starplot/styles/ext/blue_medium.yml +0 -142
  288. starplot-0.20.6/src/starplot/styles/ext/blue_night.yml +0 -185
  289. starplot-0.20.6/src/starplot/styles/ext/cb_wong.yml +0 -124
  290. starplot-0.20.6/src/starplot/styles/ext/color_print.yml +0 -111
  291. starplot-0.20.6/src/starplot/styles/ext/grayscale.yml +0 -94
  292. starplot-0.20.6/src/starplot/styles/ext/grayscale_dark.yml +0 -136
  293. starplot-0.20.6/src/starplot/styles/ext/nord.yml +0 -158
  294. starplot-0.20.6/src/starplot/styles/ext/optic.yml +0 -20
  295. starplot-0.20.6/src/starplot/styles/ext/publication.yml +0 -8
  296. starplot-0.20.6/src/starplot/styles/extensions.py +0 -129
  297. starplot-0.20.6/src/starplot/styles/fonts-library/gfs-didot/DESCRIPTION.en_us.html +0 -9
  298. starplot-0.20.6/src/starplot/styles/fonts-library/gfs-didot/GFSDidot-Regular.ttf +0 -0
  299. starplot-0.20.6/src/starplot/styles/fonts-library/gfs-didot/METADATA.pb +0 -16
  300. starplot-0.20.6/src/starplot/styles/fonts-library/gfs-didot/OFL.txt +0 -94
  301. starplot-0.20.6/src/starplot/styles/fonts-library/inter/Inter-Bold.ttf +0 -0
  302. starplot-0.20.6/src/starplot/styles/fonts-library/inter/Inter-BoldItalic.ttf +0 -0
  303. starplot-0.20.6/src/starplot/styles/fonts-library/inter/Inter-ExtraBold.ttf +0 -0
  304. starplot-0.20.6/src/starplot/styles/fonts-library/inter/Inter-ExtraLight.ttf +0 -0
  305. starplot-0.20.6/src/starplot/styles/fonts-library/inter/Inter-ExtraLightItalic.ttf +0 -0
  306. starplot-0.20.6/src/starplot/styles/fonts-library/inter/Inter-Italic.ttf +0 -0
  307. starplot-0.20.6/src/starplot/styles/fonts-library/inter/Inter-Light.ttf +0 -0
  308. starplot-0.20.6/src/starplot/styles/fonts-library/inter/Inter-LightItalic.ttf +0 -0
  309. starplot-0.20.6/src/starplot/styles/fonts-library/inter/Inter-Regular.ttf +0 -0
  310. starplot-0.20.6/src/starplot/styles/fonts-library/inter/Inter-SemiBold.ttf +0 -0
  311. starplot-0.20.6/src/starplot/styles/fonts-library/inter/Inter-SemiBoldItalic.ttf +0 -0
  312. starplot-0.20.6/src/starplot/styles/fonts-library/inter/LICENSE.txt +0 -92
  313. starplot-0.20.6/src/starplot/styles/fonts.py +0 -15
  314. starplot-0.20.6/src/starplot/styles/markers.py +0 -308
  315. starplot-0.20.6/src/starplot/warnings.py +0 -21
  316. starplot-0.20.6/tests/test_data.py +0 -14
  317. starplot-0.20.6/tests/test_models.py +0 -197
  318. starplot-0.20.6/tests/test_stars.py +0 -10
  319. starplot-0.20.6/tests/test_utils.py +0 -86
  320. starplot-0.20.6/tutorial/tutorial_08.py +0 -40
  321. {starplot-0.20.6 → starplot-0.21.0}/.github/FUNDING.yml +0 -0
  322. {starplot-0.20.6 → starplot-0.21.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  323. {starplot-0.20.6 → starplot-0.21.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  324. {starplot-0.20.6 → starplot-0.21.0}/.github/workflows/archives.yaml +0 -0
  325. {starplot-0.20.6 → starplot-0.21.0}/CODE_OF_CONDUCT.md +0 -0
  326. {starplot-0.20.6 → starplot-0.21.0}/LICENSE +0 -0
  327. {starplot-0.20.6 → starplot-0.21.0}/data/raw/constellation_borders.json +0 -0
  328. {starplot-0.20.6 → starplot-0.21.0}/data/raw/constellations.json +0 -0
  329. {starplot-0.20.6 → starplot-0.21.0}/data/raw/milkyway.json +0 -0
  330. {starplot-0.20.6 → starplot-0.21.0}/data/raw/star_designations.csv +0 -0
  331. {starplot-0.20.6 → starplot-0.21.0}/data/raw/translations/constellation_names.csv +0 -0
  332. {starplot-0.20.6 → starplot-0.21.0}/data/raw/translations/dso_names.csv +0 -0
  333. {starplot-0.20.6 → starplot-0.21.0}/data/raw/translations/en-us/constellation_names.csv +0 -0
  334. {starplot-0.20.6 → starplot-0.21.0}/data/raw/translations/en-us/dso_names.csv +0 -0
  335. {starplot-0.20.6 → starplot-0.21.0}/data/raw/translations/en-us/other_terms.csv +0 -0
  336. {starplot-0.20.6 → starplot-0.21.0}/data/raw/translations/en-us/star_names.csv +0 -0
  337. {starplot-0.20.6 → starplot-0.21.0}/data/raw/translations/es/constellation_names.csv +0 -0
  338. {starplot-0.20.6 → starplot-0.21.0}/data/raw/translations/es/dso_names.csv +0 -0
  339. {starplot-0.20.6 → starplot-0.21.0}/data/raw/translations/es/other_terms.csv +0 -0
  340. {starplot-0.20.6 → starplot-0.21.0}/data/raw/translations/es/star_names.csv +0 -0
  341. {starplot-0.20.6 → starplot-0.21.0}/data/raw/translations/fa/constellation_names.csv +0 -0
  342. {starplot-0.20.6 → starplot-0.21.0}/data/raw/translations/fa/dso_names.csv +0 -0
  343. {starplot-0.20.6 → starplot-0.21.0}/data/raw/translations/fa/other_terms.csv +0 -0
  344. {starplot-0.20.6 → starplot-0.21.0}/data/raw/translations/fa/star_names.csv +0 -0
  345. {starplot-0.20.6 → starplot-0.21.0}/data/raw/translations/fr/constellation_names.csv +0 -0
  346. {starplot-0.20.6 → starplot-0.21.0}/data/raw/translations/fr/dso_names.csv +0 -0
  347. {starplot-0.20.6 → starplot-0.21.0}/data/raw/translations/fr/other_terms.csv +0 -0
  348. {starplot-0.20.6 → starplot-0.21.0}/data/raw/translations/fr/star_names.csv +0 -0
  349. {starplot-0.20.6 → starplot-0.21.0}/data/raw/translations/it/constellation_names.csv +0 -0
  350. {starplot-0.20.6 → starplot-0.21.0}/data/raw/translations/it/dso_names.csv +0 -0
  351. {starplot-0.20.6 → starplot-0.21.0}/data/raw/translations/it/other_terms.csv +0 -0
  352. {starplot-0.20.6 → starplot-0.21.0}/data/raw/translations/it/readme.md +0 -0
  353. {starplot-0.20.6 → starplot-0.21.0}/data/raw/translations/it/star_names.csv +0 -0
  354. {starplot-0.20.6 → starplot-0.21.0}/data/raw/translations/lt/constellation_names.csv +0 -0
  355. {starplot-0.20.6 → starplot-0.21.0}/data/raw/translations/lt/dso_names.csv +0 -0
  356. {starplot-0.20.6 → starplot-0.21.0}/data/raw/translations/lt/other_terms.csv +0 -0
  357. {starplot-0.20.6 → starplot-0.21.0}/data/raw/translations/lt/readme.md +0 -0
  358. {starplot-0.20.6 → starplot-0.21.0}/data/raw/translations/lt/star_names.csv +0 -0
  359. {starplot-0.20.6 → starplot-0.21.0}/data/raw/translations/other_terms.csv +0 -0
  360. {starplot-0.20.6 → starplot-0.21.0}/data/raw/translations/readme.md +0 -0
  361. {starplot-0.20.6 → starplot-0.21.0}/data/raw/translations/star_names.csv +0 -0
  362. {starplot-0.20.6 → starplot-0.21.0}/data/raw/translations/zh-cn/constellation_names.csv +0 -0
  363. {starplot-0.20.6 → starplot-0.21.0}/data/raw/translations/zh-cn/dso_names.csv +0 -0
  364. {starplot-0.20.6 → starplot-0.21.0}/data/raw/translations/zh-cn/other_terms.csv +0 -0
  365. {starplot-0.20.6 → starplot-0.21.0}/data/raw/translations/zh-cn/star_names.csv +0 -0
  366. {starplot-0.20.6 → starplot-0.21.0}/data/raw/translations/zh-tw/constellation_names.csv +0 -0
  367. {starplot-0.20.6 → starplot-0.21.0}/data/raw/translations/zh-tw/dso_names.csv +0 -0
  368. {starplot-0.20.6 → starplot-0.21.0}/data/raw/translations/zh-tw/other_terms.csv +0 -0
  369. {starplot-0.20.6 → starplot-0.21.0}/data/raw/translations/zh-tw/star_names.csv +0 -0
  370. {starplot-0.20.6 → starplot-0.21.0}/data/readme.md +0 -0
  371. {starplot-0.20.6 → starplot-0.21.0}/data/scripts/constellation_names.py +0 -0
  372. {starplot-0.20.6 → starplot-0.21.0}/data/scripts/data_settings.py +0 -0
  373. {starplot-0.20.6 → starplot-0.21.0}/data/scripts/db.py +0 -0
  374. {starplot-0.20.6 → starplot-0.21.0}/data/scripts/dso_names.py +0 -0
  375. {starplot-0.20.6 → starplot-0.21.0}/data/scripts/star_designations.py +0 -0
  376. {starplot-0.20.6 → starplot-0.21.0}/data/scripts/translations.py +0 -0
  377. {starplot-0.20.6 → starplot-0.21.0}/docs/custom/main.html +0 -0
  378. {starplot-0.20.6 → starplot-0.21.0}/docs/data/building.md +0 -0
  379. {starplot-0.20.6 → starplot-0.21.0}/docs/data/constellations.md +0 -0
  380. /starplot-0.20.6/docs/data/overview.md → /starplot-0.21.0/docs/data/index.md +0 -0
  381. {starplot-0.20.6 → starplot-0.21.0}/docs/data/stars.md +0 -0
  382. {starplot-0.20.6 → starplot-0.21.0}/docs/examples/horizon-double-cluster.md +0 -0
  383. {starplot-0.20.6 → starplot-0.21.0}/docs/examples/horizon-sgr.md +0 -0
  384. {starplot-0.20.6 → starplot-0.21.0}/docs/examples/map-big-dipper.md +0 -0
  385. {starplot-0.20.6 → starplot-0.21.0}/docs/examples/map-big.md +0 -0
  386. {starplot-0.20.6 → starplot-0.21.0}/docs/examples/map-canis-major.md +0 -0
  387. {starplot-0.20.6 → starplot-0.21.0}/docs/examples/map-carina-nebula.md +0 -0
  388. {starplot-0.20.6 → starplot-0.21.0}/docs/examples/map-cassiopeia.md +0 -0
  389. {starplot-0.20.6 → starplot-0.21.0}/docs/examples/map-custom-marker.md +0 -0
  390. {starplot-0.20.6 → starplot-0.21.0}/docs/examples/map-galaxy.md +0 -0
  391. {starplot-0.20.6 → starplot-0.21.0}/docs/examples/map-milky-way-stars.md +0 -0
  392. {starplot-0.20.6 → starplot-0.21.0}/docs/examples/map-orion.md +0 -0
  393. {starplot-0.20.6 → starplot-0.21.0}/docs/examples/map-orthographic.md +0 -0
  394. {starplot-0.20.6 → starplot-0.21.0}/docs/examples/map-sagittarius.md +0 -0
  395. {starplot-0.20.6 → starplot-0.21.0}/docs/examples/map-virgo-cluster.md +0 -0
  396. {starplot-0.20.6 → starplot-0.21.0}/docs/examples/optic-iss-transit.md +0 -0
  397. {starplot-0.20.6 → starplot-0.21.0}/docs/examples/optic-m45.md +0 -0
  398. {starplot-0.20.6 → starplot-0.21.0}/docs/examples/optic-orion.md +0 -0
  399. {starplot-0.20.6 → starplot-0.21.0}/docs/examples/optic-solar-eclipse.md +0 -0
  400. {starplot-0.20.6 → starplot-0.21.0}/docs/examples/star-chart-basic.md +0 -0
  401. {starplot-0.20.6 → starplot-0.21.0}/docs/examples/star-chart-detail.md +0 -0
  402. {starplot-0.20.6 → starplot-0.21.0}/docs/examples/star-chart-french.md +0 -0
  403. {starplot-0.20.6 → starplot-0.21.0}/docs/images/celestial-globe.svg +0 -0
  404. {starplot-0.20.6 → starplot-0.21.0}/docs/images/cover-front-sm-360.png +0 -0
  405. {starplot-0.20.6 → starplot-0.21.0}/docs/images/discord.svg +0 -0
  406. {starplot-0.20.6 → starplot-0.21.0}/docs/images/examples/.keep +0 -0
  407. {starplot-0.20.6 → starplot-0.21.0}/docs/images/favicon.png +0 -0
  408. {starplot-0.20.6 → starplot-0.21.0}/docs/images/logo-2400px.png +0 -0
  409. {starplot-0.20.6 → starplot-0.21.0}/docs/images/logo-original/banner.png +0 -0
  410. {starplot-0.20.6 → starplot-0.21.0}/docs/images/logo-original/banner.svg +0 -0
  411. {starplot-0.20.6 → starplot-0.21.0}/docs/images/logo-original/banner.vectornator +0 -0
  412. {starplot-0.20.6 → starplot-0.21.0}/docs/images/logo-original/logo.png +0 -0
  413. {starplot-0.20.6 → starplot-0.21.0}/docs/images/logo-original/logo.svg +0 -0
  414. {starplot-0.20.6 → starplot-0.21.0}/docs/images/logo-original/logo.vectornator +0 -0
  415. {starplot-0.20.6 → starplot-0.21.0}/docs/images/logo-original/logo2.png +0 -0
  416. {starplot-0.20.6 → starplot-0.21.0}/docs/images/logo.svg +0 -0
  417. {starplot-0.20.6 → starplot-0.21.0}/docs/images/logo2.vectornator +0 -0
  418. {starplot-0.20.6 → starplot-0.21.0}/docs/images/logo500.png +0 -0
  419. {starplot-0.20.6 → starplot-0.21.0}/docs/images/mono-2400px.png +0 -0
  420. {starplot-0.20.6 → starplot-0.21.0}/docs/images/mono.png +0 -0
  421. {starplot-0.20.6 → starplot-0.21.0}/docs/images/mono.svg +0 -0
  422. {starplot-0.20.6 → starplot-0.21.0}/docs/images/star.svg +0 -0
  423. {starplot-0.20.6 → starplot-0.21.0}/docs/images/starplot-header.svg +0 -0
  424. {starplot-0.20.6 → starplot-0.21.0}/docs/images/tutorial/.keep +0 -0
  425. {starplot-0.20.6 → starplot-0.21.0}/docs/license.md +0 -0
  426. {starplot-0.20.6 → starplot-0.21.0}/docs/migration-guides/0.16.0.md +0 -0
  427. {starplot-0.20.6 → starplot-0.21.0}/docs/object-names/constellations.md +0 -0
  428. {starplot-0.20.6 → starplot-0.21.0}/docs/object-names/stars.md +0 -0
  429. {starplot-0.20.6 → starplot-0.21.0}/docs/reference-ongc.md +0 -0
  430. {starplot-0.20.6 → starplot-0.21.0}/docs/robots.txt +0 -0
  431. /starplot-0.20.6/data/scripts/docdata.py → /starplot-0.21.0/docs/scripts/data.py +0 -0
  432. {starplot-0.20.6 → starplot-0.21.0}/hash_checks/__init__.py +0 -0
  433. {starplot-0.20.6 → starplot-0.21.0}/hash_checks/data/.keep +0 -0
  434. {starplot-0.20.6 → starplot-0.21.0}/src/starplot/coordinates.py +0 -0
  435. {starplot-0.20.6 → starplot-0.21.0}/src/starplot/data/library/readme.md +0 -0
  436. {starplot-0.20.6 → starplot-0.21.0}/src/starplot/styles/ext/gradient_presets.yml +0 -0
  437. {starplot-0.20.6 → starplot-0.21.0}/tests/__init__.py +0 -0
  438. /starplot-0.20.6/docs/data-explorer.md → /starplot-0.21.0/tests/data/__init__.py +0 -0
  439. {starplot-0.20.6 → starplot-0.21.0}/tests/data/comets.txt +0 -0
  440. /starplot-0.20.6/tests/data/.keep → /starplot-0.21.0/tests/models/__init__.py +0 -0
@@ -13,6 +13,15 @@ hip_main.dat
13
13
  hip8.dat
14
14
 
15
15
  temp*
16
+ temp/
17
+ .tmp/
18
+ .ruff_cache/
19
+ .pytest_cache/
20
+
21
+ *.parquet
22
+ *.bsp
23
+
24
+ build/
16
25
 
17
26
  # test generated data
18
27
  tests/data/actual*.png
@@ -13,12 +13,16 @@ jobs:
13
13
 
14
14
  steps:
15
15
  - uses: actions/checkout@v6
16
+ - uses: astral-sh/setup-uv@bec219d24cd3e171d82865faccec33120bb574f4 # v10.1.0
16
17
 
17
- - name: Build Docker image
18
- run: make build
18
+ - name: Install dependencies
19
+ run: make install env
19
20
 
21
+ - name: Download test fonts
22
+ run: make download-test-fonts
23
+
20
24
  - name: Build sky.db
21
- run: make db CI=true
25
+ run: make db setup CI=true
22
26
 
23
27
  - name: Build Examples
24
28
  run: make examples
@@ -26,23 +30,20 @@ jobs:
26
30
  - name: Build Tutorial
27
31
  run: make tutorial
28
32
 
29
- - name: Build Data Reference
30
- run: make build-doc-data
31
-
32
- - name: Build Docs
33
- run: make docs-build
33
+ - name: Build Documentation
34
+ run: make docs
34
35
 
35
36
  - name: Set Version Environment Variable
36
37
  run: |
37
38
  echo "STARPLOT_VERSION=$(make version)" >> "$GITHUB_ENV"
38
39
 
39
40
  - id: 'auth'
40
- uses: 'google-github-actions/auth@v2'
41
+ uses: 'google-github-actions/auth@v3'
41
42
  with:
42
43
  credentials_json: '${{ secrets.GCP_CREDENTIALS }}'
43
44
 
44
45
  - name: 'Set up Google Cloud SDK'
45
- uses: 'google-github-actions/setup-gcloud@v2'
46
+ uses: 'google-github-actions/setup-gcloud@v3'
46
47
  with:
47
48
  version: '>= 363.0.0'
48
49
 
@@ -10,10 +10,14 @@ jobs:
10
10
  runs-on: ubuntu-24.04
11
11
  steps:
12
12
  - uses: actions/checkout@v6
13
+ - uses: astral-sh/setup-uv@bec219d24cd3e171d82865faccec33120bb574f4 # v10.1.0
13
14
 
14
- - name: Build Docker Image
15
- run: make build
15
+ - name: Install dependencies
16
+ run: make install env
16
17
 
18
+ - name: Download test fonts
19
+ run: make download-test-fonts
20
+
17
21
  - name: Check Lint
18
22
  run: make lint CI=true
19
23
 
@@ -21,13 +25,10 @@ jobs:
21
25
  run: make format CI=true ARGS=--check
22
26
 
23
27
  - name: Build sky.db
24
- run: make db CI=true
28
+ run: make db setup CI=true
25
29
 
26
30
  - name: Run Tests
27
- run: make test CI=true
28
-
29
- - name: Check Image Hashes
30
- run: make check-hashes CI=true
31
+ run: make test check-hashes CI=true
31
32
 
32
33
  - name: Build
33
34
  run: make flit-build
@@ -0,0 +1,82 @@
1
+ name: Run Tests
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ pull_request:
6
+ types: [opened, reopened, synchronize]
7
+ branches:
8
+ - main
9
+ - develop
10
+ schedule:
11
+ - cron: '0 12 * * *' # 1200 UTC = 0500 PT
12
+
13
+ jobs:
14
+ test-lint-build:
15
+ runs-on: ubuntu-24.04
16
+ permissions:
17
+ contents: 'read'
18
+ id-token: 'write'
19
+ strategy:
20
+ fail-fast: false
21
+ matrix:
22
+ python-version: ['3.10', '3.11', '3.12', '3.13', '3.14']
23
+ steps:
24
+ - uses: actions/checkout@v6
25
+ - uses: astral-sh/setup-uv@bec219d24cd3e171d82865faccec33120bb574f4 # v10.1.0
26
+ - name: Install dependencies
27
+ run: make install env
28
+ - name: Download test fonts
29
+ run: make download-test-fonts
30
+ - name: Build sky.db
31
+ run: make db setup CI=true
32
+ - name: Check Lint
33
+ run: make lint CI=true
34
+ - name: Check Format
35
+ run: make format CI=true ARGS=--check
36
+ - name: Run Tests
37
+ id: run-tests
38
+ run: make test-python-version PYTHON_VERSION=${{ matrix.python-version }} CI=true
39
+ - name: Run hash checks
40
+ id: run-hash-checks
41
+ run: make check-hashes-python-version PYTHON_VERSION=${{ matrix.python-version }} CI=true
42
+ - name: Build examples
43
+ if: always()
44
+ run: make examples
45
+ - name: Build tutorial
46
+ if: always()
47
+ run: make tutorial
48
+ - name: Build docs
49
+ if: always()
50
+ run: make docs
51
+ - name: Set Short SHA
52
+ if: always()
53
+ run: echo "SHORT_SHA=$(git rev-parse --short HEAD)" >> "$GITHUB_ENV"
54
+ - id: 'auth'
55
+ if: always()
56
+ uses: 'google-github-actions/auth@v3'
57
+ with:
58
+ credentials_json: '${{ secrets.GCP_CREDENTIALS }}'
59
+ - name: 'Set up Google Cloud SDK'
60
+ if: always()
61
+ uses: 'google-github-actions/setup-gcloud@v3'
62
+ with:
63
+ version: '>= 363.0.0'
64
+ - name: 'Upload docs on failure'
65
+ if: always()
66
+ run: 'gsutil -m rsync -R -d site gs://archives.starplot.dev/test-runs/$SHORT_SHA/${{ matrix.python-version }}/docs/'
67
+ - name: 'Upload hash check results on failure'
68
+ if: always()
69
+ run: |
70
+ gsutil cp hash_checks/results.html gs://archives.starplot.dev/test-runs/$SHORT_SHA/${{ matrix.python-version }}/hash-checks/results.html
71
+ gsutil -m rsync -r hash_checks/data gs://archives.starplot.dev/test-runs/$SHORT_SHA/${{ matrix.python-version }}/hash-checks/data/
72
+ - name: 'Print results URLs'
73
+ if: always()
74
+ run: |
75
+ BASE="https://archives.starplot.dev/test-runs/$SHORT_SHA/${{ matrix.python-version }}"
76
+ echo "docs: $BASE/docs/index.html"
77
+ echo "hash checks: $BASE/hash-checks/results.html"
78
+ echo "### Test run artifacts (Python ${{ matrix.python-version }})" >> "$GITHUB_STEP_SUMMARY"
79
+ echo "- [docs]($BASE/docs/index.html)" >> "$GITHUB_STEP_SUMMARY"
80
+ echo "- [hash checks]($BASE/hash-checks/results.html)" >> "$GITHUB_STEP_SUMMARY"
81
+ - name: Build PIP Package
82
+ run: make flit-build
@@ -1,11 +1,6 @@
1
- # scratchpad for local development
2
- scripts/scratchpad.py
3
-
4
1
  .claude/
5
2
 
6
-
7
- .env-backup
8
- e2e/
3
+ __marimo__/
9
4
 
10
5
  # astronomy data
11
6
  *.bsp
@@ -17,46 +12,52 @@ duckdb-extensions
17
12
  # Sky Object Database
18
13
  # ignore this because it's large and created on release
19
14
  sky.db
20
- *.parquet
21
15
  gaia*/
22
16
 
23
- # Catalogs
17
+ # Data Catalogs
24
18
  *.parquet
19
+ *.csv.gz
25
20
 
26
21
  # Data Folder
22
+ data/fonts/*
27
23
  data/build/*
28
24
  !data/build/.keep
29
- data/fonts/*
30
-
31
- # Big Sky Catalog
32
- # we ignore this because of its size (50+ MB)
33
- bigsky.*.csv.gz
34
- bigsky*.parquet
35
25
 
26
+ # Hash check results
36
27
  hash_checks/data/*.png
37
28
  hash_checks/results.html
38
29
 
30
+ # E2E test results
31
+ e2e/actual/
32
+
33
+ # local development scripts etc
34
+ /plots/
35
+ /claude/
39
36
  .tmp/
40
- temp*
37
+ scripts/temp*
41
38
  temp.py
42
39
  temp/
43
- # raw/
44
40
  scripts/temp/
45
- plots/
41
+ scripts/scratchpad.py
46
42
  scripts/__marimo__/
47
43
 
48
- # Documentation Generated Files
44
+ # Documentation - Generated Files
49
45
  examples/*.png
46
+ examples/*.svg
50
47
  examples/*.jpg
51
48
  examples/*.svg
52
49
  docs/images/examples/*.png
50
+ docs/images/examples/*.svg
53
51
  docs/images/examples/*.jpg
54
52
  docs/images/examples/*.svg
53
+ docs/images/reference/*.png
54
+ docs/images/reference/*.svg
55
+ docs/images/reference/*.jpg
56
+ docs/images/reference/*.html
55
57
  tutorial/*.png
56
58
  tutorial/*.svg
57
59
  docs/images/tutorial/*.png
58
60
  docs/images/tutorial/*.svg
59
- docs/images/reference/*.*
60
61
  docs/data/*.json
61
62
 
62
63
  # Profiling files
@@ -155,7 +156,7 @@ ipython_config.py
155
156
  __pypackages__/
156
157
 
157
158
  # Environments
158
- .env
159
+ .env*
159
160
  .venv
160
161
  env/
161
162
  venv/
@@ -20,5 +20,5 @@ keywords:
20
20
  - graphs
21
21
  - plotting
22
22
  license: MIT
23
- version: 0.20.6
24
- date-released: '2026-09-17'
23
+ version: 0.21.0
24
+ date-released: '2026-09-27'
@@ -0,0 +1,46 @@
1
+ ## Project
2
+ Starplot is a Python library for creating star charts and maps of the sky.
3
+
4
+ ## Important Dependencies
5
+ - Python
6
+ - pyproj
7
+ - skyfield
8
+ - shapely
9
+ - pydantic
10
+ - astropy
11
+ - ibis-framework
12
+ - fonttools
13
+ - cairosvg
14
+
15
+ ## Structure
16
+ - `src/` — All source code for the distributed Starplot library
17
+ - `tests/` — All unit tests
18
+ - `hash_checks/` — Image hash tests that confirm plots are created correctly
19
+ - `examples/` — Example code for various plots, used on the documentation website
20
+ - `tutorial/` - Code for the tutorial, used on the documentation website
21
+ - `docs/` — Documentation files (using Zensical for building)
22
+ - `data/` - Raw data for star names and translations
23
+ - `plots/` - Scratch code for local development
24
+
25
+ ## Commands
26
+ - Test: `make test`
27
+ - Format: `make format`
28
+ - Lint: `make lint`
29
+
30
+ ## Verification
31
+ After every change, run in this order:
32
+ 1. [Test command] — fix failing tests if they're failing because of your change
33
+ 2. [Format command] - fix formatting
34
+ 3. [Lint command] — fix lint errors
35
+ DO NOT run the hash checks unless specifically told to do so
36
+
37
+ ## Conventions
38
+ - When creating plots for research or investigating an issue:
39
+ - Put the source code in the `claude/` directory
40
+ - Put the output of the final plot in `claude/output/`
41
+ - Prefer SVG output, unless told otherwise
42
+ - Avoid comments that only describe what the code does (unless it's a docstring for a function)
43
+ - When it's not obvious why code does something a certain way, then a comment explaining _why_ should be added
44
+ - When writing tests, avoid mocking things when possible.
45
+ - HTTP requests should always be mocked in tests, but their mocked response should mimic the data structure of the real response
46
+ - When finishing a code task, include a bulleted list of files you modified and make them links to open in VSCode
@@ -18,33 +18,34 @@ If you're new to contributing to open source projects or git in general, then he
18
18
  2. Clone the repository to your local machine
19
19
  3. Create a new branch on your forked version
20
20
  4. Commit changes to your fork's branch
21
- 5. Open a pull request from your fork's branch into Starplot's `develop` branch ([here's an example](https://github.com/steveberardi/starplot/pull/89))
21
+ 5. Open a pull request from your fork's branch into Starplot's `main` branch ([here's an example](https://github.com/steveberardi/starplot/pull/89))
22
22
  6. Wait for someone to review your PR (usually a few days to a week)
23
23
 
24
24
 
25
25
  ## Getting Started
26
26
 
27
- The repository has a few helpers for developing locally:
28
-
29
- - `Makefile` with commands for various tasks (running tests, etc)
30
- - `Dockerfile` for running Starplot in an isolated environment
31
- - `scripts/scratchpad.py` for running scratch code
27
+ The repository has a `Makefile` with commands for various tasks (installing dependencies, running tests, etc). These should make it easier to get things running.
32
28
 
33
29
  When you're new to a codebase it's usually good to start by just checking out the code, building the development environment and running the tests. So, here's how to do that:
34
30
 
35
- 1. `make build` will build a Docker container with Starplot's source code mounted as a volume and will also install all of Starplot's dependencies (e.g. GDAL, Matplotlib, Skyfield, etc) - _this requires Docker to be installed first_
36
- 2. `make test` will run all the unit tests inside the Docker container
37
- 3. `make check-hashes` will run all the image hash checks and create an HTML file with the results (more on this below)
31
+ 0. Install system dependencies:
32
+ - **uv**: `pip install uv` if you don't already have `uv` installed
33
+ - **cairo**: [See Starplot install docs for details](https://starplot.dev/installation/)
34
+ 1. `make install` will install all dependencies (including development requirements) in a local virtual environment
35
+ 2. `make dev` will build the object name databases, download object catalogs, and download required fonts
36
+ 3. `make test` will run all the unit tests inside the virtual environment
37
+ 4. `make check-hashes` will run all the image hash checks and create an HTML file with the results (more on this below)
38
38
 
39
39
  There are also a few other `make` commands that are useful when developing locally:
40
40
 
41
41
  - `make marimo` will run a marimo edit session with `scripts/marimo.py` so you can quickly test out code and see its results in a [marimo notebook](https://marimo.io/)
42
- - `make scratchpad` will run `scripts/scratchpad.py` inside the docker container. The `scratchpad.py` file is not checked in to the repo (so you'll have to create it on your machine), but it's a way to run code with the current state of Starplot on your machine -- very helpful when trying things out.
42
+ - `make scratchpad` will run `scripts/scratchpad.py`. The `scratchpad.py` file is not checked in to the repo (so you'll have to create it on your machine), but it's a way to run code with the current state of Starplot on your machine -- very helpful when trying things out.
43
43
  - `make profile` will run `scripts/scratchpad.py` through Python's [built-in profiler](https://docs.python.org/3/library/profile.html#module-cProfile) and then start a [snakeviz](https://jiffyclub.github.io/snakeviz/) webserver locally to let you explore the call stack and see runtimes of everything. This can be very helpful when trying to find bottlenecks in code.
44
- - `make shell` will open a Python shell on the Docker container
45
44
  - `make format` will format the code with our standard formatter
46
45
  - `make lint` will check for lint (e.g. unused imports) and `make lint ARGS=--fix` can usually autofix things
47
46
  - `make docs-serve` will build the docs and start a local webserver for them
47
+ - `make examples` and `make tutorial` will build images for those sections of the documentation
48
+ - `make docs` will build all the other documentation assets and clear the cache
48
49
 
49
50
  ## Tests
50
51
 
@@ -0,0 +1,29 @@
1
+ ARG PYTHON_VERSION=3.12.14
2
+ FROM python:${PYTHON_VERSION}-trixie
3
+
4
+ WORKDIR /starplot
5
+
6
+ COPY . .
7
+
8
+ ENV UV_PROJECT_ENVIRONMENT=/usr/local
9
+ ENV STARPLOT_DATA_PATH=/starplot/data
10
+ ENV PYTHONPATH=/starplot/src/
11
+
12
+ # Install Cairo (for PNG exports)
13
+ RUN apt update && apt install libcairo2-dev
14
+
15
+ RUN pip install uv
16
+ RUN uv sync --all-groups --all-extras
17
+
18
+ RUN git config --global --add safe.directory /starplot
19
+
20
+ # Build database
21
+ RUN uv run data/scripts/db.py
22
+
23
+ # Install fonts etc
24
+ RUN uv run starplot setup
25
+
26
+ # Install fonts used in tests
27
+ RUN uv run scripts/download_test_fonts.py
28
+
29
+ CMD ["bash", "-c", "uv run pytest ."]
@@ -0,0 +1,177 @@
1
+ PYTHON_VERSION=3.12
2
+
3
+ ifeq ($(CI), true)
4
+ DR_ARGS=-e FLIT_USERNAME -e FLIT_PASSWORD
5
+ else
6
+ DR_ARGS=-it
7
+ #--env-file ./.env
8
+ endif
9
+
10
+ DOTENV=--env-file $(shell pwd)/.env
11
+ DOCKER_RUN=docker run --rm $(DR_ARGS) -v $(shell pwd):/starplot starplot-dev bash -c
12
+
13
+ DOCKER_BUILD_PYTHON=docker build -t starplot-$(PYTHON_VERSION) $(DOCKER_BUILD_ARGS) --build-arg="PYTHON_VERSION=$(PYTHON_VERSION)" .
14
+ DOCKER_RUN_PYTHON_TEST=docker run --rm $(DR_ARGS) starplot-$(PYTHON_VERSION)
15
+
16
+ export PYTHONPATH=./src/
17
+
18
+ # ------------------------------------------------------------------
19
+ install:
20
+ uv sync --all-groups --all-extras
21
+
22
+ build: PYTHON_VERSION=3.12.12
23
+ build: DOCKER_BUILD_ARGS=-t starplot-dev
24
+ build:
25
+ touch -a .env
26
+ $(DOCKER_BUILD_PYTHON)
27
+
28
+ env:
29
+ test -f .env || echo "STARPLOT_DATA_PATH=$(CURDIR)/data/" > .env
30
+
31
+ lint:
32
+ uv run $(DOTENV) ruff check $(ARGS) src/ tests/ hash_checks/
33
+
34
+ format:
35
+ uv run $(DOTENV) ruff format $(ARGS) src/ tests/ scripts/ examples/ hash_checks/ tutorial/ data/
36
+
37
+ test:
38
+ uv run $(DOTENV) pytest $(ARGS) --cov=src/ --cov-report=term --cov-report=html tests/
39
+
40
+ test-python-version:
41
+ uv run $(DOTENV) --python $(PYTHON_VERSION) --isolated pytest tests/
42
+
43
+ check-hashes:
44
+ rm -f hash_checks/data/*.png
45
+ uv run $(DOTENV) python hash_checks/hashio.py check
46
+
47
+ check-hashes-python-version:
48
+ rm -f hash_checks/data/*.png
49
+ uv run $(DOTENV) --python $(PYTHON_VERSION) hash_checks/hashio.py check
50
+
51
+ lock-hashes:
52
+ uv run $(DOTENV) python hash_checks/hashio.py lock
53
+
54
+ e2e:
55
+ find e2e/actual -name '*.svg' -delete 2>/dev/null || true
56
+ uv run $(DOTENV) --python $(PYTHON_VERSION) e2e/run.py
57
+
58
+ e2e-lock:
59
+ find e2e/actual -name '*.svg' -delete 2>/dev/null || true
60
+ uv run $(DOTENV) python e2e/run.py --lock
61
+
62
+ shell:
63
+ uv run $(DOTENV) ipython
64
+
65
+ marimo: DR_ARGS=-it -p 9009:9009
66
+ marimo:
67
+ uv run $(DOTENV) marimo edit scripts/marimo.py --no-token --host 0.0.0.0 --port 9009
68
+
69
+ examples:
70
+ cd examples && rm -f *.png && rm -f *.jpg && uv run $(DOTENV) examples.py
71
+
72
+ tutorial:
73
+ cd tutorial && uv run $(DOTENV) build.py
74
+
75
+ profile: DR_ARGS=-it -p 8081:8081
76
+ profile:
77
+ $(DOCKER_RUN) "python -m cProfile -o temp/results.prof scripts/scratchpad.py && \
78
+ snakeviz -s -p 8081 -H 0.0.0.0 temp/results.prof"
79
+
80
+ db:
81
+ uv run $(DOTENV) data/scripts/db.py
82
+
83
+ build-data-clean:
84
+ mkdir -p data/build
85
+ rm -rf data/build/*
86
+
87
+ build-star-designations:
88
+ uv run $(DOTENV) data/scripts/star_designations.py
89
+
90
+ version:
91
+ uv run $(DOTENV) python -c 'import starplot as sp; print(sp.__version__)'
92
+
93
+ setup:
94
+ uv run $(DOTENV) starplot setup
95
+
96
+ download-test-fonts:
97
+ uv run $(DOTENV) scripts/download_test_fonts.py
98
+
99
+ dev: env db setup download-test-fonts
100
+
101
+ # ------------------------------------------------------------------
102
+ # Python version testing
103
+ # ------------------------------------------------------------------
104
+ test-3.10: PYTHON_VERSION=3.10.21
105
+ test-3.10:
106
+ $(DOCKER_BUILD_PYTHON)
107
+ $(DOCKER_RUN_PYTHON_TEST)
108
+
109
+ test-3.11: PYTHON_VERSION=3.11.16
110
+ test-3.11:
111
+ $(DOCKER_BUILD_PYTHON)
112
+ $(DOCKER_RUN_PYTHON_TEST)
113
+
114
+ test-3.12: PYTHON_VERSION=3.12.14
115
+ test-3.12:
116
+ $(DOCKER_BUILD_PYTHON)
117
+ $(DOCKER_RUN_PYTHON_TEST)
118
+
119
+ test-3.13: PYTHON_VERSION=3.13.15
120
+ test-3.13:
121
+ $(DOCKER_BUILD_PYTHON)
122
+ $(DOCKER_RUN_PYTHON_TEST)
123
+
124
+ # there are warnings with 3.14, but tests/checks pass
125
+ # needs more investigation
126
+ test-3.14: PYTHON_VERSION=3.14.7
127
+ test-3.14:
128
+ $(DOCKER_BUILD_PYTHON)
129
+ $(DOCKER_RUN_PYTHON_TEST)
130
+
131
+ # ------------------------------------------------------------------
132
+ # Docs
133
+ docs-serve:
134
+ uv run $(DOTENV) zensical serve
135
+
136
+ docs-build:
137
+ uv run $(DOTENV) zensical build -c
138
+
139
+ docs-references:
140
+ uv run $(DOTENV) docs/scripts/data.py
141
+ uv run $(DOTENV) docs/scripts/markers.py
142
+ uv run $(DOTENV) docs/scripts/gradients.py
143
+ uv run $(DOTENV) docs/scripts/projections.py
144
+ uv run $(DOTENV) docs/scripts/projection_list.py
145
+ uv run $(DOTENV) docs/scripts/style_explorer.py
146
+
147
+ docs: docs-references docs-build
148
+
149
+
150
+ # ------------------------------------------------------------------
151
+ # PyPi - build & publish
152
+ flit-build:
153
+ uv run $(DOTENV) flit build --no-use-vcs
154
+
155
+ flit-publish:
156
+ uv run $(DOTENV) flit publish
157
+
158
+ flit-install:
159
+ FLIT_ROOT_INSTALL=1 flit install
160
+
161
+ # ------------------------------------------------------------------
162
+ # Utils
163
+ scripts:
164
+ uv run $(DOTENV) python ./scripts/$(SCRIPT).py
165
+
166
+ list-fonts:
167
+ uv run $(DOTENV) python ./scripts/list_fonts.py
168
+
169
+ clean:
170
+ rm -rf __pycache__
171
+ rm -rf venv
172
+ rm -rf dist
173
+ rm -rf site
174
+ rm -rf htmlcov
175
+ rm -f tests/data/*.png
176
+
177
+ .PHONY: build test shell flit-build flit-publish clean ephemeris examples scripts tutorial list-fonts e2e