absfuyu 5.7.0__tar.gz → 5.8.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.

Files changed (124) hide show
  1. {absfuyu-5.7.0 → absfuyu-5.8.0}/PKG-INFO +10 -1
  2. {absfuyu-5.7.0 → absfuyu-5.8.0}/pyproject.toml +7 -1
  3. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/__init__.py +1 -1
  4. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/__main__.py +2 -2
  5. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/cli/__init__.py +2 -2
  6. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/cli/color.py +2 -2
  7. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/cli/config_group.py +2 -2
  8. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/cli/do_group.py +2 -2
  9. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/cli/game_group.py +2 -2
  10. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/cli/tool_group.py +2 -2
  11. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/config/__init__.py +2 -2
  12. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/core/__init__.py +2 -2
  13. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/core/baseclass.py +2 -2
  14. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/core/baseclass2.py +2 -2
  15. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/core/decorator.py +2 -2
  16. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/core/docstring.py +2 -2
  17. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/core/dummy_cli.py +2 -2
  18. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/core/dummy_func.py +2 -2
  19. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/dxt/__init__.py +2 -2
  20. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/dxt/dictext.py +2 -2
  21. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/dxt/dxt_support.py +2 -2
  22. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/dxt/intext.py +2 -2
  23. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/dxt/listext.py +2 -2
  24. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/dxt/strext.py +2 -2
  25. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/extra/__init__.py +2 -2
  26. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/extra/beautiful.py +2 -2
  27. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/extra/da/__init__.py +1 -1
  28. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/extra/da/dadf.py +58 -21
  29. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/extra/da/dadf_base.py +2 -2
  30. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/extra/da/df_func.py +2 -2
  31. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/extra/da/mplt.py +2 -2
  32. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/extra/data_analysis.py +2 -2
  33. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/extra/pdf.py +1 -1
  34. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/extra/xml.py +1 -1
  35. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/fun/__init__.py +2 -2
  36. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/fun/rubik.py +2 -2
  37. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/fun/tarot.py +2 -2
  38. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/game/__init__.py +2 -2
  39. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/game/game_stat.py +2 -2
  40. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/game/sudoku.py +2 -2
  41. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/game/tictactoe.py +2 -2
  42. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/game/wordle.py +2 -2
  43. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/general/__init__.py +2 -2
  44. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/general/content.py +2 -2
  45. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/general/human.py +2 -2
  46. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/general/shape.py +2 -2
  47. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/logger.py +2 -2
  48. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/pkg_data/__init__.py +2 -2
  49. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/pkg_data/deprecated.py +2 -2
  50. absfuyu-5.8.0/src/absfuyu/pkg_data/logo.py +1462 -0
  51. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/sort.py +2 -2
  52. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/tools/__init__.py +2 -2
  53. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/tools/checksum.py +2 -2
  54. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/tools/converter.py +2 -2
  55. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/tools/generator.py +2 -2
  56. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/tools/inspector.py +2 -2
  57. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/tools/keygen.py +2 -2
  58. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/tools/obfuscator.py +2 -2
  59. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/tools/passwordlib.py +2 -2
  60. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/tools/shutdownizer.py +2 -2
  61. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/tools/sw.py +2 -2
  62. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/tools/web.py +2 -2
  63. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/typings.py +2 -2
  64. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/util/__init__.py +2 -2
  65. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/util/api.py +2 -2
  66. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/util/json_method.py +2 -2
  67. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/util/lunar.py +2 -2
  68. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/util/path.py +2 -2
  69. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/util/performance.py +2 -2
  70. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/util/shorten_number.py +2 -2
  71. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/util/text_table.py +2 -2
  72. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/util/zipped.py +2 -2
  73. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/version.py +2 -2
  74. {absfuyu-5.7.0 → absfuyu-5.8.0}/tests/conftest.py +2 -2
  75. {absfuyu-5.7.0 → absfuyu-5.8.0}/tests/test_api.py +2 -2
  76. {absfuyu-5.7.0 → absfuyu-5.8.0}/tests/test_beautiful.py +2 -2
  77. {absfuyu-5.7.0 → absfuyu-5.8.0}/tests/test_config.py +2 -2
  78. {absfuyu-5.7.0 → absfuyu-5.8.0}/tests/test_converter.py +2 -2
  79. {absfuyu-5.7.0 → absfuyu-5.8.0}/tests/test_core.py +2 -2
  80. {absfuyu-5.7.0 → absfuyu-5.8.0}/tests/test_data_analysis.py +2 -2
  81. {absfuyu-5.7.0 → absfuyu-5.8.0}/tests/test_dictext.py +2 -2
  82. {absfuyu-5.7.0 → absfuyu-5.8.0}/tests/test_everything.py +2 -2
  83. {absfuyu-5.7.0 → absfuyu-5.8.0}/tests/test_extra.py +2 -2
  84. {absfuyu-5.7.0 → absfuyu-5.8.0}/tests/test_fun.py +2 -2
  85. {absfuyu-5.7.0 → absfuyu-5.8.0}/tests/test_game.py +2 -2
  86. {absfuyu-5.7.0 → absfuyu-5.8.0}/tests/test_generator.py +2 -2
  87. {absfuyu-5.7.0 → absfuyu-5.8.0}/tests/test_inspector.py +2 -2
  88. {absfuyu-5.7.0 → absfuyu-5.8.0}/tests/test_intext.py +2 -2
  89. {absfuyu-5.7.0 → absfuyu-5.8.0}/tests/test_listext.py +2 -2
  90. {absfuyu-5.7.0 → absfuyu-5.8.0}/tests/test_logger.py +2 -2
  91. {absfuyu-5.7.0 → absfuyu-5.8.0}/tests/test_obfuscator.py +2 -2
  92. {absfuyu-5.7.0 → absfuyu-5.8.0}/tests/test_passwordlib.py +2 -2
  93. {absfuyu-5.7.0 → absfuyu-5.8.0}/tests/test_performance.py +2 -2
  94. {absfuyu-5.7.0 → absfuyu-5.8.0}/tests/test_pkg_data.py +2 -2
  95. {absfuyu-5.7.0 → absfuyu-5.8.0}/tests/test_shape.py +2 -2
  96. {absfuyu-5.7.0 → absfuyu-5.8.0}/tests/test_shorten_number.py +2 -2
  97. {absfuyu-5.7.0 → absfuyu-5.8.0}/tests/test_strext.py +2 -2
  98. {absfuyu-5.7.0 → absfuyu-5.8.0}/tests/test_text_table.py +2 -2
  99. {absfuyu-5.7.0 → absfuyu-5.8.0}/tests/test_tools.py +2 -2
  100. {absfuyu-5.7.0 → absfuyu-5.8.0}/tests/test_util.py +2 -2
  101. {absfuyu-5.7.0 → absfuyu-5.8.0}/tests/test_version.py +2 -2
  102. {absfuyu-5.7.0 → absfuyu-5.8.0}/.gitignore +0 -0
  103. {absfuyu-5.7.0 → absfuyu-5.8.0}/LICENSE +0 -0
  104. {absfuyu-5.7.0 → absfuyu-5.8.0}/README.md +0 -0
  105. {absfuyu-5.7.0 → absfuyu-5.8.0}/dev_requirements.txt +0 -0
  106. {absfuyu-5.7.0 → absfuyu-5.8.0}/docs/Makefile +0 -0
  107. {absfuyu-5.7.0 → absfuyu-5.8.0}/docs/_template/versioning.html +0 -0
  108. {absfuyu-5.7.0 → absfuyu-5.8.0}/docs/conf.py +0 -0
  109. {absfuyu-5.7.0 → absfuyu-5.8.0}/docs/index.rst +0 -0
  110. {absfuyu-5.7.0 → absfuyu-5.8.0}/docs/info.md +0 -0
  111. {absfuyu-5.7.0 → absfuyu-5.8.0}/docs/make.bat +0 -0
  112. {absfuyu-5.7.0 → absfuyu-5.8.0}/docs/modules.rst +0 -0
  113. {absfuyu-5.7.0 → absfuyu-5.8.0}/images/Logo Full.png +0 -0
  114. {absfuyu-5.7.0 → absfuyu-5.8.0}/images/Logo Square.png +0 -0
  115. {absfuyu-5.7.0 → absfuyu-5.8.0}/images/Logo White.png +0 -0
  116. {absfuyu-5.7.0 → absfuyu-5.8.0}/images/repository-image-crop.png +0 -0
  117. {absfuyu-5.7.0 → absfuyu-5.8.0}/images/repository-image-white.png +0 -0
  118. {absfuyu-5.7.0 → absfuyu-5.8.0}/images/repository-image.png +0 -0
  119. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/config/config.json +0 -0
  120. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/pkg_data/chemistry.pkl +0 -0
  121. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/pkg_data/passwordlib_lzma.pkl +0 -0
  122. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/pkg_data/tarot.pkl +0 -0
  123. {absfuyu-5.7.0 → absfuyu-5.8.0}/src/absfuyu/py.typed +0 -0
  124. {absfuyu-5.7.0 → absfuyu-5.8.0}/tests/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: absfuyu
3
- Version: 5.7.0
3
+ Version: 5.8.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/
@@ -31,6 +31,11 @@ Requires-Dist: colorama
31
31
  Requires-Dist: requests
32
32
  Provides-Extra: beautiful
33
33
  Requires-Dist: rich; extra == 'beautiful'
34
+ Provides-Extra: dadf
35
+ Requires-Dist: numpy; extra == 'dadf'
36
+ Requires-Dist: openpyxl; extra == 'dadf'
37
+ Requires-Dist: pandas; extra == 'dadf'
38
+ Requires-Dist: xlsxwriter; extra == 'dadf'
34
39
  Provides-Extra: docs
35
40
  Requires-Dist: numpy; extra == 'docs'
36
41
  Requires-Dist: pandas; extra == 'docs'
@@ -53,6 +58,10 @@ Requires-Dist: tqdm; extra == 'full'
53
58
  Requires-Dist: unidecode; extra == 'full'
54
59
  Requires-Dist: xlsxwriter; extra == 'full'
55
60
  Requires-Dist: xmltodict; extra == 'full'
61
+ Provides-Extra: pdf
62
+ Requires-Dist: spire-pdf; extra == 'pdf'
63
+ Provides-Extra: xml
64
+ Requires-Dist: xmltodict; extra == 'xml'
56
65
  Description-Content-Type: text/markdown
57
66
 
58
67
  <div align="center">
@@ -72,6 +72,9 @@ full = [
72
72
  docs = ["numpy", "pandas", "rich", "spire-pdf"]
73
73
  beautiful = ["rich"]
74
74
  extra = ["numpy", "pandas", "openpyxl", "xlsxwriter", "spire-pdf", "xmltodict"]
75
+ pdf = ["spire-pdf"]
76
+ dadf = ["numpy", "pandas", "openpyxl", "xlsxwriter"]
77
+ xml = ["xmltodict"]
75
78
 
76
79
 
77
80
  [project.scripts]
@@ -231,7 +234,7 @@ test = [
231
234
  "qa",
232
235
  "hatch run all:test", # Test
233
236
  ]
234
- build = [
237
+ build_no_docs = [
235
238
  # Update license year - Convert to hex due to unable to run multiple lines
236
239
  # Source code:
237
240
  # import re;from datetime import datetime;from pathlib import Path
@@ -260,6 +263,9 @@ build = [
260
263
  """,
261
264
  "hatch clean", # Clean dist/ folder
262
265
  "hatch -v build", # Build package
266
+ ]
267
+ build = [
268
+ "build_no_docs",
263
269
  "hatch run docs:build", # Build docs
264
270
  ]
265
271
  patch = [
@@ -22,7 +22,7 @@ Using in cmd:
22
22
  __title__ = "absfuyu"
23
23
  __author__ = "AbsoluteWinter"
24
24
  __license__ = "MIT License"
25
- __version__ = "5.7.0"
25
+ __version__ = "5.8.0"
26
26
  __all__ = [
27
27
  "core",
28
28
  "config",
@@ -3,8 +3,8 @@ ABSFUYU
3
3
  -------
4
4
  COMMAND LINE INTERFACE
5
5
 
6
- Version: 5.7.0
7
- Date updated: 12/09/2025 (dd/mm/yyyy)
6
+ Version: 5.8.0
7
+ Date updated: 16/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Library
@@ -3,8 +3,8 @@ ABSFUYU
3
3
  -------
4
4
  COMMAND LINE INTERFACE
5
5
 
6
- Version: 5.7.0
7
- Date updated: 12/09/2025 (dd/mm/yyyy)
6
+ Version: 5.8.0
7
+ Date updated: 16/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  __all__ = ["cli"]
@@ -3,8 +3,8 @@ ABSFUYU CLI
3
3
  -----------
4
4
  Color
5
5
 
6
- Version: 5.7.0
7
- Date updated: 12/09/2025 (dd/mm/yyyy)
6
+ Version: 5.8.0
7
+ Date updated: 16/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module Package
@@ -3,8 +3,8 @@ ABSFUYU CLI
3
3
  -----------
4
4
  Config
5
5
 
6
- Version: 5.7.0
7
- Date updated: 12/09/2025 (dd/mm/yyyy)
6
+ Version: 5.8.0
7
+ Date updated: 16/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module Package
@@ -3,8 +3,8 @@ ABSFUYU CLI
3
3
  -----------
4
4
  Do
5
5
 
6
- Version: 5.7.0
7
- Date updated: 12/09/2025 (dd/mm/yyyy)
6
+ Version: 5.8.0
7
+ Date updated: 16/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module Package
@@ -3,8 +3,8 @@ ABSFUYU CLI
3
3
  -----------
4
4
  Game
5
5
 
6
- Version: 5.7.0
7
- Date updated: 12/09/2025 (dd/mm/yyyy)
6
+ Version: 5.8.0
7
+ Date updated: 16/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module Package
@@ -3,8 +3,8 @@ ABSFUYU CLI
3
3
  -----------
4
4
  Tool
5
5
 
6
- Version: 5.7.0
7
- Date updated: 12/09/2025 (dd/mm/yyyy)
6
+ Version: 5.8.0
7
+ Date updated: 16/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module Package
@@ -3,8 +3,8 @@ Absfuyu: Configuration
3
3
  ----------------------
4
4
  Package configuration module
5
5
 
6
- Version: 5.7.0
7
- Date updated: 12/09/2025 (dd/mm/yyyy)
6
+ Version: 5.8.0
7
+ Date updated: 16/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module level
@@ -3,8 +3,8 @@ Absfuyu: Core
3
3
  -------------
4
4
  Bases for other features
5
5
 
6
- Version: 5.7.0
7
- Date updated: 12/09/2025 (dd/mm/yyyy)
6
+ Version: 5.8.0
7
+ Date updated: 16/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module Package
@@ -3,8 +3,8 @@ Absfuyu: Core
3
3
  -------------
4
4
  Bases for other features
5
5
 
6
- Version: 5.7.0
7
- Date updated: 12/09/2025 (dd/mm/yyyy)
6
+ Version: 5.8.0
7
+ Date updated: 16/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module Package
@@ -3,8 +3,8 @@ Absfuyu: Core
3
3
  -------------
4
4
  Bases for other features (with library)
5
5
 
6
- Version: 5.7.0
7
- Date updated: 12/09/2025 (dd/mm/yyyy)
6
+ Version: 5.8.0
7
+ Date updated: 16/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module Package
@@ -3,8 +3,8 @@ Absfuyu: Core
3
3
  -------------
4
4
  Decorator
5
5
 
6
- Version: 5.7.0
7
- Date updated: 12/09/2025 (dd/mm/yyyy)
6
+ Version: 5.8.0
7
+ Date updated: 16/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module Package
@@ -3,8 +3,8 @@ Absfuyu: Core
3
3
  -------------
4
4
  Sphinx docstring decorator
5
5
 
6
- Version: 5.7.0
7
- Date updated: 12/09/2025 (dd/mm/yyyy)
6
+ Version: 5.8.0
7
+ Date updated: 16/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module Package
@@ -3,8 +3,8 @@ Absfuyu: Core
3
3
  -------------
4
4
  Dummy cli
5
5
 
6
- Version: 5.7.0
7
- Date updated: 12/09/2025 (dd/mm/yyyy)
6
+ Version: 5.8.0
7
+ Date updated: 16/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module Package
@@ -3,8 +3,8 @@ Absfuyu: Core
3
3
  -------------
4
4
  Dummy functions when other libraries are unvailable
5
5
 
6
- Version: 5.7.0
7
- Date updated: 12/09/2025 (dd/mm/yyyy)
6
+ Version: 5.8.0
7
+ Date updated: 16/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module Package
@@ -3,8 +3,8 @@ Absfuyu: Data Extension
3
3
  -----------------------
4
4
  Extension for data type such as ``list``, ``str``, ``dict``, ...
5
5
 
6
- Version: 5.7.0
7
- Date updated: 12/09/2025 (dd/mm/yyyy)
6
+ Version: 5.8.0
7
+ Date updated: 16/09/2025 (dd/mm/yyyy)
8
8
 
9
9
  Features:
10
10
  ---------
@@ -3,8 +3,8 @@ Absfuyu: Data Extension
3
3
  -----------------------
4
4
  dict extension
5
5
 
6
- Version: 5.7.0
7
- Date updated: 12/09/2025 (dd/mm/yyyy)
6
+ Version: 5.8.0
7
+ Date updated: 16/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module Package
@@ -3,8 +3,8 @@ Absfuyu: Data Extension
3
3
  -----------------------
4
4
  Support classes
5
5
 
6
- Version: 5.7.0
7
- Date updated: 12/09/2025 (dd/mm/yyyy)
6
+ Version: 5.8.0
7
+ Date updated: 16/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module Package
@@ -3,8 +3,8 @@ Absfuyu: Data Extension
3
3
  -----------------------
4
4
  int extension
5
5
 
6
- Version: 5.7.0
7
- Date updated: 12/09/2025 (dd/mm/yyyy)
6
+ Version: 5.8.0
7
+ Date updated: 16/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module Package
@@ -3,8 +3,8 @@ Absfuyu: Data Extension
3
3
  -----------------------
4
4
  list extension
5
5
 
6
- Version: 5.7.0
7
- Date updated: 12/09/2025 (dd/mm/yyyy)
6
+ Version: 5.8.0
7
+ Date updated: 16/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module Package
@@ -3,8 +3,8 @@ Absfuyu: Data Extension
3
3
  -----------------------
4
4
  str extension
5
5
 
6
- Version: 5.7.0
7
- Date updated: 12/09/2025 (dd/mm/yyyy)
6
+ Version: 5.8.0
7
+ Date updated: 16/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module Package
@@ -3,8 +3,8 @@ Absfuyu: Extra
3
3
  --------------
4
4
  Features that require additional libraries
5
5
 
6
- Version: 5.7.0
7
- Date updated: 12/09/2025 (dd/mm/yyyy)
6
+ Version: 5.8.0
7
+ Date updated: 16/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
 
@@ -3,8 +3,8 @@ Absfuyu: Beautiful
3
3
  ------------------
4
4
  A decorator that makes output more beautiful
5
5
 
6
- Version: 5.7.0
7
- Date updated: 12/09/2025 (dd/mm/yyyy)
6
+ Version: 5.8.0
7
+ Date updated: 16/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module level
@@ -3,7 +3,7 @@ Absfuyu: Data Analysis
3
3
  ----------------------
4
4
  Data Analyst
5
5
 
6
- Version: 5.7.0
6
+ Version: 5.8.0
7
7
  Date updated: 16/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
@@ -3,8 +3,8 @@ Absfuyu: Data Analysis
3
3
  ----------------------
4
4
  Data Analyst DataFrame
5
5
 
6
- Version: 5.7.0
7
- Date updated: 16/09/2025 (dd/mm/yyyy)
6
+ Version: 5.8.0
7
+ Date updated: 17/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module level
@@ -41,7 +41,7 @@ except ImportError:
41
41
  from absfuyu.core.decorator import dummy_decorator as override
42
42
 
43
43
  from absfuyu.core.baseclass import GetClassMembersMixin
44
- from absfuyu.core.docstring import deprecated, versionadded
44
+ from absfuyu.core.docstring import deprecated, versionadded, versionchanged
45
45
  from absfuyu.extra.da.dadf_base import CityData
46
46
  from absfuyu.extra.da.dadf_base import DataAnalystDataFrameBase as DFBase
47
47
  from absfuyu.extra.da.dadf_base import SplittedDF
@@ -366,7 +366,7 @@ class DataAnalystDataFrameInfoMixin(DFBase):
366
366
  return info
367
367
 
368
368
  @override
369
- def describe(self, percentiles=None, include=None, exclude=None) -> Self:
369
+ def describe(self, percentiles=None, include=None, exclude=None) -> Self: # type: ignore
370
370
  """pd.DataFrame.describe() override"""
371
371
  return self.__class__(super().describe(percentiles, include, exclude)) # type: ignore [no-any-return]
372
372
 
@@ -1051,7 +1051,17 @@ class DataAnalystDataFrameExportMixin(DFBase):
1051
1051
  - da_export
1052
1052
  """
1053
1053
 
1054
- def da_export(self, path: str, sheet_name: str = "Sheet1", cols_contain_number: list[str] | None = None) -> None:
1054
+ @versionchanged("5.8.0", "New parameter")
1055
+ def da_export(
1056
+ self,
1057
+ path: str,
1058
+ sheet_name: str = "Sheet1",
1059
+ *,
1060
+ auto_width: bool = True,
1061
+ cols_contain_centered_text: list[str] | None = None,
1062
+ cols_contain_number: list[str] | None = None,
1063
+ cols_contain_percentage: list[str] | None = None,
1064
+ ) -> None:
1055
1065
  """
1056
1066
  Export DataFrame with `xlsxwriter` engine
1057
1067
 
@@ -1060,12 +1070,22 @@ class DataAnalystDataFrameExportMixin(DFBase):
1060
1070
  path : Path | str
1061
1071
  Path to export
1062
1072
 
1063
- sheet_name : str
1064
- Sheet name
1073
+ sheet_name : str, optional
1074
+ Sheet name, by default "Sheet1"
1075
+
1076
+ auto_width : bool, optional
1077
+ Auto resize column width, by default ``True``
1078
+
1079
+ cols_contain_centered_text : list[str] | None, optional
1080
+ Columns that contain centered text (Align center), by default None
1065
1081
 
1066
- cols_contain_number : list[str]
1067
- Columns that contain number value (to format as number)
1082
+ cols_contain_number : list[str] | None, optional
1083
+ Columns that contain number value (to format as number - int), by default None
1084
+
1085
+ cols_contain_percentage : list[str] | None, optional
1086
+ Columns that contain percentage value (to format as percentage), by default None
1068
1087
  """
1088
+
1069
1089
  # Using xlsxwriter engine
1070
1090
  with pd.ExcelWriter(path, engine="xlsxwriter") as writer:
1071
1091
  self.to_excel(writer, sheet_name=sheet_name, index=False, float_format="%.2f", na_rep="")
@@ -1083,12 +1103,9 @@ class DataAnalystDataFrameExportMixin(DFBase):
1083
1103
  }
1084
1104
  )
1085
1105
  number_fmt = workbook.add_format(
1086
- {
1087
- "num_format": "#,##0",
1088
- "align": "center",
1089
- "valign": "vcenter",
1090
- }
1106
+ {"num_format": "#,##0", "align": "center", "valign": "vcenter"}
1091
1107
  ) # 1,000,000
1108
+ percent_fmt = workbook.add_format({"num_format": "0.00%", "align": "center", "valign": "vcenter"}) # 1.00%
1092
1109
  text_fmt = workbook.add_format({"valign": "vcenter"})
1093
1110
  text_center_fmt = workbook.add_format({"align": "center", "valign": "vcenter"})
1094
1111
 
@@ -1099,20 +1116,29 @@ class DataAnalystDataFrameExportMixin(DFBase):
1099
1116
  for col_num, value in enumerate(self.columns.values):
1100
1117
  worksheet.write(0, col_num, value, header_fmt)
1101
1118
 
1119
+ rules = [
1120
+ (cols_contain_number, number_fmt),
1121
+ (cols_contain_percentage, percent_fmt),
1122
+ (cols_contain_centered_text, text_center_fmt),
1123
+ ]
1124
+
1102
1125
  # Auto width + col format
1103
1126
  for i, col in enumerate(self.columns):
1104
1127
  # Max str len of each column
1105
- max_len = max(self[col].astype(str).map(len).max(), len(col)) + 2
1128
+ max_len = None if auto_width is None else max(self[col].astype(str).map(len).max(), len(col)) + 2
1106
1129
  worksheet.set_column(i, i, max_len) # Set width
1107
1130
 
1108
1131
  # Format style
1109
- if cols_contain_number is None:
1110
- continue
1132
+ fmt = text_fmt # default
1133
+ for cols, f in rules:
1134
+ if cols is not None and col in cols:
1135
+ fmt = f
1136
+ break
1137
+ worksheet.set_column(i, i, max_len, fmt)
1111
1138
 
1112
- if col in cols_contain_number:
1113
- worksheet.set_column(i, i, max_len, number_fmt)
1114
- else:
1115
- worksheet.set_column(i, i, max_len, text_fmt)
1139
+ # if cols_contain_number is not None:
1140
+ # for x in cols_contain_number:
1141
+ # self[x] = pd.to_numeric(self[x], errors="coerce")
1116
1142
 
1117
1143
 
1118
1144
  # City
@@ -1289,3 +1315,14 @@ class DADF_WIP(DADF):
1289
1315
  """
1290
1316
 
1291
1317
  pass
1318
+
1319
+ if __name__ == "__main__":
1320
+ from pathlib import Path
1321
+
1322
+ t = DADF.sample_df().show_distribution("number_range", show_percentage=False)
1323
+ t.da_export(
1324
+ Path(__file__).parent.joinpath("a.xlsx").resolve().__str__(),
1325
+ cols_contain_number=["number_range"],
1326
+ cols_contain_percentage=["percentage"],
1327
+ )
1328
+ print(t)
@@ -3,8 +3,8 @@ Absfuyu: Data Analysis
3
3
  ----------------------
4
4
  Data Analyst DataFrame - Base/Core
5
5
 
6
- Version: 5.7.0
7
- Date updated: 12/09/2025 (dd/mm/yyyy)
6
+ Version: 5.8.0
7
+ Date updated: 16/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module level
@@ -3,8 +3,8 @@ Absfuyu: Data Analysis
3
3
  ----------------------
4
4
  DF Function
5
5
 
6
- Version: 5.7.0
7
- Date updated: 12/09/2025 (dd/mm/yyyy)
6
+ Version: 5.8.0
7
+ Date updated: 16/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module level
@@ -3,8 +3,8 @@ Absfuyu: Data Analysis
3
3
  ----------------------
4
4
  Matplotlib Helper
5
5
 
6
- Version: 5.7.0
7
- Date updated: 12/09/2025 (dd/mm/yyyy)
6
+ Version: 5.8.0
7
+ Date updated: 16/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module level
@@ -4,8 +4,8 @@ Absfuyu: Data Analysis [W.I.P]
4
4
  Extension for ``pd.DataFrame``
5
5
  (deprecated)
6
6
 
7
- Version: 5.7.0
8
- Date updated: 12/09/2025 (dd/mm/yyyy)
7
+ Version: 5.8.0
8
+ Date updated: 16/09/2025 (dd/mm/yyyy)
9
9
  """
10
10
 
11
11
  # Library
@@ -3,7 +3,7 @@ Absfuyu: PDF
3
3
  ------------
4
4
  PDF Tool [W.I.P]
5
5
 
6
- Version: 5.7.0
6
+ Version: 5.8.0
7
7
  Date updated: 16/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
@@ -3,7 +3,7 @@ Absfuyu: XML
3
3
  ------------
4
4
  XML Tool [W.I.P]
5
5
 
6
- Version: 5.7.0
6
+ Version: 5.8.0
7
7
  Date updated: 16/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
@@ -3,8 +3,8 @@ Absfuyu: Fun
3
3
  ------------
4
4
  Some fun or weird stuff
5
5
 
6
- Version: 5.7.0
7
- Date updated: 12/09/2025 (dd/mm/yyyy)
6
+ Version: 5.8.0
7
+ Date updated: 16/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module level
@@ -3,8 +3,8 @@ Absfuyu: Fun
3
3
  ------------
4
4
  Rubik
5
5
 
6
- Version: 5.7.0
7
- Date updated: 12/09/2025 (dd/mm/yyyy)
6
+ Version: 5.8.0
7
+ Date updated: 16/09/2025 (dd/mm/yyyy)
8
8
 
9
9
 
10
10
  Version added: 5.4.0
@@ -4,8 +4,8 @@ Absfuyu: Tarot
4
4
  Tarot stuff
5
5
 
6
6
 
7
- Version: 5.7.0
8
- Date updated: 12/09/2025 (dd/mm/yyyy)
7
+ Version: 5.8.0
8
+ Date updated: 16/09/2025 (dd/mm/yyyy)
9
9
 
10
10
  Usage:
11
11
  ------
@@ -3,8 +3,8 @@ Absfuyu: Game
3
3
  -------------
4
4
  Contain some game that can be played on terminal
5
5
 
6
- Version: 5.7.0
7
- Date updated: 12/09/2025 (dd/mm/yyyy)
6
+ Version: 5.8.0
7
+ Date updated: 16/09/2025 (dd/mm/yyyy)
8
8
  """
9
9
 
10
10
  # Module level
@@ -1,8 +1,8 @@
1
1
  """
2
2
  Game: Game Stat
3
3
 
4
- Version: 5.7.0
5
- Date updated: 12/09/2025 (dd/mm/yyyy)
4
+ Version: 5.8.0
5
+ Date updated: 16/09/2025 (dd/mm/yyyy)
6
6
  """
7
7
 
8
8
  # Module level
@@ -3,8 +3,8 @@ Game: Sudoku
3
3
  ------------
4
4
  Sudoku 9x9 Solver
5
5
 
6
- Version: 5.7.0
7
- Date updated: 12/09/2025 (dd/mm/yyyy)
6
+ Version: 5.8.0
7
+ Date updated: 16/09/2025 (dd/mm/yyyy)
8
8
 
9
9
  Credit:
10
10
  -------
@@ -2,8 +2,8 @@
2
2
  Game: Tic Tac Toe
3
3
  -----------------
4
4
 
5
- Version: 5.7.0
6
- Date updated: 12/09/2025 (dd/mm/yyyy)
5
+ Version: 5.8.0
6
+ Date updated: 16/09/2025 (dd/mm/yyyy)
7
7
  """
8
8
 
9
9
  # Module level