starplot 0.21.4__tar.gz → 0.22.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 (367) hide show
  1. {starplot-0.21.4 → starplot-0.22.0}/.github/workflows/test.yml +1 -1
  2. {starplot-0.21.4 → starplot-0.22.0}/CITATION.cff +2 -2
  3. {starplot-0.21.4 → starplot-0.22.0}/Makefile +0 -5
  4. {starplot-0.21.4 → starplot-0.22.0}/PKG-INFO +2 -3
  5. {starplot-0.21.4 → starplot-0.22.0}/data/raw/translations/de/constellation_names.csv +3 -1
  6. {starplot-0.21.4 → starplot-0.22.0}/data/raw/translations/de/other_terms.csv +1 -0
  7. {starplot-0.21.4 → starplot-0.22.0}/data/raw/translations/en-us/other_terms.csv +2 -1
  8. {starplot-0.21.4 → starplot-0.22.0}/data/raw/translations/es/other_terms.csv +2 -1
  9. {starplot-0.21.4 → starplot-0.22.0}/data/raw/translations/fa/other_terms.csv +1 -0
  10. {starplot-0.21.4 → starplot-0.22.0}/data/raw/translations/fr/other_terms.csv +1 -0
  11. {starplot-0.21.4 → starplot-0.22.0}/data/raw/translations/it/other_terms.csv +1 -0
  12. {starplot-0.21.4 → starplot-0.22.0}/data/raw/translations/lt/constellation_names.csv +1 -1
  13. {starplot-0.21.4 → starplot-0.22.0}/data/raw/translations/lt/other_terms.csv +1 -0
  14. {starplot-0.21.4 → starplot-0.22.0}/data/raw/translations/nl/other_terms.csv +1 -0
  15. {starplot-0.21.4 → starplot-0.22.0}/data/raw/translations/zh-cn/other_terms.csv +1 -0
  16. {starplot-0.21.4 → starplot-0.22.0}/data/raw/translations/zh-tw/other_terms.csv +1 -0
  17. {starplot-0.21.4 → starplot-0.22.0}/docs/changelog.md +14 -1
  18. {starplot-0.21.4 → starplot-0.22.0}/docs/coming-soon.md +3 -2
  19. {starplot-0.21.4 → starplot-0.22.0}/docs/installation.md +1 -1
  20. {starplot-0.21.4 → starplot-0.22.0}/docs/models/index.md +1 -0
  21. {starplot-0.21.4 → starplot-0.22.0}/docs/models/optics.md +8 -0
  22. {starplot-0.21.4 → starplot-0.22.0}/docs/scripts/markers.py +1 -0
  23. {starplot-0.21.4 → starplot-0.22.0}/docs/styling/markers.md +6 -0
  24. {starplot-0.21.4 → starplot-0.22.0}/hash_checks/hashlock.yml +24 -19
  25. {starplot-0.21.4 → starplot-0.22.0}/hash_checks/map_checks.py +2 -2
  26. {starplot-0.21.4 → starplot-0.22.0}/hash_checks/optic_checks.py +51 -1
  27. {starplot-0.21.4 → starplot-0.22.0}/pyproject.toml +1 -2
  28. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/__init__.py +2 -1
  29. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/callables.py +3 -0
  30. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/constants.py +2 -0
  31. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/data/catalogs.py +2 -2
  32. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/data/library/constellation_names.parquet +0 -0
  33. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/data/translations.py +10 -0
  34. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/models/__init__.py +1 -0
  35. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/models/observer.py +21 -10
  36. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/models/optics.py +43 -0
  37. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/plots/optic.py +88 -2
  38. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/plotters/milkyway.py +9 -9
  39. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/plotters/stars.py +87 -81
  40. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/plotters/text.py +8 -2
  41. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/styles/elements.py +1 -0
  42. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/styles/ext/optic.yml +11 -0
  43. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/styles/types.py +1 -0
  44. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/svg/canvas.py +13 -2
  45. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/svg/symbols.py +26 -0
  46. {starplot-0.21.4 → starplot-0.22.0}/tests/models/test_observer.py +25 -0
  47. {starplot-0.21.4 → starplot-0.22.0}/tests/models/test_optics.py +25 -1
  48. {starplot-0.21.4 → starplot-0.22.0}/tests/models/test_solar_system.py +6 -6
  49. {starplot-0.21.4 → starplot-0.22.0}/tests/svg/test_symbols.py +47 -30
  50. {starplot-0.21.4 → starplot-0.22.0}/tests/test_languages.py +49 -1
  51. {starplot-0.21.4 → starplot-0.22.0}/tests/test_map.py +2 -2
  52. starplot-0.22.0/tests/test_optic.py +186 -0
  53. starplot-0.21.4/tests/test_optic.py +0 -53
  54. {starplot-0.21.4 → starplot-0.22.0}/.dockerignore +0 -0
  55. {starplot-0.21.4 → starplot-0.22.0}/.github/FUNDING.yml +0 -0
  56. {starplot-0.21.4 → starplot-0.22.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  57. {starplot-0.21.4 → starplot-0.22.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  58. {starplot-0.21.4 → starplot-0.22.0}/.github/workflows/archives.yaml +0 -0
  59. {starplot-0.21.4 → starplot-0.22.0}/.github/workflows/docs.yml +0 -0
  60. {starplot-0.21.4 → starplot-0.22.0}/.github/workflows/release.yml +0 -0
  61. {starplot-0.21.4 → starplot-0.22.0}/.gitignore +0 -0
  62. {starplot-0.21.4 → starplot-0.22.0}/CLAUDE.md +0 -0
  63. {starplot-0.21.4 → starplot-0.22.0}/CODE_OF_CONDUCT.md +0 -0
  64. {starplot-0.21.4 → starplot-0.22.0}/CONTRIBUTING.md +0 -0
  65. {starplot-0.21.4 → starplot-0.22.0}/Dockerfile +0 -0
  66. {starplot-0.21.4 → starplot-0.22.0}/LICENSE +0 -0
  67. {starplot-0.21.4 → starplot-0.22.0}/README.md +0 -0
  68. {starplot-0.21.4 → starplot-0.22.0}/data/raw/constellation_borders.json +0 -0
  69. {starplot-0.21.4 → starplot-0.22.0}/data/raw/constellations.json +0 -0
  70. {starplot-0.21.4 → starplot-0.22.0}/data/raw/milkyway.json +0 -0
  71. {starplot-0.21.4 → starplot-0.22.0}/data/raw/star_designations.csv +0 -0
  72. {starplot-0.21.4 → starplot-0.22.0}/data/raw/translations/de/dso_names.csv +0 -0
  73. {starplot-0.21.4 → starplot-0.22.0}/data/raw/translations/de/readme.md +0 -0
  74. {starplot-0.21.4 → starplot-0.22.0}/data/raw/translations/de/star_names.csv +0 -0
  75. {starplot-0.21.4 → starplot-0.22.0}/data/raw/translations/en-us/constellation_names.csv +0 -0
  76. {starplot-0.21.4 → starplot-0.22.0}/data/raw/translations/en-us/dso_names.csv +0 -0
  77. {starplot-0.21.4 → starplot-0.22.0}/data/raw/translations/en-us/star_names.csv +0 -0
  78. {starplot-0.21.4 → starplot-0.22.0}/data/raw/translations/es/constellation_names.csv +0 -0
  79. {starplot-0.21.4 → starplot-0.22.0}/data/raw/translations/es/dso_names.csv +0 -0
  80. {starplot-0.21.4 → starplot-0.22.0}/data/raw/translations/es/star_names.csv +0 -0
  81. {starplot-0.21.4 → starplot-0.22.0}/data/raw/translations/fa/constellation_names.csv +0 -0
  82. {starplot-0.21.4 → starplot-0.22.0}/data/raw/translations/fa/dso_names.csv +0 -0
  83. {starplot-0.21.4 → starplot-0.22.0}/data/raw/translations/fa/star_names.csv +0 -0
  84. {starplot-0.21.4 → starplot-0.22.0}/data/raw/translations/fr/constellation_names.csv +0 -0
  85. {starplot-0.21.4 → starplot-0.22.0}/data/raw/translations/fr/dso_names.csv +0 -0
  86. {starplot-0.21.4 → starplot-0.22.0}/data/raw/translations/fr/star_names.csv +0 -0
  87. {starplot-0.21.4 → starplot-0.22.0}/data/raw/translations/it/constellation_names.csv +0 -0
  88. {starplot-0.21.4 → starplot-0.22.0}/data/raw/translations/it/dso_names.csv +0 -0
  89. {starplot-0.21.4 → starplot-0.22.0}/data/raw/translations/it/readme.md +0 -0
  90. {starplot-0.21.4 → starplot-0.22.0}/data/raw/translations/it/star_names.csv +0 -0
  91. {starplot-0.21.4 → starplot-0.22.0}/data/raw/translations/lt/dso_names.csv +0 -0
  92. {starplot-0.21.4 → starplot-0.22.0}/data/raw/translations/lt/readme.md +0 -0
  93. {starplot-0.21.4 → starplot-0.22.0}/data/raw/translations/lt/star_names.csv +0 -0
  94. {starplot-0.21.4 → starplot-0.22.0}/data/raw/translations/nl/constellation_names.csv +0 -0
  95. {starplot-0.21.4 → starplot-0.22.0}/data/raw/translations/nl/dso_names.csv +0 -0
  96. {starplot-0.21.4 → starplot-0.22.0}/data/raw/translations/nl/readme.md +0 -0
  97. {starplot-0.21.4 → starplot-0.22.0}/data/raw/translations/nl/star_names.csv +0 -0
  98. {starplot-0.21.4 → starplot-0.22.0}/data/raw/translations/readme.md +0 -0
  99. {starplot-0.21.4 → starplot-0.22.0}/data/raw/translations/zh-cn/constellation_names.csv +0 -0
  100. {starplot-0.21.4 → starplot-0.22.0}/data/raw/translations/zh-cn/dso_names.csv +0 -0
  101. {starplot-0.21.4 → starplot-0.22.0}/data/raw/translations/zh-cn/star_names.csv +0 -0
  102. {starplot-0.21.4 → starplot-0.22.0}/data/raw/translations/zh-tw/constellation_names.csv +0 -0
  103. {starplot-0.21.4 → starplot-0.22.0}/data/raw/translations/zh-tw/dso_names.csv +0 -0
  104. {starplot-0.21.4 → starplot-0.22.0}/data/raw/translations/zh-tw/readme.md +0 -0
  105. {starplot-0.21.4 → starplot-0.22.0}/data/raw/translations/zh-tw/star_names.csv +0 -0
  106. {starplot-0.21.4 → starplot-0.22.0}/data/readme.md +0 -0
  107. {starplot-0.21.4 → starplot-0.22.0}/data/scripts/constellation_names.py +0 -0
  108. {starplot-0.21.4 → starplot-0.22.0}/data/scripts/data_settings.py +0 -0
  109. {starplot-0.21.4 → starplot-0.22.0}/data/scripts/db.py +0 -0
  110. {starplot-0.21.4 → starplot-0.22.0}/data/scripts/dso_names.py +0 -0
  111. {starplot-0.21.4 → starplot-0.22.0}/data/scripts/star_designations.py +0 -0
  112. {starplot-0.21.4 → starplot-0.22.0}/data/scripts/translations.py +0 -0
  113. {starplot-0.21.4 → starplot-0.22.0}/docs/about.md +0 -0
  114. {starplot-0.21.4 → starplot-0.22.0}/docs/css/extra.css +0 -0
  115. {starplot-0.21.4 → starplot-0.22.0}/docs/custom/main.html +0 -0
  116. {starplot-0.21.4 → starplot-0.22.0}/docs/data/building.md +0 -0
  117. {starplot-0.21.4 → starplot-0.22.0}/docs/data/constellations.md +0 -0
  118. {starplot-0.21.4 → starplot-0.22.0}/docs/data/dsos.md +0 -0
  119. {starplot-0.21.4 → starplot-0.22.0}/docs/data/index.md +0 -0
  120. {starplot-0.21.4 → starplot-0.22.0}/docs/data/stars.md +0 -0
  121. {starplot-0.21.4 → starplot-0.22.0}/docs/data-sources.md +0 -0
  122. {starplot-0.21.4 → starplot-0.22.0}/docs/examples/horizon-double-cluster.md +0 -0
  123. {starplot-0.21.4 → starplot-0.22.0}/docs/examples/horizon-gradient.md +0 -0
  124. {starplot-0.21.4 → starplot-0.22.0}/docs/examples/horizon-sgr.md +0 -0
  125. {starplot-0.21.4 → starplot-0.22.0}/docs/examples/map-big-dipper.md +0 -0
  126. {starplot-0.21.4 → starplot-0.22.0}/docs/examples/map-big.md +0 -0
  127. {starplot-0.21.4 → starplot-0.22.0}/docs/examples/map-canis-major.md +0 -0
  128. {starplot-0.21.4 → starplot-0.22.0}/docs/examples/map-carina-nebula.md +0 -0
  129. {starplot-0.21.4 → starplot-0.22.0}/docs/examples/map-cassiopeia.md +0 -0
  130. {starplot-0.21.4 → starplot-0.22.0}/docs/examples/map-custom-marker.md +0 -0
  131. {starplot-0.21.4 → starplot-0.22.0}/docs/examples/map-galaxy.md +0 -0
  132. {starplot-0.21.4 → starplot-0.22.0}/docs/examples/map-milky-way-stars.md +0 -0
  133. {starplot-0.21.4 → starplot-0.22.0}/docs/examples/map-orion.md +0 -0
  134. {starplot-0.21.4 → starplot-0.22.0}/docs/examples/map-orthographic.md +0 -0
  135. {starplot-0.21.4 → starplot-0.22.0}/docs/examples/map-sagittarius.md +0 -0
  136. {starplot-0.21.4 → starplot-0.22.0}/docs/examples/map-virgo-cluster.md +0 -0
  137. {starplot-0.21.4 → starplot-0.22.0}/docs/examples/optic-iss-transit.md +0 -0
  138. {starplot-0.21.4 → starplot-0.22.0}/docs/examples/optic-m45.md +0 -0
  139. {starplot-0.21.4 → starplot-0.22.0}/docs/examples/optic-orion.md +0 -0
  140. {starplot-0.21.4 → starplot-0.22.0}/docs/examples/optic-solar-eclipse.md +0 -0
  141. {starplot-0.21.4 → starplot-0.22.0}/docs/examples/star-chart-basic.md +0 -0
  142. {starplot-0.21.4 → starplot-0.22.0}/docs/examples/star-chart-detail.md +0 -0
  143. {starplot-0.21.4 → starplot-0.22.0}/docs/examples/star-chart-french.md +0 -0
  144. {starplot-0.21.4 → starplot-0.22.0}/docs/examples.md +0 -0
  145. {starplot-0.21.4 → starplot-0.22.0}/docs/images/celestial-globe.svg +0 -0
  146. {starplot-0.21.4 → starplot-0.22.0}/docs/images/cover-front-sm-360.png +0 -0
  147. {starplot-0.21.4 → starplot-0.22.0}/docs/images/discord.svg +0 -0
  148. {starplot-0.21.4 → starplot-0.22.0}/docs/images/examples/.keep +0 -0
  149. {starplot-0.21.4 → starplot-0.22.0}/docs/images/favicon.png +0 -0
  150. {starplot-0.21.4 → starplot-0.22.0}/docs/images/figure_layout.svg +0 -0
  151. {starplot-0.21.4 → starplot-0.22.0}/docs/images/logo-2400px.png +0 -0
  152. {starplot-0.21.4 → starplot-0.22.0}/docs/images/logo-original/banner.png +0 -0
  153. {starplot-0.21.4 → starplot-0.22.0}/docs/images/logo-original/banner.svg +0 -0
  154. {starplot-0.21.4 → starplot-0.22.0}/docs/images/logo-original/banner.vectornator +0 -0
  155. {starplot-0.21.4 → starplot-0.22.0}/docs/images/logo-original/logo.png +0 -0
  156. {starplot-0.21.4 → starplot-0.22.0}/docs/images/logo-original/logo.svg +0 -0
  157. {starplot-0.21.4 → starplot-0.22.0}/docs/images/logo-original/logo.vectornator +0 -0
  158. {starplot-0.21.4 → starplot-0.22.0}/docs/images/logo-original/logo2.png +0 -0
  159. {starplot-0.21.4 → starplot-0.22.0}/docs/images/logo.svg +0 -0
  160. {starplot-0.21.4 → starplot-0.22.0}/docs/images/logo2.vectornator +0 -0
  161. {starplot-0.21.4 → starplot-0.22.0}/docs/images/logo500.png +0 -0
  162. {starplot-0.21.4 → starplot-0.22.0}/docs/images/mono-2400px.png +0 -0
  163. {starplot-0.21.4 → starplot-0.22.0}/docs/images/mono.png +0 -0
  164. {starplot-0.21.4 → starplot-0.22.0}/docs/images/mono.svg +0 -0
  165. {starplot-0.21.4 → starplot-0.22.0}/docs/images/star.svg +0 -0
  166. {starplot-0.21.4 → starplot-0.22.0}/docs/images/starplot-header.svg +0 -0
  167. {starplot-0.21.4 → starplot-0.22.0}/docs/images/tutorial/.keep +0 -0
  168. {starplot-0.21.4 → starplot-0.22.0}/docs/index.md +0 -0
  169. {starplot-0.21.4 → starplot-0.22.0}/docs/license.md +0 -0
  170. {starplot-0.21.4 → starplot-0.22.0}/docs/migration-guides/0.16.0.md +0 -0
  171. {starplot-0.21.4 → starplot-0.22.0}/docs/migration-guides/0.21.0.md +0 -0
  172. {starplot-0.21.4 → starplot-0.22.0}/docs/models/comet.md +0 -0
  173. {starplot-0.21.4 → starplot-0.22.0}/docs/models/constellation.md +0 -0
  174. {starplot-0.21.4 → starplot-0.22.0}/docs/models/dso.md +0 -0
  175. {starplot-0.21.4 → starplot-0.22.0}/docs/models/moon.md +0 -0
  176. {starplot-0.21.4 → starplot-0.22.0}/docs/models/object-list.md +0 -0
  177. {starplot-0.21.4 → starplot-0.22.0}/docs/models/observer.md +0 -0
  178. {starplot-0.21.4 → starplot-0.22.0}/docs/models/planet.md +0 -0
  179. {starplot-0.21.4 → starplot-0.22.0}/docs/models/satellite.md +0 -0
  180. {starplot-0.21.4 → starplot-0.22.0}/docs/models/star.md +0 -0
  181. {starplot-0.21.4 → starplot-0.22.0}/docs/models/sun.md +0 -0
  182. {starplot-0.21.4 → starplot-0.22.0}/docs/object-names/constellations.md +0 -0
  183. {starplot-0.21.4 → starplot-0.22.0}/docs/object-names/dsos.md +0 -0
  184. {starplot-0.21.4 → starplot-0.22.0}/docs/object-names/stars.md +0 -0
  185. {starplot-0.21.4 → starplot-0.22.0}/docs/reference-callables.md +0 -0
  186. {starplot-0.21.4 → starplot-0.22.0}/docs/reference-collisions.md +0 -0
  187. {starplot-0.21.4 → starplot-0.22.0}/docs/reference-galaxyplot.md +0 -0
  188. {starplot-0.21.4 → starplot-0.22.0}/docs/reference-horizonplot.md +0 -0
  189. {starplot-0.21.4 → starplot-0.22.0}/docs/reference-localization.md +0 -0
  190. {starplot-0.21.4 → starplot-0.22.0}/docs/reference-mapplot.md +0 -0
  191. {starplot-0.21.4 → starplot-0.22.0}/docs/reference-ongc.md +0 -0
  192. {starplot-0.21.4 → starplot-0.22.0}/docs/reference-opticplot.md +0 -0
  193. {starplot-0.21.4 → starplot-0.22.0}/docs/reference-positions.md +0 -0
  194. {starplot-0.21.4 → starplot-0.22.0}/docs/reference-projections.md +0 -0
  195. {starplot-0.21.4 → starplot-0.22.0}/docs/reference-selecting-objects.md +0 -0
  196. {starplot-0.21.4 → starplot-0.22.0}/docs/reference-settings.md +0 -0
  197. {starplot-0.21.4 → starplot-0.22.0}/docs/reference-zenithplot.md +0 -0
  198. {starplot-0.21.4 → starplot-0.22.0}/docs/robots.txt +0 -0
  199. {starplot-0.21.4 → starplot-0.22.0}/docs/scripts/data.py +0 -0
  200. {starplot-0.21.4 → starplot-0.22.0}/docs/scripts/gradients.py +0 -0
  201. {starplot-0.21.4 → starplot-0.22.0}/docs/scripts/projection_list.html +0 -0
  202. {starplot-0.21.4 → starplot-0.22.0}/docs/scripts/projection_list.py +0 -0
  203. {starplot-0.21.4 → starplot-0.22.0}/docs/scripts/projections.py +0 -0
  204. {starplot-0.21.4 → starplot-0.22.0}/docs/scripts/style_explorer.html +0 -0
  205. {starplot-0.21.4 → starplot-0.22.0}/docs/scripts/style_explorer.py +0 -0
  206. {starplot-0.21.4 → starplot-0.22.0}/docs/showcase.md +0 -0
  207. {starplot-0.21.4 → starplot-0.22.0}/docs/snippets/_newsletter.html +0 -0
  208. {starplot-0.21.4 → starplot-0.22.0}/docs/styling/color.md +0 -0
  209. {starplot-0.21.4 → starplot-0.22.0}/docs/styling/explorer.md +0 -0
  210. {starplot-0.21.4 → starplot-0.22.0}/docs/styling/extensions.md +0 -0
  211. {starplot-0.21.4 → starplot-0.22.0}/docs/styling/gradients.md +0 -0
  212. {starplot-0.21.4 → starplot-0.22.0}/docs/styling/index.md +0 -0
  213. {starplot-0.21.4 → starplot-0.22.0}/docs/styling/layout.md +0 -0
  214. {starplot-0.21.4 → starplot-0.22.0}/docs/styling/reference.md +0 -0
  215. {starplot-0.21.4 → starplot-0.22.0}/docs/tutorial/01.md +0 -0
  216. {starplot-0.21.4 → starplot-0.22.0}/docs/tutorial/02.md +0 -0
  217. {starplot-0.21.4 → starplot-0.22.0}/docs/tutorial/03.md +0 -0
  218. {starplot-0.21.4 → starplot-0.22.0}/docs/tutorial/04.md +0 -0
  219. {starplot-0.21.4 → starplot-0.22.0}/docs/tutorial/05.md +0 -0
  220. {starplot-0.21.4 → starplot-0.22.0}/docs/tutorial/06.md +0 -0
  221. {starplot-0.21.4 → starplot-0.22.0}/docs/tutorial/07.md +0 -0
  222. {starplot-0.21.4 → starplot-0.22.0}/docs/tutorial/08.md +0 -0
  223. {starplot-0.21.4 → starplot-0.22.0}/docs/tutorial/09.md +0 -0
  224. {starplot-0.21.4 → starplot-0.22.0}/docs/tutorial/index.md +0 -0
  225. {starplot-0.21.4 → starplot-0.22.0}/examples/constellation.py +0 -0
  226. {starplot-0.21.4 → starplot-0.22.0}/examples/examples.py +0 -0
  227. {starplot-0.21.4 → starplot-0.22.0}/examples/galaxy.py +0 -0
  228. {starplot-0.21.4 → starplot-0.22.0}/examples/gradient.py +0 -0
  229. {starplot-0.21.4 → starplot-0.22.0}/examples/horizon_double_cluster.py +0 -0
  230. {starplot-0.21.4 → starplot-0.22.0}/examples/horizon_gradient.py +0 -0
  231. {starplot-0.21.4 → starplot-0.22.0}/examples/map_big.py +0 -0
  232. {starplot-0.21.4 → starplot-0.22.0}/examples/map_big_dipper.py +0 -0
  233. {starplot-0.21.4 → starplot-0.22.0}/examples/map_canis_major.py +0 -0
  234. {starplot-0.21.4 → starplot-0.22.0}/examples/map_carina.py +0 -0
  235. {starplot-0.21.4 → starplot-0.22.0}/examples/map_cas.py +0 -0
  236. {starplot-0.21.4 → starplot-0.22.0}/examples/map_equidistant.py +0 -0
  237. {starplot-0.21.4 → starplot-0.22.0}/examples/map_galaxy.py +0 -0
  238. {starplot-0.21.4 → starplot-0.22.0}/examples/map_milky_way_stars.py +0 -0
  239. {starplot-0.21.4 → starplot-0.22.0}/examples/map_orion.py +0 -0
  240. {starplot-0.21.4 → starplot-0.22.0}/examples/map_orthographic.py +0 -0
  241. {starplot-0.21.4 → starplot-0.22.0}/examples/map_sagittarius.py +0 -0
  242. {starplot-0.21.4 → starplot-0.22.0}/examples/map_virgo_cluster.py +0 -0
  243. {starplot-0.21.4 → starplot-0.22.0}/examples/optic_iss_transit.py +0 -0
  244. {starplot-0.21.4 → starplot-0.22.0}/examples/optic_m45.py +0 -0
  245. {starplot-0.21.4 → starplot-0.22.0}/examples/optic_orion_nebula.py +0 -0
  246. {starplot-0.21.4 → starplot-0.22.0}/examples/optic_solar_eclipse.py +0 -0
  247. {starplot-0.21.4 → starplot-0.22.0}/examples/star_chart_basic.py +0 -0
  248. {starplot-0.21.4 → starplot-0.22.0}/examples/star_chart_detail.py +0 -0
  249. {starplot-0.21.4 → starplot-0.22.0}/examples/star_chart_french.py +0 -0
  250. {starplot-0.21.4 → starplot-0.22.0}/hash_checks/__init__.py +0 -0
  251. {starplot-0.21.4 → starplot-0.22.0}/hash_checks/data/.keep +0 -0
  252. {starplot-0.21.4 → starplot-0.22.0}/hash_checks/flaky.py +0 -0
  253. {starplot-0.21.4 → starplot-0.22.0}/hash_checks/galaxy_checks.py +0 -0
  254. {starplot-0.21.4 → starplot-0.22.0}/hash_checks/hashio.py +0 -0
  255. {starplot-0.21.4 → starplot-0.22.0}/hash_checks/horizon_checks.py +0 -0
  256. {starplot-0.21.4 → starplot-0.22.0}/hash_checks/template.html +0 -0
  257. {starplot-0.21.4 → starplot-0.22.0}/hash_checks/zenith_checks.py +0 -0
  258. {starplot-0.21.4 → starplot-0.22.0}/scripts/download_test_fonts.py +0 -0
  259. {starplot-0.21.4 → starplot-0.22.0}/scripts/list_fonts.py +0 -0
  260. {starplot-0.21.4 → starplot-0.22.0}/scripts/marimo.py +0 -0
  261. {starplot-0.21.4 → starplot-0.22.0}/scripts/svg.py +0 -0
  262. {starplot-0.21.4 → starplot-0.22.0}/scripts/voronoi.py +0 -0
  263. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/cli.py +0 -0
  264. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/config.py +0 -0
  265. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/coordinates.py +0 -0
  266. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/data/__init__.py +0 -0
  267. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/data/constellations.py +0 -0
  268. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/data/db.py +0 -0
  269. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/data/dsos.py +0 -0
  270. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/data/ecliptic.py +0 -0
  271. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/data/library/dso_names.parquet +0 -0
  272. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/data/library/readme.md +0 -0
  273. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/data/library/star_designations.parquet +0 -0
  274. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/data/stars.py +0 -0
  275. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/data/utils.py +0 -0
  276. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/geometry.py +0 -0
  277. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/mixins.py +0 -0
  278. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/models/base.py +0 -0
  279. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/models/comet.py +0 -0
  280. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/models/constellation.py +0 -0
  281. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/models/dso.py +0 -0
  282. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/models/milky_way.py +0 -0
  283. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/models/moon.py +0 -0
  284. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/models/objects.py +0 -0
  285. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/models/planet.py +0 -0
  286. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/models/satellite.py +0 -0
  287. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/models/star.py +0 -0
  288. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/models/sun.py +0 -0
  289. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/plots/__init__.py +0 -0
  290. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/plots/base.py +0 -0
  291. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/plots/galaxy.py +0 -0
  292. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/plots/horizon.py +0 -0
  293. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/plots/map.py +0 -0
  294. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/plots/zenith.py +0 -0
  295. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/plotters/__init__.py +0 -0
  296. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/plotters/arrow.py +0 -0
  297. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/plotters/constellations.py +0 -0
  298. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/plotters/dsos.py +0 -0
  299. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/plotters/gridlines.py +0 -0
  300. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/plotters/legend.py +0 -0
  301. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/profile.py +0 -0
  302. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/projections.py +0 -0
  303. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/styles/__init__.py +0 -0
  304. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/styles/base.py +0 -0
  305. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/styles/constants.py +0 -0
  306. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/styles/ext/antique.yml +0 -0
  307. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/styles/ext/blue_dark.yml +0 -0
  308. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/styles/ext/blue_gold.yml +0 -0
  309. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/styles/ext/blue_light.yml +0 -0
  310. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/styles/ext/blue_medium.yml +0 -0
  311. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/styles/ext/blue_night.yml +0 -0
  312. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/styles/ext/cb_wong.yml +0 -0
  313. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/styles/ext/gradient_presets.yml +0 -0
  314. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/styles/ext/grayscale.yml +0 -0
  315. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/styles/ext/grayscale_dark.yml +0 -0
  316. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/styles/ext/horizon.yml +0 -0
  317. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/styles/ext/map.yml +0 -0
  318. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/styles/ext/nord.yml +0 -0
  319. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/styles/ext/publication.yml +0 -0
  320. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/styles/ext/starplot.yml +0 -0
  321. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/styles/extensions.py +0 -0
  322. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/styles/gradients.py +0 -0
  323. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/styles/helpers.py +0 -0
  324. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/styles/plot.py +0 -0
  325. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/svg/__init__.py +0 -0
  326. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/svg/elements.py +0 -0
  327. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/svg/fonts.py +0 -0
  328. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/svg/layout.py +0 -0
  329. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/svg/png.py +0 -0
  330. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/utils.py +0 -0
  331. {starplot-0.21.4 → starplot-0.22.0}/src/starplot/warnings.py +0 -0
  332. {starplot-0.21.4 → starplot-0.22.0}/tests/__init__.py +0 -0
  333. {starplot-0.21.4 → starplot-0.22.0}/tests/conftest.py +0 -0
  334. {starplot-0.21.4 → starplot-0.22.0}/tests/data/__init__.py +0 -0
  335. {starplot-0.21.4 → starplot-0.22.0}/tests/data/comets.txt +0 -0
  336. {starplot-0.21.4 → starplot-0.22.0}/tests/data/test_utils.py +0 -0
  337. {starplot-0.21.4 → starplot-0.22.0}/tests/models/__init__.py +0 -0
  338. {starplot-0.21.4 → starplot-0.22.0}/tests/models/test_comets.py +0 -0
  339. {starplot-0.21.4 → starplot-0.22.0}/tests/models/test_constellation.py +0 -0
  340. {starplot-0.21.4 → starplot-0.22.0}/tests/models/test_dso.py +0 -0
  341. {starplot-0.21.4 → starplot-0.22.0}/tests/models/test_satellite.py +0 -0
  342. {starplot-0.21.4 → starplot-0.22.0}/tests/models/test_star.py +0 -0
  343. {starplot-0.21.4 → starplot-0.22.0}/tests/plots/__init__.py +0 -0
  344. {starplot-0.21.4 → starplot-0.22.0}/tests/plots/test_galaxy.py +0 -0
  345. {starplot-0.21.4 → starplot-0.22.0}/tests/plots/test_horizon.py +0 -0
  346. {starplot-0.21.4 → starplot-0.22.0}/tests/svg/__init__.py +0 -0
  347. {starplot-0.21.4 → starplot-0.22.0}/tests/svg/test_canvas.py +0 -0
  348. {starplot-0.21.4 → starplot-0.22.0}/tests/svg/test_elements.py +0 -0
  349. {starplot-0.21.4 → starplot-0.22.0}/tests/svg/test_fonts.py +0 -0
  350. {starplot-0.21.4 → starplot-0.22.0}/tests/svg/test_layout.py +0 -0
  351. {starplot-0.21.4 → starplot-0.22.0}/tests/test_catalogs.py +0 -0
  352. {starplot-0.21.4 → starplot-0.22.0}/tests/test_cli.py +0 -0
  353. {starplot-0.21.4 → starplot-0.22.0}/tests/test_data.py +0 -0
  354. {starplot-0.21.4 → starplot-0.22.0}/tests/test_geometry.py +0 -0
  355. {starplot-0.21.4 → starplot-0.22.0}/tests/test_settings.py +0 -0
  356. {starplot-0.21.4 → starplot-0.22.0}/tests/test_styles.py +0 -0
  357. {starplot-0.21.4 → starplot-0.22.0}/tests/test_utils.py +0 -0
  358. {starplot-0.21.4 → starplot-0.22.0}/tests/utils.py +0 -0
  359. {starplot-0.21.4 → starplot-0.22.0}/tutorial/build.py +0 -0
  360. {starplot-0.21.4 → starplot-0.22.0}/tutorial/tutorial_02.py +0 -0
  361. {starplot-0.21.4 → starplot-0.22.0}/tutorial/tutorial_03.py +0 -0
  362. {starplot-0.21.4 → starplot-0.22.0}/tutorial/tutorial_04.py +0 -0
  363. {starplot-0.21.4 → starplot-0.22.0}/tutorial/tutorial_05.py +0 -0
  364. {starplot-0.21.4 → starplot-0.22.0}/tutorial/tutorial_06.py +0 -0
  365. {starplot-0.21.4 → starplot-0.22.0}/tutorial/tutorial_07.py +0 -0
  366. {starplot-0.21.4 → starplot-0.22.0}/tutorial/tutorial_08.py +0 -0
  367. {starplot-0.21.4 → starplot-0.22.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.22.0
24
+ date-released: '2026-10-17'
@@ -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)
@@ -1,14 +1,13 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: starplot
3
- Version: 0.21.4
3
+ Version: 0.22.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
@@ -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
@@ -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,18 @@
1
+ ## v0.22.x
2
+ [Documentation](https://archives.starplot.dev/0.22.0/)
3
+
4
+ - Adds support for "naked eye" optic plots, increasing FOV limit to 60 degrees
5
+ - Adds support for plotting constellations, gridlines, and horizon on optic plots
6
+ - Updates default catalog for Milky Way
7
+ - Adds missing German translation for Pisces
8
+ - Fixes bug with grouping star label SVG elements
9
+ - Adds a double border circle marker
10
+ - Drops official support for Python 3.10 (EOL)
11
+
12
+ ---
13
+
1
14
  ## v0.21.x
2
- [Migration Guide](migration-guides/0.21.0.md)
15
+ [Documentation](https://archives.starplot.dev/0.21.4/) | [Migration Guide](migration-guides/0.21.0.md)
3
16
 
4
17
  - Replaces the plotting backend (matplotlib + cartopy) with an SVG-first backend
5
18
  - 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.23</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.24+</td>
23
24
  <td>
24
25
  <ul>
25
26
  <li>Planet moons</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
@@ -50,6 +50,7 @@ marker_styles = {
50
50
  "star_4": default_style,
51
51
  "star_8": default_style,
52
52
  "triangle": default_style,
53
+ "circle_double_border": default_style,
53
54
  }
54
55
 
55
56
 
@@ -88,6 +88,12 @@ Below are previews of all marker symbols available in Starplot. Many aspects of
88
88
  `satellite`{: .marker-symbol-name}
89
89
  </div>
90
90
 
91
+ <div class="marker-symbol-card" markdown>
92
+ ![Circle Double Border](../images/reference/marker_circle_double_border.svg){ loading=lazy .marker-symbol-img}
93
+
94
+ `circle_double_border`{: .marker-symbol-name}
95
+ </div>
96
+
91
97
  </div>
92
98
 
93
99
 
@@ -1,23 +1,23 @@
1
1
  galaxy_base:
2
- dhash: 70cca2da9282c47070c482da92a2c87070cca2eaf292cc70
2
+ dhash: 70cca2ca9282c47070cca2ca92a2cc7070cca2c8d092cc70
3
3
  exception: null
4
4
  filename: /Users/steveberardi/src/starplot/hash_checks/data/galaxy-base.png
5
- phash: 91074ef43b0b6cf4
5
+ phash: 91074ef83b236cdc
6
6
  horizon_base:
7
- dhash: 9e86928a8eca8e0d8a86928a8eca8e0d8a86d68e8e8a8d0d
7
+ dhash: ba8e968a8eca8a0d9a8e968a8eca8e0d9a8ed68e8e8a8f0d
8
8
  exception: null
9
9
  filename: /Users/steveberardi/src/starplot/hash_checks/data/horizon-base.png
10
- phash: c0953ac53ef00f7a
10
+ phash: c0953ac53ee10f7a
11
11
  horizon_gradient_background:
12
- dhash: c17964b2b2b68e8ce179643232b68e8de168e4b2b2b28e8d
12
+ dhash: c57160b4b2b48e8ec571603432b49c8dc571e0b4b2b28e8d
13
13
  exception: null
14
14
  filename: /Users/steveberardi/src/starplot/hash_checks/data/horizon-gradient-background.png
15
- phash: 944f62816ee43df4
15
+ phash: 944f62912ff416f2
16
16
  horizon_north_celestial_pole:
17
- dhash: b89a8ab6acaab2a2a89a8ab2aeaab2a2b29a8ab2aaa2a0a2
17
+ dhash: b09a8ab6acaab2a2b29a8ab2aeaab2a2b29a8ab2aaa2a0a2
18
18
  exception: null
19
19
  filename: /Users/steveberardi/src/starplot/hash_checks/data/horizon-north-celestial-pole.png
20
- phash: d5722b087edc2a63
20
+ phash: d5722a887edc2a63
21
21
  map_allow_all_collisions:
22
22
  dhash: 263693caa6b44a26263693caa6b44a26263793caa6344326
23
23
  exception: null
@@ -64,15 +64,15 @@ map_label_callables:
64
64
  filename: /Users/steveberardi/src/starplot/hash_checks/data/map-m45-label-callables.png
65
65
  phash: b232c9c94ee74ccc
66
66
  map_milky_way_multi_polygon:
67
- dhash: 715f8b8cc8369426f11f8ba8c836942665539b88c8369426
67
+ dhash: 93cbe2f2ec6432da93cba2f2ec6632dac2c4b0d96c64129a
68
68
  exception: null
69
69
  filename: /Users/steveberardi/src/starplot/hash_checks/data/map-milky-way-multi-polygon.png
70
- phash: bc833e9856524fe2
70
+ phash: 816079afb39c4c75
71
71
  map_mollweide:
72
- dhash: 0b6b33632b32170f0b6b33632b32170f2b6b73632332170f
72
+ dhash: 0b6b33632b32170f0b6b33632b32170f2b6b73632332170b
73
73
  exception: null
74
74
  filename: /Users/steveberardi/src/starplot/hash_checks/data/map-mollweide.png
75
- phash: abcab29ce3349463
75
+ phash: ebcab29ce3349461
76
76
  map_moon_phase_waxing_crescent:
77
77
  dhash: 8088b04848b088808088a04848a088808088804848808880
78
78
  exception: null
@@ -82,12 +82,12 @@ map_orion_base:
82
82
  dhash: 183939762e2d64681839395e2e2b646a5c39b9962e2f6468
83
83
  exception: null
84
84
  filename: /Users/steveberardi/src/starplot/hash_checks/data/map-orion-base.png
85
- phash: be79d2649585b194
85
+ phash: be79d3649585a194
86
86
  map_orion_extra:
87
- dhash: 1a1b39752e6d64684a1b39592e6b646a4a1bb99d2e2f6468
87
+ dhash: 1a1b39772b6d64680a1b395b2b6f646a4a1bb9962b2f6468
88
88
  exception: null
89
89
  filename: /Users/steveberardi/src/starplot/hash_checks/data/map-orion-extra.png
90
- phash: bf717f6485869094
90
+ phash: bf715f648186909e
91
91
  map_plate_caree:
92
92
  dhash: 40928eccc44ca9ca02928eccc44ca88a82928e8cc4cca88a
93
93
  exception: null
@@ -172,7 +172,7 @@ optic_moon_phase_full:
172
172
  dhash: f0d48eb2b28ed4f0f0d48eb2b28ed4f0f0d48eb2b28ed4f0
173
173
  exception: null
174
174
  filename: /Users/steveberardi/src/starplot/hash_checks/data/optic-moon-phase-full.png
175
- phash: 888a228a888a228a
175
+ phash: 9893339b9893339b
176
176
  optic_moon_phase_new:
177
177
  dhash: f0c0aaccccaac0f0f0c0aaccccaac0f0f0c0aaccccaac0f0
178
178
  exception: null
@@ -183,6 +183,11 @@ optic_moon_phase_waxing_crescent:
183
183
  exception: null
184
184
  filename: /Users/steveberardi/src/starplot/hash_checks/data/optic-moon-phase-waxing-crescent.png
185
185
  phash: 917646991b666e99
186
+ optic_orion_naked_eye:
187
+ dhash: 64c4a2a092ccf07064d4a4a092ccf07060c4a2a092ccf070
188
+ exception: null
189
+ filename: /Users/steveberardi/src/starplot/hash_checks/data/optic-orion-naked-eye.png
190
+ phash: c46e0b957fca2499
186
191
  optic_orion_nebula_refractor:
187
192
  dhash: f0cca4f072e2ec70f0cca4f072e2ec70f0cca4f072e2ec70
188
193
  exception: null
@@ -204,17 +209,17 @@ optic_wrapping:
204
209
  filename: /Users/steveberardi/src/starplot/hash_checks/data/optic-wrapping.png
205
210
  phash: 91c446916bce39de
206
211
  zenith_base:
207
- dhash: f0ccae868296ccf1f0ccae868e96ecf1f0dcae868696ecf1
212
+ dhash: f0ccae868296ecf1f0ccae868a96ecf1f0dcae868e96ecf1
208
213
  exception: null
209
214
  filename: /Users/steveberardi/src/starplot/hash_checks/data/zenith-base.png
210
- phash: 90550b556b56787e
215
+ phash: 90570b556b56387e
211
216
  zenith_chinese:
212
217
  dhash: 96076359e4aac8718607417964aac8710607c2b8a496cc71
213
218
  exception: null
214
219
  filename: /Users/steveberardi/src/starplot/hash_checks/data/zenith-chinese.png
215
220
  phash: c46ecea41ed26987
216
221
  zenith_gradient:
217
- dhash: 86035328f082c87186075329b08ac8710607d2a8a28ecc71
222
+ dhash: 86035328f082c87186075329b08ac8710607d2a8b29ecc71
218
223
  exception: null
219
224
  filename: /Users/steveberardi/src/starplot/hash_checks/data/zenith-gradient.png
220
225
  phash: c52e8ee41ec32d87
@@ -615,8 +615,8 @@ def check_map_milky_way_multi_polygon():
615
615
  projection=Miller(),
616
616
  ra_min=17.5 * 15,
617
617
  ra_max=19.5 * 15,
618
- dec_min=-30,
619
- dec_max=0,
618
+ dec_min=-10,
619
+ dec_max=10,
620
620
  style=STYLE,
621
621
  resolution=3000,
622
622
  scale=1.4,
@@ -4,7 +4,16 @@ from zoneinfo import ZoneInfo
4
4
 
5
5
  from flaky import flake
6
6
 
7
- from starplot import Moon, Observer, OpticPlot, Satellite, _, callables, styles
7
+ from starplot import (
8
+ Moon,
9
+ Observer,
10
+ OpticPlot,
11
+ Satellite,
12
+ Star,
13
+ _,
14
+ callables,
15
+ styles,
16
+ )
8
17
  from starplot.models import optics
9
18
 
10
19
  HERE = Path(__file__).resolve().parent
@@ -27,6 +36,11 @@ style_blue = styles.PlotStyle().extend(
27
36
  styles.extensions.BLUE_DARK,
28
37
  styles.extensions.OPTIC,
29
38
  )
39
+ style_night = styles.PlotStyle().extend(
40
+ styles.extensions.BLUE_NIGHT,
41
+ styles.extensions.GRADIENT_NIGHT,
42
+ styles.extensions.OPTIC,
43
+ )
30
44
 
31
45
  POWAY = {"lat": 32.97, "lon": -117.038611}
32
46
 
@@ -449,3 +463,39 @@ def check_optic_iss_moon_transit():
449
463
  filename = DATA_PATH / "optic-iss-moon-transit.png"
450
464
  p.export(filename)
451
465
  return filename
466
+
467
+
468
+ @flake
469
+ def check_optic_orion_naked_eye():
470
+ observer = Observer(
471
+ dt=datetime(2025, 12, 21, 19, 0, 0, 0, tzinfo=tz),
472
+ lat=32.9628, # Poway, CA
473
+ lon=-117.0359,
474
+ )
475
+ alnilam = Star.get(name="Alnilam")
476
+ p = OpticPlot(
477
+ # Orion's belt, rising in the east
478
+ ra=alnilam.ra,
479
+ dec=alnilam.dec,
480
+ optic=optics.NakedEye(),
481
+ observer=observer,
482
+ style=style_night,
483
+ resolution=2800,
484
+ )
485
+ p.gridlines()
486
+ p.constellations()
487
+ p.stars(
488
+ where=[_.magnitude < 3.5],
489
+ where_labels=[False],
490
+ color_fn=callables.color_by_bv_gradient,
491
+ size_fn=lambda s: callables.size_by_magnitude(s) * 0.8,
492
+ )
493
+ p.dsos(where=[_.magnitude < 4.1], where_labels=[False])
494
+ p.constellation_borders()
495
+ p.constellation_labels()
496
+ p.horizon()
497
+ p.info()
498
+
499
+ filename = DATA_PATH / "optic-orion-naked-eye.png"
500
+ p.export(filename)
501
+ return filename
@@ -12,7 +12,6 @@ license = {file = "LICENSE"}
12
12
  classifiers = [
13
13
  "License :: OSI Approved :: MIT License",
14
14
  "Programming Language :: Python :: 3",
15
- "Programming Language :: Python :: 3.10",
16
15
  "Programming Language :: Python :: 3.11",
17
16
  "Programming Language :: Python :: 3.12",
18
17
  "Programming Language :: Python :: 3.13",
@@ -42,7 +41,7 @@ dependencies = [
42
41
  "pydantic-extra-types >= 2.11.1",
43
42
  "cairosvg >= 2.9.0",
44
43
  ]
45
- requires-python = ">=3.10,<3.15"
44
+ requires-python = ">=3.11,<3.15"
46
45
 
47
46
  [project.urls]
48
47
  Home = "https://starplot.dev"
@@ -2,7 +2,7 @@
2
2
 
3
3
  """Star charts and maps of the sky"""
4
4
 
5
- __version__ = "0.21.4"
5
+ __version__ = "0.22.0"
6
6
 
7
7
  import contextlib
8
8
 
@@ -20,6 +20,7 @@ from .models import (
20
20
  DsoType,
21
21
  MilkyWay,
22
22
  Moon,
23
+ NakedEye,
23
24
  ObjectList,
24
25
  Observer,
25
26
  Planet,
@@ -90,6 +90,9 @@ def size_by_fov_factory(fov: float) -> Callable[[Star], float]:
90
90
  Args:
91
91
  fov: Field of view (in degrees)
92
92
  """
93
+ if fov > 20:
94
+ return size_by_magnitude
95
+
93
96
  fov_multiplier = 20 / fov
94
97
 
95
98
  return lambda s: size_by_magnitude(s) * fov_multiplier * 0.64
@@ -12,3 +12,5 @@ DE_421 = "de421.bsp"
12
12
  DE_440S = "de440s.bsp"
13
13
  DE_440 = "de440.bsp"
14
14
  DE_441 = "de441.bsp"
15
+
16
+ EDGE_BUFFER = 1e-6
@@ -343,8 +343,8 @@ CONSTELLATION_BORDERS = Catalog(
343
343
  )
344
344
 
345
345
  MILKY_WAY = Catalog(
346
- path=settings.data_path / "milky_way-0.1.0.parquet",
347
- url="https://github.com/steveberardi/starplot-milkyway/releases/download/v0.1.0/milky_way.parquet",
346
+ path=settings.data_path / "milky_way-0.2.1.parquet",
347
+ url="https://github.com/steveberardi/starplot-milkyway/releases/download/v0.2.1/milky_way-0.2.1.parquet",
348
348
  )
349
349
 
350
350
 
@@ -45,6 +45,7 @@ LABELS = {
45
45
  "s": "s",
46
46
  "w": "w",
47
47
  "milky way": "milky way",
48
+ "horizon": "horizon",
48
49
  },
49
50
  "de": {
50
51
  "legend": "legende",
@@ -92,6 +93,7 @@ LABELS = {
92
93
  "s": "s",
93
94
  "w": "w",
94
95
  "milky way": "milchstraße",
96
+ "horizon": "Horizont",
95
97
  },
96
98
  "es": {
97
99
  "legend": "leyenda",
@@ -139,6 +141,7 @@ LABELS = {
139
141
  "s": "s",
140
142
  "w": "o",
141
143
  "milky way": "vía láctea",
144
+ "horizon": "horizonte",
142
145
  },
143
146
  "fr": {
144
147
  "legend": "légende",
@@ -186,6 +189,7 @@ LABELS = {
186
189
  "s": "s",
187
190
  "w": "o",
188
191
  "milky way": "voie lactée",
192
+ "horizon": "horizon",
189
193
  },
190
194
  "it": {
191
195
  "legend": "legenda",
@@ -233,6 +237,7 @@ LABELS = {
233
237
  "s": "s",
234
238
  "w": "o",
235
239
  "milky way": "via lattea",
240
+ "horizon": "orizzonte",
236
241
  },
237
242
  "zh-cn": {
238
243
  "legend": "图例",
@@ -280,6 +285,7 @@ LABELS = {
280
285
  "s": "南",
281
286
  "w": "西",
282
287
  "milky way": "银河",
288
+ "horizon": "地平线",
283
289
  },
284
290
  "zh-tw": {
285
291
  "legend": "圖例",
@@ -327,6 +333,7 @@ LABELS = {
327
333
  "s": "南",
328
334
  "w": "西",
329
335
  "milky way": "銀河",
336
+ "horizon": "地平線",
330
337
  },
331
338
  "fa": {
332
339
  "legend": "راهنما",
@@ -374,6 +381,7 @@ LABELS = {
374
381
  "s": "ج",
375
382
  "w": "غ",
376
383
  "milky way": "کهکشان راه شیری",
384
+ "horizon": "افق",
377
385
  },
378
386
  "lt": {
379
387
  "legend": "legenda",
@@ -421,6 +429,7 @@ LABELS = {
421
429
  "s": "P",
422
430
  "w": "V",
423
431
  "milky way": "Paukščių Takas",
432
+ "horizon": "horizontas",
424
433
  },
425
434
  "nl": {
426
435
  "legend": "legende",
@@ -468,6 +477,7 @@ LABELS = {
468
477
  "s": "z",
469
478
  "w": "w",
470
479
  "milky way": "melkweg",
480
+ "horizon": "horizon",
471
481
  },
472
482
  }
473
483
 
@@ -10,6 +10,7 @@ from .observer import Observer
10
10
  from .optics import (
11
11
  Binoculars,
12
12
  Camera,
13
+ NakedEye,
13
14
  Optic,
14
15
  Reflector,
15
16
  Refractor,
@@ -1,7 +1,8 @@
1
1
  from collections.abc import Callable
2
- from datetime import datetime, timezone
2
+ from datetime import UTC, datetime
3
3
  from functools import cache, cached_property
4
4
 
5
+ import numpy as np
5
6
  from pydantic import AwareDatetime, BaseModel, Field, computed_field
6
7
  from skyfield.api import Star as SkyfieldStar
7
8
  from skyfield.api import wgs84
@@ -17,7 +18,7 @@ class Observer(BaseModel):
17
18
  Represents an observer at a specific time and place.
18
19
  """
19
20
 
20
- dt: AwareDatetime = Field(default_factory=lambda: datetime.now(timezone.utc))
21
+ dt: AwareDatetime = Field(default_factory=lambda: datetime.now(UTC))
21
22
  """
22
23
  Date and time of observation (**must be timezone-aware**).
23
24
 
@@ -104,15 +105,25 @@ class Observer(BaseModel):
104
105
  def _apparent(self, obj: SkyfieldStar, ephemeris: str = "de440s.bsp"):
105
106
  """Returns apparent AZ, ALT of object"""
106
107
  pressure_mbar = self.pressure if self.pressure is not None else "standard"
107
- pos_alt, pos_az, _ = (
108
- self.observe(ephemeris)(obj)
109
- .apparent()
110
- .altaz(
111
- temperature_C=self.temperature,
112
- pressure_mbar=pressure_mbar,
113
- )
108
+ apparent = self.observe(ephemeris)(obj).apparent()
109
+ geometric_alt, pos_az, _ = apparent.altaz()
110
+ geometric_degrees = np.asarray(geometric_alt.degrees)
111
+
112
+ # Skyfield's refraction cuts off abruptly below -1 degrees altitude, which makes anything
113
+ # crossing that altitude jump. Holding refraction constant below the horizon (instead of dropping to zero)
114
+ # keeps apparent positions continuous
115
+ above_horizon = np.maximum(geometric_degrees, 0)
116
+ refracted = apparent.center.refract(
117
+ above_horizon,
118
+ self.temperature,
119
+ pressure_mbar,
114
120
  )
115
- return pos_az.degrees, pos_alt.degrees
121
+ pos_alt = geometric_degrees + (refracted.degrees - above_horizon)
122
+
123
+ if pos_alt.ndim == 0:
124
+ pos_alt = float(pos_alt)
125
+
126
+ return pos_az.degrees, pos_alt
116
127
 
117
128
  def radec(
118
129
  self, az: float, alt: float, ephemeris: str = "de440s.bsp"