absfuyu 5.4.0__py3-none-any.whl → 5.5.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.
- absfuyu/__init__.py +1 -1
- absfuyu/__main__.py +2 -2
- absfuyu/cli/__init__.py +2 -2
- absfuyu/cli/color.py +2 -2
- absfuyu/cli/config_group.py +2 -2
- absfuyu/cli/do_group.py +2 -2
- absfuyu/cli/game_group.py +2 -2
- absfuyu/cli/tool_group.py +2 -2
- absfuyu/config/__init__.py +2 -2
- absfuyu/core/__init__.py +4 -4
- absfuyu/core/baseclass.py +511 -153
- absfuyu/core/baseclass2.py +3 -3
- absfuyu/core/decorator.py +2 -2
- absfuyu/core/docstring.py +2 -2
- absfuyu/core/dummy_cli.py +2 -2
- absfuyu/core/dummy_func.py +2 -2
- absfuyu/dxt/__init__.py +2 -2
- absfuyu/dxt/dictext.py +5 -11
- absfuyu/dxt/dxt_support.py +2 -2
- absfuyu/dxt/intext.py +4 -4
- absfuyu/dxt/listext.py +69 -14
- absfuyu/dxt/strext.py +4 -4
- absfuyu/extra/__init__.py +2 -2
- absfuyu/extra/beautiful.py +2 -2
- absfuyu/extra/da/__init__.py +2 -2
- absfuyu/extra/da/dadf.py +4 -4
- absfuyu/extra/da/dadf_base.py +2 -2
- absfuyu/extra/da/df_func.py +2 -2
- absfuyu/extra/da/mplt.py +2 -2
- absfuyu/extra/data_analysis.py +2 -2
- absfuyu/fun/__init__.py +2 -2
- absfuyu/fun/rubik.py +2 -2
- absfuyu/fun/tarot.py +2 -2
- absfuyu/game/__init__.py +2 -2
- absfuyu/game/game_stat.py +2 -2
- absfuyu/game/sudoku.py +2 -2
- absfuyu/game/tictactoe.py +2 -2
- absfuyu/game/wordle.py +2 -2
- absfuyu/general/__init__.py +2 -2
- absfuyu/general/content.py +4 -4
- absfuyu/general/human.py +2 -2
- absfuyu/general/shape.py +2 -2
- absfuyu/logger.py +2 -2
- absfuyu/pkg_data/__init__.py +2 -2
- absfuyu/pkg_data/deprecated.py +2 -2
- absfuyu/sort.py +2 -2
- absfuyu/tools/__init__.py +2 -2
- absfuyu/tools/checksum.py +2 -2
- absfuyu/tools/converter.py +2 -2
- absfuyu/tools/generator.py +4 -4
- absfuyu/tools/inspector.py +325 -69
- absfuyu/tools/keygen.py +2 -2
- absfuyu/tools/obfuscator.py +4 -4
- absfuyu/tools/passwordlib.py +2 -2
- absfuyu/tools/shutdownizer.py +2 -2
- absfuyu/tools/web.py +2 -2
- absfuyu/typings.py +2 -2
- absfuyu/util/__init__.py +2 -2
- absfuyu/util/api.py +2 -2
- absfuyu/util/json_method.py +2 -2
- absfuyu/util/lunar.py +2 -2
- absfuyu/util/path.py +17 -4
- absfuyu/util/performance.py +2 -2
- absfuyu/util/shorten_number.py +2 -2
- absfuyu/util/text_table.py +33 -14
- absfuyu/util/zipped.py +2 -2
- absfuyu/version.py +3 -3
- {absfuyu-5.4.0.dist-info → absfuyu-5.5.0.dist-info}/METADATA +2 -2
- absfuyu-5.5.0.dist-info/RECORD +77 -0
- absfuyu-5.4.0.dist-info/RECORD +0 -77
- {absfuyu-5.4.0.dist-info → absfuyu-5.5.0.dist-info}/WHEEL +0 -0
- {absfuyu-5.4.0.dist-info → absfuyu-5.5.0.dist-info}/entry_points.txt +0 -0
- {absfuyu-5.4.0.dist-info → absfuyu-5.5.0.dist-info}/licenses/LICENSE +0 -0
absfuyu/core/baseclass2.py
CHANGED
|
@@ -3,8 +3,8 @@ Absfuyu: Core
|
|
|
3
3
|
-------------
|
|
4
4
|
Bases for other features (with library)
|
|
5
5
|
|
|
6
|
-
Version: 5.
|
|
7
|
-
Date updated:
|
|
6
|
+
Version: 5.5.0
|
|
7
|
+
Date updated: 23/04/2025 (dd/mm/yyyy)
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
10
|
# Module Package
|
|
@@ -71,7 +71,7 @@ class PerformanceTrackingMeta(type):
|
|
|
71
71
|
Usage:
|
|
72
72
|
------
|
|
73
73
|
>>> class Demo(metaclass=PerformanceTrackingMeta):
|
|
74
|
-
... def __init__(self)
|
|
74
|
+
... def __init__(self): ...
|
|
75
75
|
>>> Demo()
|
|
76
76
|
--------------------------------------
|
|
77
77
|
Class: Demo
|
absfuyu/core/decorator.py
CHANGED
absfuyu/core/docstring.py
CHANGED
absfuyu/core/dummy_cli.py
CHANGED
absfuyu/core/dummy_func.py
CHANGED
absfuyu/dxt/__init__.py
CHANGED
absfuyu/dxt/dictext.py
CHANGED
|
@@ -3,8 +3,8 @@ Absfuyu: Data Extension
|
|
|
3
3
|
-----------------------
|
|
4
4
|
dict extension
|
|
5
5
|
|
|
6
|
-
Version: 5.
|
|
7
|
-
Date updated:
|
|
6
|
+
Version: 5.5.0
|
|
7
|
+
Date updated: 23/04/2025 (dd/mm/yyyy)
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
10
|
# Module Package
|
|
@@ -18,7 +18,7 @@ import operator
|
|
|
18
18
|
from collections.abc import Callable
|
|
19
19
|
from typing import Any, NamedTuple, Self, TypeVar
|
|
20
20
|
|
|
21
|
-
from absfuyu.core import
|
|
21
|
+
from absfuyu.core import GetClassMembersMixin, versionadded, versionchanged
|
|
22
22
|
|
|
23
23
|
# from absfuyu.typings import KT as _KT
|
|
24
24
|
# from absfuyu.typings import VT as _VT
|
|
@@ -43,7 +43,7 @@ class DictAnalyzeResult(NamedTuple):
|
|
|
43
43
|
min_list: list
|
|
44
44
|
|
|
45
45
|
|
|
46
|
-
class DictExt(
|
|
46
|
+
class DictExt(GetClassMembersMixin, dict[KT, VT]):
|
|
47
47
|
"""
|
|
48
48
|
``dict`` extension
|
|
49
49
|
|
|
@@ -65,13 +65,7 @@ class DictExt(ShowAllMethodsMixin, dict[KT, VT]):
|
|
|
65
65
|
|
|
66
66
|
Example:
|
|
67
67
|
--------
|
|
68
|
-
>>> test = DictExt({
|
|
69
|
-
... "abc": 9,
|
|
70
|
-
... "def": 9,
|
|
71
|
-
... "ghi": 8,
|
|
72
|
-
... "jkl": 1,
|
|
73
|
-
... "mno": 1
|
|
74
|
-
... })
|
|
68
|
+
>>> test = DictExt({"abc": 9, "def": 9, "ghi": 8, "jkl": 1, "mno": 1})
|
|
75
69
|
>>> test.analyze()
|
|
76
70
|
DictAnalyzeResult(max_value=9, min_value=1, max_list=[('abc', 9), ('def', 9)], min_list=[('jkl', 1), ('mno', 1)])
|
|
77
71
|
"""
|
absfuyu/dxt/dxt_support.py
CHANGED
absfuyu/dxt/intext.py
CHANGED
|
@@ -3,8 +3,8 @@ Absfuyu: Data Extension
|
|
|
3
3
|
-----------------------
|
|
4
4
|
int extension
|
|
5
5
|
|
|
6
|
-
Version: 5.
|
|
7
|
-
Date updated:
|
|
6
|
+
Version: 5.5.0
|
|
7
|
+
Date updated: 23/04/2025 (dd/mm/yyyy)
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
10
|
# Module Package
|
|
@@ -18,7 +18,7 @@ import math
|
|
|
18
18
|
from collections import Counter
|
|
19
19
|
from typing import Any, Literal, Self, overload
|
|
20
20
|
|
|
21
|
-
from absfuyu.core.baseclass import
|
|
21
|
+
from absfuyu.core.baseclass import GetClassMembersMixin
|
|
22
22
|
from absfuyu.core.docstring import deprecated, versionadded, versionchanged
|
|
23
23
|
from absfuyu.dxt.dxt_support import DictBoolTrue
|
|
24
24
|
|
|
@@ -66,7 +66,7 @@ class Pow:
|
|
|
66
66
|
return math.pow(self.number, self.power_by)
|
|
67
67
|
|
|
68
68
|
|
|
69
|
-
class IntExt(
|
|
69
|
+
class IntExt(GetClassMembersMixin, int):
|
|
70
70
|
"""
|
|
71
71
|
``int`` extension
|
|
72
72
|
|
absfuyu/dxt/listext.py
CHANGED
|
@@ -3,8 +3,8 @@ Absfuyu: Data Extension
|
|
|
3
3
|
-----------------------
|
|
4
4
|
list extension
|
|
5
5
|
|
|
6
|
-
Version: 5.
|
|
7
|
-
Date updated:
|
|
6
|
+
Version: 5.5.0
|
|
7
|
+
Date updated: 23/04/2025 (dd/mm/yyyy)
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
10
|
# Module Package
|
|
@@ -18,10 +18,11 @@ import operator
|
|
|
18
18
|
import random
|
|
19
19
|
from collections import Counter
|
|
20
20
|
from collections.abc import Callable, Iterable
|
|
21
|
-
from
|
|
21
|
+
from heapq import heapreplace
|
|
22
|
+
from itertools import accumulate, chain, count, groupby, zip_longest
|
|
22
23
|
from typing import Any, Literal, Self, cast, overload
|
|
23
24
|
|
|
24
|
-
from absfuyu.core.baseclass import
|
|
25
|
+
from absfuyu.core.baseclass import GetClassMembersMixin
|
|
25
26
|
from absfuyu.core.docstring import deprecated, versionadded, versionchanged
|
|
26
27
|
from absfuyu.typings import T as _T
|
|
27
28
|
from absfuyu.util import set_min_max
|
|
@@ -29,7 +30,7 @@ from absfuyu.util import set_min_max
|
|
|
29
30
|
|
|
30
31
|
# Class
|
|
31
32
|
# ---------------------------------------------------------------------------
|
|
32
|
-
class ListExt(
|
|
33
|
+
class ListExt(GetClassMembersMixin, list):
|
|
33
34
|
"""
|
|
34
35
|
``list`` extension
|
|
35
36
|
|
|
@@ -179,7 +180,6 @@ class ListExt(ShowAllMethodsMixin, list):
|
|
|
179
180
|
self,
|
|
180
181
|
sort: bool = False,
|
|
181
182
|
num_of_first_char: int | None = None,
|
|
182
|
-
appear_increment: Literal[False] = ...,
|
|
183
183
|
) -> dict: ...
|
|
184
184
|
|
|
185
185
|
@overload
|
|
@@ -342,16 +342,32 @@ class ListExt(ShowAllMethodsMixin, list):
|
|
|
342
342
|
except TypeError:
|
|
343
343
|
return sep.join(self.apply(str))
|
|
344
344
|
|
|
345
|
-
|
|
345
|
+
@overload
|
|
346
|
+
def numbering(self) -> Self: ...
|
|
347
|
+
|
|
348
|
+
@overload
|
|
349
|
+
def numbering(self, start: int | float = 0) -> Self: ...
|
|
350
|
+
|
|
351
|
+
@overload
|
|
352
|
+
def numbering(self, *, step: int | float = 1) -> Self: ...
|
|
353
|
+
|
|
354
|
+
@overload
|
|
355
|
+
def numbering(self, start: int | float = 0, step: int | float = 1) -> Self: ...
|
|
356
|
+
|
|
357
|
+
@versionchanged("5.5.0", "Use itertools.count to wrap")
|
|
358
|
+
def numbering(self, start: int | float = 0, step: int | float = 1) -> Self:
|
|
346
359
|
"""
|
|
347
360
|
Number the item in list
|
|
348
|
-
(``
|
|
361
|
+
(``itertools.count`` wrapper)
|
|
349
362
|
|
|
350
363
|
Parameters
|
|
351
364
|
----------
|
|
352
|
-
start : int
|
|
365
|
+
start : int | float, optional
|
|
353
366
|
Start from which number, by default ``0``
|
|
354
367
|
|
|
368
|
+
step : int | float, optional
|
|
369
|
+
Step, by default ``1``
|
|
370
|
+
|
|
355
371
|
Returns
|
|
356
372
|
-------
|
|
357
373
|
Self
|
|
@@ -364,8 +380,9 @@ class ListExt(ShowAllMethodsMixin, list):
|
|
|
364
380
|
>>> test.numbering()
|
|
365
381
|
[(0, 9), (1, 9), (2, 9)]
|
|
366
382
|
"""
|
|
367
|
-
|
|
368
|
-
return self.__class__(enumerate(self, start=start))
|
|
383
|
+
nums = count(start=start, step=step)
|
|
384
|
+
# return self.__class__(enumerate(self, start=start))
|
|
385
|
+
return self.__class__(zip(nums, self))
|
|
369
386
|
|
|
370
387
|
@versionadded("5.3.0") # no test case yet
|
|
371
388
|
def transpose(self, fillvalue: _T | None = None, /) -> Self:
|
|
@@ -620,13 +637,51 @@ class ListExt(ShowAllMethodsMixin, list):
|
|
|
620
637
|
temp[x].append(item)
|
|
621
638
|
|
|
622
639
|
# Flatten dict.values
|
|
623
|
-
for k, v in temp.items()
|
|
624
|
-
temp[k] = list(set(chain(*v)))
|
|
640
|
+
temp = {k: list(set(chain(*v))) for k, v in temp.items()}
|
|
625
641
|
|
|
626
642
|
iter = list(temp.values())
|
|
627
643
|
|
|
628
644
|
return list(x for x, _ in groupby(iter))
|
|
629
645
|
|
|
646
|
+
@versionadded("5.5.0")
|
|
647
|
+
def split_equal(self, n: int, sort: bool = True) -> Self:
|
|
648
|
+
"""
|
|
649
|
+
Try to equally split a list of number into ``n`` equal sum parts.
|
|
650
|
+
|
|
651
|
+
**Note:** Element in list must be a number.
|
|
652
|
+
|
|
653
|
+
Parameters
|
|
654
|
+
----------
|
|
655
|
+
n : int
|
|
656
|
+
Split into how many parts. Must be >= 1.
|
|
657
|
+
|
|
658
|
+
sort : bool, optional
|
|
659
|
+
Sort the instance before split, by default ``True``
|
|
660
|
+
|
|
661
|
+
Returns
|
|
662
|
+
-------
|
|
663
|
+
Self
|
|
664
|
+
Splitted (list[list])
|
|
665
|
+
|
|
666
|
+
|
|
667
|
+
Example:
|
|
668
|
+
--------
|
|
669
|
+
>>> ListExt(range(1, 11)).split_equal(2)
|
|
670
|
+
[[10, 7, 5, 4, 1], [9, 8, 6, 3, 2]]
|
|
671
|
+
"""
|
|
672
|
+
|
|
673
|
+
# https://stackoverflow.com/a/61649667
|
|
674
|
+
bins: list[list[int]] = [[0] for _ in range(max(n, 1))]
|
|
675
|
+
if sort:
|
|
676
|
+
# self = self.sorts(reverse=True)
|
|
677
|
+
self = self.__class__(sorted(self, reverse=True))
|
|
678
|
+
for x in self:
|
|
679
|
+
least = bins[0]
|
|
680
|
+
least[0] += x
|
|
681
|
+
least.append(x)
|
|
682
|
+
heapreplace(bins, least)
|
|
683
|
+
return self.__class__(x[1:] for x in bins)
|
|
684
|
+
|
|
630
685
|
# Slicing
|
|
631
686
|
def slice_points(self, points: list[int]) -> Self:
|
|
632
687
|
"""
|
|
@@ -712,7 +767,7 @@ class ListExt(ShowAllMethodsMixin, list):
|
|
|
712
767
|
|
|
713
768
|
Example:
|
|
714
769
|
--------
|
|
715
|
-
>>> ins = ListExt(range(1,20))
|
|
770
|
+
>>> ins = ListExt(range(1, 20))
|
|
716
771
|
|
|
717
772
|
>>> # Normal split chunk
|
|
718
773
|
>>> ins.split_chunk(10)
|
absfuyu/dxt/strext.py
CHANGED
|
@@ -3,8 +3,8 @@ Absfuyu: Data Extension
|
|
|
3
3
|
-----------------------
|
|
4
4
|
str extension
|
|
5
5
|
|
|
6
|
-
Version: 5.
|
|
7
|
-
Date updated:
|
|
6
|
+
Version: 5.5.0
|
|
7
|
+
Date updated: 23/04/2025 (dd/mm/yyyy)
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
10
|
# Module Package
|
|
@@ -18,7 +18,7 @@ import random
|
|
|
18
18
|
from string import ascii_letters as _ascii_letters
|
|
19
19
|
from typing import NotRequired, Self, TypedDict
|
|
20
20
|
|
|
21
|
-
from absfuyu.core import
|
|
21
|
+
from absfuyu.core import GetClassMembersMixin, deprecated, versionadded, versionchanged
|
|
22
22
|
from absfuyu.util import set_min_max
|
|
23
23
|
|
|
24
24
|
|
|
@@ -116,7 +116,7 @@ class TextAnalyzeDictFormat(TypedDict):
|
|
|
116
116
|
is_palindrome: NotRequired[bool]
|
|
117
117
|
|
|
118
118
|
|
|
119
|
-
class Text(
|
|
119
|
+
class Text(GetClassMembersMixin, str):
|
|
120
120
|
"""
|
|
121
121
|
``str`` extension
|
|
122
122
|
|
absfuyu/extra/__init__.py
CHANGED
absfuyu/extra/beautiful.py
CHANGED
absfuyu/extra/da/__init__.py
CHANGED
absfuyu/extra/da/dadf.py
CHANGED
|
@@ -3,8 +3,8 @@ Absfuyu: Data Analysis
|
|
|
3
3
|
----------------------
|
|
4
4
|
Data Analyst DataFrame
|
|
5
5
|
|
|
6
|
-
Version: 5.
|
|
7
|
-
Date updated:
|
|
6
|
+
Version: 5.5.0
|
|
7
|
+
Date updated: 23/04/2025 (dd/mm/yyyy)
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
10
|
# Module level
|
|
@@ -37,7 +37,7 @@ try:
|
|
|
37
37
|
except ImportError:
|
|
38
38
|
from absfuyu.core.decorator import dummy_decorator as override
|
|
39
39
|
|
|
40
|
-
from absfuyu.core.baseclass import
|
|
40
|
+
from absfuyu.core.baseclass import GetClassMembersMixin
|
|
41
41
|
from absfuyu.core.docstring import deprecated, versionadded
|
|
42
42
|
from absfuyu.extra.da.dadf_base import CityData
|
|
43
43
|
from absfuyu.extra.da.dadf_base import DataAnalystDataFrameBase as DFBase
|
|
@@ -1089,7 +1089,7 @@ class DataAnalystDataFrameCityMixin(DFBase):
|
|
|
1089
1089
|
# Main
|
|
1090
1090
|
# ---------------------------------------------------------------------------
|
|
1091
1091
|
class DADF(
|
|
1092
|
-
|
|
1092
|
+
GetClassMembersMixin,
|
|
1093
1093
|
DataAnalystDataFrameCityMixin,
|
|
1094
1094
|
DataAnalystDataFrameDateMixin,
|
|
1095
1095
|
DataAnalystDataFrameOtherMixin,
|
absfuyu/extra/da/dadf_base.py
CHANGED
absfuyu/extra/da/df_func.py
CHANGED
absfuyu/extra/da/mplt.py
CHANGED
absfuyu/extra/data_analysis.py
CHANGED
absfuyu/fun/__init__.py
CHANGED
absfuyu/fun/rubik.py
CHANGED
absfuyu/fun/tarot.py
CHANGED
absfuyu/game/__init__.py
CHANGED
absfuyu/game/game_stat.py
CHANGED
absfuyu/game/sudoku.py
CHANGED
absfuyu/game/tictactoe.py
CHANGED
absfuyu/game/wordle.py
CHANGED
absfuyu/general/__init__.py
CHANGED
absfuyu/general/content.py
CHANGED
|
@@ -3,8 +3,8 @@ Absfuyu: Content
|
|
|
3
3
|
----------------
|
|
4
4
|
Handle .txt file
|
|
5
5
|
|
|
6
|
-
Version: 5.
|
|
7
|
-
Date updated:
|
|
6
|
+
Version: 5.5.0
|
|
7
|
+
Date updated: 23/04/2025 (dd/mm/yyyy)
|
|
8
8
|
|
|
9
9
|
Usage:
|
|
10
10
|
------
|
|
@@ -28,7 +28,7 @@ from itertools import chain
|
|
|
28
28
|
from pathlib import Path
|
|
29
29
|
from typing import Self
|
|
30
30
|
|
|
31
|
-
from absfuyu.core import BaseClass,
|
|
31
|
+
from absfuyu.core import BaseClass, GetClassMembersMixin, unidecode
|
|
32
32
|
from absfuyu.logger import logger
|
|
33
33
|
|
|
34
34
|
|
|
@@ -140,7 +140,7 @@ class Content(BaseClass):
|
|
|
140
140
|
return self.__class__([self.data, self.tag])
|
|
141
141
|
|
|
142
142
|
|
|
143
|
-
class LoadedContent(list[Content],
|
|
143
|
+
class LoadedContent(list[Content], GetClassMembersMixin):
|
|
144
144
|
"""
|
|
145
145
|
Contain list of ``Content``
|
|
146
146
|
"""
|
absfuyu/general/human.py
CHANGED
absfuyu/general/shape.py
CHANGED
absfuyu/logger.py
CHANGED
absfuyu/pkg_data/__init__.py
CHANGED
absfuyu/pkg_data/deprecated.py
CHANGED