starplot 0.22.0__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 (376) hide show
  1. {starplot-0.22.0 → starplot-0.23.0}/CITATION.cff +2 -2
  2. {starplot-0.22.0 → starplot-0.23.0}/Makefile +1 -1
  3. {starplot-0.22.0 → starplot-0.23.0}/PKG-INFO +2 -2
  4. {starplot-0.22.0 → starplot-0.23.0}/data/raw/translations/readme.md +1 -1
  5. {starplot-0.22.0 → starplot-0.23.0}/docs/changelog.md +15 -0
  6. {starplot-0.22.0 → starplot-0.23.0}/docs/coming-soon.md +2 -2
  7. starplot-0.23.0/docs/examples/optic-image-overlay.md +14 -0
  8. {starplot-0.22.0 → starplot-0.23.0}/docs/examples.md +12 -6
  9. {starplot-0.22.0 → starplot-0.23.0}/docs/index.md +3 -2
  10. {starplot-0.22.0 → starplot-0.23.0}/docs/reference-settings.md +15 -1
  11. {starplot-0.22.0 → starplot-0.23.0}/docs/scripts/markers.py +4 -1
  12. {starplot-0.22.0 → starplot-0.23.0}/docs/scripts/style_explorer.py +14 -8
  13. {starplot-0.22.0 → starplot-0.23.0}/docs/styling/index.md +7 -5
  14. {starplot-0.22.0 → starplot-0.23.0}/docs/styling/markers.md +2 -0
  15. {starplot-0.22.0 → starplot-0.23.0}/docs/styling/reference.md +15 -0
  16. starplot-0.23.0/examples/andromeda.jpeg +0 -0
  17. {starplot-0.22.0 → starplot-0.23.0}/examples/examples.py +1 -1
  18. {starplot-0.22.0 → starplot-0.23.0}/examples/horizon_gradient.py +1 -1
  19. {starplot-0.22.0 → starplot-0.23.0}/examples/map_canis_major.py +1 -1
  20. starplot-0.23.0/examples/optic_image_overlay.py +97 -0
  21. {starplot-0.22.0 → starplot-0.23.0}/hash_checks/hashlock.yml +10 -10
  22. {starplot-0.22.0 → starplot-0.23.0}/hash_checks/map_checks.py +4 -5
  23. {starplot-0.22.0 → starplot-0.23.0}/hash_checks/zenith_checks.py +27 -27
  24. {starplot-0.22.0 → starplot-0.23.0}/pyproject.toml +1 -1
  25. {starplot-0.22.0 → starplot-0.23.0}/scripts/download_test_fonts.py +1 -1
  26. {starplot-0.22.0 → starplot-0.23.0}/scripts/svg.py +1 -1
  27. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/__init__.py +2 -20
  28. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/cli.py +1 -1
  29. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/constants.py +4 -0
  30. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/data/__init__.py +1 -1
  31. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/data/catalogs.py +3 -3
  32. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/data/constellations.py +4 -3
  33. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/data/db.py +1 -1
  34. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/data/dsos.py +4 -3
  35. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/data/library/constellation_names.parquet +0 -0
  36. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/data/library/dso_names.parquet +0 -0
  37. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/data/library/star_designations.parquet +0 -0
  38. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/data/stars.py +4 -3
  39. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/geometry.py +13 -9
  40. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/models/constellation.py +5 -4
  41. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/models/dso.py +2 -2
  42. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/models/star.py +2 -2
  43. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/plots/base.py +13 -9
  44. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/plots/galaxy.py +7 -7
  45. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/plots/horizon.py +2 -0
  46. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/plots/map.py +2 -0
  47. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/plots/optic.py +12 -9
  48. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/plotters/__init__.py +1 -0
  49. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/plotters/arrow.py +1 -1
  50. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/plotters/constellations.py +5 -5
  51. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/plotters/dsos.py +18 -19
  52. starplot-0.23.0/src/starplot/plotters/image.py +249 -0
  53. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/plotters/stars.py +22 -17
  54. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/plotters/text.py +15 -5
  55. starplot-0.22.0/src/starplot/config.py → starplot-0.23.0/src/starplot/settings.py +34 -0
  56. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/styles/elements.py +38 -2
  57. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/styles/ext/antique.yml +26 -25
  58. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/styles/ext/blue_dark.yml +20 -19
  59. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/styles/ext/blue_gold.yml +15 -14
  60. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/styles/ext/blue_light.yml +8 -7
  61. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/styles/ext/blue_medium.yml +11 -10
  62. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/styles/ext/blue_night.yml +18 -17
  63. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/styles/ext/cb_wong.yml +8 -7
  64. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/styles/ext/grayscale.yml +1 -1
  65. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/styles/ext/grayscale_dark.yml +13 -12
  66. starplot-0.23.0/src/starplot/styles/ext/horizon.yml +6 -0
  67. starplot-0.23.0/src/starplot/styles/ext/map.yml +13 -0
  68. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/styles/ext/nord.yml +14 -13
  69. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/styles/ext/optic.yml +5 -5
  70. starplot-0.23.0/src/starplot/styles/ext/publication.yml +9 -0
  71. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/styles/ext/starplot.yml +24 -23
  72. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/styles/helpers.py +12 -3
  73. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/styles/plot.py +46 -47
  74. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/svg/canvas.py +47 -4
  75. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/svg/elements.py +11 -0
  76. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/svg/fonts.py +1 -1
  77. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/svg/layout.py +1 -1
  78. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/svg/symbols.py +57 -10
  79. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/utils.py +25 -3
  80. {starplot-0.22.0 → starplot-0.23.0}/tests/conftest.py +4 -2
  81. {starplot-0.22.0 → starplot-0.23.0}/tests/models/test_dso.py +4 -0
  82. {starplot-0.22.0 → starplot-0.23.0}/tests/models/test_star.py +6 -0
  83. {starplot-0.22.0 → starplot-0.23.0}/tests/svg/test_canvas.py +3 -4
  84. {starplot-0.22.0 → starplot-0.23.0}/tests/svg/test_symbols.py +67 -26
  85. starplot-0.23.0/tests/test_data.py +21 -0
  86. {starplot-0.22.0 → starplot-0.23.0}/tests/test_geometry.py +26 -0
  87. starplot-0.23.0/tests/test_image.py +249 -0
  88. {starplot-0.22.0 → starplot-0.23.0}/tests/test_languages.py +5 -5
  89. {starplot-0.22.0 → starplot-0.23.0}/tests/test_map.py +50 -0
  90. starplot-0.23.0/tests/test_settings.py +51 -0
  91. {starplot-0.22.0 → starplot-0.23.0}/tests/test_styles.py +59 -2
  92. starplot-0.22.0/src/starplot/styles/ext/horizon.yml +0 -5
  93. starplot-0.22.0/src/starplot/styles/ext/map.yml +0 -12
  94. starplot-0.22.0/src/starplot/styles/ext/publication.yml +0 -8
  95. starplot-0.22.0/tests/test_data.py +0 -18
  96. starplot-0.22.0/tests/test_settings.py +0 -22
  97. {starplot-0.22.0 → starplot-0.23.0}/.dockerignore +0 -0
  98. {starplot-0.22.0 → starplot-0.23.0}/.github/FUNDING.yml +0 -0
  99. {starplot-0.22.0 → starplot-0.23.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  100. {starplot-0.22.0 → starplot-0.23.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  101. {starplot-0.22.0 → starplot-0.23.0}/.github/workflows/archives.yaml +0 -0
  102. {starplot-0.22.0 → starplot-0.23.0}/.github/workflows/docs.yml +0 -0
  103. {starplot-0.22.0 → starplot-0.23.0}/.github/workflows/release.yml +0 -0
  104. {starplot-0.22.0 → starplot-0.23.0}/.github/workflows/test.yml +0 -0
  105. {starplot-0.22.0 → starplot-0.23.0}/.gitignore +0 -0
  106. /starplot-0.22.0/CLAUDE.md → /starplot-0.23.0/AGENTS.md +0 -0
  107. {starplot-0.22.0 → starplot-0.23.0}/CODE_OF_CONDUCT.md +0 -0
  108. {starplot-0.22.0 → starplot-0.23.0}/CONTRIBUTING.md +0 -0
  109. {starplot-0.22.0 → starplot-0.23.0}/Dockerfile +0 -0
  110. {starplot-0.22.0 → starplot-0.23.0}/LICENSE +0 -0
  111. {starplot-0.22.0 → starplot-0.23.0}/README.md +0 -0
  112. {starplot-0.22.0 → starplot-0.23.0}/data/raw/constellation_borders.json +0 -0
  113. {starplot-0.22.0 → starplot-0.23.0}/data/raw/constellations.json +0 -0
  114. {starplot-0.22.0 → starplot-0.23.0}/data/raw/milkyway.json +0 -0
  115. {starplot-0.22.0 → starplot-0.23.0}/data/raw/star_designations.csv +0 -0
  116. {starplot-0.22.0 → starplot-0.23.0}/data/raw/translations/de/constellation_names.csv +0 -0
  117. {starplot-0.22.0 → starplot-0.23.0}/data/raw/translations/de/dso_names.csv +0 -0
  118. {starplot-0.22.0 → starplot-0.23.0}/data/raw/translations/de/other_terms.csv +0 -0
  119. {starplot-0.22.0 → starplot-0.23.0}/data/raw/translations/de/readme.md +0 -0
  120. {starplot-0.22.0 → starplot-0.23.0}/data/raw/translations/de/star_names.csv +0 -0
  121. {starplot-0.22.0 → starplot-0.23.0}/data/raw/translations/en-us/constellation_names.csv +0 -0
  122. {starplot-0.22.0 → starplot-0.23.0}/data/raw/translations/en-us/dso_names.csv +0 -0
  123. {starplot-0.22.0 → starplot-0.23.0}/data/raw/translations/en-us/other_terms.csv +0 -0
  124. {starplot-0.22.0 → starplot-0.23.0}/data/raw/translations/en-us/star_names.csv +0 -0
  125. {starplot-0.22.0 → starplot-0.23.0}/data/raw/translations/es/constellation_names.csv +0 -0
  126. {starplot-0.22.0 → starplot-0.23.0}/data/raw/translations/es/dso_names.csv +0 -0
  127. {starplot-0.22.0 → starplot-0.23.0}/data/raw/translations/es/other_terms.csv +0 -0
  128. {starplot-0.22.0 → starplot-0.23.0}/data/raw/translations/es/star_names.csv +0 -0
  129. {starplot-0.22.0 → starplot-0.23.0}/data/raw/translations/fa/constellation_names.csv +0 -0
  130. {starplot-0.22.0 → starplot-0.23.0}/data/raw/translations/fa/dso_names.csv +0 -0
  131. {starplot-0.22.0 → starplot-0.23.0}/data/raw/translations/fa/other_terms.csv +0 -0
  132. {starplot-0.22.0 → starplot-0.23.0}/data/raw/translations/fa/star_names.csv +0 -0
  133. {starplot-0.22.0 → starplot-0.23.0}/data/raw/translations/fr/constellation_names.csv +0 -0
  134. {starplot-0.22.0 → starplot-0.23.0}/data/raw/translations/fr/dso_names.csv +0 -0
  135. {starplot-0.22.0 → starplot-0.23.0}/data/raw/translations/fr/other_terms.csv +0 -0
  136. {starplot-0.22.0 → starplot-0.23.0}/data/raw/translations/fr/star_names.csv +0 -0
  137. {starplot-0.22.0 → starplot-0.23.0}/data/raw/translations/it/constellation_names.csv +0 -0
  138. {starplot-0.22.0 → starplot-0.23.0}/data/raw/translations/it/dso_names.csv +0 -0
  139. {starplot-0.22.0 → starplot-0.23.0}/data/raw/translations/it/other_terms.csv +0 -0
  140. {starplot-0.22.0 → starplot-0.23.0}/data/raw/translations/it/readme.md +0 -0
  141. {starplot-0.22.0 → starplot-0.23.0}/data/raw/translations/it/star_names.csv +0 -0
  142. {starplot-0.22.0 → starplot-0.23.0}/data/raw/translations/lt/constellation_names.csv +0 -0
  143. {starplot-0.22.0 → starplot-0.23.0}/data/raw/translations/lt/dso_names.csv +0 -0
  144. {starplot-0.22.0 → starplot-0.23.0}/data/raw/translations/lt/other_terms.csv +0 -0
  145. {starplot-0.22.0 → starplot-0.23.0}/data/raw/translations/lt/readme.md +0 -0
  146. {starplot-0.22.0 → starplot-0.23.0}/data/raw/translations/lt/star_names.csv +0 -0
  147. {starplot-0.22.0 → starplot-0.23.0}/data/raw/translations/nl/constellation_names.csv +0 -0
  148. {starplot-0.22.0 → starplot-0.23.0}/data/raw/translations/nl/dso_names.csv +0 -0
  149. {starplot-0.22.0 → starplot-0.23.0}/data/raw/translations/nl/other_terms.csv +0 -0
  150. {starplot-0.22.0 → starplot-0.23.0}/data/raw/translations/nl/readme.md +0 -0
  151. {starplot-0.22.0 → starplot-0.23.0}/data/raw/translations/nl/star_names.csv +0 -0
  152. {starplot-0.22.0 → starplot-0.23.0}/data/raw/translations/zh-cn/constellation_names.csv +0 -0
  153. {starplot-0.22.0 → starplot-0.23.0}/data/raw/translations/zh-cn/dso_names.csv +0 -0
  154. {starplot-0.22.0 → starplot-0.23.0}/data/raw/translations/zh-cn/other_terms.csv +0 -0
  155. {starplot-0.22.0 → starplot-0.23.0}/data/raw/translations/zh-cn/star_names.csv +0 -0
  156. {starplot-0.22.0 → starplot-0.23.0}/data/raw/translations/zh-tw/constellation_names.csv +0 -0
  157. {starplot-0.22.0 → starplot-0.23.0}/data/raw/translations/zh-tw/dso_names.csv +0 -0
  158. {starplot-0.22.0 → starplot-0.23.0}/data/raw/translations/zh-tw/other_terms.csv +0 -0
  159. {starplot-0.22.0 → starplot-0.23.0}/data/raw/translations/zh-tw/readme.md +0 -0
  160. {starplot-0.22.0 → starplot-0.23.0}/data/raw/translations/zh-tw/star_names.csv +0 -0
  161. {starplot-0.22.0 → starplot-0.23.0}/data/readme.md +0 -0
  162. {starplot-0.22.0 → starplot-0.23.0}/data/scripts/constellation_names.py +0 -0
  163. {starplot-0.22.0 → starplot-0.23.0}/data/scripts/data_settings.py +0 -0
  164. {starplot-0.22.0 → starplot-0.23.0}/data/scripts/db.py +0 -0
  165. {starplot-0.22.0 → starplot-0.23.0}/data/scripts/dso_names.py +0 -0
  166. {starplot-0.22.0 → starplot-0.23.0}/data/scripts/star_designations.py +0 -0
  167. {starplot-0.22.0 → starplot-0.23.0}/data/scripts/translations.py +0 -0
  168. {starplot-0.22.0 → starplot-0.23.0}/docs/about.md +0 -0
  169. {starplot-0.22.0 → starplot-0.23.0}/docs/css/extra.css +0 -0
  170. {starplot-0.22.0 → starplot-0.23.0}/docs/custom/main.html +0 -0
  171. {starplot-0.22.0 → starplot-0.23.0}/docs/data/building.md +0 -0
  172. {starplot-0.22.0 → starplot-0.23.0}/docs/data/constellations.md +0 -0
  173. {starplot-0.22.0 → starplot-0.23.0}/docs/data/dsos.md +0 -0
  174. {starplot-0.22.0 → starplot-0.23.0}/docs/data/index.md +0 -0
  175. {starplot-0.22.0 → starplot-0.23.0}/docs/data/stars.md +0 -0
  176. {starplot-0.22.0 → starplot-0.23.0}/docs/data-sources.md +0 -0
  177. {starplot-0.22.0 → starplot-0.23.0}/docs/examples/horizon-double-cluster.md +0 -0
  178. {starplot-0.22.0 → starplot-0.23.0}/docs/examples/horizon-gradient.md +0 -0
  179. {starplot-0.22.0 → starplot-0.23.0}/docs/examples/horizon-sgr.md +0 -0
  180. {starplot-0.22.0 → starplot-0.23.0}/docs/examples/map-big-dipper.md +0 -0
  181. {starplot-0.22.0 → starplot-0.23.0}/docs/examples/map-big.md +0 -0
  182. {starplot-0.22.0 → starplot-0.23.0}/docs/examples/map-canis-major.md +0 -0
  183. {starplot-0.22.0 → starplot-0.23.0}/docs/examples/map-carina-nebula.md +0 -0
  184. {starplot-0.22.0 → starplot-0.23.0}/docs/examples/map-cassiopeia.md +0 -0
  185. {starplot-0.22.0 → starplot-0.23.0}/docs/examples/map-custom-marker.md +0 -0
  186. {starplot-0.22.0 → starplot-0.23.0}/docs/examples/map-galaxy.md +0 -0
  187. {starplot-0.22.0 → starplot-0.23.0}/docs/examples/map-milky-way-stars.md +0 -0
  188. {starplot-0.22.0 → starplot-0.23.0}/docs/examples/map-orion.md +0 -0
  189. {starplot-0.22.0 → starplot-0.23.0}/docs/examples/map-orthographic.md +0 -0
  190. {starplot-0.22.0 → starplot-0.23.0}/docs/examples/map-sagittarius.md +0 -0
  191. {starplot-0.22.0 → starplot-0.23.0}/docs/examples/map-virgo-cluster.md +0 -0
  192. {starplot-0.22.0 → starplot-0.23.0}/docs/examples/optic-iss-transit.md +0 -0
  193. {starplot-0.22.0 → starplot-0.23.0}/docs/examples/optic-m45.md +0 -0
  194. {starplot-0.22.0 → starplot-0.23.0}/docs/examples/optic-orion.md +0 -0
  195. {starplot-0.22.0 → starplot-0.23.0}/docs/examples/optic-solar-eclipse.md +0 -0
  196. {starplot-0.22.0 → starplot-0.23.0}/docs/examples/star-chart-basic.md +0 -0
  197. {starplot-0.22.0 → starplot-0.23.0}/docs/examples/star-chart-detail.md +0 -0
  198. {starplot-0.22.0 → starplot-0.23.0}/docs/examples/star-chart-french.md +0 -0
  199. {starplot-0.22.0 → starplot-0.23.0}/docs/images/celestial-globe.svg +0 -0
  200. {starplot-0.22.0 → starplot-0.23.0}/docs/images/cover-front-sm-360.png +0 -0
  201. {starplot-0.22.0 → starplot-0.23.0}/docs/images/discord.svg +0 -0
  202. {starplot-0.22.0 → starplot-0.23.0}/docs/images/examples/.keep +0 -0
  203. {starplot-0.22.0 → starplot-0.23.0}/docs/images/favicon.png +0 -0
  204. {starplot-0.22.0 → starplot-0.23.0}/docs/images/figure_layout.svg +0 -0
  205. {starplot-0.22.0 → starplot-0.23.0}/docs/images/logo-2400px.png +0 -0
  206. {starplot-0.22.0 → starplot-0.23.0}/docs/images/logo-original/banner.png +0 -0
  207. {starplot-0.22.0 → starplot-0.23.0}/docs/images/logo-original/banner.svg +0 -0
  208. {starplot-0.22.0 → starplot-0.23.0}/docs/images/logo-original/banner.vectornator +0 -0
  209. {starplot-0.22.0 → starplot-0.23.0}/docs/images/logo-original/logo.png +0 -0
  210. {starplot-0.22.0 → starplot-0.23.0}/docs/images/logo-original/logo.svg +0 -0
  211. {starplot-0.22.0 → starplot-0.23.0}/docs/images/logo-original/logo.vectornator +0 -0
  212. {starplot-0.22.0 → starplot-0.23.0}/docs/images/logo-original/logo2.png +0 -0
  213. {starplot-0.22.0 → starplot-0.23.0}/docs/images/logo.svg +0 -0
  214. {starplot-0.22.0 → starplot-0.23.0}/docs/images/logo2.vectornator +0 -0
  215. {starplot-0.22.0 → starplot-0.23.0}/docs/images/logo500.png +0 -0
  216. {starplot-0.22.0 → starplot-0.23.0}/docs/images/mono-2400px.png +0 -0
  217. {starplot-0.22.0 → starplot-0.23.0}/docs/images/mono.png +0 -0
  218. {starplot-0.22.0 → starplot-0.23.0}/docs/images/mono.svg +0 -0
  219. {starplot-0.22.0 → starplot-0.23.0}/docs/images/star.svg +0 -0
  220. {starplot-0.22.0 → starplot-0.23.0}/docs/images/starplot-header.svg +0 -0
  221. {starplot-0.22.0 → starplot-0.23.0}/docs/images/tutorial/.keep +0 -0
  222. {starplot-0.22.0 → starplot-0.23.0}/docs/installation.md +0 -0
  223. {starplot-0.22.0 → starplot-0.23.0}/docs/license.md +0 -0
  224. {starplot-0.22.0 → starplot-0.23.0}/docs/migration-guides/0.16.0.md +0 -0
  225. {starplot-0.22.0 → starplot-0.23.0}/docs/migration-guides/0.21.0.md +0 -0
  226. {starplot-0.22.0 → starplot-0.23.0}/docs/models/comet.md +0 -0
  227. {starplot-0.22.0 → starplot-0.23.0}/docs/models/constellation.md +0 -0
  228. {starplot-0.22.0 → starplot-0.23.0}/docs/models/dso.md +0 -0
  229. {starplot-0.22.0 → starplot-0.23.0}/docs/models/index.md +0 -0
  230. {starplot-0.22.0 → starplot-0.23.0}/docs/models/moon.md +0 -0
  231. {starplot-0.22.0 → starplot-0.23.0}/docs/models/object-list.md +0 -0
  232. {starplot-0.22.0 → starplot-0.23.0}/docs/models/observer.md +0 -0
  233. {starplot-0.22.0 → starplot-0.23.0}/docs/models/optics.md +0 -0
  234. {starplot-0.22.0 → starplot-0.23.0}/docs/models/planet.md +0 -0
  235. {starplot-0.22.0 → starplot-0.23.0}/docs/models/satellite.md +0 -0
  236. {starplot-0.22.0 → starplot-0.23.0}/docs/models/star.md +0 -0
  237. {starplot-0.22.0 → starplot-0.23.0}/docs/models/sun.md +0 -0
  238. {starplot-0.22.0 → starplot-0.23.0}/docs/object-names/constellations.md +0 -0
  239. {starplot-0.22.0 → starplot-0.23.0}/docs/object-names/dsos.md +0 -0
  240. {starplot-0.22.0 → starplot-0.23.0}/docs/object-names/stars.md +0 -0
  241. {starplot-0.22.0 → starplot-0.23.0}/docs/reference-callables.md +0 -0
  242. {starplot-0.22.0 → starplot-0.23.0}/docs/reference-collisions.md +0 -0
  243. {starplot-0.22.0 → starplot-0.23.0}/docs/reference-galaxyplot.md +0 -0
  244. {starplot-0.22.0 → starplot-0.23.0}/docs/reference-horizonplot.md +0 -0
  245. {starplot-0.22.0 → starplot-0.23.0}/docs/reference-localization.md +0 -0
  246. {starplot-0.22.0 → starplot-0.23.0}/docs/reference-mapplot.md +0 -0
  247. {starplot-0.22.0 → starplot-0.23.0}/docs/reference-ongc.md +0 -0
  248. {starplot-0.22.0 → starplot-0.23.0}/docs/reference-opticplot.md +0 -0
  249. {starplot-0.22.0 → starplot-0.23.0}/docs/reference-positions.md +0 -0
  250. {starplot-0.22.0 → starplot-0.23.0}/docs/reference-projections.md +0 -0
  251. {starplot-0.22.0 → starplot-0.23.0}/docs/reference-selecting-objects.md +0 -0
  252. {starplot-0.22.0 → starplot-0.23.0}/docs/reference-zenithplot.md +0 -0
  253. {starplot-0.22.0 → starplot-0.23.0}/docs/robots.txt +0 -0
  254. {starplot-0.22.0 → starplot-0.23.0}/docs/scripts/data.py +0 -0
  255. {starplot-0.22.0 → starplot-0.23.0}/docs/scripts/gradients.py +0 -0
  256. {starplot-0.22.0 → starplot-0.23.0}/docs/scripts/projection_list.html +0 -0
  257. {starplot-0.22.0 → starplot-0.23.0}/docs/scripts/projection_list.py +0 -0
  258. {starplot-0.22.0 → starplot-0.23.0}/docs/scripts/projections.py +0 -0
  259. {starplot-0.22.0 → starplot-0.23.0}/docs/scripts/style_explorer.html +0 -0
  260. {starplot-0.22.0 → starplot-0.23.0}/docs/showcase.md +0 -0
  261. {starplot-0.22.0 → starplot-0.23.0}/docs/snippets/_newsletter.html +0 -0
  262. {starplot-0.22.0 → starplot-0.23.0}/docs/styling/color.md +0 -0
  263. {starplot-0.22.0 → starplot-0.23.0}/docs/styling/explorer.md +0 -0
  264. {starplot-0.22.0 → starplot-0.23.0}/docs/styling/extensions.md +0 -0
  265. {starplot-0.22.0 → starplot-0.23.0}/docs/styling/gradients.md +0 -0
  266. {starplot-0.22.0 → starplot-0.23.0}/docs/styling/layout.md +0 -0
  267. {starplot-0.22.0 → starplot-0.23.0}/docs/tutorial/01.md +0 -0
  268. {starplot-0.22.0 → starplot-0.23.0}/docs/tutorial/02.md +0 -0
  269. {starplot-0.22.0 → starplot-0.23.0}/docs/tutorial/03.md +0 -0
  270. {starplot-0.22.0 → starplot-0.23.0}/docs/tutorial/04.md +0 -0
  271. {starplot-0.22.0 → starplot-0.23.0}/docs/tutorial/05.md +0 -0
  272. {starplot-0.22.0 → starplot-0.23.0}/docs/tutorial/06.md +0 -0
  273. {starplot-0.22.0 → starplot-0.23.0}/docs/tutorial/07.md +0 -0
  274. {starplot-0.22.0 → starplot-0.23.0}/docs/tutorial/08.md +0 -0
  275. {starplot-0.22.0 → starplot-0.23.0}/docs/tutorial/09.md +0 -0
  276. {starplot-0.22.0 → starplot-0.23.0}/docs/tutorial/index.md +0 -0
  277. {starplot-0.22.0 → starplot-0.23.0}/examples/constellation.py +0 -0
  278. {starplot-0.22.0 → starplot-0.23.0}/examples/galaxy.py +0 -0
  279. {starplot-0.22.0 → starplot-0.23.0}/examples/gradient.py +0 -0
  280. {starplot-0.22.0 → starplot-0.23.0}/examples/horizon_double_cluster.py +0 -0
  281. {starplot-0.22.0 → starplot-0.23.0}/examples/map_big.py +0 -0
  282. {starplot-0.22.0 → starplot-0.23.0}/examples/map_big_dipper.py +0 -0
  283. {starplot-0.22.0 → starplot-0.23.0}/examples/map_carina.py +0 -0
  284. {starplot-0.22.0 → starplot-0.23.0}/examples/map_cas.py +0 -0
  285. {starplot-0.22.0 → starplot-0.23.0}/examples/map_equidistant.py +0 -0
  286. {starplot-0.22.0 → starplot-0.23.0}/examples/map_galaxy.py +0 -0
  287. {starplot-0.22.0 → starplot-0.23.0}/examples/map_milky_way_stars.py +0 -0
  288. {starplot-0.22.0 → starplot-0.23.0}/examples/map_orion.py +0 -0
  289. {starplot-0.22.0 → starplot-0.23.0}/examples/map_orthographic.py +0 -0
  290. {starplot-0.22.0 → starplot-0.23.0}/examples/map_sagittarius.py +0 -0
  291. {starplot-0.22.0 → starplot-0.23.0}/examples/map_virgo_cluster.py +0 -0
  292. {starplot-0.22.0 → starplot-0.23.0}/examples/optic_iss_transit.py +0 -0
  293. {starplot-0.22.0 → starplot-0.23.0}/examples/optic_m45.py +0 -0
  294. {starplot-0.22.0 → starplot-0.23.0}/examples/optic_orion_nebula.py +0 -0
  295. {starplot-0.22.0 → starplot-0.23.0}/examples/optic_solar_eclipse.py +0 -0
  296. {starplot-0.22.0 → starplot-0.23.0}/examples/star_chart_basic.py +0 -0
  297. {starplot-0.22.0 → starplot-0.23.0}/examples/star_chart_detail.py +0 -0
  298. {starplot-0.22.0 → starplot-0.23.0}/examples/star_chart_french.py +0 -0
  299. {starplot-0.22.0 → starplot-0.23.0}/hash_checks/__init__.py +0 -0
  300. {starplot-0.22.0 → starplot-0.23.0}/hash_checks/data/.keep +0 -0
  301. {starplot-0.22.0 → starplot-0.23.0}/hash_checks/flaky.py +0 -0
  302. {starplot-0.22.0 → starplot-0.23.0}/hash_checks/galaxy_checks.py +0 -0
  303. {starplot-0.22.0 → starplot-0.23.0}/hash_checks/hashio.py +0 -0
  304. {starplot-0.22.0 → starplot-0.23.0}/hash_checks/horizon_checks.py +0 -0
  305. {starplot-0.22.0 → starplot-0.23.0}/hash_checks/optic_checks.py +0 -0
  306. {starplot-0.22.0 → starplot-0.23.0}/hash_checks/template.html +0 -0
  307. {starplot-0.22.0 → starplot-0.23.0}/scripts/list_fonts.py +0 -0
  308. {starplot-0.22.0 → starplot-0.23.0}/scripts/marimo.py +0 -0
  309. {starplot-0.22.0 → starplot-0.23.0}/scripts/voronoi.py +0 -0
  310. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/callables.py +0 -0
  311. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/coordinates.py +0 -0
  312. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/data/ecliptic.py +0 -0
  313. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/data/library/readme.md +0 -0
  314. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/data/translations.py +0 -0
  315. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/data/utils.py +0 -0
  316. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/mixins.py +0 -0
  317. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/models/__init__.py +0 -0
  318. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/models/base.py +0 -0
  319. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/models/comet.py +0 -0
  320. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/models/milky_way.py +0 -0
  321. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/models/moon.py +0 -0
  322. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/models/objects.py +0 -0
  323. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/models/observer.py +0 -0
  324. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/models/optics.py +0 -0
  325. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/models/planet.py +0 -0
  326. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/models/satellite.py +0 -0
  327. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/models/sun.py +0 -0
  328. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/plots/__init__.py +0 -0
  329. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/plots/zenith.py +0 -0
  330. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/plotters/gridlines.py +0 -0
  331. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/plotters/legend.py +0 -0
  332. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/plotters/milkyway.py +0 -0
  333. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/profile.py +0 -0
  334. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/projections.py +0 -0
  335. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/styles/__init__.py +0 -0
  336. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/styles/base.py +0 -0
  337. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/styles/constants.py +0 -0
  338. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/styles/ext/gradient_presets.yml +0 -0
  339. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/styles/extensions.py +0 -0
  340. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/styles/gradients.py +0 -0
  341. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/styles/types.py +0 -0
  342. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/svg/__init__.py +0 -0
  343. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/svg/png.py +0 -0
  344. {starplot-0.22.0 → starplot-0.23.0}/src/starplot/warnings.py +0 -0
  345. {starplot-0.22.0 → starplot-0.23.0}/tests/__init__.py +0 -0
  346. {starplot-0.22.0 → starplot-0.23.0}/tests/data/__init__.py +0 -0
  347. {starplot-0.22.0 → starplot-0.23.0}/tests/data/comets.txt +0 -0
  348. {starplot-0.22.0 → starplot-0.23.0}/tests/data/test_utils.py +0 -0
  349. {starplot-0.22.0 → starplot-0.23.0}/tests/models/__init__.py +0 -0
  350. {starplot-0.22.0 → starplot-0.23.0}/tests/models/test_comets.py +0 -0
  351. {starplot-0.22.0 → starplot-0.23.0}/tests/models/test_constellation.py +0 -0
  352. {starplot-0.22.0 → starplot-0.23.0}/tests/models/test_observer.py +0 -0
  353. {starplot-0.22.0 → starplot-0.23.0}/tests/models/test_optics.py +0 -0
  354. {starplot-0.22.0 → starplot-0.23.0}/tests/models/test_satellite.py +0 -0
  355. {starplot-0.22.0 → starplot-0.23.0}/tests/models/test_solar_system.py +0 -0
  356. {starplot-0.22.0 → starplot-0.23.0}/tests/plots/__init__.py +0 -0
  357. {starplot-0.22.0 → starplot-0.23.0}/tests/plots/test_galaxy.py +0 -0
  358. {starplot-0.22.0 → starplot-0.23.0}/tests/plots/test_horizon.py +0 -0
  359. {starplot-0.22.0 → starplot-0.23.0}/tests/svg/__init__.py +0 -0
  360. {starplot-0.22.0 → starplot-0.23.0}/tests/svg/test_elements.py +0 -0
  361. {starplot-0.22.0 → starplot-0.23.0}/tests/svg/test_fonts.py +0 -0
  362. {starplot-0.22.0 → starplot-0.23.0}/tests/svg/test_layout.py +0 -0
  363. {starplot-0.22.0 → starplot-0.23.0}/tests/test_catalogs.py +0 -0
  364. {starplot-0.22.0 → starplot-0.23.0}/tests/test_cli.py +0 -0
  365. {starplot-0.22.0 → starplot-0.23.0}/tests/test_optic.py +0 -0
  366. {starplot-0.22.0 → starplot-0.23.0}/tests/test_utils.py +0 -0
  367. {starplot-0.22.0 → starplot-0.23.0}/tests/utils.py +0 -0
  368. {starplot-0.22.0 → starplot-0.23.0}/tutorial/build.py +0 -0
  369. {starplot-0.22.0 → starplot-0.23.0}/tutorial/tutorial_02.py +0 -0
  370. {starplot-0.22.0 → starplot-0.23.0}/tutorial/tutorial_03.py +0 -0
  371. {starplot-0.22.0 → starplot-0.23.0}/tutorial/tutorial_04.py +0 -0
  372. {starplot-0.22.0 → starplot-0.23.0}/tutorial/tutorial_05.py +0 -0
  373. {starplot-0.22.0 → starplot-0.23.0}/tutorial/tutorial_06.py +0 -0
  374. {starplot-0.22.0 → starplot-0.23.0}/tutorial/tutorial_07.py +0 -0
  375. {starplot-0.22.0 → starplot-0.23.0}/tutorial/tutorial_08.py +0 -0
  376. {starplot-0.22.0 → starplot-0.23.0}/zensical.toml +0 -0
@@ -20,5 +20,5 @@ keywords:
20
20
  - graphs
21
21
  - plotting
22
22
  license: MIT
23
- version: 0.22.0
24
- date-released: '2026-10-17'
23
+ version: 0.23.0
24
+ date-released: '2026-11-11'
@@ -163,7 +163,7 @@ list-fonts:
163
163
 
164
164
  clean:
165
165
  rm -rf __pycache__
166
- rm -rf venv
166
+ rm -rf .venv
167
167
  rm -rf dist
168
168
  rm -rf site
169
169
  rm -rf htmlcov
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: starplot
3
- Version: 0.22.0
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>
@@ -26,7 +26,7 @@ Requires-Dist: pyarrow >= 14.0.2
26
26
  Requires-Dist: rtree >= 1.2.0
27
27
  Requires-Dist: pyqtree >= 1.0.0
28
28
  Requires-Dist: requests >= 2.31.0
29
- Requires-Dist: duckdb >= 1.4.4
29
+ Requires-Dist: duckdb < 2.0.0
30
30
  Requires-Dist: sqlglot >= 28.9.0
31
31
  Requires-Dist: ibis-framework[duckdb, geospatial] >= 11
32
32
  Requires-Dist: astropy-healpix >= 1.1.2
@@ -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)
@@ -1,3 +1,18 @@
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
+
1
16
  ## v0.22.x
2
17
  [Documentation](https://archives.starplot.dev/0.22.0/)
3
18
 
@@ -8,7 +8,7 @@
8
8
 
9
9
  <table class="table-coming-soon">
10
10
  <tr>
11
- <td>v0.23</td>
11
+ <td>v0.24</td>
12
12
  <td>
13
13
  <h4>⭐ Next Release ⭐</h4>
14
14
  <ul>
@@ -20,7 +20,7 @@
20
20
  <td></td>
21
21
  </tr>
22
22
  <tr>
23
- <td>v0.24+</td>
23
+ <td>v0.25+</td>
24
24
  <td>
25
25
  <ul>
26
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>
@@ -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)
@@ -56,10 +57,12 @@ marker_styles = {
56
57
 
57
58
  for symbol_str in get_args(MarkerSymbol):
58
59
  marker_style = default_style
59
- marker_style.size = 64
60
60
  marker_style.symbol = symbol_str
61
61
  marker_style.stroke_width = default_style.stroke_width
62
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))
63
66
 
64
67
  object_style = ObjectStyle(marker=marker_style)
65
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>
@@ -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")
@@ -59,10 +59,10 @@ map_gridlines:
59
59
  filename: /Users/steveberardi/src/starplot/hash_checks/data/map-gridlines.png
60
60
  phash: cbb44b172d3261a7
61
61
  map_label_callables:
62
- dhash: 80e0e0c8c8e0a080d8982c0c2cac98e0c09a9c0d0d9c98a0
62
+ dhash: 80e0e0c8c8e0a080d8982c0c2cac98e0c0989c0d0d9e98a0
63
63
  exception: null
64
64
  filename: /Users/steveberardi/src/starplot/hash_checks/data/map-m45-label-callables.png
65
- phash: b232c9c94ee74ccc
65
+ phash: b232c9d94ec74ccc
66
66
  map_milky_way_multi_polygon:
67
67
  dhash: 93cbe2f2ec6432da93cba2f2ec6632dac2c4b0d96c64129a
68
68
  exception: null
@@ -84,7 +84,7 @@ map_orion_base:
84
84
  filename: /Users/steveberardi/src/starplot/hash_checks/data/map-orion-base.png
85
85
  phash: be79d3649585a194
86
86
  map_orion_extra:
87
- dhash: 1a1b39772b6d64680a1b395b2b6f646a4a1bb9962b2f6468
87
+ dhash: 1a1b39772b6d64680a1b39532b6f646a4a1bb9962b2f6468
88
88
  exception: null
89
89
  filename: /Users/steveberardi/src/starplot/hash_checks/data/map-orion-extra.png
90
90
  phash: bf715f648186909e
@@ -94,10 +94,10 @@ map_plate_caree:
94
94
  filename: /Users/steveberardi/src/starplot/hash_checks/data/map-plate-caree.png
95
95
  phash: c43d69c6749a67b0
96
96
  map_plot_custom_clip_path_virgo:
97
- dhash: 0302d24b262d2c0c0323c66e262d24040315c42f2e2d2404
97
+ dhash: 0302d26b262d240c0323c62e262f24040333442e262f2404
98
98
  exception: null
99
99
  filename: /Users/steveberardi/src/starplot/hash_checks/data/map-custom-clip-path-virgo.png
100
- phash: ee49e8eaeb436094
100
+ phash: ee4be8eaebc22094
101
101
  map_plot_limit_by_geometry:
102
102
  dhash: 80a088a4568c6c8082b090a4568c6480a02098a4568c6480
103
103
  exception: null
@@ -134,10 +134,10 @@ optic_camera_rotated:
134
134
  filename: /Users/steveberardi/src/starplot/hash_checks/data/optic-camera-rotated-m45.png
135
135
  phash: d0993f62f0af0366
136
136
  optic_clipping:
137
- dhash: 709838e6d2e2fcfc7098b8e6dae2fcfc70c8bae4f6e2fcf4
137
+ dhash: 709838e6e2e2fcfc7098b8e6eae2fcfc70c8bae4f6e2fcf4
138
138
  exception: null
139
139
  filename: /Users/steveberardi/src/starplot/hash_checks/data/optic-clipping.png
140
- phash: 95687a852f953d98
140
+ phash: 95687a852f953d1a
141
141
  optic_iss_moon_transit:
142
142
  dhash: f0d48eb0b48ad4f0f0d48ab0b48ac4f0f0d48ab2b4aac4f0
143
143
  exception: null
@@ -187,12 +187,12 @@ optic_orion_naked_eye:
187
187
  dhash: 64c4a2a092ccf07064d4a4a092ccf07060c4a2a092ccf070
188
188
  exception: null
189
189
  filename: /Users/steveberardi/src/starplot/hash_checks/data/optic-orion-naked-eye.png
190
- phash: c46e0b957fca2499
190
+ phash: c46c0bd57fca2499
191
191
  optic_orion_nebula_refractor:
192
- dhash: f0cca4f072e2ec70f0cca4f072e2ec70f0cca4f072e2ec70
192
+ dhash: f0cca4f872e2ec70f0cca4f872e2ec70f0cca4f872e2ec70
193
193
  exception: null
194
194
  filename: /Users/steveberardi/src/starplot/hash_checks/data/optic-orion-nebula-refractor.png
195
- phash: 87b4344bcb5a2cb6
195
+ phash: 87b4344bcb5a2eb4
196
196
  optic_polaris_binoculars:
197
197
  dhash: f0c48a10908ac070f0c48a10908ac070f0c48a10908ac070
198
198
  exception: null
@@ -540,8 +540,7 @@ def check_map_plot_custom_clip_path_virgo():
540
540
  dec_max=17,
541
541
  style=STYLE.extend(
542
542
  {
543
- "dso_open_cluster": {"marker": {"size": 20}},
544
- "dso_galaxy": {"marker": {"size": 20}},
543
+ "dso_galaxy": {"marker": {"size": 30}},
545
544
  }
546
545
  ),
547
546
  resolution=RESOLUTION,
@@ -723,7 +722,7 @@ def check_map_constellation_clip_path():
723
722
 
724
723
  p.line(
725
724
  geometry=constellation.border,
726
- style__line=p.style.constellation_borders,
725
+ style__line=p.style.constellation.border,
727
726
  )
728
727
 
729
728
  for hip1, hip2 in constellation.star_hip_lines:
@@ -734,7 +733,7 @@ def check_map_constellation_clip_path():
734
733
  (star1.ra, star1.dec),
735
734
  (star2.ra, star2.dec),
736
735
  ],
737
- style__line=p.style.constellation_lines,
736
+ style__line=p.style.constellation.line,
738
737
  )
739
738
 
740
739
  p.stars(
@@ -778,7 +777,7 @@ def check_map_font_fallback():
778
777
  styles.extensions.MAP,
779
778
  )
780
779
  style.title.font_name = "ThisFontDoesNotExist12345"
781
- style.constellation_labels.font_name = "AlsoNotARealFont"
780
+ style.constellation.label.font_name = "AlsoNotARealFont"
782
781
 
783
782
  p = MapPlot(
784
783
  projection=Miller(),
@@ -9,7 +9,7 @@ from starplot import (
9
9
  Observer,
10
10
  ZenithPlot,
11
11
  _,
12
- override_settings,
12
+ settings,
13
13
  styles,
14
14
  )
15
15
 
@@ -85,30 +85,30 @@ def check_zenith_gradient():
85
85
 
86
86
 
87
87
  @flake
88
- @override_settings(language="zh-cn")
89
88
  def check_zenith_chinese():
90
- p = ZenithPlot(
91
- observer=Observer(
92
- lat=32.97,
93
- lon=-117.038611,
94
- dt=JUNE_2023,
95
- ),
96
- style=styles.PlotStyle().extend(
97
- styles.extensions.BLUE_GOLD,
98
- styles.extensions.GRADIENT_PRE_DAWN,
99
- {
100
- "base": {
101
- "font_name": "Noto Sans CJK SC",
102
- }
103
- },
104
- ),
105
- resolution=RESOLUTION,
106
- autoscale=True,
107
- )
108
- p.horizon()
109
- p.constellations()
110
- p.stars(where=[_.magnitude < 4.6], where_labels=[_.magnitude < 4])
111
- p.constellation_labels(collision_handler=HANDLER)
112
- filename = DATA_PATH / "zenith-chinese.png"
113
- p.export(filename)
114
- return filename
89
+ with settings(language="zh-cn"):
90
+ p = ZenithPlot(
91
+ observer=Observer(
92
+ lat=32.97,
93
+ lon=-117.038611,
94
+ dt=JUNE_2023,
95
+ ),
96
+ style=styles.PlotStyle().extend(
97
+ styles.extensions.BLUE_GOLD,
98
+ styles.extensions.GRADIENT_PRE_DAWN,
99
+ {
100
+ "base": {
101
+ "font_name": "Noto Sans CJK SC",
102
+ }
103
+ },
104
+ ),
105
+ resolution=RESOLUTION,
106
+ autoscale=True,
107
+ )
108
+ p.horizon()
109
+ p.constellations()
110
+ p.stars(where=[_.magnitude < 4.6], where_labels=[_.magnitude < 4])
111
+ p.constellation_labels(collision_handler=HANDLER)
112
+ filename = DATA_PATH / "zenith-chinese.png"
113
+ p.export(filename)
114
+ return filename
@@ -33,7 +33,7 @@ dependencies = [
33
33
  "rtree >= 1.2.0",
34
34
  "pyqtree >= 1.0.0",
35
35
  "requests >= 2.31.0",
36
- "duckdb >= 1.4.4",
36
+ "duckdb < 2.0.0",
37
37
  "sqlglot >= 28.9.0",
38
38
  "ibis-framework[duckdb,geospatial] >= 11",
39
39
  "astropy-healpix >= 1.1.2",
@@ -1,7 +1,7 @@
1
1
  import tarfile
2
2
 
3
- from starplot.config import settings
4
3
  from starplot.data.utils import download
4
+ from starplot.settings import settings
5
5
 
6
6
  FONTS_PATH = settings.data_path / "fonts"
7
7
  FONTS_PATH.mkdir(parents=True, exist_ok=True)
@@ -31,7 +31,7 @@ from starplot.styles import (
31
31
  LabelStyle,
32
32
  )
33
33
 
34
- from starplot.config import settings as StarplotSettings
34
+ from starplot.settings import settings as StarplotSettings
35
35
 
36
36
  StarplotSettings.svg_text_type = "element"
37
37