dragon-ml-toolbox 20.6.0__tar.gz → 20.7.1__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.
Files changed (149) hide show
  1. {dragon_ml_toolbox-20.6.0/dragon_ml_toolbox.egg-info → dragon_ml_toolbox-20.7.1}/PKG-INFO +1 -1
  2. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1/dragon_ml_toolbox.egg-info}/PKG-INFO +1 -1
  3. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/dragon_ml_toolbox.egg-info/SOURCES.txt +1 -0
  4. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/utilities/__init__.py +10 -0
  5. dragon_ml_toolbox-20.7.1/ml_tools/utilities/_translate.py +293 -0
  6. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/pyproject.toml +1 -1
  7. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/LICENSE +0 -0
  8. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/LICENSE-THIRD-PARTY.md +0 -0
  9. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/README.md +0 -0
  10. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/dragon_ml_toolbox.egg-info/dependency_links.txt +0 -0
  11. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/dragon_ml_toolbox.egg-info/requires.txt +0 -0
  12. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/dragon_ml_toolbox.egg-info/top_level.txt +0 -0
  13. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ETL_cleaning/__init__.py +0 -0
  14. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ETL_cleaning/_basic_clean.py +0 -0
  15. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ETL_cleaning/_clean_tools.py +0 -0
  16. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ETL_cleaning/_dragon_cleaner.py +0 -0
  17. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ETL_engineering/__init__.py +0 -0
  18. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ETL_engineering/_dragon_engineering.py +0 -0
  19. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ETL_engineering/_transforms.py +0 -0
  20. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/GUI_tools/_GUI_tools.py +0 -0
  21. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/GUI_tools/__init__.py +0 -0
  22. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/IO_tools/_IO_loggers.py +0 -0
  23. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/IO_tools/_IO_save_load.py +0 -0
  24. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/IO_tools/_IO_utils.py +0 -0
  25. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/IO_tools/__init__.py +0 -0
  26. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/MICE/_MICE_imputation.py +0 -0
  27. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/MICE/__init__.py +0 -0
  28. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/MICE/_dragon_mice.py +0 -0
  29. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_callbacks/__init__.py +0 -0
  30. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_callbacks/_base.py +0 -0
  31. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_callbacks/_checkpoint.py +0 -0
  32. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_callbacks/_early_stop.py +0 -0
  33. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_callbacks/_scheduler.py +0 -0
  34. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_chain/__init__.py +0 -0
  35. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_chain/_chaining_tools.py +0 -0
  36. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_chain/_dragon_chain.py +0 -0
  37. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_chain/_update_schema.py +0 -0
  38. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_configuration/__init__.py +0 -0
  39. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_configuration/_base_model_config.py +0 -0
  40. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_configuration/_finalize.py +0 -0
  41. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_configuration/_metrics.py +0 -0
  42. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_configuration/_models.py +0 -0
  43. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_configuration/_training.py +0 -0
  44. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_datasetmaster/__init__.py +0 -0
  45. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_datasetmaster/_base_datasetmaster.py +0 -0
  46. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_datasetmaster/_datasetmaster.py +0 -0
  47. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_datasetmaster/_sequence_datasetmaster.py +0 -0
  48. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_datasetmaster/_vision_datasetmaster.py +0 -0
  49. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_evaluation/__init__.py +0 -0
  50. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_evaluation/_classification.py +0 -0
  51. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_evaluation/_feature_importance.py +0 -0
  52. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_evaluation/_loss.py +0 -0
  53. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_evaluation/_regression.py +0 -0
  54. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_evaluation/_sequence.py +0 -0
  55. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_evaluation/_vision.py +0 -0
  56. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_evaluation_captum/_ML_evaluation_captum.py +0 -0
  57. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_evaluation_captum/__init__.py +0 -0
  58. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_finalize_handler/_ML_finalize_handler.py +0 -0
  59. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_finalize_handler/__init__.py +0 -0
  60. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_inference/__init__.py +0 -0
  61. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_inference/_base_inference.py +0 -0
  62. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_inference/_chain_inference.py +0 -0
  63. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_inference/_dragon_inference.py +0 -0
  64. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_inference/_multi_inference.py +0 -0
  65. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_inference_sequence/__init__.py +0 -0
  66. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_inference_sequence/_sequence_inference.py +0 -0
  67. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_inference_vision/__init__.py +0 -0
  68. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_inference_vision/_vision_inference.py +0 -0
  69. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_models/__init__.py +0 -0
  70. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_models/_base_mlp_attention.py +0 -0
  71. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_models/_base_save_load.py +0 -0
  72. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_models/_dragon_autoint.py +0 -0
  73. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_models/_dragon_gate.py +0 -0
  74. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_models/_dragon_node.py +0 -0
  75. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_models/_dragon_tabnet.py +0 -0
  76. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_models/_dragon_tabular.py +0 -0
  77. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_models/_mlp_attention.py +0 -0
  78. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_models/_models_advanced_helpers.py +0 -0
  79. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_models_sequence/__init__.py +0 -0
  80. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_models_sequence/_sequence_models.py +0 -0
  81. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_models_vision/__init__.py +0 -0
  82. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_models_vision/_base_wrapper.py +0 -0
  83. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_models_vision/_image_classification.py +0 -0
  84. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_models_vision/_image_segmentation.py +0 -0
  85. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_models_vision/_object_detection.py +0 -0
  86. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_optimization/__init__.py +0 -0
  87. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_optimization/_multi_dragon.py +0 -0
  88. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_optimization/_single_dragon.py +0 -0
  89. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_optimization/_single_manual.py +0 -0
  90. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_scaler/_ML_scaler.py +0 -0
  91. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_scaler/__init__.py +0 -0
  92. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_trainer/__init__.py +0 -0
  93. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_trainer/_base_trainer.py +0 -0
  94. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_trainer/_dragon_detection_trainer.py +0 -0
  95. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_trainer/_dragon_sequence_trainer.py +0 -0
  96. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_trainer/_dragon_trainer.py +0 -0
  97. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_utilities/__init__.py +0 -0
  98. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_utilities/_artifact_finder.py +0 -0
  99. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_utilities/_inspection.py +0 -0
  100. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_utilities/_train_tools.py +0 -0
  101. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_vision_transformers/__init__.py +0 -0
  102. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_vision_transformers/_core_transforms.py +0 -0
  103. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ML_vision_transformers/_offline_augmentation.py +0 -0
  104. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/PSO_optimization/_PSO.py +0 -0
  105. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/PSO_optimization/__init__.py +0 -0
  106. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/SQL/__init__.py +0 -0
  107. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/SQL/_dragon_SQL.py +0 -0
  108. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/VIF/_VIF_factor.py +0 -0
  109. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/VIF/__init__.py +0 -0
  110. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/__init__.py +0 -0
  111. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/_core/__init__.py +0 -0
  112. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/_core/_logger.py +0 -0
  113. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/_core/_schema_load_ops.py +0 -0
  114. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/_core/_script_info.py +0 -0
  115. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/constants.py +0 -0
  116. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/data_exploration/__init__.py +0 -0
  117. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/data_exploration/_analysis.py +0 -0
  118. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/data_exploration/_cleaning.py +0 -0
  119. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/data_exploration/_features.py +0 -0
  120. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/data_exploration/_plotting.py +0 -0
  121. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/data_exploration/_schema_ops.py +0 -0
  122. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ensemble_evaluation/__init__.py +0 -0
  123. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ensemble_evaluation/_ensemble_evaluation.py +0 -0
  124. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ensemble_inference/__init__.py +0 -0
  125. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ensemble_inference/_ensemble_inference.py +0 -0
  126. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ensemble_learning/__init__.py +0 -0
  127. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/ensemble_learning/_ensemble_learning.py +0 -0
  128. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/excel_handler/__init__.py +0 -0
  129. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/excel_handler/_excel_handler.py +0 -0
  130. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/keys/__init__.py +0 -0
  131. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/keys/_keys.py +0 -0
  132. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/math_utilities/__init__.py +0 -0
  133. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/math_utilities/_math_utilities.py +0 -0
  134. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/optimization_tools/__init__.py +0 -0
  135. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/optimization_tools/_optimization_bounds.py +0 -0
  136. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/optimization_tools/_optimization_plots.py +0 -0
  137. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/path_manager/__init__.py +0 -0
  138. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/path_manager/_dragonmanager.py +0 -0
  139. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/path_manager/_path_tools.py +0 -0
  140. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/plot_fonts/__init__.py +0 -0
  141. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/plot_fonts/_plot_fonts.py +0 -0
  142. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/schema/__init__.py +0 -0
  143. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/schema/_feature_schema.py +0 -0
  144. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/schema/_gui_schema.py +0 -0
  145. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/serde/__init__.py +0 -0
  146. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/serde/_serde.py +0 -0
  147. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/utilities/_utility_save_load.py +0 -0
  148. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/ml_tools/utilities/_utility_tools.py +0 -0
  149. {dragon_ml_toolbox-20.6.0 → dragon_ml_toolbox-20.7.1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dragon-ml-toolbox
3
- Version: 20.6.0
3
+ Version: 20.7.1
4
4
  Summary: Complete pipelines and helper tools for data science and machine learning projects.
5
5
  Author-email: Karl Luigi Loza Vidaurre <luigiloza@gmail.com>
6
6
  License-Expression: MIT
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dragon-ml-toolbox
3
- Version: 20.6.0
3
+ Version: 20.7.1
4
4
  Summary: Complete pipelines and helper tools for data science and machine learning projects.
5
5
  Author-email: Karl Luigi Loza Vidaurre <luigiloza@gmail.com>
6
6
  License-Expression: MIT
@@ -142,5 +142,6 @@ ml_tools/schema/_gui_schema.py
142
142
  ml_tools/serde/__init__.py
143
143
  ml_tools/serde/_serde.py
144
144
  ml_tools/utilities/__init__.py
145
+ ml_tools/utilities/_translate.py
145
146
  ml_tools/utilities/_utility_save_load.py
146
147
  ml_tools/utilities/_utility_tools.py
@@ -15,6 +15,13 @@ from ._utility_tools import (
15
15
  train_dataset_yielder
16
16
  )
17
17
 
18
+ from ._translate import (
19
+ translate_dataframe_columns,
20
+ create_translation_template,
21
+ audit_column_translation
22
+ )
23
+
24
+
18
25
  from .._core import _imprimir_disponibles
19
26
 
20
27
 
@@ -27,6 +34,9 @@ __all__ = [
27
34
  "save_dataframe",
28
35
  "save_dataframe_with_schema",
29
36
  "merge_dataframes",
37
+ "translate_dataframe_columns",
38
+ "create_translation_template",
39
+ "audit_column_translation",
30
40
  "distribute_dataset_by_target",
31
41
  "train_dataset_orchestrator",
32
42
  "train_dataset_yielder"
@@ -0,0 +1,293 @@
1
+ import json
2
+ import pandas as pd
3
+ import polars as pl
4
+ from pathlib import Path
5
+ from typing import Union, Literal
6
+
7
+ from ..path_manager import make_fullpath
8
+ from .._core import get_logger
9
+
10
+ from ._utility_save_load import load_dataframe
11
+
12
+
13
+ _LOGGER = get_logger("Translation Tools")
14
+
15
+
16
+ __all__ = [
17
+ "translate_dataframe_columns",
18
+ "create_translation_template",
19
+ "audit_column_translation"
20
+ ]
21
+
22
+
23
+ def translate_dataframe_columns(
24
+ df: Union[pd.DataFrame, pl.DataFrame],
25
+ mapper: Union[dict[str, str], str, Path],
26
+ direction: Literal["A_to_B", "B_to_A"] = "A_to_B",
27
+ verbose: int = 3
28
+ ) -> Union[pd.DataFrame, pl.DataFrame]:
29
+ """
30
+ Translates the column names of a DataFrame (Pandas or Polars) using a provided mapping source.
31
+
32
+ The mapping can be a python dictionary, a JSON file, or a CSV file.
33
+
34
+ Translation Logic:
35
+ -----------------
36
+ The DataFrame currently has columns in 'Language A'.
37
+
38
+ - "A_to_B" (Standard):
39
+ The mapper is structured as {Language A : Language B}.
40
+ Keys match the current DataFrame columns.
41
+
42
+ - "B_to_A" (Inverted Source):
43
+ The mapper is structured as {Language B : Language A}.
44
+ Values match the current DataFrame columns.
45
+
46
+ Parameters
47
+ ----------
48
+ df : (pd.DataFrame | pl.DataFrame)
49
+ The input DataFrame to be translated.
50
+ mapper : (dict[str, str] | str | Path)
51
+ The source of the translation mapping:
52
+ - Dict: {'original_name': 'new_name'}
53
+ - JSON path: File containing a single JSON object (dict).
54
+ - CSV path: File with two columns.
55
+ direction : Literal["A_to_B", "B_to_A"]
56
+ Specifies the structure of the provided mapper relative to the DataFrame.
57
+ verbose : int
58
+ Whether to log warnings and information about the process.
59
+
60
+ Returns
61
+ -------
62
+ Dataframe:
63
+ The polars or pandas DataFrame with renamed columns.
64
+ """
65
+ # df type validation
66
+ if not isinstance(df, (pd.DataFrame, pl.DataFrame)):
67
+ _LOGGER.error(f"Input df must be a pandas or polars DataFrame. Got: {type(df)}")
68
+ raise TypeError()
69
+
70
+ # 1. Load and Standardize the Mapping
71
+ translation_map = _load_translation_mapping(mapper, direction)
72
+
73
+ # 2. Validation: Check intersection between DF columns and Map keys
74
+ df_cols = set(df.columns)
75
+ map_keys = set(translation_map.keys())
76
+
77
+ # Calculate overlap
78
+ common_cols = df_cols.intersection(map_keys)
79
+
80
+ if not common_cols:
81
+ if verbose >= 1:
82
+ _LOGGER.warning("No column names matched the provided translation mapping. Returning original DataFrame.")
83
+ return df
84
+
85
+ missing_in_map = df_cols - map_keys
86
+ if missing_in_map and verbose >= 1:
87
+ _LOGGER.warning(f"Columns not found in translation map: {list(missing_in_map)}")
88
+
89
+ if verbose >= 3:
90
+ _LOGGER.info(f"Translating {len(common_cols)} columns...")
91
+
92
+ # 3. Apply Translation
93
+ try:
94
+ if isinstance(df, pd.DataFrame):
95
+ resulting_df = df.rename(columns=translation_map)
96
+ elif isinstance(df, pl.DataFrame):
97
+ resulting_df = df.rename(translation_map, strict=False)
98
+ except Exception as e:
99
+ _LOGGER.error(f"Failed to rename columns: {e}")
100
+ raise e
101
+ else:
102
+ if verbose >= 2:
103
+ _LOGGER.info(f"Successfully translated {len(common_cols)} columns.")
104
+ return resulting_df
105
+
106
+
107
+ def create_translation_template(
108
+ df_or_path: Union[pd.DataFrame, pl.DataFrame, str, Path],
109
+ save_path: Union[str, Path],
110
+ verbose: bool = True
111
+ ) -> None:
112
+ """
113
+ Generates a JSON translation template from a DataFrame's column names.
114
+
115
+ Creates a 'translation_template.json' file where keys are the dataframe column names and values
116
+ are empty strings, ready for manual translation.
117
+
118
+ Parameters
119
+ ----------
120
+ df_or_path : [DataFrame | str | Path]
121
+ The DataFrame or path to a CSV file to extract column names from.
122
+ save_path : [str | Path]
123
+ The destination directory for the .json template.
124
+ """
125
+ # 1. Get Columns
126
+ if isinstance(df_or_path, (str, Path)):
127
+ df, _ = load_dataframe(df_or_path, kind="pandas", verbose=False)
128
+ columns = df.columns.tolist()
129
+ elif isinstance(df_or_path, pd.DataFrame):
130
+ columns = df_or_path.columns.tolist()
131
+ elif isinstance(df_or_path, pl.DataFrame):
132
+ columns = df_or_path.columns
133
+ else:
134
+ _LOGGER.error("Input must be a DataFrame or a path to a dataset.")
135
+ raise TypeError()
136
+
137
+ # 2. Create Dictionary {ColName : ""}
138
+ template_dict = {col: "" for col in columns}
139
+
140
+ # 3. Save to JSON
141
+ out_path = make_fullpath(save_path, enforce="directory")
142
+ full_out_path = out_path / "translation_template.json"
143
+
144
+ try:
145
+ with open(full_out_path, 'w', encoding='utf-8') as f:
146
+ json.dump(template_dict, f, indent=4, ensure_ascii=False)
147
+
148
+ if verbose:
149
+ _LOGGER.info(f"Translation template created at '{out_path.name}' with {len(columns)} entries.")
150
+ except Exception as e:
151
+ _LOGGER.error(f"Failed to save template: {e}")
152
+ raise e
153
+
154
+
155
+ def audit_column_translation(
156
+ df_or_path: Union[pd.DataFrame, pl.DataFrame, str, Path],
157
+ mapper: Union[dict[str, str], str, Path],
158
+ direction: Literal["A_to_B", "B_to_A"] = "A_to_B"
159
+ ) -> None:
160
+ """
161
+ Audits the coverage of a translation map against a DataFrame WITHOUT applying changes.
162
+
163
+ Logs a detailed report of:
164
+ - How many columns will be renamed.
165
+ - Which DataFrame columns are NOT in the map (will remain unchanged).
166
+ - Which Map keys are NOT in the DataFrame (unused mappings).
167
+
168
+ Parameters
169
+ ----------
170
+ df_or_path : [DataFrame | str | Path]
171
+ The target dataset to audit.
172
+ mapper : [Dict | str | Path]
173
+ The translation source.
174
+ direction : ["A_to_B" | "B_to_A"]
175
+ Direction logic (see translate_dataframe_columns).
176
+ """
177
+ # 1. Get DataFrame Columns
178
+ if isinstance(df_or_path, (str, Path)):
179
+ df, df_name = load_dataframe(df_or_path, kind="pandas", verbose=False)
180
+ cols = set(df.columns)
181
+ source_name = f"File: '{df_name}'"
182
+ elif isinstance(df_or_path, pd.DataFrame):
183
+ cols = set(df_or_path.columns)
184
+ source_name = "DataFrame (Pandas)"
185
+ elif isinstance(df_or_path, pl.DataFrame):
186
+ cols = set(df_or_path.columns)
187
+ source_name = "DataFrame (Polars)"
188
+ else:
189
+ _LOGGER.error("Input must be a DataFrame or a path to a dataset.")
190
+ raise TypeError()
191
+
192
+ # 2. Load Map
193
+ try:
194
+ trans_map = _load_translation_mapping(mapper, direction)
195
+ map_keys = set(trans_map.keys())
196
+ except Exception as e:
197
+ _LOGGER.error(f"Could not load mapper. {e}")
198
+ return
199
+
200
+ # 3. Analyze Sets
201
+ matched = cols.intersection(map_keys)
202
+ missing_in_map = cols - map_keys
203
+ unused_map_keys = map_keys - cols
204
+
205
+ coverage_pct = (len(matched) / len(cols) * 100) if len(cols) > 0 else 0.0
206
+
207
+ # 4. Report
208
+ report_string = f"\n--- 🔍 Translation Audit Report: {source_name} ---\n \
209
+ Direction: {direction}\n \
210
+ Total Columns: {len(cols)}\n \
211
+ Map Coverage: {coverage_pct:.1f}%\n"
212
+
213
+ if matched:
214
+ report_string += f"\n✅ Will Translate: {len(matched)} columns"
215
+
216
+ if missing_in_map:
217
+ report_string += f"\n⚠️ Not in Map: {len(missing_in_map)} columns: {list(missing_in_map)}"
218
+
219
+ if unused_map_keys:
220
+ report_string += f"\n➡️ Unused Map Keys: {len(unused_map_keys)}"
221
+
222
+ _LOGGER.info(report_string)
223
+
224
+
225
+ def _load_translation_mapping(
226
+ source: Union[dict[str, str], str, Path],
227
+ direction: Literal["A_to_B", "B_to_A"]
228
+ ) -> dict[str, str]:
229
+ """
230
+ Internal helper to load mapping from Dict, JSON, or CSV and handle direction inversion.
231
+ """
232
+ raw_map: dict[str, str] = {}
233
+
234
+ # --- Load Source ---
235
+ if isinstance(source, dict):
236
+ raw_map = source.copy()
237
+
238
+ elif isinstance(source, (str, Path)):
239
+ path = make_fullpath(source, enforce="file")
240
+
241
+ if path.suffix.lower() == ".json":
242
+ with open(path, 'r', encoding='utf-8') as f:
243
+ content = json.load(f)
244
+ if not isinstance(content, dict):
245
+ _LOGGER.error(f"JSON file '{path.name}' does not contain a dictionary.")
246
+ raise ValueError()
247
+ raw_map = content
248
+
249
+ elif path.suffix.lower() == ".csv":
250
+ # Load CSV using pandas for robustness
251
+ try:
252
+ df_map = pd.read_csv(path)
253
+
254
+ # STRICT VALIDATION: Must be exactly 2 columns
255
+ if df_map.shape[1] != 2:
256
+ _LOGGER.error(f"CSV file '{path.name}' must have exactly 2 columns for mapping. Found {df_map.shape[1]}.")
257
+ raise ValueError()
258
+
259
+ key_col = df_map.columns[0]
260
+ val_col = df_map.columns[1]
261
+
262
+ # Convert to dictionary (drop NaNs to be safe)
263
+ raw_map = df_map.dropna(subset=[key_col, val_col]).set_index(key_col)[val_col].to_dict()
264
+
265
+ except Exception as e:
266
+ _LOGGER.error(f"Error reading CSV mapping file: {e}")
267
+ raise e
268
+ else:
269
+ _LOGGER.error(f"Unsupported file extension for mapping source: {path.suffix}")
270
+ raise ValueError()
271
+ else:
272
+ _LOGGER.error("Mapper must be a Dictionary, or a Path/String to a JSON/CSV file.")
273
+ raise TypeError()
274
+
275
+ # --- Handle Direction ---
276
+ # Case: The mapper is A->B, and DF is A. (Keys match DF). Return as is.
277
+ if direction == "A_to_B":
278
+ return raw_map
279
+
280
+ # Case: The mapper is B->A, but DF is A. (Values match DF).
281
+ # swap the mapper to A->B so the Keys match the DF.
282
+ elif direction == "B_to_A":
283
+ # Inversion requires unique values to be lossless
284
+ reversed_map = {v: k for k, v in raw_map.items()}
285
+
286
+ if len(reversed_map) < len(raw_map):
287
+ _LOGGER.warning("Direction 'B_to_A' resulted in fewer keys than original. Duplicate target values existed in the source map; some collisions were overwritten.")
288
+
289
+ return reversed_map
290
+
291
+ else:
292
+ _LOGGER.error("Direction must be 'A_to_B' or 'B_to_A'.")
293
+ raise ValueError()
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "dragon-ml-toolbox"
3
- version = "20.6.0"
3
+ version = "20.7.1"
4
4
  description = "Complete pipelines and helper tools for data science and machine learning projects."
5
5
  authors = [
6
6
  { name = "Karl Luigi Loza Vidaurre", email = "luigiloza@gmail.com" }