Skip to main content

python versions tests-badge coverage-badge DOI

sunwhere. Solar position calculation for solar resource assessment

sunwhere is a Python library designed for fast and accurate calculations of solar position for solar resource applications 🌞.

sunwhere provides solar zenith and azimuth angles, sun-earth distance correction factor, and secondary parameters such as solar declination, equation of time, and many more. It's optimized for typical workflows in solar energy research and engineering.

It is optimized for three common use cases that cover most practical scenarios:

  • sites() - Multiple arbitrary locations with common time grid

  • regular_grid() - Lat-lon regular grids (ideal for spatio-temporal data)

  • transect() - Moving observers (satellites, aircraft, ships)

Installation

pip install sunwhere

or using uv:

uv add sunwhere

Quick examples

import pandas as pd
import sunwhere
lat, lon = 36.9369, -3.7943
times = pd.date_range("2026-06-02", periods=24*60, freq="min", tz="Europe/Madrid")
solpos = sunwhere.sites(times, lat, lon, site_names=("Jayena",))
solar_zenith = solpos.zenith  # xarray's dataarray with dims (time, site)
solar_zenith = solpos.zenith.sel(site="Jayena").to_pandas()  # pandas series
solar_azimuth = solpos.azimuth  # degrees in [-180, 180], zero south, negative before noon

The time coordinate of the outputs is always naive UTC, even if the input times are timezone-aware.

import numpy as np
import pandas as pd
import sunwhere
lats = np.arange(30, 60.1, 0.5)
lons = np.arange(-10, 50.1, 0.5)
times = pd.date_range("2026-06-02", periods=24, freq="h", tz="Europe/Madrid")
solpos = sunwhere.regular_grid(times, lats, lons)
solar_zenith = solpos.zenith  # xarray's dataarray with dims (time, lat, lon)

Documentation

Full documentation — installation guide, user guide, quick reference, and API reference — is available at:

https://jararias.github.io/sunwhere/

Citation

If you use sunwhere in your research, please cite:

@software{sunwhere,
  author = {Ruiz-Arias, Jose A.},
  title = {sunwhere: Solar position for solar resource assessment},
  doi = {10.5281/zenodo.21975084},
  url = {https://github.com/jararias/sunwhere}
}

The DOI 10.5281/zenodo.21975084 always resolves to the latest version. Each release also has its own version-specific DOI, listed on Zenodo.

License

sunwhere is distributed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 license (CC BY-NC-SA 4.0):

  • Free for research, teaching and other non-commercial use, with attribution.
  • Commercial use is not permitted under this license. For commercial use, contact the author.
  • Derivative works must be distributed under the same license.

Metadata

Release files for sunwhere 1.5.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for sunwhere 1.5.0
File Size Uploaded
sunwhere-1.5.0.tar.gz 48.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for sunwhere 1.5.0
File Interpreter ABI Platform
sunwhere-1.5.0-py3-none-any.whl Python 3 none any Details

Total release size: 109.6 kB

Release files / sunwhere-1.5.0.tar.gz

Download URL sunwhere-1.5.0.tar.gz
Size 48.2 kB
Tags Source
SHA-256 checksum
How to use checksums
7b2a193740d76145d4d776ded4e101f79c3b86942c6d958d9372c566509e59cc
BLAKE2b-256 checksum
How to use checksums
2d93d60f30fc6d3bd8b82165b7a6d2f819e9e622e0dcb5634888ef31b1722c80
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Manjaro Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / sunwhere-1.5.0-py3-none-any.whl

Download URL sunwhere-1.5.0-py3-none-any.whl
Size 61.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6fde921966c296bd984fb8f0baebb4e426d86944919a8b3861cf21e901918b34
BLAKE2b-256 checksum
How to use checksums
e863db7edd72b8ad48ba5627018794af462fee0efc7eb300a8c73bfbf0e9f8e9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Manjaro Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

This release

1.5.0 This release

2 release files

1.4.2

2 release files

1.4.1

2 release files

1.4.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page