absfuyu 5.9.0__tar.gz → 5.11.0__tar.gz
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-5.9.0 → absfuyu-5.11.0}/PKG-INFO +1 -1
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/__init__.py +1 -1
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/__main__.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/cli/__init__.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/cli/color.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/cli/config_group.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/cli/do_group.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/cli/game_group.py +20 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/cli/tool_group.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/config/__init__.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/core/__init__.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/core/baseclass.py +20 -3
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/core/baseclass2.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/core/decorator.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/core/docstring.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/core/dummy_cli.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/core/dummy_func.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/dxt/__init__.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/dxt/dictext.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/dxt/dxt_support.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/dxt/intext.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/dxt/listext.py +13 -18
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/dxt/strext.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/extra/__init__.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/extra/beautiful.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/extra/da/__init__.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/extra/da/dadf.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/extra/da/dadf_base.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/extra/da/df_func.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/extra/da/mplt.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/extra/data_analysis.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/extra/pdf.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/extra/rclone.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/extra/xml.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/fun/__init__.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/fun/rubik.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/fun/tarot.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/game/__init__.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/game/game_stat.py +2 -2
- absfuyu-5.11.0/src/absfuyu/game/schulte.py +78 -0
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/game/sudoku.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/game/tictactoe.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/game/wordle.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/general/__init__.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/general/content.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/general/human.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/general/shape.py +2 -2
- absfuyu-5.11.0/src/absfuyu/general/tax.py +324 -0
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/logger.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/pkg_data/__init__.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/pkg_data/deprecated.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/pkg_data/logo.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/sort.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/tools/__init__.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/tools/checksum.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/tools/converter.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/tools/generator.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/tools/inspector.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/tools/keygen.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/tools/obfuscator.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/tools/passwordlib.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/tools/shutdownizer.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/tools/sw.py +138 -7
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/tools/web.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/typings.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/util/__init__.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/util/api.py +2 -2
- absfuyu-5.11.0/src/absfuyu/util/gui.py +91 -0
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/util/json_method.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/util/lunar.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/util/path.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/util/performance.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/util/shorten_number.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/util/text_table.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/util/zipped.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/version.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/tests/conftest.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/tests/test_api.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/tests/test_beautiful.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/tests/test_config.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/tests/test_converter.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/tests/test_core.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/tests/test_data_analysis.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/tests/test_dictext.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/tests/test_everything.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/tests/test_extra.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/tests/test_fun.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/tests/test_game.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/tests/test_generator.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/tests/test_inspector.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/tests/test_intext.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/tests/test_listext.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/tests/test_logger.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/tests/test_obfuscator.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/tests/test_passwordlib.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/tests/test_performance.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/tests/test_pkg_data.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/tests/test_shape.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/tests/test_shorten_number.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/tests/test_strext.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/tests/test_text_table.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/tests/test_tools.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/tests/test_util.py +2 -2
- {absfuyu-5.9.0 → absfuyu-5.11.0}/tests/test_version.py +2 -2
- absfuyu-5.9.0/src/absfuyu/util/gui.py +0 -32
- {absfuyu-5.9.0 → absfuyu-5.11.0}/.gitignore +0 -0
- {absfuyu-5.9.0 → absfuyu-5.11.0}/LICENSE +0 -0
- {absfuyu-5.9.0 → absfuyu-5.11.0}/README.md +0 -0
- {absfuyu-5.9.0 → absfuyu-5.11.0}/dev_requirements.txt +0 -0
- {absfuyu-5.9.0 → absfuyu-5.11.0}/docs/Makefile +0 -0
- {absfuyu-5.9.0 → absfuyu-5.11.0}/docs/_template/versioning.html +0 -0
- {absfuyu-5.9.0 → absfuyu-5.11.0}/docs/conf.py +0 -0
- {absfuyu-5.9.0 → absfuyu-5.11.0}/docs/index.rst +0 -0
- {absfuyu-5.9.0 → absfuyu-5.11.0}/docs/info.md +0 -0
- {absfuyu-5.9.0 → absfuyu-5.11.0}/docs/make.bat +0 -0
- {absfuyu-5.9.0 → absfuyu-5.11.0}/docs/modules.rst +0 -0
- {absfuyu-5.9.0 → absfuyu-5.11.0}/images/Logo Full.png +0 -0
- {absfuyu-5.9.0 → absfuyu-5.11.0}/images/Logo Square.png +0 -0
- {absfuyu-5.9.0 → absfuyu-5.11.0}/images/Logo White.png +0 -0
- {absfuyu-5.9.0 → absfuyu-5.11.0}/images/repository-image-crop.png +0 -0
- {absfuyu-5.9.0 → absfuyu-5.11.0}/images/repository-image-white.png +0 -0
- {absfuyu-5.9.0 → absfuyu-5.11.0}/images/repository-image.png +0 -0
- {absfuyu-5.9.0 → absfuyu-5.11.0}/pyproject.toml +0 -0
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/config/config.json +0 -0
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/pkg_data/chemistry.pkl +0 -0
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/pkg_data/passwordlib_lzma.pkl +0 -0
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/pkg_data/tarot.pkl +0 -0
- {absfuyu-5.9.0 → absfuyu-5.11.0}/src/absfuyu/py.typed +0 -0
- {absfuyu-5.9.0 → absfuyu-5.11.0}/tests/__init__.py +0 -0
|
@@ -3,8 +3,8 @@ ABSFUYU CLI
|
|
|
3
3
|
-----------
|
|
4
4
|
Game
|
|
5
5
|
|
|
6
|
-
Version: 5.
|
|
7
|
-
Date updated:
|
|
6
|
+
Version: 5.11.0
|
|
7
|
+
Date updated: 30/09/2025 (dd/mm/yyyy)
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
10
|
# Module Package
|
|
@@ -17,6 +17,7 @@ __all__ = ["game_group"]
|
|
|
17
17
|
import click
|
|
18
18
|
|
|
19
19
|
from absfuyu.game import game_escapeLoop, game_RockPaperScissors
|
|
20
|
+
from absfuyu.game.schulte import SchulteTable
|
|
20
21
|
from absfuyu.game.sudoku import Sudoku
|
|
21
22
|
from absfuyu.game.tictactoe import GameMode, TicTacToe
|
|
22
23
|
from absfuyu.game.wordle import Wordle
|
|
@@ -103,6 +104,22 @@ def tictactoe(size: int, game_mode: str, bot_time: float) -> None:
|
|
|
103
104
|
instance.play(game_mode, bot_time=bot_time)
|
|
104
105
|
|
|
105
106
|
|
|
107
|
+
@click.command(name="schulte")
|
|
108
|
+
@click.option(
|
|
109
|
+
"--size",
|
|
110
|
+
"-s",
|
|
111
|
+
"size",
|
|
112
|
+
type=int,
|
|
113
|
+
default=5,
|
|
114
|
+
show_default=True,
|
|
115
|
+
help="Size of the table",
|
|
116
|
+
)
|
|
117
|
+
def schulte_table(size: int) -> None:
|
|
118
|
+
"""Schulte table"""
|
|
119
|
+
engine = SchulteTable(size=size)
|
|
120
|
+
engine.make_table()
|
|
121
|
+
|
|
122
|
+
|
|
106
123
|
@click.group(name="game")
|
|
107
124
|
def game_group() -> None:
|
|
108
125
|
"""Play game"""
|
|
@@ -114,3 +131,4 @@ game_group.add_command(escape_loop)
|
|
|
114
131
|
game_group.add_command(wordle_solver)
|
|
115
132
|
game_group.add_command(sudoku_solver)
|
|
116
133
|
game_group.add_command(tictactoe)
|
|
134
|
+
game_group.add_command(schulte_table)
|
|
@@ -3,8 +3,8 @@ Absfuyu: Core
|
|
|
3
3
|
-------------
|
|
4
4
|
Bases for other features
|
|
5
5
|
|
|
6
|
-
Version: 5.
|
|
7
|
-
Date updated:
|
|
6
|
+
Version: 5.11.0
|
|
7
|
+
Date updated: 05/10/2025 (dd/mm/yyyy)
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
10
|
# Module Package
|
|
@@ -57,7 +57,8 @@ class BaseDataclass:
|
|
|
57
57
|
Base dataclass.
|
|
58
58
|
|
|
59
59
|
Contains util methods:
|
|
60
|
-
-
|
|
60
|
+
- _get_fields
|
|
61
|
+
- to_dict
|
|
61
62
|
"""
|
|
62
63
|
|
|
63
64
|
@classmethod
|
|
@@ -73,6 +74,22 @@ class BaseDataclass:
|
|
|
73
74
|
_fields = getattr(cls, "__dataclass_fields__", ())
|
|
74
75
|
return tuple(_fields)
|
|
75
76
|
|
|
77
|
+
# @versionadded("5.11.0")
|
|
78
|
+
def to_dict(self):
|
|
79
|
+
"""
|
|
80
|
+
Convert dataclass into dict
|
|
81
|
+
|
|
82
|
+
Returns
|
|
83
|
+
-------
|
|
84
|
+
dict
|
|
85
|
+
Dataclass converted into dict
|
|
86
|
+
"""
|
|
87
|
+
fields = self._get_fields()
|
|
88
|
+
output = {}
|
|
89
|
+
for field in fields:
|
|
90
|
+
output.__setitem__(field, self.__getattribute__(field))
|
|
91
|
+
return output
|
|
92
|
+
|
|
76
93
|
|
|
77
94
|
# Support
|
|
78
95
|
# ---------------------------------------------------------------------------
|
|
@@ -3,8 +3,8 @@ Absfuyu: Data Extension
|
|
|
3
3
|
-----------------------
|
|
4
4
|
list extension
|
|
5
5
|
|
|
6
|
-
Version: 5.
|
|
7
|
-
Date updated:
|
|
6
|
+
Version: 5.11.0
|
|
7
|
+
Date updated: 30/09/2025 (dd/mm/yyyy)
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
10
|
# Module Package
|
|
@@ -80,9 +80,7 @@ class ListExt(GetClassMembersMixin, list):
|
|
|
80
80
|
>>> ListExt(range(10)).head(2)
|
|
81
81
|
[0, 1]
|
|
82
82
|
"""
|
|
83
|
-
number_of_items = int(
|
|
84
|
-
set_min_max(number_of_items, min_value=0, max_value=len(self))
|
|
85
|
-
)
|
|
83
|
+
number_of_items = int(set_min_max(number_of_items, min_value=0, max_value=len(self)))
|
|
86
84
|
return self[:number_of_items]
|
|
87
85
|
|
|
88
86
|
def tail(self, number_of_items: int = 5) -> list:
|
|
@@ -106,9 +104,7 @@ class ListExt(GetClassMembersMixin, list):
|
|
|
106
104
|
>>> ListExt(range(10)).tail(2)
|
|
107
105
|
[8, 9]
|
|
108
106
|
"""
|
|
109
|
-
number_of_items = int(
|
|
110
|
-
set_min_max(number_of_items, min_value=0, max_value=len(self))
|
|
111
|
-
)
|
|
107
|
+
number_of_items = int(set_min_max(number_of_items, min_value=0, max_value=len(self)))
|
|
112
108
|
return self[::-1][:number_of_items][::-1]
|
|
113
109
|
|
|
114
110
|
# Misc
|
|
@@ -165,15 +161,13 @@ class ListExt(GetClassMembersMixin, list):
|
|
|
165
161
|
type_weights[type(x)] = len(type_weights)
|
|
166
162
|
# logger.debug(f"Type weight: {type_weights}")
|
|
167
163
|
|
|
168
|
-
output = sorted(
|
|
169
|
-
lst, key=lambda x: (type_weights[type(x)], str(x)), reverse=reverse
|
|
170
|
-
)
|
|
164
|
+
output = sorted(lst, key=lambda x: (type_weights[type(x)], str(x)), reverse=reverse)
|
|
171
165
|
|
|
172
166
|
# logger.debug(output)
|
|
173
167
|
return self.__class__(output)
|
|
174
168
|
|
|
175
169
|
@overload
|
|
176
|
-
def freq(self) -> dict: ...
|
|
170
|
+
def freq(self) -> dict: ... # type: ignore
|
|
177
171
|
|
|
178
172
|
@overload
|
|
179
173
|
def freq(
|
|
@@ -256,9 +250,7 @@ class ListExt(GetClassMembersMixin, list):
|
|
|
256
250
|
# logger.debug(times_appear)
|
|
257
251
|
|
|
258
252
|
if appear_increment:
|
|
259
|
-
times_appear_increment: list[int] = list(
|
|
260
|
-
accumulate(times_appear.values(), operator.add)
|
|
261
|
-
)
|
|
253
|
+
times_appear_increment: list[int] = list(accumulate(times_appear.values(), operator.add))
|
|
262
254
|
# logger.debug(times_appear_increment)
|
|
263
255
|
return times_appear_increment # incremental index list
|
|
264
256
|
else:
|
|
@@ -459,6 +451,11 @@ class ListExt(GetClassMembersMixin, list):
|
|
|
459
451
|
"""
|
|
460
452
|
return [self.pick_one() for _ in range(number_of_items)]
|
|
461
453
|
|
|
454
|
+
@versionadded("5.10.0")
|
|
455
|
+
def shuffle(self) -> Self:
|
|
456
|
+
random.shuffle(self)
|
|
457
|
+
return self
|
|
458
|
+
|
|
462
459
|
# Len
|
|
463
460
|
@versionchanged("5.2.0", reason="Handle more type")
|
|
464
461
|
def len_items(self) -> Self:
|
|
@@ -857,9 +854,7 @@ class ListExt(GetClassMembersMixin, list):
|
|
|
857
854
|
fill = " "
|
|
858
855
|
|
|
859
856
|
# Calculate how many columns of text
|
|
860
|
-
column_count = (
|
|
861
|
-
max(1, available_width // max_item_length) if max_item_length > 0 else 1
|
|
862
|
-
)
|
|
857
|
+
column_count = max(1, available_width // max_item_length) if max_item_length > 0 else 1
|
|
863
858
|
|
|
864
859
|
# splitted_chunk: list[list[str]] = self.split_chunk(cols)
|
|
865
860
|
# mod_chunk = self.__class__(
|