starplot 0.20.0__tar.gz → 0.20.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (313) hide show
  1. {starplot-0.20.0 → starplot-0.20.1}/CITATION.cff +2 -2
  2. {starplot-0.20.0 → starplot-0.20.1}/PKG-INFO +1 -1
  3. {starplot-0.20.0 → starplot-0.20.1}/docs/changelog.md +3 -0
  4. {starplot-0.20.0 → starplot-0.20.1}/hash_checks/hashlock.yml +12 -12
  5. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/__init__.py +1 -1
  6. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/geometry.py +16 -0
  7. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/plots/base.py +5 -1
  8. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/plots/galaxy.py +16 -0
  9. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/plots/horizon.py +19 -0
  10. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/plots/optic.py +19 -0
  11. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/plotters/constellations.py +44 -74
  12. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/plotters/stars.py +13 -11
  13. {starplot-0.20.0 → starplot-0.20.1}/.dockerignore +0 -0
  14. {starplot-0.20.0 → starplot-0.20.1}/.github/FUNDING.yml +0 -0
  15. {starplot-0.20.0 → starplot-0.20.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  16. {starplot-0.20.0 → starplot-0.20.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  17. {starplot-0.20.0 → starplot-0.20.1}/.github/workflows/docs.yml +0 -0
  18. {starplot-0.20.0 → starplot-0.20.1}/.github/workflows/release.yml +0 -0
  19. {starplot-0.20.0 → starplot-0.20.1}/.github/workflows/test.yml +0 -0
  20. {starplot-0.20.0 → starplot-0.20.1}/.gitignore +0 -0
  21. {starplot-0.20.0 → starplot-0.20.1}/CODE_OF_CONDUCT.md +0 -0
  22. {starplot-0.20.0 → starplot-0.20.1}/CONTRIBUTING.md +0 -0
  23. {starplot-0.20.0 → starplot-0.20.1}/Dockerfile +0 -0
  24. {starplot-0.20.0 → starplot-0.20.1}/LICENSE +0 -0
  25. {starplot-0.20.0 → starplot-0.20.1}/Makefile +0 -0
  26. {starplot-0.20.0 → starplot-0.20.1}/README.md +0 -0
  27. {starplot-0.20.0 → starplot-0.20.1}/data/raw/constellation_borders.json +0 -0
  28. {starplot-0.20.0 → starplot-0.20.1}/data/raw/constellations.json +0 -0
  29. {starplot-0.20.0 → starplot-0.20.1}/data/raw/milkyway.json +0 -0
  30. {starplot-0.20.0 → starplot-0.20.1}/data/raw/star_designations.csv +0 -0
  31. {starplot-0.20.0 → starplot-0.20.1}/data/raw/translations/constellation_names.csv +0 -0
  32. {starplot-0.20.0 → starplot-0.20.1}/data/raw/translations/dso_names.csv +0 -0
  33. {starplot-0.20.0 → starplot-0.20.1}/data/raw/translations/en-us/constellation_names.csv +0 -0
  34. {starplot-0.20.0 → starplot-0.20.1}/data/raw/translations/en-us/dso_names.csv +0 -0
  35. {starplot-0.20.0 → starplot-0.20.1}/data/raw/translations/en-us/other_terms.csv +0 -0
  36. {starplot-0.20.0 → starplot-0.20.1}/data/raw/translations/en-us/star_names.csv +0 -0
  37. {starplot-0.20.0 → starplot-0.20.1}/data/raw/translations/es/constellation_names.csv +0 -0
  38. {starplot-0.20.0 → starplot-0.20.1}/data/raw/translations/es/dso_names.csv +0 -0
  39. {starplot-0.20.0 → starplot-0.20.1}/data/raw/translations/es/other_terms.csv +0 -0
  40. {starplot-0.20.0 → starplot-0.20.1}/data/raw/translations/es/star_names.csv +0 -0
  41. {starplot-0.20.0 → starplot-0.20.1}/data/raw/translations/fa/constellation_names.csv +0 -0
  42. {starplot-0.20.0 → starplot-0.20.1}/data/raw/translations/fa/dso_names.csv +0 -0
  43. {starplot-0.20.0 → starplot-0.20.1}/data/raw/translations/fa/other_terms.csv +0 -0
  44. {starplot-0.20.0 → starplot-0.20.1}/data/raw/translations/fa/star_names.csv +0 -0
  45. {starplot-0.20.0 → starplot-0.20.1}/data/raw/translations/fr/constellation_names.csv +0 -0
  46. {starplot-0.20.0 → starplot-0.20.1}/data/raw/translations/fr/dso_names.csv +0 -0
  47. {starplot-0.20.0 → starplot-0.20.1}/data/raw/translations/fr/other_terms.csv +0 -0
  48. {starplot-0.20.0 → starplot-0.20.1}/data/raw/translations/fr/star_names.csv +0 -0
  49. {starplot-0.20.0 → starplot-0.20.1}/data/raw/translations/lt/constellation_names.csv +0 -0
  50. {starplot-0.20.0 → starplot-0.20.1}/data/raw/translations/lt/dso_names.csv +0 -0
  51. {starplot-0.20.0 → starplot-0.20.1}/data/raw/translations/lt/other_terms.csv +0 -0
  52. {starplot-0.20.0 → starplot-0.20.1}/data/raw/translations/lt/readme.md +0 -0
  53. {starplot-0.20.0 → starplot-0.20.1}/data/raw/translations/lt/star_names.csv +0 -0
  54. {starplot-0.20.0 → starplot-0.20.1}/data/raw/translations/other_terms.csv +0 -0
  55. {starplot-0.20.0 → starplot-0.20.1}/data/raw/translations/readme.md +0 -0
  56. {starplot-0.20.0 → starplot-0.20.1}/data/raw/translations/star_names.csv +0 -0
  57. {starplot-0.20.0 → starplot-0.20.1}/data/raw/translations/zh-cn/constellation_names.csv +0 -0
  58. {starplot-0.20.0 → starplot-0.20.1}/data/raw/translations/zh-cn/dso_names.csv +0 -0
  59. {starplot-0.20.0 → starplot-0.20.1}/data/raw/translations/zh-cn/other_terms.csv +0 -0
  60. {starplot-0.20.0 → starplot-0.20.1}/data/raw/translations/zh-cn/star_names.csv +0 -0
  61. {starplot-0.20.0 → starplot-0.20.1}/data/raw/translations/zh-tw/constellation_names.csv +0 -0
  62. {starplot-0.20.0 → starplot-0.20.1}/data/raw/translations/zh-tw/dso_names.csv +0 -0
  63. {starplot-0.20.0 → starplot-0.20.1}/data/raw/translations/zh-tw/other_terms.csv +0 -0
  64. {starplot-0.20.0 → starplot-0.20.1}/data/raw/translations/zh-tw/readme.md +0 -0
  65. {starplot-0.20.0 → starplot-0.20.1}/data/raw/translations/zh-tw/star_names.csv +0 -0
  66. {starplot-0.20.0 → starplot-0.20.1}/data/readme.md +0 -0
  67. {starplot-0.20.0 → starplot-0.20.1}/data/scripts/constellation_names.py +0 -0
  68. {starplot-0.20.0 → starplot-0.20.1}/data/scripts/data_settings.py +0 -0
  69. {starplot-0.20.0 → starplot-0.20.1}/data/scripts/db.py +0 -0
  70. {starplot-0.20.0 → starplot-0.20.1}/data/scripts/docdata.py +0 -0
  71. {starplot-0.20.0 → starplot-0.20.1}/data/scripts/dso_names.py +0 -0
  72. {starplot-0.20.0 → starplot-0.20.1}/data/scripts/star_designations.py +0 -0
  73. {starplot-0.20.0 → starplot-0.20.1}/data/scripts/translations.py +0 -0
  74. {starplot-0.20.0 → starplot-0.20.1}/docs/about.md +0 -0
  75. {starplot-0.20.0 → starplot-0.20.1}/docs/coming-soon.md +0 -0
  76. {starplot-0.20.0 → starplot-0.20.1}/docs/css/extra.css +0 -0
  77. {starplot-0.20.0 → starplot-0.20.1}/docs/custom/main.html +0 -0
  78. {starplot-0.20.0 → starplot-0.20.1}/docs/data/building.md +0 -0
  79. {starplot-0.20.0 → starplot-0.20.1}/docs/data/constellations.md +0 -0
  80. {starplot-0.20.0 → starplot-0.20.1}/docs/data/dsos.md +0 -0
  81. {starplot-0.20.0 → starplot-0.20.1}/docs/data/overview.md +0 -0
  82. {starplot-0.20.0 → starplot-0.20.1}/docs/data/stars.md +0 -0
  83. {starplot-0.20.0 → starplot-0.20.1}/docs/data-explorer.md +0 -0
  84. {starplot-0.20.0 → starplot-0.20.1}/docs/data-sources.md +0 -0
  85. {starplot-0.20.0 → starplot-0.20.1}/docs/examples/horizon-double-cluster.md +0 -0
  86. {starplot-0.20.0 → starplot-0.20.1}/docs/examples/horizon-gradient.md +0 -0
  87. {starplot-0.20.0 → starplot-0.20.1}/docs/examples/horizon-sgr.md +0 -0
  88. {starplot-0.20.0 → starplot-0.20.1}/docs/examples/map-big-dipper.md +0 -0
  89. {starplot-0.20.0 → starplot-0.20.1}/docs/examples/map-big.md +0 -0
  90. {starplot-0.20.0 → starplot-0.20.1}/docs/examples/map-canis-major.md +0 -0
  91. {starplot-0.20.0 → starplot-0.20.1}/docs/examples/map-carina-nebula.md +0 -0
  92. {starplot-0.20.0 → starplot-0.20.1}/docs/examples/map-cassiopeia.md +0 -0
  93. {starplot-0.20.0 → starplot-0.20.1}/docs/examples/map-custom-marker.md +0 -0
  94. {starplot-0.20.0 → starplot-0.20.1}/docs/examples/map-galaxy.md +0 -0
  95. {starplot-0.20.0 → starplot-0.20.1}/docs/examples/map-milky-way-stars.md +0 -0
  96. {starplot-0.20.0 → starplot-0.20.1}/docs/examples/map-orion.md +0 -0
  97. {starplot-0.20.0 → starplot-0.20.1}/docs/examples/map-orthographic.md +0 -0
  98. {starplot-0.20.0 → starplot-0.20.1}/docs/examples/map-sagittarius.md +0 -0
  99. {starplot-0.20.0 → starplot-0.20.1}/docs/examples/map-virgo-cluster.md +0 -0
  100. {starplot-0.20.0 → starplot-0.20.1}/docs/examples/optic-iss-transit.md +0 -0
  101. {starplot-0.20.0 → starplot-0.20.1}/docs/examples/optic-m45.md +0 -0
  102. {starplot-0.20.0 → starplot-0.20.1}/docs/examples/optic-moon-saturn.md +0 -0
  103. {starplot-0.20.0 → starplot-0.20.1}/docs/examples/optic-orion.md +0 -0
  104. {starplot-0.20.0 → starplot-0.20.1}/docs/examples/optic-solar-eclipse.md +0 -0
  105. {starplot-0.20.0 → starplot-0.20.1}/docs/examples/star-chart-basic.md +0 -0
  106. {starplot-0.20.0 → starplot-0.20.1}/docs/examples/star-chart-detail.md +0 -0
  107. {starplot-0.20.0 → starplot-0.20.1}/docs/examples/star-chart-french.md +0 -0
  108. {starplot-0.20.0 → starplot-0.20.1}/docs/examples.md +0 -0
  109. {starplot-0.20.0 → starplot-0.20.1}/docs/images/celestial-globe.svg +0 -0
  110. {starplot-0.20.0 → starplot-0.20.1}/docs/images/cover-front-sm-360.png +0 -0
  111. {starplot-0.20.0 → starplot-0.20.1}/docs/images/discord.svg +0 -0
  112. {starplot-0.20.0 → starplot-0.20.1}/docs/images/examples/.keep +0 -0
  113. {starplot-0.20.0 → starplot-0.20.1}/docs/images/favicon.png +0 -0
  114. {starplot-0.20.0 → starplot-0.20.1}/docs/images/logo-2400px.png +0 -0
  115. {starplot-0.20.0 → starplot-0.20.1}/docs/images/logo-original/banner.png +0 -0
  116. {starplot-0.20.0 → starplot-0.20.1}/docs/images/logo-original/banner.svg +0 -0
  117. {starplot-0.20.0 → starplot-0.20.1}/docs/images/logo-original/banner.vectornator +0 -0
  118. {starplot-0.20.0 → starplot-0.20.1}/docs/images/logo-original/logo.png +0 -0
  119. {starplot-0.20.0 → starplot-0.20.1}/docs/images/logo-original/logo.svg +0 -0
  120. {starplot-0.20.0 → starplot-0.20.1}/docs/images/logo-original/logo.vectornator +0 -0
  121. {starplot-0.20.0 → starplot-0.20.1}/docs/images/logo-original/logo2.png +0 -0
  122. {starplot-0.20.0 → starplot-0.20.1}/docs/images/logo.svg +0 -0
  123. {starplot-0.20.0 → starplot-0.20.1}/docs/images/logo2.vectornator +0 -0
  124. {starplot-0.20.0 → starplot-0.20.1}/docs/images/logo500.png +0 -0
  125. {starplot-0.20.0 → starplot-0.20.1}/docs/images/mono-2400px.png +0 -0
  126. {starplot-0.20.0 → starplot-0.20.1}/docs/images/mono.png +0 -0
  127. {starplot-0.20.0 → starplot-0.20.1}/docs/images/mono.svg +0 -0
  128. {starplot-0.20.0 → starplot-0.20.1}/docs/images/star.svg +0 -0
  129. {starplot-0.20.0 → starplot-0.20.1}/docs/images/tutorial/.keep +0 -0
  130. {starplot-0.20.0 → starplot-0.20.1}/docs/index.md +0 -0
  131. {starplot-0.20.0 → starplot-0.20.1}/docs/installation.md +0 -0
  132. {starplot-0.20.0 → starplot-0.20.1}/docs/license.md +0 -0
  133. {starplot-0.20.0 → starplot-0.20.1}/docs/migration-guides/0.16.0.md +0 -0
  134. {starplot-0.20.0 → starplot-0.20.1}/docs/object-names/constellations.md +0 -0
  135. {starplot-0.20.0 → starplot-0.20.1}/docs/object-names/dsos.md +0 -0
  136. {starplot-0.20.0 → starplot-0.20.1}/docs/object-names/stars.md +0 -0
  137. {starplot-0.20.0 → starplot-0.20.1}/docs/reference-callables.md +0 -0
  138. {starplot-0.20.0 → starplot-0.20.1}/docs/reference-collisions.md +0 -0
  139. {starplot-0.20.0 → starplot-0.20.1}/docs/reference-galaxyplot.md +0 -0
  140. {starplot-0.20.0 → starplot-0.20.1}/docs/reference-horizonplot.md +0 -0
  141. {starplot-0.20.0 → starplot-0.20.1}/docs/reference-localization.md +0 -0
  142. {starplot-0.20.0 → starplot-0.20.1}/docs/reference-mapplot.md +0 -0
  143. {starplot-0.20.0 → starplot-0.20.1}/docs/reference-models.md +0 -0
  144. {starplot-0.20.0 → starplot-0.20.1}/docs/reference-ongc.md +0 -0
  145. {starplot-0.20.0 → starplot-0.20.1}/docs/reference-opticplot.md +0 -0
  146. {starplot-0.20.0 → starplot-0.20.1}/docs/reference-positions.md +0 -0
  147. {starplot-0.20.0 → starplot-0.20.1}/docs/reference-selecting-objects.md +0 -0
  148. {starplot-0.20.0 → starplot-0.20.1}/docs/reference-settings.md +0 -0
  149. {starplot-0.20.0 → starplot-0.20.1}/docs/reference-styling.md +0 -0
  150. {starplot-0.20.0 → starplot-0.20.1}/docs/reference-zenithplot.md +0 -0
  151. {starplot-0.20.0 → starplot-0.20.1}/docs/robots.txt +0 -0
  152. {starplot-0.20.0 → starplot-0.20.1}/docs/showcase.md +0 -0
  153. {starplot-0.20.0 → starplot-0.20.1}/docs/snippets/_newsletter.html +0 -0
  154. {starplot-0.20.0 → starplot-0.20.1}/docs/tutorial/01.md +0 -0
  155. {starplot-0.20.0 → starplot-0.20.1}/docs/tutorial/02.md +0 -0
  156. {starplot-0.20.0 → starplot-0.20.1}/docs/tutorial/03.md +0 -0
  157. {starplot-0.20.0 → starplot-0.20.1}/docs/tutorial/04.md +0 -0
  158. {starplot-0.20.0 → starplot-0.20.1}/docs/tutorial/05.md +0 -0
  159. {starplot-0.20.0 → starplot-0.20.1}/docs/tutorial/06.md +0 -0
  160. {starplot-0.20.0 → starplot-0.20.1}/docs/tutorial/07.md +0 -0
  161. {starplot-0.20.0 → starplot-0.20.1}/docs/tutorial/08.md +0 -0
  162. {starplot-0.20.0 → starplot-0.20.1}/docs/tutorial/09.md +0 -0
  163. {starplot-0.20.0 → starplot-0.20.1}/docs/tutorial.md +0 -0
  164. {starplot-0.20.0 → starplot-0.20.1}/examples/examples.py +0 -0
  165. {starplot-0.20.0 → starplot-0.20.1}/examples/galaxy_custom_marker.py +0 -0
  166. {starplot-0.20.0 → starplot-0.20.1}/examples/horizon_double_cluster.py +0 -0
  167. {starplot-0.20.0 → starplot-0.20.1}/examples/horizon_gradient.py +0 -0
  168. {starplot-0.20.0 → starplot-0.20.1}/examples/horizon_sgr.py +0 -0
  169. {starplot-0.20.0 → starplot-0.20.1}/examples/map_big.py +0 -0
  170. {starplot-0.20.0 → starplot-0.20.1}/examples/map_big_dipper.py +0 -0
  171. {starplot-0.20.0 → starplot-0.20.1}/examples/map_canis_major.py +0 -0
  172. {starplot-0.20.0 → starplot-0.20.1}/examples/map_carina.py +0 -0
  173. {starplot-0.20.0 → starplot-0.20.1}/examples/map_cas.py +0 -0
  174. {starplot-0.20.0 → starplot-0.20.1}/examples/map_galaxy.py +0 -0
  175. {starplot-0.20.0 → starplot-0.20.1}/examples/map_milky_way_stars.py +0 -0
  176. {starplot-0.20.0 → starplot-0.20.1}/examples/map_orion.py +0 -0
  177. {starplot-0.20.0 → starplot-0.20.1}/examples/map_orthographic.py +0 -0
  178. {starplot-0.20.0 → starplot-0.20.1}/examples/map_sagittarius.py +0 -0
  179. {starplot-0.20.0 → starplot-0.20.1}/examples/map_virgo_cluster.py +0 -0
  180. {starplot-0.20.0 → starplot-0.20.1}/examples/optic_iss_transit.py +0 -0
  181. {starplot-0.20.0 → starplot-0.20.1}/examples/optic_m45.py +0 -0
  182. {starplot-0.20.0 → starplot-0.20.1}/examples/optic_moon_saturn.py +0 -0
  183. {starplot-0.20.0 → starplot-0.20.1}/examples/optic_orion_nebula.py +0 -0
  184. {starplot-0.20.0 → starplot-0.20.1}/examples/optic_solar_eclipse.py +0 -0
  185. {starplot-0.20.0 → starplot-0.20.1}/examples/star_chart_basic.py +0 -0
  186. {starplot-0.20.0 → starplot-0.20.1}/examples/star_chart_detail.py +0 -0
  187. {starplot-0.20.0 → starplot-0.20.1}/examples/star_chart_french.py +0 -0
  188. {starplot-0.20.0 → starplot-0.20.1}/hash_checks/__init__.py +0 -0
  189. {starplot-0.20.0 → starplot-0.20.1}/hash_checks/data/.keep +0 -0
  190. {starplot-0.20.0 → starplot-0.20.1}/hash_checks/hashio.py +0 -0
  191. {starplot-0.20.0 → starplot-0.20.1}/hash_checks/horizon_checks.py +0 -0
  192. {starplot-0.20.0 → starplot-0.20.1}/hash_checks/map_checks.py +0 -0
  193. {starplot-0.20.0 → starplot-0.20.1}/hash_checks/optic_checks.py +0 -0
  194. {starplot-0.20.0 → starplot-0.20.1}/hash_checks/template.html +0 -0
  195. {starplot-0.20.0 → starplot-0.20.1}/hash_checks/zenith_checks.py +0 -0
  196. {starplot-0.20.0 → starplot-0.20.1}/mkdocs.yml +0 -0
  197. {starplot-0.20.0 → starplot-0.20.1}/pyproject.toml +0 -0
  198. {starplot-0.20.0 → starplot-0.20.1}/requirements-dev.txt +0 -0
  199. {starplot-0.20.0 → starplot-0.20.1}/requirements.txt +0 -0
  200. {starplot-0.20.0 → starplot-0.20.1}/scripts/ecliptic.py +0 -0
  201. {starplot-0.20.0 → starplot-0.20.1}/scripts/marimo.py +0 -0
  202. {starplot-0.20.0 → starplot-0.20.1}/scripts/voronoi.py +0 -0
  203. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/callables.py +0 -0
  204. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/cli.py +0 -0
  205. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/config.py +0 -0
  206. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/coordinates.py +0 -0
  207. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/data/__init__.py +0 -0
  208. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/data/catalogs.py +0 -0
  209. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/data/constellations.py +0 -0
  210. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/data/db.py +0 -0
  211. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/data/dsos.py +0 -0
  212. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/data/ecliptic.py +0 -0
  213. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/data/library/constellation_names.parquet +0 -0
  214. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/data/library/dso_names.parquet +0 -0
  215. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/data/library/readme.md +0 -0
  216. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/data/library/star_designations.parquet +0 -0
  217. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/data/stars.py +0 -0
  218. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/data/translations.py +0 -0
  219. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/data/utils.py +0 -0
  220. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/mixins.py +0 -0
  221. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/models/__init__.py +0 -0
  222. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/models/base.py +0 -0
  223. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/models/comet.py +0 -0
  224. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/models/constellation.py +0 -0
  225. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/models/dso.py +0 -0
  226. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/models/milky_way.py +0 -0
  227. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/models/moon.py +0 -0
  228. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/models/objects.py +0 -0
  229. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/models/observer.py +0 -0
  230. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/models/optics.py +0 -0
  231. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/models/planet.py +0 -0
  232. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/models/satellite.py +0 -0
  233. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/models/star.py +0 -0
  234. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/models/sun.py +0 -0
  235. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/plots/__init__.py +0 -0
  236. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/plots/map.py +0 -0
  237. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/plots/zenith.py +0 -0
  238. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/plotters/__init__.py +0 -0
  239. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/plotters/arrow.py +0 -0
  240. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/plotters/debug.py +0 -0
  241. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/plotters/dsos.py +0 -0
  242. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/plotters/experimental.py +0 -0
  243. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/plotters/gradients.py +0 -0
  244. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/plotters/legend.py +0 -0
  245. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/plotters/milkyway.py +0 -0
  246. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/plotters/text.py +0 -0
  247. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/profile.py +0 -0
  248. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/projections.py +0 -0
  249. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/styles/__init__.py +0 -0
  250. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/styles/base.py +0 -0
  251. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/styles/ext/antique.yml +0 -0
  252. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/styles/ext/blue_dark.yml +0 -0
  253. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/styles/ext/blue_gold.yml +0 -0
  254. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/styles/ext/blue_light.yml +0 -0
  255. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/styles/ext/blue_medium.yml +0 -0
  256. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/styles/ext/blue_night.yml +0 -0
  257. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/styles/ext/cb_wong.yml +0 -0
  258. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/styles/ext/color_print.yml +0 -0
  259. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/styles/ext/gradient_presets.yml +0 -0
  260. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/styles/ext/grayscale.yml +0 -0
  261. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/styles/ext/grayscale_dark.yml +0 -0
  262. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/styles/ext/map.yml +0 -0
  263. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/styles/ext/nord.yml +0 -0
  264. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/styles/ext/optic.yml +0 -0
  265. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/styles/ext/publication.yml +0 -0
  266. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/styles/extensions.py +0 -0
  267. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/styles/fonts-library/gfs-didot/DESCRIPTION.en_us.html +0 -0
  268. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/styles/fonts-library/gfs-didot/GFSDidot-Regular.ttf +0 -0
  269. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/styles/fonts-library/gfs-didot/METADATA.pb +0 -0
  270. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/styles/fonts-library/gfs-didot/OFL.txt +0 -0
  271. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/styles/fonts-library/inter/Inter-Bold.ttf +0 -0
  272. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/styles/fonts-library/inter/Inter-BoldItalic.ttf +0 -0
  273. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/styles/fonts-library/inter/Inter-ExtraBold.ttf +0 -0
  274. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/styles/fonts-library/inter/Inter-ExtraLight.ttf +0 -0
  275. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/styles/fonts-library/inter/Inter-ExtraLightItalic.ttf +0 -0
  276. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/styles/fonts-library/inter/Inter-Italic.ttf +0 -0
  277. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/styles/fonts-library/inter/Inter-Light.ttf +0 -0
  278. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/styles/fonts-library/inter/Inter-LightItalic.ttf +0 -0
  279. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/styles/fonts-library/inter/Inter-Regular.ttf +0 -0
  280. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/styles/fonts-library/inter/Inter-SemiBold.ttf +0 -0
  281. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/styles/fonts-library/inter/Inter-SemiBoldItalic.ttf +0 -0
  282. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/styles/fonts-library/inter/LICENSE.txt +0 -0
  283. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/styles/fonts.py +0 -0
  284. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/styles/helpers.py +0 -0
  285. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/styles/markers.py +0 -0
  286. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/utils.py +0 -0
  287. {starplot-0.20.0 → starplot-0.20.1}/src/starplot/warnings.py +0 -0
  288. {starplot-0.20.0 → starplot-0.20.1}/tests/__init__.py +0 -0
  289. {starplot-0.20.0 → starplot-0.20.1}/tests/data/.keep +0 -0
  290. {starplot-0.20.0 → starplot-0.20.1}/tests/data/comets.txt +0 -0
  291. {starplot-0.20.0 → starplot-0.20.1}/tests/test_catalogs.py +0 -0
  292. {starplot-0.20.0 → starplot-0.20.1}/tests/test_comets.py +0 -0
  293. {starplot-0.20.0 → starplot-0.20.1}/tests/test_data.py +0 -0
  294. {starplot-0.20.0 → starplot-0.20.1}/tests/test_geometry.py +0 -0
  295. {starplot-0.20.0 → starplot-0.20.1}/tests/test_languages.py +0 -0
  296. {starplot-0.20.0 → starplot-0.20.1}/tests/test_map.py +0 -0
  297. {starplot-0.20.0 → starplot-0.20.1}/tests/test_models.py +0 -0
  298. {starplot-0.20.0 → starplot-0.20.1}/tests/test_observer.py +0 -0
  299. {starplot-0.20.0 → starplot-0.20.1}/tests/test_optic.py +0 -0
  300. {starplot-0.20.0 → starplot-0.20.1}/tests/test_satellite.py +0 -0
  301. {starplot-0.20.0 → starplot-0.20.1}/tests/test_settings.py +0 -0
  302. {starplot-0.20.0 → starplot-0.20.1}/tests/test_stars.py +0 -0
  303. {starplot-0.20.0 → starplot-0.20.1}/tests/test_styles.py +0 -0
  304. {starplot-0.20.0 → starplot-0.20.1}/tests/test_utils.py +0 -0
  305. {starplot-0.20.0 → starplot-0.20.1}/tests/utils.py +0 -0
  306. {starplot-0.20.0 → starplot-0.20.1}/tutorial/build.py +0 -0
  307. {starplot-0.20.0 → starplot-0.20.1}/tutorial/tutorial_02.py +0 -0
  308. {starplot-0.20.0 → starplot-0.20.1}/tutorial/tutorial_03.py +0 -0
  309. {starplot-0.20.0 → starplot-0.20.1}/tutorial/tutorial_04.py +0 -0
  310. {starplot-0.20.0 → starplot-0.20.1}/tutorial/tutorial_05.py +0 -0
  311. {starplot-0.20.0 → starplot-0.20.1}/tutorial/tutorial_06.py +0 -0
  312. {starplot-0.20.0 → starplot-0.20.1}/tutorial/tutorial_07.py +0 -0
  313. {starplot-0.20.0 → starplot-0.20.1}/tutorial/tutorial_08.py +0 -0
@@ -20,5 +20,5 @@ keywords:
20
20
  - graphs
21
21
  - plotting
22
22
  license: MIT
23
- version: 0.20.0
24
- date-released: '2026-03-07'
23
+ version: 0.20.1
24
+ date-released: '2026-03-10'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: starplot
3
- Version: 0.20.0
3
+ Version: 0.20.1
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 <hello@steveberardi.com>
@@ -8,6 +8,9 @@
8
8
  - Adds the PlateCarree projection
9
9
  - Adds effect of atmospheric refraction to horizon and optic plots
10
10
  - Fixes a bug with calculating apparent positions of solar system objects in horizon/optic plots
11
+ - [**v0.20.1**]
12
+ - Optimizes coordinate conversions
13
+ - Makes constellation lines straight
11
14
 
12
15
 
13
16
  ## v0.19.x
@@ -15,7 +15,7 @@ map_allow_all_collisions:
15
15
  filename: /starplot/hash_checks/data/map-allow-all-collisions.png
16
16
  phash: ac1b1e9626c379f0
17
17
  map_allow_marker_and_line_collisions:
18
- dhash: 858486ed36d2276f85848eed3652276f8da48ead33cb276f
18
+ dhash: 858486ed36d2276f85848eed3652276f8da48ead334b276f
19
19
  filename: /starplot/hash_checks/data/map-allow-some-collisions.png
20
20
  phash: aed0f6299ee203d8
21
21
  map_coma_berenices_dso_size:
@@ -27,9 +27,9 @@ map_constellation_clip_path:
27
27
  filename: /starplot/hash_checks/data/map-constellation-clip-path.png
28
28
  phash: 99c41b19ccd98ece
29
29
  map_custom_stars:
30
- dhash: 5e21a9ceac2c844a5e21a9ceac2c844a5e21a9ceac2c844a
30
+ dhash: 5c21a9ceac2c844a5c21a9ceac2c844a5c21a9ceac2c844a
31
31
  filename: /starplot/hash_checks/data/map-custom-stars.png
32
- phash: e6185bb425a5bdd0
32
+ phash: e65a5b3405a5b7d0
33
33
  map_gridlines:
34
34
  dhash: 082a899422c94983082a899422c94983082a899422c94983
35
35
  filename: /starplot/hash_checks/data/map-gridlines.png
@@ -43,9 +43,9 @@ map_milky_way_multi_polygon:
43
43
  filename: /starplot/hash_checks/data/map-milky-way-multi-polygon.png
44
44
  phash: ae89be88d6584fe0
45
45
  map_mollweide:
46
- dhash: 0f2b336b2b33170f0f2b336b2b33170f0f63736b2b36170f
46
+ dhash: 0f2b336b2b33170f0f2b336b2b33170f1763736b2b36170f
47
47
  filename: /starplot/hash_checks/data/map-mollweide.png
48
- phash: ebcab698e3349461
48
+ phash: ebcbb698e3309461
49
49
  map_moon_phase_waxing_crescent:
50
50
  dhash: 000830484830080000082048482008008088804848808880
51
51
  filename: /starplot/hash_checks/data/map-moon-phase-waxing-crescent.png
@@ -67,7 +67,7 @@ map_plot_custom_clip_path_virgo:
67
67
  filename: /starplot/hash_checks/data/map-custom-clip-path-virgo.png
68
68
  phash: ec6dc9e594929296
69
69
  map_plot_limit_by_geometry:
70
- dhash: a02189a4568c6552a0219184160d6512a02199b4140c6d12
70
+ dhash: a02189a4568c6552a0219104160d6512a02199b4140c6d12
71
71
  filename: /starplot/hash_checks/data/map-limit-by-geometry.png
72
72
  phash: b2d88e33c986f349
73
73
  map_scope_bino_fov:
@@ -75,7 +75,7 @@ map_scope_bino_fov:
75
75
  filename: /starplot/hash_checks/data/map-scope-bino-fov.png
76
76
  phash: f3504c72735c4c73
77
77
  map_stereo_base:
78
- dhash: 45c37b3192a9b9b245c35b3192a1199245c34b3192a93992
78
+ dhash: 45c37b3192a9b9b245c35b3192a1999245c34b3192a93992
79
79
  filename: /starplot/hash_checks/data/map-stereo-north-base.png
80
80
  phash: 8a2f62d2949e4fb4
81
81
  map_with_planets:
@@ -95,7 +95,7 @@ optic_camera_rotated:
95
95
  filename: /starplot/hash_checks/data/optic-camera-rotated-m45.png
96
96
  phash: b86cc6b40ed9f08d
97
97
  optic_clipping:
98
- dhash: 32c498f8e6e4fc5d32c498f8e6e4fc5933e0d8faf6e2fc79
98
+ dhash: 32c498f8e6e4fc5d32c498f8e6e4fc5933e098faf6e2fc79
99
99
  filename: /starplot/hash_checks/data/optic-clipping.png
100
100
  phash: 95687a872f9868f2
101
101
  optic_iss_moon_transit:
@@ -147,18 +147,18 @@ optic_solar_eclipse_binoculars:
147
147
  filename: /starplot/hash_checks/data/optic-binoculars-eclipse.png
148
148
  phash: 91cc4e333bcc6c33
149
149
  optic_wrapping:
150
- dhash: 71f0ec92d2da651a71e0d4acacc4782a71e8d4acacc4783a
150
+ dhash: 71f0ac92d2da651a71e094acacc4782a71e8d4acacc4783a
151
151
  filename: /starplot/hash_checks/data/optic-wrapping.png
152
- phash: d1066e1b792ef138
152
+ phash: d1846e1b792ef138
153
153
  zenith_base:
154
154
  dhash: 71f8cc8eaad4e87171f8cc868ad4e87171f8cc868ed4e871
155
155
  filename: /starplot/hash_checks/data/zenith-base.png
156
156
  phash: 90d50b7d2955645f
157
157
  zenith_chinese:
158
- dhash: 44863331272b86744c863331252b865471cc8e0f0f8ecc71
158
+ dhash: 44863331272b86704c863331252b865471cc8e0f0f8ecc71
159
159
  filename: /starplot/hash_checks/data/zenith-chinese.png
160
160
  phash: ed30c1469ecb1bcc
161
161
  zenith_gradient:
162
162
  dhash: 548613333123867044863339312b865471cc960f078ecc71
163
163
  filename: /starplot/hash_checks/data/zenith-gradient.png
164
- phash: ed3c84c29acb19cd
164
+ phash: e93c94c29acb19cd
@@ -2,7 +2,7 @@
2
2
 
3
3
  """Star charts and maps of the sky"""
4
4
 
5
- __version__ = "0.20.0"
5
+ __version__ = "0.20.1"
6
6
 
7
7
  from .plots import (
8
8
  MapPlot,
@@ -234,6 +234,22 @@ def split_polygon_at_zero(polygon: Polygon) -> list[Polygon]:
234
234
  return [polygon]
235
235
 
236
236
 
237
+ def split_line_at_meridian(p1, p2, meridian=360):
238
+ """Split a line that crosses the meridian into two segments."""
239
+ x1, y1 = p1
240
+ x2, y2 = p2
241
+
242
+ # Interpolate the crossing point
243
+ t = (meridian - x1) / (x2 - x1)
244
+ y_cross = y1 + t * (y2 - y1)
245
+
246
+ # Two segments on either side
247
+ seg1 = [(x1, y1), (359.9999999, y_cross)]
248
+ seg2 = [(0, y_cross), (x2 - 360, y2)] # or -meridian depending on convention
249
+
250
+ return seg1, seg2
251
+
252
+
237
253
  def random_point_in_polygon_at_distance(
238
254
  polygon: Polygon,
239
255
  origin_point: Point,
@@ -175,6 +175,9 @@ class BasePlot(DebugPlotterMixin, TextPlotterMixin, ABC):
175
175
  def _prepare_coords(self, ra, dec) -> tuple[float, float]:
176
176
  return ra, dec
177
177
 
178
+ def _prepare_coords_many(self, coordinates: list, epoch_year: float = 2000) -> list:
179
+ return coordinates
180
+
178
181
  def _update_clip_path_polygon(self, buffer=8):
179
182
  self.fig.draw_without_rendering()
180
183
  coords = self._background_clip_path.get_verts()
@@ -514,7 +517,8 @@ class BasePlot(DebugPlotterMixin, TextPlotterMixin, ABC):
514
517
  raise NotImplementedError
515
518
 
516
519
  def _polygon(self, points: list, style: PolygonStyle, **kwargs):
517
- points = [self._prepare_coords(*p) for p in points]
520
+ # points = [self._prepare_coords(*p) for p in points]
521
+ points = self._prepare_coords_many(points)
518
522
  patch = patches.Polygon(
519
523
  points,
520
524
  # closed=False, # needs to be false for circles at poles?
@@ -1,6 +1,7 @@
1
1
  from functools import cache
2
2
  from typing import Callable
3
3
 
4
+ import pandas as pd
4
5
  import numpy as np
5
6
  import astropy.units as u
6
7
  from astropy.coordinates import SkyCoord
@@ -130,6 +131,21 @@ class GalaxyPlot(
130
131
 
131
132
  return lon.degrees, lat.degrees
132
133
 
134
+ def _prepare_coords_many(
135
+ self, coordinates: list, epoch_year: float = 2000
136
+ ) -> (float, float):
137
+ """Converts RA/DEC to AZ/ALT"""
138
+ df = pd.DataFrame(coordinates, columns=["ra", "dec"])
139
+ df["ra_hours"], df["dec_degrees"] = (df.ra / 15, df.dec)
140
+ df["epoch_year"] = epoch_year
141
+
142
+ sf_star = SkyfieldStar.from_dataframe(df)
143
+ position = self.observe(sf_star)
144
+ lat, lon, _ = position.frame_latlon(galactic_frame)
145
+ df["x"], df["y"] = (lon.degrees, lat.degrees)
146
+
147
+ return list(zip(df["x"], df["y"]))
148
+
133
149
  def _prepare_star_coords(self, df, limit_by_altaz=True):
134
150
  stars_position = self.observe(SkyfieldStar.from_dataframe(df))
135
151
  lat, lon, _ = stars_position.frame_latlon(galactic_frame)
@@ -3,6 +3,8 @@ import math
3
3
  from functools import cache
4
4
  from typing import Callable
5
5
 
6
+ import pandas as pd
7
+
6
8
  from cartopy import crs as ccrs
7
9
  from matplotlib import pyplot as plt, patches
8
10
  from matplotlib.ticker import FixedLocator, FuncFormatter
@@ -163,6 +165,23 @@ class HorizonPlot(
163
165
  ephemeris=self.ephemeris_name,
164
166
  )
165
167
 
168
+ def _prepare_coords_many(
169
+ self, coordinates: list, epoch_year: float = 2000
170
+ ) -> (float, float):
171
+ """Converts RA/DEC to AZ/ALT"""
172
+ df = pd.DataFrame(coordinates, columns=["ra", "dec"])
173
+ df["ra_hours"], df["dec_degrees"] = (df.ra / 15, df.dec)
174
+ df["epoch_year"] = epoch_year
175
+
176
+ sf_star = SkyfieldStar.from_dataframe(df)
177
+
178
+ df["x"], df["y"] = self.observer._apparent(
179
+ obj=sf_star,
180
+ ephemeris=self.ephemeris_name,
181
+ )
182
+
183
+ return list(zip(df["x"], df["y"]))
184
+
166
185
  def _prepare_star_coords(self, df, limit_by_altaz=True):
167
186
  df["x"], df["y"] = self.observer._apparent(
168
187
  obj=SkyfieldStar.from_dataframe(df),
@@ -1,5 +1,7 @@
1
1
  from typing import Callable
2
2
 
3
+
4
+ import pandas as pd
3
5
  from cartopy import crs as ccrs
4
6
  from matplotlib import pyplot as plt, patches, path
5
7
  from skyfield.api import Star as SkyfieldStar
@@ -145,6 +147,23 @@ class OpticPlot(
145
147
  ephemeris=self.ephemeris_name,
146
148
  )
147
149
 
150
+ def _prepare_coords_many(
151
+ self, coordinates: list, epoch_year: float = 2000
152
+ ) -> (float, float):
153
+ """Converts RA/DEC to AZ/ALT"""
154
+ df = pd.DataFrame(coordinates, columns=["ra", "dec"])
155
+ df["ra_hours"], df["dec_degrees"] = (df.ra / 15, df.dec)
156
+ df["epoch_year"] = epoch_year
157
+
158
+ sf_star = SkyfieldStar.from_dataframe(df)
159
+
160
+ df["x"], df["y"] = self.observer._apparent(
161
+ obj=sf_star,
162
+ ephemeris=self.ephemeris_name,
163
+ )
164
+
165
+ return list(zip(df["x"], df["y"]))
166
+
148
167
  def _plot_kwargs(self) -> dict:
149
168
  return dict(transform=self._crs)
150
169
 
@@ -1,7 +1,5 @@
1
1
  from typing import Callable
2
2
 
3
- import numpy as np
4
-
5
3
  import rtree
6
4
  from shapely import (
7
5
  MultiPoint,
@@ -20,34 +18,14 @@ from starplot.data.catalogs import (
20
18
  from starplot.data.stars import load as load_stars
21
19
  from starplot.models import Star, Constellation
22
20
  from starplot.models.constellation import from_tuple
23
- from starplot.projections import (
24
- StereoNorth,
25
- StereoSouth,
26
- Stereographic,
27
- Equidistant,
28
- LambertAzEqArea,
29
- )
30
21
  from starplot.profile import profile
31
22
  from starplot.styles import LineStyle, LabelStyle
32
23
  from starplot.styles.helpers import use_style
33
- from starplot.geometry import is_wrapped_polygon, line_segment
24
+ from starplot.geometry import is_wrapped_polygon, line_segment, split_line_at_meridian
34
25
  from starplot.plotters.text import CollisionHandler
35
26
 
36
- GEODETIC_PROJECTIONS = (
37
- Equidistant,
38
- LambertAzEqArea,
39
- Stereographic,
40
- StereoNorth,
41
- StereoSouth,
42
- )
43
-
44
27
 
45
28
  class ConstellationPlotterMixin:
46
- def inbounds_temp(self, x, y):
47
- data_x, data_y = self._proj.transform_point(x, y, self._geodetic)
48
- display_x, display_y = self.ax.transData.transform((data_x, data_y))
49
- return display_x > 0 and display_y > 0
50
-
51
29
  @profile
52
30
  def _prepare_constellation_stars(
53
31
  self, constellations: list[Constellation]
@@ -115,13 +93,6 @@ class ConstellationPlotterMixin:
115
93
 
116
94
  constellations = [from_tuple(c) for c in constellations_df.itertuples()]
117
95
 
118
- projection = getattr(self, "projection", None)
119
- if isinstance(projection, GEODETIC_PROJECTIONS):
120
- transform = self._geodetic
121
- else:
122
- transform = self._plate_carree
123
-
124
- style_kwargs = style.matplot_kwargs(self.scale)
125
96
  constellation_points_to_index = []
126
97
  lines = []
127
98
  constars = self._prepare_constellation_stars(constellations)
@@ -133,16 +104,18 @@ class ConstellationPlotterMixin:
133
104
  for s1_hip, s2_hip in hiplines:
134
105
  if not constars.get(s1_hip) or not constars.get(s2_hip):
135
106
  continue
136
- s1_ra, s1_dec = constars.get(s1_hip)
137
- s2_ra, s2_dec = constars.get(s2_hip)
138
107
 
139
- if s1_ra - s2_ra > 60:
140
- s2_ra += 360
141
- elif s2_ra - s1_ra > 60:
142
- s1_ra += 360
108
+ x1, y1 = constars.get(s1_hip)
109
+ x2, y2 = constars.get(s2_hip)
110
+
111
+ if x1 == x2 and y1 == y2:
112
+ continue
113
+
114
+ if x1 - x2 > 60:
115
+ x2 += 360
116
+ elif x2 - x1 > 60:
117
+ x1 += 360
143
118
 
144
- x1, x2 = s1_ra, s2_ra
145
- y1, y2 = s1_dec, s2_dec
146
119
  if not inbounds and (
147
120
  self._in_bounds_xy(x1, y1) or self._in_bounds_xy(x2, y2)
148
121
  ):
@@ -150,57 +123,54 @@ class ConstellationPlotterMixin:
150
123
  elif not inbounds:
151
124
  continue
152
125
 
153
- if self._coordinate_system == CoordinateSystem.RA_DEC:
154
- x1 *= -1
155
- x2 *= -1
126
+ xy_lines = []
156
127
 
157
- lines.append([(x1, y1), (x2, y2)])
128
+ if x2 > 360:
129
+ xy_lines = [*split_line_at_meridian((x1, y1), (x2, y2))]
130
+ elif x1 > 360:
131
+ xy_lines = [*split_line_at_meridian((x2, y2), (x1, y1))]
132
+ else:
133
+ xy_lines = [[(x1, y1), (x2, y2)]]
158
134
 
159
- start = self._proj.transform_point(x1, y1, self._geodetic)
160
- end = self._proj.transform_point(x2, y2, self._geodetic)
161
- radius = style.width * self.scale if style.width else 1
162
-
163
- if any([np.isnan(n) for n in start + end]):
164
- continue
135
+ data_lines = [
136
+ [self._proj.transform_point(x, y, self._crs) for x, y in line]
137
+ for line in xy_lines
138
+ ]
139
+ display_lines = [
140
+ [self.ax.transData.transform(p) for p in line]
141
+ for line in data_lines
142
+ ]
165
143
 
166
- display_start = self.ax.transData.transform(start)
167
- display_end = self.ax.transData.transform(end)
144
+ lines.extend(data_lines)
168
145
 
169
- if (
170
- display_start[0] == display_end[0]
171
- and display_start[1] == display_end[1]
172
- ):
173
- continue
146
+ radius = style.width * self.scale if style.width else 1
174
147
 
175
- for x, y in line_segment(display_start, display_end, radius * 4):
176
- if x < 0 or y < 0:
177
- continue
178
- bbox = (
179
- x - radius,
180
- y - radius,
181
- x + radius,
182
- y + radius,
183
- )
184
- if self.debug_text:
185
- self._debug_bbox(bbox, color="#39FF14", width=0.5)
186
-
187
- constellation_points_to_index.append((ctr, bbox, None))
188
- ctr += 1
148
+ for display_start, display_end in display_lines:
149
+ for x, y in line_segment(display_start, display_end, radius * 4):
150
+ if x < 0 or y < 0:
151
+ continue
152
+ bbox = (
153
+ x - radius,
154
+ y - radius,
155
+ x + radius,
156
+ y + radius,
157
+ )
158
+ if self.debug_text:
159
+ self._debug_bbox(bbox, color="#39FF14", width=0.5)
160
+
161
+ constellation_points_to_index.append((ctr, bbox, None))
162
+ ctr += 1
189
163
 
190
164
  if inbounds:
191
165
  self._objects.constellations.append(c)
192
166
 
193
- style_kwargs = style.matplot_line_collection_kwargs(self.scale)
194
-
195
167
  line_collection = LineCollection(
196
168
  lines,
197
- **style_kwargs,
198
- transform=transform,
199
169
  clip_on=True,
200
170
  clip_path=self._background_clip_path,
201
171
  gid="constellations-line",
172
+ **style.matplot_line_collection_kwargs(self.scale),
202
173
  )
203
-
204
174
  self.ax.add_collection(line_collection)
205
175
 
206
176
  if self._constellations_rtree.get_size() == 0:
@@ -230,18 +230,20 @@ class StarPlotterMixin:
230
230
  starz = []
231
231
  rtree_id = 1
232
232
 
233
- for star in stars_df.itertuples():
234
- data_xy = self._proj.transform_point(star.x, star.y, self._crs)
235
- display_x, display_y = self.ax.transData.transform(data_xy)
233
+ transformed = self._proj.transform_points(
234
+ self._crs,
235
+ stars_df["x"].to_numpy(),
236
+ stars_df["y"].to_numpy(),
237
+ )
238
+ stars_df["data_x"] = transformed[:, 0]
239
+ stars_df["data_y"] = transformed[:, 1]
240
+ stars_df[["display_x", "display_y"]] = self.ax.transData.transform(
241
+ stars_df[["data_x", "data_y"]].to_numpy()
242
+ )
243
+ stars_df = stars_df[(stars_df["display_x"] >= 0) & (stars_df["display_y"] >= 0)]
236
244
 
237
- if (
238
- display_x < 0
239
- or display_y < 0
240
- or np.isnan(display_x)
241
- or np.isnan(display_y)
242
- or self._is_clipped([(display_x, display_y)])
243
- ):
244
- continue
245
+ for star in stars_df.itertuples():
246
+ display_x, display_y = star.display_x, star.display_y
245
247
 
246
248
  obj = from_tuple(star)
247
249
  size = size_fn(obj) * self.scale**2
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes