Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions src/osekit/core/spectro_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from matplotlib.dates import date2num
from pandas import Timedelta
from scipy.signal import ShortTimeFFT, welch

Expand Down Expand Up @@ -428,7 +427,7 @@ def plot(

sx = sx if scale is None else scale.rescale(sx_matrix=sx, original_scale=freq)

ax.xaxis_date()
ax.xaxis_date(tz=time.tz) if time.tz else ax.xaxis_date()
ax.imshow(
sx,
vmin=self._v_lim[0],
Expand All @@ -437,7 +436,7 @@ def plot(
origin="lower",
aspect="auto",
interpolation="none",
extent=(date2num(time[0]), date2num(time[-1]), freq[0], freq[-1]),
extent=(time[0], time[-1], freq[0], freq[-1]),
)

def get_db_value(self, sx: np.ndarray | None = None) -> np.ndarray:
Expand Down
47 changes: 45 additions & 2 deletions tests/test_spectro.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from __future__ import annotations

import contextlib
import datetime
import gc
from contextlib import nullcontext
from pathlib import Path
Expand All @@ -9,7 +10,6 @@
import numpy as np
import pandas as pd
import pytest
from matplotlib.dates import num2date
from pandas import Timedelta, Timestamp
from scipy.signal import ShortTimeFFT
from scipy.signal.windows import hamming
Expand Down Expand Up @@ -1434,14 +1434,57 @@ def mock_imshow(
assert plot_kwargs["interpolation"] == "none"

t1, t2, f1, f2 = plot_kwargs["extent"]
t1, t2 = map(num2date, (t1, t2))
t1, t2 = map(Timestamp, (t1, t2))
assert t1 == sd.begin
assert t2 == sd.end
assert f1 == sd.fft.f[0]
assert f2 == sd.fft.f[-1]


@pytest.mark.parametrize(
"audio_files",
[
{"date_begin": Timestamp("2026-01-01 00:00:00", tz="Europe/Paris")},
{"date_begin": Timestamp("2025-12-31 23:59:59", tz="+0300")},
{"date_begin": Timestamp("2025-12-31 23:59:59")},
],
indirect=True,
ids=["%Z", "%z", "naive"],
)
def test_plot_timezone(
audio_files: tuple[list[AudioFile], ...],
monkeypatch: pytest.MonkeyPatch,
) -> None:
audio_files, _ = audio_files
ad = AudioData.from_files(audio_files)
sd = SpectroData.from_audio_data(
data=ad,
fft=ShortTimeFFT(hamming(1024), 512, ad.sample_rate),
)

called_ax = set()

def mock_imshow(
self: plt.Axes,
sx: np.ndarray,
**kwargs: str,
) -> None:
called_ax.add(self)

monkeypatch.setattr(plt.Axes, "imshow", mock_imshow)

_, ax = plt.subplots()
sd.plot(ax=ax)
spectro_data_axes = called_ax.pop()

if sd.begin.tz:
assert isinstance(spectro_data_axes.xaxis.units, datetime.tzinfo)
else:
assert spectro_data_axes.xaxis.units is None




def test_spectro_default_v_lim(audio_files: pytest.fixture) -> None:
files, _ = audio_files
ad = AudioData.from_files(files)
Expand Down