tsp 1.8.0__py3-none-any.whl → 1.8.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- tsp/__meta__.py +1 -1
- tsp/core.py +65 -11
- tsp/version.py +1 -1
- {tsp-1.8.0.dist-info → tsp-1.8.1.dist-info}/METADATA +3 -3
- {tsp-1.8.0.dist-info → tsp-1.8.1.dist-info}/RECORD +8 -8
- {tsp-1.8.0.dist-info → tsp-1.8.1.dist-info}/WHEEL +0 -0
- {tsp-1.8.0.dist-info → tsp-1.8.1.dist-info}/licenses/LICENSE +0 -0
- {tsp-1.8.0.dist-info → tsp-1.8.1.dist-info}/top_level.txt +0 -0
tsp/__meta__.py
CHANGED
tsp/core.py
CHANGED
|
@@ -11,7 +11,7 @@ try:
|
|
|
11
11
|
import netCDF4 as nc
|
|
12
12
|
|
|
13
13
|
try:
|
|
14
|
-
from pfit.pfnet_standard import make_temperature_base
|
|
14
|
+
from pfit.pfnet_standard import make_temperature_base, calculate_extent_metadata as calc_ext_meta
|
|
15
15
|
except ModuleNotFoundError:
|
|
16
16
|
warnings.warn("Missing pfit library. Some functionality will be limited.", stacklevel=2)
|
|
17
17
|
|
|
@@ -121,14 +121,46 @@ class TSP:
|
|
|
121
121
|
self.__number_of_observations = np.ones_like(values, dtype=int)
|
|
122
122
|
self.__number_of_observations[np.isnan(values)] = 0
|
|
123
123
|
self.metadata = metadata
|
|
124
|
-
self.
|
|
125
|
-
self.
|
|
124
|
+
self._latitude = latitude
|
|
125
|
+
self._longitude = longitude
|
|
126
126
|
self.site_id = site_id
|
|
127
127
|
self._freq = None
|
|
128
128
|
self._completeness = None
|
|
129
129
|
|
|
130
130
|
self._export_precision = 3
|
|
131
131
|
|
|
132
|
+
@property
|
|
133
|
+
def latitude(self):
|
|
134
|
+
""" Latitude at which data were collected """
|
|
135
|
+
return self._latitude
|
|
136
|
+
|
|
137
|
+
@latitude.setter
|
|
138
|
+
def latitude(self, value: Optional[float]):
|
|
139
|
+
if value is not None:
|
|
140
|
+
try:
|
|
141
|
+
self._latitude = float(value)
|
|
142
|
+
except ValueError:
|
|
143
|
+
raise ValueError("Latitude must be a float or None.")
|
|
144
|
+
else:
|
|
145
|
+
self._latitude = None
|
|
146
|
+
self.metadata['_latitude'] = self._latitude
|
|
147
|
+
|
|
148
|
+
@property
|
|
149
|
+
def longitude(self):
|
|
150
|
+
""" Longitude at which data were collected """
|
|
151
|
+
return self._longitude
|
|
152
|
+
|
|
153
|
+
@longitude.setter
|
|
154
|
+
def longitude(self, value: Optional[float]):
|
|
155
|
+
if value is not None:
|
|
156
|
+
try:
|
|
157
|
+
self._longitude = float(value)
|
|
158
|
+
except ValueError:
|
|
159
|
+
raise ValueError("Longitude must be a float or None.")
|
|
160
|
+
else:
|
|
161
|
+
self._longitude = None
|
|
162
|
+
self.metadata['_longitude'] = self._longitude
|
|
163
|
+
|
|
132
164
|
@property
|
|
133
165
|
def freq(self) -> Optional[int]:
|
|
134
166
|
""" Measurement frequency [s] """
|
|
@@ -648,7 +680,7 @@ class TSP:
|
|
|
648
680
|
|
|
649
681
|
df.to_csv(filename, index=False, na_rep="-999")
|
|
650
682
|
|
|
651
|
-
def to_ntgs(self, filename:str, project_name:str="", site_id:"Optional[str]" = None, latitude:"Optional[float]"=None, longitude:"Optional[float]"=None) -> None:
|
|
683
|
+
def to_ntgs(self, filename:str, project_name:Optional[str]="", site_id:"Optional[str]" = None, latitude:"Optional[float]"=None, longitude:"Optional[float]"=None) -> None:
|
|
652
684
|
""" Write the data in NTGS template format
|
|
653
685
|
|
|
654
686
|
Parameters
|
|
@@ -671,7 +703,11 @@ class TSP:
|
|
|
671
703
|
longitude = self.longitude if self.longitude is not None else ""
|
|
672
704
|
|
|
673
705
|
if site_id is None:
|
|
674
|
-
|
|
706
|
+
site_id = self.site_id if self.site_id is not None else ""
|
|
707
|
+
|
|
708
|
+
if project_name is None:
|
|
709
|
+
project_name = self.metadata.get("project_name", "")
|
|
710
|
+
|
|
675
711
|
data = self.values
|
|
676
712
|
|
|
677
713
|
df = pd.DataFrame({'project_name': pd.Series(dtype='str'),
|
|
@@ -695,10 +731,10 @@ class TSP:
|
|
|
695
731
|
|
|
696
732
|
df.to_csv(filename, index=False)
|
|
697
733
|
|
|
698
|
-
def to_netcdf(self, file: str) -> None:
|
|
734
|
+
def to_netcdf(self, file: str, only_use_cf_metadata=True, calculate_extent_metadata=True) -> None:
|
|
699
735
|
""" Write the data as a netcdf"""
|
|
700
736
|
try:
|
|
701
|
-
ncf = make_temperature_base(file, len(self.depths))
|
|
737
|
+
ncf = make_temperature_base(file, ndepth=len(self.depths), ntime=len(self.times), strings_as_strings=True)
|
|
702
738
|
except NameError:
|
|
703
739
|
warnings.warn("Missing required packages. Try installing with `pip install tsp[nc]`", stacklevel=2)
|
|
704
740
|
return
|
|
@@ -717,14 +753,32 @@ class TSP:
|
|
|
717
753
|
if self.longitude:
|
|
718
754
|
ncd['longitude'][:] = self.longitude
|
|
719
755
|
if self.site_id:
|
|
720
|
-
ncd['site_name']
|
|
756
|
+
if ncd['site_name'].dtype == str:
|
|
757
|
+
ncd['site_name'][0] = self.site_id
|
|
758
|
+
else:
|
|
759
|
+
strlen = ncd['site_name'].shape[0]
|
|
760
|
+
ncd['site_name'][:] = nc.stringtochar(np.array([self.site_id], f"S{strlen}"))
|
|
761
|
+
|
|
762
|
+
if "_elevation" in self.metadata:
|
|
763
|
+
ncd['surface_elevation'][:] = self.metadata.get("_elevation")
|
|
764
|
+
|
|
765
|
+
if only_use_cf_metadata:
|
|
766
|
+
metadata = self.metadata.get('CF', {})
|
|
767
|
+
else:
|
|
768
|
+
metadata = self.metadata
|
|
721
769
|
|
|
722
|
-
for key, value in
|
|
770
|
+
for key, value in metadata.items():
|
|
723
771
|
try:
|
|
724
|
-
|
|
772
|
+
if isinstance(value, str):
|
|
773
|
+
ncd.setncattr_string(key, value)
|
|
774
|
+
else:
|
|
775
|
+
ncd.setncattr(key, value)
|
|
725
776
|
except Exception:
|
|
726
|
-
warnings.warn(f"Could not set metadata item: {key}", stacklevel=2)
|
|
777
|
+
warnings.warn(f"Could not set metadata item: {key} : {value}", stacklevel=2)
|
|
727
778
|
|
|
779
|
+
if calculate_extent_metadata:
|
|
780
|
+
calc_ext_meta(ncd)
|
|
781
|
+
|
|
728
782
|
def to_json(self, file: str) -> None:
|
|
729
783
|
""" Write the data to a serialized json file """
|
|
730
784
|
with open(file, 'w') as f:
|
tsp/version.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
version="1.8.
|
|
1
|
+
version="1.8.1"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tsp
|
|
3
|
-
Version: 1.8.
|
|
3
|
+
Version: 1.8.1
|
|
4
4
|
Summary: Making permafrost data effortless
|
|
5
5
|
Home-page: https://gitlab.com/permafrostnet/teaspoon
|
|
6
6
|
Author: Nick Brown
|
|
@@ -27,10 +27,10 @@ Provides-Extra: rbr
|
|
|
27
27
|
Requires-Dist: pyrsktools; extra == "rbr"
|
|
28
28
|
Requires-Dist: openpyxl; extra == "rbr"
|
|
29
29
|
Provides-Extra: full
|
|
30
|
-
Requires-Dist: netCDF4; extra == "full"
|
|
31
|
-
Requires-Dist: pyrsktools; extra == "full"
|
|
32
30
|
Requires-Dist: scipy; extra == "full"
|
|
33
31
|
Requires-Dist: pfit==0.2.1; extra == "full"
|
|
32
|
+
Requires-Dist: netCDF4; extra == "full"
|
|
33
|
+
Requires-Dist: pyrsktools; extra == "full"
|
|
34
34
|
Requires-Dist: openpyxl; extra == "full"
|
|
35
35
|
Provides-Extra: dev
|
|
36
36
|
Requires-Dist: manuel; extra == "dev"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
tsp/__init__.py,sha256=V_rDl4XxSRtbFWK7KFZJkKqwjqwLREvlnVc7BCGjHaw,427
|
|
2
|
-
tsp/__meta__.py,sha256=
|
|
2
|
+
tsp/__meta__.py,sha256=tX7kLpRWOrz5cd1yN8hSxvnQEMfxFz00EFtGKA45M4k,93
|
|
3
3
|
tsp/concatenation.py,sha256=XK-5ec_IrlIVShp9eqd5QVg1yDgk3ysPFzeJpo2G2gc,5990
|
|
4
|
-
tsp/core.py,sha256=
|
|
4
|
+
tsp/core.py,sha256=bRsX_qs7cGJtxe40V50TYulAMWaIzUj1EtQcVD56jtY,39915
|
|
5
5
|
tsp/gtnp.py,sha256=cFFSOVzudEkxqtXSMnsVE7clVoXFH0Gb8ES-Cx_iwUU,4269
|
|
6
6
|
tsp/labels.py,sha256=URV4zxfur6aYojdra7KGTipFdiN9pAOCEVvkcc2pj-Q,78
|
|
7
7
|
tsp/misc.py,sha256=y0NvW5jOlli5s220QnaLYTOadSlj3Lyu-EE-RsoSbok,2614
|
|
@@ -10,7 +10,7 @@ tsp/readers.py,sha256=1rPcS9eRpkGPWU6MsSrgiMh2QCKvAAY5_KiTQMMcsxk,18464
|
|
|
10
10
|
tsp/time.py,sha256=82h7nxM-iXs2XwetF-alLtNvUm0qRtAA111gTMp5SY4,1379
|
|
11
11
|
tsp/tspwarnings.py,sha256=AGCmSlwM3JbnrEZSbyBKLnyQkKygsKU_YYbte4iZsK8,399
|
|
12
12
|
tsp/utils.py,sha256=sOJSZLmfv7sh4X971_gNgtZvXtS8ZwGmUdqnUybcVE4,2932
|
|
13
|
-
tsp/version.py,sha256=
|
|
13
|
+
tsp/version.py,sha256=FS-CnweGXSAhfq0K-UkXsGZu941kSK-J2gYMkcnFVAI,15
|
|
14
14
|
tsp/data/2023-01-06_755-test-Dataset_2031-Constant_Over_Interval-Hourly-Ground_Temperature-Thermistor_Automated.timeserie.csv,sha256=Q3Ssnoo_kiSn9_orZHjtMxQ02YbrjCAEQKs5sHPFJCg,171
|
|
15
15
|
tsp/data/2023-01-06_755-test.metadata.txt,sha256=Ux1YGqmAmRQmMIqqK8-OloQXflg4Y45FRwdT-WgCg8c,5686
|
|
16
16
|
tsp/data/NTGS_example_csv.csv,sha256=OirFmLRqj7TUYfAUHqKbZFSqQ-g3I13QwUfUzgiJ-h4,554
|
|
@@ -87,8 +87,8 @@ tsp/dataloggers/test_files/rbr_xl_003.DAT,sha256=ZEKheCvB1CiubY2kMngigY0NNhWTYAi
|
|
|
87
87
|
tsp/dataloggers/test_files/rbr_xl_003.HEX,sha256=sunCD5C1t8l5y4p1b9iiHNsZUznYIuBLz4uwoGkZh3E,118459
|
|
88
88
|
tsp/plots/__init__.py,sha256=i5AhpNwyuT6il7uk2Vtc4YBjVnZ0ifvHNXw19rvDtsM,71
|
|
89
89
|
tsp/plots/static.py,sha256=pvLFM3_HuRgnPMe7smxj9v65zcM3JLsCvhhwGgdt5Uk,13836
|
|
90
|
-
tsp-1.8.
|
|
91
|
-
tsp-1.8.
|
|
92
|
-
tsp-1.8.
|
|
93
|
-
tsp-1.8.
|
|
94
|
-
tsp-1.8.
|
|
90
|
+
tsp-1.8.1.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
91
|
+
tsp-1.8.1.dist-info/METADATA,sha256=_T7ZVlB3FOdmkzHzHUSTA7uSD2fI0GHRs79zRTqgIdY,3271
|
|
92
|
+
tsp-1.8.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
93
|
+
tsp-1.8.1.dist-info/top_level.txt,sha256=7tOR6y7BarphfWD2D7QFi_3F1jxagUZpHG8zwJIw4ck,30
|
|
94
|
+
tsp-1.8.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|