tsp 1.4.6__py3-none-any.whl → 1.5.3__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.

Potentially problematic release.


This version of tsp might be problematic. Click here for more details.

Files changed (45) hide show
  1. tsp/__init__.py +4 -2
  2. tsp/__meta__.py +1 -1
  3. tsp/core.py +26 -10
  4. tsp/dataloggers/FG2.py +13 -0
  5. tsp/dataloggers/GP5W.py +14 -1
  6. tsp/dataloggers/RBRXL800.py +190 -0
  7. tsp/dataloggers/RBRXR420.py +307 -0
  8. tsp/dataloggers/test_files/004448.DAT +2543 -0
  9. tsp/dataloggers/test_files/004531.DAT +17106 -0
  10. tsp/dataloggers/test_files/004531.HEX +3587 -0
  11. tsp/dataloggers/test_files/004534.HEX +3587 -0
  12. tsp/dataloggers/test_files/010252.dat +1731 -0
  13. tsp/dataloggers/test_files/010252.hex +1740 -0
  14. tsp/dataloggers/test_files/010274.hex +1292 -0
  15. tsp/dataloggers/test_files/010278.hex +3545 -0
  16. tsp/dataloggers/test_files/012064.dat +1286 -0
  17. tsp/dataloggers/test_files/012064.hex +1294 -0
  18. tsp/dataloggers/test_files/012081.hex +3533 -0
  19. tsp/dataloggers/test_files/062834_20220904_2351.rsk +0 -0
  20. tsp/dataloggers/test_files/062834_20220904_2351.xlsx +0 -0
  21. tsp/dataloggers/test_files/07B1592.DAT +1483 -0
  22. tsp/dataloggers/test_files/07B1592.HEX +1806 -0
  23. tsp/dataloggers/test_files/07B4450.DAT +2234 -0
  24. tsp/dataloggers/test_files/07B4450.HEX +2559 -0
  25. tsp/dataloggers/test_files/rbr_001.dat +1133 -0
  26. tsp/dataloggers/test_files/rbr_001.hex +1140 -0
  27. tsp/dataloggers/test_files/rbr_001_no_comment.dat +1132 -0
  28. tsp/dataloggers/test_files/rbr_001_no_comment.hex +1139 -0
  29. tsp/dataloggers/test_files/rbr_002.dat +1179 -0
  30. tsp/dataloggers/test_files/rbr_002.hex +1186 -0
  31. tsp/dataloggers/test_files/rbr_003.hex +1292 -0
  32. tsp/dataloggers/test_files/rbr_003.xls +0 -0
  33. tsp/dataloggers/test_files/rbr_xl_001.DAT +1105 -0
  34. tsp/dataloggers/test_files/rbr_xl_002.DAT +1126 -0
  35. tsp/dataloggers/test_files/rbr_xl_003.DAT +4622 -0
  36. tsp/dataloggers/test_files/rbr_xl_003.HEX +3587 -0
  37. tsp/gtnp.py +20 -12
  38. tsp/physics.py +5 -10
  39. tsp/readers.py +84 -10
  40. tsp/utils.py +101 -0
  41. {tsp-1.4.6.dist-info → tsp-1.5.3.dist-info}/METADATA +4 -1
  42. {tsp-1.4.6.dist-info → tsp-1.5.3.dist-info}/RECORD +45 -13
  43. {tsp-1.4.6.dist-info → tsp-1.5.3.dist-info}/WHEEL +1 -1
  44. {tsp-1.4.6.dist-info → tsp-1.5.3.dist-info}/LICENSE +0 -0
  45. {tsp-1.4.6.dist-info → tsp-1.5.3.dist-info}/top_level.txt +0 -0
tsp/gtnp.py CHANGED
@@ -17,24 +17,36 @@ class GtnpMetadata:
17
17
  Path to GTN-P *.metadata.txt file.
18
18
  """
19
19
  self.filepath = filepath
20
- self.dict = OrderedDict()
20
+ self._dict = OrderedDict()
21
21
  self._read()
22
22
  self._parse()
23
23
 
24
24
  def _read(self):
25
25
  with open(self.filepath, 'r') as f:
26
26
  self._raw = f.readlines()
27
+
28
+ @property
29
+ def raw(self) -> 'list[str]':
30
+ return self._raw
31
+
32
+ @raw.setter
33
+ def raw(self, value):
34
+ raise ValueError("Cannot set")
35
+
36
+ @property
37
+ def parsed(self) -> dict:
38
+ return self._dict
27
39
 
28
40
  def _parse(self):
29
41
  lines = [line for line in self._raw] # Make a copy in case we need to use fallback plan
30
42
 
31
43
  try:
32
- self.dict = OrderedDict()
33
- recursively_build_metadata(lines, self.dict)
44
+ self._dict = OrderedDict()
45
+ recursively_build_metadata(lines, self._dict)
34
46
 
35
47
  except Exception:
36
48
  print("Couldn't build nested dictionary. Fallback to simple dictionary.")
37
- self.dict = OrderedDict()
49
+ self._dict = OrderedDict()
38
50
  self._parse_dict()
39
51
 
40
52
 
@@ -47,11 +59,11 @@ class GtnpMetadata:
47
59
  key, value = result.groups()
48
60
 
49
61
  if value.strip() != "":
50
- self.dict[key] = value.strip()
62
+ self._dict[key] = value.strip()
51
63
 
52
64
  def get_timezone(self) -> Optional[tzinfo]:
53
65
  try:
54
- zone = self.dict['Timezone']
66
+ zone = self._dict['Timezone']
55
67
  except KeyError:
56
68
  return None
57
69
 
@@ -64,20 +76,16 @@ class GtnpMetadata:
64
76
 
65
77
  def get_latitude(self) -> Optional[float]:
66
78
  try:
67
- return float(self.dict['Latitude'])
79
+ return float(self._dict['Latitude'])
68
80
  except KeyError:
69
81
  return None
70
82
 
71
83
  def get_longitude(self) -> Optional[float]:
72
84
  try:
73
- return float(self.dict['Longitude'])
85
+ return float(self._dict['Longitude'])
74
86
  except KeyError:
75
87
  return None
76
88
 
77
- @property
78
- def values(self):
79
- pass
80
-
81
89
 
82
90
  def recursively_build_metadata(lines: list, odict: OrderedDict, depth:int=0) -> None:
83
91
  """ A recursive function to build an OrderedDict from a list of lines.
tsp/physics.py CHANGED
@@ -3,11 +3,11 @@ from typing import Optional
3
3
 
4
4
 
5
5
  def analytical_fourier(depths: "np.ndarray", times: "np.ndarray",
6
- Q:"Optional[float]"=0.2,
7
- c:"Optional[float]"=1.6e6,
8
- k:"Optional[float]"=2.5,
9
- A:"Optional[float]"=6,
10
- MAGST:"Optional[float]"=-0.5) -> "np.ndarray":
6
+ Q:float=0.2,
7
+ c:float=1.6e6,
8
+ k:float=2.5,
9
+ A:float=6,
10
+ MAGST:float=-0.5) -> "np.ndarray":
11
11
  """Create sinusoidal synthetic data for examples and testing
12
12
 
13
13
  Parameters
@@ -32,13 +32,8 @@ def analytical_fourier(depths: "np.ndarray", times: "np.ndarray",
32
32
  TSP
33
33
  _description_
34
34
  """
35
- Q = 0.2 # [W m-2]
36
- c = 1.6e6 # J m-3 K-1
37
- k = 2.5 # [W m-1 K-1]
38
35
  tau = 31536000 # [s]
39
36
  w = 2 * np.pi / tau # []
40
- A = 6 # [C]
41
- MAGST = -0.5 # [C]
42
37
  alpha = k / c
43
38
 
44
39
  initial = initial_analytic(MAGST, Q, k, depths)
tsp/readers.py CHANGED
@@ -15,6 +15,8 @@ from typing import Union, Optional
15
15
  from tsp.dataloggers.Geoprecision import detect_geoprecision_type
16
16
  from tsp.dataloggers.HOBO import HOBO, HOBOProperties
17
17
  from tsp.dataloggers.logr import LogR, guessed_depths_ok
18
+ from tsp.dataloggers.RBRXL800 import RBRXL800
19
+ from tsp.dataloggers.RBRXR420 import RBRXR420
18
20
 
19
21
  from tsp.core import TSP, IndexedTSP
20
22
  from tsp.misc import _is_depth_column
@@ -82,7 +84,9 @@ def read_csv(filepath: str,
82
84
  return t
83
85
 
84
86
 
85
- def read_gtnp(filename: str, metadata_filepath=None) -> TSP:
87
+ def read_gtnp(filename: str,
88
+ metadata_filepath=None,
89
+ autodetect_metadata=True) -> TSP:
86
90
  """Read test file from GTN-P database export
87
91
 
88
92
  Parameters
@@ -103,7 +107,19 @@ def read_gtnp(filename: str, metadata_filepath=None) -> TSP:
103
107
  datecol="Date/Depth",
104
108
  datefmt="%Y-%m-%d %H:%M:%S",
105
109
  depth_pattern=r"^(-?[0-9\.]+)$")
106
- # TODO: try to automatically detect metadata file
110
+
111
+ # try to automatically detect metadata file
112
+ if metadata_filepath is None and autodetect_metadata:
113
+ partial_name = Path(filename).stem
114
+
115
+ while partial_name:
116
+ test_metadata = Path(Path(filename).parent, partial_name).with_suffix(".metadata.txt")
117
+
118
+ if test_metadata.is_file():
119
+ metadata_filepath = test_metadata
120
+ break
121
+ else:
122
+ partial_name = partial_name[:-1]
107
123
 
108
124
  if metadata_filepath is not None:
109
125
  try:
@@ -111,7 +127,9 @@ def read_gtnp(filename: str, metadata_filepath=None) -> TSP:
111
127
  except Exception as e:
112
128
  warnings.warn(f"Failed to read metadata file: {e}")
113
129
  return t
114
-
130
+ t.metadata['raw'] = meta.raw
131
+ t.metadata['parsed'] = meta.parsed
132
+
115
133
  # set time zone
116
134
  tz = meta.get_timezone()
117
135
  if tz:
@@ -145,7 +163,21 @@ def read_geotop(file: str) -> TSP:
145
163
 
146
164
  t._depths *= 0.001 # Convert to [m]
147
165
 
148
- return t
166
+ # Only use last simulation period
167
+ # TODO: this could be improved
168
+ raw = pd.read_csv(file)
169
+ last_run = np.logical_and(raw['Simulation_Period'] == max( raw['Simulation_Period'] ),
170
+ raw['Run'] == max( raw['Run'] ))
171
+
172
+ last = TSP(times = t.times[last_run],
173
+ depths = t.depths,
174
+ values = t.values[last_run, :],
175
+ metadata={"Simulation_Period": max(raw['Simulation_Period']),
176
+ "Run": max( raw['Run'] )
177
+ }
178
+ )
179
+
180
+ return last
149
181
 
150
182
 
151
183
  def read_gtpem(file: str) -> "list[TSP]":
@@ -250,7 +282,7 @@ def read_ntgs(filename: str) -> TSP:
250
282
  try:
251
283
  raw = pd.read_csv(filename,
252
284
  keep_default_na=False,na_values=[''],
253
- parse_dates={"time": ["date_YYYY-MM-DD","time_HH:MM:SS"]},
285
+ parse_dates={"time": ["date_YYYY-MM-DD","time_HH:MM:SS"]},
254
286
  date_parser=__nt_date_parser)
255
287
  except IndexError:
256
288
  raise IndexError("There are insufficient columns, the file format is invalid.")
@@ -327,16 +359,17 @@ def read_geoprecision(filepath: str) -> IndexedTSP:
327
359
  IndexedTSP
328
360
  An IndexedTSP
329
361
  """
330
- reader = detect_geoprecision_type(filepath)
362
+ Reader = detect_geoprecision_type(filepath)
331
363
 
332
- if reader is None:
364
+ if Reader is None:
333
365
  raise RuntimeError("Could not detect type of geoprecision file (GP5W or FG2 missing from header")
334
-
335
- data = reader().read(filepath)
336
-
366
+ reader = Reader()
367
+
368
+ data = reader.read(filepath)
337
369
  t = IndexedTSP(times=data['TIME'].dt.to_pydatetime(),
338
370
  values=data.drop("TIME", axis=1).values)
339
371
 
372
+ t.metadata = reader.META
340
373
  return t
341
374
 
342
375
 
@@ -460,3 +493,44 @@ def read_classic(filepath: str, init_file: "Optional[str]"=None) -> TSP:
460
493
  t.set_depths(depths)
461
494
 
462
495
  return t
496
+
497
+
498
+ def read_rbr(file_path: str) -> IndexedTSP:
499
+ """
500
+
501
+ Parameters
502
+ ----------
503
+ filepath
504
+
505
+ Returns
506
+ -------
507
+
508
+ """
509
+ file_extention = Path(file_path).suffix.lower()
510
+ if file_extention in [".dat", ".hex"]:
511
+ with open(file_path, "r") as f:
512
+ first_line = f.readline()
513
+ model = first_line.split()[1]
514
+ if model == "XL-800":
515
+ r = RBRXL800()
516
+ elif model in ["XR-420", "XR-420-T8"]:
517
+ r = RBRXR420()
518
+ else:
519
+ raise ValueError(f"logger model {model} unsupported")
520
+ data = r.read(file_path)
521
+ elif file_extention in [".xls", ".xlsx", ".rsk"]:
522
+ r = RBRXR420()
523
+ data = r.read(file_path)
524
+ else:
525
+ raise IOError("File is not .dat, .hex, .xls, .xlsx, or .rsk")
526
+
527
+ times = data['TIME'].dt.to_pydatetime()
528
+ channels = pd.Series(data.columns).str.match("^ch")
529
+ values = data.loc[:, channels.to_numpy()]
530
+
531
+ t = IndexedTSP(times=times, values=values.values)
532
+ if "utc offset" in list(r.META.keys()):
533
+ t.set_utc_offset(r.META["utc offset"])
534
+
535
+ return t
536
+
tsp/utils.py ADDED
@@ -0,0 +1,101 @@
1
+ import pandas as pd
2
+ import numpy as np
3
+
4
+ import tsp
5
+ from tsp import TSP
6
+
7
+
8
+ def resolve_duplicate_times(t: TSP, keep="first") -> TSP:
9
+ """Eliminate duplicate times in a TSP.
10
+
11
+ Parameters
12
+ ----------
13
+ tsp : TSP
14
+ TSP to resolve duplicate times in.
15
+ keep : str, optional
16
+ Method to resolve duplicate times. Chosen from "first", "average", "last", "strip"
17
+ by default "first"
18
+
19
+ Returns
20
+ -------
21
+ TSP
22
+ TSP with no duplicated times."""
23
+ resolver = _get_duplicate_resolver(keep)
24
+ return resolver(t)
25
+
26
+
27
+ def _get_duplicate_resolver(keep: str):
28
+ if keep == "first":
29
+ return _first_duplicate_time
30
+ elif keep == "average":
31
+ return _average_duplicate_time
32
+ elif keep == "last":
33
+ return _last_duplicate_time
34
+ elif keep == "strip":
35
+ return _strip_duplicate_time
36
+ else:
37
+ raise ValueError(f"Unknown duplicate resolver method: {keep}")
38
+
39
+
40
+ def _first_duplicate_time(t: TSP):
41
+ df = t.wide
42
+ df = df[~df.index.duplicated(keep="first")]
43
+
44
+ time = df.index
45
+ values = df.drop(['time'], axis=1).values
46
+ depths = df.drop(['time'], axis=1).columns
47
+
48
+ t_new = TSP(times=time, values=values, depths=depths,
49
+ latitude=t.latitude, longitude=t.longitude,
50
+ site_id=t.site_id, metadata=t.metadata)
51
+
52
+ return t_new
53
+
54
+
55
+ def _last_duplicate_time(t: TSP):
56
+ df = t.wide
57
+ df = df[~df.index.duplicated(keep="last")]
58
+
59
+ time = df.index
60
+ values = df.drop(['time'], axis=1).values
61
+ depths = df.drop(['time'], axis=1).columns
62
+
63
+ t_new = TSP(times=time, values=values, depths=depths,
64
+ latitude=t.latitude, longitude=t.longitude,
65
+ site_id=t.site_id, metadata=t.metadata)
66
+
67
+ return t_new
68
+
69
+
70
+ def _strip_duplicate_time(t: TSP):
71
+ df = t.wide
72
+ df = df[~df.index.duplicated(keep=False)]
73
+
74
+ time = df.index
75
+ values = df.drop(['time'], axis=1).values
76
+ depths = df.drop(['time'], axis=1).columns
77
+
78
+ t_new = TSP(times=time, values=values, depths=depths,
79
+ latitude=t.latitude, longitude=t.longitude,
80
+ site_id=t.site_id, metadata=t.metadata)
81
+
82
+ return t_new
83
+
84
+
85
+ def _average_duplicate_time(t: TSP):
86
+ singleton = t.wide[~t.wide.index.duplicated(keep=False)]
87
+ duplicated = t.wide[t.wide.index.duplicated(keep=False)].drop(['time'], axis=1).reset_index()
88
+ averaged = duplicated.groupby(duplicated['index']).apply(lambda x: x[~x.isna()].mean(numeric_only=True))
89
+ averaged.insert(0, 'time',averaged.index)
90
+
91
+ df = pd.concat([singleton, averaged], ignore_index=False).sort_index()
92
+
93
+ time = df.index
94
+ values = df.drop(['time'], axis=1).values
95
+ depths = df.drop(['time'], axis=1).columns
96
+
97
+ t_new = TSP(times=time, values=values, depths=depths,
98
+ latitude=t.latitude, longitude=t.longitude,
99
+ site_id=t.site_id, metadata=t.metadata)
100
+
101
+ return t_new
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: tsp
3
- Version: 1.4.6
3
+ Version: 1.5.3
4
4
  Summary: Making permafrost data effortless
5
5
  Home-page: https://gitlab.com/permafrostnet/teaspoon
6
6
  Author: Nick Brown
@@ -28,6 +28,9 @@ Requires-Dist: pfit (==0.2.1) ; extra == 'nc'
28
28
  Provides-Extra: plotting
29
29
  Requires-Dist: matplotlib ; extra == 'plotting'
30
30
  Requires-Dist: scipy ; extra == 'plotting'
31
+ Provides-Extra: rbr
32
+ Requires-Dist: pyrsktools ; extra == 'rbr'
33
+ Requires-Dist: openpyxl ; extra == 'rbr'
31
34
 
32
35
  # Teaspoon
33
36
 
@@ -1,22 +1,42 @@
1
- tsp/__init__.py,sha256=e9kRTDuT_7kUJScFja-R1sFK6JP-h3WvACZaI2cQK5E,322
2
- tsp/__meta__.py,sha256=PTaMIN0O0sni6Ob0eQBma5ywZGnZgsydrRtAhhMKXkU,93
3
- tsp/core.py,sha256=pokPMRJxEWlYS6yFt6G96ZJ5I7gE7CUhuPgL75DMUJQ,29935
4
- tsp/gtnp.py,sha256=zfmMz4rUqndni_RlkrYAzepfHiaM_ZdaOtvv-vgLxng,3806
1
+ tsp/__init__.py,sha256=Ye8YN7QIbwkk6qMB_D0gB_F39JHY7WHsKKpNmE41g-U,380
2
+ tsp/__meta__.py,sha256=YRWJbWvRef7F7Aeph-Cv-keq14LjWDj1ytAoDCkHp58,93
3
+ tsp/core.py,sha256=zXIxGnQE8BIbGbAq672aFiIOOhp2RRx59Uf0R9fVefk,30720
4
+ tsp/gtnp.py,sha256=kIxhLq_ve_cxU9v4_nDebc8jy6l7KQ87MOg8vK8lih4,3991
5
5
  tsp/misc.py,sha256=18w41G-umRi69lswXhpvJwrx4hqQ6r3bsvnmeKtpMU4,107
6
- tsp/physics.py,sha256=vUVsZdQOYaaWJ65VcHm1piuTem0I7xg4MtsJm8Uf33w,2877
7
- tsp/readers.py,sha256=lziKBdOIHei3f3wOAWc18bUYPHUntifWmg6UEw7fkhA,16182
6
+ tsp/physics.py,sha256=hgVOGU0Bj1g-gxBNhLEl7Gm3VXJKIHHu35uPvgVMOxE,2699
7
+ tsp/readers.py,sha256=AR2__iJIDW4MGUd11B9RF3kPCEZAQ0xzNOHSrpgd-yM,18520
8
8
  tsp/time.py,sha256=82h7nxM-iXs2XwetF-alLtNvUm0qRtAA111gTMp5SY4,1379
9
+ tsp/utils.py,sha256=sOJSZLmfv7sh4X971_gNgtZvXtS8ZwGmUdqnUybcVE4,2932
9
10
  tsp/data/2023-01-06_755-test-Dataset_2031-Constant_Over_Interval-Hourly-Ground_Temperature-Thermistor_Automated.timeserie.csv,sha256=Q3Ssnoo_kiSn9_orZHjtMxQ02YbrjCAEQKs5sHPFJCg,171
10
11
  tsp/data/2023-01-06_755-test.metadata.txt,sha256=Ux1YGqmAmRQmMIqqK8-OloQXflg4Y45FRwdT-WgCg8c,5686
11
12
  tsp/data/example_geotop.csv,sha256=rgVP7_tGEvUtn1K_KI98VVgm275D7qt8YegKMe3Vjw4,262289
12
13
  tsp/data/example_gtnp.csv,sha256=E5km06-cWlWMwzF-Qo7v0ZrlAvCTpyWIKY6hpzln4sc,191812
13
14
  tsp/dataloggers/AbstractReader.py,sha256=YsmESWrmH2jdL-Oli9pwjaFmPCEfJxjm4wx16FoRxpY,1777
14
- tsp/dataloggers/FG2.py,sha256=Qud2aAEEF8EBvUiluVJDk3REJUF2wJFVEfyxKmJCEY0,2947
15
- tsp/dataloggers/GP5W.py,sha256=q3yqxLtHCnW_SOIE40Vw-WIC2yuFwRdFiVJ1KvgrnNs,2975
15
+ tsp/dataloggers/FG2.py,sha256=kvfjMQtoSs5ZzV7hc1lJ_SaDuSOOTONfI_nw2VaihO8,3281
16
+ tsp/dataloggers/GP5W.py,sha256=dJ7I-P4_bIDDGb9zIdOf9vbxbxlcT3ZJ09HKLfRA6a0,3312
16
17
  tsp/dataloggers/Geoprecision.py,sha256=pDljZDasj7PNdiI5lOEpHZ9n7CZJ1aGlX96rN4cuPHI,916
17
18
  tsp/dataloggers/HOBO.py,sha256=xr5PvdMh_AO4CSsqdGLvtdVgfphc91Nl34Qs-AiP-wQ,33472
19
+ tsp/dataloggers/RBRXL800.py,sha256=NjS6g_-grnC8BmLLW7qUppeOBYAOUJODNR-GwahnI7Y,8538
20
+ tsp/dataloggers/RBRXR420.py,sha256=PIY46cjJnngul3OI4mZQ1TtlcFNTJmXmyxmex6TEEeI,13908
18
21
  tsp/dataloggers/__init__.py,sha256=4QcIctP5hoVfraU3PwhkTIca-4JIWH9u6-j4CQWoW1g,410
19
22
  tsp/dataloggers/logr.py,sha256=4IaqP6debop3QYnKWAyCzRxgve25txcr1itmtCciKkY,2665
23
+ tsp/dataloggers/test_files/004448.DAT,sha256=1eJg5PtOrwlbzitp1XB5uE64ksqQHIIjTNgKIDn7zkI,201018
24
+ tsp/dataloggers/test_files/004531.DAT,sha256=8Pag_PnR-3dK4rhr7os6kyQXVe8i1N5w1_ACefT9G4s,331292
25
+ tsp/dataloggers/test_files/004531.HEX,sha256=0qJio9SvecR2MS4-nkjcZwqLh8h0sKdB6js_6yKqy5k,118535
26
+ tsp/dataloggers/test_files/004534.HEX,sha256=cWMHCZ7JOu08RM2sjqay2aZiud35LY7NSsmBhjheGRI,118531
27
+ tsp/dataloggers/test_files/010252.dat,sha256=_f9rvVq6U3ms3YQlN05doiy46PaNwqjeDlVCZK9NeU0,171935
28
+ tsp/dataloggers/test_files/010252.hex,sha256=3o-A8c7v-KyQr0OR1CftJW1e7c6tyvY16MsZb_s0N74,84712
29
+ tsp/dataloggers/test_files/010274.hex,sha256=4nB6jBzsP3XsraXZ_87IZZbZCqLQRtWcQ2mvR4R1c0I,62720
30
+ tsp/dataloggers/test_files/010278.hex,sha256=8IOkmg1EC5mTj6vLECc9_t-Nb66Yp_dxcFCs6YzkCqo,173117
31
+ tsp/dataloggers/test_files/012064.dat,sha256=LgwK9p0uzV0f7Gt1kIJWQSZWmG25i3vOJmTaG2jQ9gM,127062
32
+ tsp/dataloggers/test_files/012064.hex,sha256=O2VReAh3xW-Rg-z8EJ0cR7aoVqvEfL6TpPkt5FXfagY,62921
33
+ tsp/dataloggers/test_files/012081.hex,sha256=MwCQT5VLWiUVCmQGlzAMjZMwvdKolPAgtIIIvB2Z4sU,172576
34
+ tsp/dataloggers/test_files/062834_20220904_2351.rsk,sha256=2DJa-wnrms1N_fJ9QmvcNFH5JMIBdBhcb-nXtUMp70k,1007616
35
+ tsp/dataloggers/test_files/062834_20220904_2351.xlsx,sha256=z2sE1P--zcQJ1FoVJu43kXoxs1wIhwXGBukwzt1nIbc,308908
36
+ tsp/dataloggers/test_files/07B1592.DAT,sha256=KalPKVVgzKTJrVQU8_3pmIJbEV1QJgXDUcJVwHnyYrY,107655
37
+ tsp/dataloggers/test_files/07B1592.HEX,sha256=Eav6F_ExQ7qfg-mBMkZqrsASgWLM1RafNW43o8H4vEE,59683
38
+ tsp/dataloggers/test_files/07B4450.DAT,sha256=1CpQviX4xhtkXL6wHENMmNvmJNarOAm6UcGL2G4AMZ8,162502
39
+ tsp/dataloggers/test_files/07B4450.HEX,sha256=MyjYMf9EwWi7c91JwrNd4n0cPyAYZT1w719MygMQWO4,84576
20
40
  tsp/dataloggers/test_files/FG2_399.csv,sha256=Uonw_fFY3TUZ1O-XFtjRrV1yLr2iqUyBOlJM_wdZQGA,648322
21
41
  tsp/dataloggers/test_files/GP5W.csv,sha256=2mQl3YfzFVtvi3pdkEfyw9Cam3TzeHqAMnY06JSU6co,36948
22
42
  tsp/dataloggers/test_files/GP5W_260.csv,sha256=AbLBA12XLQLlNXpvht7Jy_DrvCUqhC1cQdFGnNYVXg0,68696
@@ -45,10 +65,22 @@ tsp/dataloggers/test_files/hobo_1_AB_var3.csv,sha256=xwtPv3llA-LReippxcOUE20cBb_
45
65
  tsp/dataloggers/test_files/logR_ULogC16-32_1.csv,sha256=0HcCjf_jEBDpgpyTqiJC1oIoJsnt5Qdk4qV_s_KfuTQ,21966
46
66
  tsp/dataloggers/test_files/logR_ULogC16-32_2.csv,sha256=MU58RvTSwFrhJIbaKPSSKf51tPyZC9_ZXgPCCfk9p4M,19066
47
67
  tsp/dataloggers/test_files/mon_3_Ta_2010-08-18_2013-02-08.txt,sha256=Sqv23n-r1KLLdSsjjVeDvS-sX061Ivklhv5sDwRMwpA,734009
68
+ tsp/dataloggers/test_files/rbr_001.dat,sha256=pS1QV_he33ccbfUpZMWm54AYDekez5us4MxS917wh0g,111570
69
+ tsp/dataloggers/test_files/rbr_001.hex,sha256=HNrSlP05Y2LUqtvlzX_5O7rQrTGItUlZpMswra-dJpc,55293
70
+ tsp/dataloggers/test_files/rbr_001_no_comment.dat,sha256=s_-tc-ShQfYqc4ObMh35xr8tQBHDxwjuBLDftX6Pc9U,111547
71
+ tsp/dataloggers/test_files/rbr_001_no_comment.hex,sha256=HKG-sl7kw1A_Z3melKKT2xgVEAayv2fvCKzCFNM4LXA,55270
72
+ tsp/dataloggers/test_files/rbr_002.dat,sha256=tUIX8InqQHObWzDVZrv1vTmY02zpIeepbKDpv4p5cpA,93525
73
+ tsp/dataloggers/test_files/rbr_002.hex,sha256=W29e__jot7deVVC2XDtXwAgqfmvHzU7qi-7yQb4_mz0,57536
74
+ tsp/dataloggers/test_files/rbr_003.hex,sha256=cjUaYWGm39WthiPvdzQKaOQ5FEKj3U9rCIe_0my7v2M,62703
75
+ tsp/dataloggers/test_files/rbr_003.xls,sha256=PRxsKD88dTQEYOqz5z1FrkPox1jCkYyiBBZK0Kg-7tQ,263680
76
+ tsp/dataloggers/test_files/rbr_xl_001.DAT,sha256=yZXKaClXMtYWDCs1cD2xTVdGj6LBMLKSjKnTgB4qPio,80057
77
+ tsp/dataloggers/test_files/rbr_xl_002.DAT,sha256=JQNHL6X9z4Rp6IDqDBYx8vWsUU6oigl8nC23rMa3Enk,81601
78
+ tsp/dataloggers/test_files/rbr_xl_003.DAT,sha256=ZEKheCvB1CiubY2kMngigY0NNhWTYAiC_hmQhzODPYw,221656
79
+ tsp/dataloggers/test_files/rbr_xl_003.HEX,sha256=sunCD5C1t8l5y4p1b9iiHNsZUznYIuBLz4uwoGkZh3E,118459
48
80
  tsp/plots/__init__.py,sha256=i5AhpNwyuT6il7uk2Vtc4YBjVnZ0ifvHNXw19rvDtsM,71
49
81
  tsp/plots/static.py,sha256=hH-FkazPMKgqI74NtGUn_D_avo6ts9ZmzWgov2GLmEU,9448
50
- tsp-1.4.6.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
51
- tsp-1.4.6.dist-info/METADATA,sha256=h0RzcavPbdTPlORS96PjIEe2Zc0arRAmNrmpRGbpCd4,2731
52
- tsp-1.4.6.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
53
- tsp-1.4.6.dist-info/top_level.txt,sha256=7tOR6y7BarphfWD2D7QFi_3F1jxagUZpHG8zwJIw4ck,30
54
- tsp-1.4.6.dist-info/RECORD,,
82
+ tsp-1.5.3.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
83
+ tsp-1.5.3.dist-info/METADATA,sha256=nObnySvS_vS3145_sZ9CBKEB5gSMeaxx72A5y2amAeU,2835
84
+ tsp-1.5.3.dist-info/WHEEL,sha256=pkctZYzUS4AYVn6dJ-7367OJZivF2e8RA9b_ZBjif18,92
85
+ tsp-1.5.3.dist-info/top_level.txt,sha256=7tOR6y7BarphfWD2D7QFi_3F1jxagUZpHG8zwJIw4ck,30
86
+ tsp-1.5.3.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.38.4)
2
+ Generator: bdist_wheel (0.40.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
File without changes