absfuyu 3.1.1__py3-none-any.whl → 3.3.3__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 +3 -10
- absfuyu/__main__.py +5 -250
- absfuyu/cli/__init__.py +51 -0
- absfuyu/cli/color.py +24 -0
- absfuyu/cli/config_group.py +56 -0
- absfuyu/cli/do_group.py +76 -0
- absfuyu/cli/game_group.py +109 -0
- absfuyu/config/__init__.py +117 -100
- absfuyu/config/config.json +0 -7
- absfuyu/core.py +5 -66
- absfuyu/everything.py +7 -9
- absfuyu/extensions/beautiful.py +30 -23
- absfuyu/extensions/dev/__init__.py +11 -8
- absfuyu/extensions/dev/password_hash.py +4 -2
- absfuyu/extensions/dev/passwordlib.py +7 -5
- absfuyu/extensions/dev/project_starter.py +4 -2
- absfuyu/extensions/dev/shutdownizer.py +148 -0
- absfuyu/extensions/extra/__init__.py +1 -2
- absfuyu/extensions/extra/data_analysis.py +182 -107
- absfuyu/fun/WGS.py +50 -26
- absfuyu/fun/__init__.py +6 -7
- absfuyu/fun/tarot.py +1 -1
- absfuyu/game/__init__.py +75 -81
- absfuyu/game/game_stat.py +36 -0
- absfuyu/game/sudoku.py +41 -48
- absfuyu/game/tictactoe.py +303 -548
- absfuyu/game/wordle.py +56 -47
- absfuyu/general/__init__.py +17 -7
- absfuyu/general/content.py +16 -15
- absfuyu/general/data_extension.py +282 -90
- absfuyu/general/generator.py +67 -67
- absfuyu/general/human.py +74 -78
- absfuyu/logger.py +94 -68
- absfuyu/pkg_data/__init__.py +29 -25
- absfuyu/py.typed +0 -0
- absfuyu/sort.py +61 -47
- absfuyu/tools/__init__.py +0 -1
- absfuyu/tools/converter.py +80 -62
- absfuyu/tools/keygen.py +62 -67
- absfuyu/tools/obfuscator.py +57 -53
- absfuyu/tools/stats.py +24 -24
- absfuyu/tools/web.py +10 -9
- absfuyu/util/__init__.py +71 -33
- absfuyu/util/api.py +53 -43
- absfuyu/util/json_method.py +25 -27
- absfuyu/util/lunar.py +20 -24
- absfuyu/util/path.py +362 -241
- absfuyu/util/performance.py +217 -135
- absfuyu/util/pkl.py +8 -8
- absfuyu/util/zipped.py +17 -19
- absfuyu/version.py +160 -147
- absfuyu-3.3.3.dist-info/METADATA +124 -0
- absfuyu-3.3.3.dist-info/RECORD +59 -0
- {absfuyu-3.1.1.dist-info → absfuyu-3.3.3.dist-info}/WHEEL +1 -2
- {absfuyu-3.1.1.dist-info → absfuyu-3.3.3.dist-info}/entry_points.txt +1 -0
- {absfuyu-3.1.1.dist-info → absfuyu-3.3.3.dist-info/licenses}/LICENSE +1 -1
- absfuyu/extensions/dev/pkglib.py +0 -98
- absfuyu/game/tictactoe2.py +0 -318
- absfuyu-3.1.1.dist-info/METADATA +0 -215
- absfuyu-3.1.1.dist-info/RECORD +0 -55
- absfuyu-3.1.1.dist-info/top_level.txt +0 -1
absfuyu/extensions/dev/pkglib.py
DELETED
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
from typing import Dict, List
|
|
2
|
-
|
|
3
|
-
# json
|
|
4
|
-
__all_lib = {
|
|
5
|
-
"native": [
|
|
6
|
-
"os",
|
|
7
|
-
"random",
|
|
8
|
-
"string",
|
|
9
|
-
"subprocess",
|
|
10
|
-
"typing",
|
|
11
|
-
"hashlib",
|
|
12
|
-
"datetime",
|
|
13
|
-
"json",
|
|
14
|
-
"sys",
|
|
15
|
-
"math",
|
|
16
|
-
"base64",
|
|
17
|
-
"codecs",
|
|
18
|
-
"zlib",
|
|
19
|
-
"inspect",
|
|
20
|
-
"functools",
|
|
21
|
-
"tracemalloc",
|
|
22
|
-
"re",
|
|
23
|
-
"collections",
|
|
24
|
-
"urllib",
|
|
25
|
-
"time",
|
|
26
|
-
"pathlib",
|
|
27
|
-
"itertools",
|
|
28
|
-
"argparse",
|
|
29
|
-
"operator",
|
|
30
|
-
"shutil",
|
|
31
|
-
],
|
|
32
|
-
"external": [
|
|
33
|
-
"rich",
|
|
34
|
-
"click",
|
|
35
|
-
"colorama",
|
|
36
|
-
"requests",
|
|
37
|
-
"numpy",
|
|
38
|
-
"pandas",
|
|
39
|
-
"matplotlib",
|
|
40
|
-
"absfuyu_res",
|
|
41
|
-
"importlib_resources",
|
|
42
|
-
],
|
|
43
|
-
"dev-only": [
|
|
44
|
-
"twine",
|
|
45
|
-
"black",
|
|
46
|
-
"pytest",
|
|
47
|
-
"tox",
|
|
48
|
-
"build",
|
|
49
|
-
"coverage",
|
|
50
|
-
],
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
LibraryDict = Dict[str, List[str]]
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
def show_lib_from_json(
|
|
57
|
-
lib_dict: LibraryDict, hidden: bool = False, to_json: bool = True
|
|
58
|
-
) -> str:
|
|
59
|
-
"""
|
|
60
|
-
Show libraries
|
|
61
|
-
|
|
62
|
-
lib_dict: a dict that converted from jso
|
|
63
|
-
hidden: import as __[lib name]
|
|
64
|
-
to_json: save as json format
|
|
65
|
-
"""
|
|
66
|
-
|
|
67
|
-
catergory = [x for x in lib_dict.keys()] # get keys
|
|
68
|
-
libs = [x for x in lib_dict.values()] # get values
|
|
69
|
-
|
|
70
|
-
lib_import = [] # New list
|
|
71
|
-
for lib_list in libs: # Take each lib list in a list of lib list
|
|
72
|
-
temp = []
|
|
73
|
-
for item in sorted(list(set(lib_list))):
|
|
74
|
-
if hidden:
|
|
75
|
-
hidden_text = f" as __{item}"
|
|
76
|
-
else:
|
|
77
|
-
hidden_text = ""
|
|
78
|
-
temp.append(f"import {item}{hidden_text}")
|
|
79
|
-
lib_import.append(temp)
|
|
80
|
-
|
|
81
|
-
new_lib = dict(zip(catergory, lib_import))
|
|
82
|
-
|
|
83
|
-
if to_json:
|
|
84
|
-
import json
|
|
85
|
-
|
|
86
|
-
return str(json.dumps(new_lib, indent=4))
|
|
87
|
-
else:
|
|
88
|
-
out_text = ""
|
|
89
|
-
for idx, val in enumerate(catergory):
|
|
90
|
-
out_text += f"# {val} libs\n"
|
|
91
|
-
for x in lib_import[idx]:
|
|
92
|
-
out_text += x + "\n"
|
|
93
|
-
out_text += "\n"
|
|
94
|
-
return out_text
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
if __name__ == "__main__":
|
|
98
|
-
print(show_lib_from_json(__all_lib, 0, 0))
|
absfuyu/game/tictactoe2.py
DELETED
|
@@ -1,318 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Game: Tic Tac Toe
|
|
3
|
-
-----------------
|
|
4
|
-
|
|
5
|
-
Version: 2.0.2
|
|
6
|
-
Date updated: 04/12/2023 (mm/dd/yyyy)
|
|
7
|
-
"""
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
# Module level
|
|
11
|
-
###########################################################################
|
|
12
|
-
__all__ = ["TicTacToe", "GameMode"]
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
# Library
|
|
16
|
-
###########################################################################
|
|
17
|
-
# from collections import namedtuple
|
|
18
|
-
import random
|
|
19
|
-
import time
|
|
20
|
-
from typing import Dict, List, NamedTuple, Union
|
|
21
|
-
|
|
22
|
-
from absfuyu.core import CLITextColor
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
# Class
|
|
26
|
-
###########################################################################
|
|
27
|
-
BoardGame = List[List[str]]
|
|
28
|
-
# Pos = namedtuple("Pos", ["row", "col"]) # Position
|
|
29
|
-
class Pos(NamedTuple):
|
|
30
|
-
"""Position"""
|
|
31
|
-
row: int
|
|
32
|
-
col: int
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
class GameMode:
|
|
36
|
-
ONE_V_ONE = "1v1"
|
|
37
|
-
ONE_V_BOT = "1v0"
|
|
38
|
-
BOT_V_BOT = "0v0"
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
class TicTacToe:
|
|
42
|
-
"""Tic Tac Toe game"""
|
|
43
|
-
|
|
44
|
-
def __init__(
|
|
45
|
-
self,
|
|
46
|
-
game_size: int = 3,
|
|
47
|
-
*,
|
|
48
|
-
x: str = "X",
|
|
49
|
-
o: str = "O",
|
|
50
|
-
blank: str = " ",
|
|
51
|
-
position_split_symbol: str = ",",
|
|
52
|
-
end_break_word: str = "END",
|
|
53
|
-
welcome_message: bool = True,
|
|
54
|
-
) -> None:
|
|
55
|
-
"""
|
|
56
|
-
:param game_size: Board size (Default: 3x3)
|
|
57
|
-
:param x: X symbol
|
|
58
|
-
:param o: O symbol
|
|
59
|
-
:param blank: Blank symbol
|
|
60
|
-
:param position_split_symbol: Position split symbol
|
|
61
|
-
:param end_break_word: End break word
|
|
62
|
-
:param welcome_message: Show welcome message (Default: `True`)
|
|
63
|
-
"""
|
|
64
|
-
|
|
65
|
-
# Board size
|
|
66
|
-
self.row_size = game_size
|
|
67
|
-
self.col_size = game_size
|
|
68
|
-
|
|
69
|
-
# Game setting
|
|
70
|
-
self.X = x
|
|
71
|
-
self.O = o
|
|
72
|
-
self.BLANK = blank
|
|
73
|
-
self.POS_SPLIT = position_split_symbol
|
|
74
|
-
self.END_BREAK = end_break_word
|
|
75
|
-
self.welcome_message = welcome_message
|
|
76
|
-
|
|
77
|
-
# Init board
|
|
78
|
-
self.board = self._gen_board()
|
|
79
|
-
|
|
80
|
-
def __str__(self) -> str:
|
|
81
|
-
return f"{self.__class__.__name__}(game_size={self.row_size})"
|
|
82
|
-
|
|
83
|
-
def __repr__(self) -> str:
|
|
84
|
-
return self.__str__()
|
|
85
|
-
|
|
86
|
-
# Game
|
|
87
|
-
def _gen_board(self) -> BoardGame:
|
|
88
|
-
"""
|
|
89
|
-
Generate board game
|
|
90
|
-
"""
|
|
91
|
-
board = [
|
|
92
|
-
[self.BLANK for _ in range(self.row_size)] for _ in range(self.col_size)
|
|
93
|
-
]
|
|
94
|
-
return board
|
|
95
|
-
|
|
96
|
-
def _check_state(self) -> Dict[str, Union[str, int]]:
|
|
97
|
-
"""
|
|
98
|
-
Check game winning state
|
|
99
|
-
|
|
100
|
-
Returns
|
|
101
|
-
-------
|
|
102
|
-
dict[str, str | int]
|
|
103
|
-
``X`` | ``O`` | ``BLANK``
|
|
104
|
-
"""
|
|
105
|
-
|
|
106
|
-
# Check rows
|
|
107
|
-
for row in range(self.row_size):
|
|
108
|
-
if len(set(self.board[row])) == 1:
|
|
109
|
-
key = list(set(self.board[row]))[0]
|
|
110
|
-
return {"key": key, "location": "row", "pos": row} # modified
|
|
111
|
-
|
|
112
|
-
# Check cols
|
|
113
|
-
for col in range(self.col_size):
|
|
114
|
-
temp = [self.board[row][col] for row in range(self.row_size)]
|
|
115
|
-
if len(set(temp)) == 1:
|
|
116
|
-
key = list(set(temp))[0]
|
|
117
|
-
return {"key": key, "location": "col", "pos": col} # modified
|
|
118
|
-
|
|
119
|
-
# Check diagonal
|
|
120
|
-
diag1 = [self.board[i][i] for i in range(len(self.board))]
|
|
121
|
-
if len(set(diag1)) == 1:
|
|
122
|
-
key = list(set(diag1))[0]
|
|
123
|
-
return {"key": key, "location": "diag", "pos": 1} # modified
|
|
124
|
-
|
|
125
|
-
diag2 = [self.board[i][len(self.board) - i - 1] for i in range(len(self.board))]
|
|
126
|
-
if len(set(diag2)) == 1:
|
|
127
|
-
key = list(set(diag2))[0]
|
|
128
|
-
return {"key": key, "location": "diag", "pos": 2} # modified
|
|
129
|
-
|
|
130
|
-
# Else
|
|
131
|
-
return {"key": self.BLANK}
|
|
132
|
-
|
|
133
|
-
@staticmethod
|
|
134
|
-
def _print_board(board: BoardGame) -> None:
|
|
135
|
-
"""
|
|
136
|
-
Print Tic Tac Toe board
|
|
137
|
-
"""
|
|
138
|
-
nrow, ncol = len(board), len(board[0])
|
|
139
|
-
length = len(board)
|
|
140
|
-
print(f"{'+---'*length}+")
|
|
141
|
-
for row in range(nrow):
|
|
142
|
-
for col in range(ncol):
|
|
143
|
-
print(f"| {board[row][col]} ", end="")
|
|
144
|
-
print(f"|\n{'+---'*length}+")
|
|
145
|
-
|
|
146
|
-
def _win_hightlight(self) -> BoardGame:
|
|
147
|
-
"""
|
|
148
|
-
Hight light the win by removing other placed key
|
|
149
|
-
"""
|
|
150
|
-
|
|
151
|
-
# Get detailed information
|
|
152
|
-
detail = self._check_state()
|
|
153
|
-
loc = detail["location"]
|
|
154
|
-
loc_line = detail["pos"]
|
|
155
|
-
|
|
156
|
-
# Make new board
|
|
157
|
-
board = self._gen_board()
|
|
158
|
-
|
|
159
|
-
# Fill in the hightlighted content
|
|
160
|
-
if loc.startswith("col"):
|
|
161
|
-
for i in range(len(board)):
|
|
162
|
-
board[i][loc_line] = detail["key"]
|
|
163
|
-
elif loc.startswith("row"):
|
|
164
|
-
for i in range(len(board)):
|
|
165
|
-
board[loc_line][i] = detail["key"]
|
|
166
|
-
else:
|
|
167
|
-
if loc_line == 1:
|
|
168
|
-
for i in range(len(board)):
|
|
169
|
-
board[i][i] = detail["key"]
|
|
170
|
-
else:
|
|
171
|
-
for i in range(len(board)):
|
|
172
|
-
board[i][len(board) - i - 1] = detail["key"]
|
|
173
|
-
|
|
174
|
-
# Output
|
|
175
|
-
return board
|
|
176
|
-
|
|
177
|
-
def _is_blank(self, pos: Pos) -> bool:
|
|
178
|
-
"""Check if current pos is filled"""
|
|
179
|
-
return self.board[pos.row][pos.col] == self.BLANK
|
|
180
|
-
|
|
181
|
-
@staticmethod
|
|
182
|
-
def _convert_bot_output(pos: Pos) -> Pos:
|
|
183
|
-
"""
|
|
184
|
-
Turn to real pos by:
|
|
185
|
-
|
|
186
|
-
- +1 to ``row`` and ``col``
|
|
187
|
-
- convert into ``str``
|
|
188
|
-
"""
|
|
189
|
-
return Pos(pos.row + 1, pos.col + 1)
|
|
190
|
-
|
|
191
|
-
def _generate_random_move(self) -> Pos:
|
|
192
|
-
"""
|
|
193
|
-
Generate a random move from board game
|
|
194
|
-
"""
|
|
195
|
-
while True:
|
|
196
|
-
output = Pos(
|
|
197
|
-
random.randint(0, len(self.board) - 1),
|
|
198
|
-
random.randint(0, len(self.board) - 1),
|
|
199
|
-
)
|
|
200
|
-
if self._is_blank(output):
|
|
201
|
-
break
|
|
202
|
-
return self._convert_bot_output(output)
|
|
203
|
-
|
|
204
|
-
def play(
|
|
205
|
-
self,
|
|
206
|
-
game_mode: str = GameMode.ONE_V_BOT,
|
|
207
|
-
*,
|
|
208
|
-
bot_time: float = 0,
|
|
209
|
-
) -> None:
|
|
210
|
-
"""
|
|
211
|
-
Play a game of Tic Tac Toe
|
|
212
|
-
|
|
213
|
-
Parameters
|
|
214
|
-
----------
|
|
215
|
-
game_mode : str
|
|
216
|
-
Game mode
|
|
217
|
-
|
|
218
|
-
bot_time : float
|
|
219
|
-
Time sleep between each bot move (Default: ``0``)
|
|
220
|
-
"""
|
|
221
|
-
# Init game
|
|
222
|
-
filled = 0
|
|
223
|
-
current_player = self.X
|
|
224
|
-
state = self._check_state()["key"]
|
|
225
|
-
BOT = False
|
|
226
|
-
BOT2 = False
|
|
227
|
-
|
|
228
|
-
# Welcome message
|
|
229
|
-
if self.welcome_message:
|
|
230
|
-
print(
|
|
231
|
-
f"""\
|
|
232
|
-
{CLITextColor.GREEN}Welcome to Tic Tac Toe!
|
|
233
|
-
|
|
234
|
-
{CLITextColor.YELLOW}Rules: Match lines vertically, horizontally or diagonally
|
|
235
|
-
{CLITextColor.YELLOW}{self.X} goes first, then {self.O}
|
|
236
|
-
{CLITextColor.RED}Type '{self.END_BREAK}' to end the game{CLITextColor.RESET}"""
|
|
237
|
-
)
|
|
238
|
-
|
|
239
|
-
# Check gamemode
|
|
240
|
-
_game_mode = [
|
|
241
|
-
"1v1", # Player vs player
|
|
242
|
-
"1v0", # Player vs BOT
|
|
243
|
-
"0v0", # BOT vs BOT
|
|
244
|
-
]
|
|
245
|
-
if game_mode not in _game_mode:
|
|
246
|
-
game_mode = _game_mode[1] # Force vs BOT
|
|
247
|
-
if game_mode.startswith(GameMode.ONE_V_BOT):
|
|
248
|
-
BOT = True
|
|
249
|
-
if game_mode.startswith(GameMode.BOT_V_BOT):
|
|
250
|
-
BOT = True
|
|
251
|
-
BOT2 = True
|
|
252
|
-
|
|
253
|
-
# Game
|
|
254
|
-
self._print_board(self.board)
|
|
255
|
-
|
|
256
|
-
place_pos = None
|
|
257
|
-
while state == self.BLANK and filled < self.row_size**2:
|
|
258
|
-
print(f"{CLITextColor.BLUE}{current_player}'s turn:{CLITextColor.RESET}")
|
|
259
|
-
|
|
260
|
-
try: # Error handling
|
|
261
|
-
if (BOT and current_player == self.O) or BOT2:
|
|
262
|
-
move = self._generate_random_move()
|
|
263
|
-
str_move = f"{move.row}{self.POS_SPLIT}{move.col}"
|
|
264
|
-
move = str_move
|
|
265
|
-
else:
|
|
266
|
-
move = input(
|
|
267
|
-
f"Place {CLITextColor.BLUE}{current_player}{CLITextColor.RESET} at {CLITextColor.BLUE}<row{self.POS_SPLIT}col>:{CLITextColor.RESET} "
|
|
268
|
-
)
|
|
269
|
-
|
|
270
|
-
if move.upper() == self.END_BREAK: # Failsafe
|
|
271
|
-
print(f"{CLITextColor.RED}Game ended{CLITextColor.RESET}")
|
|
272
|
-
break
|
|
273
|
-
|
|
274
|
-
move = move.split(self.POS_SPLIT)
|
|
275
|
-
row = int(move[0])
|
|
276
|
-
col = int(move[1])
|
|
277
|
-
place_pos = Pos(row - 1, col - 1)
|
|
278
|
-
|
|
279
|
-
if self._is_blank(place_pos):
|
|
280
|
-
self.board[place_pos.row][place_pos.col] = current_player
|
|
281
|
-
filled += 1
|
|
282
|
-
|
|
283
|
-
else: # User and BOT error
|
|
284
|
-
print(
|
|
285
|
-
f"{CLITextColor.RED}Invalid move, please try again{CLITextColor.RESET}"
|
|
286
|
-
)
|
|
287
|
-
continue
|
|
288
|
-
|
|
289
|
-
except: # User error
|
|
290
|
-
print(
|
|
291
|
-
f"{CLITextColor.RED}Invalid move, please try again{CLITextColor.RESET}"
|
|
292
|
-
)
|
|
293
|
-
continue
|
|
294
|
-
|
|
295
|
-
state = self._check_state()["key"]
|
|
296
|
-
self._print_board(self.board)
|
|
297
|
-
|
|
298
|
-
if state != self.BLANK:
|
|
299
|
-
print(f"{CLITextColor.GREEN}{state} WON!{CLITextColor.RESET}")
|
|
300
|
-
self._print_board(self._win_hightlight())
|
|
301
|
-
|
|
302
|
-
# Change turn
|
|
303
|
-
if BOT2: # BOT delay
|
|
304
|
-
time.sleep(bot_time)
|
|
305
|
-
|
|
306
|
-
if current_player == self.X:
|
|
307
|
-
current_player = self.O
|
|
308
|
-
else:
|
|
309
|
-
current_player = self.X
|
|
310
|
-
|
|
311
|
-
if state == self.BLANK and filled == self.row_size**2:
|
|
312
|
-
print(f"{CLITextColor.YELLOW}Draw Match!{CLITextColor.RESET}")
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
# Run
|
|
316
|
-
###########################################################################
|
|
317
|
-
if __name__ == "__main__":
|
|
318
|
-
pass
|
absfuyu-3.1.1.dist-info/METADATA
DELETED
|
@@ -1,215 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.1
|
|
2
|
-
Name: absfuyu
|
|
3
|
-
Version: 3.1.1
|
|
4
|
-
Summary: A small collection of code
|
|
5
|
-
Author: somewhatcold (AbsoluteWinter)
|
|
6
|
-
License: MIT License
|
|
7
|
-
|
|
8
|
-
Copyright (c) 2022-2023 AbsoluteWinter
|
|
9
|
-
|
|
10
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
11
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
12
|
-
in the Software without restriction, including without limitation the rights
|
|
13
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
14
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
15
|
-
furnished to do so, subject to the following conditions:
|
|
16
|
-
|
|
17
|
-
The above copyright notice and this permission notice shall be included in all
|
|
18
|
-
copies or substantial portions of the Software.
|
|
19
|
-
|
|
20
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
21
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
22
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
23
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
24
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
25
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
26
|
-
SOFTWARE.
|
|
27
|
-
|
|
28
|
-
Project-URL: Homepage, https://github.com/AbsoluteWinter/absfuyu-public
|
|
29
|
-
Project-URL: Documentation, https://absolutewinter.github.io/absfuyu
|
|
30
|
-
Project-URL: Repository, https://github.com/AbsoluteWinter/absfuyu-public
|
|
31
|
-
Project-URL: Issues, https://github.com/AbsoluteWinter/absfuyu-public/issues
|
|
32
|
-
Keywords: utilities
|
|
33
|
-
Classifier: Programming Language :: Python :: 3
|
|
34
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
35
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
36
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
37
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
38
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
39
|
-
Classifier: Programming Language :: Python :: 3 :: Only
|
|
40
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
41
|
-
Classifier: Operating System :: OS Independent
|
|
42
|
-
Classifier: Development Status :: 5 - Production/Stable
|
|
43
|
-
Classifier: Natural Language :: English
|
|
44
|
-
Classifier: Intended Audience :: Developers
|
|
45
|
-
Classifier: Intended Audience :: End Users/Desktop
|
|
46
|
-
Classifier: Topic :: Software Development :: Libraries
|
|
47
|
-
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
48
|
-
Classifier: Topic :: Utilities
|
|
49
|
-
Requires-Python: <4,>=3.8
|
|
50
|
-
Description-Content-Type: text/markdown
|
|
51
|
-
License-File: LICENSE
|
|
52
|
-
Requires-Dist: bs4
|
|
53
|
-
Requires-Dist: python-dateutil
|
|
54
|
-
Requires-Dist: requests
|
|
55
|
-
Requires-Dist: unidecode
|
|
56
|
-
Requires-Dist: importlib-resources ; python_version < "3.10"
|
|
57
|
-
Requires-Dist: tomli >=1.1.0 ; python_version < "3.11"
|
|
58
|
-
Requires-Dist: typing-extensions >=4.0.1 ; python_version < "3.11"
|
|
59
|
-
Provides-Extra: absfuyu-res
|
|
60
|
-
Requires-Dist: absfuyu-res ; extra == 'absfuyu-res'
|
|
61
|
-
Provides-Extra: all
|
|
62
|
-
Requires-Dist: absfuyu-res ; extra == 'all'
|
|
63
|
-
Requires-Dist: coverage ; extra == 'all'
|
|
64
|
-
Requires-Dist: black ; extra == 'all'
|
|
65
|
-
Requires-Dist: sphinx-rtd-theme ; extra == 'all'
|
|
66
|
-
Requires-Dist: pandas ; extra == 'all'
|
|
67
|
-
Requires-Dist: build ; extra == 'all'
|
|
68
|
-
Requires-Dist: rich ; extra == 'all'
|
|
69
|
-
Requires-Dist: click >=8.0.0 ; extra == 'all'
|
|
70
|
-
Requires-Dist: pytest >=6.2.5 ; extra == 'all'
|
|
71
|
-
Requires-Dist: numpy ; extra == 'all'
|
|
72
|
-
Requires-Dist: sphinx >=7.0.0 ; extra == 'all'
|
|
73
|
-
Requires-Dist: colorama >=0.4 ; extra == 'all'
|
|
74
|
-
Requires-Dist: twine >=3.7.1 ; extra == 'all'
|
|
75
|
-
Provides-Extra: beautiful
|
|
76
|
-
Requires-Dist: rich ; extra == 'beautiful'
|
|
77
|
-
Provides-Extra: black
|
|
78
|
-
Requires-Dist: black ; extra == 'black'
|
|
79
|
-
Provides-Extra: build
|
|
80
|
-
Requires-Dist: build ; extra == 'build'
|
|
81
|
-
Provides-Extra: cli
|
|
82
|
-
Requires-Dist: colorama >=0.4 ; extra == 'cli'
|
|
83
|
-
Requires-Dist: click >=8.0.0 ; extra == 'cli'
|
|
84
|
-
Provides-Extra: click
|
|
85
|
-
Requires-Dist: click >=8.0.0 ; extra == 'click'
|
|
86
|
-
Provides-Extra: colorama
|
|
87
|
-
Requires-Dist: colorama >=0.4 ; extra == 'colorama'
|
|
88
|
-
Provides-Extra: coverage
|
|
89
|
-
Requires-Dist: coverage ; extra == 'coverage'
|
|
90
|
-
Provides-Extra: dev
|
|
91
|
-
Requires-Dist: coverage ; extra == 'dev'
|
|
92
|
-
Requires-Dist: black ; extra == 'dev'
|
|
93
|
-
Requires-Dist: sphinx-rtd-theme ; extra == 'dev'
|
|
94
|
-
Requires-Dist: build ; extra == 'dev'
|
|
95
|
-
Requires-Dist: rich ; extra == 'dev'
|
|
96
|
-
Requires-Dist: click >=8.0.0 ; extra == 'dev'
|
|
97
|
-
Requires-Dist: pytest >=6.2.5 ; extra == 'dev'
|
|
98
|
-
Requires-Dist: sphinx >=7.0.0 ; extra == 'dev'
|
|
99
|
-
Requires-Dist: colorama >=0.4 ; extra == 'dev'
|
|
100
|
-
Requires-Dist: twine >=3.7.1 ; extra == 'dev'
|
|
101
|
-
Provides-Extra: extra
|
|
102
|
-
Requires-Dist: colorama >=0.4 ; extra == 'extra'
|
|
103
|
-
Requires-Dist: pandas ; extra == 'extra'
|
|
104
|
-
Requires-Dist: click >=8.0.0 ; extra == 'extra'
|
|
105
|
-
Requires-Dist: numpy ; extra == 'extra'
|
|
106
|
-
Provides-Extra: full
|
|
107
|
-
Requires-Dist: absfuyu-res ; extra == 'full'
|
|
108
|
-
Requires-Dist: pandas ; extra == 'full'
|
|
109
|
-
Requires-Dist: rich ; extra == 'full'
|
|
110
|
-
Requires-Dist: click >=8.0.0 ; extra == 'full'
|
|
111
|
-
Requires-Dist: numpy ; extra == 'full'
|
|
112
|
-
Requires-Dist: colorama >=0.4 ; extra == 'full'
|
|
113
|
-
Provides-Extra: numpy
|
|
114
|
-
Requires-Dist: numpy ; extra == 'numpy'
|
|
115
|
-
Provides-Extra: pandas
|
|
116
|
-
Requires-Dist: pandas ; extra == 'pandas'
|
|
117
|
-
Provides-Extra: pytest
|
|
118
|
-
Requires-Dist: pytest >=6.2.5 ; extra == 'pytest'
|
|
119
|
-
Provides-Extra: res
|
|
120
|
-
Requires-Dist: absfuyu-res ; extra == 'res'
|
|
121
|
-
Provides-Extra: rich
|
|
122
|
-
Requires-Dist: rich ; extra == 'rich'
|
|
123
|
-
Provides-Extra: sphinx
|
|
124
|
-
Requires-Dist: sphinx >=7.0.0 ; extra == 'sphinx'
|
|
125
|
-
Provides-Extra: sphinx_rtd_theme
|
|
126
|
-
Requires-Dist: sphinx-rtd-theme ; extra == 'sphinx_rtd_theme'
|
|
127
|
-
Provides-Extra: twine
|
|
128
|
-
Requires-Dist: twine >=3.7.1 ; extra == 'twine'
|
|
129
|
-
|
|
130
|
-
<div align="center">
|
|
131
|
-
<h1 align="center">
|
|
132
|
-
<img src="https://github.com/AbsoluteWinter/AbsoluteWinter.github.io/blob/main/absfuyu/images/repository-image-crop.png?raw=true" alt="absfuyu"/>
|
|
133
|
-
</h1>
|
|
134
|
-
<p align="center">
|
|
135
|
-
<a href="https://pypi.org/project/absfuyu/"><img src="https://img.shields.io/pypi/pyversions/absfuyu?style=flat-square" alt="PyPI Supported Versions"/></a>
|
|
136
|
-
<a href="https://pypi.org/project/absfuyu/"><img src="https://img.shields.io/pypi/dm/absfuyu?style=flat-square" alt="pypi"/></a>
|
|
137
|
-
<a href="https://pypi.org/project/absfuyu/"><img src="https://img.shields.io/pypi/v/absfuyu?style=flat-square" /></a>
|
|
138
|
-
<a><img src="https://img.shields.io/badge/license-MIT-blue?style=flat-square" /></a>
|
|
139
|
-
</p>
|
|
140
|
-
</div>
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
---
|
|
144
|
-
|
|
145
|
-
## **SUMMARY:**
|
|
146
|
-
|
|
147
|
-
*TL;DR: A collection of code*
|
|
148
|
-
|
|
149
|
-
## **INSTALLATION:**
|
|
150
|
-
|
|
151
|
-
```bash
|
|
152
|
-
$ pip install -U absfuyu
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
## **USAGE:**
|
|
156
|
-
|
|
157
|
-
```python
|
|
158
|
-
import absfuyu
|
|
159
|
-
help(absfuyu)
|
|
160
|
-
```
|
|
161
|
-
|
|
162
|
-
## **DOCUMENTATION:**
|
|
163
|
-
|
|
164
|
-
> [here](https://absolutewinter.github.io/absfuyu/)
|
|
165
|
-
|
|
166
|
-
## **DEV SETUP**
|
|
167
|
-
|
|
168
|
-
1. Create virtual environment
|
|
169
|
-
|
|
170
|
-
```bash
|
|
171
|
-
python -m venv env
|
|
172
|
-
```
|
|
173
|
-
|
|
174
|
-
Note: Might need to run this in powershell (windows)
|
|
175
|
-
|
|
176
|
-
```powershell
|
|
177
|
-
Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
2. Install all required packages
|
|
181
|
-
|
|
182
|
-
```bash
|
|
183
|
-
python -m pip install -e .[all]
|
|
184
|
-
```
|
|
185
|
-
or
|
|
186
|
-
```bash
|
|
187
|
-
python -m pip install -e .[dev]
|
|
188
|
-
```
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
## **LICENSE:**
|
|
192
|
-
|
|
193
|
-
```
|
|
194
|
-
MIT License
|
|
195
|
-
|
|
196
|
-
Copyright (c) 2022-2024 AbsoluteWinter
|
|
197
|
-
|
|
198
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
199
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
200
|
-
in the Software without restriction, including without limitation the rights
|
|
201
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
202
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
203
|
-
furnished to do so, subject to the following conditions:
|
|
204
|
-
|
|
205
|
-
The above copyright notice and this permission notice shall be included in all
|
|
206
|
-
copies or substantial portions of the Software.
|
|
207
|
-
|
|
208
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
209
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
210
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
211
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
212
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
213
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
214
|
-
SOFTWARE.
|
|
215
|
-
```
|
absfuyu-3.1.1.dist-info/RECORD
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
absfuyu/__init__.py,sha256=fsYC-XEIB0kUAzCXNl0IJmG6UFMjuTGtsw-K5rbMuOQ,838
|
|
2
|
-
absfuyu/__main__.py,sha256=g9XPYCjX5QSvwZKlGtb5C9R3emUdo_q7qK-gVIw3xkg,6514
|
|
3
|
-
absfuyu/core.py,sha256=hjMfqmDGMhpRCHR8UMWusmg2vhQbpL6pM1D1qcx-IxY,2709
|
|
4
|
-
absfuyu/everything.py,sha256=ZW9KKFhonnyQk-C_ps99ygQ883l7EUdx8FJ0rmpw-ko,778
|
|
5
|
-
absfuyu/logger.py,sha256=EjAGnz_PReigh5kowvo1h89KzpIdyeacQG2JKipKZ5I,12883
|
|
6
|
-
absfuyu/sort.py,sha256=f31514lwPnp2wipSG5E6rIoLXmCHLJlujr2_o65tJcQ,6498
|
|
7
|
-
absfuyu/version.py,sha256=pF4rUiN_XTUfsKF6oYzhMWkOl3NsXfrN6bFAJA8bPPc,13962
|
|
8
|
-
absfuyu/config/__init__.py,sha256=tQL7ZuiY1m4fqnKRVNKX7v85srdzE5KS18BcNWWRGgg,7956
|
|
9
|
-
absfuyu/config/config.json,sha256=Ap_Qi8mySXYf1mAXCJxxHS8xQAihEFznVanZSMQYXoI,791
|
|
10
|
-
absfuyu/extensions/__init__.py,sha256=hxeZm3w00K4GC78cDTIo5ROWiWAZw4zEmlevfOqbNvo,146
|
|
11
|
-
absfuyu/extensions/beautiful.py,sha256=zN1-_bHytW3ImIEimJhE4WRzsqf9D3l9z-GImYB0D68,5240
|
|
12
|
-
absfuyu/extensions/dev/__init__.py,sha256=GDHf4ojXULZu8Py20R8roxSWL7gaC7Z65a1okwrFtp0,6424
|
|
13
|
-
absfuyu/extensions/dev/password_hash.py,sha256=toVWZKJ__jOxcmPhKBs58aYhzLV_0cF4AWwNzgACfBo,1794
|
|
14
|
-
absfuyu/extensions/dev/passwordlib.py,sha256=Eoywj0_1tu_ALvt6_csRPznQ03nzUGSWvk2HmLy4JXM,6796
|
|
15
|
-
absfuyu/extensions/dev/pkglib.py,sha256=X_SniqZbE2MdPQoh9uItJo1JTRbn43y2a8hkVy3ofW8,2215
|
|
16
|
-
absfuyu/extensions/dev/project_starter.py,sha256=l16FjIwD6ImYZRw08BitzhrKvugc9Q6PBEipj6XZa-8,1561
|
|
17
|
-
absfuyu/extensions/dev/shutdownizer.py,sha256=EMsUytPABrt1s3hpfwaE2ZpDNQncwKo9EDiYy3QFcT0,132
|
|
18
|
-
absfuyu/extensions/extra/__init__.py,sha256=8zkMYDaPvCamCU8AecKiaBhYv39xb43JhLqi8bNm9Tk,552
|
|
19
|
-
absfuyu/extensions/extra/data_analysis.py,sha256=5zGKugi966Jz-tIzeh47o99wCVTnATZSyRfYvkcExLI,28993
|
|
20
|
-
absfuyu/fun/WGS.py,sha256=tU6exyU2FeHB4AI0XqrKAB945XVNSb6NBGZFinjgNYg,9145
|
|
21
|
-
absfuyu/fun/__init__.py,sha256=fAu2odcOx6YpGXTb7aS69V70oBC6VfYugErC6fVNI58,6249
|
|
22
|
-
absfuyu/fun/tarot.py,sha256=VHFYbpZT-Ktf4LcGqXm137jEPN_4_cCMugf4ZVv9lMQ,2554
|
|
23
|
-
absfuyu/game/__init__.py,sha256=2J8k8ntI8wlHjNWSWbrktW4K2-vkB6oveyt177-kUtw,4663
|
|
24
|
-
absfuyu/game/sudoku.py,sha256=ub51EwTlfQLqw9la4HxfZdFE6aJXyPotXwOZ1W9h9_g,10450
|
|
25
|
-
absfuyu/game/tictactoe.py,sha256=nSVTnCWEy9d5Jeo3KRb3mfeR1pzWNmKxTa5JC7usQ-Y,15278
|
|
26
|
-
absfuyu/game/tictactoe2.py,sha256=lV1hJhS-qn8jLTo-C8M0wUnv27L2CW-AM_ohBLlWRiY,9639
|
|
27
|
-
absfuyu/game/wordle.py,sha256=ZohB73nQ7iCHMdReBtZ9bHFz6_DVKrsxeB9PbnV7L_s,101133
|
|
28
|
-
absfuyu/general/__init__.py,sha256=9L83GlWKZbYEAo_rDLEhet-ILOOZ4p5KH0jGaKXgYPg,2026
|
|
29
|
-
absfuyu/general/content.py,sha256=8ox5HlDuYqVuUO38BmfpIqE0t7f80mB5a6fGDFfc20c,17375
|
|
30
|
-
absfuyu/general/data_extension.py,sha256=uWUuKBjbhn6tsETX22R1pGU5ttk_w_yN8l3UGvh4Ol0,43657
|
|
31
|
-
absfuyu/general/generator.py,sha256=Lm4MKXOCB6orXhCk1LgrZ_Tq8aMewJqaB6PikBB2ONY,9806
|
|
32
|
-
absfuyu/general/human.py,sha256=WKlCYOA9lPRsWDDKXc2yAqwE_VzmMdurqQKkSX7yXV8,9591
|
|
33
|
-
absfuyu/pkg_data/__init__.py,sha256=eIJGI9iXlJ6EqoNqjo2oB9HZ8KJ7lLK48SFyYWKbon8,4929
|
|
34
|
-
absfuyu/pkg_data/chemistry.pkl,sha256=kYWNa_PVffoDnzT8b9Jvimmf_GZshPe1D-SnEKERsLo,4655
|
|
35
|
-
absfuyu/pkg_data/tarot.pkl,sha256=ssXTCC_BQgslO5F-3a9HivbxFQ6BioIe2E1frPVi2m0,56195
|
|
36
|
-
absfuyu/tools/__init__.py,sha256=V5wyBw8-nqn8XZ4ckpFTwsg8tsKBNjg6QmI68lzVEJQ,143
|
|
37
|
-
absfuyu/tools/converter.py,sha256=nnB29KCXYv3ovVR3Enx9uP3RZfOoZQw_GqpINdYNiqU,9737
|
|
38
|
-
absfuyu/tools/keygen.py,sha256=IxhbsQDHtgIxbSYGLldMAR7mFcJNCXp1fPSBIUL_Kt8,7413
|
|
39
|
-
absfuyu/tools/obfuscator.py,sha256=Ujq5ZToIttATMmI1tlDFc63MY80eH56qfhhAiFBq5qg,8625
|
|
40
|
-
absfuyu/tools/stats.py,sha256=7UT6pKSkotklS5BX-f-oJdwv-OqtmbjTsVrbUjz1ypE,5187
|
|
41
|
-
absfuyu/tools/web.py,sha256=mOdQiJBC_9ZraWYY7M5ULh7IG-or5qnLg15OqNhxmPs,1356
|
|
42
|
-
absfuyu/util/__init__.py,sha256=qbW0ek8lu6WKJYER1ptpECc0H_2I6k1guy65ZlMMrEM,3074
|
|
43
|
-
absfuyu/util/api.py,sha256=h0J-RCNM1qJOwIgNuv-dPgCBvUpwgk1M1VO6m-7_0bI,4217
|
|
44
|
-
absfuyu/util/json_method.py,sha256=QMgMVe4mSKXMzGFpHLsfMrusphDlei7uAWntZSbggxQ,2695
|
|
45
|
-
absfuyu/util/lunar.py,sha256=Pr2wJa4JPkmKjINJOKrXx43Cco7p-3uSl_nSq0XsdwM,13839
|
|
46
|
-
absfuyu/util/path.py,sha256=0MDyr0WK827WsP2IogaR0_V8Tea5ZVDf7ceBhdzNtzE,13438
|
|
47
|
-
absfuyu/util/performance.py,sha256=qtdGy9Vtf38tjY2MAO4G8KywqkzkSMpfmvzYu1VnkYw,6561
|
|
48
|
-
absfuyu/util/pkl.py,sha256=3lDaXrhOaa-8tMv4YYAXd-cbfzbmSwQsmVolN9i0FoA,1577
|
|
49
|
-
absfuyu/util/zipped.py,sha256=F_h-1cDYqlhZFZlmkyLPxLwyuHALOe-tyaEI4Xu2Pvs,2529
|
|
50
|
-
absfuyu-3.1.1.dist-info/LICENSE,sha256=V0E-QreSFFwyrt5YpB6Q4ifIfQkEOlEk0P7Hmc9ZQvU,1076
|
|
51
|
-
absfuyu-3.1.1.dist-info/METADATA,sha256=Xi2BSCeOxdht9-7kT5w2lN3MBti1WRIW541raB2xC7k,8185
|
|
52
|
-
absfuyu-3.1.1.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
|
|
53
|
-
absfuyu-3.1.1.dist-info/entry_points.txt,sha256=KutJbJf591TkDp3b2Llhc7r6fA8K8ELs6rL7sRJTl7I,47
|
|
54
|
-
absfuyu-3.1.1.dist-info/top_level.txt,sha256=1Ud2uJ8XBmohoDfY4NqUpbuIMWMS3LowF_51uwUniY8,8
|
|
55
|
-
absfuyu-3.1.1.dist-info/RECORD,,
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
absfuyu
|