They deciphered my analemma!
- Fraa Orolo in Anathem by Neal Stephenson (2008)
The analemma is the beautiful double-loop path traced by the shadow on a sundial (or the sun in the sky) when observed at the same time each day throughout one year. This package calculates and plots the analemma for all types of sundial anywhere on earth, or any planet.
pip install analemma
Resources
The analemma package implements the mathematics of sundial and orbits for an arbitrary sundial geometry and orientation placed anywhere on any planet. The analemma expressed in an exact parametric expression which reduces to standard results for the special cases of common dial types. Despite sundials being thousands of years old, I cannot find an expression for the analemma quite as general as this in the literature.
Reference Article
The analemma is derived from first principles in The sundial problem from a new angle - Russell Goyder.pdf - the latest version of a paper originally published in the European Journal of Physics in 2006. The LaTeX source and figures for the paper are in the analemma repository.
Jupyter Notebooks
You can view and run Jupyter notebooks which reproduce all derivations and calculations in the article using symbolic algebra.
I used geometric algebra for this work and have a cheat sheet which could you useful if you familiar with the topic.
Presentations
I presented this work in part 1 and part 2 of a metauni seminar.
Building the LaTeX source
To build, run latexmk -pdf in docs/paper. To clean up, latexmk -C and if you want, find figs -name 'figure?.eps-converted-to.pdf' | xargs rm. Note - fixed a typo in figure 3 (DialFrame.fig) using inkscape which couldn't save as fig, so I saved it as DialFrame.svg.
This work is licensed under a Creative Commons Attribution 4.0 International License.
Metadata
Release files for analemma 0.4.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| analemma-0.4.1.tar.gz | 3.6 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| analemma-0.4.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 3.6 MB
Release files / analemma-0.4.1.tar.gz
| Download URL | analemma-0.4.1.tar.gz |
|---|---|
| Size | 3.6 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
de4e966fd10058d849ad8035e46235f6ef40a8a6ea6588585d99107aef263325
|
|
BLAKE2b-256 checksum How to use checksums |
3ae6beaee7f3a38040997bdd7c20ba83736188bd5d2c72f25360a71aa981ea6c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 16, 2025.
Transparency logRelease files / analemma-0.4.1-py3-none-any.whl
| Download URL | analemma-0.4.1-py3-none-any.whl |
|---|---|
| Size | 37.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
37bd29389bae26676642ff619f4092b45a16eba7e03dbbd52317a6cb329c327d
|
|
BLAKE2b-256 checksum How to use checksums |
ddd83d6c5ad94071e3860e7d87da80c8deff8bdcf22a3b0761c2b787cc1aec4c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 16, 2025.
Transparency log