absfuyu 5.1.0__py3-none-any.whl → 5.2.0__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 absfuyu might be problematic. Click here for more details.

Files changed (73) hide show
  1. absfuyu/__init__.py +1 -1
  2. absfuyu/__main__.py +3 -3
  3. absfuyu/cli/__init__.py +1 -1
  4. absfuyu/cli/color.py +3 -3
  5. absfuyu/cli/config_group.py +2 -2
  6. absfuyu/cli/do_group.py +2 -2
  7. absfuyu/cli/game_group.py +2 -2
  8. absfuyu/cli/tool_group.py +2 -3
  9. absfuyu/config/__init__.py +1 -1
  10. absfuyu/core/__init__.py +1 -1
  11. absfuyu/core/baseclass.py +2 -2
  12. absfuyu/core/baseclass2.py +1 -1
  13. absfuyu/core/decorator.py +4 -4
  14. absfuyu/core/docstring.py +43 -25
  15. absfuyu/core/dummy_cli.py +1 -1
  16. absfuyu/core/dummy_func.py +4 -4
  17. absfuyu/dxt/__init__.py +1 -1
  18. absfuyu/dxt/dictext.py +5 -2
  19. absfuyu/dxt/dxt_support.py +1 -1
  20. absfuyu/dxt/intext.py +5 -2
  21. absfuyu/dxt/listext.py +288 -126
  22. absfuyu/dxt/strext.py +75 -15
  23. absfuyu/extra/__init__.py +1 -1
  24. absfuyu/extra/beautiful.py +1 -1
  25. absfuyu/extra/da/__init__.py +1 -1
  26. absfuyu/extra/da/dadf.py +43 -4
  27. absfuyu/extra/da/dadf_base.py +1 -1
  28. absfuyu/extra/da/df_func.py +1 -1
  29. absfuyu/extra/da/mplt.py +1 -1
  30. absfuyu/extra/data_analysis.py +3 -3
  31. absfuyu/fun/__init__.py +1 -1
  32. absfuyu/fun/tarot.py +1 -1
  33. absfuyu/game/__init__.py +1 -1
  34. absfuyu/game/game_stat.py +1 -1
  35. absfuyu/game/sudoku.py +1 -1
  36. absfuyu/game/tictactoe.py +2 -3
  37. absfuyu/game/wordle.py +1 -1
  38. absfuyu/general/__init__.py +1 -1
  39. absfuyu/general/content.py +2 -2
  40. absfuyu/general/human.py +1 -1
  41. absfuyu/general/shape.py +1 -1
  42. absfuyu/logger.py +1 -1
  43. absfuyu/pkg_data/__init__.py +1 -1
  44. absfuyu/pkg_data/deprecated.py +1 -1
  45. absfuyu/sort.py +1 -1
  46. absfuyu/tools/__init__.py +16 -13
  47. absfuyu/tools/checksum.py +2 -2
  48. absfuyu/tools/converter.py +29 -8
  49. absfuyu/tools/generator.py +251 -110
  50. absfuyu/tools/inspector.py +68 -38
  51. absfuyu/tools/keygen.py +1 -1
  52. absfuyu/tools/obfuscator.py +2 -2
  53. absfuyu/tools/passwordlib.py +3 -4
  54. absfuyu/tools/shutdownizer.py +1 -1
  55. absfuyu/tools/web.py +1 -1
  56. absfuyu/typings.py +136 -0
  57. absfuyu/util/__init__.py +18 -4
  58. absfuyu/util/api.py +36 -16
  59. absfuyu/util/json_method.py +43 -14
  60. absfuyu/util/lunar.py +1 -1
  61. absfuyu/util/path.py +2 -2
  62. absfuyu/util/performance.py +120 -5
  63. absfuyu/util/shorten_number.py +1 -1
  64. absfuyu/util/text_table.py +48 -14
  65. absfuyu/util/zipped.py +4 -3
  66. absfuyu/version.py +2 -2
  67. {absfuyu-5.1.0.dist-info → absfuyu-5.2.0.dist-info}/METADATA +1 -1
  68. absfuyu-5.2.0.dist-info/RECORD +76 -0
  69. absfuyu/core/typings.py +0 -40
  70. absfuyu-5.1.0.dist-info/RECORD +0 -76
  71. {absfuyu-5.1.0.dist-info → absfuyu-5.2.0.dist-info}/WHEEL +0 -0
  72. {absfuyu-5.1.0.dist-info → absfuyu-5.2.0.dist-info}/entry_points.txt +0 -0
  73. {absfuyu-5.1.0.dist-info → absfuyu-5.2.0.dist-info}/licenses/LICENSE +0 -0
absfuyu/util/lunar.py CHANGED
@@ -4,7 +4,7 @@ Absfuyu: Lunar calendar
4
4
  -----------------------
5
5
  Convert to lunar calendar
6
6
 
7
- Version: 5.1.0
7
+ Version: 5.2.0
8
8
  Date updated: 10/03/2025 (dd/mm/yyyy)
9
9
 
10
10
  Source:
absfuyu/util/path.py CHANGED
@@ -3,8 +3,8 @@ Absfuyu: Path
3
3
  -------------
4
4
  Path related
5
5
 
6
- Version: 5.1.0
7
- Date updated: 10/03/2025 (dd/mm/yyyy)
6
+ Version: 5.2.0
7
+ Date updated: 14/03/2025 (dd/mm/yyyy)
8
8
 
9
9
  Feature:
10
10
  --------
@@ -3,8 +3,8 @@ Absfuyu: Performance
3
3
  --------------------
4
4
  Performance Check
5
5
 
6
- Version: 5.1.0
7
- Date updated: 10/03/2025 (dd/mm/yyyy)
6
+ Version: 5.2.0
7
+ Date updated: 15/03/2025 (dd/mm/yyyy)
8
8
 
9
9
  Feature:
10
10
  --------
@@ -20,6 +20,7 @@ Feature:
20
20
  __all__ = [
21
21
  # Wrapper
22
22
  "function_debug",
23
+ "function_benchmark",
23
24
  "measure_performance",
24
25
  "retry",
25
26
  # Class
@@ -32,12 +33,12 @@ __all__ = [
32
33
  import time
33
34
  import tracemalloc
34
35
  from collections.abc import Callable
36
+ from dataclasses import dataclass
35
37
  from functools import wraps
36
38
  from inspect import getsource
37
- from typing import Any, ParamSpec, TypeVar
39
+ from typing import Any, Literal, ParamSpec, TypeVar, overload
38
40
 
39
41
  from absfuyu.core import deprecated, versionadded, versionchanged
40
- from absfuyu.dxt import ListNoDunder
41
42
 
42
43
  # Type
43
44
  # ---------------------------------------------------------------------------
@@ -45,6 +46,30 @@ P = ParamSpec("P") # Parameter type
45
46
  R = TypeVar("R") # Return type
46
47
 
47
48
 
49
+ # Support
50
+ # ---------------------------------------------------------------------------
51
+ @dataclass
52
+ class BenchmarkResult:
53
+ """
54
+ Use ``format(BenchmarkResult(...), "seconds")`` to view result in seconds.
55
+ """
56
+
57
+ min_: float
58
+ max_: float
59
+ avg: float
60
+
61
+ def __format__(self, format_spec: str) -> str:
62
+ clsname = self.__class__.__name__
63
+ if format_spec.lower().strip().startswith("seconds"):
64
+ fields = [f"{x}={getattr(self, x):,.6f}s" for x in self._get_fields()]
65
+ return f"{clsname}({', '.join(fields)})"
66
+ return repr(self)
67
+
68
+ @classmethod
69
+ def _get_fields(cls) -> tuple[str, ...]:
70
+ return tuple(cls.__dataclass_fields__)
71
+
72
+
48
73
  # Function
49
74
  # ---------------------------------------------------------------------------
50
75
  @versionchanged("3.2.0", reason="Updated functionality")
@@ -108,6 +133,96 @@ def measure_performance(f: Callable[P, R]) -> Callable[P, R]:
108
133
  return wrapper
109
134
 
110
135
 
136
+ @overload
137
+ def function_benchmark(func: Callable[P, R], /) -> Callable[P, R]: ...
138
+ @overload
139
+ def function_benchmark(*, n: int = 1) -> Callable[[Callable[P, R]], Callable[P, R]]: ...
140
+ @overload
141
+ def function_benchmark(
142
+ *, n: int = 1, result_only: Literal[False] = False
143
+ ) -> Callable[[Callable[P, R]], Callable[P, R]]: ...
144
+ @overload
145
+ def function_benchmark(
146
+ *, n: int = 1, result_only: Literal[True] = ...
147
+ ) -> Callable[[Callable[P, R]], Callable[P, BenchmarkResult]]: ...
148
+
149
+
150
+ @versionadded("5.2.0")
151
+ def function_benchmark(
152
+ func: Callable[P, R] | None = None, /, *, n: int = 1, result_only: bool = False
153
+ ):
154
+ """
155
+ This run function for ``n`` times and calculate min, max, average runtime.
156
+
157
+ Parameters
158
+ ----------
159
+ func : Callable[P, R] | None, optional
160
+ Callable with parameter **P and returns R, by default ``None``
161
+
162
+ n : int, optional
163
+ Run how many times, by default ``1``
164
+
165
+ result_only : bool, optional
166
+ Returns BenchmarkResult instead of ``func`` result, by default ``False``
167
+
168
+
169
+ Usage
170
+ -----
171
+ Use this as a decorator (``@function_benchmark``)
172
+
173
+ Example:
174
+ --------
175
+ >>> @function_benchmark
176
+ >>> def test():
177
+ ... return 1 + 1
178
+ >>> test()
179
+ BenchmarkResult(min_=0.000000s, max_=0.000000s, avg=0.000000s)
180
+ 2
181
+
182
+ >>> @function_benchmark(n=1)
183
+ >>> def test():
184
+ ... return 1 + 1
185
+ >>> test()
186
+ BenchmarkResult(min_=0.000000s, max_=0.000000s, avg=0.000000s)
187
+ 2
188
+ """
189
+
190
+ times = max(n, 1)
191
+
192
+ def decorator(f: Callable[P, R]) -> Callable[P, R | BenchmarkResult]:
193
+ @wraps(f)
194
+ def wrapper(*args: P.args, **kwargs: P.kwargs) -> R | BenchmarkResult:
195
+ output = f(*args, **kwargs) # Run function and save result into a variable
196
+
197
+ def _run() -> float:
198
+ # Performance check
199
+ start_time = time.perf_counter() # Start time measure
200
+ f(*args, **kwargs)
201
+ finish_time = time.perf_counter() # Get finished time
202
+ return finish_time - start_time
203
+
204
+ # run = (_run() for _ in range(times))
205
+ run = [_run() for _ in range(times)]
206
+ try:
207
+ avg_runtime = sum(run) / len(run)
208
+ except ZeroDivisionError:
209
+ avg_runtime = min(run)
210
+ result = BenchmarkResult(min(run), max(run), avg_runtime)
211
+
212
+ if result_only:
213
+ return result
214
+
215
+ print(format(result, "seconds"))
216
+
217
+ return output
218
+
219
+ return wrapper
220
+
221
+ if func is None:
222
+ return decorator
223
+ return decorator(func)
224
+
225
+
111
226
  @versionadded("3.2.0")
112
227
  def function_debug(f: Callable[P, R]) -> Callable[P, R]:
113
228
  """
@@ -284,7 +399,7 @@ class Checker:
284
399
  def dir_(self) -> list[str]:
285
400
  """``dir()`` of variable"""
286
401
  # return self.item_to_check.__dir__()
287
- return ListNoDunder(self.item_to_check.__dir__())
402
+ return [x for x in dir(self.item_to_check) if not x.startswith("__")]
288
403
 
289
404
  @property
290
405
  def source(self) -> str | None:
@@ -3,7 +3,7 @@ Absfuyu: Shorten number
3
3
  -----------------------
4
4
  Short number base on suffixes
5
5
 
6
- Version: 5.1.0
6
+ Version: 5.2.0
7
7
  Date updated: 10/03/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
@@ -3,8 +3,8 @@ Absufyu: Utilities
3
3
  ------------------
4
4
  Text table
5
5
 
6
- Version: 5.1.0
7
- Date updated: 10/03/2025 (dd/mm/yyyy)
6
+ Version: 5.2.0
7
+ Date updated: 13/03/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module level
@@ -18,14 +18,28 @@ import os
18
18
  from collections.abc import Sequence
19
19
  from enum import StrEnum
20
20
  from textwrap import TextWrapper
21
- from typing import Literal
21
+ from typing import Literal, Protocol, cast
22
22
 
23
23
  from absfuyu.core import BaseClass
24
24
 
25
25
 
26
26
  # Style
27
27
  # ---------------------------------------------------------------------------
28
- class BoxDrawingCharacter(StrEnum):
28
+ class BoxDrawingCharacter(Protocol):
29
+ UPPER_LEFT_CORNER: str = ""
30
+ UPPER_RIGHT_CORNER: str = ""
31
+ HORIZONTAL: str = ""
32
+ VERTICAL: str = ""
33
+ LOWER_LEFT_CORNER: str = ""
34
+ LOWER_RIGHT_CORNER: str = ""
35
+ VERTICAL_RIGHT: str = ""
36
+ VERTICAL_LEFT: str = ""
37
+ CROSS: str = ""
38
+ HORIZONTAL_UP: str = ""
39
+ HORIZONTAL_DOWN: str = ""
40
+
41
+
42
+ class BoxDrawingCharacterNormal(StrEnum):
29
43
  """
30
44
  Box drawing characters - Normal
31
45
 
@@ -105,6 +119,35 @@ class BoxDrawingCharacterDouble(StrEnum):
105
119
  HORIZONTAL_DOWN = "\u2566"
106
120
 
107
121
 
122
+ def get_box_drawing_character(
123
+ style: Literal["normal", "bold", "dashed", "double"] = "normal",
124
+ ) -> BoxDrawingCharacter:
125
+ """
126
+ Choose style for Box drawing characters.
127
+
128
+ Parameters
129
+ ----------
130
+ style : Literal["normal", "bold", "dashed", "double"], optional
131
+ Style for the table, by default ``"normal"``
132
+
133
+ Returns
134
+ -------
135
+ BoxDrawingCharacter
136
+ Box drawing characters in specified style.
137
+ """
138
+
139
+ if style.lower() == "normal":
140
+ return cast(BoxDrawingCharacter, BoxDrawingCharacterNormal)
141
+ elif style.lower() == "bold":
142
+ return cast(BoxDrawingCharacter, BoxDrawingCharacterBold)
143
+ elif style.lower() == "dashed":
144
+ return cast(BoxDrawingCharacter, BoxDrawingCharacterDashed)
145
+ elif style.lower() == "double":
146
+ return cast(BoxDrawingCharacter, BoxDrawingCharacterDouble)
147
+ else:
148
+ return cast(BoxDrawingCharacter, BoxDrawingCharacterNormal)
149
+
150
+
108
151
  # Class
109
152
  # ---------------------------------------------------------------------------
110
153
  class OneColumnTableMaker(BaseClass):
@@ -159,16 +202,7 @@ class OneColumnTableMaker(BaseClass):
159
202
  self._paragraphs: list[Sequence[str]] = []
160
203
 
161
204
  # Style
162
- if style == "normal":
163
- self._table_char = BoxDrawingCharacter
164
- elif style == "bold":
165
- self._table_char = BoxDrawingCharacterBold # type: ignore
166
- elif style == "dashed":
167
- self._table_char = BoxDrawingCharacterDashed # type: ignore
168
- elif style == "double":
169
- self._table_char = BoxDrawingCharacterDouble # type: ignore
170
- else:
171
- self._table_char = BoxDrawingCharacter # type: ignore
205
+ self._table_char = get_box_drawing_character(style=style)
172
206
 
173
207
  # Text wrapper
174
208
  self._text_wrapper = TextWrapper(
absfuyu/util/zipped.py CHANGED
@@ -1,10 +1,11 @@
1
1
  """
2
2
  Absfuyu: Zipped
3
3
  ---------------
4
- Zipping stuff (deprecated soon, most features already in absfuyu.util.path.Directory)
4
+ Zipping stuff
5
+ (deprecated, use absfuyu.util.path.Directory)
5
6
 
6
- Version: 5.1.0
7
- Date updated: 10/03/2025 (dd/mm/yyyy)
7
+ Version: 5.2.0
8
+ Date updated: 16/03/2025 (dd/mm/yyyy)
8
9
  """
9
10
 
10
11
  # Module level
absfuyu/version.py CHANGED
@@ -3,8 +3,8 @@ Absfuyu: Version
3
3
  ----------------
4
4
  Package versioning module
5
5
 
6
- Version: 5.1.0
7
- Date updated: 10/03/2025 (dd/mm/yyyy)
6
+ Version: 5.2.0
7
+ Date updated: 15/03/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module level
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: absfuyu
3
- Version: 5.1.0
3
+ Version: 5.2.0
4
4
  Summary: A small collection of code
5
5
  Project-URL: Homepage, https://github.com/AbsoluteWinter/absfuyu-public
6
6
  Project-URL: Documentation, https://absolutewinter.github.io/absfuyu-docs/
@@ -0,0 +1,76 @@
1
+ absfuyu/__init__.py,sha256=Me_UQT0wqp5GPpohk7HBD3ijJdIsIafBJJI6vn_SRDQ,600
2
+ absfuyu/__main__.py,sha256=j6vPe7oFtED_nC__UeSsmoNiE474ErYW-gVpQmRKQ0c,595
3
+ absfuyu/logger.py,sha256=J-O12HYtQzP8Zm_4NtpzBQruAbqxSgsOtH4MKGJJAs8,13043
4
+ absfuyu/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
+ absfuyu/sort.py,sha256=vl48Ijm16Jasj5unp3HLU0d-7jN-FihOoyI_x8wBUlA,3250
6
+ absfuyu/typings.py,sha256=b6HfKgOFC6Nw9wcPr57jhMvH4YrvJIGfMBWji9qYXKU,4598
7
+ absfuyu/version.py,sha256=HxRg7XUVfBKVgAebxK9YrPbys_sVTEKqHD1QW4VdEOM,14489
8
+ absfuyu/cli/__init__.py,sha256=81GpY_LfmtMBdFdBbkti-YUAdBgzVxRXiXCdM7PgJKM,1181
9
+ absfuyu/cli/color.py,sha256=s64Sq7O_2ICJgWle8msh3tpoirlG8wEVsm7w7tba3eM,1139
10
+ absfuyu/cli/config_group.py,sha256=Y4M7FlXUJcLhTC_Vzul-xW7VQ-CGGi2SiYJiY2NK3DI,1505
11
+ absfuyu/cli/do_group.py,sha256=cVqYN5t0WTWRzvY0WdsCSWZcW-n2JR0JMpYGWOVRKUs,2438
12
+ absfuyu/cli/game_group.py,sha256=L621kuN4ncpFakxB2sofuByivA-ySr1ZFZrur8uXnCA,2623
13
+ absfuyu/cli/tool_group.py,sha256=RV_Fnap66KGm33DgvTZsPHenhbMx9IwYZgvNzVA7cj0,3416
14
+ absfuyu/config/__init__.py,sha256=ZpWb3yuO_9UgmZiDzuvwMXyeJMMMLP8xRrw25fjLpHY,8238
15
+ absfuyu/config/config.json,sha256=-ZQnmDuLq0aAFfsrQbSNR3tq5k9Eu9IVUQgYD9htIQM,646
16
+ absfuyu/core/__init__.py,sha256=PQf_DHqI5zU-TIQbiARfF5mQG4R77FiX-5ySOZfJ9wY,1186
17
+ absfuyu/core/baseclass.py,sha256=x3UIToKNZo09w6xVC_MWQrhZcZJ7q_nFq7sr9s-Ts7g,22591
18
+ absfuyu/core/baseclass2.py,sha256=NWCeAmS5-coLlq1Q9Y9ouFe1mefA0Q9YRKnhCeBx6yA,5366
19
+ absfuyu/core/decorator.py,sha256=xnzIFMcVfxfm7Den4QnZ4AEaHSdszcHSpWyPABm4YPY,4176
20
+ absfuyu/core/docstring.py,sha256=gAVovS1zVn_H9e-xkNY4xQtEQMf_p3PRpdTfpGqA5_A,5791
21
+ absfuyu/core/dummy_cli.py,sha256=hqsjrEbT-BPLRaODdoslwc53YQyM67Rse057gvlnOSo,1884
22
+ absfuyu/core/dummy_func.py,sha256=1XK6E3RDoQqN7eYkuGpoo025g0JcEHrBFrVZz71XIlk,1426
23
+ absfuyu/dxt/__init__.py,sha256=c-KOWD7LNwV6cBRv9RjEP2D6C8lBhx8Q0CtdcXFA0_Q,986
24
+ absfuyu/dxt/dictext.py,sha256=Sp4jMPvKLb61nU6g4JJ86dsxIhlc3eZXTsys1oXy41M,6073
25
+ absfuyu/dxt/dxt_support.py,sha256=dB313kVTWRVHGhsA2daNBjmU3xNz6_B72Cn6JbgvvpE,2109
26
+ absfuyu/dxt/intext.py,sha256=9fV9-CsY1mbaH6k3BkLo1nSn99JN1M0m2ES2zQpuXDE,17454
27
+ absfuyu/dxt/listext.py,sha256=Hr3b6B2si6pbzI_vEmGr2_PiTQpQN2ICcrIrSN5JPPw,19328
28
+ absfuyu/dxt/strext.py,sha256=ILOtcbF23qWX_relkW8HWNnJCGouIDEh2X5OAXDHNWk,16257
29
+ absfuyu/extra/__init__.py,sha256=w47uEx0KkUfSVuX9_WYM2xVBcfHd93b9YzTlWs8dkwc,182
30
+ absfuyu/extra/beautiful.py,sha256=OjaNY457I7eePklQ8sN6I1b11QrkmIzra8IW-Aj3NlM,8137
31
+ absfuyu/extra/data_analysis.py,sha256=AZA4V-c-ZBe7Zkv1_P6exSyWr5UjHmH5Dv0P1MxVXw8,499
32
+ absfuyu/extra/da/__init__.py,sha256=S-jDX96fQ7s6mFxCNFrkqM4ckQGuEAHdCMN4TgzASkw,913
33
+ absfuyu/extra/da/dadf.py,sha256=duhZwbHBm2F5g_QY_gTx1JK1segxKyVsg-wIr4t9q-Y,38688
34
+ absfuyu/extra/da/dadf_base.py,sha256=IhJiYu4whWjkV6hUBrvHF9kRdXyCO2swwt2_GfvNAu8,5167
35
+ absfuyu/extra/da/df_func.py,sha256=IWVIjQdKc7TGfVK8qmhsikoyWhHhrvd9aM2JH7J6giM,2524
36
+ absfuyu/extra/da/mplt.py,sha256=POoD7a7iUmivzcVUtbhZgFhSFkEMoLgPDhE6Wxn5HWE,6305
37
+ absfuyu/fun/__init__.py,sha256=YUXIHAkluHR40ld3pY-5qy7Dim18BFXOwP9aQWGf4Qw,5435
38
+ absfuyu/fun/tarot.py,sha256=LuA_ioFjpBuRRE95eIqa66YuyOjhsgidezIfR_oV1C0,2401
39
+ absfuyu/game/__init__.py,sha256=w_7djRlaH_bRnXDIE7k2o3IH7mEnI3HoPNATsHO3RVk,4691
40
+ absfuyu/game/game_stat.py,sha256=3qIhHowsKSw03538hgikjDXcNnFZnFAeh8oQGgatMWA,1236
41
+ absfuyu/game/sudoku.py,sha256=yWH6qFYjFQELpq47ip3CU07jzL5rvWpc6tGhuyhbAAw,10405
42
+ absfuyu/game/tictactoe.py,sha256=Ae53kHZL9CmqUKAz6IUUv5T1ARBkC8zeOf3tqm8su3g,9958
43
+ absfuyu/game/wordle.py,sha256=CWWh_W1-I7nS_v33EgNTxbFyEXyPApeLB6kzOMZhHrg,101576
44
+ absfuyu/general/__init__.py,sha256=vufEDiUeK5uleZS5AQ-0vbMe31nfgTRxcUtW3kwxbV8,472
45
+ absfuyu/general/content.py,sha256=Dabw5rLgfryLw8ApD6qOSJBAe6Pz1Eh5A8JAsX_01Ug,17122
46
+ absfuyu/general/human.py,sha256=Uf8Eih7Xoq3WrFX8aoYSDcqTAJxCBhVJLm_EzuY-a4w,8099
47
+ absfuyu/general/shape.py,sha256=elZcTGQ11_-qczMwNoiw5Y4sQpWRd_tgmzyUPIdmwJ4,38619
48
+ absfuyu/pkg_data/__init__.py,sha256=-RscaF305zV76dFI_gecNm76_Smkx0OHP0OxSNKb2J0,5510
49
+ absfuyu/pkg_data/chemistry.pkl,sha256=kYWNa_PVffoDnzT8b9Jvimmf_GZshPe1D-SnEKERsLo,4655
50
+ absfuyu/pkg_data/deprecated.py,sha256=FhUFNgjjeaneBU66ImZuzJRKNZJ7OA_qLz2QoDbUn8M,4349
51
+ absfuyu/pkg_data/passwordlib_lzma.pkl,sha256=rT5lJT8t42BATU5Cp2qFwbnZkbx-QlUgodSvR0wFY6I,891877
52
+ absfuyu/pkg_data/tarot.pkl,sha256=ssXTCC_BQgslO5F-3a9HivbxFQ6BioIe2E1frPVi2m0,56195
53
+ absfuyu/tools/__init__.py,sha256=yAO-Iq348oQYAbizMwJHhMEyonpe3HIkxxIwVhZh3Yw,926
54
+ absfuyu/tools/checksum.py,sha256=OaMkEyHawqZpVwrYaSLgv7ErKDtQb1Wk10u0pKQbkMs,5666
55
+ absfuyu/tools/converter.py,sha256=sXHtKl5QyLDv8pjz-msq5ZXgGjMbQplKaGivMnyiAm8,13566
56
+ absfuyu/tools/generator.py,sha256=o6RT3h8oSiLibubdBQTptKQUUHb5YBcGUR0-imVwKhk,13473
57
+ absfuyu/tools/inspector.py,sha256=OHq2Hj7uzisaqto1mngVVYo2rvpzyUGKFSUMpsjDzmw,15107
58
+ absfuyu/tools/keygen.py,sha256=Ic_Vsk_QHqJ7331CyDcPm59csLB0ar_Vka9NMs07dO0,7115
59
+ absfuyu/tools/obfuscator.py,sha256=mViEFLHjyic2Zlr8Q7v3S8xmpTUexLA2RvDfqUngrpE,13669
60
+ absfuyu/tools/passwordlib.py,sha256=vxN6mwZAvHiUppSVv5yS_djkVLeutgrR3exXaj2AZo8,11080
61
+ absfuyu/tools/shutdownizer.py,sha256=Yye7rVzH3CeVNWFnKvUIYXeKkKOyXNBcF65hPv8QpK4,8549
62
+ absfuyu/tools/web.py,sha256=0hWiPSsprJPy_x1Ml_MEUwTkfocHj6Ew_77WDms5K6Y,1240
63
+ absfuyu/util/__init__.py,sha256=MrHykiPbfR-r_U3Rf1l4_ZGPfHQgGL7AWUU0WrzBvfc,4187
64
+ absfuyu/util/api.py,sha256=zB2XxI2fzYAmX-fpPHFXTWizKixHDf3fTsZkDUcvZv4,4463
65
+ absfuyu/util/json_method.py,sha256=rHJ_omzJ9lwEacnTLprLVJmbZrRXepCbBYb57ElGW7M,2847
66
+ absfuyu/util/lunar.py,sha256=5zVsCl1UdsFW8sR7BHquF0VGyVNpJdyJcdZGkcDyuh0,13630
67
+ absfuyu/util/path.py,sha256=uZkLRlkUwq4p261pB7VHuvn3kxbMHxyXBJTefsWhhgA,19444
68
+ absfuyu/util/performance.py,sha256=TzsubH_1qrSNPSk42R5WthY6WlGD9EC5Gm9XpMLZU7M,12094
69
+ absfuyu/util/shorten_number.py,sha256=B7VDIlS3IYutlFkktv1pedEOGViC6P6BpeAOJn2BYWQ,8312
70
+ absfuyu/util/text_table.py,sha256=lkZREFjw_Jh1Hl2vhekROASVHvB3VoWaK9bmRMLp7bU,9112
71
+ absfuyu/util/zipped.py,sha256=8I6vW2hTNQtogzT7nKOMhSJrsQup7uRK0nu5JOsikO0,3042
72
+ absfuyu-5.2.0.dist-info/METADATA,sha256=pGcb4H4C4H3ZhlhY5C22n1coTfCyp4YA0pkY8kO_BvQ,4965
73
+ absfuyu-5.2.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
74
+ absfuyu-5.2.0.dist-info/entry_points.txt,sha256=bW5CgJRTTWJ2Pywojo07sf-YucRPcnHzMmETh5avbX0,79
75
+ absfuyu-5.2.0.dist-info/licenses/LICENSE,sha256=pFCHBSNSzdXwYG1AHpq7VcofI1NMQ1Fc77RzZ4Ln2O4,1097
76
+ absfuyu-5.2.0.dist-info/RECORD,,
absfuyu/core/typings.py DELETED
@@ -1,40 +0,0 @@
1
- """
2
- Absfuyu: Core
3
- -------------
4
- Pre-defined typing
5
-
6
- Version: 5.1.0
7
- Date updated: 10/03/2025 (dd/mm/yyyy)
8
- """
9
-
10
- # Module Package
11
- # ---------------------------------------------------------------------------
12
- __all__ = ["_T", "_P", "_R", "_CALLABLE", "_CT", "_N", "_Number", "override"]
13
-
14
-
15
- # Library
16
- # ---------------------------------------------------------------------------
17
- from collections.abc import Callable
18
- from typing import ParamSpec, TypeVar
19
-
20
- try:
21
- from typing import override # type: ignore
22
- except ImportError:
23
- from absfuyu.core.decorator import dummy_decorator as override
24
-
25
-
26
- # Type
27
- # ---------------------------------------------------------------------------
28
- _T = TypeVar("_T") # Type
29
-
30
- # Callable
31
- _P = ParamSpec("_P") # Parameter type
32
- _R = TypeVar("_R") # Return type - Can be anything
33
- _CALLABLE = Callable[_P, _R]
34
-
35
- # Class type - Can be any subtype of `type`
36
- _CT = TypeVar("_CT", bound=type)
37
-
38
- # Number type
39
- _N = TypeVar("_N", int, float)
40
- _Number = int | float
@@ -1,76 +0,0 @@
1
- absfuyu/__init__.py,sha256=MPfDLhEfJJT_AmFbllAkm98G8n2fTwgFHeV5I6mpceM,600
2
- absfuyu/__main__.py,sha256=ABkOGXf7rO7QS033Dftpa2qA2f78JcXtmvEHL1_r43U,603
3
- absfuyu/logger.py,sha256=iVV3_ZO8Pr7vemapiIyXN4TPjvSXLE4qKbMMoguHwx0,13043
4
- absfuyu/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
- absfuyu/sort.py,sha256=PELMTOEinksYBEaa1_mUD0Prepi4eMeD73y3kMCKTk0,3250
6
- absfuyu/version.py,sha256=uuL4CQmZvjhYWGONFG4H5JelVaFKqQcnl47gZQqSr6w,14489
7
- absfuyu/cli/__init__.py,sha256=V_PyNK-nC5TUGrCZE7iaigjhImT2gFw5mA_yiVRWBUE,1181
8
- absfuyu/cli/color.py,sha256=TvzLxTH1_uF5miHhdJkxybOXa2bYkKRIuBMlaDC7hbA,1147
9
- absfuyu/cli/config_group.py,sha256=407VbRz_-FJjy1Gj-gjxyEMe3oANcu7qVLdwoJov_Ac,1505
10
- absfuyu/cli/do_group.py,sha256=qGEgAx_ysY_HULL4oSrOXou2SJJmIxZvy1OyQqaxjC8,2438
11
- absfuyu/cli/game_group.py,sha256=2MPgpE_hEFBAsFYobVPAf3X-eUzZYsJXGh0uGNdkGXs,2623
12
- absfuyu/cli/tool_group.py,sha256=xCNHMGsDkFF1xIQVCm-ubstZeCKjjFgvzq6MOt03eyE,3418
13
- absfuyu/config/__init__.py,sha256=kuTdGTlt6cvsouAVZxXRjvZXOGPSwWq0EbigZ2ps9cI,8238
14
- absfuyu/config/config.json,sha256=-ZQnmDuLq0aAFfsrQbSNR3tq5k9Eu9IVUQgYD9htIQM,646
15
- absfuyu/core/__init__.py,sha256=L4O0yMufkinY7Sep1EqU0793H2vXgKnZ2j0NwgiM9Cg,1186
16
- absfuyu/core/baseclass.py,sha256=sQIiIIL5cOrdFtm_JV3u30NFXqlctexQNfFp0C-wGM8,22591
17
- absfuyu/core/baseclass2.py,sha256=e0T_reiN8d0d-YtmHnfwNCBqebEyceEz_Z-4_nXTsKY,5366
18
- absfuyu/core/decorator.py,sha256=IqMsUL4gsuYnNWH_Hv9XMXE_tzn7DuAwIqzwESgqVbA,4191
19
- absfuyu/core/docstring.py,sha256=3ApYWaH0mI8P4r7rSbcHBgkmFcAXD8hY52JqUcNW6Ng,5287
20
- absfuyu/core/dummy_cli.py,sha256=VJYrY3Em-0HbOdVOLVvInh8OOV7he4ZFcvZWMTgbHIs,1884
21
- absfuyu/core/dummy_func.py,sha256=x327grH4jcBZUJMXkt5R1GrPHxS_NTQHwqvIx31c8SA,1442
22
- absfuyu/core/typings.py,sha256=IFXkHvT4kNV4ZB1UC5iJ_WB0eDdMKXpfTJL1j-KAs8E,1021
23
- absfuyu/dxt/__init__.py,sha256=5LvbjQUn_YK8BvyrlcpE969sdyJTcfAbfwQSKaFFbFo,986
24
- absfuyu/dxt/dictext.py,sha256=UpH3q3rWXahii4MVAx3OSeJK9k-BJhBv0_DL5U-etjw,5998
25
- absfuyu/dxt/dxt_support.py,sha256=rbc4KT5k2KetE2gQRXbeGa-iA1WfKqlvexnckJuY9BI,2109
26
- absfuyu/dxt/intext.py,sha256=SXl7qj3yFaju-efwmH78Dp84e7tJSbqgQFAPiAPsXbU,17380
27
- absfuyu/dxt/listext.py,sha256=ffr-DGBswrMkWHvoDrixYGFQ38tRaoHHcSAmhEaVrI0,14711
28
- absfuyu/dxt/strext.py,sha256=9l9BOmM18_uCjmh4-nOF2O43kmWjXttIMe3_6QlWBpc,14626
29
- absfuyu/extra/__init__.py,sha256=vorZl56ZYkI-9L_FUdawi0n2UemRtxMMkSqK95AACZA,182
30
- absfuyu/extra/beautiful.py,sha256=Bzlh1yWQxfOu1SMYA-EJDviksEHs9zqkYC64jc2Sy4k,8137
31
- absfuyu/extra/data_analysis.py,sha256=kZU89eWNNdj16CR7HIPBfs9SJNqZw0nafsA5WpKl1B4,568
32
- absfuyu/extra/da/__init__.py,sha256=vLPcbCwsoGd3hqrsK3Y14p5JEQayvKN0FuqMx-dteig,913
33
- absfuyu/extra/da/dadf.py,sha256=fvfoOVCAbI2G3_AyHHIXDfBaBMG0fhXPn8e5qMQyFOc,37624
34
- absfuyu/extra/da/dadf_base.py,sha256=AcwyAUcenBLQKMXprNFAohgFqpQqDq-vuuxaDSlHiEc,5167
35
- absfuyu/extra/da/df_func.py,sha256=9yxm7k0O_f5KW0BhAuhZf7lWlZLJfd-zaZ7ApHn0QBA,2524
36
- absfuyu/extra/da/mplt.py,sha256=OmHdvqlbr94wLnbICpuactAf-dCaol6qKM3-63ZcFKU,6305
37
- absfuyu/fun/__init__.py,sha256=No69qm7BlYwNUuSFYO8GfxqO18FRnINAtn10LoFq7bM,5435
38
- absfuyu/fun/tarot.py,sha256=25G9ncr5a5DFkcx3pfq8ON7Y76crZSL9vIaPDVzceRQ,2401
39
- absfuyu/game/__init__.py,sha256=eMNamB9D59Lr5NWqikHsSskOzo0O86w-4wUc2E5mYhA,4691
40
- absfuyu/game/game_stat.py,sha256=qdcKXVXOorlgiPaePjULXkyRCIc4Gl2qanJ3wp3HMjg,1236
41
- absfuyu/game/sudoku.py,sha256=kuE2_Yj4DNX5ucx_2cUm2hmPt1YFGAhsXMOc0AutNlg,10405
42
- absfuyu/game/tictactoe.py,sha256=kd3jm3x6qHa_f0bBuSLgZC4yYjYVLLMyGOnnb8vBBS4,9960
43
- absfuyu/game/wordle.py,sha256=nSPrYnLC4KXndBRsS87OMUyhacuB5BjrNbDoqPMxVKQ,101576
44
- absfuyu/general/__init__.py,sha256=QdigyO32IATSvildy8Wz9euKplrhBWo3ZUihtFkozTw,472
45
- absfuyu/general/content.py,sha256=AWjHVEi3L9E-bFmJsjezMsLkHUiu8HI1mBx0Sl5Vyd4,17122
46
- absfuyu/general/human.py,sha256=nqxtAq9sOxU7pfaBqy7UvwEoB3pk9-oj1j8wA1wqwn4,8099
47
- absfuyu/general/shape.py,sha256=2hroh_azs7gkkYLQlay2ayxP_8L5dZX6FcDJjniC-tI,38619
48
- absfuyu/pkg_data/__init__.py,sha256=YZbaTAAMCVbBgQ_pdkcp8VKT5FPxnf9CEEHCvTXnleU,5510
49
- absfuyu/pkg_data/chemistry.pkl,sha256=kYWNa_PVffoDnzT8b9Jvimmf_GZshPe1D-SnEKERsLo,4655
50
- absfuyu/pkg_data/deprecated.py,sha256=gzPZe91S2zFaaUApcmvlZvwfjiTb77vuzBv7Q-yRf_A,4349
51
- absfuyu/pkg_data/passwordlib_lzma.pkl,sha256=rT5lJT8t42BATU5Cp2qFwbnZkbx-QlUgodSvR0wFY6I,891877
52
- absfuyu/pkg_data/tarot.pkl,sha256=ssXTCC_BQgslO5F-3a9HivbxFQ6BioIe2E1frPVi2m0,56195
53
- absfuyu/tools/__init__.py,sha256=-8fUNP5PPcrcmb1HEtEQYPFrRP1_ASptSKxXX3sQ3lk,777
54
- absfuyu/tools/checksum.py,sha256=H_ynMXYBHfXU0UNI8OF-LRDYsTGkejrLzLp8tLmkQB0,5666
55
- absfuyu/tools/converter.py,sha256=bVnI1xNGJIVgGq3mmxxWn_GmYkDmwTI5JS-Z4or7o6c,12951
56
- absfuyu/tools/generator.py,sha256=2gKmJVJToO5ywGM-lEA8AODjEg6VoVHT1D1fSddYbXc,8996
57
- absfuyu/tools/inspector.py,sha256=ur89cj2Fax-01Jbu-U0og9f2gzPOzk2E1qMC-rTL1XQ,13985
58
- absfuyu/tools/keygen.py,sha256=tEh-dz6PY29PTiqOCzqWH6j1HxW_7tjgUjdm2kKyRGk,7115
59
- absfuyu/tools/obfuscator.py,sha256=4zJC1HEkP_EuQohAufQwmsqFA91qeia2wG5n9qaxlU4,13669
60
- absfuyu/tools/passwordlib.py,sha256=1Iv2lBjodF-fZavnbP70iS9Jvp9O16ziprg0LXnuPok,11128
61
- absfuyu/tools/shutdownizer.py,sha256=3dEMQITEdDa1MHiEApWW1FUtWSm-0BquKgALt2XZi28,8549
62
- absfuyu/tools/web.py,sha256=SElkz3b4rewWHP7shbdgIh06g_QoDBdZGnQ-jl3cT0M,1240
63
- absfuyu/util/__init__.py,sha256=dqqOBqFjNslJJ_sUt23D_HgZEXmxNlexLYnvcS4D7vw,3831
64
- absfuyu/util/api.py,sha256=JghzqXJy9kAy__M-ZknhthEmOIU5rjJ4le5ZCLV4Bpk,4288
65
- absfuyu/util/json_method.py,sha256=MjCi0hQg6T992BTnKMCsZixsS6tZhYRZC4BNCJJ5zrc,2197
66
- absfuyu/util/lunar.py,sha256=VVngR59NfDxcWJlGrbJkcykrnb_F7IOMn_gsfWOZe6Q,13630
67
- absfuyu/util/path.py,sha256=tOGyvlPxjE64x0vSHYKQs6ABA3c5xPlJ8WXCNmio-MQ,19444
68
- absfuyu/util/performance.py,sha256=FokAopq44txHUIG-4zU2dKdIVoBMJgGr-iPktLFDjeg,8632
69
- absfuyu/util/shorten_number.py,sha256=Cbotfqq0NBkOgmMJy3gue56p-PXfXxok7tBWDadN82s,8312
70
- absfuyu/util/text_table.py,sha256=L5w3mxYezatm-zriqR78_RtYt8oxNzZizYn17hiZz-8,8181
71
- absfuyu/util/zipped.py,sha256=EfwUDg5eWbu78oRsmr-eST-AdSzyrPU0l8KO4D8dhcQ,3067
72
- absfuyu-5.1.0.dist-info/METADATA,sha256=gLOnkMbrFEJLDkGuIraAMK32TR31ELNwkFrM0FXhMmo,4965
73
- absfuyu-5.1.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
74
- absfuyu-5.1.0.dist-info/entry_points.txt,sha256=bW5CgJRTTWJ2Pywojo07sf-YucRPcnHzMmETh5avbX0,79
75
- absfuyu-5.1.0.dist-info/licenses/LICENSE,sha256=pFCHBSNSzdXwYG1AHpq7VcofI1NMQ1Fc77RzZ4Ln2O4,1097
76
- absfuyu-5.1.0.dist-info/RECORD,,