absfuyu 5.8.0__tar.gz → 5.10.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.8.0 → absfuyu-5.10.0}/PKG-INFO +4 -1
- {absfuyu-5.8.0 → absfuyu-5.10.0}/pyproject.toml +9 -1
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/__init__.py +1 -1
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/__main__.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/cli/__init__.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/cli/color.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/cli/config_group.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/cli/do_group.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/cli/game_group.py +20 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/cli/tool_group.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/config/__init__.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/core/__init__.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/core/baseclass.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/core/baseclass2.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/core/decorator.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/core/docstring.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/core/dummy_cli.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/core/dummy_func.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/dxt/__init__.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/dxt/dictext.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/dxt/dxt_support.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/dxt/intext.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/dxt/listext.py +13 -18
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/dxt/strext.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/extra/__init__.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/extra/beautiful.py +2 -2
- absfuyu-5.10.0/src/absfuyu/extra/da/__init__.py +72 -0
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/extra/da/dadf.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/extra/da/dadf_base.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/extra/da/df_func.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/extra/da/mplt.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/extra/data_analysis.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/extra/pdf.py +2 -2
- absfuyu-5.10.0/src/absfuyu/extra/rclone.py +253 -0
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/extra/xml.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/fun/__init__.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/fun/rubik.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/fun/tarot.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/game/__init__.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/game/game_stat.py +2 -2
- absfuyu-5.10.0/src/absfuyu/game/schulte.py +78 -0
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/game/sudoku.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/game/tictactoe.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/game/wordle.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/general/__init__.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/general/content.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/general/human.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/general/shape.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/logger.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/pkg_data/__init__.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/pkg_data/deprecated.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/pkg_data/logo.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/sort.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/tools/__init__.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/tools/checksum.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/tools/converter.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/tools/generator.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/tools/inspector.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/tools/keygen.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/tools/obfuscator.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/tools/passwordlib.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/tools/shutdownizer.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/tools/sw.py +76 -5
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/tools/web.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/typings.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/util/__init__.py +31 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/util/api.py +2 -2
- absfuyu-5.10.0/src/absfuyu/util/gui.py +91 -0
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/util/json_method.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/util/lunar.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/util/path.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/util/performance.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/util/shorten_number.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/util/text_table.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/util/zipped.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/version.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/tests/conftest.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/tests/test_api.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/tests/test_beautiful.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/tests/test_config.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/tests/test_converter.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/tests/test_core.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/tests/test_data_analysis.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/tests/test_dictext.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/tests/test_everything.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/tests/test_extra.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/tests/test_fun.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/tests/test_game.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/tests/test_generator.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/tests/test_inspector.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/tests/test_intext.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/tests/test_listext.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/tests/test_logger.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/tests/test_obfuscator.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/tests/test_passwordlib.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/tests/test_performance.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/tests/test_pkg_data.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/tests/test_shape.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/tests/test_shorten_number.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/tests/test_strext.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/tests/test_text_table.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/tests/test_tools.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/tests/test_util.py +2 -2
- {absfuyu-5.8.0 → absfuyu-5.10.0}/tests/test_version.py +2 -2
- absfuyu-5.8.0/src/absfuyu/extra/da/__init__.py +0 -38
- {absfuyu-5.8.0 → absfuyu-5.10.0}/.gitignore +0 -0
- {absfuyu-5.8.0 → absfuyu-5.10.0}/LICENSE +0 -0
- {absfuyu-5.8.0 → absfuyu-5.10.0}/README.md +0 -0
- {absfuyu-5.8.0 → absfuyu-5.10.0}/dev_requirements.txt +0 -0
- {absfuyu-5.8.0 → absfuyu-5.10.0}/docs/Makefile +0 -0
- {absfuyu-5.8.0 → absfuyu-5.10.0}/docs/_template/versioning.html +0 -0
- {absfuyu-5.8.0 → absfuyu-5.10.0}/docs/conf.py +0 -0
- {absfuyu-5.8.0 → absfuyu-5.10.0}/docs/index.rst +0 -0
- {absfuyu-5.8.0 → absfuyu-5.10.0}/docs/info.md +0 -0
- {absfuyu-5.8.0 → absfuyu-5.10.0}/docs/make.bat +0 -0
- {absfuyu-5.8.0 → absfuyu-5.10.0}/docs/modules.rst +0 -0
- {absfuyu-5.8.0 → absfuyu-5.10.0}/images/Logo Full.png +0 -0
- {absfuyu-5.8.0 → absfuyu-5.10.0}/images/Logo Square.png +0 -0
- {absfuyu-5.8.0 → absfuyu-5.10.0}/images/Logo White.png +0 -0
- {absfuyu-5.8.0 → absfuyu-5.10.0}/images/repository-image-crop.png +0 -0
- {absfuyu-5.8.0 → absfuyu-5.10.0}/images/repository-image-white.png +0 -0
- {absfuyu-5.8.0 → absfuyu-5.10.0}/images/repository-image.png +0 -0
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/config/config.json +0 -0
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/pkg_data/chemistry.pkl +0 -0
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/pkg_data/passwordlib_lzma.pkl +0 -0
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/pkg_data/tarot.pkl +0 -0
- {absfuyu-5.8.0 → absfuyu-5.10.0}/src/absfuyu/py.typed +0 -0
- {absfuyu-5.8.0 → absfuyu-5.10.0}/tests/__init__.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: absfuyu
|
|
3
|
-
Version: 5.
|
|
3
|
+
Version: 5.10.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/
|
|
@@ -52,6 +52,7 @@ Provides-Extra: full
|
|
|
52
52
|
Requires-Dist: numpy; extra == 'full'
|
|
53
53
|
Requires-Dist: openpyxl; extra == 'full'
|
|
54
54
|
Requires-Dist: pandas; extra == 'full'
|
|
55
|
+
Requires-Dist: rclone-crypt; extra == 'full'
|
|
55
56
|
Requires-Dist: rich; extra == 'full'
|
|
56
57
|
Requires-Dist: spire-pdf; extra == 'full'
|
|
57
58
|
Requires-Dist: tqdm; extra == 'full'
|
|
@@ -60,6 +61,8 @@ Requires-Dist: xlsxwriter; extra == 'full'
|
|
|
60
61
|
Requires-Dist: xmltodict; extra == 'full'
|
|
61
62
|
Provides-Extra: pdf
|
|
62
63
|
Requires-Dist: spire-pdf; extra == 'pdf'
|
|
64
|
+
Provides-Extra: rclone
|
|
65
|
+
Requires-Dist: rclone-crypt; extra == 'rclone'
|
|
63
66
|
Provides-Extra: xml
|
|
64
67
|
Requires-Dist: xmltodict; extra == 'xml'
|
|
65
68
|
Description-Content-Type: text/markdown
|
|
@@ -67,6 +67,7 @@ full = [
|
|
|
67
67
|
"xlsxwriter",
|
|
68
68
|
"spire-pdf",
|
|
69
69
|
"xmltodict",
|
|
70
|
+
"rclone-crypt",
|
|
70
71
|
# "jinja2"
|
|
71
72
|
]
|
|
72
73
|
docs = ["numpy", "pandas", "rich", "spire-pdf"]
|
|
@@ -75,6 +76,7 @@ extra = ["numpy", "pandas", "openpyxl", "xlsxwriter", "spire-pdf", "xmltodict"]
|
|
|
75
76
|
pdf = ["spire-pdf"]
|
|
76
77
|
dadf = ["numpy", "pandas", "openpyxl", "xlsxwriter"]
|
|
77
78
|
xml = ["xmltodict"]
|
|
79
|
+
rclone = ["rclone-crypt"]
|
|
78
80
|
|
|
79
81
|
|
|
80
82
|
[project.scripts]
|
|
@@ -379,7 +381,13 @@ line-length = 120
|
|
|
379
381
|
[tool.uv]
|
|
380
382
|
required-version = ">=0.5.0"
|
|
381
383
|
cache-dir = "./.uv_cache"
|
|
382
|
-
dev-dependencies = [
|
|
384
|
+
dev-dependencies = [
|
|
385
|
+
"ruff",
|
|
386
|
+
"mypy>=1.18.0",
|
|
387
|
+
"pytest>=8.4.0",
|
|
388
|
+
"hatch>=1.14.1",
|
|
389
|
+
"python-dotenv",
|
|
390
|
+
]
|
|
383
391
|
|
|
384
392
|
[tool.uv.build-backend]
|
|
385
393
|
source-include = ["tests/**"]
|
|
@@ -3,8 +3,8 @@ ABSFUYU CLI
|
|
|
3
3
|
-----------
|
|
4
4
|
Game
|
|
5
5
|
|
|
6
|
-
Version: 5.
|
|
7
|
-
Date updated:
|
|
6
|
+
Version: 5.10.0
|
|
7
|
+
Date updated: 25/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: Data Extension
|
|
|
3
3
|
-----------------------
|
|
4
4
|
list extension
|
|
5
5
|
|
|
6
|
-
Version: 5.
|
|
7
|
-
Date updated:
|
|
6
|
+
Version: 5.10.0
|
|
7
|
+
Date updated: 25/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__(
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Absfuyu: Data Analysis
|
|
3
|
+
----------------------
|
|
4
|
+
Data Analyst
|
|
5
|
+
|
|
6
|
+
Version: 5.10.0
|
|
7
|
+
Date updated: 23/09/2025 (dd/mm/yyyy)
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
# Module level
|
|
11
|
+
# ---------------------------------------------------------------------------
|
|
12
|
+
__all__ = [
|
|
13
|
+
"MatplotlibFormatString",
|
|
14
|
+
"DADF",
|
|
15
|
+
# Function
|
|
16
|
+
"custom_pandas_settings",
|
|
17
|
+
"reset_custom_pandas_settings",
|
|
18
|
+
]
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
# Library
|
|
22
|
+
# ---------------------------------------------------------------------------
|
|
23
|
+
DA_MODE = False
|
|
24
|
+
|
|
25
|
+
try:
|
|
26
|
+
import numpy as np
|
|
27
|
+
import openpyxl
|
|
28
|
+
import pandas as pd
|
|
29
|
+
import xlsxwriter
|
|
30
|
+
except ImportError:
|
|
31
|
+
from subprocess import run
|
|
32
|
+
|
|
33
|
+
from absfuyu.config import ABSFUYU_CONFIG
|
|
34
|
+
|
|
35
|
+
if ABSFUYU_CONFIG._get_setting("auto-install-extra").value: # type: ignore
|
|
36
|
+
cmd = "python -m pip install -U absfuyu[full]".split()
|
|
37
|
+
run(cmd)
|
|
38
|
+
else:
|
|
39
|
+
raise SystemExit("This feature is in absfuyu[full] package") # noqa: B904
|
|
40
|
+
else:
|
|
41
|
+
DA_MODE = True
|
|
42
|
+
|
|
43
|
+
from absfuyu.extra.da.dadf import DADF
|
|
44
|
+
from absfuyu.extra.da.mplt import MatplotlibFormatString
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
# Function
|
|
48
|
+
# ---------------------------------------------------------------------------
|
|
49
|
+
def custom_pandas_settings(*, show_all_rows: bool = False) -> None:
|
|
50
|
+
"""
|
|
51
|
+
Custom pandas settings. Currently only show all cols/rows
|
|
52
|
+
|
|
53
|
+
Parameters
|
|
54
|
+
----------
|
|
55
|
+
show_all_rows : bool, optional
|
|
56
|
+
Show all rows, by default False
|
|
57
|
+
"""
|
|
58
|
+
# Shows all columns
|
|
59
|
+
pd.set_option("display.max_columns", None) # type: ignore
|
|
60
|
+
|
|
61
|
+
if show_all_rows:
|
|
62
|
+
# (optional) also show all rows if needed
|
|
63
|
+
pd.set_option("display.max_rows", None) # type: ignore
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def reset_custom_pandas_settings() -> None:
|
|
67
|
+
"""
|
|
68
|
+
Reset custom pandas settings
|
|
69
|
+
"""
|
|
70
|
+
settings = ["display.max_columns", "display.max_rows"]
|
|
71
|
+
for x in settings:
|
|
72
|
+
pd.reset_option(x) # type: ignore
|