absfuyu 5.11.0__py3-none-any.whl → 5.12.1__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 +2 -2
- absfuyu/core/baseclass.py +2 -2
- absfuyu/core/baseclass2.py +2 -2
- absfuyu/core/decorator.py +2 -2
- absfuyu/core/docstring.py +2 -2
- absfuyu/core/dummy_cli.py +3 -3
- absfuyu/core/dummy_func.py +2 -2
- absfuyu/dxt/__init__.py +2 -2
- absfuyu/dxt/dictext.py +186 -6
- absfuyu/dxt/dxt_support.py +2 -2
- absfuyu/dxt/intext.py +2 -2
- absfuyu/dxt/listext.py +320 -7
- absfuyu/dxt/strext.py +2 -2
- absfuyu/extra/__init__.py +2 -2
- absfuyu/extra/beautiful.py +2 -2
- absfuyu/extra/da/__init__.py +2 -2
- absfuyu/extra/da/dadf.py +73 -3
- 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/extra/pdf.py +2 -2
- absfuyu/extra/rclone.py +2 -2
- absfuyu/extra/xml.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/schulte.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 +2 -2
- absfuyu/general/human.py +2 -2
- absfuyu/general/shape.py +2 -2
- absfuyu/general/tax.py +22 -2
- absfuyu/logger.py +2 -2
- absfuyu/pkg_data/__init__.py +2 -2
- absfuyu/pkg_data/deprecated.py +2 -2
- absfuyu/pkg_data/logo.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 +2 -2
- absfuyu/tools/inspector.py +2 -2
- absfuyu/tools/keygen.py +2 -2
- absfuyu/tools/obfuscator.py +2 -2
- absfuyu/tools/passwordlib.py +2 -2
- absfuyu/tools/shutdownizer.py +2 -2
- absfuyu/tools/sw.py +2 -2
- absfuyu/tools/web.py +2 -2
- absfuyu/typings.py +5 -2
- absfuyu/util/__init__.py +2 -2
- absfuyu/util/api.py +2 -2
- absfuyu/util/cli.py +118 -0
- absfuyu/util/gui.py +2 -2
- absfuyu/util/json_method.py +2 -2
- absfuyu/util/lunar.py +2 -2
- absfuyu/util/path.py +2 -2
- absfuyu/util/performance.py +2 -2
- absfuyu/util/shorten_number.py +2 -2
- absfuyu/util/text_table.py +2 -2
- absfuyu/util/zipped.py +2 -2
- absfuyu/version.py +2 -2
- {absfuyu-5.11.0.dist-info → absfuyu-5.12.1.dist-info}/METADATA +1 -1
- absfuyu-5.12.1.dist-info/RECORD +86 -0
- absfuyu-5.11.0.dist-info/RECORD +0 -85
- {absfuyu-5.11.0.dist-info → absfuyu-5.12.1.dist-info}/WHEEL +0 -0
- {absfuyu-5.11.0.dist-info → absfuyu-5.12.1.dist-info}/entry_points.txt +0 -0
- {absfuyu-5.11.0.dist-info → absfuyu-5.12.1.dist-info}/licenses/LICENSE +0 -0
absfuyu/game/tictactoe.py
CHANGED
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/general/tax.py
CHANGED
|
@@ -3,8 +3,8 @@ Absfuyu: Tax calculator
|
|
|
3
3
|
-----------------------
|
|
4
4
|
Tax calculator
|
|
5
5
|
|
|
6
|
-
Version: 5.
|
|
7
|
-
Date updated:
|
|
6
|
+
Version: 5.12.0
|
|
7
|
+
Date updated: 17/10/2025 (dd/mm/yyyy)
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
10
|
# Module level
|
|
@@ -186,6 +186,24 @@ class PersonalIncomeTaxCalculator(BaseClass):
|
|
|
186
186
|
|
|
187
187
|
marginal_rate : float
|
|
188
188
|
Tax rate applied to the last amount of money of taxable income.
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
Example:
|
|
192
|
+
--------
|
|
193
|
+
>>> tax_levels = [(100, 0.05), (None, 0.1)]
|
|
194
|
+
>>> cal = PersonalIncomeTaxCalculator(tax_levels)
|
|
195
|
+
>>> cal.calculate(500)
|
|
196
|
+
>>> cal.to_dict(raw=True)
|
|
197
|
+
{...}
|
|
198
|
+
|
|
199
|
+
>>> cal.interpret_result()
|
|
200
|
+
===== Tax information =====
|
|
201
|
+
Taxable income: 500.00 (500.00 - 0.00)
|
|
202
|
+
- Level 1: 0.00 - 100.00 @ 5.0%: 100.00 -> tax 5.00
|
|
203
|
+
- Level 2: 100.00 - 500.00 @ 10.0%: 400.00 -> tax 40.00
|
|
204
|
+
Net tax: 45.00 (45.00 - 0.00)
|
|
205
|
+
Effective rate: 9.00%
|
|
206
|
+
Marginal rate: 10.0%
|
|
189
207
|
"""
|
|
190
208
|
|
|
191
209
|
def __init__(self, tax_levels: TaxLevel | None = None, deductions: float = 0.0, tax_credits: float = 0.0) -> None:
|
|
@@ -264,8 +282,10 @@ class PersonalIncomeTaxCalculator(BaseClass):
|
|
|
264
282
|
|
|
265
283
|
@overload
|
|
266
284
|
def to_dict(self) -> TaxCalculationResult: ... # type: ignore
|
|
285
|
+
|
|
267
286
|
@overload
|
|
268
287
|
def to_dict(self, *, raw: Literal[True] = ...) -> TaxCalculationResultRaw: ...
|
|
288
|
+
|
|
269
289
|
def to_dict(self, *, raw: bool = False) -> TaxCalculationResult | TaxCalculationResultRaw:
|
|
270
290
|
"""
|
|
271
291
|
Returns calculation result in dict format
|
absfuyu/logger.py
CHANGED
absfuyu/pkg_data/__init__.py
CHANGED
absfuyu/pkg_data/deprecated.py
CHANGED
absfuyu/pkg_data/logo.py
CHANGED
absfuyu/sort.py
CHANGED
absfuyu/tools/__init__.py
CHANGED
absfuyu/tools/checksum.py
CHANGED
absfuyu/tools/converter.py
CHANGED
absfuyu/tools/generator.py
CHANGED
absfuyu/tools/inspector.py
CHANGED
absfuyu/tools/keygen.py
CHANGED
absfuyu/tools/obfuscator.py
CHANGED
absfuyu/tools/passwordlib.py
CHANGED
absfuyu/tools/shutdownizer.py
CHANGED
absfuyu/tools/sw.py
CHANGED
absfuyu/tools/web.py
CHANGED
absfuyu/typings.py
CHANGED
|
@@ -3,8 +3,8 @@ Absfuyu: Core
|
|
|
3
3
|
-------------
|
|
4
4
|
Pre-defined typing
|
|
5
5
|
|
|
6
|
-
Version: 5.
|
|
7
|
-
Date updated:
|
|
6
|
+
Version: 5.12.0
|
|
7
|
+
Date updated: 17/10/2025 (dd/mm/yyyy)
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
10
|
# Module Package
|
|
@@ -42,12 +42,15 @@ except ImportError:
|
|
|
42
42
|
# Type
|
|
43
43
|
# ---------------------------------------------------------------------------
|
|
44
44
|
# Types where neither is possible are invariant
|
|
45
|
+
# Type safety must be strict
|
|
45
46
|
T = TypeVar("T") # Type invariant
|
|
46
47
|
# Type variables that are covariant can be substituted
|
|
47
48
|
# with a more specific type without causing errors
|
|
49
|
+
# Safe to treat a Box[int] as a Box[object]
|
|
48
50
|
T_co = TypeVar("T_co", covariant=True) # Type covariant
|
|
49
51
|
# Type variables that are contravariant can be substituted
|
|
50
52
|
# with a more general type without causing errors
|
|
53
|
+
# Safe to use a Box[object] where a Box[int] is needed
|
|
51
54
|
T_contra = TypeVar("T_contra", contravariant=True) # Type contravariant
|
|
52
55
|
|
|
53
56
|
KT = TypeVar("KT")
|
absfuyu/util/__init__.py
CHANGED
absfuyu/util/api.py
CHANGED
absfuyu/util/cli.py
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Absfuyu: CLI
|
|
3
|
+
------------
|
|
4
|
+
Custom Argument Parser
|
|
5
|
+
|
|
6
|
+
Version: 5.12.0
|
|
7
|
+
Date updated: 17/10/2025 (dd/mm/yyyy)
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
# Module level
|
|
11
|
+
# ---------------------------------------------------------------------------
|
|
12
|
+
__all__ = ["FuyuArgumentParser"]
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
# Library
|
|
16
|
+
# ---------------------------------------------------------------------------
|
|
17
|
+
import logging
|
|
18
|
+
import sys
|
|
19
|
+
from argparse import ArgumentDefaultsHelpFormatter, ArgumentParser
|
|
20
|
+
from typing import Any, Callable
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
# Class
|
|
24
|
+
# ---------------------------------------------------------------------------
|
|
25
|
+
class FuyuArgumentParser(ArgumentParser):
|
|
26
|
+
"""
|
|
27
|
+
Usage:
|
|
28
|
+
------
|
|
29
|
+
>>> import sys
|
|
30
|
+
>>> args = FuyuArgumentParser()
|
|
31
|
+
>>> args.start()
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
def __init__(
|
|
35
|
+
self,
|
|
36
|
+
prog: str | None = None,
|
|
37
|
+
description: str | None = None,
|
|
38
|
+
epilog: str | None = None,
|
|
39
|
+
version: str = "0.0.1",
|
|
40
|
+
formatter_class: Any = ArgumentDefaultsHelpFormatter,
|
|
41
|
+
prefix_chars: str = "-",
|
|
42
|
+
argument_default: Any = None,
|
|
43
|
+
conflict_handler: str = "error",
|
|
44
|
+
add_help: bool = True,
|
|
45
|
+
allow_abbrev: bool = True,
|
|
46
|
+
exit_on_error: bool = True,
|
|
47
|
+
) -> None:
|
|
48
|
+
# Desc
|
|
49
|
+
if description is None:
|
|
50
|
+
description = f"Absfuyu CLI {version}"
|
|
51
|
+
|
|
52
|
+
# Default
|
|
53
|
+
self._default_args = ["--help"]
|
|
54
|
+
|
|
55
|
+
# Super
|
|
56
|
+
super().__init__(
|
|
57
|
+
prog=prog,
|
|
58
|
+
description=description,
|
|
59
|
+
epilog=epilog,
|
|
60
|
+
formatter_class=formatter_class,
|
|
61
|
+
prefix_chars=prefix_chars,
|
|
62
|
+
argument_default=argument_default,
|
|
63
|
+
conflict_handler=conflict_handler,
|
|
64
|
+
add_help=add_help,
|
|
65
|
+
allow_abbrev=allow_abbrev,
|
|
66
|
+
exit_on_error=exit_on_error,
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
# Add version
|
|
70
|
+
self.add_argument("-v", "--version", action="version", version=f"%(prog)s {version}")
|
|
71
|
+
|
|
72
|
+
# Add log level
|
|
73
|
+
_ll_val = ["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"]
|
|
74
|
+
self.add_argument(
|
|
75
|
+
"-ll",
|
|
76
|
+
"--log-level",
|
|
77
|
+
metavar="LOG_LEVEL",
|
|
78
|
+
dest="log_level",
|
|
79
|
+
choices=_ll_val,
|
|
80
|
+
default="ERROR",
|
|
81
|
+
help=f"Log level: {', '.join(_ll_val)}",
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
def _fuyu_set_log_level(self, log_level: str = "ERROR") -> None:
|
|
85
|
+
log_levels = {
|
|
86
|
+
"DEBUG": logging.DEBUG,
|
|
87
|
+
"INFO": logging.INFO,
|
|
88
|
+
"WARNING": logging.WARNING,
|
|
89
|
+
"ERROR": logging.ERROR,
|
|
90
|
+
"CRITICAL": logging.CRITICAL,
|
|
91
|
+
}
|
|
92
|
+
logging.basicConfig(
|
|
93
|
+
level=log_levels[log_level],
|
|
94
|
+
format="[%(asctime)s] [%(module)s] [%(name)s] [%(funcName)s] [%(levelname)-s] %(message)s",
|
|
95
|
+
datefmt="%Y-%m-%d %H:%M:%S",
|
|
96
|
+
)
|
|
97
|
+
|
|
98
|
+
def start(self, default: Callable[[], Any] | None = None):
|
|
99
|
+
"""
|
|
100
|
+
Quick start for argument parser
|
|
101
|
+
|
|
102
|
+
Parameters
|
|
103
|
+
----------
|
|
104
|
+
default : Callable[[], Any] | None, optional
|
|
105
|
+
| Default callable to run, by default ``None``
|
|
106
|
+
| Shows help on default behavior (default=None)
|
|
107
|
+
|
|
108
|
+
Returns
|
|
109
|
+
-------
|
|
110
|
+
Namespace
|
|
111
|
+
Namespace
|
|
112
|
+
"""
|
|
113
|
+
if default is None:
|
|
114
|
+
args = self.parse_args(args=None if sys.argv[1:] else self._default_args)
|
|
115
|
+
else:
|
|
116
|
+
args = self.parse_args(args=None if sys.argv[1:] else default())
|
|
117
|
+
self._fuyu_set_log_level(getattr(args, "log_level", "ERROR"))
|
|
118
|
+
return args
|
absfuyu/util/gui.py
CHANGED
absfuyu/util/json_method.py
CHANGED
absfuyu/util/lunar.py
CHANGED
absfuyu/util/path.py
CHANGED
absfuyu/util/performance.py
CHANGED
absfuyu/util/shorten_number.py
CHANGED
absfuyu/util/text_table.py
CHANGED
absfuyu/util/zipped.py
CHANGED
absfuyu/version.py
CHANGED