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.

Files changed (61) hide show
  1. absfuyu/__init__.py +3 -10
  2. absfuyu/__main__.py +5 -250
  3. absfuyu/cli/__init__.py +51 -0
  4. absfuyu/cli/color.py +24 -0
  5. absfuyu/cli/config_group.py +56 -0
  6. absfuyu/cli/do_group.py +76 -0
  7. absfuyu/cli/game_group.py +109 -0
  8. absfuyu/config/__init__.py +117 -100
  9. absfuyu/config/config.json +0 -7
  10. absfuyu/core.py +5 -66
  11. absfuyu/everything.py +7 -9
  12. absfuyu/extensions/beautiful.py +30 -23
  13. absfuyu/extensions/dev/__init__.py +11 -8
  14. absfuyu/extensions/dev/password_hash.py +4 -2
  15. absfuyu/extensions/dev/passwordlib.py +7 -5
  16. absfuyu/extensions/dev/project_starter.py +4 -2
  17. absfuyu/extensions/dev/shutdownizer.py +148 -0
  18. absfuyu/extensions/extra/__init__.py +1 -2
  19. absfuyu/extensions/extra/data_analysis.py +182 -107
  20. absfuyu/fun/WGS.py +50 -26
  21. absfuyu/fun/__init__.py +6 -7
  22. absfuyu/fun/tarot.py +1 -1
  23. absfuyu/game/__init__.py +75 -81
  24. absfuyu/game/game_stat.py +36 -0
  25. absfuyu/game/sudoku.py +41 -48
  26. absfuyu/game/tictactoe.py +303 -548
  27. absfuyu/game/wordle.py +56 -47
  28. absfuyu/general/__init__.py +17 -7
  29. absfuyu/general/content.py +16 -15
  30. absfuyu/general/data_extension.py +282 -90
  31. absfuyu/general/generator.py +67 -67
  32. absfuyu/general/human.py +74 -78
  33. absfuyu/logger.py +94 -68
  34. absfuyu/pkg_data/__init__.py +29 -25
  35. absfuyu/py.typed +0 -0
  36. absfuyu/sort.py +61 -47
  37. absfuyu/tools/__init__.py +0 -1
  38. absfuyu/tools/converter.py +80 -62
  39. absfuyu/tools/keygen.py +62 -67
  40. absfuyu/tools/obfuscator.py +57 -53
  41. absfuyu/tools/stats.py +24 -24
  42. absfuyu/tools/web.py +10 -9
  43. absfuyu/util/__init__.py +71 -33
  44. absfuyu/util/api.py +53 -43
  45. absfuyu/util/json_method.py +25 -27
  46. absfuyu/util/lunar.py +20 -24
  47. absfuyu/util/path.py +362 -241
  48. absfuyu/util/performance.py +217 -135
  49. absfuyu/util/pkl.py +8 -8
  50. absfuyu/util/zipped.py +17 -19
  51. absfuyu/version.py +160 -147
  52. absfuyu-3.3.3.dist-info/METADATA +124 -0
  53. absfuyu-3.3.3.dist-info/RECORD +59 -0
  54. {absfuyu-3.1.1.dist-info → absfuyu-3.3.3.dist-info}/WHEEL +1 -2
  55. {absfuyu-3.1.1.dist-info → absfuyu-3.3.3.dist-info}/entry_points.txt +1 -0
  56. {absfuyu-3.1.1.dist-info → absfuyu-3.3.3.dist-info/licenses}/LICENSE +1 -1
  57. absfuyu/extensions/dev/pkglib.py +0 -98
  58. absfuyu/game/tictactoe2.py +0 -318
  59. absfuyu-3.1.1.dist-info/METADATA +0 -215
  60. absfuyu-3.1.1.dist-info/RECORD +0 -55
  61. absfuyu-3.1.1.dist-info/top_level.txt +0 -1
@@ -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))
@@ -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
@@ -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
- ```
@@ -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