absfuyu 5.1.0__py3-none-any.whl → 5.3.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 +3 -3
- absfuyu/cli/__init__.py +1 -1
- absfuyu/cli/color.py +3 -3
- absfuyu/cli/config_group.py +2 -2
- absfuyu/cli/do_group.py +12 -2
- absfuyu/cli/game_group.py +2 -2
- absfuyu/cli/tool_group.py +2 -3
- absfuyu/config/__init__.py +1 -1
- absfuyu/core/__init__.py +1 -1
- absfuyu/core/baseclass.py +32 -2
- absfuyu/core/baseclass2.py +1 -1
- absfuyu/core/decorator.py +4 -4
- absfuyu/core/docstring.py +43 -25
- absfuyu/core/dummy_cli.py +1 -1
- absfuyu/core/dummy_func.py +4 -4
- absfuyu/dxt/__init__.py +1 -1
- absfuyu/dxt/dictext.py +5 -2
- absfuyu/dxt/dxt_support.py +1 -1
- absfuyu/dxt/intext.py +5 -2
- absfuyu/dxt/listext.py +405 -127
- absfuyu/dxt/strext.py +75 -15
- absfuyu/extra/__init__.py +1 -1
- absfuyu/extra/beautiful.py +1 -1
- absfuyu/extra/da/__init__.py +1 -1
- absfuyu/extra/da/dadf.py +56 -4
- absfuyu/extra/da/dadf_base.py +1 -1
- absfuyu/extra/da/df_func.py +1 -1
- absfuyu/extra/da/mplt.py +1 -1
- absfuyu/extra/data_analysis.py +3 -3
- absfuyu/fun/__init__.py +1 -1
- absfuyu/fun/tarot.py +1 -1
- absfuyu/game/__init__.py +1 -1
- absfuyu/game/game_stat.py +1 -1
- absfuyu/game/sudoku.py +1 -1
- absfuyu/game/tictactoe.py +2 -3
- absfuyu/game/wordle.py +1 -1
- absfuyu/general/__init__.py +1 -1
- absfuyu/general/content.py +2 -2
- absfuyu/general/human.py +1 -1
- absfuyu/general/shape.py +1 -1
- absfuyu/logger.py +1 -1
- absfuyu/pkg_data/__init__.py +1 -1
- absfuyu/pkg_data/deprecated.py +1 -1
- absfuyu/sort.py +1 -1
- absfuyu/tools/__init__.py +16 -13
- absfuyu/tools/checksum.py +2 -2
- absfuyu/tools/converter.py +29 -8
- absfuyu/tools/generator.py +251 -110
- absfuyu/tools/inspector.py +84 -40
- absfuyu/tools/keygen.py +1 -1
- absfuyu/tools/obfuscator.py +2 -2
- absfuyu/tools/passwordlib.py +3 -4
- absfuyu/tools/shutdownizer.py +1 -1
- absfuyu/tools/web.py +1 -1
- absfuyu/typings.py +136 -0
- absfuyu/util/__init__.py +18 -4
- absfuyu/util/api.py +36 -16
- absfuyu/util/json_method.py +43 -14
- absfuyu/util/lunar.py +1 -1
- absfuyu/util/path.py +158 -4
- absfuyu/util/performance.py +120 -5
- absfuyu/util/shorten_number.py +1 -1
- absfuyu/util/text_table.py +235 -45
- absfuyu/util/zipped.py +4 -3
- absfuyu/version.py +2 -2
- {absfuyu-5.1.0.dist-info → absfuyu-5.3.0.dist-info}/METADATA +1 -1
- absfuyu-5.3.0.dist-info/RECORD +76 -0
- absfuyu/core/typings.py +0 -40
- absfuyu-5.1.0.dist-info/RECORD +0 -76
- {absfuyu-5.1.0.dist-info → absfuyu-5.3.0.dist-info}/WHEEL +0 -0
- {absfuyu-5.1.0.dist-info → absfuyu-5.3.0.dist-info}/entry_points.txt +0 -0
- {absfuyu-5.1.0.dist-info → absfuyu-5.3.0.dist-info}/licenses/LICENSE +0 -0
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.2.0
|
|
7
|
+
Date updated: 13/03/2025 (dd/mm/yyyy)
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
10
|
# Module Package
|
|
@@ -15,14 +15,72 @@ __all__ = ["Text", "TextAnalyzeDictFormat"]
|
|
|
15
15
|
# Library
|
|
16
16
|
# ---------------------------------------------------------------------------
|
|
17
17
|
import random
|
|
18
|
+
from string import ascii_letters as _ascii_letters
|
|
18
19
|
from typing import NotRequired, Self, TypedDict
|
|
19
20
|
|
|
20
21
|
from absfuyu.core import ShowAllMethodsMixin, deprecated, versionadded, versionchanged
|
|
21
|
-
from absfuyu.logger import logger
|
|
22
|
-
from absfuyu.tools.generator import Charset, Generator
|
|
23
22
|
from absfuyu.util import set_min_max
|
|
24
23
|
|
|
25
24
|
|
|
25
|
+
# Support function
|
|
26
|
+
# ---------------------------------------------------------------------------
|
|
27
|
+
def _generate_string(
|
|
28
|
+
charset: str | None = None,
|
|
29
|
+
size: int = 8,
|
|
30
|
+
times: int = 1,
|
|
31
|
+
unique: bool = True,
|
|
32
|
+
) -> list[str]:
|
|
33
|
+
"""
|
|
34
|
+
Generate a list of random string from character set
|
|
35
|
+
(Random string generator)
|
|
36
|
+
|
|
37
|
+
This is a lesser version of
|
|
38
|
+
``absfuyu.tools.generator.Generator.generate_string()``
|
|
39
|
+
|
|
40
|
+
Parameters
|
|
41
|
+
----------
|
|
42
|
+
charset : str, optional
|
|
43
|
+
Custom character set, by default ``None``
|
|
44
|
+
([a-zA-Z] - string.ascii_letters)
|
|
45
|
+
|
|
46
|
+
size : int, optional
|
|
47
|
+
Length of each string in list, by default ``8``
|
|
48
|
+
|
|
49
|
+
times : int, optional
|
|
50
|
+
How many random string generated, by default ``1``
|
|
51
|
+
|
|
52
|
+
unique : bool, optional
|
|
53
|
+
Each generated text is unique, by default ``True``
|
|
54
|
+
|
|
55
|
+
Returns
|
|
56
|
+
-------
|
|
57
|
+
list[str]
|
|
58
|
+
List of random string generated
|
|
59
|
+
"""
|
|
60
|
+
|
|
61
|
+
charset = _ascii_letters or charset
|
|
62
|
+
|
|
63
|
+
try:
|
|
64
|
+
char_lst = list(charset) # type: ignore[arg-type]
|
|
65
|
+
except Exception:
|
|
66
|
+
char_lst = charset # type: ignore[assignment]
|
|
67
|
+
|
|
68
|
+
unique_string = []
|
|
69
|
+
count = 0
|
|
70
|
+
|
|
71
|
+
while count < times:
|
|
72
|
+
gen_string = "".join(random.choice(char_lst) for _ in range(size))
|
|
73
|
+
if not unique:
|
|
74
|
+
unique_string.append(gen_string)
|
|
75
|
+
count += 1
|
|
76
|
+
else:
|
|
77
|
+
if gen_string not in unique_string:
|
|
78
|
+
unique_string.append(gen_string)
|
|
79
|
+
count += 1
|
|
80
|
+
|
|
81
|
+
return unique_string
|
|
82
|
+
|
|
83
|
+
|
|
26
84
|
# Class
|
|
27
85
|
# ---------------------------------------------------------------------------
|
|
28
86
|
class TextAnalyzeDictFormat(TypedDict):
|
|
@@ -61,6 +119,9 @@ class TextAnalyzeDictFormat(TypedDict):
|
|
|
61
119
|
class Text(ShowAllMethodsMixin, str):
|
|
62
120
|
"""
|
|
63
121
|
``str`` extension
|
|
122
|
+
|
|
123
|
+
>>> # For a list of new methods
|
|
124
|
+
>>> Text.show_all_methods()
|
|
64
125
|
"""
|
|
65
126
|
|
|
66
127
|
def divide(self, string_split_size: int = 60) -> list[str]:
|
|
@@ -154,9 +215,7 @@ class Text(ShowAllMethodsMixin, str):
|
|
|
154
215
|
splt_len = len(temp)
|
|
155
216
|
|
|
156
217
|
if custom_var_name is None:
|
|
157
|
-
splt_name =
|
|
158
|
-
charset=Charset.ALPHABET, size=split_var_len, times=splt_len + 1
|
|
159
|
-
)
|
|
218
|
+
splt_name = _generate_string(size=split_var_len, times=splt_len + 1)
|
|
160
219
|
for i in range(splt_len):
|
|
161
220
|
output.append(f"{splt_name[i]}='{temp[i]}'")
|
|
162
221
|
else:
|
|
@@ -361,14 +420,15 @@ class Text(ShowAllMethodsMixin, str):
|
|
|
361
420
|
probability = int(set_min_max(probability))
|
|
362
421
|
text = self.lower()
|
|
363
422
|
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
temp.append(x)
|
|
369
|
-
logger.debug(temp)
|
|
370
|
-
return self.__class__("".join(temp))
|
|
423
|
+
random_caps = (
|
|
424
|
+
x.upper() if random.randint(1, 100) <= probability else x for x in text
|
|
425
|
+
)
|
|
426
|
+
return self.__class__("".join(random_caps))
|
|
371
427
|
|
|
428
|
+
@deprecated(
|
|
429
|
+
"5.2.0",
|
|
430
|
+
reason="str already has swapcase() method, will be removed in version 5.3.0",
|
|
431
|
+
)
|
|
372
432
|
@versionchanged("5.0.0", reason="Use ``str.swapcase()``")
|
|
373
433
|
def reverse_capslock(self) -> Self:
|
|
374
434
|
"""
|
|
@@ -406,7 +466,7 @@ class Text(ShowAllMethodsMixin, str):
|
|
|
406
466
|
"""
|
|
407
467
|
return list(self)
|
|
408
468
|
|
|
409
|
-
@deprecated("5.0.0", reason="Unused")
|
|
469
|
+
@deprecated("5.0.0", reason="Unused, will be removed in version 5.3.0")
|
|
410
470
|
def to_listext(self) -> None:
|
|
411
471
|
"""Deprecated, will be removed soon"""
|
|
412
472
|
raise NotImplementedError("Deprecated, will be removed soon")
|
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.2.0
|
|
7
|
+
Date updated: 15/03/2025 (dd/mm/yyyy)
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
10
|
# Module level
|
|
@@ -39,11 +39,12 @@ except ImportError:
|
|
|
39
39
|
|
|
40
40
|
from absfuyu.core.baseclass import ShowAllMethodsMixin
|
|
41
41
|
from absfuyu.core.docstring import deprecated, versionadded
|
|
42
|
-
from absfuyu.core.typings import _R, _T
|
|
43
42
|
from absfuyu.extra.da.dadf_base import CityData
|
|
44
43
|
from absfuyu.extra.da.dadf_base import DataAnalystDataFrameBase as DFBase
|
|
45
44
|
from absfuyu.extra.da.dadf_base import SplittedDF
|
|
46
45
|
from absfuyu.logger import logger
|
|
46
|
+
from absfuyu.typings import R as _R
|
|
47
|
+
from absfuyu.typings import T as _T
|
|
47
48
|
from absfuyu.util import set_min_max
|
|
48
49
|
|
|
49
50
|
|
|
@@ -1135,4 +1136,55 @@ class DADF_WIP(DADF):
|
|
|
1135
1136
|
W.I.P - No test cases written
|
|
1136
1137
|
"""
|
|
1137
1138
|
|
|
1138
|
-
|
|
1139
|
+
@versionadded("5.2.0")
|
|
1140
|
+
def split_str_column(
|
|
1141
|
+
self,
|
|
1142
|
+
col: str,
|
|
1143
|
+
pattern: str = " ",
|
|
1144
|
+
*,
|
|
1145
|
+
n: int | None = None,
|
|
1146
|
+
regex: bool = False,
|
|
1147
|
+
) -> Self:
|
|
1148
|
+
"""
|
|
1149
|
+
Split column with dtype[str] into other columns.
|
|
1150
|
+
|
|
1151
|
+
Parameters
|
|
1152
|
+
----------
|
|
1153
|
+
col : str
|
|
1154
|
+
Column name
|
|
1155
|
+
|
|
1156
|
+
pattern : str, optional
|
|
1157
|
+
Split pattern, by default ``" "``
|
|
1158
|
+
|
|
1159
|
+
n : int | None, optional
|
|
1160
|
+
Split by how many times, by default ``None``
|
|
1161
|
+
|
|
1162
|
+
regex : bool, optional
|
|
1163
|
+
Regex mode, by default ``False``
|
|
1164
|
+
|
|
1165
|
+
Returns
|
|
1166
|
+
-------
|
|
1167
|
+
Self
|
|
1168
|
+
DataFrame
|
|
1169
|
+
|
|
1170
|
+
|
|
1171
|
+
Example:
|
|
1172
|
+
--------
|
|
1173
|
+
>>> df = DADF(DADF.sample_df(5)[["text"]])
|
|
1174
|
+
>>> df.split_str_column("text", "s"))
|
|
1175
|
+
text text_0 text_1
|
|
1176
|
+
0 uwfzbsgj uwfzb gj
|
|
1177
|
+
1 lxlskayx lxl kayx
|
|
1178
|
+
2 fzgpzjtp fzgpzjtp None
|
|
1179
|
+
3 lxnytktz lxnytktz None
|
|
1180
|
+
4 onryaxtt onryaxtt None
|
|
1181
|
+
"""
|
|
1182
|
+
if n is None:
|
|
1183
|
+
pass
|
|
1184
|
+
splited_data: pd.DataFrame = self[col].str.split(
|
|
1185
|
+
pat=pattern, n=n, expand=True, regex=regex
|
|
1186
|
+
)
|
|
1187
|
+
num_of_splitted_cols = splited_data.shape[1]
|
|
1188
|
+
new_col_names = [f"{col}_{x}" for x in range(num_of_splitted_cols)]
|
|
1189
|
+
self[new_col_names] = splited_data
|
|
1190
|
+
return self
|
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
|
@@ -4,8 +4,8 @@ Absfuyu: Data Analysis [W.I.P]
|
|
|
4
4
|
Extension for ``pd.DataFrame``
|
|
5
5
|
(deprecated)
|
|
6
6
|
|
|
7
|
-
Version: 5.
|
|
8
|
-
Date updated:
|
|
7
|
+
Version: 5.2.0
|
|
8
|
+
Date updated: 15/03/2025 (dd/mm/yyyy)
|
|
9
9
|
"""
|
|
10
10
|
|
|
11
11
|
# Library
|
|
@@ -18,4 +18,4 @@ from absfuyu.extra.da.df_func import ( # noqa
|
|
|
18
18
|
)
|
|
19
19
|
|
|
20
20
|
# Class - DA
|
|
21
|
-
# TODO:
|
|
21
|
+
# TODO: drop dups | Combine: row with data, row NaN
|
absfuyu/fun/__init__.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
|
@@ -2,11 +2,10 @@
|
|
|
2
2
|
Game: Tic Tac Toe
|
|
3
3
|
-----------------
|
|
4
4
|
|
|
5
|
-
Version: 5.
|
|
6
|
-
Date updated:
|
|
5
|
+
Version: 5.2.0
|
|
6
|
+
Date updated: 15/03/2025 (dd/mm/yyyy)
|
|
7
7
|
"""
|
|
8
8
|
|
|
9
|
-
|
|
10
9
|
# Module level
|
|
11
10
|
# ---------------------------------------------------------------------------
|
|
12
11
|
__all__ = ["TicTacToe", "GameMode"]
|
absfuyu/game/wordle.py
CHANGED
absfuyu/general/__init__.py
CHANGED
absfuyu/general/content.py
CHANGED
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
absfuyu/sort.py
CHANGED
absfuyu/tools/__init__.py
CHANGED
|
@@ -3,29 +3,32 @@ Absfuyu: Tools
|
|
|
3
3
|
--------------
|
|
4
4
|
Some useful tools
|
|
5
5
|
|
|
6
|
-
Version: 5.
|
|
7
|
-
Date updated:
|
|
6
|
+
Version: 5.2.0
|
|
7
|
+
Date updated: 16/03/2025 (dd/mm/yyyy)
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
10
|
# Module Package
|
|
11
11
|
# ---------------------------------------------------------------------------
|
|
12
12
|
__all__ = [
|
|
13
|
-
# Main
|
|
13
|
+
# # Main
|
|
14
14
|
"Checksum",
|
|
15
|
-
"
|
|
16
|
-
"
|
|
17
|
-
"Charset",
|
|
18
|
-
"Generator",
|
|
15
|
+
"B64",
|
|
16
|
+
"T2C",
|
|
17
|
+
# "Charset",
|
|
18
|
+
# "Generator",
|
|
19
19
|
"Inspector",
|
|
20
|
-
"
|
|
21
|
-
"
|
|
20
|
+
"inspect_all",
|
|
21
|
+
# "Obfuscator",
|
|
22
|
+
# "StrShifter",
|
|
22
23
|
]
|
|
23
24
|
|
|
24
25
|
|
|
25
26
|
# Library
|
|
26
27
|
# ---------------------------------------------------------------------------
|
|
27
28
|
from absfuyu.tools.checksum import Checksum
|
|
28
|
-
from absfuyu.tools.converter import Base64EncodeDecode
|
|
29
|
-
from absfuyu.tools.
|
|
30
|
-
from absfuyu.tools.inspector import Inspector
|
|
31
|
-
|
|
29
|
+
from absfuyu.tools.converter import Base64EncodeDecode as B64
|
|
30
|
+
from absfuyu.tools.converter import Text2Chemistry as T2C
|
|
31
|
+
from absfuyu.tools.inspector import Inspector, inspect_all
|
|
32
|
+
|
|
33
|
+
# from absfuyu.tools.generator import Charset, Generator # circular import bug
|
|
34
|
+
# from absfuyu.tools.obfuscator import Obfuscator, StrShifter # circular import bug
|
absfuyu/tools/checksum.py
CHANGED
absfuyu/tools/converter.py
CHANGED
|
@@ -3,8 +3,8 @@ Absufyu: Converter
|
|
|
3
3
|
------------------
|
|
4
4
|
Convert stuff
|
|
5
5
|
|
|
6
|
-
Version: 5.
|
|
7
|
-
Date updated:
|
|
6
|
+
Version: 5.2.0
|
|
7
|
+
Date updated: 15/03/2025 (dd/mm/yyyy)
|
|
8
8
|
|
|
9
9
|
Feature:
|
|
10
10
|
--------
|
|
@@ -19,6 +19,8 @@ __all__ = [
|
|
|
19
19
|
"Base64EncodeDecode",
|
|
20
20
|
"Text2Chemistry",
|
|
21
21
|
"Str2Pixel",
|
|
22
|
+
# Support
|
|
23
|
+
"ChemistryElement",
|
|
22
24
|
]
|
|
23
25
|
|
|
24
26
|
|
|
@@ -36,7 +38,7 @@ from absfuyu.core.baseclass import BaseClass, CLITextColor
|
|
|
36
38
|
from absfuyu.core.docstring import versionadded
|
|
37
39
|
from absfuyu.logger import logger
|
|
38
40
|
from absfuyu.pkg_data import DataList, DataLoader
|
|
39
|
-
from absfuyu.util import
|
|
41
|
+
from absfuyu.util.text_table import OneColumnTableMaker
|
|
40
42
|
|
|
41
43
|
|
|
42
44
|
# Class
|
|
@@ -167,6 +169,10 @@ class ChemistryElement(BaseClass):
|
|
|
167
169
|
|
|
168
170
|
|
|
169
171
|
class Text2Chemistry(BaseClass):
|
|
172
|
+
"""
|
|
173
|
+
Convert text into chemistry symbols.
|
|
174
|
+
"""
|
|
175
|
+
|
|
170
176
|
def __init__(self) -> None:
|
|
171
177
|
self.data_location = DataList.CHEMISTRY
|
|
172
178
|
|
|
@@ -301,16 +307,31 @@ class Text2Chemistry(BaseClass):
|
|
|
301
307
|
if len(result) == 0:
|
|
302
308
|
res = "No possible combination"
|
|
303
309
|
else:
|
|
304
|
-
|
|
310
|
+
header = ["Text to Chemistry"]
|
|
311
|
+
body = []
|
|
312
|
+
max_table_len = len(header[0])
|
|
313
|
+
|
|
305
314
|
for i, solution in enumerate(result, start=1):
|
|
315
|
+
msg = []
|
|
306
316
|
max_word_len = max([len(x.name) for x in solution])
|
|
307
317
|
msg.append(f"Option {i:02}: {', '.join([x.symbol for x in solution])}")
|
|
308
318
|
for x in solution:
|
|
309
319
|
msg.append(
|
|
310
|
-
f"{x.symbol.ljust(2)}
|
|
320
|
+
f"{x.symbol.ljust(2)} "
|
|
321
|
+
f"({x.number:02}. {x.name.ljust(max_word_len)}"
|
|
322
|
+
f" - {round(x.atomic_mass, 2)})"
|
|
311
323
|
)
|
|
312
|
-
|
|
313
|
-
|
|
324
|
+
body.append(msg)
|
|
325
|
+
|
|
326
|
+
max_table_len = max(
|
|
327
|
+
max([max([len(x) for x in opt]) for opt in body]), max_table_len
|
|
328
|
+
)
|
|
329
|
+
table = OneColumnTableMaker(ncols=max_table_len + 4, style="normal")
|
|
330
|
+
table.add_paragraph(header)
|
|
331
|
+
for x in body:
|
|
332
|
+
table.add_paragraph(x)
|
|
333
|
+
|
|
334
|
+
res = table.make_table()
|
|
314
335
|
return res
|
|
315
336
|
|
|
316
337
|
|
|
@@ -357,7 +378,7 @@ class Str2Pixel(BaseClass):
|
|
|
357
378
|
"""
|
|
358
379
|
self.data = str_data
|
|
359
380
|
if pixel_symbol_overwrite is None:
|
|
360
|
-
self.pixel = self.PIXEL * int(
|
|
381
|
+
self.pixel = self.PIXEL * int(max(pixel_size, 1))
|
|
361
382
|
else:
|
|
362
383
|
self.pixel = pixel_symbol_overwrite
|
|
363
384
|
|