halib 0.1.91__py3-none-any.whl → 0.2.21__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 (72) hide show
  1. halib/__init__.py +12 -6
  2. halib/common/__init__.py +0 -0
  3. halib/common/common.py +207 -0
  4. halib/common/rich_color.py +285 -0
  5. halib/common.py +53 -10
  6. halib/exp/__init__.py +0 -0
  7. halib/exp/core/__init__.py +0 -0
  8. halib/exp/core/base_config.py +167 -0
  9. halib/exp/core/base_exp.py +147 -0
  10. halib/exp/core/param_gen.py +189 -0
  11. halib/exp/core/wandb_op.py +117 -0
  12. halib/exp/data/__init__.py +0 -0
  13. halib/exp/data/dataclass_util.py +41 -0
  14. halib/exp/data/dataset.py +208 -0
  15. halib/exp/data/torchloader.py +165 -0
  16. halib/exp/perf/__init__.py +0 -0
  17. halib/exp/perf/flop_calc.py +190 -0
  18. halib/exp/perf/gpu_mon.py +58 -0
  19. halib/exp/perf/perfcalc.py +440 -0
  20. halib/exp/perf/perfmetrics.py +137 -0
  21. halib/exp/perf/perftb.py +778 -0
  22. halib/exp/perf/profiler.py +507 -0
  23. halib/exp/viz/__init__.py +0 -0
  24. halib/exp/viz/plot.py +754 -0
  25. halib/filetype/csvfile.py +3 -9
  26. halib/filetype/ipynb.py +61 -0
  27. halib/filetype/jsonfile.py +0 -3
  28. halib/filetype/textfile.py +0 -1
  29. halib/filetype/videofile.py +119 -3
  30. halib/filetype/yamlfile.py +16 -1
  31. halib/online/projectmake.py +7 -6
  32. halib/online/tele_noti.py +165 -0
  33. halib/research/base_exp.py +75 -18
  34. halib/research/core/__init__.py +0 -0
  35. halib/research/core/base_config.py +144 -0
  36. halib/research/core/base_exp.py +157 -0
  37. halib/research/core/param_gen.py +108 -0
  38. halib/research/core/wandb_op.py +117 -0
  39. halib/research/data/__init__.py +0 -0
  40. halib/research/data/dataclass_util.py +41 -0
  41. halib/research/data/dataset.py +208 -0
  42. halib/research/data/torchloader.py +165 -0
  43. halib/research/dataset.py +6 -7
  44. halib/research/flop_csv.py +34 -0
  45. halib/research/flops.py +156 -0
  46. halib/research/metrics.py +4 -0
  47. halib/research/mics.py +59 -1
  48. halib/research/perf/__init__.py +0 -0
  49. halib/research/perf/flop_calc.py +190 -0
  50. halib/research/perf/gpu_mon.py +58 -0
  51. halib/research/perf/perfcalc.py +363 -0
  52. halib/research/perf/perfmetrics.py +137 -0
  53. halib/research/perf/perftb.py +778 -0
  54. halib/research/perf/profiler.py +301 -0
  55. halib/research/perfcalc.py +60 -35
  56. halib/research/perftb.py +2 -1
  57. halib/research/plot.py +480 -218
  58. halib/research/viz/__init__.py +0 -0
  59. halib/research/viz/plot.py +754 -0
  60. halib/system/_list_pc.csv +6 -0
  61. halib/system/filesys.py +60 -20
  62. halib/system/path.py +106 -0
  63. halib/utils/dict.py +9 -0
  64. halib/utils/list.py +12 -0
  65. halib/utils/video.py +6 -0
  66. halib-0.2.21.dist-info/METADATA +192 -0
  67. halib-0.2.21.dist-info/RECORD +109 -0
  68. halib-0.1.91.dist-info/METADATA +0 -201
  69. halib-0.1.91.dist-info/RECORD +0 -61
  70. {halib-0.1.91.dist-info → halib-0.2.21.dist-info}/WHEEL +0 -0
  71. {halib-0.1.91.dist-info → halib-0.2.21.dist-info}/licenses/LICENSE.txt +0 -0
  72. {halib-0.1.91.dist-info → halib-0.2.21.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,6 @@
1
+ pc_name;abbr;working_disk
2
+ DESKTOP-JQD9K01;MainPC;E:
3
+ DESKTOP-5IRHU87;MSI_Laptop;D:
4
+ DESKTOP-96HQCNO;4090_SV;E:
5
+ DESKTOP-Q2IKLC0;4GPU_SV;E:
6
+ DESKTOP-QNS3DNF;1GPU_SV;D:
halib/system/filesys.py CHANGED
@@ -2,13 +2,16 @@ import glob
2
2
  import os
3
3
  import shutil
4
4
  from distutils.dir_util import copy_tree
5
+ from concurrent.futures import ThreadPoolExecutor
5
6
 
7
+ COMMON_IMG_EXT = ["jpg", "jpeg", "png", "bmp", "tiff", "gif"]
8
+ COMMON_VIDEO_EXT = ["mp4", "avi", "mov", "mkv", "flv", "wmv"]
6
9
 
7
10
  def is_exist(path):
8
11
  return os.path.exists(path)
9
12
 
10
13
 
11
- def is_directory(path):
14
+ def is_dir(path):
12
15
  return os.path.isdir(path)
13
16
 
14
17
 
@@ -17,7 +20,7 @@ def get_current_dir():
17
20
 
18
21
 
19
22
  def change_current_dir(new_dir):
20
- if is_directory(new_dir):
23
+ if is_dir(new_dir):
21
24
  os.chdir(new_dir)
22
25
 
23
26
 
@@ -64,27 +67,64 @@ def list_files(directory):
64
67
  )
65
68
  return files
66
69
 
67
-
68
- def filter_files_by_extension(directory, ext, recursive=True):
69
- if is_directory(directory):
70
- result_files = []
70
+ def filter_files_by_extension(directory, ext=None, recursive=True, num_workers=0):
71
+ """
72
+ Filters files using glob and multithreading.
73
+ If ext is None, returns ALL files.
74
+
75
+ Args:
76
+ directory (str): Path to search.
77
+ ext (str, list, or None): Extension(s) to find. If None, return all files.
78
+ recursive (bool): Whether to search subdirectories.
79
+ num_workers (int): Number of threads for checking file existence.
80
+ """
81
+ assert os.path.exists(directory) and os.path.isdir(
82
+ directory
83
+ ), "Directory does not exist"
84
+
85
+ # 1. Normalize extensions to a tuple (only if ext is provided)
86
+ extensions = None
87
+ if ext is not None:
71
88
  if isinstance(ext, list):
72
- ext_list = ext
89
+ extensions = tuple(ext)
73
90
  else:
74
- ext_list = [ext]
75
- if not recursive:
76
- filter_pattern = f"{directory}/*"
91
+ extensions = (ext,)
92
+
93
+ # 2. Define pattern
94
+ pattern = (
95
+ os.path.join(directory, "**", "*")
96
+ if recursive
97
+ else os.path.join(directory, "*")
98
+ )
99
+
100
+ # 3. Helper function for the thread workers
101
+ def validate_file(path):
102
+ if os.path.isfile(path):
103
+ return path
104
+ return None
105
+
106
+ result_files = []
107
+ if num_workers <= 0:
108
+ num_workers = os.cpu_count() or 4
109
+ # 4. Initialize ThreadPool with user-defined workers
110
+ with ThreadPoolExecutor(max_workers=num_workers) as executor:
111
+ # Step A: Get the iterator (lazy evaluation)
112
+ all_paths = glob.iglob(pattern, recursive=recursive)
113
+
114
+ # Step B: Apply Filter
115
+ if extensions is None:
116
+ # If ext is None, we skip the endswith check and pass everything
117
+ candidate_paths = all_paths
77
118
  else:
78
- filter_pattern = f"{directory}/**/*"
79
-
80
- for ext_item in ext_list:
81
- ext_filter = f"{filter_pattern}.{ext_item}"
82
- files = glob.glob(filter_pattern, recursive=True)
83
- files = [f for f in files if is_file(f) and f.endswith(ext_item)]
84
- result_files.extend(files)
85
- return result_files
86
- else:
87
- raise OSError("Directory not exists")
119
+ # Filter by extension string FIRST (Fast CPU op)
120
+ candidate_paths = (p for p in all_paths if p.endswith(extensions))
121
+
122
+ # Step C: Parallelize the disk check (Slow I/O op)
123
+ for result in executor.map(validate_file, candidate_paths):
124
+ if result:
125
+ result_files.append(result)
126
+
127
+ return result_files
88
128
 
89
129
 
90
130
  def is_file(path):
halib/system/path.py ADDED
@@ -0,0 +1,106 @@
1
+ from ..common.common import *
2
+ from ..filetype import csvfile
3
+ import pandas as pd
4
+ import platform
5
+ import re # <--- [FIX 1] Added missing import
6
+ import csv
7
+ from importlib import resources
8
+
9
+ PC_TO_ABBR = {}
10
+ ABBR_DISK_MAP = {}
11
+ pc_df = None
12
+ cPlatform = platform.system().lower()
13
+
14
+
15
+ def load_pc_meta_info():
16
+ # 1. Define the package where the file lives (dotted notation)
17
+ # Since the file is in 'halib/system/', the package is 'halib.system'
18
+ package_name = "halib.system"
19
+ file_name = "_list_pc.csv"
20
+
21
+ # 2. Locate the file
22
+ csv_path = resources.files(package_name).joinpath(file_name)
23
+ global PC_TO_ABBR, ABBR_DISK_MAP, pc_df
24
+ pc_df = pd.read_csv(csv_path, sep=';', encoding='utf-8')
25
+ PC_TO_ABBR = dict(zip(pc_df['pc_name'], pc_df['abbr']))
26
+ ABBR_DISK_MAP = dict(zip(pc_df['abbr'], pc_df['working_disk']))
27
+ # pprint("Loaded PC meta info:")
28
+ # pprint(ABBR_DISK_MAP)
29
+ # pprint(PC_TO_ABBR)
30
+ # ! must be called at the module load time
31
+ load_pc_meta_info()
32
+
33
+
34
+ def list_PCs(show=True):
35
+ global pc_df
36
+ if show:
37
+ csvfile.fn_display_df(pc_df)
38
+ return pc_df
39
+
40
+
41
+ def get_PC_name():
42
+ return platform.node()
43
+
44
+
45
+ def get_PC_abbr_name():
46
+ pc_name = get_PC_name()
47
+ return PC_TO_ABBR.get(pc_name, "Unknown")
48
+
49
+
50
+ def get_os_platform():
51
+ return platform.system().lower()
52
+
53
+
54
+ def get_working_disk(abbr_disk_map=ABBR_DISK_MAP):
55
+ pc_abbr = get_PC_abbr_name()
56
+ return abbr_disk_map.get(pc_abbr, None)
57
+
58
+ cDisk = get_working_disk()
59
+
60
+ # ! This funcction search for full paths in the obj and normalize them according to the current platform and working disk
61
+ # ! E.g: "E:/zdataset/DFire", but working_disk: "D:", current_platform: "windows" => "D:/zdataset/DFire"
62
+ # ! E.g: "E:/zdataset/DFire", but working_disk: "D:", current_platform: "linux" => "/mnt/d/zdataset/DFire"
63
+ def normalize_paths(obj, working_disk=cDisk, current_platform=cPlatform):
64
+ # [FIX 3] Resolve defaults inside function to be safer/cleaner
65
+ if working_disk is None:
66
+ working_disk = get_working_disk()
67
+ if current_platform is None:
68
+ current_platform = get_os_platform()
69
+
70
+ # [FIX 2] If PC is unknown, working_disk is None. Return early to avoid crash.
71
+ if working_disk is None:
72
+ return obj
73
+
74
+ if isinstance(obj, dict):
75
+ for key, value in obj.items():
76
+ obj[key] = normalize_paths(value, working_disk, current_platform)
77
+ return obj
78
+ elif isinstance(obj, list):
79
+ for i, item in enumerate(obj):
80
+ obj[i] = normalize_paths(item, working_disk, current_platform)
81
+ return obj
82
+ elif isinstance(obj, str):
83
+ # Normalize backslashes to forward slashes for consistency
84
+ obj = obj.replace("\\", "/")
85
+
86
+ # Regex for Windows-style path: e.g., "E:/zdataset/DFire"
87
+ win_match = re.match(r"^([A-Z]):/(.*)$", obj)
88
+ # Regex for Linux-style path: e.g., "/mnt/e/zdataset/DFire"
89
+ lin_match = re.match(r"^/mnt/([a-z])/(.*)$", obj)
90
+
91
+ if win_match or lin_match:
92
+ rest = win_match.group(2) if win_match else lin_match.group(2)
93
+
94
+ if current_platform == "windows":
95
+ # working_disk is like "D:", so "D:/" + rest
96
+ new_path = f"{working_disk}/{rest}"
97
+ elif current_platform == "linux":
98
+ # Extract drive letter from working_disk (e.g., "D:" -> "d")
99
+ drive_letter = working_disk[0].lower()
100
+ new_path = f"/mnt/{drive_letter}/{rest}"
101
+ else:
102
+ return obj
103
+ return new_path
104
+
105
+ # For non-strings or non-path strings, return as is
106
+ return obj
halib/utils/dict.py ADDED
@@ -0,0 +1,9 @@
1
+ def flatten_dict(d, parent_key="", sep="."):
2
+ items = {}
3
+ for k, v in d.items():
4
+ key = f"{parent_key}{sep}{k}" if parent_key else k
5
+ if isinstance(v, dict):
6
+ items.update(flatten_dict(v, key, sep=sep))
7
+ else:
8
+ items[key] = v
9
+ return items
halib/utils/list.py ADDED
@@ -0,0 +1,12 @@
1
+ def subtract(list_a, list_b):
2
+ return [item for item in list_a if item not in list_b]
3
+
4
+
5
+ def union(list_a, list_b, no_duplicate=False):
6
+ if no_duplicate:
7
+ return list(set(list_a) | set(list_b))
8
+ else:
9
+ return list_a + list_b
10
+
11
+ def intersection(list_a, list_b):
12
+ return list(set(list_a) & set(list_b))
halib/utils/video.py CHANGED
@@ -23,11 +23,17 @@ class VideoUtils:
23
23
  # Get the FPS
24
24
  fps = cap.get(cv2.CAP_PROP_FPS)
25
25
 
26
+ # get frame size
27
+ width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
28
+ height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
29
+
26
30
  # Release the video capture object
27
31
  cap.release()
28
32
 
29
33
  meta_dict = {
30
34
  "video_path": video_path,
35
+ "width": width,
36
+ "height": height,
31
37
  "frame_count": frame_count,
32
38
  "fps": fps
33
39
  }
@@ -0,0 +1,192 @@
1
+ Metadata-Version: 2.4
2
+ Name: halib
3
+ Version: 0.2.21
4
+ Summary: Small library for common tasks
5
+ Author: Hoang Van Ha
6
+ Author-email: hoangvanhauit@gmail.com
7
+ Classifier: Programming Language :: Python :: 3
8
+ Classifier: License :: OSI Approved :: MIT License
9
+ Classifier: Operating System :: OS Independent
10
+ Requires-Python: >=3.9
11
+ Description-Content-Type: text/markdown
12
+ License-File: LICENSE.txt
13
+ Requires-Dist: arrow
14
+ Requires-Dist: click
15
+ Requires-Dist: dataclass-wizard
16
+ Requires-Dist: enlighten
17
+ Requires-Dist: itables
18
+ Requires-Dist: kaleido
19
+ Requires-Dist: loguru
20
+ Requires-Dist: matplotlib
21
+ Requires-Dist: more-itertools
22
+ Requires-Dist: moviepy
23
+ Requires-Dist: networkx
24
+ Requires-Dist: numpy
25
+ Requires-Dist: omegaconf
26
+ Requires-Dist: opencv-python
27
+ Requires-Dist: pandas
28
+ Requires-Dist: Pillow
29
+ Requires-Dist: plotly
30
+ Requires-Dist: Pyarrow
31
+ Requires-Dist: pycurl
32
+ Requires-Dist: pygwalker
33
+ Requires-Dist: python-telegram-bot
34
+ Requires-Dist: requests
35
+ Requires-Dist: rich
36
+ Requires-Dist: scikit-learn
37
+ Requires-Dist: seaborn
38
+ Requires-Dist: tabulate
39
+ Requires-Dist: timebudget
40
+ Requires-Dist: tqdm
41
+ Requires-Dist: tube_dl
42
+ Requires-Dist: wandb
43
+ Requires-Dist: ipynbname
44
+ Requires-Dist: typed-argument-parser
45
+ Dynamic: author
46
+ Dynamic: author-email
47
+ Dynamic: classifier
48
+ Dynamic: description
49
+ Dynamic: description-content-type
50
+ Dynamic: license-file
51
+ Dynamic: requires-dist
52
+ Dynamic: requires-python
53
+ Dynamic: summary
54
+
55
+ # 📦 Helper Package for Coding and Automation Changelog
56
+
57
+ ## v0.2.x (Experiment & Core Updates)
58
+
59
+ ### **v0.2.21**
60
+ - ✨ **New Feature:** Added `common.common.pprint_stack_trace` to print stack traces with optional custom messages and force stop capability.
61
+
62
+ - 🚀 **Improvement:** `exp.perf.profiler` - allow to export *report dict* as csv files for further analysis
63
+
64
+ ### **v0.2.19**
65
+ - ✨ **New Feature:** Added `exp.core.param_gen` to facilitate fast generation of parameter combination sweeps (grid search) using YAML configurations.
66
+
67
+ ### **v0.2.17**
68
+ - 🚀 **Improvement:** Updated `exp.perf.profiler` with an `enabled` flag for dynamic toggling.
69
+ - 🚀 **Improvement:** Added a `measure` context manager to simplify performance measuring of code blocks.
70
+
71
+ ### **v0.2.13**
72
+ - ♻️ **Refactor:** Major reorganization of packages. Renamed `research` package to `exp` (Experiment Management).
73
+ - 🚀 **Improvement:** Updated `exp/perfcalc.py` to allow saving computed performance metrics to CSV without explicitly calling `calc_perfs`.
74
+
75
+ ### **v0.2.1**
76
+ - ✨ **New Feature:** Added `eval_exp` method to `exp/base_exp` for running evaluations (e.g., model testing) after experiments conclude.
77
+
78
+ ---
79
+
80
+ ## v0.1.9x (Visualization & Generators)
81
+
82
+ ### **v0.1.99**
83
+ - ✨ **New Feature:** Added `gen_ipynb_name` to `filetype/ipynb`. Generates filenames based on the current notebook name with optional timestamps.
84
+
85
+ ### **v0.1.96**
86
+ - ✨ **New Feature:** Added `PlotHelper` class in `research/plot` for plotting training history and image grids (dataset samples or model outputs).
87
+
88
+ ### **v0.1.91**
89
+ - ✨ **New Feature:** Added `ParamGen` class to `research/param_gen` for parsing YAML files into parameter lists for hyperparameter searches.
90
+
91
+ ### **v0.1.90**
92
+ - ✨ **New Feature:** Added `zProfiler` class to `research/profiler` for measuring context/step execution time, supporting dynamic color scales in plots.
93
+
94
+ ---
95
+
96
+ ## v0.1.5x - v0.1.7x (Infrastructure & Utilities)
97
+
98
+ ### **v0.1.77**
99
+ - ✨ **New Feature:** Added `BaseExp` class in `research/base_exp` to handle common experiment tasks (performance calculation, result saving).
100
+
101
+ ### **v0.1.67**
102
+ - 🔧 **Maintenance:** Switched to **uv** for virtual environment management.
103
+ - 🚀 **Improvement:** Updated `research/perfcalc` to support both `torchmetrics` and custom metrics.
104
+
105
+ ### **v0.1.61**
106
+ - ✨ **New Feature:** Added `VideoUtils` (`util/video`) for common video handling tasks.
107
+ - ✨ **New Feature:** Added `GPUMonitor` (`util/gpu_mon`) for tracking GPU usage and performance.
108
+
109
+ ### **v0.1.59**
110
+ - 🔨 **Architecture:** Added `util/perfcalc` abstract base class. This requires implementation of specific performance calculation logic.
111
+
112
+ ### **v0.1.55**
113
+ - ✨ **New Feature:** Added `util/dataclass_util` for dynamic creation of `dataclass` objects from dictionaries or YAML (supports nested structures).
114
+
115
+ ### **v0.1.52**
116
+ - ✨ **New Feature:** Added `research/perftb` module for managing experiment performance tables (filtering by dataset, metric, etc.).
117
+
118
+ ### **v0.1.50**
119
+ - ✨ **New Feature:** Added `pprint_local_path` to print clickable file URIs for local paths.
120
+ - ✨ **New Feature:** Added `research` package containing `benchquery` for dataframe benchmarking.
121
+ - ✨ **New Feature:** Added `wandb` module for offline syncing and batch clearing of Weights & Biases runs.
122
+
123
+ ---
124
+
125
+ ## v0.1.4x (Display & formatting)
126
+
127
+ ### **v0.1.47**
128
+ - ✨ **New Feature:** Added `pprint_box` to print objects or strings inside a decorative box frame.
129
+
130
+ ### **v0.1.46**
131
+ - 🐛 **Fix:** Filtered `UserWarning: Unable to import Axes3D`.
132
+ - 🚀 **Improvement:** Added `auto_wrap_text` to `fn_display_df` to prevent long text overflow in tables.
133
+
134
+ ### **v0.1.42**
135
+ - ✨ **New Feature:** Added `rich_color.py` wrapper for basic color lists.
136
+
137
+ ### **v0.1.41**
138
+ - ✨ **New Feature:** Added `rich_color.py` to support rich color information (palettes, strings) using the `rich` library.
139
+
140
+ ### **v0.1.40**
141
+ - 🚀 **Improvement:** Updated `csvfile.py` to use `itables` and `pygwalker` for interactive dataframe display in Jupyter notebooks.
142
+
143
+ ---
144
+
145
+ ## v0.1.3x (Data & Loading)
146
+
147
+ ### **v0.1.38**
148
+ - ✨ **New Feature:** Added `torchloader.py` to search for optimal `DataLoader` configurations (num_workers, batch_size, pin_memory).
149
+
150
+ ### **v0.1.37**
151
+ - ✨ **New Feature:** Added `dataset.py` for splitting classification datasets into train/val/test sets.
152
+
153
+ ### **v0.1.33**
154
+ - ✨ **New Feature:** Added `plot.py` for plotting Deep Learning training history (accuracy/loss) using `seaborn` and `matplotlib`.
155
+
156
+ ---
157
+
158
+ ## v0.1.0 - v0.1.2x (Early Utilities)
159
+
160
+ ### **v0.1.29**
161
+ - 🐛 **Fix:** Pinned `kaleido==0.1.*` for `tele_noti` as version `0.2.*` caused image generation hangs.
162
+
163
+ ### **v0.1.24**
164
+ - ♻️ **Refactor:** Renamed `sys` module to `system` to avoid conflicts with Python's built-in `sys`.
165
+ - ✨ **New Feature:** Added `tele_noti` module for Telegram notifications regarding training progress.
166
+
167
+ ### **v0.1.22**
168
+ - ✨ **New Feature:** Added `cuda.py` to check CUDA availability for both PyTorch and TensorFlow.
169
+
170
+ ### **v0.1.21**
171
+ - ✨ **New Feature:** Added YAML inheritance and overriding support using `networkx` and `omegaconf`.
172
+
173
+ ### **v0.1.15**
174
+ - ✨ **New Feature:** Added common logging library and `@console_log` decorator for function tracing.
175
+
176
+ ### **v0.1.10**
177
+ - 🐛 **Fix:** Fixed typo `is_exit` -> `is_exist` in `filesys`.
178
+ - 🚀 **Improvement:** Updated `gdrive` to support uploading to specific folders and returning direct shareable links.
179
+
180
+ ### **v0.1.9**
181
+ - 🔧 **Maintenance:** Added `requirements.txt`.
182
+
183
+ ### **v0.1.6 - v0.1.8**
184
+ - 🚀 **Performance:** Optimized table insertion by using an in-memory `row_pool_dict` before committing to the DataFrame.
185
+ - ✨ **New Feature:** Added `DFCreator` for manipulating DataFrames (create, insert, display, save).
186
+
187
+ ### **v0.1.4 - v0.1.5**
188
+ - ✨ **New Feature:** Added `cmd` module.
189
+ - ✨ **New Feature:** Support for creating Bitbucket Projects from templates.
190
+
191
+ ### **v0.1.2**
192
+ - ✨ **New Feature:** Added support for uploading local files to Google Drive.
@@ -0,0 +1,109 @@
1
+ halib/__init__.py,sha256=F2Iq1I1ffjaXJ_LYEqE-MBeUJnwGGE5UHR6M5HVkFkU,1710
2
+ halib/common.py,sha256=9hn-IXOlGZODoBHy8U2A0aLgmPEnTeQjbzAVGwXAjwo,4242
3
+ halib/csvfile.py,sha256=Eoeni0NIbNG3mB5ESWAvNwhJxOjmCaPd1qqYRHImbvk,1567
4
+ halib/cuda.py,sha256=1bvtBY8QvTWdLaxalzK9wqXPl0Ft3AfhcrebupxGzEA,1010
5
+ halib/dataset.py,sha256=QU0Hr5QFb8_XlvnOMgC9QJGIpwXAZ9lDd0RdQi_QRec,6743
6
+ halib/filesys.py,sha256=r1SftGKM7nyw6QbY5UmcueZLkXEIleSzhui7dQsosPw,2907
7
+ halib/gdrive.py,sha256=p302rTv1H4gFsAlmmiUL0iKrbg09_3_dEhtm-N4WGvg,6277
8
+ halib/gdrive_mkdir.py,sha256=0Gq65i2YaWaGMdJqXX7zthhb0qZnNwrhdoHK6IBIVv8,1456
9
+ halib/gdrive_test.py,sha256=e8yOYB5MZhdHbeLzjvTcOXbJNKk_DKNWURIRkKxHBMs,1378
10
+ halib/jsonfile.py,sha256=9XfdFS1wcTdBRmpAGzVu2dVCcJp8RCpsSY16f6KUNts,480
11
+ halib/listop.py,sha256=Vpa8_2fI0wySpB2-8sfTBkyi_A4FhoFVVvFiuvW8N64,339
12
+ halib/plot.py,sha256=4pUJ5GeKQ1LzgiQXbAZlUqSydXSk5tt2_qsw78nSzA4,9445
13
+ halib/projectmake.py,sha256=8dNTxB2jgQlwvovaOnJcCKgHe5vM0nBwzm46Yc8INEI,4048
14
+ halib/rich_color.py,sha256=tyK5fl3Dtv1tKsfFzt_5Rco4Fj72QliA-w5aGXaVuqQ,6392
15
+ halib/tele_noti.py,sha256=xL8f889VFR65uVJTj1NNT3qSi3lJ7s_iDjcObwZ0-V0,5926
16
+ halib/textfile.py,sha256=EhVFrit-nRBJx18e6rtIqcE1cSbgsLnMXe_kdhi1EPI,399
17
+ halib/torchloader.py,sha256=-q9YE-AoHZE1xQX2dgNxdqtucEXYs4sQ22WXdl6EGfI,6500
18
+ halib/videofile.py,sha256=NTLTZ-j6YD47duw2LN2p-lDQDglYFP1LpEU_0gzHLdI,4737
19
+ halib/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
+ halib/common/common.py,sha256=iMoC5Wzj0gn_8GlxEGc0rA5r2HFJ2F1rKy0JpldGtro,5937
21
+ halib/common/rich_color.py,sha256=tyK5fl3Dtv1tKsfFzt_5Rco4Fj72QliA-w5aGXaVuqQ,6392
22
+ halib/exp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
+ halib/exp/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
+ halib/exp/core/base_config.py,sha256=Js2oVDt7qwT7eV_sOUWw6XXl569G1bX6ls-VYAx2gWY,5032
25
+ halib/exp/core/base_exp.py,sha256=fknJVmW6ubbapOggbkrbNWgc1ZXcUz_FE3wMyuIGX7M,5180
26
+ halib/exp/core/param_gen.py,sha256=_JjakBOr0UuJOxR11ZC-mrX7ye5kdc1SfGLZuYFmG1o,7385
27
+ halib/exp/core/wandb_op.py,sha256=powL2QyLBqF-6PUGAOqd60s1npHLLKJxPns3S4hKeNo,4160
28
+ halib/exp/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
29
+ halib/exp/data/dataclass_util.py,sha256=OPZzqmug0be4JEq0hJ68pKjnyl0PRYQMVJGhKw1kvyk,1382
30
+ halib/exp/data/dataset.py,sha256=hm7CDTmudo_KV21RF0TQknHsw44PKhlMoBs9i8WIq6k,6743
31
+ halib/exp/data/torchloader.py,sha256=oWUplXlGd1IB6CqdRd-mGe-DfMjjZxz9hQ7SWONb-0s,6519
32
+ halib/exp/perf/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
+ halib/exp/perf/flop_calc.py,sha256=Kb3Gwqc7QtGALZzfyYXBA_9SioReJpTJdUX84kqj-Aw,6907
34
+ halib/exp/perf/gpu_mon.py,sha256=vD41_ZnmPLKguuq9X44SB_vwd9JrblO4BDzHLXZhhFY,2233
35
+ halib/exp/perf/perfcalc.py,sha256=p7rhVShiie7DT_s50lbvbGftVCkrWE0tQGFLUEmTXi0,18326
36
+ halib/exp/perf/perfmetrics.py,sha256=qRiNiCKGUSTLY7gPMVMuVHGAAyeosfGWup2eM4490aw,5485
37
+ halib/exp/perf/perftb.py,sha256=IWElg3OB5dmhfxnY8pMZvkL2y_EnvLmEx3gJlpUR1Fs,31066
38
+ halib/exp/perf/profiler.py,sha256=Nx-Y1V3pCbaEOisY1sDT8s0yGFs3J6TUmutZslseoNI,19201
39
+ halib/exp/viz/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
40
+ halib/exp/viz/plot.py,sha256=51FhD1mH4nthTrY3K4mrO5pxI5AzvHXpZy5_ToqkYHs,28580
41
+ halib/filetype/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
+ halib/filetype/csvfile.py,sha256=dwWM1LglQr1SaSWq2KDl93fYzQn1638JGo_l1GbBhbk,6460
43
+ halib/filetype/ipynb.py,sha256=pd2LgmPa7ZbF0YlQJbeQZEsl6jHQUSoyVtkCT7WhU5Q,1657
44
+ halib/filetype/jsonfile.py,sha256=2HcBqXYjLNvqFok3PHOgH59vlhDCZLZpt7ezvgx1TFM,474
45
+ halib/filetype/textfile.py,sha256=3koEFyVme1SEHdud7TnjArHndoiqfMGfMdYY3NIFegM,397
46
+ halib/filetype/videofile.py,sha256=h7FfOA212lgTbVrbrJYXMA1Chn3FYkXD_WEEt3odtn4,9097
47
+ halib/filetype/yamlfile.py,sha256=buvj016n3wmEBDfeDX9lbljqDk5R5OlKHuXDKSfIKK0,2411
48
+ halib/online/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
+ halib/online/gdrive.py,sha256=RmF4y6UPxektkKIctmfT-pKWZsBM9FVUeld6zZmJkp0,7787
50
+ halib/online/gdrive_mkdir.py,sha256=wSJkQMJCDuS1gxQ2lHQHq_IrJ4xR_SEoPSo9n_2WNFU,1474
51
+ halib/online/gdrive_test.py,sha256=hMWzz4RqZwETHp4GG4WwVNFfYvFQhp2Boz5t-DqwMo0,1342
52
+ halib/online/projectmake.py,sha256=-WhJNmM6RpAfnWcQeinDBFjRKig165l7uqBk-XQwcbA,4036
53
+ halib/online/tele_noti.py,sha256=ErR5ys8gHmdjjDfSfVJxBIbPxgH7QD0oNRQgZweGi4s,5941
54
+ halib/research/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
+ halib/research/base_config.py,sha256=AqZHZ0NNQ3WmUOfRzs36lf3o0FrehSdVLbdmgNpbV7A,2833
56
+ halib/research/base_exp.py,sha256=mC2bcG3M-dIvAkLw3d4O4Nu0HyvfrmvHvHX4iW8qurY,5749
57
+ halib/research/benchquery.py,sha256=FuKnbWQtCEoRRtJAfN-zaN-jPiO_EzsakmTOMiqi7GQ,4626
58
+ halib/research/dataset.py,sha256=X6lob-pcndC2aOP0fQ3z8aUnNVVR95ia4tiuxIAXppk,6734
59
+ halib/research/flop_csv.py,sha256=JeIUWgPFmhkPqvmhe-MLwwvAu9yR5F2k3qaViJCJJD4,1148
60
+ halib/research/flops.py,sha256=Us0VudX8QMOm7YenICGf-Tq57C_l9x9hj-MUGA8_hCg,5773
61
+ halib/research/metrics.py,sha256=qRiNiCKGUSTLY7gPMVMuVHGAAyeosfGWup2eM4490aw,5485
62
+ halib/research/mics.py,sha256=kFl7IsZP1N-qkogvuFojkDNr1Qf0kce9h--qOnJ_3gk,2637
63
+ halib/research/params_gen.py,sha256=GcTMlniL0iE3HalJY-gVRiYa8Qy8u6nX4LkKZeMkct8,4262
64
+ halib/research/perfcalc.py,sha256=gjQh1D7CyEjocX5rusAzygyGFrb_s9Ob3Lqs4lIDGxg,16228
65
+ halib/research/perftb.py,sha256=YlBXMeWn8S0LhsgxONEQZrKomRTju2T8QGGspUOy_6Y,31100
66
+ halib/research/plot.py,sha256=GBCXP1QnzRlNqjAl9UvGvW3I9II61DBStJNQThrLy38,28578
67
+ halib/research/profiler.py,sha256=GRAewTo0jGkOputjmRwtYVfJYBze_ivsOnrW9exWkPQ,11772
68
+ halib/research/torchloader.py,sha256=yqUjcSiME6H5W210363HyRUrOi3ISpUFAFkTr1w4DCw,6503
69
+ halib/research/wandb_op.py,sha256=YzLEqME5kIRxi3VvjFkW83wnFrsn92oYeqYuNwtYRkY,4188
70
+ halib/research/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
71
+ halib/research/core/base_config.py,sha256=FXYFFGKry-HwNrjlPlTeTB-ROhM1Bow5Xxems2fdW5k,4204
72
+ halib/research/core/base_exp.py,sha256=6CpuTP43NA7gE5JUN4V_-UAKHrlzLPJNI8piCBh3p1s,5734
73
+ halib/research/core/param_gen.py,sha256=I9JHrDCaep4CjvApDoX0QzFuw38zMC2PsDFueuA7pjM,4271
74
+ halib/research/core/wandb_op.py,sha256=powL2QyLBqF-6PUGAOqd60s1npHLLKJxPns3S4hKeNo,4160
75
+ halib/research/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
76
+ halib/research/data/dataclass_util.py,sha256=OPZzqmug0be4JEq0hJ68pKjnyl0PRYQMVJGhKw1kvyk,1382
77
+ halib/research/data/dataset.py,sha256=hm7CDTmudo_KV21RF0TQknHsw44PKhlMoBs9i8WIq6k,6743
78
+ halib/research/data/torchloader.py,sha256=oWUplXlGd1IB6CqdRd-mGe-DfMjjZxz9hQ7SWONb-0s,6519
79
+ halib/research/perf/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
80
+ halib/research/perf/flop_calc.py,sha256=Kb3Gwqc7QtGALZzfyYXBA_9SioReJpTJdUX84kqj-Aw,6907
81
+ halib/research/perf/gpu_mon.py,sha256=vD41_ZnmPLKguuq9X44SB_vwd9JrblO4BDzHLXZhhFY,2233
82
+ halib/research/perf/perfcalc.py,sha256=FSWDStz9f94dObyAHYHRtq4fuo0dIw7l9JH_x5Wd7cQ,16225
83
+ halib/research/perf/perfmetrics.py,sha256=qRiNiCKGUSTLY7gPMVMuVHGAAyeosfGWup2eM4490aw,5485
84
+ halib/research/perf/perftb.py,sha256=IWElg3OB5dmhfxnY8pMZvkL2y_EnvLmEx3gJlpUR1Fs,31066
85
+ halib/research/perf/profiler.py,sha256=5ZjES8kAqEsSV1mC3Yr_1ivFLwQDc_yv4HY7dKt_AS0,11782
86
+ halib/research/viz/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
87
+ halib/research/viz/plot.py,sha256=51FhD1mH4nthTrY3K4mrO5pxI5AzvHXpZy5_ToqkYHs,28580
88
+ halib/sys/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
89
+ halib/sys/cmd.py,sha256=b2x7JPcNnFjLGheIESVYvqAb-w2UwBM1PAwYxMZ5YjA,228
90
+ halib/sys/filesys.py,sha256=ERpnELLDKJoTIIKf-AajgkY62nID4qmqmX5TkE95APU,2931
91
+ halib/system/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
92
+ halib/system/_list_pc.csv,sha256=r8RwxDWYEeNkPCQBs8dOC8cWgBpa3OULZobwb1feuWg,172
93
+ halib/system/cmd.py,sha256=b2x7JPcNnFjLGheIESVYvqAb-w2UwBM1PAwYxMZ5YjA,228
94
+ halib/system/filesys.py,sha256=102J2fkQhmH1_-HQVy2FQ4NOU8LTjMWV3hToT_APtq8,4401
95
+ halib/system/path.py,sha256=k_pveq41uXEzKPU2KTIdqjUSb4MVM-hCFXHGeO-6x6Q,3694
96
+ halib/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
97
+ halib/utils/dataclass_util.py,sha256=rj2IMLlUzbm2OlF5_B2dRTk9njZOaF7tTjYkOsq8uLY,1416
98
+ halib/utils/dict.py,sha256=wYE6Iw-_CnCWdMg9tpJ2Y2-e2ESkW9FxmdBkZkbUh80,299
99
+ halib/utils/dict_op.py,sha256=wYE6Iw-_CnCWdMg9tpJ2Y2-e2ESkW9FxmdBkZkbUh80,299
100
+ halib/utils/gpu_mon.py,sha256=vD41_ZnmPLKguuq9X44SB_vwd9JrblO4BDzHLXZhhFY,2233
101
+ halib/utils/list.py,sha256=BM-8sRhYyqF7bh4p7TQtV7P_gnFruUCA6DTUOombaZg,337
102
+ halib/utils/listop.py,sha256=Vpa8_2fI0wySpB2-8sfTBkyi_A4FhoFVVvFiuvW8N64,339
103
+ halib/utils/tele_noti.py,sha256=-4WXZelCA4W9BroapkRyIdUu9cUVrcJJhegnMs_WpGU,5928
104
+ halib/utils/video.py,sha256=zLoj5EHk4SmP9OnoHjO8mLbzPdtq6gQPzTQisOEDdO8,3261
105
+ halib-0.2.21.dist-info/licenses/LICENSE.txt,sha256=qZssdna4aETiR8znYsShUjidu-U4jUT9Q-EWNlZ9yBQ,1100
106
+ halib-0.2.21.dist-info/METADATA,sha256=cADukwK5Nxve5oqMTadeSYQUBOuEHUhkePS3i8dtqrs,7590
107
+ halib-0.2.21.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
108
+ halib-0.2.21.dist-info/top_level.txt,sha256=7AD6PLaQTreE0Fn44mdZsoHBe_Zdd7GUmjsWPyQ7I-k,6
109
+ halib-0.2.21.dist-info/RECORD,,