Update typing

This commit is contained in:
linarphy 2024-05-23 15:49:40 +02:00
parent e1d0585ac4
commit 01d23573e4
No known key found for this signature in database
GPG key ID: E61920135EFF2295
6 changed files with 57 additions and 45 deletions

View file

@ -39,3 +39,6 @@ line-length = 72
quote-style = "double" quote-style = "double"
indent-style = "space" indent-style = "space"
docstring-code-format = true docstring-code-format = true
[tool.basedpyright]
typeCheckingMode = "all"

View file

@ -1,16 +1,17 @@
from __future__ import annotations from __future__ import annotations
from typing import Any
from numpy.typing import NDArray from numpy.typing import NDArray
from numpy import arange from numpy import arange, float64
def interpolate_abciss(signals: tuple[Signal, ...]) -> NDArray: def interpolate_abciss(signals: tuple[Signal, ...]) -> NDArray[float64]:
""" """
return the axis that would be used by the interpolate function return the axis that would be used by the interpolate function
""" """
rates = [signal.rate for signal in signals] rates: list[float] = [signal.rate for signal in signals]
start = max([signal.x[0] for signal in signals]) start: float = max([signal.x[0] for signal in signals])
end = min([signal.x[-1] for signal in signals]) end: float = min([signal.x[-1] for signal in signals])
return arange(start, end, 1 / max(rates)) return arange(start, end, 1 / max(rates))

View file

@ -1,5 +1,5 @@
# utils # utils
from sys import argv as options from sys import argv
from backscattering_analyzer.settings import Settings from backscattering_analyzer.settings import Settings
from backscattering_analyzer.signal import Signal from backscattering_analyzer.signal import Signal
from backscattering_analyzer import interpolate, interpolate_abciss from backscattering_analyzer import interpolate, interpolate_abciss
@ -15,10 +15,17 @@ class Analyzer:
Utility class to study backscattering light in VIRGO Utility class to study backscattering light in VIRGO
""" """
def __init__(self, arguments: list = []) -> None: def __init__(self, arguments: None | list[str] | str = None) -> None:
self.settings = Settings(options[1:] + arguments) if arguments is None:
options = []
elif isinstance(arguments, str):
options = arguments.split(" ")
else:
options = arguments
self.settings = Settings(argv[1:] + options)
self.load() self.load()
self.process_movement() self.process_movement()
self.compute_light()
def load(self): def load(self):
""" """
@ -126,7 +133,7 @@ class Analyzer:
.low_pass_filter(5 * self.settings.vibration_frequency) .low_pass_filter(5 * self.settings.vibration_frequency)
) )
def compute_light(self): def compute_light(self) -> None:
""" """
Compute psd of the computed projection with current bench Compute psd of the computed projection with current bench
excitation excitation
@ -169,7 +176,6 @@ class Analyzer:
self.projection = Signal( self.projection = Signal(
frequencies, frequencies,
sqrt(sum(results)), sum(results),
self.settings, self.settings,
) )
return self.projection

View file

@ -7,7 +7,7 @@ from rich.traceback import install as traceback_install
class Settings: class Settings:
def __init__(self, options: list): def __init__(self, options: list[str]) -> None:
self.theme = Theme( self.theme = Theme(
{ {
"main": "white bold", "main": "white bold",
@ -17,7 +17,7 @@ class Settings:
} }
) )
self.console = Console(theme=self.theme) self.console = Console(theme=self.theme)
traceback_install(console=self.console, show_locals=True) _ = traceback_install(console=self.console, show_locals=True)
self.version = "0.1.0" self.version = "0.1.0"
self.help = ( self.help = (
"[main]display[/main] [option]\\[options][/option]" "[main]display[/main] [option]\\[options][/option]"
@ -35,7 +35,7 @@ class Settings:
values = load(file) values = load(file)
self.folder = Path(values["general"]["data_folder"]) self.folder = Path(values["general"]["data_folder"])
self.wavelength = values["interferometer"]["wavelength"] self.wavelength: float = values["interferometer"]["wavelength"]
index = 0 index = 0
while index < len(options): while index < len(options):
@ -125,25 +125,27 @@ class Settings:
pass pass
index += 1 index += 1
if not self.bench in values["benches"].keys(): if self.bench not in values["benches"].keys():
raise ValueError("unknow bench {}".format(self.bench)) raise ValueError("unknow bench {}".format(self.bench))
self.calib_mirror = values["benches"][self.bench]["calib"][ self.calib_mirror: float = values["benches"][self.bench][
"mirror" "calib"
] ]["mirror"]
self.calib_bench = values["benches"][self.bench]["calib"][ self.calib_bench: float = values["benches"][self.bench][
"bench" "calib"
] ]["bench"]
self.scattering_factor = values["benches"][self.bench][ self.scattering_factor: list[float] = values["benches"][
"scatter_factor" self.bench
] ]["scatter_factor"]
if not self.date in values["dates"].keys(): if self.date not in values["dates"].keys():
raise ValueError("unknow date {}".format(self.date)) raise ValueError("unknow date {}".format(self.date))
self.power_in = values["dates"][self.date]["power_in"] self.power_in: float = values["dates"][self.date]["power_in"]
self.power_out = values["dates"][self.date]["power_out"] self.power_out: float = values["dates"][self.date]["power_out"]
self.modelisation = values["dates"][self.date]["modelisation"] self.modelisation: str = values["dates"][self.date][
"modelisation"
]
self.vibration_frequency = 0.2 self.vibration_frequency = 0.2
@ -185,6 +187,6 @@ class Settings:
def coupling_name(self) -> str: def coupling_name(self) -> str:
return "{bench}coupling".format(bench=self.bench) return "{bench}coupling".format(bench=self.bench)
def log(self, message) -> None: def log(self, message: str) -> None:
if self.verbose: if self.verbose:
self.console.log(message, _stack_offset=2) self.console.log(message, _stack_offset=2)

View file

@ -1,12 +1,12 @@
from __future__ import annotations from __future__ import annotations
from numpy.typing import NDArray from numpy.typing import ArrayLike, NDArray
from backscattering_analyzer.settings import Settings from backscattering_analyzer.settings import Settings
from backscattering_analyzer import interpolate from backscattering_analyzer import interpolate
from scipy.signal import welch, detrend from scipy.signal import welch, detrend
from scipy.fft import irfft, rfft, rfftfreq from scipy.fft import irfft, rfft, rfftfreq
from scipy.interpolate import CubicSpline from scipy.interpolate import CubicSpline
from numpy import where, sin, cos, array, sqrt from numpy import where, sin, cos, array, sqrt, float64
class Signal: class Signal:
@ -15,7 +15,7 @@ class Signal:
""" """
def __init__( def __init__(
self, x: NDArray, value: NDArray, settings: Settings self, x: NDArray[float64], value: NDArray[float64], settings: Settings
) -> None: ) -> None:
if x.shape != value.shape: if x.shape != value.shape:
raise Exception("x and y does not have the same dimension") raise Exception("x and y does not have the same dimension")
@ -63,7 +63,7 @@ class Signal:
self.settings, self.settings,
) )
def low_pass_filter(self, cutoff): def low_pass_filter(self, cutoff: float) -> Signal:
""" """
Cut higher frequencies than cutoff for this signal Cut higher frequencies than cutoff for this signal
""" """
@ -124,7 +124,7 @@ class Signal:
self.y, self.y,
) )
def __sub__(self, other: float | NDArray | Signal) -> Signal: def __sub__(self, other: ArrayLike | Signal) -> Signal:
""" """
Substract float or a signal to another Substract float or a signal to another
""" """
@ -146,7 +146,7 @@ class Signal:
self.settings, self.settings,
) )
def __add__(self, other: float | NDArray | Signal) -> Signal: def __add__(self, other: ArrayLike | Signal) -> Signal:
""" """
Add a float or a signal to another Add a float or a signal to another
""" """
@ -168,7 +168,7 @@ class Signal:
self.settings, self.settings,
) )
def __mul__(self, other: float | NDArray | Signal) -> Signal: def __mul__(self, other: ArrayLike | Signal) -> Signal:
""" """
Multiply a signal by a value or another signal Multiply a signal by a value or another signal
""" """
@ -190,7 +190,7 @@ class Signal:
self.settings, self.settings,
) )
def __truediv__(self, other) -> Signal: def __truediv__(self, other: ArrayLike | Signal) -> Signal:
""" """
Divide a signal by a value Divide a signal by a value
""" """
@ -212,7 +212,7 @@ class Signal:
self.settings, self.settings,
) )
def __array__(self) -> NDArray: def __array__(self) -> NDArray[float64]:
""" """
Convert to a numpy array Convert to a numpy array
""" """
@ -233,7 +233,7 @@ class Signal:
self.settings, self.settings,
) )
def __getitem__(self, key) -> NDArray: def __getitem__(self, key: int) -> float64:
""" """
Get an element of the signal Get an element of the signal
""" """
@ -245,7 +245,7 @@ class Signal:
""" """
return len(self.x) return len(self.x)
def __pow__(self, other) -> Signal: def __pow__(self, other: float | int) -> Signal:
""" """
Signal put to power Signal put to power
""" """

View file

@ -4,23 +4,23 @@
wavelength = 1.064e-6 wavelength = 1.064e-6
[benches] [benches]
[benches.SDB1] [benches.SDB1]
scatter_factor = [1.3e-4, 0] scatter_factor = [1.5e-9, 0]
[benches.SDB1.calib] [benches.SDB1.calib]
bench = 1.15 bench = 1.15
mirror = 1.15 mirror = 1.15
[benches.SDB2] [benches.SDB2]
scatter_factor = [6e-6, 0] scatter_factor = [2.4e-11, 0]
[benches.SDB2.calib] [benches.SDB2.calib]
bench = 1.3 bench = 1.3
mirror = 1.3 mirror = 1.3
[benches.SIB2] [benches.SIB2]
scatter_factor = [1e-3, 0] scatter_factor = [0, 0]
[benches.SIB2.calib] [benches.SIB2.calib]
bench = 1.0 bench = 1.0
mirror = 1.0 mirror = 1.0
[benches.SNEB] [benches.SNEB]
scatter_factor = [8e-3, 0] scatter_factor = [9.5e-9, 0]
[benches.SNEB.calib] [benches.SNEB.calib]
bench = 1.01 bench = 1.01
mirror = 1.101 mirror = 1.101
@ -30,7 +30,7 @@
bench = 1.0 bench = 1.0
mirror = 1.0 mirror = 1.0
[benches.SWEB] [benches.SWEB]
scatter_factor = [4e-3, 0] scatter_factor = [4.7e-9, 0]
[benches.SWEB.calib] [benches.SWEB.calib]
bench = -0.98 bench = -0.98
mirror = 0.98 mirror = 0.98