detect_clearsky and prilliman fail on DST days, kimber fails on tz-naive data (since #2924)

Aberta Para iniciantes
#2,935 0 comentários 0 reações 0 responsáveis Ver no GitHub

Mantenedores costumam responder em até 1 dia

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
2/5
Tempo estimado
1-3 horas
Facilidade para iniciantes
72/100
Tipo de issue
Bug
Clareza
Claramente especificada
Status de atividade
Ativa
Stack de tecnologia
python
Domínio
data

Direção de pesquisa

Comece por _get_sample_intervals em pvlib/tools.py, que detect_clearsky e prilliman compartilham, e pela função kimber em pvlib/soiling.py, onde o índice é convertido com tz_convert(None). Execute as duas reproduções da issue para confirmar os erros. Está concluído quando ambas executarem sem erros em um índice com fuso horário que atravessa o horário de verão e em um índice sem fuso horário, e os testes existentes em test_clearsky.py, test_soiling.py, test_temperature.py e test_tools.py continuarem passando.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

On main (0f6631a, pandas 3.1.0), both of these worked before #2924 and now raise:

import pandas as pd
import pvlib

loc = pvlib.location.Location(49.28, -123.12, tz='America/Vancouver')
times = pd.date_range('2026-03-07', '2026-03-10', freq='1min',
                      tz=loc.tz, inclusive='left')
ghi = loc.get_clearsky(times)['ghi']
pvlib.clearsky.detect_clearsky(ghi, ghi)
# NotImplementedError: algorithm does not yet support unequal time intervals...

rain = pd.Series(0.0, index=pd.date_range('2026-01-01', periods=720, freq='h'))
pvlib.soiling.kimber(rain)
# TypeError: Cannot convert tz-naive timestamps, use tz_localize to localize

In _get_sample_intervals, tz_localize(None) turns the index into local clock time, so the 1-minute data gets a 61-minute step where the clocks change. temperature.prilliman uses the same helper, so it fails the same way.

https://github.com/pvlib/pvlib-python/blob/0f6631ac73da3833e9020df54776c467759cfb39/pvlib/tools.py#L432-L435

kimber uses tz_convert(None), which raises on a tz-naive index:

https://github.com/pvlib/pvlib-python/blob/0f6631ac73da3833e9020df54776c467759cfb39/pvlib/soiling.py#L197

What I'd suggest: subtract the timestamps directly. That gives elapsed time for both naive and tz-aware indexes.

# tools._get_sample_intervals
deltas = (times[1:] - times[:-1]) / pd.Timedelta('60s')

# soiling.kimber
timestep_interval = rainfall.index[1] - rainfall.index[0]
day_fraction = timestep_interval / pd.Timedelta(hours=24)

Plus two tests: detect_clearsky on a DST day should match the same data in UTC, and kimber with a tz-naive index should match the existing expected output.

I tried this locally:

  • both new tests fail on main and pass with the change;
  • test_clearsky.py, test_soiling.py, test_temperature.py and test_tools.py pass on pandas 3.1.0 and 2.3.3;
  • on the commit before #2924 (d6075f6), both examples run fine.

I didn't find an existing issue for this. Happy to open a PR if this sounds right.

AI disclosure: I used Claude Code (an AI coding agent) to find and trace this, run the examples and tests on my machine, and draft this note.

@echedey-ls @kandersolar

Linguagem predominante
Python
Estrelas
1.7k
Forks
1.2k
Merge médio
2d 13h
PRs com merge (30d)
11

Preparar o ambiente

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de pvlib/pvlib-python

Todas as issues de pvlib/pvlib-python

Issues semelhantes

Mais issues de Python

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.