AeroViz 0.1.11__py3-none-any.whl → 0.1.12__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 AeroViz might be problematic. Click here for more details.

Files changed (83) hide show
  1. AeroViz/__pycache__/__init__.cpython-312.pyc +0 -0
  2. AeroViz/dataProcess/Chemistry/__pycache__/__init__.cpython-312.pyc +0 -0
  3. AeroViz/dataProcess/Optical/__pycache__/PyMieScatt_update.cpython-312.pyc +0 -0
  4. AeroViz/dataProcess/Optical/__pycache__/__init__.cpython-312.pyc +0 -0
  5. AeroViz/dataProcess/Optical/__pycache__/mie_theory.cpython-312.pyc +0 -0
  6. AeroViz/dataProcess/SizeDistr/__pycache__/__init__.cpython-312.pyc +0 -0
  7. AeroViz/dataProcess/VOC/__pycache__/__init__.cpython-312.pyc +0 -0
  8. AeroViz/dataProcess/__pycache__/__init__.cpython-312.pyc +0 -0
  9. AeroViz/dataProcess/core/__pycache__/__init__.cpython-312.pyc +0 -0
  10. AeroViz/plot/__pycache__/__init__.cpython-312.pyc +0 -0
  11. AeroViz/plot/__pycache__/bar.cpython-312.pyc +0 -0
  12. AeroViz/plot/__pycache__/box.cpython-312.pyc +0 -0
  13. AeroViz/plot/__pycache__/pie.cpython-312.pyc +0 -0
  14. AeroViz/plot/__pycache__/radar.cpython-312.pyc +0 -0
  15. AeroViz/plot/__pycache__/regression.cpython-312.pyc +0 -0
  16. AeroViz/plot/__pycache__/scatter.cpython-312.pyc +0 -0
  17. AeroViz/plot/__pycache__/violin.cpython-312.pyc +0 -0
  18. AeroViz/plot/distribution/__pycache__/__init__.cpython-312.pyc +0 -0
  19. AeroViz/plot/distribution/__pycache__/distribution.cpython-312.pyc +0 -0
  20. AeroViz/plot/meteorology/__pycache__/CBPF.cpython-312.pyc +0 -0
  21. AeroViz/plot/meteorology/__pycache__/__init__.cpython-312.pyc +0 -0
  22. AeroViz/plot/meteorology/__pycache__/hysplit.cpython-312.pyc +0 -0
  23. AeroViz/plot/meteorology/__pycache__/wind_rose.cpython-312.pyc +0 -0
  24. AeroViz/plot/meteorology/hysplit.py +7 -4
  25. AeroViz/plot/optical/__pycache__/__init__.cpython-312.pyc +0 -0
  26. AeroViz/plot/optical/__pycache__/optical.cpython-312.pyc +0 -0
  27. AeroViz/plot/templates/__pycache__/__init__.cpython-312.pyc +0 -0
  28. AeroViz/plot/templates/__pycache__/ammonium_rich.cpython-312.pyc +0 -0
  29. AeroViz/plot/templates/__pycache__/contour.cpython-312.pyc +0 -0
  30. AeroViz/plot/templates/__pycache__/corr_matrix.cpython-312.pyc +0 -0
  31. AeroViz/plot/templates/__pycache__/diurnal_pattern.cpython-312.pyc +0 -0
  32. AeroViz/plot/templates/__pycache__/koschmieder.cpython-312.pyc +0 -0
  33. AeroViz/plot/templates/__pycache__/metal_heatmap.cpython-312.pyc +0 -0
  34. AeroViz/plot/timeseries/__pycache__/__init__.cpython-312.pyc +0 -0
  35. AeroViz/plot/timeseries/__pycache__/template.cpython-312.pyc +0 -0
  36. AeroViz/plot/timeseries/__pycache__/timeseries.cpython-312.pyc +0 -0
  37. AeroViz/plot/utils/__pycache__/__init__.cpython-312.pyc +0 -0
  38. AeroViz/plot/utils/__pycache__/_color.cpython-312.pyc +0 -0
  39. AeroViz/plot/utils/__pycache__/_unit.cpython-312.pyc +0 -0
  40. AeroViz/plot/utils/__pycache__/plt_utils.cpython-312.pyc +0 -0
  41. AeroViz/plot/utils/__pycache__/sklearn_utils.cpython-312.pyc +0 -0
  42. AeroViz/rawDataReader/__init__.py +4 -4
  43. AeroViz/rawDataReader/__pycache__/__init__.cpython-312.pyc +0 -0
  44. AeroViz/rawDataReader/config/__pycache__/__init__.cpython-312.pyc +0 -0
  45. AeroViz/rawDataReader/config/__pycache__/supported_instruments.cpython-312.pyc +0 -0
  46. AeroViz/rawDataReader/config/supported_instruments.py +1 -1
  47. AeroViz/rawDataReader/core/__init__.py +7 -2
  48. AeroViz/rawDataReader/core/__pycache__/__init__.cpython-312.pyc +0 -0
  49. AeroViz/rawDataReader/core/__pycache__/logger.cpython-312.pyc +0 -0
  50. AeroViz/rawDataReader/core/__pycache__/qc.cpython-312.pyc +0 -0
  51. AeroViz/rawDataReader/core/logger.py +116 -49
  52. AeroViz/rawDataReader/script/AE33.py +1 -1
  53. AeroViz/rawDataReader/script/{APS_3321.py → APS.py} +9 -16
  54. AeroViz/rawDataReader/script/Minion.py +2 -0
  55. AeroViz/rawDataReader/script/OCEC.py +2 -2
  56. AeroViz/rawDataReader/script/SMPS.py +12 -10
  57. AeroViz/rawDataReader/script/__init__.py +1 -1
  58. AeroViz/rawDataReader/script/__pycache__/AE33.cpython-312.pyc +0 -0
  59. AeroViz/rawDataReader/script/__pycache__/AE43.cpython-312.pyc +0 -0
  60. AeroViz/rawDataReader/script/__pycache__/APS.cpython-312.pyc +0 -0
  61. AeroViz/rawDataReader/script/__pycache__/Aurora.cpython-312.pyc +0 -0
  62. AeroViz/rawDataReader/script/__pycache__/BC1054.cpython-312.pyc +0 -0
  63. AeroViz/rawDataReader/script/__pycache__/EPA.cpython-312.pyc +0 -0
  64. AeroViz/rawDataReader/script/__pycache__/GRIMM.cpython-312.pyc +0 -0
  65. AeroViz/rawDataReader/script/__pycache__/IGAC.cpython-312.pyc +0 -0
  66. AeroViz/rawDataReader/script/__pycache__/MA350.cpython-312.pyc +0 -0
  67. AeroViz/rawDataReader/script/__pycache__/Minion.cpython-312.pyc +0 -0
  68. AeroViz/rawDataReader/script/__pycache__/NEPH.cpython-312.pyc +0 -0
  69. AeroViz/rawDataReader/script/__pycache__/OCEC.cpython-312.pyc +0 -0
  70. AeroViz/rawDataReader/script/__pycache__/SMPS.cpython-312.pyc +0 -0
  71. AeroViz/rawDataReader/script/__pycache__/TEOM.cpython-312.pyc +0 -0
  72. AeroViz/rawDataReader/script/__pycache__/VOC.cpython-312.pyc +0 -0
  73. AeroViz/rawDataReader/script/__pycache__/XRF.cpython-312.pyc +0 -0
  74. AeroViz/rawDataReader/script/__pycache__/__init__.cpython-312.pyc +0 -0
  75. AeroViz/tools/__pycache__/__init__.cpython-312.pyc +0 -0
  76. AeroViz/tools/__pycache__/database.cpython-312.pyc +0 -0
  77. AeroViz/tools/__pycache__/dataclassifier.cpython-312.pyc +0 -0
  78. {AeroViz-0.1.11.dist-info → AeroViz-0.1.12.dist-info}/METADATA +22 -17
  79. {AeroViz-0.1.11.dist-info → AeroViz-0.1.12.dist-info}/RECORD +82 -82
  80. {AeroViz-0.1.11.dist-info → AeroViz-0.1.12.dist-info}/WHEEL +1 -1
  81. AeroViz/rawDataReader/script/__pycache__/APS_3321.cpython-312.pyc +0 -0
  82. {AeroViz-0.1.11.dist-info → AeroViz-0.1.12.dist-info}/LICENSE +0 -0
  83. {AeroViz-0.1.11.dist-info → AeroViz-0.1.12.dist-info}/top_level.txt +0 -0
@@ -40,14 +40,17 @@ def hysplit(file: Path = DEFAULT_FILE):
40
40
  # 創建地圖
41
41
  fig, ax = plt.subplots(figsize=(4, 5), subplot_kw={'projection': ccrs.PlateCarree()})
42
42
 
43
+ ax.set_global()
44
+ # ax.stock_img()
45
+
43
46
  # 設置地圖範圍
44
47
  ax.set_extent([116, 126, 17, 30], crs=ccrs.PlateCarree())
45
48
 
46
49
  # 添加自然地理特徵
47
- ax.add_feature(cfeature.LAND)
48
- ax.add_feature(cfeature.OCEAN)
49
- ax.add_feature(cfeature.COASTLINE)
50
- ax.add_feature(cfeature.BORDERS, linestyle=':')
50
+ ax.add_feature(cfeature.LAND.with_scale('10m'))
51
+ ax.add_feature(cfeature.OCEAN.with_scale('10m'))
52
+ ax.add_feature(cfeature.COASTLINE.with_scale('10m'))
53
+ ax.add_feature(cfeature.BORDERS.with_scale('10m'), linestyle=':')
51
54
 
52
55
  # 添加經緯度網格
53
56
  ax.gridlines(draw_labels=True, dms=True, x_inline=False, y_inline=False)
@@ -10,7 +10,7 @@ from AeroViz.rawDataReader.script import *
10
10
  __all__ = ['RawDataReader']
11
11
 
12
12
  SUPPORTED_INSTRUMENTS = [
13
- NEPH, Aurora, SMPS, GRIMM, APS_3321, AE33, AE43, BC1054,
13
+ NEPH, Aurora, SMPS, GRIMM, APS, AE33, AE43, BC1054,
14
14
  MA350, TEOM, OCEC, IGAC, VOC, EPA, Minion
15
15
  ]
16
16
 
@@ -62,7 +62,7 @@ def RawDataReader(instrument_name: str,
62
62
  ... instrument_name='BC1054',
63
63
  ... path=Path('/path/to/data'),
64
64
  ... start=datetime(2024, 2, 1),
65
- ... end=datetime(2024, 7, 31, 23))
65
+ ... end=datetime(2024, 7, 31))
66
66
  """
67
67
  # Mapping of instrument names to their respective classes
68
68
  instrument_class_map = {cls.__name__.split('.')[-1]: cls for cls in SUPPORTED_INSTRUMENTS}
@@ -71,7 +71,7 @@ def RawDataReader(instrument_name: str,
71
71
  if instrument_name not in meta.keys():
72
72
  raise ValueError(f"Instrument name '{instrument_name}' is not valid. \nMust be one of: {list(meta.keys())}")
73
73
 
74
- # 檢查 path 是否存在且是一個目錄
74
+ # Check if path exists and is a directory
75
75
  if not isinstance(path, Path):
76
76
  path = Path(path)
77
77
  if not path.exists() or not path.is_dir():
@@ -94,7 +94,7 @@ def RawDataReader(instrument_name: str,
94
94
  if end <= start:
95
95
  raise ValueError(f"Invalid time range: start {start} is after end {end}")
96
96
 
97
- # 驗證 mean_freq 的格式是否正確
97
+ # Verify that mean_freq format
98
98
  try:
99
99
  Timedelta(mean_freq)
100
100
  except ValueError:
@@ -25,7 +25,7 @@ meta = {
25
25
  "deter_key": {"Bins": ["all"]},
26
26
  },
27
27
 
28
- "APS_3321": {
28
+ "APS": {
29
29
  "pattern": ["*.txt"],
30
30
  "freq": "6min",
31
31
  "deter_key": {"Bins": ["all"]},
@@ -143,7 +143,7 @@ class AbstractReader(ABC):
143
143
  :return: Processed DataFrame
144
144
  """
145
145
  # Round timestamps and remove duplicates
146
- _df = _df.groupby(_df.index.round('1min')).first()
146
+ _df = _df.groupby(_df.index.floor('1min')).first()
147
147
 
148
148
  # Determine frequency
149
149
  freq = _df.index.inferred_freq or self.meta['freq']
@@ -161,7 +161,12 @@ class AbstractReader(ABC):
161
161
  new_index = pd.date_range(user_start or df_start, user_end or df_end, freq=freq, name='time')
162
162
 
163
163
  # Process data: convert to numeric, resample, and reindex
164
- return _df.reindex(new_index)
164
+ if freq in ['1min', 'min', 'T']:
165
+ return _df.reindex(new_index, method='nearest', tolerance='1min')
166
+ elif freq in ['1h', 'h', 'H']:
167
+ return _df.reindex(new_index, method='nearest', tolerance='1h')
168
+ else:
169
+ return _df.reindex(new_index, method='nearest', tolerance=freq)
165
170
 
166
171
  def _outlier_process(self, _df):
167
172
  outlier_file = self.path / 'outlier.json'
@@ -1,4 +1,6 @@
1
+ import codecs
1
2
  import logging
3
+ import os
2
4
  import platform
3
5
  import re
4
6
  import sys
@@ -10,91 +12,156 @@ class ReaderLogger:
10
12
  self.name = name
11
13
  self.log_path = log_path
12
14
 
13
- # ANSI color codes
14
- self.CYAN = '\033[96m'
15
- self.BLUE = '\033[94m'
16
- self.GREEN = '\033[92m'
17
- self.YELLOW = '\033[93m'
18
- self.RED = '\033[91m'
19
- self.RESET = '\033[0m'
15
+ # 檢查是否支持顏色輸出
16
+ self.color_support = self._check_color_support()
17
+
18
+ # 設置顏色代碼
19
+ if self.color_support:
20
+ self.CYAN = '\033[96m'
21
+ self.BLUE = '\033[94m'
22
+ self.GREEN = '\033[92m'
23
+ self.YELLOW = '\033[93m'
24
+ self.RED = '\033[91m'
25
+ self.RESET = '\033[0m'
26
+ else:
27
+ self.CYAN = ''
28
+ self.BLUE = ''
29
+ self.GREEN = ''
30
+ self.YELLOW = ''
31
+ self.RED = ''
32
+ self.RESET = ''
33
+
34
+ # 檢查 Unicode 支持
35
+ self.unicode_support = self._setup_unicode()
36
+
37
+ # 設置框架字符
38
+ if self.unicode_support:
39
+ self.BOX_TOP_LEFT = "╔"
40
+ self.BOX_TOP_RIGHT = "╗"
41
+ self.BOX_BOTTOM_LEFT = "╚"
42
+ self.BOX_BOTTOM_RIGHT = "╝"
43
+ self.BOX_HORIZONTAL = "═"
44
+ self.BOX_VERTICAL = "║"
45
+ self.ARROW = "▶"
46
+ else:
47
+ self.BOX_TOP_LEFT = "+"
48
+ self.BOX_TOP_RIGHT = "+"
49
+ self.BOX_BOTTOM_LEFT = "+"
50
+ self.BOX_BOTTOM_RIGHT = "+"
51
+ self.BOX_HORIZONTAL = "-"
52
+ self.BOX_VERTICAL = "|"
53
+ self.ARROW = ">"
54
+
55
+ self.logger = self._setup_logger()
56
+
57
+ def _check_color_support(self) -> bool:
58
+ """檢查環境是否支持顏色輸出"""
59
+ # 檢查是否在 Spyder 或其他 IDE 中運行
60
+ if any(IDE in os.environ.get('PYTHONPATH', '') for IDE in ['spyder', 'jupyter']):
61
+ return False
20
62
 
21
- # 強制 Windows 使用 UTF-8
63
+ # 檢查是否強制啟用或禁用顏色
64
+ if 'FORCE_COLOR' in os.environ:
65
+ return os.environ['FORCE_COLOR'].lower() in ('1', 'true', 'yes')
66
+
67
+ # Windows 檢查
22
68
  if platform.system().lower() == 'windows':
23
- try:
24
- sys.stdout.reconfigure(encoding='utf-8')
25
- self.unicode_support = True
26
- except Exception:
27
- import codecs
28
- sys.stdout = codecs.getwriter('utf-8')(sys.stdout.buffer)
29
- self.unicode_support = True
30
- else:
31
- self.unicode_support = True
69
+ return ('ANSICON' in os.environ or
70
+ 'WT_SESSION' in os.environ or # Windows Terminal
71
+ 'ConEmuANSI' in os.environ or
72
+ os.environ.get('TERM_PROGRAM', '').lower() == 'vscode')
32
73
 
33
- # 使用 Unicode 字符
34
- self.BOX_TOP_LEFT = "╔"
35
- self.BOX_TOP_RIGHT = "╗"
36
- self.BOX_BOTTOM_LEFT = "╚"
37
- self.BOX_BOTTOM_RIGHT = "╝"
38
- self.BOX_HORIZONTAL = "═"
39
- self.BOX_VERTICAL = "║"
40
- self.ARROW = "▶"
74
+ # 其他系統檢查
75
+ return hasattr(sys.stdout, 'isatty') and sys.stdout.isatty()
41
76
 
42
- self.logger = self._setup_logger()
77
+ def _setup_unicode(self) -> bool:
78
+ """設置 Unicode 支持"""
79
+ if platform.system().lower() == 'windows':
80
+ try:
81
+ if hasattr(sys.stdout, 'reconfigure'):
82
+ sys.stdout.reconfigure(encoding='utf-8')
83
+ elif hasattr(sys.stdout, 'buffer'):
84
+ sys.stdout = codecs.getwriter('utf-8')(sys.stdout.buffer)
85
+ else:
86
+ return False
87
+ return True
88
+ except Exception:
89
+ return False
90
+ return True
43
91
 
44
92
  def _setup_logger(self) -> logging.Logger:
93
+ """設置logger"""
45
94
  logger = logging.getLogger(self.name)
46
95
  logger.setLevel(logging.INFO)
47
96
 
48
- # Remove existing handlers
97
+ # 移除現有的 handlers
49
98
  for handler in logger.handlers[:]:
50
99
  handler.close()
51
100
  logger.removeHandler(handler)
52
101
 
53
- # clean ANSI formatter (for log file)
102
+ # 清理 ANSI 格式化器
54
103
  class CleanFormatter(logging.Formatter):
55
104
  def format(self, record):
56
105
  formatted_msg = super().format(record)
57
106
  return re.sub(r'\033\[[0-9;]*m', '', formatted_msg)
58
107
 
59
- # Set up handlers with UTF-8 encoding
60
- file_handler = logging.FileHandler(self.log_path / f'{self.name}.log', encoding='utf-8')
61
- file_handler.setFormatter(CleanFormatter('%(asctime)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S'))
62
-
108
+ # 設置檔案處理器
109
+ try:
110
+ log_dir = Path(self.log_path)
111
+ log_dir.mkdir(parents=True, exist_ok=True)
112
+ file_handler = logging.FileHandler(
113
+ log_dir / f'{self.name}.log',
114
+ encoding='utf-8',
115
+ errors='replace'
116
+ )
117
+ file_handler.setFormatter(
118
+ CleanFormatter('%(asctime)s - %(message)s',
119
+ datefmt='%Y-%m-%d %H:%M:%S')
120
+ )
121
+ logger.addHandler(file_handler)
122
+ except Exception as e:
123
+ print(f"Warning: Could not set up file logging: {e}")
124
+
125
+ # 設置控制台處理器
63
126
  console_handler = logging.StreamHandler(sys.stdout)
64
127
  console_handler.setFormatter(logging.Formatter('%(message)s'))
65
-
66
- logger.addHandler(file_handler)
67
128
  logger.addHandler(console_handler)
68
129
 
69
130
  return logger
70
131
 
132
+ def _safe_print(self, text: str) -> str:
133
+ """安全打印,處理編碼問題"""
134
+ if not self.unicode_support:
135
+ text = text.encode('ascii', 'replace').decode('ascii')
136
+ return text
137
+
71
138
  def info(self, msg: str):
72
- self.logger.info(msg)
139
+ self.logger.info(self._safe_print(msg))
73
140
 
74
141
  def warning(self, msg: str):
75
- self.logger.warning(msg)
142
+ self.logger.warning(self._safe_print(msg))
76
143
 
77
144
  def error(self, msg: str):
78
- self.logger.error(msg)
145
+ self.logger.error(self._safe_print(msg))
79
146
 
80
147
  def info_box(self, text: str, color_part: str = None, width: int = 80):
81
- """
82
- Create a boxed message with optional colored text
83
-
84
- Args:
85
- text: Base text format (e.g., "Reading {} RAW DATA from {} to {}")
86
- color_part: Part of text to be colored (e.g., "RAW DATA")
87
- width: Box width
88
- """
148
+ """創建帶框的消息,可選擇性地為部分文本著色"""
149
+ # 處理文本
89
150
  display_text = text.replace(color_part, " " * len(color_part)) if color_part else text
90
151
 
152
+ # 計算padding
91
153
  left_padding = " " * ((width - len(display_text)) // 2)
92
154
  right_padding = " " * (width - len(display_text) - len(left_padding))
93
155
 
94
- content = text.replace(color_part, f"{self.CYAN}{color_part}{self.RESET}") if color_part else text
156
+ # 處理顏色
157
+ if color_part and self.color_support:
158
+ content = text.replace(color_part, f"{self.CYAN}{color_part}{self.RESET}")
159
+ else:
160
+ content = text
95
161
 
96
162
  __content__ = f"{left_padding}{content}{right_padding}"
97
163
 
98
- self.info(f"╔{'═' * width}╗")
99
- self.info(f"{__content__}")
100
- self.info(f"{'═' * width}")
164
+ # 使用當前設置的框架字符
165
+ self.info(f"{self.BOX_TOP_LEFT}{self.BOX_HORIZONTAL * width}{self.BOX_TOP_RIGHT}")
166
+ self.info(f"{self.BOX_VERTICAL}{__content__}{self.BOX_VERTICAL}")
167
+ self.info(f"{self.BOX_BOTTOM_LEFT}{self.BOX_HORIZONTAL * width}{self.BOX_BOTTOM_RIGHT}")
@@ -8,7 +8,7 @@ class Reader(AbstractReader):
8
8
 
9
9
  def _raw_reader(self, file):
10
10
  if file.stat().st_size / 1024 < 550:
11
- self.logger.info(f'\t {file} may not be a whole daily data. Make sure the file is correct.')
11
+ self.logger.info(f'\t {file.name} may not be a whole daily data. Make sure the file is correct.')
12
12
 
13
13
  _df = read_table(file, parse_dates={'time': [0, 1]}, index_col='time',
14
14
  delimiter=r'\s+', skiprows=5, usecols=range(67))
@@ -5,29 +5,24 @@ from AeroViz.rawDataReader.core import AbstractReader
5
5
 
6
6
 
7
7
  class Reader(AbstractReader):
8
- nam = 'APS_3321'
8
+ nam = 'APS'
9
9
 
10
10
  def _raw_reader(self, file):
11
11
  with open(file, 'r', encoding='utf-8', errors='ignore') as f:
12
- _df = read_table(f, skiprows=6, parse_dates={'Time': ['Date', 'Start Time']}).set_index('Time')
13
- _key = list(_df.keys()[3:54]) ## 542 ~ 1981
12
+ _df = read_table(f, skiprows=6, parse_dates={'Time': ['Date', 'Start Time']},
13
+ date_format='%m/%d/%y %H:%M:%S').set_index('Time')
14
14
 
15
- # create new keys
16
- _newkey = {}
17
- for _k in _key:
18
- _newkey[_k] = float(_k).__round__(4)
19
- # _newkey['Mode(m)'] = 'mode'
15
+ # 542 nm ~ 1981 nm
16
+ _df = _df.iloc[:, 3:54].rename(columns=lambda x: round(float(x), 4))
20
17
 
21
- # get new dataframe
22
- _df = _df[_newkey.keys()].rename(_newkey, axis=1)
23
- # df['total'] = _df[list(_newkey.values())[:-1]].sum(axis=1)*(n.diff(n.log(_df.keys()[:-1].to_numpy(float))).mean()).copy()
24
-
25
- _df_idx = to_datetime(_df.index, errors='coerce')
18
+ _df_idx = to_datetime(_df.index, format='%m/%d/%y %H:%M:%S', errors='coerce')
26
19
 
27
20
  return _df.set_index(_df_idx).loc[_df_idx.dropna()]
28
21
 
29
22
  # QC data
30
23
  def _QC(self, _df):
24
+ _df = _df.copy()
25
+
31
26
  # mask out the data size lower than 7
32
27
  _df['total'] = _df.sum(axis=1, min_count=1) * (np.diff(np.log(_df.keys().to_numpy(float)))).mean()
33
28
  _df_size = _df['total'].dropna().resample('1h').size().resample(_df.index.freq).ffill()
@@ -37,11 +32,9 @@ class Reader(AbstractReader):
37
32
  _df = _df.mask(_df['total'] > 700)
38
33
 
39
34
  # not confirmed
40
- """
41
- ## remove the bin over 4000 nm which num. conc. larger than 1
35
+ # remove the bin over 4000 nm which num. conc. larger than 1
42
36
  # _df_remv_ky = _df.keys()[:-2][_df.keys()[:-2]>=4.]
43
37
 
44
38
  # _df_1hr[_df_remv_ky] = _df_1hr[_df_remv_ky].copy().mask(_df_1hr[_df_remv_ky]>1.)
45
- # """
46
39
 
47
40
  return _df[_df.keys()[:-1]]
@@ -187,6 +187,8 @@ class Reader(AbstractReader):
187
187
  ['Cl-', 'NO2-', 'NO3-', 'SO42-'],
188
188
  ['SO42-', 'NO3-', 'NH4+'])
189
189
 
190
+ CA_range = () # CA, AC Q3=1.5 * IQR
191
+
190
192
  _df['+_mole'] = _df[_cation].div([23, 18, 39, (24 / 2), (40 / 2)]).sum(axis=1, skipna=True)
191
193
  _df['-_mole'] = _df[_anion].div([35.5, 46, 62, (96 / 2)]).sum(axis=1, skipna=True)
192
194
 
@@ -73,8 +73,8 @@ class Reader(AbstractReader):
73
73
 
74
74
  # QC data
75
75
  def _QC(self, _df):
76
- MDL = {'Thermal_OC': 0.3,
77
- 'Optical_OC': 0.3,
76
+ MDL = {'Thermal_OC': 0.3, # 0.89
77
+ 'Optical_OC': 0.3, # 0.08
78
78
  'Thermal_EC': 0.015,
79
79
  'Optical_EC': 0.015
80
80
  }
@@ -64,20 +64,22 @@ class Reader(AbstractReader):
64
64
 
65
65
  # QC data
66
66
  def _QC(self, _df):
67
- size_range_mask = (_df.columns.astype(float) >= self.size_range[0]) & (
68
- _df.columns.astype(float) <= self.size_range[1])
69
- _df = _df.loc[:, size_range_mask]
67
+ df = _df.copy()
68
+
69
+ size_range_mask = (df.columns.astype(float) >= self.size_range[0]) & (
70
+ df.columns.astype(float) <= self.size_range[1])
71
+ df = df.loc[:, size_range_mask]
70
72
 
71
73
  # mask out the data size lower than 7
72
- _df['total'] = _df.sum(axis=1, min_count=1) * (np.diff(np.log(_df.keys().to_numpy(float)))).mean()
73
- _df_size = _df['total'].dropna().resample('1h').size().resample(_df.index.freq).ffill()
74
- _df = _df.mask(_df_size < 7)
74
+ df.loc[:, 'total'] = df.sum(axis=1, min_count=1) * (np.diff(np.log(df.columns[:-1].to_numpy(float)))).mean()
75
+ _df_size = df['total'].dropna().resample('1h').size().resample(df.index.freq).ffill()
76
+ df = df.mask(_df_size < 7)
75
77
 
76
78
  # remove total conc. lower than 2000
77
- _df = _df.mask(_df['total'] < 2000)
79
+ df = df.mask(df['total'] < 2000)
78
80
 
79
81
  # remove the bin over 400 nm which num. conc. larger than 4000
80
- _df_remv_ky = _df.keys()[:-1][_df.keys()[:-1] >= 400.]
81
- _df[_df_remv_ky] = _df[_df_remv_ky].copy().mask(_df[_df_remv_ky] > 4000.)
82
+ _df_remv_ky = df.keys()[:-1][df.keys()[:-1] >= 400.]
83
+ df[_df_remv_ky] = df[_df_remv_ky].copy().mask(df[_df_remv_ky] > 4000.)
82
84
 
83
- return _df[_df.keys()[:-1]]
85
+ return df[df.keys()[:-1]]
@@ -2,7 +2,7 @@ __all__ = [
2
2
  'NEPH',
3
3
  'Aurora',
4
4
  'SMPS',
5
- 'APS_3321',
5
+ 'APS',
6
6
  'GRIMM',
7
7
  'AE33',
8
8
  'AE43',
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: AeroViz
3
- Version: 0.1.11
3
+ Version: 0.1.12
4
4
  Summary: Aerosol science
5
5
  Author-email: alex <alex870521@gmail.com>
6
6
  License: MIT
@@ -25,6 +25,10 @@ Requires-Dist: windrose==1.9.2
25
25
  Requires-Dist: cartopy==0.24.1
26
26
  Requires-Dist: tabulate==0.9.0
27
27
  Requires-Dist: rich~=13.7.1
28
+ Provides-Extra: test
29
+ Requires-Dist: pytest>=7.0.0; extra == "test"
30
+ Requires-Dist: pytest-cov>=4.1.0; extra == "test"
31
+ Requires-Dist: pytest-mock>=3.10.0; extra == "test"
28
32
  Provides-Extra: dev
29
33
  Requires-Dist: black>=23.0; extra == "dev"
30
34
  Requires-Dist: isort>=5.12.0; extra == "dev"
@@ -36,10 +40,6 @@ Provides-Extra: docs
36
40
  Requires-Dist: mkdocs>=1.4.0; extra == "docs"
37
41
  Requires-Dist: mkdocs-material>=8.0; extra == "docs"
38
42
  Requires-Dist: mkdocstrings[python]>=0.18.0; extra == "docs"
39
- Provides-Extra: test
40
- Requires-Dist: pytest>=7.0.0; extra == "test"
41
- Requires-Dist: pytest-cov>=4.1.0; extra == "test"
42
- Requires-Dist: pytest-mock>=3.10.0; extra == "test"
43
43
 
44
44
  ## <div align="center">AeroViz for Aerosol Science Visualization</div>
45
45
 
@@ -103,10 +103,24 @@ from pathlib import Path
103
103
  from AeroViz import RawDataReader, DataProcess, plot
104
104
 
105
105
  # Read data from a supported instrument
106
- data = RawDataReader('NEPH', Path('/path/to/data'), start=datetime(2024, 2, 1), end=datetime(2024, 4, 30))
106
+ data = RawDataReader(
107
+ 'NEPH',
108
+ Path('/path/to/data'),
109
+ start=datetime(2024, 2, 1),
110
+ end=datetime(2024, 4, 30)
111
+ )
112
+ ```
107
113
 
108
- # Create a visualization
109
- plot.timeseries(data, y='scattering_coefficient')
114
+ ```pycon
115
+ > Concole output
116
+ ╔════════════════════════════════════════════════════════════════════════════════╗
117
+ ║ Reading NEPH RAW DATA from 2024-02-01 00:00:00 to 2024-04-30 23:59:59 ║
118
+ ╚════════════════════════════════════════════════════════════════════════════════╝
119
+ ▶ Reading NEPH files ━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00 file_name.dat
120
+ ▶ Scatter Coe. (550 nm)
121
+ ├─ Sample Rate : 100.0%
122
+ ├─ Valid Rate : 100.0%
123
+ └─ Total Rate : 100.0%
110
124
  ```
111
125
 
112
126
  For more detailed usage instructions, please refer to our [User Guide](docs/guide).
@@ -125,12 +139,3 @@ For detailed documentation, please refer to the `docs` folder, which includes:
125
139
 
126
140
  ## <div align="center">Contact</div>
127
141
  For bug reports and feature requests please visit [GitHub Issues](https://github.com/Alex870521/DataPlot/issues).
128
-
129
- <div align="center">
130
-
131
- <a href="https://github.com/Alex870521"><img src="https://github.com/Alex870521/AeroViz/blob/main/assets/media/logo-social-github.png?raw=true" width="3%" alt="Alex870521 GitHub"></a>
132
- <img src="https://github.com/Alex870521/AeroViz/blob/main/assets/media/logo-transparent.png?raw=true" width="3%">
133
- <a href="https://www.linkedin.com/in/Alex870521/"><img src="https://github.com/Alex870521/AeroViz/blob/main/assets/media/logo-social-linkedin.png?raw=true" width="3%" alt="Alex870521 LinkedIn"></a>
134
- <img src="https://github.com/Alex870521/AeroViz/blob/main/assets/media/logo-transparent.png?raw=true" width="3%">
135
- <a href="https://medium.com/@alex870521"><img src="https://github.com/Alex870521/AeroViz/blob/main/assets/media/logo-social-medium.png?raw=true" width="3%" alt="Alex870521 Medium"></a>
136
- </div>
@@ -1,5 +1,5 @@
1
1
  AeroViz/__init__.py,sha256=4ICXg4UATkGXIUziaXcPX2Yaqj6OK5SL0ilU1JKeGFw,341
2
- AeroViz/__pycache__/__init__.cpython-312.pyc,sha256=wncHu15MidrhTWUTSkAXgHtrSMj2S2j_UPbmZjBLA5U,428
2
+ AeroViz/__pycache__/__init__.cpython-312.pyc,sha256=rFyv4c4j1wZFxgjgaelbYczxY_f23IRZy8MmUe6HJF4,428
3
3
  AeroViz/data/DEFAULT_DATA.csv,sha256=eeeyeh8vSLKkE5tAF0TYnUNOyQIH98VA41bJaAP204Y,2248526
4
4
  AeroViz/data/DEFAULT_PNSD_DATA.csv,sha256=imLvLA80oYwo_jzXZtlQn5hZ76d47HUIlK2jp0tZPrg,2636511
5
5
  AeroViz/data/hysplit_example_data.txt,sha256=DWfY83EW3fOcv9dW-Y4pudq8-M7BJlXD-tlMSYrAk2w,8946
@@ -13,7 +13,7 @@ AeroViz/dataProcess/Chemistry/_partition.py,sha256=tKhb6BJns46UiUlEq6Zq7ahYnvUJ_
13
13
  AeroViz/dataProcess/Chemistry/_teom.py,sha256=IiM-TrifWpQLTbKllG-4k4c3mvQulfcmjswWu6muCXA,486
14
14
  AeroViz/dataProcess/Chemistry/isrpia.cnf,sha256=iWXTqsOZFmNrJxAI9nYuilZ9h6ru1icdPFVim7YKc_k,566
15
15
  AeroViz/dataProcess/Chemistry/isrpia2.exe,sha256=xFYPTXHSjl_-atmVcTmqqOkTZgUn1p8h-kFMcoGMIQw,1560032
16
- AeroViz/dataProcess/Chemistry/__pycache__/__init__.cpython-312.pyc,sha256=IYX2uBAwUMMxy2uyJyosKoU9LqDloHumr-y3cNZozOo,2712
16
+ AeroViz/dataProcess/Chemistry/__pycache__/__init__.cpython-312.pyc,sha256=-QZKV4EnCIk6T63GVXVvd1_BabdLXgyDxOhUMMISgPM,2712
17
17
  AeroViz/dataProcess/Optical/Angstrom_exponent.py,sha256=KSGM_hf2oUPsLoLuhYSRDK5zdekwce9KgqhzRnf2Y4g,706
18
18
  AeroViz/dataProcess/Optical/PyMieScatt_update.py,sha256=3W2nqo9sQLqj9dqWh5Eqx2XUdu44bGWDLTa3QnjiUvM,20943
19
19
  AeroViz/dataProcess/Optical/_IMPROVE.py,sha256=n3uHUQTivckIrNlbE8rP7lPZGcMWZUAnS_qX8pXd55Q,1670
@@ -25,9 +25,9 @@ AeroViz/dataProcess/Optical/_mie_sd.py,sha256=cbWSorfG-l92csaXsZJ7005f8ij2H_VZop
25
25
  AeroViz/dataProcess/Optical/_scattering.py,sha256=w5xXXOfafV9a_dXY60YqTyzFDZppjBJeLcKl5PeCQe4,961
26
26
  AeroViz/dataProcess/Optical/fRH.pkl,sha256=PhJ-BYTaUDjl2Lp5Wz0zeiLQCzrsNdq8nP7Jd1BXyXE,4528
27
27
  AeroViz/dataProcess/Optical/mie_theory.py,sha256=EC3SsUaq5G3SdQyPMQxcosbEokqAgJw-4Gz6moJiOsk,8666
28
- AeroViz/dataProcess/Optical/__pycache__/PyMieScatt_update.cpython-312.pyc,sha256=0E54P7TL2WKKYsvptbjtzLdbFDOnImCV2L5ghJ4MNaM,32602
29
- AeroViz/dataProcess/Optical/__pycache__/__init__.cpython-312.pyc,sha256=ghYWHf6qc76mm8wn8x86ATjZ5Wx1iO3h-Uw5goXqYjI,2114
30
- AeroViz/dataProcess/Optical/__pycache__/mie_theory.cpython-312.pyc,sha256=yKuOGFDp9q3-qVCw6uVzlk3JQPQ6wWFRIZREAeLOgFY,10662
28
+ AeroViz/dataProcess/Optical/__pycache__/PyMieScatt_update.cpython-312.pyc,sha256=W5tzeZnoJ8IF0mWMImZNv7wqTGhny-KkoMxHMgE-R14,32602
29
+ AeroViz/dataProcess/Optical/__pycache__/__init__.cpython-312.pyc,sha256=kLT99igZ1AIE5MLY_pGl3L5AwTvbcHEN5FmFbNciOro,2114
30
+ AeroViz/dataProcess/Optical/__pycache__/mie_theory.cpython-312.pyc,sha256=6pnzZmtCgElE2NAzdUiZ8NwKB2hwhcmxZSO-hAls49s,10662
31
31
  AeroViz/dataProcess/SizeDistr/__init__.py,sha256=fka1IJW4wZzYWE9HjWi8i03ab0JLFXOUdaHWYs4VHEQ,2172
32
32
  AeroViz/dataProcess/SizeDistr/__merge.py,sha256=A-ZmduUA9a0nVM8szhG1AWhsfUPu2UhGIaqFLcmg7Lk,9422
33
33
  AeroViz/dataProcess/SizeDistr/_merge.py,sha256=CyZwUc2M4lL-OE74e8mXq41nC6X0LJTAV8TwpO3fS2o,9176
@@ -37,14 +37,14 @@ AeroViz/dataProcess/SizeDistr/_merge_v3.py,sha256=HN2ARFmeWOawOWRPPv_pHEGBBZNgXV
37
37
  AeroViz/dataProcess/SizeDistr/_merge_v4.py,sha256=b8RVAievGIOLrmJHJXRsKXQ1tkMkm6rx43S7XAfeXE4,16228
38
38
  AeroViz/dataProcess/SizeDistr/_size_distr.py,sha256=ULhGKlxE9QmbDO_PS3HOSKzepeMfJZWabJvGXqsDEvE,3259
39
39
  AeroViz/dataProcess/SizeDistr/prop.py,sha256=7f18SOkkLgDiY_g1c1We8g-3WDJJIFcxkfR4F99jUgc,1845
40
- AeroViz/dataProcess/SizeDistr/__pycache__/__init__.cpython-312.pyc,sha256=jUlGwLuMKnyEtc0MsdJT9Fac6_n1A45Kmf0hptCDnfQ,2552
40
+ AeroViz/dataProcess/SizeDistr/__pycache__/__init__.cpython-312.pyc,sha256=vobgdfNHncQnFALFjqHXbtjVbxRgTA-NIVYpb38NOuM,2552
41
41
  AeroViz/dataProcess/VOC/__init__.py,sha256=8GNP0RMymTkJXK18pSgfLHqrKPWboN-3x1_Ke4UrI44,259
42
42
  AeroViz/dataProcess/VOC/_potential_par.py,sha256=h3rVdvtBvC6xHa_ZG4Oq5eXezeSZtHNy6T6I40maIcM,3863
43
43
  AeroViz/dataProcess/VOC/support_voc.json,sha256=tMYp_NERqhSriVRE2NavXh33CQ5CnsbJHtmMFlE5q_E,6804
44
- AeroViz/dataProcess/VOC/__pycache__/__init__.cpython-312.pyc,sha256=-sdI0zl-rzvtphoH9kkGhfwPN90jqjRMpAvd4H3kPBw,716
45
- AeroViz/dataProcess/__pycache__/__init__.cpython-312.pyc,sha256=m9FYe755fA9xLtdAQ7jhu-In9dC39EwCF6w1-UZfMl4,1067
44
+ AeroViz/dataProcess/VOC/__pycache__/__init__.cpython-312.pyc,sha256=vZ0R_PqF1Vg1AHsk9F28VCdDeNYcu0vJhgs6Ff6H89g,716
45
+ AeroViz/dataProcess/__pycache__/__init__.cpython-312.pyc,sha256=LuAWC7ehbPJv5ZPlYLfkkSkIlN3lCwYT97OOGoHsnNk,1067
46
46
  AeroViz/dataProcess/core/__init__.py,sha256=FhGwqlP8ZwXZQS0LjH0YOz2g1Q2yJniUUhRZ_jDOQ6k,2707
47
- AeroViz/dataProcess/core/__pycache__/__init__.cpython-312.pyc,sha256=SNKl6HCIM-s6qV_EL6sMHHWz8UUsqjhYQXv2n-E8NJg,4430
47
+ AeroViz/dataProcess/core/__pycache__/__init__.cpython-312.pyc,sha256=uK4tH5hPSgqBUEF2j8I0fPgBvjiOX2CbKOdH9c3c8X8,4430
48
48
  AeroViz/plot/__init__.py,sha256=Cy42d1t58zeutxLYDkm8bFbRNGE0G1T8VpqGj1li1Cw,419
49
49
  AeroViz/plot/bar.py,sha256=cSPKJLWGifCzICCZVPcbZtrDrea_AStlwSli9-b-lsA,4246
50
50
  AeroViz/plot/box.py,sha256=8zDd8jYndSv5f0P1lFeX0m7VWYh9okYgJTClh2Lj7Dg,2115
@@ -53,30 +53,30 @@ AeroViz/plot/radar.py,sha256=QHXkLQlAZZQDWHcqVGJBeRsGiu45GYmy3lN6gwlh6xY,6965
53
53
  AeroViz/plot/regression.py,sha256=mTCNrCAYvH7QjIb_5WlltCR1Kqwer1anpGEsxmO2S3o,7292
54
54
  AeroViz/plot/scatter.py,sha256=sxk5QxgC1Jk9PuY18q9aRgR_Ipvg5dM1RkwYQxRkn1c,6787
55
55
  AeroViz/plot/violin.py,sha256=pU2Z2yTWocEtImmCAmbtn0WvXtUOrnCGOdDOrLxjooU,2689
56
- AeroViz/plot/__pycache__/__init__.cpython-312.pyc,sha256=MO-gmQyblOW1JZ2gUa5hCK6TMBma3S5zAZ4NiOql8jU,684
57
- AeroViz/plot/__pycache__/bar.cpython-312.pyc,sha256=z3g8y6ydwIppd7xU1TDMsKQtKPcmFUOTs9LZvHPQXq8,5954
58
- AeroViz/plot/__pycache__/box.cpython-312.pyc,sha256=3QGikQij8yLFMzLL88XwrN8uxTLwczco7pe60lbxbbw,4043
59
- AeroViz/plot/__pycache__/pie.cpython-312.pyc,sha256=WN7FL0Aaaxa4bBobXA9n6CcXlDP9h_M9ABEgtuAmUp8,10689
60
- AeroViz/plot/__pycache__/radar.cpython-312.pyc,sha256=Sc7nhVPtFlOE0fsdbWQytnebdp73pH1bVzQ6wOW-mk8,9335
61
- AeroViz/plot/__pycache__/regression.cpython-312.pyc,sha256=iZc2OKG7z8xCG9H4wYIwJq0gTxqQTbSuYaUOZqCjw2Y,8417
62
- AeroViz/plot/__pycache__/scatter.cpython-312.pyc,sha256=B0ER6XLUzFxmBcoRTccpJ95DrZCwptLrJjR6I1cI6vQ,9540
63
- AeroViz/plot/__pycache__/violin.cpython-312.pyc,sha256=ncdFuWaduF24C_GxpPQLsZx-qbm1nEbBtqkOS7WjkXU,4291
56
+ AeroViz/plot/__pycache__/__init__.cpython-312.pyc,sha256=-UYqvtOwl4R9EM-lCBETEFNzqtAbctoHZgUdrironkU,684
57
+ AeroViz/plot/__pycache__/bar.cpython-312.pyc,sha256=dES5kB3XgvSNwNGjlOjzviJadz6weDEewAdmc8m1Wi8,5954
58
+ AeroViz/plot/__pycache__/box.cpython-312.pyc,sha256=MGKi1tcGbP_GjdKo15zEDOJpQIC5XjjdnvpB-yIblh8,4043
59
+ AeroViz/plot/__pycache__/pie.cpython-312.pyc,sha256=ZXqqVodXWFS9envKHbH-Kv3BaxP9lYfUiC7DeIAWloI,10689
60
+ AeroViz/plot/__pycache__/radar.cpython-312.pyc,sha256=DTm0Jv6SvTPS9nT4VpZ0RTY0KojwkSux5q-fc1LoAVQ,9335
61
+ AeroViz/plot/__pycache__/regression.cpython-312.pyc,sha256=8MTFYypMvBQ8d4ZocwVr1yByUORbC3-MTLBI_6JIlek,8417
62
+ AeroViz/plot/__pycache__/scatter.cpython-312.pyc,sha256=6-yVNc4DD1bbxKdH81cGuccHq6bI73AX9WkG9nZSJ9M,9540
63
+ AeroViz/plot/__pycache__/violin.cpython-312.pyc,sha256=6FJvVgY8Hvh66kh0hdJd5Tkfds6rQSYbfJQptG3mil8,4291
64
64
  AeroViz/plot/distribution/__init__.py,sha256=nhbIegWczkuEfWsE7-2jfF0dnpmPDzJJzjq8Fuh6q5k,28
65
65
  AeroViz/plot/distribution/distribution.py,sha256=sAjqtqKavFwQqI8PGPFnpvZFSU-w2UKjcTTC5L91f4E,20595
66
- AeroViz/plot/distribution/__pycache__/__init__.cpython-312.pyc,sha256=TwnkLo1CQHzIwDLKeH-oQEzPn7tJv-b61agiMyu_coQ,202
67
- AeroViz/plot/distribution/__pycache__/distribution.cpython-312.pyc,sha256=y6rY_Ncs3KqXmmfiTPV0_U3ARgyDALn7VEOmt0YUCxQ,30983
66
+ AeroViz/plot/distribution/__pycache__/__init__.cpython-312.pyc,sha256=5gf7XXE_D5M8yUyZvDVzqdHtXU7iw8pytnCQ-wYC6VM,202
67
+ AeroViz/plot/distribution/__pycache__/distribution.cpython-312.pyc,sha256=9gD5v9hWS055plHxIooJv_PAUakFIwSg9KE3h-qJAis,30983
68
68
  AeroViz/plot/meteorology/CBPF.py,sha256=4BjPNW2H2Q9HSyDvqxGAibQSIieKkt7CrFQo1rmdKWQ,11136
69
69
  AeroViz/plot/meteorology/__init__.py,sha256=6HRc9TwUDOohULJ4hURbQSMKlHfoZzG1zLS1AUg0fH4,85
70
- AeroViz/plot/meteorology/hysplit.py,sha256=gSCkemFLRvsk4m8zYbxbsjrdU14NkN9ZNfVRvdq69aM,2796
70
+ AeroViz/plot/meteorology/hysplit.py,sha256=gUlg1Gr-PbqDQI8bWqnHR5UpzRGstvGM0QrrT_EpWtg,2910
71
71
  AeroViz/plot/meteorology/wind_rose.py,sha256=Bp2LjyJhm5FRINH6UUb70g9rA9kZ1oK-9rLvSGHBjwU,2876
72
- AeroViz/plot/meteorology/__pycache__/CBPF.cpython-312.pyc,sha256=2Nw_qwj1oRhUYDXfdKTAQvVZL7hmsiqH6ynPjhTA9Dg,15329
73
- AeroViz/plot/meteorology/__pycache__/__init__.cpython-312.pyc,sha256=Ao4oRIX1OM48Yb0-eTYR_-_U-Cfzcb29mDG1_nuPDWI,261
74
- AeroViz/plot/meteorology/__pycache__/hysplit.cpython-312.pyc,sha256=2iMq-zCST2NJKk84pqEZI3AwPcre8XzdgJsvnQeS9u0,3779
75
- AeroViz/plot/meteorology/__pycache__/wind_rose.cpython-312.pyc,sha256=-vTL-SNLlICu3BjtXxQILPJ49oOYIHs872qVX5J9p4A,3413
72
+ AeroViz/plot/meteorology/__pycache__/CBPF.cpython-312.pyc,sha256=LQ3AzIu_bhk3MzTgry8dqjiFBMISL97-xMwNQeuwHWI,15329
73
+ AeroViz/plot/meteorology/__pycache__/__init__.cpython-312.pyc,sha256=vCbQFKvONX0jFYRKEJIOHXgcO00fFLbYQjjlFurHd84,261
74
+ AeroViz/plot/meteorology/__pycache__/hysplit.cpython-312.pyc,sha256=Ww-jQF4G5SngYplITDx0HlA-lwmcPZuZOeJqTu8BiXI,4013
75
+ AeroViz/plot/meteorology/__pycache__/wind_rose.cpython-312.pyc,sha256=9Zhg27jQPyEvTT43cmYIMITZyAs0pEjJvulFDd6JDm8,3413
76
76
  AeroViz/plot/optical/__init__.py,sha256=5S2WPq8NouPYgc46c1XBveSL8Cxs3w8wNYN7vWIpB-s,23
77
77
  AeroViz/plot/optical/optical.py,sha256=j8LUSga9BvVjZnGKNG8bt62E9xoBoO2OQxvDBqY6U90,13664
78
- AeroViz/plot/optical/__pycache__/__init__.cpython-312.pyc,sha256=OM7tFxlgkBXIGEPrTst1wAa8MvNiNjPjeB3fZ7a92FU,192
79
- AeroViz/plot/optical/__pycache__/optical.cpython-312.pyc,sha256=uJkMpk3kln9s3lRSrJhxbMT2wu2y7Sirq9TrFFwNHi0,18435
78
+ AeroViz/plot/optical/__pycache__/__init__.cpython-312.pyc,sha256=bWTA0Nx6RD3cJWsWh9cIIZHoPUx66yWnt0_j7GW8xHs,192
79
+ AeroViz/plot/optical/__pycache__/optical.cpython-312.pyc,sha256=dpc0al4Ag4YMbohEYa75Kd9Q3CEaU2_woA-XCVgUayc,18435
80
80
  AeroViz/plot/templates/__init__.py,sha256=VXp73SqrSF1WR9WYhHpHtbhvFcb1CR4JeV1tPQvCEEI,227
81
81
  AeroViz/plot/templates/ammonium_rich.py,sha256=a46rfwhSZ3LIj71LxdOnklAFyy6Xe_VQ-kh1komnZ5g,1225
82
82
  AeroViz/plot/templates/contour.py,sha256=fAM6Wn_EmENQM1IW6KJpwmLva6D9P2dEAaK6cNQBtdQ,1678
@@ -84,19 +84,19 @@ AeroViz/plot/templates/corr_matrix.py,sha256=VeiwBwmg_v6LYslJvhSqweiLBheR3vGfPYx
84
84
  AeroViz/plot/templates/diurnal_pattern.py,sha256=TOE4PvHluZhjZvDEeZIv8hcb-PthBNDrgEWtyPmwMcg,2051
85
85
  AeroViz/plot/templates/koschmieder.py,sha256=YMtok3T5VHlzLphnsrkchNRnw5UE3XSLYDne42Efofo,3343
86
86
  AeroViz/plot/templates/metal_heatmap.py,sha256=ngqJFiOPCoExPKv-lHvgB1XCSr9fF_jSKmx4VwjUUXQ,4961
87
- AeroViz/plot/templates/__pycache__/__init__.cpython-312.pyc,sha256=cEaDKw3ki3bonQqUSlOtx4QlBapOwtf94Js6-MsmlXU,413
88
- AeroViz/plot/templates/__pycache__/ammonium_rich.cpython-312.pyc,sha256=tW-9QEbe8izig5WwGm8ebF8JfO8CewYK7Z7S9vwvftg,2201
89
- AeroViz/plot/templates/__pycache__/contour.cpython-312.pyc,sha256=tESFxENn3t2z2HnTOyjB5Ly5M11ZoTW62Xa6TuNGe_g,3550
90
- AeroViz/plot/templates/__pycache__/corr_matrix.cpython-312.pyc,sha256=ZQeEneW3spShF7H0Qv4rEKnVnlO3juyTYyKHIeM5etY,6130
91
- AeroViz/plot/templates/__pycache__/diurnal_pattern.cpython-312.pyc,sha256=c4NbxdZY8zigW8ww7dP0o6KB-Qarh2jr0r7A679tqnY,3422
92
- AeroViz/plot/templates/__pycache__/koschmieder.cpython-312.pyc,sha256=pz6TJkdzVynU-5pbkFu60aRIjyO4oZ_8UFKyDBE2QcA,5660
93
- AeroViz/plot/templates/__pycache__/metal_heatmap.cpython-312.pyc,sha256=ErYLK7s2mJr7W66-N4z5V8EWtlHR4pmBNXQ0NGibAyg,7003
87
+ AeroViz/plot/templates/__pycache__/__init__.cpython-312.pyc,sha256=m7hY47B2e2FfSA9oZu_U5FJPTQXgeQbSjcVYrjartPU,413
88
+ AeroViz/plot/templates/__pycache__/ammonium_rich.cpython-312.pyc,sha256=ZTi3fYDgcTGt5ETR3M_VF8w6eOQWNmSFQa2H8P2TSxc,2201
89
+ AeroViz/plot/templates/__pycache__/contour.cpython-312.pyc,sha256=qhxEdahrPwMPXNptm1PIqK5d9CHvsBg7z5Qbro1J6UQ,3550
90
+ AeroViz/plot/templates/__pycache__/corr_matrix.cpython-312.pyc,sha256=qTTjU_5rMSY0RuHcX80Gftx27sOXTetP7RI1F1yukwY,6130
91
+ AeroViz/plot/templates/__pycache__/diurnal_pattern.cpython-312.pyc,sha256=Jsmd-xZyxE0qUkhuSSz5Y2pz_-5UPniBSIaS6fGnWpo,3422
92
+ AeroViz/plot/templates/__pycache__/koschmieder.cpython-312.pyc,sha256=t08RvcKhtrQZKVxiA6l72zJE11H8C419mLXxkNDCjWc,5660
93
+ AeroViz/plot/templates/__pycache__/metal_heatmap.cpython-312.pyc,sha256=BAXipTYX12KTKtfPJuXnnfuuKPSROSZ198MJlafR5uo,7003
94
94
  AeroViz/plot/timeseries/__init__.py,sha256=LQ_aE32pvp5ouC--BRa0NwSJ48DYO3rFaOt4AKGmn_s,50
95
95
  AeroViz/plot/timeseries/template.py,sha256=ey16q66UAOLhXGKHAPGbRp-QD3J6GkF_cXhkrRIybS8,1472
96
96
  AeroViz/plot/timeseries/timeseries.py,sha256=SnGxPceWXSI43iajfsOW2sUpQdh9wjZsUuAUEhJ-f-Y,16170
97
- AeroViz/plot/timeseries/__pycache__/__init__.cpython-312.pyc,sha256=3KoXQXNmGGEf6swZCOMmwM7k0LNqkSXxK53ij7mu07o,221
98
- AeroViz/plot/timeseries/__pycache__/template.cpython-312.pyc,sha256=sUvXFYCCD7M94Wj0iExobC0n1NhIwywq_hb9JfUi7Do,1919
99
- AeroViz/plot/timeseries/__pycache__/timeseries.cpython-312.pyc,sha256=ZOrVNP5BIm3ZcZhLCb1xeh1kEV8DDQVynqpc1jaBJjo,20489
97
+ AeroViz/plot/timeseries/__pycache__/__init__.cpython-312.pyc,sha256=uzs7cFJZ3wjvVQ55ghEFKr9xjDeIM6rwFbjy7JaAJ9M,221
98
+ AeroViz/plot/timeseries/__pycache__/template.cpython-312.pyc,sha256=LnuPTuCOLXPdh_cHJhNv6Y8HsW5h43EkLyomWkMGzUU,1919
99
+ AeroViz/plot/timeseries/__pycache__/timeseries.cpython-312.pyc,sha256=332lXTWiT4GW5Tup_saWJAPIjgnH1qgrqSQ1MfrUfUw,20489
100
100
  AeroViz/plot/utils/__init__.py,sha256=sxp3nfUnyVIIXYd-F874gEHkhQiDnMPDE1nJ_Z98270,104
101
101
  AeroViz/plot/utils/_color.py,sha256=Vhjo-v4UWFME1JbbBR_Ro8FRj6dHB2O5Sud_9lpdu_U,2797
102
102
  AeroViz/plot/utils/_unit.py,sha256=Abum0WDnq08DzkSoxkKvBc0mYKo8izIDmgduPo9Q27A,1671
@@ -104,66 +104,66 @@ AeroViz/plot/utils/fRH.json,sha256=t-2ux4TLOYAB-4jJ72LSM4jv1jk9XkaxKYNMDepMHIg,6
104
104
  AeroViz/plot/utils/plt_utils.py,sha256=JYYtmEKoKqvZ8mr3QEHdYcWabaBMhNWkgEmeBTdZZ-g,3438
105
105
  AeroViz/plot/utils/sklearn_utils.py,sha256=hKFfkVkYLRxkIDKvO9COHXwhjD_UWqQigdT3mDToni4,2098
106
106
  AeroViz/plot/utils/units.json,sha256=JKcqvLA6dkc8REV_NhX85Jl9LA4iAZxzw9RJp6JTla0,2965
107
- AeroViz/plot/utils/__pycache__/__init__.cpython-312.pyc,sha256=1BkrL0vQGD94XecQGKJmkU1tqZKmYF-bg0zmxlPvdck,292
108
- AeroViz/plot/utils/__pycache__/_color.cpython-312.pyc,sha256=qLPdO-s2jFR6Pcx0EWkBf6XImKZiWHSM-cpckSY9tSM,3959
109
- AeroViz/plot/utils/__pycache__/_unit.cpython-312.pyc,sha256=-MNHN-nLTMiJ4N43N6CIWHFJ7e_JxSoaWppYK5_Foi4,3427
110
- AeroViz/plot/utils/__pycache__/plt_utils.cpython-312.pyc,sha256=t-1KdKd5dXVqop74LLnXxBFQzUgMcaH8xMXwzAqPILY,4670
111
- AeroViz/plot/utils/__pycache__/sklearn_utils.cpython-312.pyc,sha256=UhWjMgkXPmd895D0_xxlmEV1B4elw_tbIrWz9Ql5IR8,3018
112
- AeroViz/rawDataReader/__init__.py,sha256=sLsHgVk3JV4su-KrMbNwCSZxCoRzwXdnnp7qgGKeyew,4913
113
- AeroViz/rawDataReader/__pycache__/__init__.cpython-312.pyc,sha256=KX36BqWxl20bDygwOwcWkPrsr_eMUx6-VAJ7Qx15MnI,5528
107
+ AeroViz/plot/utils/__pycache__/__init__.cpython-312.pyc,sha256=T5PVG3dr2a9I13fe7B_gnit4JH6OvGyKyHWdCaEYnmk,292
108
+ AeroViz/plot/utils/__pycache__/_color.cpython-312.pyc,sha256=GoKVOuUIq6SX-wsy8zRN0lrYwZYJNkSLbIptEkTqNSo,3959
109
+ AeroViz/plot/utils/__pycache__/_unit.cpython-312.pyc,sha256=_tMbYRJAWNPPu6Vzw1i57nMGnQK9qjn1Iza5hGlS6kE,3427
110
+ AeroViz/plot/utils/__pycache__/plt_utils.cpython-312.pyc,sha256=NwoX2bE8AYHVRBWX2BidbvxMx-445u6vC9nXUieQaoY,4670
111
+ AeroViz/plot/utils/__pycache__/sklearn_utils.cpython-312.pyc,sha256=eRT8kPjc9fTi_mQaChfi4RxQS0t0aCPYkp8xZ0Kul0A,3018
112
+ AeroViz/rawDataReader/__init__.py,sha256=2EFnj-aVQj7epo6PlJnKlYI09BB-2-YRKCt2Y7nzIT0,4891
113
+ AeroViz/rawDataReader/__pycache__/__init__.cpython-312.pyc,sha256=74GHMN2iPysDyg6J-xJYyw2Pv7C95m9kk03D8oe5OJA,5519
114
114
  AeroViz/rawDataReader/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
115
- AeroViz/rawDataReader/config/supported_instruments.py,sha256=RR2TPome27O3ERNxQ043boDMfvWG9BHvhpGJ6VQC5gw,5988
116
- AeroViz/rawDataReader/config/__pycache__/__init__.cpython-312.pyc,sha256=yWIsOTc7COwAmu1YJkZgqpFGDw2K8PtEjsKaUEQy24g,171
117
- AeroViz/rawDataReader/config/__pycache__/supported_instruments.cpython-312.pyc,sha256=PD1356y6w5_RbPEZ8k4ftsnaHnmUxMbRk5P5gXHec_s,5197
118
- AeroViz/rawDataReader/core/__init__.py,sha256=y5fWsAVcKVMQnBkxEvX_UGGZZdHOXsIy4Inmu04Nctk,12973
119
- AeroViz/rawDataReader/core/logger.py,sha256=YoIBfg99LM4XcVksaCKlSIOOA63ZBfxmPQ6oKkm1Stw,3295
115
+ AeroViz/rawDataReader/config/supported_instruments.py,sha256=aMdYwl5zTqukuJT1BQT-kj_PtplL0xeJBIRoO-FYcFo,5983
116
+ AeroViz/rawDataReader/config/__pycache__/__init__.cpython-312.pyc,sha256=QkaSeckdNGkjcYt67Vkgc9k7TPxVLl7d3uSDftIw8cM,171
117
+ AeroViz/rawDataReader/config/__pycache__/supported_instruments.cpython-312.pyc,sha256=odu9ktO0Lamc91ZJFMCDwwqU3gjntgxqHr2SZANFljA,5192
118
+ AeroViz/rawDataReader/core/__init__.py,sha256=7atDzK_SKfMWpTKPbfRO4r7l1vvsPOQ1ZcAmP-LEuuE,13259
119
+ AeroViz/rawDataReader/core/logger.py,sha256=Mb7souR4ncbvWxi7mBjF3OflG1ZOI1l3atGkbgy1YLo,5809
120
120
  AeroViz/rawDataReader/core/qc.py,sha256=tFIVsfph8yZIK6NRKQxaZYHcruJclriKSvR0oC12T0Q,5698
121
- AeroViz/rawDataReader/core/__pycache__/__init__.cpython-312.pyc,sha256=oyAWxuTsuh30gA6yHDtJbcG8WdREzFiAQYsjYgbGSVk,19689
122
- AeroViz/rawDataReader/core/__pycache__/logger.cpython-312.pyc,sha256=qcq94Bt530o8IH82_3h7w041dmruOlbmozd8Xwd8ozk,5693
123
- AeroViz/rawDataReader/core/__pycache__/qc.cpython-312.pyc,sha256=W7TYRGuMpj2gqdOSUzJxC4YaQ1RBUSpzD8pPLXpn6hg,8271
124
- AeroViz/rawDataReader/script/AE33.py,sha256=FbbFJ93aLVjA8k2QZ_fKcI9uXoux2k0AL3O73iY879I,1278
121
+ AeroViz/rawDataReader/core/__pycache__/__init__.cpython-312.pyc,sha256=2e2MGK-KzcrdqtZ9JmW5L_du1qT253UG_6IDePMne1I,19929
122
+ AeroViz/rawDataReader/core/__pycache__/logger.cpython-312.pyc,sha256=9PWfUZo_XvimSJWx1Se7IKKtomhI7UkVjN0W6cwnNWY,8937
123
+ AeroViz/rawDataReader/core/__pycache__/qc.cpython-312.pyc,sha256=djEzBJurrp6qCwnzJAq_O9ZSi0ix5i_qL_G7rElajwc,8271
124
+ AeroViz/rawDataReader/script/AE33.py,sha256=EAC1neDgOaWxJyf-YgrAYUWU85NtAScbblFoSlmFtIU,1283
125
125
  AeroViz/rawDataReader/script/AE43.py,sha256=GjcICBJ3nIANyMd4kovteBUtkyCGLTos07BczgSCuVE,1231
126
- AeroViz/rawDataReader/script/APS_3321.py,sha256=x75G72Xl0vElr6Njbv8SlOcosAHNozseaJzAxVmfXyI,1697
126
+ AeroViz/rawDataReader/script/APS.py,sha256=ByA1Dw5mMMNKgZ0vUMNhJOLGIKhBFGEcR6i-UJl3ddU,1427
127
127
  AeroViz/rawDataReader/script/Aurora.py,sha256=xcLKE5dlsqc-apK3n-j_8OZ0kF_f4B08ptutaAPiGLQ,1509
128
128
  AeroViz/rawDataReader/script/BC1054.py,sha256=tuDyq8M5BPbmu1yJr9zXYS2piMGz08yTQXGT6tK9jxA,1675
129
129
  AeroViz/rawDataReader/script/EPA.py,sha256=MESkZHHr60kyHFSLqSeSjzSrx_ya-GqFhFGlPIHMLeI,1649
130
130
  AeroViz/rawDataReader/script/GRIMM.py,sha256=-D4U83ihjAqcvOAnk7NET59IZfV1JzPYKRQjrIQyBDM,846
131
131
  AeroViz/rawDataReader/script/IGAC.py,sha256=i6WT3rX0n0e4hq7NfWN6tVwCuKAeV9ARxPkXZSbQj74,2387
132
132
  AeroViz/rawDataReader/script/MA350.py,sha256=EfPTFhgDAjI7r0G6kW7pjog-4MBOnvW0cyFqIkCxEP8,1597
133
- AeroViz/rawDataReader/script/Minion.py,sha256=ZOkTqxc1fQtp3zUr9qv8kdX1zFsYYX8RKabWpZmk-Iw,7826
133
+ AeroViz/rawDataReader/script/Minion.py,sha256=lTn7VMmApmkGtbDMkTVXIGFp51Dw99Cd5c0bMQPIFl0,7872
134
134
  AeroViz/rawDataReader/script/NEPH.py,sha256=HkGcjFPpcXM9OnrcV6sMp0G5wYnhJP1NbTMQUb1zVLc,3233
135
- AeroViz/rawDataReader/script/OCEC.py,sha256=E_8_KPoYKZROLD8tWRMf5UyRKxusi_9Tj9Ex2EStM5E,3395
136
- AeroViz/rawDataReader/script/SMPS.py,sha256=R47DnSs0gCqlLFcZRuQHCrWkZDxGU36ta__WmBhSKis,3272
135
+ AeroViz/rawDataReader/script/OCEC.py,sha256=jEyVhz58iIZAV2VJQa0LVsAcZFgeNW6AaVzR26LVJ9k,3411
136
+ AeroViz/rawDataReader/script/SMPS.py,sha256=5mc-2PSZh5mUjTvcZJMKzugNwD_h43JIhqnScYVEpZg,3285
137
137
  AeroViz/rawDataReader/script/TEOM.py,sha256=ID20CMi8z6pOjiGQLdCuCRWlcDu46SAP3MviiSUZE5w,2103
138
138
  AeroViz/rawDataReader/script/VOC.py,sha256=GUme72ZyjSzREsFNUgOV_OCESIVJBXY9KrKP1c9Av7I,1248
139
139
  AeroViz/rawDataReader/script/XRF.py,sha256=SU1-D94GkwdkjlNXcyXbwQG1tOYCpeL6GTVkaLBHc-s,187
140
- AeroViz/rawDataReader/script/__init__.py,sha256=s3c797Q8EAGcJCxVRTA-KdHie-vHLNYbMxwa5c0qz-I,214
141
- AeroViz/rawDataReader/script/__pycache__/AE33.cpython-312.pyc,sha256=3SyDQ8L7drzd6IGy5yaSDBfTCKUzU1TSiknPTJfcesA,2418
142
- AeroViz/rawDataReader/script/__pycache__/AE43.cpython-312.pyc,sha256=kN3YXi4VqPWeI8McAoojCgm0cx-AyYYo2D6GJnTuDfY,2198
143
- AeroViz/rawDataReader/script/__pycache__/APS_3321.cpython-312.pyc,sha256=jz4k3vri_AJ04cDsV1N_LjWYwBChIO10M2ePjDxjpgE,2629
144
- AeroViz/rawDataReader/script/__pycache__/Aurora.cpython-312.pyc,sha256=XaQnsxJfuuwlY6RLZ5gfdonbvJJeC3NebDfdo6i_5jM,2662
145
- AeroViz/rawDataReader/script/__pycache__/BC1054.cpython-312.pyc,sha256=JMzuADidB-reoYk37gAXWKyVr5ZJljdnb4GOcYjfIS4,2455
146
- AeroViz/rawDataReader/script/__pycache__/EPA.cpython-312.pyc,sha256=rmanXlpqFrqlLRLHS2rHgsqz6OggqaWbB3szUviFhpI,2343
147
- AeroViz/rawDataReader/script/__pycache__/GRIMM.cpython-312.pyc,sha256=G-YYhi5K52lQWn0MysH7h2Q6j7Zm-y9O1xr48apY-48,1812
148
- AeroViz/rawDataReader/script/__pycache__/IGAC.cpython-312.pyc,sha256=0TpCZ4HmuSnYu5fXZgnYuvdrL6mt0XzEg3xwQd6wz2M,3645
149
- AeroViz/rawDataReader/script/__pycache__/MA350.cpython-312.pyc,sha256=aWaSnSH3e1_fja0JOk9OZJ_3pJLTwdLixEJDbdM6Hm4,2074
150
- AeroViz/rawDataReader/script/__pycache__/Minion.cpython-312.pyc,sha256=DqIdTVQxSSb9zlly04hLEa3M0FQ8GppQtw8O2fG_LBw,10179
151
- AeroViz/rawDataReader/script/__pycache__/NEPH.cpython-312.pyc,sha256=nrf7arFOr_bMr0Hg1hAwXBDNHQVjwhN2BOD3EYWZv-U,4556
152
- AeroViz/rawDataReader/script/__pycache__/OCEC.cpython-312.pyc,sha256=58BrJXvipic-63f59OJ5aPMk_Eas4qwTf2dP7qNXIF0,4155
153
- AeroViz/rawDataReader/script/__pycache__/SMPS.cpython-312.pyc,sha256=IBP5_NOELzt20tQLsH09FV-Ibw1sDqWaWROXaqvwyMc,5733
154
- AeroViz/rawDataReader/script/__pycache__/TEOM.cpython-312.pyc,sha256=fVEoGG54Da8aRQV_4miQNY9-JPoRvp_BLOJRYHuoYPg,3329
155
- AeroViz/rawDataReader/script/__pycache__/VOC.cpython-312.pyc,sha256=tGUWpvBnHM5qR8iV2eX9gb9jghT8_bfxL06X1QvVTQQ,2493
156
- AeroViz/rawDataReader/script/__pycache__/XRF.cpython-312.pyc,sha256=MgnOMGIbMlVmULpuJJcp9vzrG8RGJ_l9ODYoloBWjvY,668
157
- AeroViz/rawDataReader/script/__pycache__/__init__.cpython-312.pyc,sha256=1ncf4h9VIWZhRjqpdRlQ7meg7UEuG0D-omR-h9T48D8,299
140
+ AeroViz/rawDataReader/script/__init__.py,sha256=uV0SLBTJ2_KYJUaqKttTcZrLN1KCYqVZLobOLYZ0V5U,209
141
+ AeroViz/rawDataReader/script/__pycache__/AE33.cpython-312.pyc,sha256=NJ-RXtT7nty79f4k186Fce5N7AmmmzdQPflKec7Xe8g,2448
142
+ AeroViz/rawDataReader/script/__pycache__/AE43.cpython-312.pyc,sha256=njqOVElPCvzbT0G1oDIVd2nhGFzA7hv5DIfi5IrVlQE,2198
143
+ AeroViz/rawDataReader/script/__pycache__/APS.cpython-312.pyc,sha256=zHXlZqIjlEWAIE9RjB8kg3U4KGj8ITIpmfV5hJV-r1Q,2664
144
+ AeroViz/rawDataReader/script/__pycache__/Aurora.cpython-312.pyc,sha256=qkeFmzXlkVccBPjqvAi-OwFc5oeSpZWdgL9_nnVo96o,2662
145
+ AeroViz/rawDataReader/script/__pycache__/BC1054.cpython-312.pyc,sha256=M2RyKsy22YfsWfUWx6fkBnlxWJQR1UesPwz2S1swaxA,2455
146
+ AeroViz/rawDataReader/script/__pycache__/EPA.cpython-312.pyc,sha256=nuhlX25YYNygVqnzID3L7_SlAF4N58jIp6L7ReoAQCs,2343
147
+ AeroViz/rawDataReader/script/__pycache__/GRIMM.cpython-312.pyc,sha256=B3Z77CWYrgvSTYyTFffDrW0XExo8C_rFDe_su6VN0gk,1812
148
+ AeroViz/rawDataReader/script/__pycache__/IGAC.cpython-312.pyc,sha256=WIzqP5LKkCDktj3M5glD1E4ysTg8y6Y6mvSEe-nS_fQ,3645
149
+ AeroViz/rawDataReader/script/__pycache__/MA350.cpython-312.pyc,sha256=MCkhH8bHu-iWksem4DmGwhOX9g7GBBZ69LbYLqwGk4c,2074
150
+ AeroViz/rawDataReader/script/__pycache__/Minion.cpython-312.pyc,sha256=GUh3seuxUASm32Q_hBy1_ObLfwORNqLxOQFhdnzHwEs,10204
151
+ AeroViz/rawDataReader/script/__pycache__/NEPH.cpython-312.pyc,sha256=IxVs-5zZHNedq1Ha4EXA4DjSwPK-DPuA_wBYhStgsv4,4556
152
+ AeroViz/rawDataReader/script/__pycache__/OCEC.cpython-312.pyc,sha256=sh1jZKsxfcSouiEzTsO91TOcpua2wxT23cmyOzHEt4s,4155
153
+ AeroViz/rawDataReader/script/__pycache__/SMPS.cpython-312.pyc,sha256=vjjLhDmplHP3GuGiTzXtBEO0l9p333xny16MlnAyMwc,5820
154
+ AeroViz/rawDataReader/script/__pycache__/TEOM.cpython-312.pyc,sha256=11epZ5Jg_uGNeOLiu5n8m0tw-4Yl-Y4aI18Nbo80OI8,3329
155
+ AeroViz/rawDataReader/script/__pycache__/VOC.cpython-312.pyc,sha256=I3J-Tlc_H6bzrkAoZL5pI_H_ouZ8Ibun0Wq2buJbA2U,2493
156
+ AeroViz/rawDataReader/script/__pycache__/XRF.cpython-312.pyc,sha256=FnOuOxsB02FYVZv0Mr3KPof0SCiSzrEVwIw9vOwirpI,668
157
+ AeroViz/rawDataReader/script/__pycache__/__init__.cpython-312.pyc,sha256=bqi0YtD_BJg7BOvpXvypXuWDk9q9r5iy4ipEpjVeICs,294
158
158
  AeroViz/tools/__init__.py,sha256=3yC7clSoIAs7tvRy6M0BEM_N-0Fn2najLP7njT0ogME,74
159
159
  AeroViz/tools/database.py,sha256=05VzjJyhlRrhsZdhfFQ__7CxGm4MdFekLjz3_Is5h9U,3430
160
160
  AeroViz/tools/dataclassifier.py,sha256=_wpv0PlZ5EGkcNqHxfFtdEsYvHP5FVE8sMZXikhm_YE,4492
161
161
  AeroViz/tools/dataprinter.py,sha256=Jq2Yztpa9YCOeLDVTrRs7PhSdNIPhEAexVj1YSuJ7hY,2249
162
- AeroViz/tools/__pycache__/__init__.cpython-312.pyc,sha256=HzIaKaqyL3T8dYCDWClbk15R48ClwJDIJuLbiZ7ky1o,254
163
- AeroViz/tools/__pycache__/database.cpython-312.pyc,sha256=RMVg57UycX_pkF8Sz_6Ks4xAkD5Wy4_sq15bd1d2ZV8,3605
164
- AeroViz/tools/__pycache__/dataclassifier.cpython-312.pyc,sha256=p_JA478pdI_8kHNjAeI0P3VEmi7FXQgelBwofEdZpL4,6801
165
- AeroViz-0.1.11.dist-info/LICENSE,sha256=E-679GpGGkp3irmtuJXiT7R4cNUA4cmsH6Q7QUgPf5U,1069
166
- AeroViz-0.1.11.dist-info/METADATA,sha256=tbtl-FdLyhD3WTnnc2SY5kI-G9MdSWPDeQizajLc3Fg,5923
167
- AeroViz-0.1.11.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
168
- AeroViz-0.1.11.dist-info/top_level.txt,sha256=BYsmTst_o4FZOKRP1XIvIMlN6mMTTXNfnSToL2_nVbQ,8
169
- AeroViz-0.1.11.dist-info/RECORD,,
162
+ AeroViz/tools/__pycache__/__init__.cpython-312.pyc,sha256=90jf5A4wGSIKZ9KVtB1AlY5glm_gf_tyVmGU3tczLXI,254
163
+ AeroViz/tools/__pycache__/database.cpython-312.pyc,sha256=mVtYd5jXm04bLyGg6QVBD6b8ebd-UZtOUU9KzoxTpjw,3605
164
+ AeroViz/tools/__pycache__/dataclassifier.cpython-312.pyc,sha256=kmxMueg1IW5tKELGAQMhEoPtk7GBkfju-xU35REto7E,6801
165
+ AeroViz-0.1.12.dist-info/LICENSE,sha256=E-679GpGGkp3irmtuJXiT7R4cNUA4cmsH6Q7QUgPf5U,1069
166
+ AeroViz-0.1.12.dist-info/METADATA,sha256=yin7FLd3KuzHVs2L1CO36EFwT-rMuergmkzwv-5_qVE,5914
167
+ AeroViz-0.1.12.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
168
+ AeroViz-0.1.12.dist-info/top_level.txt,sha256=BYsmTst_o4FZOKRP1XIvIMlN6mMTTXNfnSToL2_nVbQ,8
169
+ AeroViz-0.1.12.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.3.0)
2
+ Generator: setuptools (75.6.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5