Skip to content

Lazy-load reference frames#157

Merged
rhannequin merged 1 commit intomainfrom
lazy-load-reference-frames
Mar 26, 2025
Merged

Lazy-load reference frames#157
rhannequin merged 1 commit intomainfrom
lazy-load-reference-frames

Conversation

@rhannequin
Copy link
Owner

Before, geometric, astrometric, mean_of_date and apparent reference frames were computed immediately at the body's initialization. This was due to the fact that they all need at least some piece of information from other reference frames. This was also to make sure ephem was never saved as instance variable as it can be a very large one.

Now, only the required pieces of information are computed on initialization:

  • geometric reference frame
  • Earth's geometric position
  • Light-time correction

From this data, astrometric, mean_of_date and apparent positions can be computed just-in-time. ephem is still not saved as instance variable as it is not necessary anymore once the required data is computed.

While this is not going to change much for parts of the library that use the apparent position as it requires geometric and astrometric to be computed, it is going to improve the overall performance of the library by preventing to compute all reference frames when they're not all necessary.

Before, `geometric`, `astrometric`, `mean_of_date` and `apparent`
reference frames were computed immediately at the body's initialization.
This was due to the fact that they all need at least some piece of
information from other reference frames. This was also to make sure
`ephem` was never saved as instance variable as it can be a very large
one.

Now, only the required pieces of information are computed on
initialization:
* `geometric` reference frame
* Earth's geometric position
* Light-time correction

From this data, `astrometric`, `mean_of_date` and `apparent` positions
can be computed just-in-time. `ephem` is still not saved as instance
variable as it is not necessary anymore once the required data is
computed.

While this is not going to change much for parts of the library that use
the apparent position as it requires `geometric` and `astrometric` to be
computed, it is going to improve the overall performance of the library
by preventing to compute all reference frames when they're not all
necessary.
@rhannequin rhannequin self-assigned this Mar 26, 2025
@rhannequin rhannequin merged commit 577be00 into main Mar 26, 2025
37 checks passed
@rhannequin rhannequin deleted the lazy-load-reference-frames branch March 26, 2025 08:54
@rhannequin rhannequin mentioned this pull request Apr 30, 2025
rhannequin added a commit that referenced this pull request May 12, 2025
## 0.7.0 - 2025-05-12

_If you are upgrading: please see [UPGRADING.md]._

### Bug fixes

* Fix Moon monthly phase events calculation by @valeriy-sokoloff in ([#124])

### Features

* Add `Instant` value object ([#121])
* Introduce barycentric position of Solar System major bodies ([#127])
* Introduce Astrometric position for planets ([#129])
* Rename Barycentric into Geometric ([#130])
* Rename IRCF and remove module Position ([#131])
* Geometric and Astrometric reference frames with coordinates ([#132])
* Ecliptic coordinates for Geometric and Astrometric reference frames ([#134])
* Add Geometric and Astrometric positions for `Sun` and `Moon` ([#135])
* Implement new aberration correction ([#136])
* Precession matrix for 2006 P03 model ([#137])
* Introduce `MeanOfDate` reference frame ([#138])
* New nutation model ([#141])
* Light deflection correction ([#142])
* Introduce `Apparent` reference frame ([#143])
* Introduce `Topocentric` reference frame ([#145])
* Improve Vector integration with value objects ([#146])
* Handle refracted topocentric horizontal coordinates ([#147])
* Add `#angular_diameter` to apparent and topocentric reference frames ([#149])
* Introduce new calculator for rising, transit and setting times ([#148])
* Clean code after Ephem refactoring ([#152])
* Improve `RisingTransitSettingEventsCalculator` ([#155])
* Simplify `RisingTransitSettingEventsCalculator` ([#156])
* Lazy-load reference frames ([#157])
* Overall performance improvements ([#163])
* Add support for IMCCE INPOP by @JoelQ and @rhannequin ([#166])
* Update INPOP excerpt in spec data ([#167])
* Introduce a better rise/transit/set calculator ([#168])
* Drop `Astronoby::Observer#observe` ([#174])

### Improvements

* Bump standard from 1.42.1 to 1.49.0 by @dependabot ([#123], [#128], [#150], [#165])
* Bump rubyzip from 2.3.2 to 2.4.1 by @dependabot ([#120])
* Add more tests for Julian Date conversion ([#122])
* Upgrade main Ruby version and supported ones ([#125])
* Update email address and gem description ([#126])
* Increase precision of mean obliquity ([#133])
* Add supported Rubies ([#139])
* Set Ruby 3.4.2 as default version ([#140])
* Fix dependency secutiry patch ([#151])
* Improve HMS/DMS formats ([#153])
* Use excerpts ephemerides for specs of Sun and Moon ([#154])
* Add link to deprecated documentation ([#160])
* Default Ruby 3.4.3 and support recent rubies ([#169])
* Better Moon phases test coverage ([#172])
* Optimize Observer with GMST from Instant ([#173])
* Update README about documentation location ([#175])
* Add GitHub Actions permissions ([#176])

### New Contributors

* @valeriy-sokoloff made their first contribution in #124
* @JoelQ made their first contribution in #166

**Full Changelog**: v0.6.0...v0.7.0

[#120]: #120
[#121]: #121
[#122]: #122
[#123]: #123
[#124]: #124
[#125]: #125
[#126]: #126
[#127]: #127
[#128]: #128
[#129]: #129
[#130]: #130
[#131]: #131
[#132]: #132
[#133]: #133
[#134]: #134
[#135]: #135
[#136]: #136
[#137]: #137
[#138]: #138
[#139]: #139
[#140]: #140
[#141]: #141
[#142]: #142
[#143]: #143
[#145]: #145
[#146]: #146
[#147]: #147
[#148]: #148
[#149]: #149
[#150]: #150
[#151]: #151
[#152]: #152
[#153]: #153
[#154]: #154
[#155]: #155
[#156]: #156
[#157]: #157
[#160]: #160
[#163]: #163
[#165]: #165
[#166]: #166
[#167]: #167
[#168]: #168
[#169]: #169
[#172]: #172
[#173]: #173
[#174]: #174
[#175]: #175
[#176]: #176
[UPGRADING.md]: https://github.com/rhannequin/astronoby/blob/main/UPGRADING.md
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant