speedy-utils 1.0.14__py3-none-any.whl → 1.0.16__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.
speedy_utils/__init__.py CHANGED
@@ -33,9 +33,11 @@ from .common.utils_misc import (
33
33
 
34
34
  # Print utilities
35
35
  from .common.utils_print import (
36
- display_pretty_table_html,
37
36
  flatten_dict,
38
37
  fprint,
38
+ )
39
+ from .common.notebook_utils import (
40
+ display_pretty_table_html,
39
41
  print_table,
40
42
  )
41
43
 
@@ -43,8 +45,98 @@ from .common.utils_print import (
43
45
  from .multi_worker.process import multi_process
44
46
  from .multi_worker.thread import multi_thread
45
47
 
48
+ # notebook
49
+ from .common.notebook_utils import change_dir
50
+
51
+ # Standard library imports
52
+ import copy
53
+ import functools
54
+ import gc
55
+ import inspect
56
+ import json
57
+ import multiprocessing
58
+ import os
59
+ import os.path as osp
60
+ import pickle
61
+ import pprint
62
+ import random
63
+ import re
64
+ import sys
65
+ import textwrap
66
+ import threading
67
+ import time
68
+ import traceback
69
+ import uuid
70
+ from collections import Counter, defaultdict
71
+ from collections.abc import Callable
72
+ from concurrent.futures import ThreadPoolExecutor, as_completed
73
+ from glob import glob
74
+ from multiprocessing import Pool
75
+ from pathlib import Path
76
+ from threading import Lock
77
+ from typing import Any, Dict, Generic, List, Literal, Optional, TypeVar, Union
78
+
79
+ # Third-party imports
80
+ import numpy as np
81
+ import pandas as pd
82
+ import xxhash
83
+ from IPython.core.getipython import get_ipython
84
+ from IPython.display import HTML, display
85
+ from loguru import logger
86
+ from pydantic import BaseModel
87
+ from tabulate import tabulate
88
+ from tqdm import tqdm
89
+
46
90
  # Define __all__ explicitly
47
91
  __all__ = [
92
+ # Standard library
93
+ "random",
94
+ "copy",
95
+ "functools",
96
+ "gc",
97
+ "inspect",
98
+ "json",
99
+ "multiprocessing",
100
+ "os",
101
+ "osp",
102
+ "pickle",
103
+ "pprint",
104
+ "re",
105
+ "sys",
106
+ "textwrap",
107
+ "threading",
108
+ "time",
109
+ "traceback",
110
+ "uuid",
111
+ "Counter",
112
+ "ThreadPoolExecutor",
113
+ "as_completed",
114
+ "glob",
115
+ "Pool",
116
+ "Path",
117
+ "Lock",
118
+ "defaultdict",
119
+ # Typing
120
+ "Any",
121
+ "Callable",
122
+ "Dict",
123
+ "Generic",
124
+ "List",
125
+ "Literal",
126
+ "Optional",
127
+ "TypeVar",
128
+ "Union",
129
+ # Third-party
130
+ "pd",
131
+ "xxhash",
132
+ "get_ipython",
133
+ "HTML",
134
+ "display",
135
+ "logger",
136
+ "BaseModel",
137
+ "tabulate",
138
+ "tqdm",
139
+ "np",
48
140
  # Clock module
49
141
  "Clock",
50
142
  "speedy_timer",
@@ -79,7 +171,6 @@ __all__ = [
79
171
  # Multi-worker processing
80
172
  "multi_process",
81
173
  "multi_thread",
82
- ]
83
-
84
- # Setup default logger
85
- # setup_logger('D')
174
+ # Notebook utilities
175
+ "change_dir",
176
+ ]
@@ -2,7 +2,7 @@ import functools
2
2
  import time
3
3
  import traceback
4
4
  from collections.abc import Callable
5
- from typing import Any, Tuple, Type, Union
5
+ from typing import Any
6
6
 
7
7
  from loguru import logger
8
8
 
@@ -26,8 +26,6 @@ def retry_runtime(
26
26
  def decorator(func: Callable) -> Callable:
27
27
  @functools.wraps(func)
28
28
  def wrapper(*args: Any, **kwargs: Any) -> Any:
29
- last_exception = None
30
-
31
29
  for attempt in range(1, max_retry + 1):
32
30
  try:
33
31
  return func(*args, **kwargs)
@@ -40,7 +38,6 @@ def retry_runtime(
40
38
  raise
41
39
 
42
40
  except exceptions as e:
43
- last_exception = e
44
41
  if attempt == max_retry:
45
42
  logger.opt(depth=1).error(
46
43
  f"Function {func.__name__} failed after {max_retry} retries: {str(e)}"
@@ -5,7 +5,7 @@ import re
5
5
  import sys
6
6
  import time
7
7
  from collections import OrderedDict
8
- from typing import Annotated, Literal, Optional
8
+ from typing import Annotated, Literal
9
9
 
10
10
  from loguru import logger
11
11
 
@@ -0,0 +1,63 @@
1
+ # jupyter notebook utilities
2
+ import json
3
+ import os
4
+ import pathlib
5
+ from typing import Any
6
+
7
+ from IPython.display import HTML, display
8
+ from tabulate import tabulate
9
+
10
+
11
+ def change_dir(target_directory: str = 'POLY') -> None:
12
+ """Change directory to the first occurrence of x in the current path."""
13
+ cur_dir = pathlib.Path('./')
14
+ target_dir = str(cur_dir.absolute()).split(target_directory)[0] + target_directory
15
+ os.chdir(target_dir)
16
+ print(f'Current dir: {target_dir}')
17
+
18
+
19
+ def display_pretty_table_html(data: dict) -> None:
20
+ """Display a pretty HTML table in Jupyter notebooks."""
21
+ table = "<table>"
22
+ for key, value in data.items():
23
+ table += f"<tr><td>{key}</td><td>{value}</td></tr>"
24
+ table += "</table>"
25
+ display(HTML(table))
26
+
27
+
28
+ def print_table(data: Any, use_html: bool = True) -> None:
29
+ """Print data as a table. If use_html is True, display using IPython HTML."""
30
+
31
+ def __get_table(data: Any) -> str:
32
+ if isinstance(data, str):
33
+ try:
34
+ data = json.loads(data)
35
+ except json.JSONDecodeError as exc:
36
+ raise ValueError("String input could not be decoded as JSON") from exc
37
+
38
+ if isinstance(data, list):
39
+ if all(isinstance(item, dict) for item in data):
40
+ headers = list(data[0].keys())
41
+ rows = [list(item.values()) for item in data]
42
+ return tabulate(
43
+ rows, headers=headers, tablefmt="html" if use_html else "grid"
44
+ )
45
+ else:
46
+ raise ValueError("List must contain dictionaries")
47
+
48
+ if isinstance(data, dict):
49
+ headers = ["Key", "Value"]
50
+ rows = list(data.items())
51
+ return tabulate(
52
+ rows, headers=headers, tablefmt="html" if use_html else "grid"
53
+ )
54
+
55
+ raise TypeError(
56
+ "Input data must be a list of dictionaries, a dictionary, or a JSON string"
57
+ )
58
+
59
+ table = __get_table(data)
60
+ if use_html:
61
+ display(HTML(table))
62
+ else:
63
+ print(table)
@@ -2,7 +2,6 @@ import os
2
2
  from collections import defaultdict
3
3
  from datetime import datetime
4
4
 
5
- from fastcore.all import threaded
6
5
 
7
6
 
8
7
  class ReportManager:
@@ -40,7 +39,7 @@ class ReportManager:
40
39
 
41
40
  md_content.extend(
42
41
  [
43
- f"\n### Results Overview",
42
+ "\n### Results Overview",
44
43
  f"- Total items processed: {len(results)}",
45
44
  f"- Success rate: {(len(results) - len(errors))/len(results)*100:.1f}%",
46
45
  f"- Total errors: {len(errors)}",
@@ -61,7 +60,7 @@ class ReportManager:
61
60
  for error_type, errs in error_groups.items():
62
61
  md_content.extend(
63
62
  [
64
- f"\n<details>",
63
+ "\n<details>",
65
64
  f"<summary><b>{error_type}</b> ({len(errs)} occurrences)</summary>\n",
66
65
  "| Index | Input | Error Message |",
67
66
  "|-------|-------|---------------|",
@@ -5,7 +5,8 @@ import os
5
5
  import os.path as osp
6
6
  import pickle
7
7
  import uuid
8
- from typing import Any, List, Literal
8
+ from threading import Lock
9
+ from typing import Any, Literal
9
10
 
10
11
  import cachetools
11
12
  import pandas as pd
@@ -13,12 +14,11 @@ import xxhash
13
14
  from loguru import logger
14
15
  from pydantic import BaseModel
15
16
 
16
- from .utils_io import dump_json_or_pickle, load_json_or_pickle
17
- from .utils_misc import mkdir_or_exist
17
+ from src.speedy_utils.common.utils_io import dump_json_or_pickle, load_json_or_pickle
18
+ from src.speedy_utils.common.utils_misc import mkdir_or_exist
18
19
 
19
20
  SPEED_CACHE_DIR = osp.join(osp.expanduser("~"), ".cache/speedy_cache")
20
21
  LRU_MEM_CACHE = cachetools.LRUCache(maxsize=128_000)
21
- from threading import Lock
22
22
 
23
23
  thread_locker = Lock()
24
24
 
@@ -80,9 +80,9 @@ def identify(obj: Any, depth=0, max_depth=2) -> str:
80
80
  elif obj is None:
81
81
  return identify("None", depth + 1, max_depth)
82
82
  else:
83
- primitive_types = [int, float, str, bool]
84
- if not type(obj) in primitive_types:
85
- logger.warning(f"Unknown type: {type(obj)}")
83
+ # primitive_types = [int, float, str, bool]
84
+ # if not type(obj) in primitive_types:
85
+ # logger.warning(f"Unknown type: {type(obj)}")
86
86
  return xxhash.xxh64_hexdigest(fast_serialize(obj), seed=0)
87
87
 
88
88
 
@@ -2,9 +2,8 @@
2
2
 
3
3
  import inspect
4
4
  import os
5
- import sys
6
5
  from collections.abc import Callable
7
- from typing import Any, List
6
+ from typing import Any
8
7
 
9
8
  from pydantic import BaseModel
10
9
 
@@ -1,32 +1,13 @@
1
1
  # utils/utils_print.py
2
2
 
3
3
  import copy
4
- import inspect
5
- import json
6
4
  import pprint
7
- import re
8
- import sys
9
5
  import textwrap
10
- import time
11
- from collections import OrderedDict
12
- from typing import Annotated, Any, Dict, List, Literal, Optional
6
+ from typing import Any
13
7
 
14
- from IPython.display import HTML, display
15
- from loguru import logger
16
8
  from tabulate import tabulate
17
9
 
18
- from .utils_misc import is_notebook
19
-
20
-
21
- def display_pretty_table_html(data: dict) -> None:
22
- """
23
- Display a pretty HTML table in Jupyter notebooks.
24
- """
25
- table = "<table>"
26
- for key, value in data.items():
27
- table += f"<tr><td>{key}</td><td>{value}</td></tr>"
28
- table += "</table>"
29
- display(HTML(table))
10
+ from .notebook_utils import display_pretty_table_html
30
11
 
31
12
 
32
13
  # Flattening the dictionary using "." notation for keys
@@ -166,51 +147,7 @@ def fprint(
166
147
  printer.pprint(processed_data)
167
148
 
168
149
 
169
- def print_table(data: Any, use_html: bool = True) -> None:
170
- """
171
- Print data as a table. If use_html is True, display using IPython HTML.
172
- """
173
-
174
- def __get_table(data: Any) -> str:
175
- if isinstance(data, str):
176
- try:
177
- data = json.loads(data)
178
- except json.JSONDecodeError as exc:
179
- raise ValueError("String input could not be decoded as JSON") from exc
180
-
181
- if isinstance(data, list):
182
- if all(isinstance(item, dict) for item in data):
183
- headers = list(data[0].keys())
184
- rows = [list(item.values()) for item in data]
185
- return tabulate(
186
- rows, headers=headers, tablefmt="html" if use_html else "grid"
187
- )
188
- else:
189
- raise ValueError("List must contain dictionaries")
190
-
191
- if isinstance(data, dict):
192
- headers = ["Key", "Value"]
193
- rows = list(data.items())
194
- return tabulate(
195
- rows, headers=headers, tablefmt="html" if use_html else "grid"
196
- )
197
-
198
- raise TypeError(
199
- "Input data must be a list of dictionaries, a dictionary, or a JSON string"
200
- )
201
-
202
- table = __get_table(data)
203
- if use_html:
204
- display(HTML(table))
205
- else:
206
- print(table)
207
-
208
-
209
150
  __all__ = [
210
- "display_pretty_table_html",
211
151
  "flatten_dict",
212
152
  "fprint",
213
- "print_table",
214
- # "setup_logger",
215
- # "log",
216
153
  ]
@@ -1,12 +1,10 @@
1
- import inspect
2
1
  import multiprocessing
3
2
  import os
4
- import time
5
3
  import traceback
6
- from collections.abc import Callable, Iterable, Iterator, Sequence
4
+ from collections.abc import Callable, Iterable, Iterator
7
5
  from concurrent.futures import ProcessPoolExecutor, as_completed
8
6
  from itertools import islice
9
- from typing import Any, List, TypeVar, cast
7
+ from typing import Any, TypeVar, cast
10
8
 
11
9
  T = TypeVar("T")
12
10
 
@@ -75,6 +73,7 @@ def multi_process(
75
73
  timeout: float | None = None,
76
74
  stop_on_error: bool = True,
77
75
  process_update_interval=10,
76
+ for_loop: bool = False,
78
77
  **fixed_kwargs,
79
78
  ) -> list[Any]:
80
79
  """
@@ -95,6 +94,12 @@ def multi_process(
95
94
  substitute failing result with ``None``.
96
95
  **fixed_kwargs – static keyword args forwarded to every ``func()`` call.
97
96
  """
97
+ if for_loop:
98
+ ret = []
99
+ for arg in inputs:
100
+ ret.append(func(arg, **fixed_kwargs))
101
+ return ret
102
+
98
103
  if workers is None:
99
104
  workers = os.cpu_count() or 1
100
105
  if inflight is None:
@@ -5,7 +5,6 @@ import multiprocessing # Import multiprocessing module
5
5
  import os
6
6
  import shlex # To properly escape command line arguments
7
7
  import shutil
8
- import subprocess
9
8
 
10
9
  taskset_path = shutil.which("taskset")
11
10
 
@@ -80,11 +79,12 @@ def main():
80
79
  cmd_str = shlex.join(args.cmd)
81
80
 
82
81
  gpus = args.gpus.split(",")
83
- gpus = [gpu for gpu in gpus if not gpu in args.ignore_gpus.split(",")]
82
+ gpus = [gpu for gpu in gpus if gpu not in args.ignore_gpus.split(",")]
84
83
  num_gpus = len(gpus)
85
84
 
86
85
  cpu_per_process = max(args.total_cpu // args.total_fold, 1)
87
86
  cmds = []
87
+ path_python = shutil.which("python")
88
88
  for i in range(args.total_fold):
89
89
  gpu = gpus[i % num_gpus]
90
90
  cpu_start = (i * cpu_per_process) % args.total_cpu
@@ -92,10 +92,10 @@ def main():
92
92
  ENV = f"CUDA_VISIBLE_DEVICES={gpu} MP_ID={i} MP_TOTAL={args.total_fold}"
93
93
  if taskset_path:
94
94
  fold_cmd = (
95
- f"{ENV} {taskset_path} -c {cpu_start}-{cpu_end} python {cmd_str}"
95
+ f"{ENV} {taskset_path} -c {cpu_start}-{cpu_end} {path_python} {cmd_str}"
96
96
  )
97
97
  else:
98
- fold_cmd = f"{ENV} python {cmd_str}"
98
+ fold_cmd = f"{ENV} {path_python} {cmd_str}"
99
99
 
100
100
  cmds.append(fold_cmd)
101
101
 
@@ -10,12 +10,8 @@ Usage:
10
10
 
11
11
  import argparse
12
12
  import json
13
- import os
14
- import signal
15
- import subprocess
16
13
  import sys
17
- import time
18
- from typing import Any, Dict, List, Optional
14
+ from typing import Any, Dict, List
19
15
 
20
16
 
21
17
  def pascal_case(s: str) -> str:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: speedy-utils
3
- Version: 1.0.14
3
+ Version: 1.0.16
4
4
  Summary: Fast and easy-to-use package for data science
5
5
  Author: AnhVTH
6
6
  Author-email: anhvth.226@gmail.com
@@ -0,0 +1,37 @@
1
+ llm_utils/__init__.py,sha256=0y7y1ia3jyvY3qgOnVp1xCqwMT5UYgw_cSAU_9AjHUo,650
2
+ llm_utils/chat_format/__init__.py,sha256=8dBIUqFJvkgQYedxBtcyxt-4tt8JxAKVap2JlTXmgaM,737
3
+ llm_utils/chat_format/display.py,sha256=qaEGADGP8iQFzWOuzEO7_HyrqAFdEnUfkHAH28b0ym0,9772
4
+ llm_utils/chat_format/transform.py,sha256=8TZhvUS5DrjUeMNtDIuWY54B_QZ7jjpXEL9c8F5z79w,5400
5
+ llm_utils/chat_format/utils.py,sha256=xTxN4HrLHcRO2PfCTR43nH1M5zCa7v0kTTdzAcGkZg0,1229
6
+ llm_utils/group_messages.py,sha256=8CU9nKOja3xeuhdrX5CvYVveSqSKb2zQ0eeNzA88aTQ,3621
7
+ llm_utils/lm/__init__.py,sha256=e8eCWlLo39GZjq9CokludZGHYVZ7BnbWZ6GOJoiWGzE,110
8
+ llm_utils/lm/alm.py,sha256=06QVT7iWAa8Rz48oRmnzkS-dJYOiJ0zSfKqEhZY11S8,30825
9
+ llm_utils/lm/chat_html.py,sha256=PiI8rTzQ_JUYuoANj6ZNTEiWZKJY_utVQwA_B036M2s,8669
10
+ llm_utils/lm/lm.py,sha256=FMiAhltqUNZdzGejMBPqGfQ3PE-fUoIGW8hfjTO_fNo,31035
11
+ llm_utils/lm/lm_json.py,sha256=3Gv1tKhbKACoQXfcLDtO-PyJKmo7WuN33zKk7qAY7iE,1970
12
+ llm_utils/lm/utils.py,sha256=GMvs64DRzVnXAki4SZ-A6mx2Fi9IgeF11BA-5FB-CYg,4777
13
+ llm_utils/scripts/README.md,sha256=yuOLnLa2od2jp4wVy3rV0rESeiV3o8zol5MNMsZx0DY,999
14
+ llm_utils/scripts/vllm_load_balancer.py,sha256=qsVhQ3ubJ3JnOAu4psHB1PyKy9muX-mZZkFqepH8WcU,17507
15
+ llm_utils/scripts/vllm_serve.py,sha256=CbW_3Y9Vt7eQYoGGPT3yj1nhbLYOc3b1LdJBy1sVX-Y,11976
16
+ speedy_utils/__init__.py,sha256=kxQk4PGS3Xkxnerm0YqjF6GKTpgoaTc1vudKid-2c_A,3388
17
+ speedy_utils/all.py,sha256=A9jiKGjo950eg1pscS9x38OWAjKGyusoAN5mrfweY4E,3090
18
+ speedy_utils/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
+ speedy_utils/common/clock.py,sha256=3n4FkCW0dz46O8By09V5Pve1DSMgpLDRbWEVRryryeQ,7423
20
+ speedy_utils/common/function_decorator.py,sha256=BspJ0YuGL6elS7lWBAgELZ-sCfED_1N2P5fgH-fCRUQ,2132
21
+ speedy_utils/common/logger.py,sha256=JqW9gG4ujfq4RldNeYP2p52BYgCwjkYeGGYyzLn6mfY,6422
22
+ speedy_utils/common/notebook_utils.py,sha256=7tFXMaE365ubrD9VCwDoZe7oBqZ2qG5t_Vla4Qvg1M8,2062
23
+ speedy_utils/common/report_manager.py,sha256=sEuwLcyYpYlj9uxIsC8yiAu1eirydkQIldKRtFStswI,3894
24
+ speedy_utils/common/utils_cache.py,sha256=Fp1vvi19q4xIcXi7ZuVjk49gOqdl3i7bv2Z6UnERMjM,8424
25
+ speedy_utils/common/utils_io.py,sha256=d7PKz5tOPrwHDr7GXuYmILvjXJOFEwfzAEIuUcYaI60,4790
26
+ speedy_utils/common/utils_misc.py,sha256=cdEuBBpiB1xpuzj0UBDHDuTIerqsMIw37ENq6EXliOw,1795
27
+ speedy_utils/common/utils_print.py,sha256=iQqnOYw2EFC8TqeSDbrcnIQAUKT7FbB8Mec8b2aGAzw,4833
28
+ speedy_utils/multi_worker/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
29
+ speedy_utils/multi_worker/process.py,sha256=BI-sgzzQ0_N8kOfaS_3ZAGZ3d6panYzJ3-BGZthY4dQ,6824
30
+ speedy_utils/multi_worker/thread.py,sha256=9pXjvgjD0s0Hp0cZ6I3M0ndp1OlYZ1yvqbs_bcun_Kw,12775
31
+ speedy_utils/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
+ speedy_utils/scripts/mpython.py,sha256=73PHm1jqbCt2APN4xuNjD0VDKwzOj4EZsViEMQiZU2g,3853
33
+ speedy_utils/scripts/openapi_client_codegen.py,sha256=f2125S_q0PILgH5dyzoKRz7pIvNEjCkzpi4Q4pPFRZE,9683
34
+ speedy_utils-1.0.16.dist-info/METADATA,sha256=LhbJApTXjZ1eVVW50D26grUhI_H2BJiw9hU7DI2bezY,7392
35
+ speedy_utils-1.0.16.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
36
+ speedy_utils-1.0.16.dist-info/entry_points.txt,sha256=T1t85jwx8fK6m5msdkBGIXH5R5Kd0zSL0S6erXERPzg,237
37
+ speedy_utils-1.0.16.dist-info/RECORD,,
@@ -1,33 +0,0 @@
1
- llm_utils/__init__.py,sha256=JcRRsx6dtGLD8nwIz90Iowj6PLOO2_hUi254VbDpc_I,773
2
- llm_utils/chat_format/__init__.py,sha256=8dBIUqFJvkgQYedxBtcyxt-4tt8JxAKVap2JlTXmgaM,737
3
- llm_utils/chat_format/display.py,sha256=a3zWzo47SUf4i-uic-dwf-vxtu6gZWLbnJrszjjZjQ8,9801
4
- llm_utils/chat_format/transform.py,sha256=328V18FOgRQzljAl9Mh8NF4Tl-N3cZZIPmAwHQspXCY,5461
5
- llm_utils/chat_format/utils.py,sha256=xTxN4HrLHcRO2PfCTR43nH1M5zCa7v0kTTdzAcGkZg0,1229
6
- llm_utils/group_messages.py,sha256=wyiZzs7O8yK2lyIakV2x-1CrrWVT12sjnP1vVnmPet4,3606
7
- llm_utils/lm/__init__.py,sha256=e8eCWlLo39GZjq9CokludZGHYVZ7BnbWZ6GOJoiWGzE,110
8
- llm_utils/lm/alm.py,sha256=mJvB6uAzfakIjA7We19-VJNI9UKKkdfqeef1rJlKR9A,15773
9
- llm_utils/lm/lm.py,sha256=3mzLYKRbo50XjHp6_WuqkfG2HqTwmozXtQjYQC81m28,19516
10
- llm_utils/lm/utils.py,sha256=-fDNueiXKQI6RDoNHJYNyORomf2XlCf2doJZ3GEV2Io,4762
11
- llm_utils/scripts/vllm_load_balancer.py,sha256=17zaq8RJseikHVoAibGOz0p_MCLcNlnhZDkk7g4cuLc,17519
12
- llm_utils/scripts/vllm_serve.py,sha256=CbW_3Y9Vt7eQYoGGPT3yj1nhbLYOc3b1LdJBy1sVX-Y,11976
13
- speedy_utils/__init__.py,sha256=I2bSfDIE9yRF77tnHW0vqfExDA2m1gUx4AH8C9XmGtg,1707
14
- speedy_utils/all.py,sha256=A9jiKGjo950eg1pscS9x38OWAjKGyusoAN5mrfweY4E,3090
15
- speedy_utils/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
- speedy_utils/common/clock.py,sha256=3n4FkCW0dz46O8By09V5Pve1DSMgpLDRbWEVRryryeQ,7423
17
- speedy_utils/common/function_decorator.py,sha256=r_r42qCWuNcu0_aH7musf2BWvcJfgZrD81G28mDcolw,2226
18
- speedy_utils/common/logger.py,sha256=NIOlhhACpcc0BUTSJ8oDYrLp23J2gW_KJFyRVdLN2tY,6432
19
- speedy_utils/common/report_manager.py,sha256=dgGfS_fHbZiQMsLzkgnj0OfB758t1x6B4MhjsetSl9A,3930
20
- speedy_utils/common/utils_cache.py,sha256=gXX5qTXpCG3qDgjnOsSvxM4LkQurmcsg4QRv_zOBG1E,8378
21
- speedy_utils/common/utils_io.py,sha256=d7PKz5tOPrwHDr7GXuYmILvjXJOFEwfzAEIuUcYaI60,4790
22
- speedy_utils/common/utils_misc.py,sha256=nsQOu2jcplcFHVQ1CnOjEpNcdxIINveGxB493Cqo63U,1812
23
- speedy_utils/common/utils_print.py,sha256=QRaL2QPbks4Mtol_gJy3ZdahgUfzUEtcOp4--lBlzYI,6709
24
- speedy_utils/multi_worker/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
- speedy_utils/multi_worker/process.py,sha256=XwQlffxzRFnCVeKjDNBZDwFfUQHiJiuFA12MRGJVru8,6708
26
- speedy_utils/multi_worker/thread.py,sha256=9pXjvgjD0s0Hp0cZ6I3M0ndp1OlYZ1yvqbs_bcun_Kw,12775
27
- speedy_utils/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
- speedy_utils/scripts/mpython.py,sha256=ZzkBWI5Xw3vPoMx8xQt2x4mOFRjtwWqfvAJ5_ngyWgw,3816
29
- speedy_utils/scripts/openapi_client_codegen.py,sha256=4Y1HO8Uht-hCfHEVxY6TlSeTOcZZRVwJ-SBu-bFsAOk,9747
30
- speedy_utils-1.0.14.dist-info/METADATA,sha256=MqB1t1UxDPGzEOTI6DN3HEWHTw3AeikdAoN6udMCoyc,7392
31
- speedy_utils-1.0.14.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
32
- speedy_utils-1.0.14.dist-info/entry_points.txt,sha256=T1t85jwx8fK6m5msdkBGIXH5R5Kd0zSL0S6erXERPzg,237
33
- speedy_utils-1.0.14.dist-info/RECORD,,