Skip to content

Commit 986a0b4

Browse files
authored
Add write_t16 function (#47)
* Create write_t16 function * Fix tests * Fix linter
1 parent d65c31e commit 986a0b4

8 files changed

Lines changed: 469 additions & 80 deletions

File tree

data/LYN_2023.csv

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
1-
# stationcode LYN,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
2-
# latitude deg N 55.79065,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
3-
# longitude deg E 12.52509,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
4-
# altitude in m amsl 40,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
5-
# timezone offset from UTC in hours 1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
6-
# time stamp (Year Month Day Hour Minute) reference is in UTC and refers to the end of the period,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
7-
# missing data points in GHI DNI and DIF are noted with -999,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
8-
# GHI is the global horizontal irradiance in W/m2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
9-
# DNI is the direct normal irradiance in W/m2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
10-
# DIF is the diffuse horizontal irradiance in W/m2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
11-
# GHIcalc is the calculated GHI from DNI and DIF,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
12-
# Elev is the solar elevation in deg,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
13-
# Azim is the solar azimuth angle in deg N,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
14-
# Kc is the clearsky index calculated with CAMS mcclear with GHIcalc/GHI McClear,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
15-
# usable is the validity of a data point with 1 being valid and 0 being not usable,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
16-
# flag values from various tests: 1 means the data failed the test. 0 means the test was passed. -999 means the test domain was not met,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
1+
# stationcode LYN
2+
# latitude deg N 55.79065
3+
# longitude deg E 12.52509
4+
# altitude in m amsl 40
5+
#
6+
# time stamp (Year Month Day Hour Minute) is in UTC and refers to the end of the period
7+
# missing data points in GHI DNI and DIF are noted as empty cells
8+
# GHI is the global horizontal irradiance in W/m2
9+
# DNI is the direct normal irradiance in W/m2
10+
# DIF is the diffuse horizontal irradiance in W/m2
11+
# GHIcalc is the calculated GHI from DNI and DIF
12+
# Elev is the solar elevation in deg
13+
# Azim is the solar azimuth angle in deg N
14+
# Kc is the clearsky index calculated with CAMS mcclear with GHIcalc/GHI McClear
15+
# usable is the validity of a data point with 1 being valid and 0 being not usable
16+
# flag values from various tests: 1 means the data failed the test. 0 means the test was passed.
1717
Year,Month,Day,Hour,Minute,GHI,DNI,DIF,GHIcalc,Elev,Azim,Kc,usable,flagPPLDIF,flagERLDIF,flagPPLDNI,flagERLDNI,flagPPLGHI,flagERLGHI,flag3highSZA,flag3lowSZA,flagKt,flagKKt,flagKn,flagKnKt,flagKhighSZA,flagKlowSZA,flagTracker,flagManual
1818
2023,1,1,0,0,-0.1224,-0.06081,-0.16,,,,,,,,,,,,,,,,,,,,,
1919
2023,1,1,0,1,-0.1176,-0.04698,-0.1671,,,,,,,,,,,,,,,,,,,,,

docs/source/documentation.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,5 @@ Code documentation
1818
quality.bsrn_limits
1919
quality.bsrn_limits_flag
2020
iotools.read_t16
21+
iotools.write_t16
2122
processing.resample_to_freq

src/solarpy/iotools/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
from solarpy.iotools.read_t16 import read_t16 # noqa: F401
2+
from solarpy.iotools.write_t16 import write_t16 # noqa: F401

src/solarpy/iotools/read_t16.py

Lines changed: 42 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,20 @@
11
import numpy as np
22
import pandas as pd
33

4+
VARIABLE_MAP = {
5+
"GHI": "ghi",
6+
"DIF": "dhi",
7+
"DNI": "dni",
8+
"GHI_clear": "ghi_clear",
9+
"DIF_clear": "dhi_clear",
10+
"DNI_clear": "dni_clear",
11+
"BHI_clear": "bhi_clear",
12+
"GHI_extra": "ghi_extra",
13+
"DNI_extra": "dni_extra",
14+
}
415

5-
def read_t16(filename, drop_dates=False, map_variables=False,
6-
encoding='utf-8'):
16+
17+
def read_t16(filename, drop_dates=False, map_variables=False, encoding="utf-8"):
718
"""
819
Read a time series data file following the IEA PVPS T16 file format.
920
@@ -30,60 +41,63 @@ def read_t16(filename, drop_dates=False, map_variables=False,
3041
3142
"""
3243
meta = {
33-
'stationcode': None,
34-
'latitude deg N': np.nan,
35-
'longitude deg E': np.nan,
36-
'altitude in m amsl': np.nan,
37-
'timezone offset from UTC in hours': np.nan,
44+
"stationcode": None,
45+
"latitude deg N": np.nan,
46+
"longitude deg E": np.nan,
47+
"altitude in m amsl": np.nan,
3848
}
3949

40-
with open(filename, 'r', encoding=encoding) as fbuf:
50+
with open(filename, "r", encoding=encoding) as fbuf:
4151
# Parse through initial metadata section (lines starting with #)
4252
while True:
4353
line = fbuf.readline().strip()
4454

4555
# lines with metadata
46-
if line.startswith('#'):
47-
line = line.lstrip('#')
56+
if line.startswith("#"):
57+
line = line.lstrip("#")
4858
# line with column names
4959
else:
50-
names = line.split(',')
60+
names = line.split(",")
5161
break
5262

5363
for mk in meta.keys():
5464
if mk in line:
55-
meta[mk] = line.replace(mk, '').replace(',', '').strip()
65+
meta[mk] = line.replace(mk, "").replace(",", "").strip()
5666
# Fix issue in older files
57-
meta[mk] = meta[mk].replace('longitude deg N', 'longitude deg E')
67+
meta[mk] = meta[mk].replace("longitude deg N", "longitude deg E")
5868

59-
for k in ['latitude deg N', 'longitude deg E', 'altitude in m amsl',
60-
'timezone offset from UTC in hours']:
61-
meta[k] = float(meta[k])
62-
if meta['stationcode'] == '':
63-
meta['stationcode'] = None
69+
for k in [
70+
"latitude deg N",
71+
"longitude deg E",
72+
"altitude in m amsl",
73+
]:
74+
# convert to float or int
75+
meta[k] = float(meta[k]) if "." in meta[k] else int(meta[k])
76+
if meta["stationcode"] == "":
77+
meta["stationcode"] = None
6478

6579
data = pd.read_csv(
6680
fbuf,
67-
sep=',',
81+
sep=",",
6882
names=names,
69-
na_values=[-999, -9999, 'NAN'],
83+
na_values=[-999, -9999, "NAN"],
7084
# Both naming conventions of comment occur
71-
dtype={'comments': str, 'Comments': str,
72-
'Remarks': str},
85+
dtype={"comments": str, "Comments": str, "Remarks": str},
7386
)
7487

75-
datetime_columns = ['Year', 'Month', 'Day', 'Hour', 'Minute']
88+
datetime_columns = ["Year", "Month", "Day", "Hour", "Minute"]
7689

7790
data.index = pd.to_datetime(
78-
data[datetime_columns].rename(columns=str.lower)).dt.tz_localize('UTC')
91+
data[datetime_columns].rename(columns=str.lower)
92+
).dt.tz_localize("UTC")
7993

8094
if drop_dates:
8195
data = data.drop(columns=datetime_columns)
8296

8397
if map_variables:
84-
meta['latitude'] = meta.pop('latitude deg N')
85-
meta['longitude'] = meta.pop('longitude deg E')
86-
meta['altitude'] = meta.pop('altitude in m amsl')
87-
data = data.rename(columns={'GHI': 'ghi', 'DIF': 'dhi', 'DNI': 'dni'})
98+
meta["latitude"] = meta.pop("latitude deg N")
99+
meta["longitude"] = meta.pop("longitude deg E")
100+
meta["altitude"] = meta.pop("altitude in m amsl")
101+
data = data.rename(columns=VARIABLE_MAP)
88102

89103
return data, meta

src/solarpy/iotools/write_t16.py

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
import pandas as pd
2+
3+
4+
# %%
5+
def write_t16(filename, data, meta, lines=None, missing=None, encoding="utf-8"):
6+
"""Write a time series DataFrame to a file in the IEA PVPS T16 format.
7+
8+
Parameters
9+
----------
10+
filename : str or path-like
11+
Path to the output file.
12+
data : pandas.DataFrame
13+
Time series data with a timezone-aware ``DatetimeIndex``; the index
14+
is converted to UTC before extracting Year/Month/Day/Hour/Minute.
15+
Column names are written as-is to the header row.
16+
meta : dict
17+
Station metadata. Recognised keys (either short or long form):
18+
19+
- ``"latitude"`` or ``"latitude deg N"``
20+
- ``"longitude"`` or ``"longitude deg E"``
21+
- ``"altitude"`` or ``"altitude in m amsl"``
22+
- ``"stationcode"`` *(optional)*
23+
lines : list of str or None, default ``None``
24+
Additional lines written to the header after the location metadata,
25+
each prefixed with ``"# "``. If ``None``, no extra lines are written.
26+
missing : str or None, default ``None``
27+
String written in place of missing (NaN) values. ``None`` leaves the
28+
cell empty.
29+
encoding : str, default ``"utf-8"``
30+
File encoding passed to ``open()``.
31+
"""
32+
latitude = meta.get("latitude", meta.get("latitude deg N"))
33+
longitude = meta.get("longitude", meta.get("longitude deg E"))
34+
altitude = meta.get("altitude", meta.get("altitude in m amsl"))
35+
stationcode = meta.get("stationcode", "")
36+
37+
utc_index = data.index.tz_convert("UTC")
38+
datetime_cols = pd.DataFrame(
39+
{
40+
"Year": utc_index.year,
41+
"Month": utc_index.month,
42+
"Day": utc_index.day,
43+
"Hour": utc_index.hour,
44+
"Minute": utc_index.minute,
45+
},
46+
index=data.index,
47+
)
48+
49+
# Add time columns and drop existing time columns if present
50+
_datetime_col_names = ["Year", "Month", "Day", "Hour", "Minute"]
51+
out = pd.concat(
52+
[datetime_cols, data.drop(columns=_datetime_col_names, errors="ignore")], axis=1
53+
)
54+
55+
missing_ref = "empty cells" if missing is None else missing
56+
57+
with open(filename, "w", encoding=encoding) as f:
58+
f.write(f"# stationcode {stationcode}\n")
59+
f.write(f"# latitude deg N {latitude}\n")
60+
f.write(f"# longitude deg E {longitude}\n")
61+
f.write(f"# altitude in m amsl {altitude}\n")
62+
f.write("# \n")
63+
f.write(
64+
"# time stamp (Year Month Day Hour Minute) is in UTC and refers to the end of the period\n" # noqa: E501
65+
)
66+
f.write(
67+
f"# missing data points in GHI DNI and DIF are noted as {missing_ref}\n"
68+
)
69+
for line in lines or []:
70+
f.write(f"# {line}\n")
71+
na_rep = "" if missing is None else missing
72+
out.to_csv(f, index=False, na_rep=na_rep, lineterminator="\n")

tests/data/LYN_2023_short.csv

Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
# stationcode LYN
2+
# latitude deg N 55.79065
3+
# longitude deg E 12.52509
4+
# altitude in m amsl 40
5+
#
6+
# time stamp (Year Month Day Hour Minute) is in UTC and refers to the end of the period
7+
# missing data points in GHI DNI and DIF are noted as empty cells
8+
# GHI is the global horizontal irradiance in W/m2
9+
# DNI is the direct normal irradiance in W/m2
10+
# DIF is the diffuse horizontal irradiance in W/m2
11+
# GHIcalc is the calculated GHI from DNI and DIF
12+
# Elev is the solar elevation in deg
13+
# Azim is the solar azimuth angle in deg N
14+
# Kc is the clearsky index calculated with CAMS mcclear with GHIcalc/GHI McClear
15+
# usable is the validity of a data point with 1 being valid and 0 being not usable
16+
# flag values from various tests: 1 means the data failed the test. 0 means the test was passed.
17+
Year,Month,Day,Hour,Minute,GHI,DNI,DIF,GHIcalc,Elev,Azim,Kc,usable,flagPPLDIF,flagERLDIF,flagPPLDNI,flagERLDNI,flagPPLGHI,flagERLGHI,flag3highSZA,flag3lowSZA,flagKt,flagKKt,flagKn,flagKnKt,flagKhighSZA,flagKlowSZA,flagTracker,flagManual
18+
2023,1,1,0,0,-0.1224,-0.06081,-0.16,,,,,,,,,,,,,,,,,,,,,
19+
2023,1,1,0,1,-0.1176,-0.04698,-0.1671,,,,,,,,,,,,,,,,,,,,,
20+
2023,1,1,0,2,-0.1302,-0.0529,-0.1765,,,,,,,,,,,,,,,,,,,,,
21+
2023,1,1,0,3,-0.1258,-0.05213,-0.1822,,,,,,,,,,,,,,,,,,,,,
22+
2023,1,1,0,4,-0.1279,-0.05613,-0.176,,,,,,,,,,,,,,,,,,,,,
23+
2023,1,1,0,5,-0.1226,-0.05611,-0.1748,,,,,,,,,,,,,,,,,,,,,
24+
2023,1,1,0,6,-0.1292,-0.0573,-0.1777,,,,,,,,,,,,,,,,,,,,,
25+
2023,1,1,0,7,-0.1446,-0.0644,-0.194,,,,,,,,,,,,,,,,,,,,,
26+
2023,1,1,0,8,-0.1505,-0.06834,-0.2038,,,,,,,,,,,,,,,,,,,,,
27+
2023,1,1,0,9,-0.1489,-0.06418,-0.1925,,,,,,,,,,,,,,,,,,,,,
28+
2023,1,1,0,10,-0.1351,-0.05588,-0.1899,,,,,,,,,,,,,,,,,,,,,
29+
2023,1,1,0,11,-0.1496,-0.05769,-0.1907,,,,,,,,,,,,,,,,,,,,,
30+
2023,1,1,0,12,-0.1297,-0.05676,-0.173,,,,,,,,,,,,,,,,,,,,,
31+
2023,1,1,0,13,-0.1294,-0.06836,-0.1823,,,,,,,,,,,,,,,,,,,,,
32+
2023,1,1,0,14,-0.1366,-0.0683,-0.1923,,,,,,,,,,,,,,,,,,,,,
33+
2023,1,1,0,15,-0.1341,-0.05331,-0.1882,,,,,,,,,,,,,,,,,,,,,
34+
2023,1,1,0,16,-0.1269,-0.05485,-0.1809,,,,,,,,,,,,,,,,,,,,,
35+
2023,1,1,0,17,-0.1135,-0.0658,-0.1593,,,,,,,,,,,,,,,,,,,,,
36+
2023,1,1,0,18,-0.1003,-0.06252,-0.1588,,,,,,,,,,,,,,,,,,,,,
37+
2023,1,1,0,19,-0.09087,-0.05327,-0.1495,,,,,,,,,,,,,,,,,,,,,
38+
2023,1,1,0,20,-0.09391,-0.05008,-0.1526,,,,,,,,,,,,,,,,,,,,,
39+
2023,1,1,0,21,-0.1086,-0.05702,-0.1638,,,,,,,,,,,,,,,,,,,,,
40+
2023,1,1,0,22,-0.09197,-0.05227,-0.1548,,,,,,,,,,,,,,,,,,,,,
41+
2023,1,1,0,23,-0.1174,-0.06043,-0.1766,,,,,,,,,,,,,,,,,,,,,
42+
2023,1,1,0,24,-0.1313,-0.06242,-0.1875,,,,,,,,,,,,,,,,,,,,,
43+
2023,1,1,0,25,-0.1469,-0.05607,-0.1919,,,,,,,,,,,,,,,,,,,,,
44+
2023,1,1,0,26,-0.135,-0.05053,-0.1876,,,,,,,,,,,,,,,,,,,,,
45+
2023,1,1,0,27,-0.1307,-0.05136,-0.1888,,,,,,,,,,,,,,,,,,,,,
46+
2023,1,1,0,28,-0.1411,-0.0468,-0.2007,,,,,,,,,,,,,,,,,,,,,
47+
2023,1,1,0,29,-0.1539,-0.05035,-0.198,,,,,,,,,,,,,,,,,,,,,
48+
2023,1,1,0,30,-0.1118,-0.03771,-0.1801,,,,,,,,,,,,,,,,,,,,,
49+
2023,1,1,0,31,-0.09743,-0.03728,-0.1605,,,,,,,,,,,,,,,,,,,,,
50+
2023,1,1,0,32,-0.1069,-0.03152,-0.1598,,,,,,,,,,,,,,,,,,,,,
51+
2023,1,1,0,33,-0.08676,-0.03962,-0.151,,,,,,,,,,,,,,,,,,,,,
52+
2023,1,1,0,34,-0.07335,-0.02951,-0.1396,,,,,,,,,,,,,,,,,,,,,
53+
2023,1,1,0,35,-0.07482,-0.03063,-0.1287,,,,,,,,,,,,,,,,,,,,,
54+
2023,1,1,0,36,-0.08169,-0.03333,-0.1444,,,,,,,,,,,,,,,,,,,,,
55+
2023,1,1,0,37,-0.07467,-0.02331,-0.1323,,,,,,,,,,,,,,,,,,,,,
56+
2023,1,1,0,38,-0.07664,-0.02949,-0.1383,,,,,,,,,,,,,,,,,,,,,
57+
2023,1,1,0,39,-0.06863,-0.01919,-0.131,,,,,,,,,,,,,,,,,,,,,
58+
2023,1,1,0,40,-0.06844,-0.0268,-0.1222,,,,,,,,,,,,,,,,,,,,,
59+
2023,1,1,0,41,-0.04628,-0.01982,-0.1119,,,,,,,,,,,,,,,,,,,,,
60+
2023,1,1,0,42,-0.0556,-0.02655,-0.1112,,,,,,,,,,,,,,,,,,,,,
61+
2023,1,1,0,43,-0.05468,-0.03668,-0.1178,,,,,,,,,,,,,,,,,,,,,
62+
2023,1,1,0,44,-0.0401,-0.03373,-0.09905,,,,,,,,,,,,,,,,,,,,,
63+
2023,1,1,0,45,-0.03023,-0.02554,-0.09702,,,,,,,,,,,,,,,,,,,,,
64+
2023,1,1,0,46,-0.0366,-0.02601,-0.09539,,,,,,,,,,,,,,,,,,,,,
65+
2023,1,1,0,47,-0.01802,-0.02187,-0.08899,,,,,,,,,,,,,,,,,,,,,
66+
2023,1,1,0,48,-0.02152,-0.01562,-0.07897,,,,,,,,,,,,,,,,,,,,,
67+
2023,1,1,0,49,-0.01014,-0.01607,-0.07886,,,,,,,,,,,,,,,,,,,,,
68+
2023,1,1,0,50,0.0006387,-0.0128,-0.06618,,,,,,,,,,,,,,,,,,,,,
69+
2023,1,1,0,51,0.03859,-0.002978,-0.03596,,,,,,,,,,,,,,,,,,,,,
70+
2023,1,1,0,52,0.03582,-0.009467,-0.03097,,,,,,,,,,,,,,,,,,,,,
71+
2023,1,1,0,53,0.03582,-0.01091,-0.0286,,,,,,,,,,,,,,,,,,,,,
72+
2023,1,1,0,54,0.05144,-0.006193,-0.01909,,,,,,,,,,,,,,,,,,,,,
73+
2023,1,1,0,55,0.05168,-0.003984,-0.01833,,,,,,,,,,,,,,,,,,,,,
74+
2023,1,1,0,56,0.08026,0.007534,-0.005011,,,,,,,,,,,,,,,,,,,,,
75+
2023,1,1,0,57,0.1076,-0.006134,0.01878,,,,,,,,,,,,,,,,,,,,,
76+
2023,1,1,0,58,0.1096,0.004615,0.02994,,,,,,,,,,,,,,,,,,,,,
77+
2023,1,1,0,59,0.13,0.005641,0.03861,,,,,,,,,,,,,,,,,,,,,
78+
2023,1,1,1,0,0.144,0.01108,0.0483,,,,,,,,,,,,,,,,,,,,,
79+
2023,1,1,1,1,0.1256,0.002386,0.04298,,,,,,,,,,,,,,,,,,,,,
80+
2023,1,1,1,2,0.1736,0.01215,0.06227,,,,,,,,,,,,,,,,,,,,,
81+
2023,1,1,1,3,0.201,0.005937,0.07519,,,,,,,,,,,,,,,,,,,,,
82+
2023,1,1,1,4,0.1356,-0.01773,0.0491,,,,,,,,,,,,,,,,,,,,,
83+
2023,1,1,1,5,0.09327,-0.02712,0.02312,,,,,,,,,,,,,,,,,,,,,
84+
2023,1,1,1,6,0.0713,-0.02649,0.00445,,,,,,,,,,,,,,,,,,,,,
85+
2023,1,1,1,7,0.04974,-0.02791,-0.01067,,,,,,,,,,,,,,,,,,,,,
86+
2023,1,1,1,8,0.0445,-0.02112,-0.01473,,,,,,,,,,,,,,,,,,,,,
87+
2023,1,1,1,9,0.02696,-0.02923,-0.02549,,,,,,,,,,,,,,,,,,,,,
88+
2023,1,1,1,10,0.01783,-0.0282,-0.02375,,,,,,,,,,,,,,,,,,,,,
89+
2023,1,1,1,11,0.02338,-0.02456,-0.02457,,,,,,,,,,,,,,,,,,,,,
90+
2023,1,1,1,12,0.03641,-0.02485,-0.0239,,,,,,,,,,,,,,,,,,,,,
91+
2023,1,1,1,13,0.03851,-0.02465,-0.01098,,,,,,,,,,,,,,,,,,,,,
92+
2023,1,1,1,14,0.01978,-0.03503,-0.01842,,,,,,,,,,,,,,,,,,,,,
93+
2023,1,1,1,15,0.0003484,-0.04424,-0.02838,,,,,,,,,,,,,,,,,,,,,
94+
2023,1,1,1,16,-0.02586,-0.04978,-0.04946,,,,,,,,,,,,,,,,,,,,,
95+
2023,1,1,1,17,-0.02841,-0.04672,-0.04707,,,,,,,,,,,,,,,,,,,,,
96+
2023,1,1,1,18,-0.03366,-0.03915,-0.04635,,,,,,,,,,,,,,,,,,,,,
97+
2023,1,1,1,19,-0.02007,-0.03061,-0.05082,,,,,,,,,,,,,,,,,,,,,
98+
2023,1,1,1,20,-0.01862,-0.03611,-0.05321,,,,,,,,,,,,,,,,,,,,,
99+
2023,1,1,1,21,-0.01256,-0.04047,-0.0508,,,,,,,,,,,,,,,,,,,,,
100+
2023,1,1,1,22,-0.02193,-0.04294,-0.04566,,,,,,,,,,,,,,,,,,,,,
101+
2023,1,1,1,23,0.03791,-0.0369,-0.0214,,,,,,,,,,,,,,,,,,,,,
102+
2023,1,1,1,24,0.033,-0.04075,-0.02048,,,,,,,,,,,,,,,,,,,,,
103+
2023,1,1,1,25,-0.01715,-0.06154,-0.03886,,,,,,,,,,,,,,,,,,,,,
104+
2023,1,1,1,26,-0.01467,-0.0556,-0.04074,,,,,,,,,,,,,,,,,,,,,
105+
2023,1,1,1,27,0.0101,-0.04343,-0.03544,,,,,,,,,,,,,,,,,,,,,
106+
2023,1,1,1,28,-0.02195,-0.0638,-0.04819,,,,,,,,,,,,,,,,,,,,,
107+
2023,1,1,1,29,0.01115,-0.05773,-0.03255,,,,,,,,,,,,,,,,,,,,,
108+
2023,1,1,1,30,0.02313,-0.06491,-0.02757,,,,,,,,,,,,,,,,,,,,,
109+
2023,1,1,1,31,0.08371,-0.04925,0.01261,,,,,,,,,,,,,,,,,,,,,
110+
2023,1,1,1,32,0.08491,-0.0629,0.02021,,,,,,,,,,,,,,,,,,,,,
111+
2023,1,1,1,33,0.1518,-0.05031,0.05708,,,,,,,,,,,,,,,,,,,,,
112+
2023,1,1,1,34,0.1679,-0.09516,0.06439,,,,,,,,,,,,,,,,,,,,,
113+
2023,1,1,1,35,0.114,-0.1354,0.03958,,,,,,,,,,,,,,,,,,,,,
114+
2023,1,1,1,36,0.03259,-0.1865,-0.001248,,,,,,,,,,,,,,,,,,,,,
115+
2023,1,1,1,37,0.05268,-0.1483,0.009462,,,,,,,,,,,,,,,,,,,,,
116+
2023,1,1,1,38,0.01192,-0.1555,0.000597,,,,,,,,,,,,,,,,,,,,,
117+
2023,1,1,1,39,0.01281,-0.1629,-0.008376,,,,,,,,,,,,,,,,,,,,,
118+
2023,1,1,1,40,0.105,-0.1159,0.03483,,,,,,,,,,,,,,,,,,,,,
119+
2023,1,1,1,41,0.004161,-0.1673,-0.02156,,,,,,,,,,,,,,,,,,,,,
120+
2023,1,1,1,42,-0.004529,-0.1523,-0.03088,,,,,,,,,,,,,,,,,,,,,
121+
2023,1,1,1,43,0.007897,-0.1414,-0.01478,,,,,,,,,,,,,,,,,,,,,
122+
2023,1,1,1,44,0.0126,-0.1185,-0.01549,,,,,,,,,,,,,,,,,,,,,
123+
2023,1,1,1,45,0.01732,-0.1138,-0.01773,,,,,,,,,,,,,,,,,,,,,
124+
2023,1,1,1,46,-0.03627,-0.1232,-0.03754,,,,,,,,,,,,,,,,,,,,,
125+
2023,1,1,1,47,-0.03704,-0.1219,-0.04743,,,,,,,,,,,,,,,,,,,,,
126+
2023,1,1,1,48,0.02899,-0.08818,-0.01389,,,,,,,,,,,,,,,,,,,,,
127+
2023,1,1,1,49,0.02251,-0.08783,-0.01789,,,,,,,,,,,,,,,,,,,,,
128+
2023,1,1,1,50,-0.01386,-0.1061,-0.03528,,,,,,,,,,,,,,,,,,,,,
129+
2023,1,1,1,51,0.01094,-0.08465,-0.02511,,,,,,,,,,,,,,,,,,,,,
130+
2023,1,1,1,52,0.03718,-0.09704,-0.01192,,,,,,,,,,,,,,,,,,,,,
131+
2023,1,1,1,53,-0.007993,-0.1207,-0.03034,,,,,,,,,,,,,,,,,,,,,
132+
2023,1,1,1,54,0.03265,-0.09221,-0.007236,,,,,,,,,,,,,,,,,,,,,
133+
2023,1,1,1,55,0.04726,-0.1091,-0.003582,,,,,,,,,,,,,,,,,,,,,
134+
2023,1,1,1,56,-0.002052,-0.1283,-0.02902,,,,,,,,,,,,,,,,,,,,,
135+
2023,1,1,1,57,-0.0209,-0.1218,-0.03445,,,,,,,,,,,,,,,,,,,,,
136+
2023,1,1,1,58,-0.01353,-0.09583,-0.04014,,,,,,,,,,,,,,,,,,,,,
137+
2023,1,1,1,59,0.04343,-0.06507,-0.007833,,,,,,,,,,,,,,,,,,,,,

0 commit comments

Comments
 (0)