tsp 1.8.1__py3-none-any.whl → 1.10.2__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 (127) hide show
  1. tsp/__init__.py +11 -11
  2. tsp/__meta__.py +1 -1
  3. tsp/concatenation.py +159 -153
  4. tsp/core.py +1306 -1162
  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/NTGS_gtr_example_excel.xlsx +0 -0
  10. tsp/data/example_geotop.csv +5240 -5240
  11. tsp/data/example_gtnp.csv +1298 -1298
  12. tsp/data/example_permos.csv +7 -7
  13. tsp/data/ntgs-db-multi.txt +3872 -0
  14. tsp/data/ntgs-db-single.txt +2251 -0
  15. tsp/data/test_geotop_has_space.txt +5 -5
  16. tsp/data/tsp_format_long.csv +10 -0
  17. tsp/data/tsp_format_wide_1.csv +7 -0
  18. tsp/data/tsp_format_wide_2.csv +7 -0
  19. tsp/dataloggers/AbstractReader.py +43 -43
  20. tsp/dataloggers/FG2.py +110 -110
  21. tsp/dataloggers/GP5W.py +114 -114
  22. tsp/dataloggers/Geoprecision.py +34 -34
  23. tsp/dataloggers/HOBO.py +930 -914
  24. tsp/dataloggers/RBRXL800.py +190 -190
  25. tsp/dataloggers/RBRXR420.py +371 -308
  26. tsp/dataloggers/Vemco.py +84 -0
  27. tsp/dataloggers/__init__.py +15 -15
  28. tsp/dataloggers/logr.py +196 -115
  29. tsp/dataloggers/test_files/004448.DAT +2543 -2543
  30. tsp/dataloggers/test_files/004531.DAT +17106 -17106
  31. tsp/dataloggers/test_files/004531.HEX +3587 -3587
  32. tsp/dataloggers/test_files/004534.HEX +3587 -3587
  33. tsp/dataloggers/test_files/010252.dat +1731 -1731
  34. tsp/dataloggers/test_files/010252.hex +1739 -1739
  35. tsp/dataloggers/test_files/010274.hex +1291 -1291
  36. tsp/dataloggers/test_files/010278.hex +3544 -3544
  37. tsp/dataloggers/test_files/012064.dat +1286 -1286
  38. tsp/dataloggers/test_files/012064.hex +1294 -1294
  39. tsp/dataloggers/test_files/012064_modified_start.hex +1294 -0
  40. tsp/dataloggers/test_files/012081.hex +3532 -3532
  41. tsp/dataloggers/test_files/013138_recovery_stamp.hex +1123 -0
  42. tsp/dataloggers/test_files/014037-2007.hex +95 -0
  43. tsp/dataloggers/test_files/019360_20160918_1146_SlumpIslandTopofHill.hex +11253 -0
  44. tsp/dataloggers/test_files/019360_20160918_1146_SlumpIslandTopofHill.xls +0 -0
  45. tsp/dataloggers/test_files/07B1592.DAT +1483 -1483
  46. tsp/dataloggers/test_files/07B1592.HEX +1806 -1806
  47. tsp/dataloggers/test_files/07B4450.DAT +2234 -2234
  48. tsp/dataloggers/test_files/07B4450.HEX +2559 -2559
  49. tsp/dataloggers/test_files/2022018_2025-09-18T22-16-16.txt +36 -0
  50. tsp/dataloggers/test_files/2022018_2025-09-18T22-16-16_raw.csv +2074 -0
  51. tsp/dataloggers/test_files/2022018_2025-09-18T22-16-16_temp.csv +2074 -0
  52. tsp/dataloggers/test_files/2025004_2025-12-02T17-07-28_cfg.txt +30 -0
  53. tsp/dataloggers/test_files/2025004_2025-12-02T17-07-28_raw.csv +35 -0
  54. tsp/dataloggers/test_files/2025004_2025-12-02T17-07-28_temp.csv +35 -0
  55. tsp/dataloggers/test_files/204087.xlsx +0 -0
  56. tsp/dataloggers/test_files/Asc-1455As02.000 +2982 -0
  57. tsp/dataloggers/test_files/Asc-1456As02.000 +2992 -0
  58. tsp/dataloggers/test_files/Asc-1457As02.000 +2917 -0
  59. tsp/dataloggers/test_files/BGC_BH15_019362_20140610_1253.hex +1729 -0
  60. tsp/dataloggers/test_files/Bin2944.csv +759 -0
  61. tsp/dataloggers/test_files/Bin5494.csv +2972 -0
  62. tsp/dataloggers/test_files/Bin6786.csv +272 -0
  63. tsp/dataloggers/test_files/FG2_399.csv +9881 -9881
  64. tsp/dataloggers/test_files/GP5W.csv +1121 -1121
  65. tsp/dataloggers/test_files/GP5W_260.csv +1884 -1884
  66. tsp/dataloggers/test_files/GP5W_270.csv +2210 -2210
  67. tsp/dataloggers/test_files/H08-030-08_HOBOware.csv +998 -998
  68. tsp/dataloggers/test_files/Minilog-II-T_350763_20190711_1.csv +2075 -0
  69. tsp/dataloggers/test_files/Minilog-II-T_350769_20190921_1.csv +6384 -0
  70. tsp/dataloggers/test_files/Minilog-II-T_354284_20190921_1.csv +4712 -0
  71. tsp/dataloggers/test_files/Minilog-T_7943_20140920_1.csv +5826 -0
  72. tsp/dataloggers/test_files/Minilog-T_8979_20140806_1.csv +2954 -0
  73. tsp/dataloggers/test_files/Minilog-T_975_20110824_1.csv +4343 -0
  74. tsp/dataloggers/test_files/RBR_01.dat +1046 -1046
  75. tsp/dataloggers/test_files/RBR_02.dat +2426 -2426
  76. tsp/dataloggers/test_files/RI03b_062831_20240905_1801.rsk +0 -0
  77. tsp/dataloggers/test_files/RI03b_062831_20240905_1801.xlsx +0 -0
  78. tsp/dataloggers/test_files/RSTDT2055.csv +2152 -2152
  79. tsp/dataloggers/test_files/U23-001_HOBOware.csv +1001 -1001
  80. tsp/dataloggers/test_files/hobo-negative-2.txt +6396 -6396
  81. tsp/dataloggers/test_files/hobo-negative-3.txt +5593 -5593
  82. tsp/dataloggers/test_files/hobo-positive-number-1.txt +1000 -1000
  83. tsp/dataloggers/test_files/hobo-positive-number-2.csv +1003 -1003
  84. tsp/dataloggers/test_files/hobo-positive-number-3.csv +1133 -1133
  85. tsp/dataloggers/test_files/hobo-positive-number-4.csv +1209 -1209
  86. tsp/dataloggers/test_files/hobo2.csv +8702 -8702
  87. tsp/dataloggers/test_files/hobo_1_AB.csv +21732 -21732
  88. tsp/dataloggers/test_files/hobo_1_AB_Details.txt +133 -133
  89. tsp/dataloggers/test_files/hobo_1_AB_classic.csv +4373 -4373
  90. tsp/dataloggers/test_files/hobo_1_AB_defaults.csv +21732 -21732
  91. tsp/dataloggers/test_files/hobo_1_AB_minimal.txt +1358 -1358
  92. tsp/dataloggers/test_files/hobo_1_AB_var2.csv +3189 -3189
  93. tsp/dataloggers/test_files/hobo_1_AB_var3.csv +2458 -2458
  94. tsp/dataloggers/test_files/logR_ULogC16-32_1.csv +106 -106
  95. tsp/dataloggers/test_files/logR_ULogC16-32_2.csv +100 -100
  96. tsp/dataloggers/test_files/mon_3_Ta_2010-08-18_2013-02-08.txt +21724 -21724
  97. tsp/dataloggers/test_files/rbr_001.dat +1133 -1133
  98. tsp/dataloggers/test_files/rbr_001.hex +1139 -1139
  99. tsp/dataloggers/test_files/rbr_001_no_comment.dat +1132 -1132
  100. tsp/dataloggers/test_files/rbr_001_no_comment.hex +1138 -1138
  101. tsp/dataloggers/test_files/rbr_002.dat +1179 -1179
  102. tsp/dataloggers/test_files/rbr_002.hex +1185 -1185
  103. tsp/dataloggers/test_files/rbr_003.hex +1292 -1292
  104. tsp/dataloggers/test_files/rbr_xl_001.DAT +1105 -1105
  105. tsp/dataloggers/test_files/rbr_xl_002.DAT +1126 -1126
  106. tsp/dataloggers/test_files/rbr_xl_003.DAT +4622 -4622
  107. tsp/dataloggers/test_files/rbr_xl_003.HEX +3587 -3587
  108. tsp/gtnp.py +148 -148
  109. tsp/labels.py +3 -3
  110. tsp/misc.py +90 -90
  111. tsp/physics.py +101 -101
  112. tsp/plots/static.py +388 -374
  113. tsp/readers.py +829 -548
  114. tsp/standardization/__init__.py +0 -0
  115. tsp/standardization/metadata.py +95 -0
  116. tsp/standardization/metadata_ref.py +0 -0
  117. tsp/standardization/validator.py +535 -0
  118. tsp/time.py +45 -45
  119. tsp/tspwarnings.py +27 -15
  120. tsp/utils.py +131 -101
  121. tsp/version.py +1 -1
  122. {tsp-1.8.1.dist-info → tsp-1.10.2.dist-info}/METADATA +95 -86
  123. tsp-1.10.2.dist-info/RECORD +132 -0
  124. {tsp-1.8.1.dist-info → tsp-1.10.2.dist-info}/licenses/LICENSE +674 -674
  125. {tsp-1.8.1.dist-info → tsp-1.10.2.dist-info}/top_level.txt +1 -0
  126. tsp-1.8.1.dist-info/RECORD +0 -94
  127. {tsp-1.8.1.dist-info → tsp-1.10.2.dist-info}/WHEEL +0 -0
tsp/physics.py CHANGED
@@ -1,101 +1,101 @@
1
- import numpy as np
2
- from typing import Optional
3
-
4
-
5
- def analytical_fourier(depths: "np.ndarray", times: "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
- """Create sinusoidal synthetic data for examples and testing
12
-
13
- Parameters
14
- ----------
15
- depths : np.ndarray
16
- array of depths in m
17
- times : np.ndarray
18
- array of times in seconds
19
- Q : Optional[float], optional
20
- Geothermal heat flux [W m-2], by default 0.2
21
- c : Optional[float], optional
22
- heat capacity [J m-3 K-1], by default 1.6e6
23
- k : Optional[float], optional
24
- thermal conductivity [W m-1 K-1], by default 2.5
25
- A : Optional[float], optional
26
- Amplitude of temperature fluctuation [C], by default 6
27
- MAGST : Optional[float], optional
28
- mean annual ground surface temperature [C], by default -0.5
29
-
30
- Returns
31
- -------
32
- TSP
33
- _description_
34
- """
35
- tau = 31536000 # [s]
36
- w = 2 * np.pi / tau # []
37
- alpha = k / c
38
-
39
- initial = initial_analytic(MAGST, Q, k, depths)
40
- initial = np.repeat(initial[np.newaxis, :], len(times), axis=0)
41
-
42
- T = initial + delta_analytic(A0=A, z=depths, w=w, alpha=alpha, t=times)
43
-
44
- return T
45
-
46
-
47
- def initial_analytic(MAGST:float, Q:float, k:float, z:np.ndarray) -> np.ndarray:
48
- """ Initial conditions for steady-state analytical temperature oscillation
49
-
50
- Parameters
51
- ----------
52
- MAGST : float
53
- mean annual ground surface temperature [C]
54
- Q : float
55
- Geothermal heat flux [W m-2]
56
- k : float
57
- thermal conductivity [W m-1 K-1]
58
- z : np.ndarray
59
- ordered list of depths [m]
60
-
61
- Returns
62
- -------
63
- np.ndarray
64
- initial temperature conditions [C]
65
-
66
- """
67
- z = np.atleast_1d(z)
68
- initial = MAGST - (Q / k) * -np.abs(sorted(z))
69
-
70
- return initial
71
-
72
-
73
- def delta_analytic(A0:float, z:np.ndarray, w:float, alpha:float, t:np.ndarray) -> np.ndarray:
74
- """ Analytical solution to heat conduction equation
75
-
76
- Parameters
77
- ----------
78
- A0 : float
79
- Amplitude of temperature fluctuation [C]
80
- z : np.ndarray
81
- depth [m]
82
- w : float
83
- period of temperature fluctuation [s]
84
- kappa : float
85
- thermal diffusivity [W m-1 K-1]
86
- t : np.ndarray
87
- time in seconds [s]
88
-
89
- Returns
90
- -------
91
- np.ndarray
92
- """
93
- nz = len(z)
94
- nt = len(t)
95
- z = np.repeat(np.atleast_1d(z)[np.newaxis, :], nt, axis=0)
96
- t = np.repeat(np.atleast_1d(t)[:, np.newaxis], nz, axis=1)
97
- S = np.sqrt(w / (2 * alpha))
98
- A = A0 * np.exp(-z * S)
99
- osc = np.cos(w * t - z * S)
100
-
101
- return A * osc
1
+ import numpy as np
2
+ from typing import Optional
3
+
4
+
5
+ def analytical_fourier(depths: "np.ndarray", times: "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
+ """Create sinusoidal synthetic data for examples and testing
12
+
13
+ Parameters
14
+ ----------
15
+ depths : np.ndarray
16
+ array of depths in m
17
+ times : np.ndarray
18
+ array of times in seconds
19
+ Q : Optional[float], optional
20
+ Geothermal heat flux [W m-2], by default 0.2
21
+ c : Optional[float], optional
22
+ heat capacity [J m-3 K-1], by default 1.6e6
23
+ k : Optional[float], optional
24
+ thermal conductivity [W m-1 K-1], by default 2.5
25
+ A : Optional[float], optional
26
+ Amplitude of temperature fluctuation [C], by default 6
27
+ MAGST : Optional[float], optional
28
+ mean annual ground surface temperature [C], by default -0.5
29
+
30
+ Returns
31
+ -------
32
+ TSP
33
+ _description_
34
+ """
35
+ tau = 31536000 # [s]
36
+ w = 2 * np.pi / tau # []
37
+ alpha = k / c
38
+
39
+ initial = initial_analytic(MAGST, Q, k, depths)
40
+ initial = np.repeat(initial[np.newaxis, :], len(times), axis=0)
41
+
42
+ T = initial + delta_analytic(A0=A, z=depths, w=w, alpha=alpha, t=times)
43
+
44
+ return T
45
+
46
+
47
+ def initial_analytic(MAGST:float, Q:float, k:float, z:np.ndarray) -> np.ndarray:
48
+ """ Initial conditions for steady-state analytical temperature oscillation
49
+
50
+ Parameters
51
+ ----------
52
+ MAGST : float
53
+ mean annual ground surface temperature [C]
54
+ Q : float
55
+ Geothermal heat flux [W m-2]
56
+ k : float
57
+ thermal conductivity [W m-1 K-1]
58
+ z : np.ndarray
59
+ ordered list of depths [m]
60
+
61
+ Returns
62
+ -------
63
+ np.ndarray
64
+ initial temperature conditions [C]
65
+
66
+ """
67
+ z = np.atleast_1d(z)
68
+ initial = MAGST - (Q / k) * -np.abs(sorted(z))
69
+
70
+ return initial
71
+
72
+
73
+ def delta_analytic(A0:float, z:np.ndarray, w:float, alpha:float, t:np.ndarray) -> np.ndarray:
74
+ """ Analytical solution to heat conduction equation
75
+
76
+ Parameters
77
+ ----------
78
+ A0 : float
79
+ Amplitude of temperature fluctuation [C]
80
+ z : np.ndarray
81
+ depth [m]
82
+ w : float
83
+ period of temperature fluctuation [s]
84
+ kappa : float
85
+ thermal diffusivity [W m-1 K-1]
86
+ t : np.ndarray
87
+ time in seconds [s]
88
+
89
+ Returns
90
+ -------
91
+ np.ndarray
92
+ """
93
+ nz = len(z)
94
+ nt = len(t)
95
+ z = np.repeat(np.atleast_1d(z)[np.newaxis, :], nt, axis=0)
96
+ t = np.repeat(np.atleast_1d(t)[:, np.newaxis], nz, axis=1)
97
+ S = np.sqrt(w / (2 * alpha))
98
+ A = A0 * np.exp(-z * S)
99
+ osc = np.cos(w * t - z * S)
100
+
101
+ return A * osc