starplot 0.21.4__tar.gz → 0.23.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 (377) hide show
  1. {starplot-0.21.4 → starplot-0.23.0}/.github/workflows/test.yml +1 -1
  2. {starplot-0.21.4 → starplot-0.23.0}/CITATION.cff +2 -2
  3. {starplot-0.21.4 → starplot-0.23.0}/Makefile +1 -6
  4. {starplot-0.21.4 → starplot-0.23.0}/PKG-INFO +3 -4
  5. {starplot-0.21.4 → starplot-0.23.0}/data/raw/translations/de/constellation_names.csv +3 -1
  6. {starplot-0.21.4 → starplot-0.23.0}/data/raw/translations/de/other_terms.csv +1 -0
  7. {starplot-0.21.4 → starplot-0.23.0}/data/raw/translations/en-us/other_terms.csv +2 -1
  8. {starplot-0.21.4 → starplot-0.23.0}/data/raw/translations/es/other_terms.csv +2 -1
  9. {starplot-0.21.4 → starplot-0.23.0}/data/raw/translations/fa/other_terms.csv +1 -0
  10. {starplot-0.21.4 → starplot-0.23.0}/data/raw/translations/fr/other_terms.csv +1 -0
  11. {starplot-0.21.4 → starplot-0.23.0}/data/raw/translations/it/other_terms.csv +1 -0
  12. {starplot-0.21.4 → starplot-0.23.0}/data/raw/translations/lt/constellation_names.csv +1 -1
  13. {starplot-0.21.4 → starplot-0.23.0}/data/raw/translations/lt/other_terms.csv +1 -0
  14. {starplot-0.21.4 → starplot-0.23.0}/data/raw/translations/nl/other_terms.csv +1 -0
  15. {starplot-0.21.4 → starplot-0.23.0}/data/raw/translations/readme.md +1 -1
  16. {starplot-0.21.4 → starplot-0.23.0}/data/raw/translations/zh-cn/other_terms.csv +1 -0
  17. {starplot-0.21.4 → starplot-0.23.0}/data/raw/translations/zh-tw/other_terms.csv +1 -0
  18. {starplot-0.21.4 → starplot-0.23.0}/docs/changelog.md +29 -1
  19. {starplot-0.21.4 → starplot-0.23.0}/docs/coming-soon.md +3 -2
  20. starplot-0.23.0/docs/examples/optic-image-overlay.md +14 -0
  21. {starplot-0.21.4 → starplot-0.23.0}/docs/examples.md +12 -6
  22. {starplot-0.21.4 → starplot-0.23.0}/docs/index.md +3 -2
  23. {starplot-0.21.4 → starplot-0.23.0}/docs/installation.md +1 -1
  24. {starplot-0.21.4 → starplot-0.23.0}/docs/models/index.md +1 -0
  25. {starplot-0.21.4 → starplot-0.23.0}/docs/models/optics.md +8 -0
  26. {starplot-0.21.4 → starplot-0.23.0}/docs/reference-settings.md +15 -1
  27. {starplot-0.21.4 → starplot-0.23.0}/docs/scripts/markers.py +5 -1
  28. {starplot-0.21.4 → starplot-0.23.0}/docs/scripts/style_explorer.py +14 -8
  29. {starplot-0.21.4 → starplot-0.23.0}/docs/styling/index.md +7 -5
  30. {starplot-0.21.4 → starplot-0.23.0}/docs/styling/markers.md +8 -0
  31. {starplot-0.21.4 → starplot-0.23.0}/docs/styling/reference.md +15 -0
  32. starplot-0.23.0/examples/andromeda.jpeg +0 -0
  33. {starplot-0.21.4 → starplot-0.23.0}/examples/examples.py +1 -1
  34. {starplot-0.21.4 → starplot-0.23.0}/examples/horizon_gradient.py +1 -1
  35. {starplot-0.21.4 → starplot-0.23.0}/examples/map_canis_major.py +1 -1
  36. starplot-0.23.0/examples/optic_image_overlay.py +97 -0
  37. {starplot-0.21.4 → starplot-0.23.0}/hash_checks/hashlock.yml +32 -27
  38. {starplot-0.21.4 → starplot-0.23.0}/hash_checks/map_checks.py +6 -7
  39. {starplot-0.21.4 → starplot-0.23.0}/hash_checks/optic_checks.py +51 -1
  40. {starplot-0.21.4 → starplot-0.23.0}/hash_checks/zenith_checks.py +27 -27
  41. {starplot-0.21.4 → starplot-0.23.0}/pyproject.toml +2 -3
  42. {starplot-0.21.4 → starplot-0.23.0}/scripts/download_test_fonts.py +1 -1
  43. {starplot-0.21.4 → starplot-0.23.0}/scripts/svg.py +1 -1
  44. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/__init__.py +3 -20
  45. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/callables.py +3 -0
  46. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/cli.py +1 -1
  47. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/constants.py +6 -0
  48. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/data/__init__.py +1 -1
  49. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/data/catalogs.py +5 -5
  50. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/data/constellations.py +4 -3
  51. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/data/db.py +1 -1
  52. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/data/dsos.py +4 -3
  53. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/data/library/constellation_names.parquet +0 -0
  54. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/data/library/dso_names.parquet +0 -0
  55. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/data/library/star_designations.parquet +0 -0
  56. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/data/stars.py +4 -3
  57. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/data/translations.py +10 -0
  58. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/geometry.py +13 -9
  59. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/models/__init__.py +1 -0
  60. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/models/constellation.py +5 -4
  61. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/models/dso.py +2 -2
  62. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/models/observer.py +21 -10
  63. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/models/optics.py +43 -0
  64. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/models/star.py +2 -2
  65. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/plots/base.py +13 -9
  66. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/plots/galaxy.py +7 -7
  67. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/plots/horizon.py +2 -0
  68. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/plots/map.py +2 -0
  69. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/plots/optic.py +100 -11
  70. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/plotters/__init__.py +1 -0
  71. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/plotters/arrow.py +1 -1
  72. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/plotters/constellations.py +5 -5
  73. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/plotters/dsos.py +18 -19
  74. starplot-0.23.0/src/starplot/plotters/image.py +249 -0
  75. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/plotters/milkyway.py +9 -9
  76. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/plotters/stars.py +107 -96
  77. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/plotters/text.py +23 -7
  78. starplot-0.21.4/src/starplot/config.py → starplot-0.23.0/src/starplot/settings.py +34 -0
  79. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/styles/elements.py +39 -2
  80. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/styles/ext/antique.yml +26 -25
  81. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/styles/ext/blue_dark.yml +20 -19
  82. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/styles/ext/blue_gold.yml +15 -14
  83. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/styles/ext/blue_light.yml +8 -7
  84. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/styles/ext/blue_medium.yml +11 -10
  85. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/styles/ext/blue_night.yml +18 -17
  86. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/styles/ext/cb_wong.yml +8 -7
  87. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/styles/ext/grayscale.yml +1 -1
  88. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/styles/ext/grayscale_dark.yml +13 -12
  89. starplot-0.23.0/src/starplot/styles/ext/horizon.yml +6 -0
  90. starplot-0.23.0/src/starplot/styles/ext/map.yml +13 -0
  91. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/styles/ext/nord.yml +14 -13
  92. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/styles/ext/optic.yml +16 -5
  93. starplot-0.23.0/src/starplot/styles/ext/publication.yml +9 -0
  94. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/styles/ext/starplot.yml +24 -23
  95. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/styles/helpers.py +12 -3
  96. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/styles/plot.py +46 -47
  97. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/styles/types.py +1 -0
  98. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/svg/canvas.py +60 -6
  99. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/svg/elements.py +11 -0
  100. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/svg/fonts.py +1 -1
  101. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/svg/layout.py +1 -1
  102. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/svg/symbols.py +80 -7
  103. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/utils.py +25 -3
  104. {starplot-0.21.4 → starplot-0.23.0}/tests/conftest.py +4 -2
  105. {starplot-0.21.4 → starplot-0.23.0}/tests/models/test_dso.py +4 -0
  106. {starplot-0.21.4 → starplot-0.23.0}/tests/models/test_observer.py +25 -0
  107. {starplot-0.21.4 → starplot-0.23.0}/tests/models/test_optics.py +25 -1
  108. {starplot-0.21.4 → starplot-0.23.0}/tests/models/test_solar_system.py +6 -6
  109. {starplot-0.21.4 → starplot-0.23.0}/tests/models/test_star.py +6 -0
  110. {starplot-0.21.4 → starplot-0.23.0}/tests/svg/test_canvas.py +3 -4
  111. {starplot-0.21.4 → starplot-0.23.0}/tests/svg/test_symbols.py +111 -53
  112. starplot-0.23.0/tests/test_data.py +21 -0
  113. {starplot-0.21.4 → starplot-0.23.0}/tests/test_geometry.py +26 -0
  114. starplot-0.23.0/tests/test_image.py +249 -0
  115. {starplot-0.21.4 → starplot-0.23.0}/tests/test_languages.py +52 -4
  116. {starplot-0.21.4 → starplot-0.23.0}/tests/test_map.py +52 -2
  117. starplot-0.23.0/tests/test_optic.py +186 -0
  118. starplot-0.23.0/tests/test_settings.py +51 -0
  119. {starplot-0.21.4 → starplot-0.23.0}/tests/test_styles.py +59 -2
  120. starplot-0.21.4/src/starplot/styles/ext/horizon.yml +0 -5
  121. starplot-0.21.4/src/starplot/styles/ext/map.yml +0 -12
  122. starplot-0.21.4/src/starplot/styles/ext/publication.yml +0 -8
  123. starplot-0.21.4/tests/test_data.py +0 -18
  124. starplot-0.21.4/tests/test_optic.py +0 -53
  125. starplot-0.21.4/tests/test_settings.py +0 -22
  126. {starplot-0.21.4 → starplot-0.23.0}/.dockerignore +0 -0
  127. {starplot-0.21.4 → starplot-0.23.0}/.github/FUNDING.yml +0 -0
  128. {starplot-0.21.4 → starplot-0.23.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  129. {starplot-0.21.4 → starplot-0.23.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  130. {starplot-0.21.4 → starplot-0.23.0}/.github/workflows/archives.yaml +0 -0
  131. {starplot-0.21.4 → starplot-0.23.0}/.github/workflows/docs.yml +0 -0
  132. {starplot-0.21.4 → starplot-0.23.0}/.github/workflows/release.yml +0 -0
  133. {starplot-0.21.4 → starplot-0.23.0}/.gitignore +0 -0
  134. /starplot-0.21.4/CLAUDE.md → /starplot-0.23.0/AGENTS.md +0 -0
  135. {starplot-0.21.4 → starplot-0.23.0}/CODE_OF_CONDUCT.md +0 -0
  136. {starplot-0.21.4 → starplot-0.23.0}/CONTRIBUTING.md +0 -0
  137. {starplot-0.21.4 → starplot-0.23.0}/Dockerfile +0 -0
  138. {starplot-0.21.4 → starplot-0.23.0}/LICENSE +0 -0
  139. {starplot-0.21.4 → starplot-0.23.0}/README.md +0 -0
  140. {starplot-0.21.4 → starplot-0.23.0}/data/raw/constellation_borders.json +0 -0
  141. {starplot-0.21.4 → starplot-0.23.0}/data/raw/constellations.json +0 -0
  142. {starplot-0.21.4 → starplot-0.23.0}/data/raw/milkyway.json +0 -0
  143. {starplot-0.21.4 → starplot-0.23.0}/data/raw/star_designations.csv +0 -0
  144. {starplot-0.21.4 → starplot-0.23.0}/data/raw/translations/de/dso_names.csv +0 -0
  145. {starplot-0.21.4 → starplot-0.23.0}/data/raw/translations/de/readme.md +0 -0
  146. {starplot-0.21.4 → starplot-0.23.0}/data/raw/translations/de/star_names.csv +0 -0
  147. {starplot-0.21.4 → starplot-0.23.0}/data/raw/translations/en-us/constellation_names.csv +0 -0
  148. {starplot-0.21.4 → starplot-0.23.0}/data/raw/translations/en-us/dso_names.csv +0 -0
  149. {starplot-0.21.4 → starplot-0.23.0}/data/raw/translations/en-us/star_names.csv +0 -0
  150. {starplot-0.21.4 → starplot-0.23.0}/data/raw/translations/es/constellation_names.csv +0 -0
  151. {starplot-0.21.4 → starplot-0.23.0}/data/raw/translations/es/dso_names.csv +0 -0
  152. {starplot-0.21.4 → starplot-0.23.0}/data/raw/translations/es/star_names.csv +0 -0
  153. {starplot-0.21.4 → starplot-0.23.0}/data/raw/translations/fa/constellation_names.csv +0 -0
  154. {starplot-0.21.4 → starplot-0.23.0}/data/raw/translations/fa/dso_names.csv +0 -0
  155. {starplot-0.21.4 → starplot-0.23.0}/data/raw/translations/fa/star_names.csv +0 -0
  156. {starplot-0.21.4 → starplot-0.23.0}/data/raw/translations/fr/constellation_names.csv +0 -0
  157. {starplot-0.21.4 → starplot-0.23.0}/data/raw/translations/fr/dso_names.csv +0 -0
  158. {starplot-0.21.4 → starplot-0.23.0}/data/raw/translations/fr/star_names.csv +0 -0
  159. {starplot-0.21.4 → starplot-0.23.0}/data/raw/translations/it/constellation_names.csv +0 -0
  160. {starplot-0.21.4 → starplot-0.23.0}/data/raw/translations/it/dso_names.csv +0 -0
  161. {starplot-0.21.4 → starplot-0.23.0}/data/raw/translations/it/readme.md +0 -0
  162. {starplot-0.21.4 → starplot-0.23.0}/data/raw/translations/it/star_names.csv +0 -0
  163. {starplot-0.21.4 → starplot-0.23.0}/data/raw/translations/lt/dso_names.csv +0 -0
  164. {starplot-0.21.4 → starplot-0.23.0}/data/raw/translations/lt/readme.md +0 -0
  165. {starplot-0.21.4 → starplot-0.23.0}/data/raw/translations/lt/star_names.csv +0 -0
  166. {starplot-0.21.4 → starplot-0.23.0}/data/raw/translations/nl/constellation_names.csv +0 -0
  167. {starplot-0.21.4 → starplot-0.23.0}/data/raw/translations/nl/dso_names.csv +0 -0
  168. {starplot-0.21.4 → starplot-0.23.0}/data/raw/translations/nl/readme.md +0 -0
  169. {starplot-0.21.4 → starplot-0.23.0}/data/raw/translations/nl/star_names.csv +0 -0
  170. {starplot-0.21.4 → starplot-0.23.0}/data/raw/translations/zh-cn/constellation_names.csv +0 -0
  171. {starplot-0.21.4 → starplot-0.23.0}/data/raw/translations/zh-cn/dso_names.csv +0 -0
  172. {starplot-0.21.4 → starplot-0.23.0}/data/raw/translations/zh-cn/star_names.csv +0 -0
  173. {starplot-0.21.4 → starplot-0.23.0}/data/raw/translations/zh-tw/constellation_names.csv +0 -0
  174. {starplot-0.21.4 → starplot-0.23.0}/data/raw/translations/zh-tw/dso_names.csv +0 -0
  175. {starplot-0.21.4 → starplot-0.23.0}/data/raw/translations/zh-tw/readme.md +0 -0
  176. {starplot-0.21.4 → starplot-0.23.0}/data/raw/translations/zh-tw/star_names.csv +0 -0
  177. {starplot-0.21.4 → starplot-0.23.0}/data/readme.md +0 -0
  178. {starplot-0.21.4 → starplot-0.23.0}/data/scripts/constellation_names.py +0 -0
  179. {starplot-0.21.4 → starplot-0.23.0}/data/scripts/data_settings.py +0 -0
  180. {starplot-0.21.4 → starplot-0.23.0}/data/scripts/db.py +0 -0
  181. {starplot-0.21.4 → starplot-0.23.0}/data/scripts/dso_names.py +0 -0
  182. {starplot-0.21.4 → starplot-0.23.0}/data/scripts/star_designations.py +0 -0
  183. {starplot-0.21.4 → starplot-0.23.0}/data/scripts/translations.py +0 -0
  184. {starplot-0.21.4 → starplot-0.23.0}/docs/about.md +0 -0
  185. {starplot-0.21.4 → starplot-0.23.0}/docs/css/extra.css +0 -0
  186. {starplot-0.21.4 → starplot-0.23.0}/docs/custom/main.html +0 -0
  187. {starplot-0.21.4 → starplot-0.23.0}/docs/data/building.md +0 -0
  188. {starplot-0.21.4 → starplot-0.23.0}/docs/data/constellations.md +0 -0
  189. {starplot-0.21.4 → starplot-0.23.0}/docs/data/dsos.md +0 -0
  190. {starplot-0.21.4 → starplot-0.23.0}/docs/data/index.md +0 -0
  191. {starplot-0.21.4 → starplot-0.23.0}/docs/data/stars.md +0 -0
  192. {starplot-0.21.4 → starplot-0.23.0}/docs/data-sources.md +0 -0
  193. {starplot-0.21.4 → starplot-0.23.0}/docs/examples/horizon-double-cluster.md +0 -0
  194. {starplot-0.21.4 → starplot-0.23.0}/docs/examples/horizon-gradient.md +0 -0
  195. {starplot-0.21.4 → starplot-0.23.0}/docs/examples/horizon-sgr.md +0 -0
  196. {starplot-0.21.4 → starplot-0.23.0}/docs/examples/map-big-dipper.md +0 -0
  197. {starplot-0.21.4 → starplot-0.23.0}/docs/examples/map-big.md +0 -0
  198. {starplot-0.21.4 → starplot-0.23.0}/docs/examples/map-canis-major.md +0 -0
  199. {starplot-0.21.4 → starplot-0.23.0}/docs/examples/map-carina-nebula.md +0 -0
  200. {starplot-0.21.4 → starplot-0.23.0}/docs/examples/map-cassiopeia.md +0 -0
  201. {starplot-0.21.4 → starplot-0.23.0}/docs/examples/map-custom-marker.md +0 -0
  202. {starplot-0.21.4 → starplot-0.23.0}/docs/examples/map-galaxy.md +0 -0
  203. {starplot-0.21.4 → starplot-0.23.0}/docs/examples/map-milky-way-stars.md +0 -0
  204. {starplot-0.21.4 → starplot-0.23.0}/docs/examples/map-orion.md +0 -0
  205. {starplot-0.21.4 → starplot-0.23.0}/docs/examples/map-orthographic.md +0 -0
  206. {starplot-0.21.4 → starplot-0.23.0}/docs/examples/map-sagittarius.md +0 -0
  207. {starplot-0.21.4 → starplot-0.23.0}/docs/examples/map-virgo-cluster.md +0 -0
  208. {starplot-0.21.4 → starplot-0.23.0}/docs/examples/optic-iss-transit.md +0 -0
  209. {starplot-0.21.4 → starplot-0.23.0}/docs/examples/optic-m45.md +0 -0
  210. {starplot-0.21.4 → starplot-0.23.0}/docs/examples/optic-orion.md +0 -0
  211. {starplot-0.21.4 → starplot-0.23.0}/docs/examples/optic-solar-eclipse.md +0 -0
  212. {starplot-0.21.4 → starplot-0.23.0}/docs/examples/star-chart-basic.md +0 -0
  213. {starplot-0.21.4 → starplot-0.23.0}/docs/examples/star-chart-detail.md +0 -0
  214. {starplot-0.21.4 → starplot-0.23.0}/docs/examples/star-chart-french.md +0 -0
  215. {starplot-0.21.4 → starplot-0.23.0}/docs/images/celestial-globe.svg +0 -0
  216. {starplot-0.21.4 → starplot-0.23.0}/docs/images/cover-front-sm-360.png +0 -0
  217. {starplot-0.21.4 → starplot-0.23.0}/docs/images/discord.svg +0 -0
  218. {starplot-0.21.4 → starplot-0.23.0}/docs/images/examples/.keep +0 -0
  219. {starplot-0.21.4 → starplot-0.23.0}/docs/images/favicon.png +0 -0
  220. {starplot-0.21.4 → starplot-0.23.0}/docs/images/figure_layout.svg +0 -0
  221. {starplot-0.21.4 → starplot-0.23.0}/docs/images/logo-2400px.png +0 -0
  222. {starplot-0.21.4 → starplot-0.23.0}/docs/images/logo-original/banner.png +0 -0
  223. {starplot-0.21.4 → starplot-0.23.0}/docs/images/logo-original/banner.svg +0 -0
  224. {starplot-0.21.4 → starplot-0.23.0}/docs/images/logo-original/banner.vectornator +0 -0
  225. {starplot-0.21.4 → starplot-0.23.0}/docs/images/logo-original/logo.png +0 -0
  226. {starplot-0.21.4 → starplot-0.23.0}/docs/images/logo-original/logo.svg +0 -0
  227. {starplot-0.21.4 → starplot-0.23.0}/docs/images/logo-original/logo.vectornator +0 -0
  228. {starplot-0.21.4 → starplot-0.23.0}/docs/images/logo-original/logo2.png +0 -0
  229. {starplot-0.21.4 → starplot-0.23.0}/docs/images/logo.svg +0 -0
  230. {starplot-0.21.4 → starplot-0.23.0}/docs/images/logo2.vectornator +0 -0
  231. {starplot-0.21.4 → starplot-0.23.0}/docs/images/logo500.png +0 -0
  232. {starplot-0.21.4 → starplot-0.23.0}/docs/images/mono-2400px.png +0 -0
  233. {starplot-0.21.4 → starplot-0.23.0}/docs/images/mono.png +0 -0
  234. {starplot-0.21.4 → starplot-0.23.0}/docs/images/mono.svg +0 -0
  235. {starplot-0.21.4 → starplot-0.23.0}/docs/images/star.svg +0 -0
  236. {starplot-0.21.4 → starplot-0.23.0}/docs/images/starplot-header.svg +0 -0
  237. {starplot-0.21.4 → starplot-0.23.0}/docs/images/tutorial/.keep +0 -0
  238. {starplot-0.21.4 → starplot-0.23.0}/docs/license.md +0 -0
  239. {starplot-0.21.4 → starplot-0.23.0}/docs/migration-guides/0.16.0.md +0 -0
  240. {starplot-0.21.4 → starplot-0.23.0}/docs/migration-guides/0.21.0.md +0 -0
  241. {starplot-0.21.4 → starplot-0.23.0}/docs/models/comet.md +0 -0
  242. {starplot-0.21.4 → starplot-0.23.0}/docs/models/constellation.md +0 -0
  243. {starplot-0.21.4 → starplot-0.23.0}/docs/models/dso.md +0 -0
  244. {starplot-0.21.4 → starplot-0.23.0}/docs/models/moon.md +0 -0
  245. {starplot-0.21.4 → starplot-0.23.0}/docs/models/object-list.md +0 -0
  246. {starplot-0.21.4 → starplot-0.23.0}/docs/models/observer.md +0 -0
  247. {starplot-0.21.4 → starplot-0.23.0}/docs/models/planet.md +0 -0
  248. {starplot-0.21.4 → starplot-0.23.0}/docs/models/satellite.md +0 -0
  249. {starplot-0.21.4 → starplot-0.23.0}/docs/models/star.md +0 -0
  250. {starplot-0.21.4 → starplot-0.23.0}/docs/models/sun.md +0 -0
  251. {starplot-0.21.4 → starplot-0.23.0}/docs/object-names/constellations.md +0 -0
  252. {starplot-0.21.4 → starplot-0.23.0}/docs/object-names/dsos.md +0 -0
  253. {starplot-0.21.4 → starplot-0.23.0}/docs/object-names/stars.md +0 -0
  254. {starplot-0.21.4 → starplot-0.23.0}/docs/reference-callables.md +0 -0
  255. {starplot-0.21.4 → starplot-0.23.0}/docs/reference-collisions.md +0 -0
  256. {starplot-0.21.4 → starplot-0.23.0}/docs/reference-galaxyplot.md +0 -0
  257. {starplot-0.21.4 → starplot-0.23.0}/docs/reference-horizonplot.md +0 -0
  258. {starplot-0.21.4 → starplot-0.23.0}/docs/reference-localization.md +0 -0
  259. {starplot-0.21.4 → starplot-0.23.0}/docs/reference-mapplot.md +0 -0
  260. {starplot-0.21.4 → starplot-0.23.0}/docs/reference-ongc.md +0 -0
  261. {starplot-0.21.4 → starplot-0.23.0}/docs/reference-opticplot.md +0 -0
  262. {starplot-0.21.4 → starplot-0.23.0}/docs/reference-positions.md +0 -0
  263. {starplot-0.21.4 → starplot-0.23.0}/docs/reference-projections.md +0 -0
  264. {starplot-0.21.4 → starplot-0.23.0}/docs/reference-selecting-objects.md +0 -0
  265. {starplot-0.21.4 → starplot-0.23.0}/docs/reference-zenithplot.md +0 -0
  266. {starplot-0.21.4 → starplot-0.23.0}/docs/robots.txt +0 -0
  267. {starplot-0.21.4 → starplot-0.23.0}/docs/scripts/data.py +0 -0
  268. {starplot-0.21.4 → starplot-0.23.0}/docs/scripts/gradients.py +0 -0
  269. {starplot-0.21.4 → starplot-0.23.0}/docs/scripts/projection_list.html +0 -0
  270. {starplot-0.21.4 → starplot-0.23.0}/docs/scripts/projection_list.py +0 -0
  271. {starplot-0.21.4 → starplot-0.23.0}/docs/scripts/projections.py +0 -0
  272. {starplot-0.21.4 → starplot-0.23.0}/docs/scripts/style_explorer.html +0 -0
  273. {starplot-0.21.4 → starplot-0.23.0}/docs/showcase.md +0 -0
  274. {starplot-0.21.4 → starplot-0.23.0}/docs/snippets/_newsletter.html +0 -0
  275. {starplot-0.21.4 → starplot-0.23.0}/docs/styling/color.md +0 -0
  276. {starplot-0.21.4 → starplot-0.23.0}/docs/styling/explorer.md +0 -0
  277. {starplot-0.21.4 → starplot-0.23.0}/docs/styling/extensions.md +0 -0
  278. {starplot-0.21.4 → starplot-0.23.0}/docs/styling/gradients.md +0 -0
  279. {starplot-0.21.4 → starplot-0.23.0}/docs/styling/layout.md +0 -0
  280. {starplot-0.21.4 → starplot-0.23.0}/docs/tutorial/01.md +0 -0
  281. {starplot-0.21.4 → starplot-0.23.0}/docs/tutorial/02.md +0 -0
  282. {starplot-0.21.4 → starplot-0.23.0}/docs/tutorial/03.md +0 -0
  283. {starplot-0.21.4 → starplot-0.23.0}/docs/tutorial/04.md +0 -0
  284. {starplot-0.21.4 → starplot-0.23.0}/docs/tutorial/05.md +0 -0
  285. {starplot-0.21.4 → starplot-0.23.0}/docs/tutorial/06.md +0 -0
  286. {starplot-0.21.4 → starplot-0.23.0}/docs/tutorial/07.md +0 -0
  287. {starplot-0.21.4 → starplot-0.23.0}/docs/tutorial/08.md +0 -0
  288. {starplot-0.21.4 → starplot-0.23.0}/docs/tutorial/09.md +0 -0
  289. {starplot-0.21.4 → starplot-0.23.0}/docs/tutorial/index.md +0 -0
  290. {starplot-0.21.4 → starplot-0.23.0}/examples/constellation.py +0 -0
  291. {starplot-0.21.4 → starplot-0.23.0}/examples/galaxy.py +0 -0
  292. {starplot-0.21.4 → starplot-0.23.0}/examples/gradient.py +0 -0
  293. {starplot-0.21.4 → starplot-0.23.0}/examples/horizon_double_cluster.py +0 -0
  294. {starplot-0.21.4 → starplot-0.23.0}/examples/map_big.py +0 -0
  295. {starplot-0.21.4 → starplot-0.23.0}/examples/map_big_dipper.py +0 -0
  296. {starplot-0.21.4 → starplot-0.23.0}/examples/map_carina.py +0 -0
  297. {starplot-0.21.4 → starplot-0.23.0}/examples/map_cas.py +0 -0
  298. {starplot-0.21.4 → starplot-0.23.0}/examples/map_equidistant.py +0 -0
  299. {starplot-0.21.4 → starplot-0.23.0}/examples/map_galaxy.py +0 -0
  300. {starplot-0.21.4 → starplot-0.23.0}/examples/map_milky_way_stars.py +0 -0
  301. {starplot-0.21.4 → starplot-0.23.0}/examples/map_orion.py +0 -0
  302. {starplot-0.21.4 → starplot-0.23.0}/examples/map_orthographic.py +0 -0
  303. {starplot-0.21.4 → starplot-0.23.0}/examples/map_sagittarius.py +0 -0
  304. {starplot-0.21.4 → starplot-0.23.0}/examples/map_virgo_cluster.py +0 -0
  305. {starplot-0.21.4 → starplot-0.23.0}/examples/optic_iss_transit.py +0 -0
  306. {starplot-0.21.4 → starplot-0.23.0}/examples/optic_m45.py +0 -0
  307. {starplot-0.21.4 → starplot-0.23.0}/examples/optic_orion_nebula.py +0 -0
  308. {starplot-0.21.4 → starplot-0.23.0}/examples/optic_solar_eclipse.py +0 -0
  309. {starplot-0.21.4 → starplot-0.23.0}/examples/star_chart_basic.py +0 -0
  310. {starplot-0.21.4 → starplot-0.23.0}/examples/star_chart_detail.py +0 -0
  311. {starplot-0.21.4 → starplot-0.23.0}/examples/star_chart_french.py +0 -0
  312. {starplot-0.21.4 → starplot-0.23.0}/hash_checks/__init__.py +0 -0
  313. {starplot-0.21.4 → starplot-0.23.0}/hash_checks/data/.keep +0 -0
  314. {starplot-0.21.4 → starplot-0.23.0}/hash_checks/flaky.py +0 -0
  315. {starplot-0.21.4 → starplot-0.23.0}/hash_checks/galaxy_checks.py +0 -0
  316. {starplot-0.21.4 → starplot-0.23.0}/hash_checks/hashio.py +0 -0
  317. {starplot-0.21.4 → starplot-0.23.0}/hash_checks/horizon_checks.py +0 -0
  318. {starplot-0.21.4 → starplot-0.23.0}/hash_checks/template.html +0 -0
  319. {starplot-0.21.4 → starplot-0.23.0}/scripts/list_fonts.py +0 -0
  320. {starplot-0.21.4 → starplot-0.23.0}/scripts/marimo.py +0 -0
  321. {starplot-0.21.4 → starplot-0.23.0}/scripts/voronoi.py +0 -0
  322. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/coordinates.py +0 -0
  323. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/data/ecliptic.py +0 -0
  324. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/data/library/readme.md +0 -0
  325. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/data/utils.py +0 -0
  326. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/mixins.py +0 -0
  327. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/models/base.py +0 -0
  328. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/models/comet.py +0 -0
  329. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/models/milky_way.py +0 -0
  330. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/models/moon.py +0 -0
  331. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/models/objects.py +0 -0
  332. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/models/planet.py +0 -0
  333. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/models/satellite.py +0 -0
  334. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/models/sun.py +0 -0
  335. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/plots/__init__.py +0 -0
  336. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/plots/zenith.py +0 -0
  337. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/plotters/gridlines.py +0 -0
  338. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/plotters/legend.py +0 -0
  339. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/profile.py +0 -0
  340. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/projections.py +0 -0
  341. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/styles/__init__.py +0 -0
  342. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/styles/base.py +0 -0
  343. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/styles/constants.py +0 -0
  344. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/styles/ext/gradient_presets.yml +0 -0
  345. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/styles/extensions.py +0 -0
  346. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/styles/gradients.py +0 -0
  347. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/svg/__init__.py +0 -0
  348. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/svg/png.py +0 -0
  349. {starplot-0.21.4 → starplot-0.23.0}/src/starplot/warnings.py +0 -0
  350. {starplot-0.21.4 → starplot-0.23.0}/tests/__init__.py +0 -0
  351. {starplot-0.21.4 → starplot-0.23.0}/tests/data/__init__.py +0 -0
  352. {starplot-0.21.4 → starplot-0.23.0}/tests/data/comets.txt +0 -0
  353. {starplot-0.21.4 → starplot-0.23.0}/tests/data/test_utils.py +0 -0
  354. {starplot-0.21.4 → starplot-0.23.0}/tests/models/__init__.py +0 -0
  355. {starplot-0.21.4 → starplot-0.23.0}/tests/models/test_comets.py +0 -0
  356. {starplot-0.21.4 → starplot-0.23.0}/tests/models/test_constellation.py +0 -0
  357. {starplot-0.21.4 → starplot-0.23.0}/tests/models/test_satellite.py +0 -0
  358. {starplot-0.21.4 → starplot-0.23.0}/tests/plots/__init__.py +0 -0
  359. {starplot-0.21.4 → starplot-0.23.0}/tests/plots/test_galaxy.py +0 -0
  360. {starplot-0.21.4 → starplot-0.23.0}/tests/plots/test_horizon.py +0 -0
  361. {starplot-0.21.4 → starplot-0.23.0}/tests/svg/__init__.py +0 -0
  362. {starplot-0.21.4 → starplot-0.23.0}/tests/svg/test_elements.py +0 -0
  363. {starplot-0.21.4 → starplot-0.23.0}/tests/svg/test_fonts.py +0 -0
  364. {starplot-0.21.4 → starplot-0.23.0}/tests/svg/test_layout.py +0 -0
  365. {starplot-0.21.4 → starplot-0.23.0}/tests/test_catalogs.py +0 -0
  366. {starplot-0.21.4 → starplot-0.23.0}/tests/test_cli.py +0 -0
  367. {starplot-0.21.4 → starplot-0.23.0}/tests/test_utils.py +0 -0
  368. {starplot-0.21.4 → starplot-0.23.0}/tests/utils.py +0 -0
  369. {starplot-0.21.4 → starplot-0.23.0}/tutorial/build.py +0 -0
  370. {starplot-0.21.4 → starplot-0.23.0}/tutorial/tutorial_02.py +0 -0
  371. {starplot-0.21.4 → starplot-0.23.0}/tutorial/tutorial_03.py +0 -0
  372. {starplot-0.21.4 → starplot-0.23.0}/tutorial/tutorial_04.py +0 -0
  373. {starplot-0.21.4 → starplot-0.23.0}/tutorial/tutorial_05.py +0 -0
  374. {starplot-0.21.4 → starplot-0.23.0}/tutorial/tutorial_06.py +0 -0
  375. {starplot-0.21.4 → starplot-0.23.0}/tutorial/tutorial_07.py +0 -0
  376. {starplot-0.21.4 → starplot-0.23.0}/tutorial/tutorial_08.py +0 -0
  377. {starplot-0.21.4 → starplot-0.23.0}/zensical.toml +0 -0
@@ -19,7 +19,7 @@ jobs:
19
19
  strategy:
20
20
  fail-fast: false
21
21
  matrix:
22
- python-version: ['3.10', '3.11', '3.12', '3.13', '3.14']
22
+ python-version: ['3.11', '3.12', '3.13', '3.14']
23
23
  steps:
24
24
  - uses: actions/checkout@v6
25
25
  - uses: astral-sh/setup-uv@bec219d24cd3e171d82865faccec33120bb574f4 # v10.1.0
@@ -20,5 +20,5 @@ keywords:
20
20
  - graphs
21
21
  - plotting
22
22
  license: MIT
23
- version: 0.21.4
24
- date-released: '2026-10-12'
23
+ version: 0.23.0
24
+ date-released: '2026-11-11'
@@ -101,11 +101,6 @@ dev: env db setup download-test-fonts
101
101
  # ------------------------------------------------------------------
102
102
  # Python version testing
103
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
104
  test-3.11: PYTHON_VERSION=3.11.16
110
105
  test-3.11:
111
106
  $(DOCKER_BUILD_PYTHON)
@@ -168,7 +163,7 @@ list-fonts:
168
163
 
169
164
  clean:
170
165
  rm -rf __pycache__
171
- rm -rf venv
166
+ rm -rf .venv
172
167
  rm -rf dist
173
168
  rm -rf site
174
169
  rm -rf htmlcov
@@ -1,14 +1,13 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: starplot
3
- Version: 0.21.4
3
+ Version: 0.23.0
4
4
  Summary: Star charts and maps of the sky
5
5
  Keywords: astronomy,stars,charts,maps,constellations,sky,plotting
6
6
  Author-email: Steve Berardi <steve@starplot.dev>
7
- Requires-Python: >=3.10,<3.15
7
+ Requires-Python: >=3.11,<3.15
8
8
  Description-Content-Type: text/markdown
9
9
  Classifier: License :: OSI Approved :: MIT License
10
10
  Classifier: Programming Language :: Python :: 3
11
- Classifier: Programming Language :: Python :: 3.10
12
11
  Classifier: Programming Language :: Python :: 3.11
13
12
  Classifier: Programming Language :: Python :: 3.12
14
13
  Classifier: Programming Language :: Python :: 3.13
@@ -27,7 +26,7 @@ Requires-Dist: pyarrow >= 14.0.2
27
26
  Requires-Dist: rtree >= 1.2.0
28
27
  Requires-Dist: pyqtree >= 1.0.0
29
28
  Requires-Dist: requests >= 2.31.0
30
- Requires-Dist: duckdb >= 1.4.4
29
+ Requires-Dist: duckdb < 2.0.0
31
30
  Requires-Dist: sqlglot >= 28.9.0
32
31
  Requires-Dist: ibis-framework[duckdb, geospatial] >= 11
33
32
  Requires-Dist: astropy-healpix >= 1.1.2
@@ -64,7 +64,9 @@ peg,Pegasus,Pegasus
64
64
  per,Perseus,Perseus
65
65
  phe,Phoenix,Phönix
66
66
  pic,Pictor,Maler
67
+ psc,Pisces,Fische
67
68
  psa,Piscis Austrinus,Südlicher Fisch
69
+ psc,Pisces,Fische
68
70
  pup,Puppis,Achterdeck des Schiffes
69
71
  pyx,Pyxis,Schiffskompass
70
72
  ret,Reticulum,Netz
@@ -86,4 +88,4 @@ umi,Ursa Minor,Kleiner Bär
86
88
  vel,Vela,Segel des Schiffes
87
89
  vir,Virgo,Jungfrau
88
90
  vol,Volans,Fliegender Fisch
89
- vul,Vulpecula,Fuchs
91
+ vul,Vulpecula,Fuchs
@@ -44,3 +44,4 @@ E (abbreviation for east),E (Abkürzung für Osten)
44
44
  S (abbreviation for south),S (Abkürzung für Süden)
45
45
  W (abbreviation for west),W (Abkürzung für Westen)
46
46
  Milky Way,Milchstraße
47
+ Horizon,Horizont
@@ -43,4 +43,5 @@ N (abbreviation for north),N (abbreviation for north)
43
43
  E (abbreviation for east),E (abbreviation for east)
44
44
  S (abbreviation for south),S (abbreviation for south)
45
45
  W (abbreviation for west),W (abbreviation for west)
46
- Milky Way,Milky Way
46
+ Milky Way,Milky Way
47
+ Horizon,horizon
@@ -43,4 +43,5 @@ N (abbreviation for north),N (abreviatura para norte)
43
43
  E (abbreviation for east),E (abreviatura para este)
44
44
  S (abbreviation for south),S (abreviatura para sur)
45
45
  W (abbreviation for west),O (abreviatura para oeste)
46
- Milky Way,Vía Láctea
46
+ Milky Way,Vía Láctea
47
+ Horizon,horizonte
@@ -44,3 +44,4 @@ E (abbreviation for east),ق
44
44
  S (abbreviation for south),ج
45
45
  W (abbreviation for west),غ
46
46
  Milky Way,کهکشان راه شیری
47
+ Horizon,افق
@@ -44,3 +44,4 @@ E (abbreviation for east),E
44
44
  S (abbreviation for south),S
45
45
  W (abbreviation for west),O
46
46
  Milky Way,Voie lactée
47
+ Horizon,horizon
@@ -44,3 +44,4 @@ E (abbreviation for east),E
44
44
  S (abbreviation for south),S
45
45
  W (abbreviation for west),O
46
46
  Milky Way,Via Lattea
47
+ Horizon,orizzonte
@@ -65,7 +65,7 @@ per,Perseus,Persėjas
65
65
  phe,Phoenix,Feniksas
66
66
  pic,Pictor,Dailidė
67
67
  psa,Piscis Austrinus,Pietų Žuvis
68
- psc,Pisces,Žuvys
68
+ psc,Pisces,Žuvys
69
69
  pup,Puppis,Laivagalis
70
70
  pyx,Pyxis,Kompasas
71
71
  ret,Reticulum,Tinklas
@@ -44,3 +44,4 @@ E (abbreviation for east),R
44
44
  S (abbreviation for south),P
45
45
  W (abbreviation for west),V
46
46
  Milky Way,Paukščių Takas
47
+ Horizon,horizontas
@@ -44,3 +44,4 @@ E (abbreviation for east),O
44
44
  S (abbreviation for south),Z
45
45
  W (abbreviation for west),W
46
46
  Milky Way,Melkweg
47
+ Horizon,horizon
@@ -29,7 +29,7 @@ Please follow these steps in a pull request to submit a new translation:
29
29
  - `star_names.csv`
30
30
  3. Add the ISO-639-1 code to:
31
31
  - `LANGUAGES` list [here](https://github.com/steveberardi/starplot/blob/main/src/starplot/data/translations.py)
32
- - Doc-string for `Settings.language` [here](https://github.com/steveberardi/starplot/blob/main/src/starplot/config.py)
32
+ - Doc-string for `Settings.language` [here](https://github.com/steveberardi/starplot/blob/main/src/starplot/settings.py)
33
33
  4. Copy the values from `other_terms.csv` to the `LABELS` dictionary [here](https://github.com/steveberardi/starplot/blob/main/src/starplot/data/translations.py)
34
34
  5. Include a `readme.md` file in the data folder that explains the source of the translation (e.g. a well known astronomy book in the language, astronomical society, etc) - [see example here](https://github.com/steveberardi/starplot/blob/main/data/raw/translations/it/readme.md)
35
35
  6. Add test cases for the translation in [test_languages.py](https://github.com/steveberardi/starplot/blob/main/tests/test_languages.py)
@@ -44,3 +44,4 @@ E (abbreviation for east),东
44
44
  S (abbreviation for south),南
45
45
  W (abbreviation for west),西
46
46
  Milky Way,银河
47
+ Horizon,地平线
@@ -44,3 +44,4 @@ E (abbreviation for east),東
44
44
  S (abbreviation for south),南
45
45
  W (abbreviation for west),西
46
46
  Milky Way,銀河
47
+ Horizon,地平線
@@ -1,5 +1,33 @@
1
+ ## v0.23.x
2
+ [Documentation](https://archives.starplot.dev/0.23.0/)
3
+
4
+ - Adds an `image` overlay plotting function to map, horizon, and optic plots
5
+ - Normalizes sizing of circle-based markers
6
+ - Adds support for defining `where_*` kwargs as string SQL `WHERE` clauses
7
+ - Improved smoothing in the `ellipse` function
8
+ - Updates default DSO catalog to fix a bug with galaxy geometries
9
+ - **Breaking:** Restructures some `PlotStyle` fields:
10
+ - `bayer_labels` and `flamsteed_labels` are now `star.bayer_label` and `star.flamsteed_label`
11
+ - `constellation_lines`, `constellation_labels`, and `constellation_borders` are now `constellation.line`, `constellation.label`, and `constellation.border`
12
+ - `planets` is now `planet`
13
+
14
+ ---
15
+
16
+ ## v0.22.x
17
+ [Documentation](https://archives.starplot.dev/0.22.0/)
18
+
19
+ - Adds support for "naked eye" optic plots, increasing FOV limit to 60 degrees
20
+ - Adds support for plotting constellations, gridlines, and horizon on optic plots
21
+ - Updates default catalog for Milky Way
22
+ - Adds missing German translation for Pisces
23
+ - Fixes bug with grouping star label SVG elements
24
+ - Adds a double border circle marker
25
+ - Drops official support for Python 3.10 (EOL)
26
+
27
+ ---
28
+
1
29
  ## v0.21.x
2
- [Migration Guide](migration-guides/0.21.0.md)
30
+ [Documentation](https://archives.starplot.dev/0.21.4/) | [Migration Guide](migration-guides/0.21.0.md)
3
31
 
4
32
  - Replaces the plotting backend (matplotlib + cartopy) with an SVG-first backend
5
33
  - Adds support for gradient backgrounds on markers, polygons, and the figure background
@@ -8,18 +8,19 @@
8
8
 
9
9
  <table class="table-coming-soon">
10
10
  <tr>
11
- <td>v0.22</td>
11
+ <td>v0.24</td>
12
12
  <td>
13
13
  <h4>⭐ Next Release ⭐</h4>
14
14
  <ul>
15
15
  <li>Plot definition files</li>
16
16
  <li>CLI for creating plots</li>
17
+ <li>Improved labeling pipeline</li>
17
18
  </ul>
18
19
  </td>
19
20
  <td></td>
20
21
  </tr>
21
22
  <tr>
22
- <td>v0.23+</td>
23
+ <td>v0.25+</td>
23
24
  <td>
24
25
  <ul>
25
26
  <li>Planet moons</li>
@@ -0,0 +1,14 @@
1
+ ---
2
+ title: Image Overlay on an Optic Plot
3
+ ---
4
+ [:octicons-arrow-left-24: Back to Examples](../examples.md)
5
+
6
+ # Image Overlay on an Optic Plot {.example-header}
7
+
8
+ ![optic-image-overlay](../images/examples/optic_image_overlay.png)
9
+
10
+ Here's an example of plotting an image of the Andromeda Galaxy (M31) on an optic plot. The image is aligned to the sky using control points, which map pixel positions in the image with the known RA/DEC of the stars at those positions. You can use a plate solver like [tetra3rs](https://tetra3rs.dev/) to find these control points automatically.
11
+
12
+ ```python
13
+ --8<-- "examples/optic_image_overlay.py"
14
+ ```
@@ -68,15 +68,15 @@
68
68
  </a>
69
69
  </li>
70
70
  <li>
71
- <a href="examples/map-milky-way-stars/">
72
- <img src="images/examples/map_milky_way_stars-sm.png" alt="Stars of the Milky Way" class="off-glb">
73
- <p class="example-card-title">The Milky Way</p>
71
+ <a href="examples/optic-image-overlay/">
72
+ <img src="images/examples/optic_image_overlay-sm.png" alt="Image Overlay on an Optic Plot of the Andromeda Galaxy" class="off-glb" loading="lazy"/>
73
+ <p class="example-card-title">Image Overlay on an Optic Plot</p>
74
74
  </a>
75
75
  </li>
76
76
  <li>
77
- <a href="examples/map-big-dipper/">
78
- <img src="images/examples/map_big_dipper-sm.png" alt="Map of the Big Dipper" class="off-glb" loading="lazy"/>
79
- <p class="example-card-title">The Big Dipper</p>
77
+ <a href="examples/map-milky-way-stars/">
78
+ <img src="images/examples/map_milky_way_stars-sm.png" alt="Stars of the Milky Way" class="off-glb">
79
+ <p class="example-card-title">The Milky Way</p>
80
80
  </a>
81
81
  </li>
82
82
  <li>
@@ -103,6 +103,12 @@
103
103
  <p class="example-card-title">Orthographic Map</p>
104
104
  </a>
105
105
  </li>
106
+ <li>
107
+ <a href="examples/map-big-dipper/">
108
+ <img src="images/examples/map_big_dipper-sm.png" alt="Map of the Big Dipper" class="off-glb" loading="lazy"/>
109
+ <p class="example-card-title">The Big Dipper</p>
110
+ </a>
111
+ </li>
106
112
  <li>
107
113
  <a href="examples/map-canis-major/">
108
114
  <img src="images/examples/map_canis_major-sm.png" alt="Map of the Constellation Canis Major" class="off-glb" loading="lazy"/>
@@ -12,7 +12,7 @@ Starplot is a Python library for creating star charts and maps of the sky
12
12
  - <img src="images/examples/map_orion.png" width="600"> <h3>__Maps__</h3> shows an area that you define in one of many available map projections
13
13
  - <img src="images/examples/horizon_gradient.png" width="600"> <h3>Horizon Charts</h3> shows the horizon at a specific time and place
14
14
  - <img src="images/examples/star_chart_basic.png" height="600" width="600"> <h3>Zenith Charts</h3> shows the entire sky at a specific time and place
15
- - <img src="images/examples/optic_m45.png" width="600"> <h3>Optic Charts</h3> shows what you'll see through an optic (e.g. telescope) at a specific time and place
15
+ - <img src="images/examples/optic_image_overlay.png" width="600"> <h3>Optic Charts</h3> shows what you'll see through an optic (e.g. telescope) at a specific time and place
16
16
  - <img src="images/examples/galaxy.png" height="600" width="600"> <h3>Galaxy Charts</h3> shows the entire sky in galactic coordinates
17
17
 
18
18
  - <a href="examples/">
@@ -33,7 +33,8 @@ Starplot is a Python library for creating star charts and maps of the sky
33
33
  <li><strong>Planets and Deep Sky Objects (DSOs)</strong> - with support for plotting their true extent</li>
34
34
  <li><strong>Comets and Satellites</strong> - easy trajectory plotting</li>
35
35
  <li><strong>Custom Styles</strong> - for all objects and with 8+ built-in themes</li>
36
- <li><strong>Export to SVG or PNG</strong></li>
36
+ <li><strong>Export to SVG or PNG</strong> - with easy scaling for png exports</li>
37
+ <li><strong>Image overlays</strong> - given a set of control points</li>
37
38
  <li><strong>Data Backend</strong> - powered by DuckDB + Ibis for fast object lookup</li>
38
39
  <li><strong>Custom Data Catalogs</strong> - with helpers for building and optimizing</li>
39
40
  <li><strong>Label Collision Avoidance</strong> - ensuring all labels are readable</li>
@@ -2,7 +2,7 @@
2
2
 
3
3
  Starplot is available on [PyPI](https://pypi.org/project/starplot/) and [Conda](https://anaconda.org/channels/conda-forge/packages/starplot/overview), and its dependencies have binary wheels for most operating systems, so installation should be easy. See below for details.
4
4
 
5
- Supported Python versions: 3.10 / 3.11 / 3.12 / 3.13 / 3.14
5
+ Supported Python versions: 3.11 / 3.12 / 3.13 / 3.14
6
6
 
7
7
  <h3>1. Install Dependencies</h3>
8
8
 
@@ -49,6 +49,7 @@ Starplot has models to represent an observer and some of the objects you can plo
49
49
  ### :material-telescope: Optics
50
50
 
51
51
  - [Binoculars](optics.md#starplot.models.Binoculars)
52
+ - [NakedEye](optics.md#starplot.models.NakedEye)
52
53
  - [Scope](optics.md#starplot.models.Scope)
53
54
  - [Refractor](optics.md#starplot.models.Refractor)
54
55
  - [Reflector](optics.md#starplot.models.Reflector)
@@ -10,6 +10,14 @@ Optics are another set of models you instantiate directly when creating [OpticPl
10
10
  show_root_heading: true
11
11
  heading_level: 2
12
12
 
13
+ ::: starplot.models.NakedEye
14
+ options:
15
+ inherited_members: true
16
+ show_docstring_attributes: true
17
+ merge_init_into_class: true
18
+ show_root_heading: true
19
+ heading_level: 2
20
+
13
21
  ::: starplot.models.Scope
14
22
  options:
15
23
  inherited_members: true
@@ -29,6 +29,20 @@ STARPLOT_LANGUAGE=fr
29
29
  ```
30
30
  </div>
31
31
 
32
+ ## Temporary overrides
33
+
34
+ To change settings for just part of your code, call `settings` in a `with` block. The previous values are restored when the block exits:
35
+
36
+ ```python
37
+ from starplot import settings
38
+
39
+ with settings(language="de", svg_text_type="path"):
40
+ # Plots created here will use German labels and SVG text as paths
41
+ ...
42
+
43
+ # Back to the previous settings here
44
+ ```
45
+
32
46
  ---
33
47
 
34
48
  ## `data_path`
@@ -93,7 +107,7 @@ Number of decimal places to round coordinates and dimensions to when rendering S
93
107
 
94
108
 
95
109
  <!--
96
- ::: starplot.config.Settings
110
+ ::: starplot.settings.Settings
97
111
  options:
98
112
  show_docstring_attributes: true
99
113
  separate_signature: true
@@ -8,6 +8,7 @@ from typing import get_args
8
8
  from starplot import MapPlot, Miller
9
9
  from starplot.styles import MarkerStyle, ObjectStyle, PlotStyle, extensions
10
10
  from starplot.styles.types import MarkerSymbol
11
+ from starplot.svg import symbols
11
12
 
12
13
  OUTPUT_DIR = Path(__file__).resolve().parent.parent / "images" / "reference"
13
14
  OUTPUT_DIR.mkdir(parents=True, exist_ok=True)
@@ -50,15 +51,18 @@ marker_styles = {
50
51
  "star_4": default_style,
51
52
  "star_8": default_style,
52
53
  "triangle": default_style,
54
+ "circle_double_border": default_style,
53
55
  }
54
56
 
55
57
 
56
58
  for symbol_str in get_args(MarkerSymbol):
57
59
  marker_style = default_style
58
- marker_style.size = 64
59
60
  marker_style.symbol = symbol_str
60
61
  marker_style.stroke_width = default_style.stroke_width
61
62
 
63
+ # size is the diameter of the circle for circle-based symbols, so scale it down
64
+ # to fit the whole symbol in the same box as all the others
65
+ marker_style.size = 64 / max(symbols.extent(symbol_str, 1))
62
66
 
63
67
  object_style = ObjectStyle(marker=marker_style)
64
68
 
@@ -29,8 +29,8 @@ OUTPUT_PATH = REPO_ROOT / "docs" / "images" / "reference" / "style_explorer.html
29
29
  # Groups of PlotStyle's own properties, in the order they should appear.
30
30
  GROUPS = [
31
31
  ("Layout", ["base", "axes", "figure", "title", "table", "legend"]),
32
- ("Stars", ["star", "bayer_labels", "flamsteed_labels"]),
33
- ("Solar System", ["planets", "moon", "sun"]),
32
+ ("Stars", ["star"]),
33
+ ("Solar System", ["planet", "moon", "sun"]),
34
34
  (
35
35
  "Deep Sky Objects",
36
36
  [
@@ -49,10 +49,7 @@ GROUPS = [
49
49
  "dso_duplicate",
50
50
  ],
51
51
  ),
52
- (
53
- "Constellations",
54
- ["constellation_lines", "constellation_borders", "constellation_labels"],
55
- ),
52
+ ("Constellations", ["constellation"]),
56
53
  (
57
54
  "Sky Features",
58
55
  [
@@ -69,8 +66,17 @@ GROUPS = [
69
66
  ],
70
67
  ),
71
68
  (
72
- "Generic Shapes",
73
- ["line", "polygon", "circle", "ellipse", "rectangle", "marker", "text"],
69
+ "Plotting Functions",
70
+ [
71
+ "line",
72
+ "polygon",
73
+ "circle",
74
+ "ellipse",
75
+ "rectangle",
76
+ "marker",
77
+ "text",
78
+ "image",
79
+ ],
74
80
  ),
75
81
  ]
76
82
 
@@ -84,9 +84,11 @@ from starplot import PlotStyle
84
84
 
85
85
  style = PlotStyle().extend(
86
86
  {
87
- "bayer_labels": {
88
- "font_name": "Literata",
89
- "font_size": 10
87
+ "star": {
88
+ "bayer_label": {
89
+ "font_name": "Literata",
90
+ "font_size": 10
91
+ }
90
92
  }
91
93
  }
92
94
  )
@@ -94,8 +96,8 @@ style = PlotStyle().extend(
94
96
  Alternatively, you can do this:
95
97
  ```python
96
98
  style = PlotStyle()
97
- style.bayer_labels.font_name = "Literata"
98
- style.bayer_labels.font_size = 10
99
+ style.star.bayer_label.font_name = "Literata"
100
+ style.star.bayer_label.font_size = 10
99
101
 
100
102
  ```
101
103
 
@@ -2,6 +2,8 @@
2
2
 
3
3
  Below are previews of all marker symbols available in Starplot. Many aspects of the symbol can be customized through its style, including fill color, edge color, edge thickness, edge style (solid, dotted, dashed, etc), opacity, and much more. See [`MarkerStyle`][starplot.MarkerStyle] for details.
4
4
 
5
+ Most symbols fit inside a square with sides equal to the marker's `size`. The exceptions are `circle_line`, `circle_crosshair`, and `circle_double_border`: for these symbols, `size` is the diameter of the circle, so they're the same size as a `circle` marker with the same `size` (and the rest of the symbol extends outside of that circle).
6
+
5
7
  <div class="marker-symbol-grid" markdown>
6
8
 
7
9
  <div class="marker-symbol-card" markdown>
@@ -88,6 +90,12 @@ Below are previews of all marker symbols available in Starplot. Many aspects of
88
90
  `satellite`{: .marker-symbol-name}
89
91
  </div>
90
92
 
93
+ <div class="marker-symbol-card" markdown>
94
+ ![Circle Double Border](../images/reference/marker_circle_double_border.svg){ loading=lazy .marker-symbol-img}
95
+
96
+ `circle_double_border`{: .marker-symbol-name}
97
+ </div>
98
+
91
99
  </div>
92
100
 
93
101
 
@@ -34,6 +34,16 @@
34
34
  show_root_heading: true
35
35
  show_docstring_attributes: true
36
36
 
37
+ ::: starplot.styles.StarStyle
38
+ options:
39
+ show_root_heading: true
40
+ show_docstring_attributes: true
41
+
42
+ ::: starplot.styles.ConstellationStyle
43
+ options:
44
+ show_root_heading: true
45
+ show_docstring_attributes: true
46
+
37
47
  ::: starplot.styles.PathStyle
38
48
  options:
39
49
  show_root_heading: true
@@ -70,6 +80,11 @@
70
80
  show_docstring_attributes: true
71
81
  inherited_members: true
72
82
 
83
+ ::: starplot.styles.ImageStyle
84
+ options:
85
+ show_root_heading: true
86
+ show_docstring_attributes: true
87
+
73
88
  ::: starplot.styles.TitleStyle
74
89
  options:
75
90
  show_root_heading: true
Binary file
@@ -31,7 +31,7 @@ def get_example_names():
31
31
  filenames = []
32
32
 
33
33
  for filename in glob.iglob("*.py"):
34
- # if filename not in ["map_virgo_cluster.py"]:
34
+ # if filename not in ["optic_image_overlay.py"]:
35
35
  # continue
36
36
 
37
37
  if filename.endswith("examples.py"):
@@ -10,7 +10,7 @@ style = PlotStyle().extend(
10
10
  extensions.GRADIENT_PRE_DAWN,
11
11
  )
12
12
  style.figure.padding = 40
13
- style.constellation_lines.width = 4
13
+ style.constellation.line.width = 4
14
14
  style.star.marker.stroke_width = 0
15
15
 
16
16
  dt = datetime(2025, 8, 20, 21, 0, 0, 0, tzinfo=ZoneInfo("Pacific/Honolulu"))
@@ -25,7 +25,7 @@ p.constellations(
25
25
  )
26
26
  p.line(
27
27
  geometry=canis_major.border,
28
- style__line=p.style.constellation_borders,
28
+ style__line=p.style.constellation.border,
29
29
  )
30
30
  p.open_clusters(where=[_.magnitude < 9], where_true_size=[False])
31
31
  p.stars(where=[_.magnitude < 9], where_labels=[_.magnitude < 4], bayer_labels=True)
@@ -0,0 +1,97 @@
1
+ from datetime import datetime
2
+ from pathlib import Path
3
+ from zoneinfo import ZoneInfo
4
+
5
+ from starplot import DSO, Observer, OpticPlot, Scope, callables, _
6
+ from starplot.styles import PlotStyle, extensions
7
+
8
+
9
+ IMAGE = Path(__file__).parent / "andromeda.jpeg"
10
+ IMAGE_SIZE = (1200, 1200)
11
+
12
+ # Control points that match a pixel position in the image with
13
+ # its sky position: ((x, y), (ra, dec)) in degrees.
14
+ CONTROL_POINTS = [
15
+ ((231.9, 870.0), (10.5060, 40.6883)), # HIP 3293
16
+ ((113.8, 533.3), (11.1549, 40.6794)), # HIP 3494
17
+ ((141.9, 316.8), (11.5135, 40.8089)), # HIP 3597
18
+ ((132.2, 576.7), (11.0697, 40.6852)), # HIP 3461
19
+ ((751.0, 404.0), (11.0162, 41.5709)), # HIP 3447
20
+ ((421.1, 281.7), (11.4187, 41.1902)), # TYC 2801-1743-1
21
+ ((543.3, 368.3), (11.1977, 41.3136)), # TYC 2805-117-1
22
+ ((400.3, 638.7), (10.8089, 41.0094)), # TYC 2801-2078-1
23
+ ((426.8, 41.7), (11.8345, 41.2989)), # TYC 2805-39-1
24
+ ((1083.7, 503.7), (10.6477, 41.9630)), # TYC 2805-695-1
25
+ ((1073.0, 280.3), (11.0473, 42.0458)), # TYC 2805-1072-1
26
+ ((392.6, 744.0), (10.6292, 40.9537)), # HIP 3333
27
+ ((993.9, 765.0), (10.2416, 41.7309)), # HIP 3223
28
+ ((900.8, 560.2), (10.6563, 41.6994)), # TYC 2805-789-1
29
+ ((1130.1, 761.1), (10.1676, 41.9105)), # TYC 2805-1240-1
30
+ ((643.1, 152.1), (11.5197, 41.5368)), # TYC 2805-700-1
31
+ ]
32
+
33
+ # custom gradient background
34
+ NIGHT_SUBTLE = (
35
+ (0.0, "hsl(240, 14%, 10%)"),
36
+ (0.25, "hsl(240, 14%, 5%)"),
37
+ (0.6, "hsl(240, 14%, 2%)"),
38
+ (1.0, "#000000"),
39
+ )
40
+
41
+ m31 = DSO.get(m="31")
42
+
43
+ observer = Observer(
44
+ dt=datetime(2026, 10, 13, 21, 0, 0, tzinfo=ZoneInfo("US/Pacific")),
45
+ lat=33.363484,
46
+ lon=-116.836394,
47
+ )
48
+
49
+ style = PlotStyle().extend(
50
+ extensions.GRAYSCALE_DARK,
51
+ extensions.OPTIC,
52
+ {
53
+ "axes": {
54
+ "background": {"fill": {"stops": NIGHT_SUBTLE, "type": "radial"}},
55
+ "border": {
56
+ "stroke": "#3A3A3A",
57
+ "width": 32,
58
+ },
59
+ }
60
+ },
61
+ extensions.FIGURE_TRANSPARENT,
62
+ )
63
+
64
+ # outline the galaxies instead of filling them, so the photo shows through
65
+ style.dso_galaxy.marker.fill = None
66
+ style.dso_galaxy.marker.stroke = "#86c7f2"
67
+ style.dso_galaxy.marker.stroke_width = 5
68
+ style.dso_galaxy.marker.opacity = 1
69
+
70
+ style.dso_galaxy.label.font_size = 72
71
+ style.dso_galaxy.label.font_weight = 700
72
+
73
+ p = OpticPlot(
74
+ ra=m31.ra,
75
+ dec=m31.dec,
76
+ optic=Scope(focal_length=714, eyepiece_focal_length=28, eyepiece_fov=82),
77
+ observer=observer,
78
+ resolution=2800,
79
+ scale=0.9,
80
+ style=style,
81
+ )
82
+
83
+ p.image(IMAGE, CONTROL_POINTS)
84
+
85
+ p.stars(
86
+ where=[_.magnitude < 12],
87
+ color_fn=callables.color_by_bv_gradient,
88
+ style__marker__stroke=None,
89
+ )
90
+
91
+ # plot Andromeda (M31) and its satellite galaxies (M32, M110)
92
+ p.dsos(
93
+ where=[_.m.isin([31, 32, 110])],
94
+ where_true_size=True,
95
+ )
96
+
97
+ p.export("optic_image_overlay.png")