absfuyu 5.1.0__py3-none-any.whl → 5.3.0__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 (73) hide show
  1. absfuyu/__init__.py +1 -1
  2. absfuyu/__main__.py +3 -3
  3. absfuyu/cli/__init__.py +1 -1
  4. absfuyu/cli/color.py +3 -3
  5. absfuyu/cli/config_group.py +2 -2
  6. absfuyu/cli/do_group.py +12 -2
  7. absfuyu/cli/game_group.py +2 -2
  8. absfuyu/cli/tool_group.py +2 -3
  9. absfuyu/config/__init__.py +1 -1
  10. absfuyu/core/__init__.py +1 -1
  11. absfuyu/core/baseclass.py +32 -2
  12. absfuyu/core/baseclass2.py +1 -1
  13. absfuyu/core/decorator.py +4 -4
  14. absfuyu/core/docstring.py +43 -25
  15. absfuyu/core/dummy_cli.py +1 -1
  16. absfuyu/core/dummy_func.py +4 -4
  17. absfuyu/dxt/__init__.py +1 -1
  18. absfuyu/dxt/dictext.py +5 -2
  19. absfuyu/dxt/dxt_support.py +1 -1
  20. absfuyu/dxt/intext.py +5 -2
  21. absfuyu/dxt/listext.py +405 -127
  22. absfuyu/dxt/strext.py +75 -15
  23. absfuyu/extra/__init__.py +1 -1
  24. absfuyu/extra/beautiful.py +1 -1
  25. absfuyu/extra/da/__init__.py +1 -1
  26. absfuyu/extra/da/dadf.py +56 -4
  27. absfuyu/extra/da/dadf_base.py +1 -1
  28. absfuyu/extra/da/df_func.py +1 -1
  29. absfuyu/extra/da/mplt.py +1 -1
  30. absfuyu/extra/data_analysis.py +3 -3
  31. absfuyu/fun/__init__.py +1 -1
  32. absfuyu/fun/tarot.py +1 -1
  33. absfuyu/game/__init__.py +1 -1
  34. absfuyu/game/game_stat.py +1 -1
  35. absfuyu/game/sudoku.py +1 -1
  36. absfuyu/game/tictactoe.py +2 -3
  37. absfuyu/game/wordle.py +1 -1
  38. absfuyu/general/__init__.py +1 -1
  39. absfuyu/general/content.py +2 -2
  40. absfuyu/general/human.py +1 -1
  41. absfuyu/general/shape.py +1 -1
  42. absfuyu/logger.py +1 -1
  43. absfuyu/pkg_data/__init__.py +1 -1
  44. absfuyu/pkg_data/deprecated.py +1 -1
  45. absfuyu/sort.py +1 -1
  46. absfuyu/tools/__init__.py +16 -13
  47. absfuyu/tools/checksum.py +2 -2
  48. absfuyu/tools/converter.py +29 -8
  49. absfuyu/tools/generator.py +251 -110
  50. absfuyu/tools/inspector.py +84 -40
  51. absfuyu/tools/keygen.py +1 -1
  52. absfuyu/tools/obfuscator.py +2 -2
  53. absfuyu/tools/passwordlib.py +3 -4
  54. absfuyu/tools/shutdownizer.py +1 -1
  55. absfuyu/tools/web.py +1 -1
  56. absfuyu/typings.py +136 -0
  57. absfuyu/util/__init__.py +18 -4
  58. absfuyu/util/api.py +36 -16
  59. absfuyu/util/json_method.py +43 -14
  60. absfuyu/util/lunar.py +1 -1
  61. absfuyu/util/path.py +158 -4
  62. absfuyu/util/performance.py +120 -5
  63. absfuyu/util/shorten_number.py +1 -1
  64. absfuyu/util/text_table.py +235 -45
  65. absfuyu/util/zipped.py +4 -3
  66. absfuyu/version.py +2 -2
  67. {absfuyu-5.1.0.dist-info → absfuyu-5.3.0.dist-info}/METADATA +1 -1
  68. absfuyu-5.3.0.dist-info/RECORD +76 -0
  69. absfuyu/core/typings.py +0 -40
  70. absfuyu-5.1.0.dist-info/RECORD +0 -76
  71. {absfuyu-5.1.0.dist-info → absfuyu-5.3.0.dist-info}/WHEEL +0 -0
  72. {absfuyu-5.1.0.dist-info → absfuyu-5.3.0.dist-info}/entry_points.txt +0 -0
  73. {absfuyu-5.1.0.dist-info → absfuyu-5.3.0.dist-info}/licenses/LICENSE +0 -0
absfuyu/dxt/strext.py CHANGED
@@ -3,8 +3,8 @@ Absfuyu: Data Extension
3
3
  -----------------------
4
4
  str extension
5
5
 
6
- Version: 5.1.0
7
- Date updated: 10/03/2025 (dd/mm/yyyy)
6
+ Version: 5.2.0
7
+ Date updated: 13/03/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module Package
@@ -15,14 +15,72 @@ __all__ = ["Text", "TextAnalyzeDictFormat"]
15
15
  # Library
16
16
  # ---------------------------------------------------------------------------
17
17
  import random
18
+ from string import ascii_letters as _ascii_letters
18
19
  from typing import NotRequired, Self, TypedDict
19
20
 
20
21
  from absfuyu.core import ShowAllMethodsMixin, deprecated, versionadded, versionchanged
21
- from absfuyu.logger import logger
22
- from absfuyu.tools.generator import Charset, Generator
23
22
  from absfuyu.util import set_min_max
24
23
 
25
24
 
25
+ # Support function
26
+ # ---------------------------------------------------------------------------
27
+ def _generate_string(
28
+ charset: str | None = None,
29
+ size: int = 8,
30
+ times: int = 1,
31
+ unique: bool = True,
32
+ ) -> list[str]:
33
+ """
34
+ Generate a list of random string from character set
35
+ (Random string generator)
36
+
37
+ This is a lesser version of
38
+ ``absfuyu.tools.generator.Generator.generate_string()``
39
+
40
+ Parameters
41
+ ----------
42
+ charset : str, optional
43
+ Custom character set, by default ``None``
44
+ ([a-zA-Z] - string.ascii_letters)
45
+
46
+ size : int, optional
47
+ Length of each string in list, by default ``8``
48
+
49
+ times : int, optional
50
+ How many random string generated, by default ``1``
51
+
52
+ unique : bool, optional
53
+ Each generated text is unique, by default ``True``
54
+
55
+ Returns
56
+ -------
57
+ list[str]
58
+ List of random string generated
59
+ """
60
+
61
+ charset = _ascii_letters or charset
62
+
63
+ try:
64
+ char_lst = list(charset) # type: ignore[arg-type]
65
+ except Exception:
66
+ char_lst = charset # type: ignore[assignment]
67
+
68
+ unique_string = []
69
+ count = 0
70
+
71
+ while count < times:
72
+ gen_string = "".join(random.choice(char_lst) for _ in range(size))
73
+ if not unique:
74
+ unique_string.append(gen_string)
75
+ count += 1
76
+ else:
77
+ if gen_string not in unique_string:
78
+ unique_string.append(gen_string)
79
+ count += 1
80
+
81
+ return unique_string
82
+
83
+
26
84
  # Class
27
85
  # ---------------------------------------------------------------------------
28
86
  class TextAnalyzeDictFormat(TypedDict):
@@ -61,6 +119,9 @@ class TextAnalyzeDictFormat(TypedDict):
61
119
  class Text(ShowAllMethodsMixin, str):
62
120
  """
63
121
  ``str`` extension
122
+
123
+ >>> # For a list of new methods
124
+ >>> Text.show_all_methods()
64
125
  """
65
126
 
66
127
  def divide(self, string_split_size: int = 60) -> list[str]:
@@ -154,9 +215,7 @@ class Text(ShowAllMethodsMixin, str):
154
215
  splt_len = len(temp)
155
216
 
156
217
  if custom_var_name is None:
157
- splt_name = Generator.generate_string(
158
- charset=Charset.ALPHABET, size=split_var_len, times=splt_len + 1
159
- )
218
+ splt_name = _generate_string(size=split_var_len, times=splt_len + 1)
160
219
  for i in range(splt_len):
161
220
  output.append(f"{splt_name[i]}='{temp[i]}'")
162
221
  else:
@@ -361,14 +420,15 @@ class Text(ShowAllMethodsMixin, str):
361
420
  probability = int(set_min_max(probability))
362
421
  text = self.lower()
363
422
 
364
- temp = []
365
- for x in text:
366
- if random.randint(1, 100) <= probability:
367
- x = x.upper()
368
- temp.append(x)
369
- logger.debug(temp)
370
- return self.__class__("".join(temp))
423
+ random_caps = (
424
+ x.upper() if random.randint(1, 100) <= probability else x for x in text
425
+ )
426
+ return self.__class__("".join(random_caps))
371
427
 
428
+ @deprecated(
429
+ "5.2.0",
430
+ reason="str already has swapcase() method, will be removed in version 5.3.0",
431
+ )
372
432
  @versionchanged("5.0.0", reason="Use ``str.swapcase()``")
373
433
  def reverse_capslock(self) -> Self:
374
434
  """
@@ -406,7 +466,7 @@ class Text(ShowAllMethodsMixin, str):
406
466
  """
407
467
  return list(self)
408
468
 
409
- @deprecated("5.0.0", reason="Unused")
469
+ @deprecated("5.0.0", reason="Unused, will be removed in version 5.3.0")
410
470
  def to_listext(self) -> None:
411
471
  """Deprecated, will be removed soon"""
412
472
  raise NotImplementedError("Deprecated, will be removed soon")
absfuyu/extra/__init__.py CHANGED
@@ -3,7 +3,7 @@ Absfuyu: Extra
3
3
  --------------
4
4
  Features that require additional libraries
5
5
 
6
- Version: 5.1.0
6
+ Version: 5.2.0
7
7
  Date updated: 10/03/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
@@ -3,7 +3,7 @@ Absfuyu: Beautiful
3
3
  ------------------
4
4
  A decorator that makes output more beautiful
5
5
 
6
- Version: 5.1.0
6
+ Version: 5.2.0
7
7
  Date updated: 10/03/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
@@ -3,7 +3,7 @@ Absfuyu: Data Analysis
3
3
  ----------------------
4
4
  Data Analyst
5
5
 
6
- Version: 5.1.0
6
+ Version: 5.2.0
7
7
  Date updated: 10/03/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
absfuyu/extra/da/dadf.py CHANGED
@@ -3,8 +3,8 @@ Absfuyu: Data Analysis
3
3
  ----------------------
4
4
  Data Analyst DataFrame
5
5
 
6
- Version: 5.1.0
7
- Date updated: 10/03/2025 (dd/mm/yyyy)
6
+ Version: 5.2.0
7
+ Date updated: 15/03/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module level
@@ -39,11 +39,12 @@ except ImportError:
39
39
 
40
40
  from absfuyu.core.baseclass import ShowAllMethodsMixin
41
41
  from absfuyu.core.docstring import deprecated, versionadded
42
- from absfuyu.core.typings import _R, _T
43
42
  from absfuyu.extra.da.dadf_base import CityData
44
43
  from absfuyu.extra.da.dadf_base import DataAnalystDataFrameBase as DFBase
45
44
  from absfuyu.extra.da.dadf_base import SplittedDF
46
45
  from absfuyu.logger import logger
46
+ from absfuyu.typings import R as _R
47
+ from absfuyu.typings import T as _T
47
48
  from absfuyu.util import set_min_max
48
49
 
49
50
 
@@ -1135,4 +1136,55 @@ class DADF_WIP(DADF):
1135
1136
  W.I.P - No test cases written
1136
1137
  """
1137
1138
 
1138
- pass
1139
+ @versionadded("5.2.0")
1140
+ def split_str_column(
1141
+ self,
1142
+ col: str,
1143
+ pattern: str = " ",
1144
+ *,
1145
+ n: int | None = None,
1146
+ regex: bool = False,
1147
+ ) -> Self:
1148
+ """
1149
+ Split column with dtype[str] into other columns.
1150
+
1151
+ Parameters
1152
+ ----------
1153
+ col : str
1154
+ Column name
1155
+
1156
+ pattern : str, optional
1157
+ Split pattern, by default ``" "``
1158
+
1159
+ n : int | None, optional
1160
+ Split by how many times, by default ``None``
1161
+
1162
+ regex : bool, optional
1163
+ Regex mode, by default ``False``
1164
+
1165
+ Returns
1166
+ -------
1167
+ Self
1168
+ DataFrame
1169
+
1170
+
1171
+ Example:
1172
+ --------
1173
+ >>> df = DADF(DADF.sample_df(5)[["text"]])
1174
+ >>> df.split_str_column("text", "s"))
1175
+ text text_0 text_1
1176
+ 0 uwfzbsgj uwfzb gj
1177
+ 1 lxlskayx lxl kayx
1178
+ 2 fzgpzjtp fzgpzjtp None
1179
+ 3 lxnytktz lxnytktz None
1180
+ 4 onryaxtt onryaxtt None
1181
+ """
1182
+ if n is None:
1183
+ pass
1184
+ splited_data: pd.DataFrame = self[col].str.split(
1185
+ pat=pattern, n=n, expand=True, regex=regex
1186
+ )
1187
+ num_of_splitted_cols = splited_data.shape[1]
1188
+ new_col_names = [f"{col}_{x}" for x in range(num_of_splitted_cols)]
1189
+ self[new_col_names] = splited_data
1190
+ return self
@@ -3,7 +3,7 @@ Absfuyu: Data Analysis
3
3
  ----------------------
4
4
  Data Analyst DataFrame - Base/Core
5
5
 
6
- Version: 5.1.0
6
+ Version: 5.2.0
7
7
  Date updated: 10/03/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
@@ -3,7 +3,7 @@ Absfuyu: Data Analysis
3
3
  ----------------------
4
4
  DF Function
5
5
 
6
- Version: 5.1.0
6
+ Version: 5.2.0
7
7
  Date updated: 10/03/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
absfuyu/extra/da/mplt.py CHANGED
@@ -3,7 +3,7 @@ Absfuyu: Data Analysis
3
3
  ----------------------
4
4
  Matplotlib Helper
5
5
 
6
- Version: 5.1.0
6
+ Version: 5.2.0
7
7
  Date updated: 10/03/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
@@ -4,8 +4,8 @@ Absfuyu: Data Analysis [W.I.P]
4
4
  Extension for ``pd.DataFrame``
5
5
  (deprecated)
6
6
 
7
- Version: 5.1.0
8
- Date updated: 10/03/2025 (dd/mm/yyyy)
7
+ Version: 5.2.0
8
+ Date updated: 15/03/2025 (dd/mm/yyyy)
9
9
  """
10
10
 
11
11
  # Library
@@ -18,4 +18,4 @@ from absfuyu.extra.da.df_func import ( # noqa
18
18
  )
19
19
 
20
20
  # Class - DA
21
- # TODO: split column df[['A','B']]=df['AB'].str.split(' ',n=1,expand=True) | drop dups | Combine: row with data, row NaN
21
+ # TODO: drop dups | Combine: row with data, row NaN
absfuyu/fun/__init__.py CHANGED
@@ -3,7 +3,7 @@ Absfuyu: Fun
3
3
  ------------
4
4
  Some fun or weird stuff
5
5
 
6
- Version: 5.1.0
6
+ Version: 5.2.0
7
7
  Date updated: 10/03/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
absfuyu/fun/tarot.py CHANGED
@@ -4,7 +4,7 @@ Absfuyu: Tarot
4
4
  Tarot stuff
5
5
 
6
6
 
7
- Version: 5.1.0
7
+ Version: 5.2.0
8
8
  Date updated: 10/03/2025 (dd/mm/yyyy)
9
9
 
10
10
  Usage:
absfuyu/game/__init__.py CHANGED
@@ -3,7 +3,7 @@ Absfuyu: Game
3
3
  -------------
4
4
  Contain some game that can be played on terminal
5
5
 
6
- Version: 5.1.0
6
+ Version: 5.2.0
7
7
  Date updated: 10/03/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
absfuyu/game/game_stat.py CHANGED
@@ -1,7 +1,7 @@
1
1
  """
2
2
  Game: Game Stat
3
3
 
4
- Version: 5.1.0
4
+ Version: 5.2.0
5
5
  Date updated: 10/03/2025 (dd/mm/yyyy)
6
6
  """
7
7
 
absfuyu/game/sudoku.py CHANGED
@@ -3,7 +3,7 @@ Game: Sudoku
3
3
  ------------
4
4
  Sudoku 9x9 Solver
5
5
 
6
- Version: 5.1.0
6
+ Version: 5.2.0
7
7
  Date updated: 10/03/2025 (dd/mm/yyyy)
8
8
 
9
9
  Credit:
absfuyu/game/tictactoe.py CHANGED
@@ -2,11 +2,10 @@
2
2
  Game: Tic Tac Toe
3
3
  -----------------
4
4
 
5
- Version: 5.1.0
6
- Date updated: 10/03/2025 (dd/mm/yyyy)
5
+ Version: 5.2.0
6
+ Date updated: 15/03/2025 (dd/mm/yyyy)
7
7
  """
8
8
 
9
-
10
9
  # Module level
11
10
  # ---------------------------------------------------------------------------
12
11
  __all__ = ["TicTacToe", "GameMode"]
absfuyu/game/wordle.py CHANGED
@@ -2,7 +2,7 @@
2
2
  Game: Wordle Solver
3
3
  -------------------
4
4
 
5
- Version: 5.1.0
5
+ Version: 5.2.0
6
6
  Date updated: 10/03/2025 (dd/mm/yyyy)
7
7
 
8
8
  Usage:
@@ -3,7 +3,7 @@ Absfuyu: General
3
3
  ----------------
4
4
  Collection of useful classes
5
5
 
6
- Version: 5.1.0
6
+ Version: 5.2.0
7
7
  Date updated: 10/03/2025 (dd/mm/yyyy)
8
8
 
9
9
  Features:
@@ -3,8 +3,8 @@ Absfuyu: Content
3
3
  ----------------
4
4
  Handle .txt file
5
5
 
6
- Version: 5.1.0
7
- Date updated: 10/03/2025 (dd/mm/yyyy)
6
+ Version: 5.2.0
7
+ Date updated: 15/03/2025 (dd/mm/yyyy)
8
8
 
9
9
  Usage:
10
10
  ------
absfuyu/general/human.py CHANGED
@@ -3,7 +3,7 @@ Absfuyu: Human
3
3
  --------------
4
4
  Human related stuff
5
5
 
6
- Version: 5.1.0
6
+ Version: 5.2.0
7
7
  Date updated: 10/03/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
absfuyu/general/shape.py CHANGED
@@ -3,7 +3,7 @@ Absfuyu: Shape
3
3
  --------------
4
4
  Shapes
5
5
 
6
- Version: 5.1.0
6
+ Version: 5.2.0
7
7
  Date updated: 10/03/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
absfuyu/logger.py CHANGED
@@ -3,7 +3,7 @@ Absfuyu: Logger
3
3
  ---------------
4
4
  Custom Logger Module
5
5
 
6
- Version: 5.1.0
6
+ Version: 5.2.0
7
7
  Date updated: 10/03/2025 (dd/mm/yyyy)
8
8
 
9
9
  Usage:
@@ -3,7 +3,7 @@ Absfuyu: Package data
3
3
  ---------------------
4
4
  Load package data
5
5
 
6
- Version: 5.1.0
6
+ Version: 5.2.0
7
7
  Date updated: 10/03/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
@@ -3,7 +3,7 @@ Absfuyu: Package data
3
3
  ---------------------
4
4
  Deprecated (but might have some use)
5
5
 
6
- Version: 5.1.0
6
+ Version: 5.2.0
7
7
  Date updated: 10/03/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
absfuyu/sort.py CHANGED
@@ -3,7 +3,7 @@ Absfuyu: Sort
3
3
  -------------
4
4
  Sort Module
5
5
 
6
- Version: 5.1.0
6
+ Version: 5.2.0
7
7
  Date updated: 10/03/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
absfuyu/tools/__init__.py CHANGED
@@ -3,29 +3,32 @@ Absfuyu: Tools
3
3
  --------------
4
4
  Some useful tools
5
5
 
6
- Version: 5.1.0
7
- Date updated: 10/03/2025 (dd/mm/yyyy)
6
+ Version: 5.2.0
7
+ Date updated: 16/03/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module Package
11
11
  # ---------------------------------------------------------------------------
12
12
  __all__ = [
13
- # Main
13
+ # # Main
14
14
  "Checksum",
15
- "Base64EncodeDecode",
16
- "Text2Chemistry",
17
- "Charset",
18
- "Generator",
15
+ "B64",
16
+ "T2C",
17
+ # "Charset",
18
+ # "Generator",
19
19
  "Inspector",
20
- "Obfuscator",
21
- "StrShifter",
20
+ "inspect_all",
21
+ # "Obfuscator",
22
+ # "StrShifter",
22
23
  ]
23
24
 
24
25
 
25
26
  # Library
26
27
  # ---------------------------------------------------------------------------
27
28
  from absfuyu.tools.checksum import Checksum
28
- from absfuyu.tools.converter import Base64EncodeDecode, Text2Chemistry
29
- from absfuyu.tools.generator import Charset, Generator
30
- from absfuyu.tools.inspector import Inspector
31
- from absfuyu.tools.obfuscator import Obfuscator, StrShifter
29
+ from absfuyu.tools.converter import Base64EncodeDecode as B64
30
+ from absfuyu.tools.converter import Text2Chemistry as T2C
31
+ from absfuyu.tools.inspector import Inspector, inspect_all
32
+
33
+ # from absfuyu.tools.generator import Charset, Generator # circular import bug
34
+ # from absfuyu.tools.obfuscator import Obfuscator, StrShifter # circular import bug
absfuyu/tools/checksum.py CHANGED
@@ -3,8 +3,8 @@ Absufyu: Checksum
3
3
  -----------------
4
4
  Check MD5, SHA256, ...
5
5
 
6
- Version: 5.1.0
7
- Date updated: 10/03/2025 (dd/mm/yyyy)
6
+ Version: 5.2.0
7
+ Date updated: 11/03/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module level
@@ -3,8 +3,8 @@ Absufyu: Converter
3
3
  ------------------
4
4
  Convert stuff
5
5
 
6
- Version: 5.1.0
7
- Date updated: 10/03/2025 (dd/mm/yyyy)
6
+ Version: 5.2.0
7
+ Date updated: 15/03/2025 (dd/mm/yyyy)
8
8
 
9
9
  Feature:
10
10
  --------
@@ -19,6 +19,8 @@ __all__ = [
19
19
  "Base64EncodeDecode",
20
20
  "Text2Chemistry",
21
21
  "Str2Pixel",
22
+ # Support
23
+ "ChemistryElement",
22
24
  ]
23
25
 
24
26
 
@@ -36,7 +38,7 @@ from absfuyu.core.baseclass import BaseClass, CLITextColor
36
38
  from absfuyu.core.docstring import versionadded
37
39
  from absfuyu.logger import logger
38
40
  from absfuyu.pkg_data import DataList, DataLoader
39
- from absfuyu.util import set_min
41
+ from absfuyu.util.text_table import OneColumnTableMaker
40
42
 
41
43
 
42
44
  # Class
@@ -167,6 +169,10 @@ class ChemistryElement(BaseClass):
167
169
 
168
170
 
169
171
  class Text2Chemistry(BaseClass):
172
+ """
173
+ Convert text into chemistry symbols.
174
+ """
175
+
170
176
  def __init__(self) -> None:
171
177
  self.data_location = DataList.CHEMISTRY
172
178
 
@@ -301,16 +307,31 @@ class Text2Chemistry(BaseClass):
301
307
  if len(result) == 0:
302
308
  res = "No possible combination"
303
309
  else:
304
- msg = []
310
+ header = ["Text to Chemistry"]
311
+ body = []
312
+ max_table_len = len(header[0])
313
+
305
314
  for i, solution in enumerate(result, start=1):
315
+ msg = []
306
316
  max_word_len = max([len(x.name) for x in solution])
307
317
  msg.append(f"Option {i:02}: {', '.join([x.symbol for x in solution])}")
308
318
  for x in solution:
309
319
  msg.append(
310
- f"{x.symbol.ljust(2)} ({x.number:02}. {x.name.ljust(max_word_len)} - {round(x.atomic_mass, 2)})"
320
+ f"{x.symbol.ljust(2)} "
321
+ f"({x.number:02}. {x.name.ljust(max_word_len)}"
322
+ f" - {round(x.atomic_mass, 2)})"
311
323
  )
312
- msg.append("---")
313
- res = "\n".join(msg)
324
+ body.append(msg)
325
+
326
+ max_table_len = max(
327
+ max([max([len(x) for x in opt]) for opt in body]), max_table_len
328
+ )
329
+ table = OneColumnTableMaker(ncols=max_table_len + 4, style="normal")
330
+ table.add_paragraph(header)
331
+ for x in body:
332
+ table.add_paragraph(x)
333
+
334
+ res = table.make_table()
314
335
  return res
315
336
 
316
337
 
@@ -357,7 +378,7 @@ class Str2Pixel(BaseClass):
357
378
  """
358
379
  self.data = str_data
359
380
  if pixel_symbol_overwrite is None:
360
- self.pixel = self.PIXEL * int(set_min(pixel_size, min_value=1))
381
+ self.pixel = self.PIXEL * int(max(pixel_size, 1))
361
382
  else:
362
383
  self.pixel = pixel_symbol_overwrite
363
384