77
88# Imports
99from irradiance_ratios import E_lambda_over_E , LAMBDA0
10- from tools import _get_optional_params , day_of_year
10+ from tools import day_of_year
1111
1212from pvlib .spectrum import spectrl2
1313from pvlib .irradiance import aoi
1818
1919from itertools import product
2020from functools import partial
21- from warnings import warn
2221from datetime import datetime
2322from time import time
2423
@@ -29,36 +28,21 @@ class MR_E_ratio:
2928 of input data, generate spectrums and integrate them.
3029 """
3130
32- def __init__ (self , cutoff_lambda : str | float = 0.0 , ** kwargs ):
33- """
34- Allow for initialization
35- """
36- self .reset_simulation_state ()
37- params = _get_optional_params (self .init_values )
38- self .init_values (
39- cutoff_lambda = cutoff_lambda ,
40- ** {
41- param : (kwargs .pop (param , None ))
42- for param in params
43- if kwargs .get (param ) is not None
44- },
45- )
46- if len (kwargs ) > 0 :
47- warn (
48- "Unused kwargs in bench!\n "
49- + "\n " .join (f"\t { key } : { value } " for key , value in params )
50- )
51-
52- def init_values (
31+ def __init__ (
5332 self ,
54- cutoff_lambda : str | float ,
33+ cutoff_lambda : str | float = "monosi" ,
5534 n = 20 ,
5635 location : Location = None ,
57- dates : pd .DatetimeIndex = None ,
36+ datetimes : pd .DatetimeIndex = None ,
5837 surface_tilt = 31 ,
5938 surface_azimuth = 180 ,
6039 ozone = 0.31 ,
6140 ):
41+ """
42+ Create bench
43+ """
44+ self .reset_simulation_state ()
45+
6246 if isinstance (cutoff_lambda , float ):
6347 self .cutoff_lambda = cutoff_lambda
6448 elif isinstance (cutoff_lambda , str ):
@@ -84,8 +68,8 @@ def init_values(
8468 name = "Madrid" ,
8569 )
8670
87- if dates :
88- self .datetimes = dates
71+ if datetimes is not None :
72+ self .datetimes = datetimes
8973 else :
9074 self .datetimes = pd .date_range (
9175 "2023-11-27T04" ,
@@ -249,8 +233,9 @@ def plot_results(
249233 plot_keys ,
250234 } # cast to set
251235
252- # variable guard: only allow valid keys, from self.input_keys & self.time_params
253- allowed_keys = set (self .input_keys ) | self .time_params .keys ()
236+ # variable guard: only allow valid keys:
237+ # * self.input_keys & self.time_params
238+ allowed_keys = set (self .input_keys ) | self .time_params .keys () | {"datetime" }
254239 invalid_keys = plot_keys - allowed_keys
255240 if invalid_keys == {}:
256241 raise ValueError (
@@ -270,6 +255,7 @@ def plot_results(
270255 axs = axs .flatten ()
271256 else : # plt.Axes type
272257 axs = [axs ] # to allow iteration of just that element
258+ axs = iter (axs )
273259
274260 fig .suptitle (
275261 r"$\frac{E_{λ<λ_0}}{E}$ as function of SPECTRL2 inputs"
@@ -281,11 +267,16 @@ def plot_results(
281267 n_inputs = len (self .input_keys )
282268
283269 # for each axes, plot a relationship
270+ # Case: time
271+ for ax , var_name in zip (axs , plot_keys .intersection ({"datetime" })):
272+ ax .set_title (r"$\frac{E_{λ<λ_0}}{E}$ vs. " + var_name )
273+ x = self .datetimes if var_name == "datetime" else None
274+ for _ , row in self .results .iloc [n_inputs :].iterrows ():
275+ ax .scatter (x , row [n_inputs :])
276+ plot_keys .remove (var_name )
277+
284278 # Case: time-dependant variables in plot_keys
285- for ax , var_name in zip (
286- axs [::- 1 ], # from last to first, so it doesn't clash with generator keys
287- plot_keys .intersection (self .time_params .keys ()),
288- ):
279+ for ax , var_name in zip (axs , plot_keys .intersection (self .time_params .keys ())):
289280 ax .set_title (r"$\frac{E_{λ<λ_0}}{E}$ vs. " + var_name )
290281 x = self .time_params [var_name ]
291282 for _ , row in self .results .iloc [n_inputs :].iterrows ():
0 commit comments