tsp 1.7.7__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.
Files changed (92) hide show
  1. tsp/__init__.py +11 -11
  2. tsp/__meta__.py +1 -1
  3. tsp/concatenation.py +153 -0
  4. tsp/core.py +1162 -1035
  5. tsp/data/2023-01-06_755-test-Dataset_2031-Constant_Over_Interval-Hourly-Ground_Temperature-Thermistor_Automated.timeserie.csv +4 -4
  6. tsp/data/2023-01-06_755-test.metadata.txt +208 -208
  7. tsp/data/NTGS_example_csv.csv +6 -6
  8. tsp/data/NTGS_example_slash_dates.csv +6 -6
  9. tsp/data/example_geotop.csv +5240 -5240
  10. tsp/data/example_gtnp.csv +1298 -1298
  11. tsp/data/example_permos.csv +7 -7
  12. tsp/data/test_geotop_has_space.txt +5 -5
  13. tsp/dataloggers/AbstractReader.py +43 -43
  14. tsp/dataloggers/FG2.py +110 -110
  15. tsp/dataloggers/GP5W.py +114 -114
  16. tsp/dataloggers/Geoprecision.py +34 -34
  17. tsp/dataloggers/HOBO.py +914 -914
  18. tsp/dataloggers/RBRXL800.py +190 -190
  19. tsp/dataloggers/RBRXR420.py +308 -308
  20. tsp/dataloggers/__init__.py +15 -15
  21. tsp/dataloggers/logr.py +115 -115
  22. tsp/dataloggers/test_files/004448.DAT +2543 -2543
  23. tsp/dataloggers/test_files/004531.DAT +17106 -17106
  24. tsp/dataloggers/test_files/004531.HEX +3587 -3587
  25. tsp/dataloggers/test_files/004534.HEX +3587 -3587
  26. tsp/dataloggers/test_files/010252.dat +1731 -1731
  27. tsp/dataloggers/test_files/010252.hex +1739 -1739
  28. tsp/dataloggers/test_files/010274.hex +1291 -1291
  29. tsp/dataloggers/test_files/010278.hex +3544 -3544
  30. tsp/dataloggers/test_files/012064.dat +1286 -1286
  31. tsp/dataloggers/test_files/012064.hex +1294 -1294
  32. tsp/dataloggers/test_files/012081.hex +3532 -3532
  33. tsp/dataloggers/test_files/07B1592.DAT +1483 -1483
  34. tsp/dataloggers/test_files/07B1592.HEX +1806 -1806
  35. tsp/dataloggers/test_files/07B4450.DAT +2234 -2234
  36. tsp/dataloggers/test_files/07B4450.HEX +2559 -2559
  37. tsp/dataloggers/test_files/FG2_399.csv +9881 -9881
  38. tsp/dataloggers/test_files/GP5W.csv +1121 -1121
  39. tsp/dataloggers/test_files/GP5W_260.csv +1884 -1884
  40. tsp/dataloggers/test_files/GP5W_270.csv +2210 -2210
  41. tsp/dataloggers/test_files/H08-030-08_HOBOware.csv +998 -998
  42. tsp/dataloggers/test_files/RBR_01.dat +1046 -1046
  43. tsp/dataloggers/test_files/RBR_02.dat +2426 -2426
  44. tsp/dataloggers/test_files/RSTDT2055.csv +2152 -2152
  45. tsp/dataloggers/test_files/U23-001_HOBOware.csv +1001 -1001
  46. tsp/dataloggers/test_files/hobo-negative-2.txt +6396 -6396
  47. tsp/dataloggers/test_files/hobo-negative-3.txt +5593 -5593
  48. tsp/dataloggers/test_files/hobo-positive-number-1.txt +1000 -1000
  49. tsp/dataloggers/test_files/hobo-positive-number-2.csv +1003 -1003
  50. tsp/dataloggers/test_files/hobo-positive-number-3.csv +1133 -1133
  51. tsp/dataloggers/test_files/hobo-positive-number-4.csv +1209 -1209
  52. tsp/dataloggers/test_files/hobo2.csv +8702 -8702
  53. tsp/dataloggers/test_files/hobo_1_AB.csv +21732 -21732
  54. tsp/dataloggers/test_files/hobo_1_AB_Details.txt +133 -133
  55. tsp/dataloggers/test_files/hobo_1_AB_classic.csv +4373 -4373
  56. tsp/dataloggers/test_files/hobo_1_AB_defaults.csv +21732 -21732
  57. tsp/dataloggers/test_files/hobo_1_AB_minimal.txt +1358 -1358
  58. tsp/dataloggers/test_files/hobo_1_AB_var2.csv +3189 -3189
  59. tsp/dataloggers/test_files/hobo_1_AB_var3.csv +2458 -2458
  60. tsp/dataloggers/test_files/logR_ULogC16-32_1.csv +106 -106
  61. tsp/dataloggers/test_files/logR_ULogC16-32_2.csv +100 -100
  62. tsp/dataloggers/test_files/mon_3_Ta_2010-08-18_2013-02-08.txt +21724 -21724
  63. tsp/dataloggers/test_files/rbr_001.dat +1133 -1133
  64. tsp/dataloggers/test_files/rbr_001.hex +1139 -1139
  65. tsp/dataloggers/test_files/rbr_001_no_comment.dat +1132 -1132
  66. tsp/dataloggers/test_files/rbr_001_no_comment.hex +1138 -1138
  67. tsp/dataloggers/test_files/rbr_002.dat +1179 -1179
  68. tsp/dataloggers/test_files/rbr_002.hex +1185 -1185
  69. tsp/dataloggers/test_files/rbr_003.hex +1292 -1292
  70. tsp/dataloggers/test_files/rbr_003.xls +0 -0
  71. tsp/dataloggers/test_files/rbr_xl_001.DAT +1105 -1105
  72. tsp/dataloggers/test_files/rbr_xl_002.DAT +1126 -1126
  73. tsp/dataloggers/test_files/rbr_xl_003.DAT +4622 -4622
  74. tsp/dataloggers/test_files/rbr_xl_003.HEX +3587 -3587
  75. tsp/gtnp.py +148 -148
  76. tsp/labels.py +3 -3
  77. tsp/misc.py +90 -90
  78. tsp/physics.py +101 -101
  79. tsp/plots/static.py +373 -373
  80. tsp/readers.py +548 -548
  81. tsp/time.py +45 -45
  82. tsp/tspwarnings.py +14 -14
  83. tsp/utils.py +101 -101
  84. tsp/version.py +1 -1
  85. {tsp-1.7.7.dist-info → tsp-1.8.1.dist-info}/METADATA +30 -23
  86. tsp-1.8.1.dist-info/RECORD +94 -0
  87. {tsp-1.7.7.dist-info → tsp-1.8.1.dist-info}/WHEEL +5 -5
  88. {tsp-1.7.7.dist-info → tsp-1.8.1.dist-info/licenses}/LICENSE +674 -674
  89. tsp/dataloggers/test_files/CSc_CR1000_1.dat +0 -295
  90. tsp/scratch.py +0 -6
  91. tsp-1.7.7.dist-info/RECORD +0 -95
  92. {tsp-1.7.7.dist-info → tsp-1.8.1.dist-info}/top_level.txt +0 -0
tsp/time.py CHANGED
@@ -1,46 +1,46 @@
1
- import re
2
- from datetime import datetime, tzinfo
3
-
4
- from typing import Union
5
-
6
-
7
- def get_utc_offset(offset: "Union[str,int]") -> int:
8
- """Get the UTC offset in seconds from a string or integer"""
9
-
10
- if isinstance(offset, str):
11
- if offset.lower() == "utc" or (offset.lower() == "z"):
12
- return 0
13
-
14
- pattern = re.compile(r"([+-]?)(\d{2}):(\d{2})")
15
- match = pattern.match(offset)
16
-
17
- if not match:
18
- raise ValueError("Offset must be a string in the format '+HH:MM' or '-HH:MM'")
19
-
20
- sign = match.group(1)
21
- hours = int(match.group(2))
22
- minutes = int(match.group(3))
23
- utc_offset = (hours*60 + minutes)*60
24
- if sign == "-":
25
- utc_offset *= -1
26
-
27
- elif isinstance(offset, int):
28
- utc_offset = offset
29
-
30
- else:
31
- raise ValueError("Offset must be a string in the format '+HH:MM' or '-HH:MM' or an integer in seconds")
32
-
33
- return utc_offset
34
-
35
-
36
- def format_utc_offset(offset: tzinfo) -> str:
37
- """Format a UTC offset as a string in the format '+HH:MM' or '-HH:MM'"""
38
- utc_offset = offset.utcoffset(datetime.now()).total_seconds()
39
- sign = "-" if utc_offset < 0 else "+"
40
- hours = int(abs(utc_offset)//3600)
41
- minutes = int(abs(utc_offset)%3600/60)
42
-
43
- if hours == 0 and minutes == 0:
44
- return "UTC"
45
-
1
+ import re
2
+ from datetime import datetime, tzinfo
3
+
4
+ from typing import Union
5
+
6
+
7
+ def get_utc_offset(offset: "Union[str,int]") -> int:
8
+ """Get the UTC offset in seconds from a string or integer"""
9
+
10
+ if isinstance(offset, str):
11
+ if offset.lower() == "utc" or (offset.lower() == "z"):
12
+ return 0
13
+
14
+ pattern = re.compile(r"([+-]?)(\d{2}):(\d{2})")
15
+ match = pattern.match(offset)
16
+
17
+ if not match:
18
+ raise ValueError("Offset must be a string in the format '+HH:MM' or '-HH:MM'")
19
+
20
+ sign = match.group(1)
21
+ hours = int(match.group(2))
22
+ minutes = int(match.group(3))
23
+ utc_offset = (hours*60 + minutes)*60
24
+ if sign == "-":
25
+ utc_offset *= -1
26
+
27
+ elif isinstance(offset, int):
28
+ utc_offset = offset
29
+
30
+ else:
31
+ raise ValueError("Offset must be a string in the format '+HH:MM' or '-HH:MM' or an integer in seconds")
32
+
33
+ return utc_offset
34
+
35
+
36
+ def format_utc_offset(offset: tzinfo) -> str:
37
+ """Format a UTC offset as a string in the format '+HH:MM' or '-HH:MM'"""
38
+ utc_offset = offset.utcoffset(datetime.now()).total_seconds()
39
+ sign = "-" if utc_offset < 0 else "+"
40
+ hours = int(abs(utc_offset)//3600)
41
+ minutes = int(abs(utc_offset)%3600/60)
42
+
43
+ if hours == 0 and minutes == 0:
44
+ return "UTC"
45
+
46
46
  return f"{sign}{hours:02d}:{minutes:02d}"
tsp/tspwarnings.py CHANGED
@@ -1,15 +1,15 @@
1
- import numpy as np
2
-
3
-
4
- class DuplicateTimesWarning(UserWarning):
5
- """For when duplicate times are found in a file."""
6
- def __init__(self, times):
7
- self.times = times
8
-
9
- def _msg(self, times) -> str:
10
- m = f"Duplicate timestamps found: {times[np.where(times.duplicated())[0]]}. That's bad."
11
- return m
12
-
13
- def __str__(self):
14
- return self._msg(self.times)
1
+ import numpy as np
2
+
3
+
4
+ class DuplicateTimesWarning(UserWarning):
5
+ """For when duplicate times are found in a file."""
6
+ def __init__(self, times):
7
+ self.times = times
8
+
9
+ def _msg(self, times) -> str:
10
+ m = f"Duplicate timestamps found: {times[np.where(times.duplicated())[0]]}. That's bad."
11
+ return m
12
+
13
+ def __str__(self):
14
+ return self._msg(self.times)
15
15
 
tsp/utils.py CHANGED
@@ -1,101 +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
+ 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
tsp/version.py CHANGED
@@ -1 +1 @@
1
- version="1.7.7"
1
+ version="1.8.1"
@@ -1,12 +1,10 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: tsp
3
- Version: 1.7.7
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
7
7
  Author-email: nick.brown@carleton.ca
8
- License: UNKNOWN
9
- Platform: UNKNOWN
10
8
  Classifier: Development Status :: 4 - Beta
11
9
  Classifier: Intended Audience :: Developers
12
10
  Classifier: License :: OSI Approved :: GNU General Public License (GPL)
@@ -14,31 +12,42 @@ Classifier: Operating System :: POSIX
14
12
  Classifier: Programming Language :: Python
15
13
  Classifier: Topic :: Software Development :: Libraries
16
14
  Description-Content-Type: text/markdown
15
+ License-File: LICENSE
17
16
  Requires-Dist: pandas
18
17
  Requires-Dist: numpy
19
18
  Requires-Dist: regex
20
19
  Requires-Dist: matplotlib
21
20
  Requires-Dist: setuptools
22
- Provides-Extra: dev
23
- Requires-Dist: manuel ; extra == 'dev'
24
- Requires-Dist: pytest ; extra == 'dev'
25
- Requires-Dist: pytest-cov ; extra == 'dev'
26
- Requires-Dist: coverage ; extra == 'dev'
27
- Requires-Dist: mock ; extra == 'dev'
28
- Provides-Extra: full
29
- Requires-Dist: scipy ; extra == 'full'
30
- Requires-Dist: pfit (==0.2.1) ; extra == 'full'
31
- Requires-Dist: openpyxl ; extra == 'full'
32
- Requires-Dist: pyrsktools ; extra == 'full'
33
- Requires-Dist: netCDF4 ; extra == 'full'
34
21
  Provides-Extra: nc
35
- Requires-Dist: netCDF4 ; extra == 'nc'
36
- Requires-Dist: pfit (==0.2.1) ; extra == 'nc'
22
+ Requires-Dist: netCDF4; extra == "nc"
23
+ Requires-Dist: pfit==0.2.1; extra == "nc"
37
24
  Provides-Extra: plotting
38
- Requires-Dist: scipy ; extra == 'plotting'
25
+ Requires-Dist: scipy; extra == "plotting"
39
26
  Provides-Extra: rbr
40
- Requires-Dist: pyrsktools ; extra == 'rbr'
41
- Requires-Dist: openpyxl ; extra == 'rbr'
27
+ Requires-Dist: pyrsktools; extra == "rbr"
28
+ Requires-Dist: openpyxl; extra == "rbr"
29
+ Provides-Extra: full
30
+ Requires-Dist: scipy; extra == "full"
31
+ Requires-Dist: pfit==0.2.1; extra == "full"
32
+ Requires-Dist: netCDF4; extra == "full"
33
+ Requires-Dist: pyrsktools; extra == "full"
34
+ Requires-Dist: openpyxl; extra == "full"
35
+ Provides-Extra: dev
36
+ Requires-Dist: manuel; extra == "dev"
37
+ Requires-Dist: pytest; extra == "dev"
38
+ Requires-Dist: pytest-cov; extra == "dev"
39
+ Requires-Dist: coverage; extra == "dev"
40
+ Requires-Dist: mock; extra == "dev"
41
+ Dynamic: author
42
+ Dynamic: author-email
43
+ Dynamic: classifier
44
+ Dynamic: description
45
+ Dynamic: description-content-type
46
+ Dynamic: home-page
47
+ Dynamic: license-file
48
+ Dynamic: provides-extra
49
+ Dynamic: requires-dist
50
+ Dynamic: summary
42
51
 
43
52
  # Teaspoon
44
53
 
@@ -75,5 +84,3 @@ Requires-Dist: openpyxl ; extra == 'rbr'
75
84
  If you find this software helpful, please consider using the following citation:
76
85
 
77
86
  > Brown, N., (2022). tsp ("Teaspoon"): A library for ground temperature data. Journal of Open Source Software, 7(77), 4704, [https://doi.org/10.21105/joss.04704](https://doi.org/10.21105/joss.04704)
78
-
79
-
@@ -0,0 +1,94 @@
1
+ tsp/__init__.py,sha256=V_rDl4XxSRtbFWK7KFZJkKqwjqwLREvlnVc7BCGjHaw,427
2
+ tsp/__meta__.py,sha256=tX7kLpRWOrz5cd1yN8hSxvnQEMfxFz00EFtGKA45M4k,93
3
+ tsp/concatenation.py,sha256=XK-5ec_IrlIVShp9eqd5QVg1yDgk3ysPFzeJpo2G2gc,5990
4
+ tsp/core.py,sha256=bRsX_qs7cGJtxe40V50TYulAMWaIzUj1EtQcVD56jtY,39915
5
+ tsp/gtnp.py,sha256=cFFSOVzudEkxqtXSMnsVE7clVoXFH0Gb8ES-Cx_iwUU,4269
6
+ tsp/labels.py,sha256=URV4zxfur6aYojdra7KGTipFdiN9pAOCEVvkcc2pj-Q,78
7
+ tsp/misc.py,sha256=y0NvW5jOlli5s220QnaLYTOadSlj3Lyu-EE-RsoSbok,2614
8
+ tsp/physics.py,sha256=hgVOGU0Bj1g-gxBNhLEl7Gm3VXJKIHHu35uPvgVMOxE,2699
9
+ tsp/readers.py,sha256=1rPcS9eRpkGPWU6MsSrgiMh2QCKvAAY5_KiTQMMcsxk,18464
10
+ tsp/time.py,sha256=82h7nxM-iXs2XwetF-alLtNvUm0qRtAA111gTMp5SY4,1379
11
+ tsp/tspwarnings.py,sha256=AGCmSlwM3JbnrEZSbyBKLnyQkKygsKU_YYbte4iZsK8,399
12
+ tsp/utils.py,sha256=sOJSZLmfv7sh4X971_gNgtZvXtS8ZwGmUdqnUybcVE4,2932
13
+ tsp/version.py,sha256=FS-CnweGXSAhfq0K-UkXsGZu941kSK-J2gYMkcnFVAI,15
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
+ tsp/data/2023-01-06_755-test.metadata.txt,sha256=Ux1YGqmAmRQmMIqqK8-OloQXflg4Y45FRwdT-WgCg8c,5686
16
+ tsp/data/NTGS_example_csv.csv,sha256=OirFmLRqj7TUYfAUHqKbZFSqQ-g3I13QwUfUzgiJ-h4,554
17
+ tsp/data/NTGS_example_slash_dates.csv,sha256=RzeYXsGnOnmLqgrpeCr9pGi-ncaJSJKrsYvI5sf6xqo,554
18
+ tsp/data/example_geotop.csv,sha256=rgVP7_tGEvUtn1K_KI98VVgm275D7qt8YegKMe3Vjw4,262289
19
+ tsp/data/example_gtnp.csv,sha256=E5km06-cWlWMwzF-Qo7v0ZrlAvCTpyWIKY6hpzln4sc,191812
20
+ tsp/data/example_permos.csv,sha256=tz-Z4A9x3Uc8Dym65Roto95X_bgSUySC9wJrUnGVBPE,797
21
+ tsp/data/test_geotop_has_space.txt,sha256=BaloXQVxyPD7LLeI6YCnHsR3pjA_BZsHYH9OeW57cC4,203
22
+ tsp/dataloggers/AbstractReader.py,sha256=YsmESWrmH2jdL-Oli9pwjaFmPCEfJxjm4wx16FoRxpY,1777
23
+ tsp/dataloggers/FG2.py,sha256=kvfjMQtoSs5ZzV7hc1lJ_SaDuSOOTONfI_nw2VaihO8,3281
24
+ tsp/dataloggers/GP5W.py,sha256=dJ7I-P4_bIDDGb9zIdOf9vbxbxlcT3ZJ09HKLfRA6a0,3312
25
+ tsp/dataloggers/Geoprecision.py,sha256=pDljZDasj7PNdiI5lOEpHZ9n7CZJ1aGlX96rN4cuPHI,916
26
+ tsp/dataloggers/HOBO.py,sha256=xr5PvdMh_AO4CSsqdGLvtdVgfphc91Nl34Qs-AiP-wQ,33472
27
+ tsp/dataloggers/RBRXL800.py,sha256=NjS6g_-grnC8BmLLW7qUppeOBYAOUJODNR-GwahnI7Y,8538
28
+ tsp/dataloggers/RBRXR420.py,sha256=SH9tLLbosuDYRm06n9H7FsY9TUwaTqyS17B9ybXiq_c,14011
29
+ tsp/dataloggers/__init__.py,sha256=4QcIctP5hoVfraU3PwhkTIca-4JIWH9u6-j4CQWoW1g,410
30
+ tsp/dataloggers/logr.py,sha256=4IaqP6debop3QYnKWAyCzRxgve25txcr1itmtCciKkY,2665
31
+ tsp/dataloggers/test_files/004448.DAT,sha256=1eJg5PtOrwlbzitp1XB5uE64ksqQHIIjTNgKIDn7zkI,201018
32
+ tsp/dataloggers/test_files/004531.DAT,sha256=8Pag_PnR-3dK4rhr7os6kyQXVe8i1N5w1_ACefT9G4s,331292
33
+ tsp/dataloggers/test_files/004531.HEX,sha256=0qJio9SvecR2MS4-nkjcZwqLh8h0sKdB6js_6yKqy5k,118535
34
+ tsp/dataloggers/test_files/004534.HEX,sha256=cWMHCZ7JOu08RM2sjqay2aZiud35LY7NSsmBhjheGRI,118531
35
+ tsp/dataloggers/test_files/010252.dat,sha256=_f9rvVq6U3ms3YQlN05doiy46PaNwqjeDlVCZK9NeU0,171935
36
+ tsp/dataloggers/test_files/010252.hex,sha256=3o-A8c7v-KyQr0OR1CftJW1e7c6tyvY16MsZb_s0N74,84712
37
+ tsp/dataloggers/test_files/010274.hex,sha256=4nB6jBzsP3XsraXZ_87IZZbZCqLQRtWcQ2mvR4R1c0I,62720
38
+ tsp/dataloggers/test_files/010278.hex,sha256=8IOkmg1EC5mTj6vLECc9_t-Nb66Yp_dxcFCs6YzkCqo,173117
39
+ tsp/dataloggers/test_files/012064.dat,sha256=LgwK9p0uzV0f7Gt1kIJWQSZWmG25i3vOJmTaG2jQ9gM,127062
40
+ tsp/dataloggers/test_files/012064.hex,sha256=O2VReAh3xW-Rg-z8EJ0cR7aoVqvEfL6TpPkt5FXfagY,62921
41
+ tsp/dataloggers/test_files/012081.hex,sha256=MwCQT5VLWiUVCmQGlzAMjZMwvdKolPAgtIIIvB2Z4sU,172576
42
+ tsp/dataloggers/test_files/062834_20220904_2351.rsk,sha256=2DJa-wnrms1N_fJ9QmvcNFH5JMIBdBhcb-nXtUMp70k,1007616
43
+ tsp/dataloggers/test_files/062834_20220904_2351.xlsx,sha256=z2sE1P--zcQJ1FoVJu43kXoxs1wIhwXGBukwzt1nIbc,308908
44
+ tsp/dataloggers/test_files/07B1592.DAT,sha256=KalPKVVgzKTJrVQU8_3pmIJbEV1QJgXDUcJVwHnyYrY,107655
45
+ tsp/dataloggers/test_files/07B1592.HEX,sha256=Eav6F_ExQ7qfg-mBMkZqrsASgWLM1RafNW43o8H4vEE,59683
46
+ tsp/dataloggers/test_files/07B4450.DAT,sha256=1CpQviX4xhtkXL6wHENMmNvmJNarOAm6UcGL2G4AMZ8,162502
47
+ tsp/dataloggers/test_files/07B4450.HEX,sha256=MyjYMf9EwWi7c91JwrNd4n0cPyAYZT1w719MygMQWO4,84576
48
+ tsp/dataloggers/test_files/FG2_399.csv,sha256=Uonw_fFY3TUZ1O-XFtjRrV1yLr2iqUyBOlJM_wdZQGA,648322
49
+ tsp/dataloggers/test_files/GP5W.csv,sha256=2mQl3YfzFVtvi3pdkEfyw9Cam3TzeHqAMnY06JSU6co,36948
50
+ tsp/dataloggers/test_files/GP5W_260.csv,sha256=AbLBA12XLQLlNXpvht7Jy_DrvCUqhC1cQdFGnNYVXg0,68696
51
+ tsp/dataloggers/test_files/GP5W_270.csv,sha256=ApqjqasC9eu1Na9R-tUrF-4S4vG-iq3trAhuVKjOaFY,147550
52
+ tsp/dataloggers/test_files/H08-030-08_HOBOware.csv,sha256=uih-ZCFZRN9IF69RRVElvHfMGnaQ2-INljAsg_1x0BM,37920
53
+ tsp/dataloggers/test_files/RBR_01.dat,sha256=TAZxbVzZTEWoOAizBPgTHWyk01Ca6VVv7yU6NzUaFlU,82735
54
+ tsp/dataloggers/test_files/RBR_02.dat,sha256=xT8Q0F5D2wc2fxet1E7_dbb-BRbKK4rqT9bd6wInxEM,242142
55
+ tsp/dataloggers/test_files/RSTDT2055.csv,sha256=iB8Zx6BeQWKsrsvjlfhVwL3L0MdX-C0hPZ41DVEZuXU,470085
56
+ tsp/dataloggers/test_files/U23-001_HOBOware.csv,sha256=drFWVSYpTJxA9KMkdMoSnGJu1ibyWYBxtiSjhuzS4Hc,55854
57
+ tsp/dataloggers/test_files/hobo-negative-2.txt,sha256=hrPyh3YLz0AM4_g3mUSrPCvnuBWrturUlO3QbRnunYg,247057
58
+ tsp/dataloggers/test_files/hobo-negative-3.txt,sha256=H3AL-rLoF4BzKTC_cRTQxwARgAO541Vzp3tIizkr4zo,221034
59
+ tsp/dataloggers/test_files/hobo-positive-number-1.txt,sha256=IMIeeYa97NYq6cedWE9A0CkVJJAUNhpqkBfB8ktTmhU,36089
60
+ tsp/dataloggers/test_files/hobo-positive-number-2.csv,sha256=cwilKoPUCWR8k3cjK5SEKN9-QphFCHEmB-9CU-oQyQk,38331
61
+ tsp/dataloggers/test_files/hobo-positive-number-3.csv,sha256=syAQN7iU0KOVwBJDBO22K39W6exP8kDNGzxqpGwh6UQ,47776
62
+ tsp/dataloggers/test_files/hobo-positive-number-4.csv,sha256=0yg4uXthPDphZ5hEN5wZtjgV7QDtf0ApCsvcshnnh24,53444
63
+ tsp/dataloggers/test_files/hobo2.csv,sha256=RQZxaoKhexPPnwsDVm_vO5D6_g_yZ_pO2DodyinEQcA,531384
64
+ tsp/dataloggers/test_files/hobo_1_AB.config.json,sha256=Kmw1NFtrOASK-w2eqEtAOwFr4SY8Bf2LS8FITgpr1AE,408
65
+ tsp/dataloggers/test_files/hobo_1_AB.csv,sha256=LATTuvuhjv7A2FRK27ZZJyNJMairz3gb95NswGr8BZc,958834
66
+ tsp/dataloggers/test_files/hobo_1_AB_Details.txt,sha256=7hVLFp4FmastfM4BeByvjI-bst3jQsLaxR7V_8wIZrc,4333
67
+ tsp/dataloggers/test_files/hobo_1_AB_classic.csv,sha256=OBpUrCs2X59rLdoa6LII5lScN3k4TBfstgu8UmRGw6E,168846
68
+ tsp/dataloggers/test_files/hobo_1_AB_defaults.csv,sha256=7Xy43B5mln9WrvIQG7fNSXsFLIZy8E50rnAQXGsuW1s,987910
69
+ tsp/dataloggers/test_files/hobo_1_AB_minimal.txt,sha256=od_uIEWzk383rgAJ_LqXjplMICfY1kZ4Ly9qLOWyZQE,48977
70
+ tsp/dataloggers/test_files/hobo_1_AB_raw.hobo,sha256=0YYlDKQZCNkR1K6UiPAnsuZycmT4pxeDrhOSi4Fflm0,65536
71
+ tsp/dataloggers/test_files/hobo_1_AB_var2.csv,sha256=GfKmzq-QVLZq42ka7mX5cLCXrXyyZc71pI5b2qlTvbw,142070
72
+ tsp/dataloggers/test_files/hobo_1_AB_var3.csv,sha256=xwtPv3llA-LReippxcOUE20cBb_DBLJz_vOX0kd5tkY,92381
73
+ tsp/dataloggers/test_files/logR_ULogC16-32_1.csv,sha256=0HcCjf_jEBDpgpyTqiJC1oIoJsnt5Qdk4qV_s_KfuTQ,21966
74
+ tsp/dataloggers/test_files/logR_ULogC16-32_2.csv,sha256=MU58RvTSwFrhJIbaKPSSKf51tPyZC9_ZXgPCCfk9p4M,19066
75
+ tsp/dataloggers/test_files/mon_3_Ta_2010-08-18_2013-02-08.txt,sha256=Sqv23n-r1KLLdSsjjVeDvS-sX061Ivklhv5sDwRMwpA,734009
76
+ tsp/dataloggers/test_files/rbr_001.dat,sha256=pS1QV_he33ccbfUpZMWm54AYDekez5us4MxS917wh0g,111570
77
+ tsp/dataloggers/test_files/rbr_001.hex,sha256=HNrSlP05Y2LUqtvlzX_5O7rQrTGItUlZpMswra-dJpc,55293
78
+ tsp/dataloggers/test_files/rbr_001_no_comment.dat,sha256=s_-tc-ShQfYqc4ObMh35xr8tQBHDxwjuBLDftX6Pc9U,111547
79
+ tsp/dataloggers/test_files/rbr_001_no_comment.hex,sha256=HKG-sl7kw1A_Z3melKKT2xgVEAayv2fvCKzCFNM4LXA,55270
80
+ tsp/dataloggers/test_files/rbr_002.dat,sha256=tUIX8InqQHObWzDVZrv1vTmY02zpIeepbKDpv4p5cpA,93525
81
+ tsp/dataloggers/test_files/rbr_002.hex,sha256=W29e__jot7deVVC2XDtXwAgqfmvHzU7qi-7yQb4_mz0,57536
82
+ tsp/dataloggers/test_files/rbr_003.hex,sha256=cjUaYWGm39WthiPvdzQKaOQ5FEKj3U9rCIe_0my7v2M,62703
83
+ tsp/dataloggers/test_files/rbr_003.xls,sha256=PRxsKD88dTQEYOqz5z1FrkPox1jCkYyiBBZK0Kg-7tQ,263680
84
+ tsp/dataloggers/test_files/rbr_xl_001.DAT,sha256=yZXKaClXMtYWDCs1cD2xTVdGj6LBMLKSjKnTgB4qPio,80057
85
+ tsp/dataloggers/test_files/rbr_xl_002.DAT,sha256=JQNHL6X9z4Rp6IDqDBYx8vWsUU6oigl8nC23rMa3Enk,81601
86
+ tsp/dataloggers/test_files/rbr_xl_003.DAT,sha256=ZEKheCvB1CiubY2kMngigY0NNhWTYAiC_hmQhzODPYw,221656
87
+ tsp/dataloggers/test_files/rbr_xl_003.HEX,sha256=sunCD5C1t8l5y4p1b9iiHNsZUznYIuBLz4uwoGkZh3E,118459
88
+ tsp/plots/__init__.py,sha256=i5AhpNwyuT6il7uk2Vtc4YBjVnZ0ifvHNXw19rvDtsM,71
89
+ tsp/plots/static.py,sha256=pvLFM3_HuRgnPMe7smxj9v65zcM3JLsCvhhwGgdt5Uk,13836
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,,
@@ -1,5 +1,5 @@
1
- Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.35.1)
3
- Root-Is-Purelib: true
4
- Tag: py3-none-any
5
-
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (80.9.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+