dragon-ml-toolbox 20.3.0__tar.gz → 20.4.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.
Files changed (148) hide show
  1. {dragon_ml_toolbox-20.3.0/dragon_ml_toolbox.egg-info → dragon_ml_toolbox-20.4.0}/PKG-INFO +1 -1
  2. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0/dragon_ml_toolbox.egg-info}/PKG-INFO +1 -1
  3. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/IO_tools/_IO_loggers.py +21 -17
  4. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_evaluation/_classification.py +10 -2
  5. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_optimization/_multi_dragon.py +24 -8
  6. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/keys/_keys.py +1 -1
  7. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/pyproject.toml +1 -1
  8. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/LICENSE +0 -0
  9. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/LICENSE-THIRD-PARTY.md +0 -0
  10. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/README.md +0 -0
  11. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/dragon_ml_toolbox.egg-info/SOURCES.txt +0 -0
  12. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/dragon_ml_toolbox.egg-info/dependency_links.txt +0 -0
  13. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/dragon_ml_toolbox.egg-info/requires.txt +0 -0
  14. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/dragon_ml_toolbox.egg-info/top_level.txt +0 -0
  15. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ETL_cleaning/__init__.py +0 -0
  16. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ETL_cleaning/_basic_clean.py +0 -0
  17. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ETL_cleaning/_clean_tools.py +0 -0
  18. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ETL_cleaning/_dragon_cleaner.py +0 -0
  19. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ETL_engineering/__init__.py +0 -0
  20. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ETL_engineering/_dragon_engineering.py +0 -0
  21. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ETL_engineering/_transforms.py +0 -0
  22. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/GUI_tools/_GUI_tools.py +0 -0
  23. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/GUI_tools/__init__.py +0 -0
  24. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/IO_tools/_IO_save_load.py +0 -0
  25. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/IO_tools/_IO_utils.py +0 -0
  26. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/IO_tools/__init__.py +0 -0
  27. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/MICE/_MICE_imputation.py +0 -0
  28. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/MICE/__init__.py +0 -0
  29. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/MICE/_dragon_mice.py +0 -0
  30. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_callbacks/__init__.py +0 -0
  31. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_callbacks/_base.py +0 -0
  32. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_callbacks/_checkpoint.py +0 -0
  33. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_callbacks/_early_stop.py +0 -0
  34. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_callbacks/_scheduler.py +0 -0
  35. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_chain/__init__.py +0 -0
  36. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_chain/_chaining_tools.py +0 -0
  37. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_chain/_dragon_chain.py +0 -0
  38. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_chain/_update_schema.py +0 -0
  39. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_configuration/__init__.py +0 -0
  40. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_configuration/_base_model_config.py +0 -0
  41. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_configuration/_finalize.py +0 -0
  42. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_configuration/_metrics.py +0 -0
  43. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_configuration/_models.py +0 -0
  44. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_configuration/_training.py +0 -0
  45. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_datasetmaster/__init__.py +0 -0
  46. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_datasetmaster/_base_datasetmaster.py +0 -0
  47. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_datasetmaster/_datasetmaster.py +0 -0
  48. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_datasetmaster/_sequence_datasetmaster.py +0 -0
  49. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_datasetmaster/_vision_datasetmaster.py +0 -0
  50. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_evaluation/__init__.py +0 -0
  51. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_evaluation/_feature_importance.py +0 -0
  52. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_evaluation/_loss.py +0 -0
  53. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_evaluation/_regression.py +0 -0
  54. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_evaluation/_sequence.py +0 -0
  55. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_evaluation/_vision.py +0 -0
  56. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_evaluation_captum/_ML_evaluation_captum.py +0 -0
  57. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_evaluation_captum/__init__.py +0 -0
  58. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_finalize_handler/_ML_finalize_handler.py +0 -0
  59. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_finalize_handler/__init__.py +0 -0
  60. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_inference/__init__.py +0 -0
  61. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_inference/_base_inference.py +0 -0
  62. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_inference/_chain_inference.py +0 -0
  63. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_inference/_dragon_inference.py +0 -0
  64. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_inference/_multi_inference.py +0 -0
  65. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_inference_sequence/__init__.py +0 -0
  66. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_inference_sequence/_sequence_inference.py +0 -0
  67. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_inference_vision/__init__.py +0 -0
  68. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_inference_vision/_vision_inference.py +0 -0
  69. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_models/__init__.py +0 -0
  70. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_models/_base_mlp_attention.py +0 -0
  71. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_models/_base_save_load.py +0 -0
  72. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_models/_dragon_autoint.py +0 -0
  73. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_models/_dragon_gate.py +0 -0
  74. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_models/_dragon_node.py +0 -0
  75. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_models/_dragon_tabnet.py +0 -0
  76. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_models/_dragon_tabular.py +0 -0
  77. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_models/_mlp_attention.py +0 -0
  78. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_models/_models_advanced_helpers.py +0 -0
  79. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_models_sequence/__init__.py +0 -0
  80. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_models_sequence/_sequence_models.py +0 -0
  81. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_models_vision/__init__.py +0 -0
  82. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_models_vision/_base_wrapper.py +0 -0
  83. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_models_vision/_image_classification.py +0 -0
  84. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_models_vision/_image_segmentation.py +0 -0
  85. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_models_vision/_object_detection.py +0 -0
  86. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_optimization/__init__.py +0 -0
  87. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_optimization/_single_dragon.py +0 -0
  88. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_optimization/_single_manual.py +0 -0
  89. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_scaler/_ML_scaler.py +0 -0
  90. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_scaler/__init__.py +0 -0
  91. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_trainer/__init__.py +0 -0
  92. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_trainer/_base_trainer.py +0 -0
  93. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_trainer/_dragon_detection_trainer.py +0 -0
  94. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_trainer/_dragon_sequence_trainer.py +0 -0
  95. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_trainer/_dragon_trainer.py +0 -0
  96. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_utilities/__init__.py +0 -0
  97. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_utilities/_artifact_finder.py +0 -0
  98. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_utilities/_inspection.py +0 -0
  99. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_utilities/_train_tools.py +0 -0
  100. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_vision_transformers/__init__.py +0 -0
  101. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_vision_transformers/_core_transforms.py +0 -0
  102. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ML_vision_transformers/_offline_augmentation.py +0 -0
  103. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/PSO_optimization/_PSO.py +0 -0
  104. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/PSO_optimization/__init__.py +0 -0
  105. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/SQL/__init__.py +0 -0
  106. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/SQL/_dragon_SQL.py +0 -0
  107. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/VIF/_VIF_factor.py +0 -0
  108. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/VIF/__init__.py +0 -0
  109. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/__init__.py +0 -0
  110. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/_core/__init__.py +0 -0
  111. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/_core/_logger.py +0 -0
  112. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/_core/_schema_load_ops.py +0 -0
  113. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/_core/_script_info.py +0 -0
  114. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/constants.py +0 -0
  115. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/data_exploration/__init__.py +0 -0
  116. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/data_exploration/_analysis.py +0 -0
  117. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/data_exploration/_cleaning.py +0 -0
  118. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/data_exploration/_features.py +0 -0
  119. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/data_exploration/_plotting.py +0 -0
  120. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/data_exploration/_schema_ops.py +0 -0
  121. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ensemble_evaluation/__init__.py +0 -0
  122. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ensemble_evaluation/_ensemble_evaluation.py +0 -0
  123. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ensemble_inference/__init__.py +0 -0
  124. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ensemble_inference/_ensemble_inference.py +0 -0
  125. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ensemble_learning/__init__.py +0 -0
  126. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/ensemble_learning/_ensemble_learning.py +0 -0
  127. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/excel_handler/__init__.py +0 -0
  128. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/excel_handler/_excel_handler.py +0 -0
  129. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/keys/__init__.py +0 -0
  130. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/math_utilities/__init__.py +0 -0
  131. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/math_utilities/_math_utilities.py +0 -0
  132. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/optimization_tools/__init__.py +0 -0
  133. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/optimization_tools/_optimization_bounds.py +0 -0
  134. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/optimization_tools/_optimization_plots.py +0 -0
  135. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/path_manager/__init__.py +0 -0
  136. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/path_manager/_dragonmanager.py +0 -0
  137. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/path_manager/_path_tools.py +0 -0
  138. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/plot_fonts/__init__.py +0 -0
  139. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/plot_fonts/_plot_fonts.py +0 -0
  140. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/schema/__init__.py +0 -0
  141. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/schema/_feature_schema.py +0 -0
  142. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/schema/_gui_schema.py +0 -0
  143. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/serde/__init__.py +0 -0
  144. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/serde/_serde.py +0 -0
  145. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/utilities/__init__.py +0 -0
  146. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/utilities/_utility_save_load.py +0 -0
  147. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/ml_tools/utilities/_utility_tools.py +0 -0
  148. {dragon_ml_toolbox-20.3.0 → dragon_ml_toolbox-20.4.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dragon-ml-toolbox
3
- Version: 20.3.0
3
+ Version: 20.4.0
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.3.0
3
+ Version: 20.4.0
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
@@ -170,7 +170,7 @@ def _log_dict_to_json(data: dict[Any, Any], path: Path) -> None:
170
170
 
171
171
 
172
172
  def train_logger(train_config: Union[dict, Any],
173
- model_parameters: Union[dict, Any],
173
+ model_parameters: Union[dict, Any, None],
174
174
  train_history: Union[dict, None],
175
175
  save_directory: Union[str, Path],
176
176
  verbose: int = 3) -> None:
@@ -179,7 +179,7 @@ def train_logger(train_config: Union[dict, Any],
179
179
 
180
180
  Args:
181
181
  train_config (dict | Any): Training configuration parameters. If object, must have a `.to_log()` method returning a dict.
182
- model_parameters (dict | Any): Model parameters. If object, must have a `.to_log()` method returning a dict.
182
+ model_parameters (dict | Any | None): Model parameters. If object, must have a `.to_log()` method returning a dict.
183
183
  train_history (dict | None): Training history log.
184
184
  save_directory (str | Path): Directory to save the log file.
185
185
  """
@@ -201,23 +201,27 @@ def train_logger(train_config: Union[dict, Any],
201
201
 
202
202
  train_config_dict = train_config
203
203
 
204
- # model_parameters should be a dict or a custom object with the ".to_log()" method
205
- if not isinstance(model_parameters, dict):
206
- if hasattr(model_parameters, "to_log") and callable(getattr(model_parameters, "to_log")):
207
- model_parameters_dict: dict = model_parameters.to_log()
208
- if not isinstance(model_parameters_dict, dict):
209
- _LOGGER.error("'model_parameters.to_log()' did not return a dictionary.")
204
+ # model_parameters should be a dict or a custom object with the ".to_log()" method or None
205
+ model_parameters_dict = {}
206
+
207
+ if model_parameters is not None:
208
+ if not isinstance(model_parameters, dict):
209
+ if hasattr(model_parameters, "to_log") and callable(getattr(model_parameters, "to_log")):
210
+ params_result: dict = model_parameters.to_log()
211
+ if not isinstance(params_result, dict):
212
+ _LOGGER.error("'model_parameters.to_log()' did not return a dictionary.")
213
+ raise ValueError()
214
+ model_parameters_dict = params_result
215
+ else:
216
+ _LOGGER.error("'model_parameters' must be a dict, None, or an object with a 'to_log()' method.")
210
217
  raise ValueError()
211
218
  else:
212
- _LOGGER.error("'model_parameters' must be a dict or an object with a 'to_log()' method.")
213
- raise ValueError()
214
- else:
215
- # check for empty dict
216
- if not model_parameters:
217
- _LOGGER.error("'model_parameters' dictionary is empty.")
218
- raise ValueError()
219
-
220
- model_parameters_dict = model_parameters
219
+ # check for empty dict
220
+ if not model_parameters:
221
+ _LOGGER.error("'model_parameters' dictionary is empty.")
222
+ raise ValueError()
223
+
224
+ model_parameters_dict = model_parameters
221
225
 
222
226
  # make base dictionary
223
227
  data: dict = train_config_dict | model_parameters_dict
@@ -329,7 +329,11 @@ def classification_metrics(save_dir: Union[str, Path],
329
329
  fig_roc, ax_roc = plt.subplots(figsize=CLASSIFICATION_PLOT_SIZE, dpi=DPI_value)
330
330
  ax_roc.plot(fpr, tpr, label=f'AUC = {auc:.2f}', color=format_config.ROC_PR_line)
331
331
  ax_roc.plot([0, 1], [0, 1], 'k--')
332
- ax_roc.set_title(f'Receiver Operating Characteristic{plot_title}', pad=_EvaluationConfig.LABEL_PADDING, fontsize=format_config.font_size + 2)
332
+ # use "ROC" if extra title, else use "Receiver Operating Characteristic" title
333
+ if plot_title.strip():
334
+ ax_roc.set_title(f'ROC{plot_title}', pad=_EvaluationConfig.LABEL_PADDING, fontsize=format_config.font_size + 2)
335
+ else:
336
+ ax_roc.set_title(f'Receiver Operating Characteristic', pad=_EvaluationConfig.LABEL_PADDING, fontsize=format_config.font_size + 2)
333
337
  ax_roc.set_xlabel('False Positive Rate', labelpad=_EvaluationConfig.LABEL_PADDING, fontsize=format_config.font_size)
334
338
  ax_roc.set_ylabel('True Positive Rate', labelpad=_EvaluationConfig.LABEL_PADDING, fontsize=format_config.font_size)
335
339
 
@@ -351,7 +355,11 @@ def classification_metrics(save_dir: Union[str, Path],
351
355
  ap_score = average_precision_score(y_true_binary, y_score)
352
356
  fig_pr, ax_pr = plt.subplots(figsize=CLASSIFICATION_PLOT_SIZE, dpi=DPI_value)
353
357
  ax_pr.plot(recall, precision, label=f'Avg Precision = {ap_score:.2f}', color=format_config.ROC_PR_line)
354
- ax_pr.set_title(f'Precision-Recall Curve{plot_title}', pad=_EvaluationConfig.LABEL_PADDING, fontsize=format_config.font_size + 2)
358
+ # Use "PR Curve" if extra title, else use "Precision-Recall Curve" title
359
+ if plot_title.strip():
360
+ ax_pr.set_title(f'PR Curve{plot_title}', pad=_EvaluationConfig.LABEL_PADDING, fontsize=format_config.font_size + 2)
361
+ else:
362
+ ax_pr.set_title(f'Precision-Recall Curve', pad=_EvaluationConfig.LABEL_PADDING, fontsize=format_config.font_size + 2)
355
363
  ax_pr.set_xlabel('Recall', labelpad=_EvaluationConfig.LABEL_PADDING, fontsize=format_config.font_size)
356
364
  ax_pr.set_ylabel('Precision', labelpad=_EvaluationConfig.LABEL_PADDING, fontsize=format_config.font_size)
357
365
 
@@ -313,14 +313,15 @@ class DragonParetoOptimizer:
313
313
  return pareto_df
314
314
 
315
315
  def save_solutions(self,
316
+ csv_if_exists: Literal['fail', 'replace', 'append'] = 'replace',
316
317
  save_to_sql: bool = False,
317
318
  sql_table_name: Optional[str] = None,
318
319
  sql_if_exists: Literal['fail', 'replace', 'append'] = 'replace') -> None:
319
320
  """
320
- Saves the current Pareto front to a CSV file, with optional integer rounding
321
- for specific continuous columns. Optionally saves to a SQL database.
321
+ Saves the current Pareto front to a CSV file. Optionally saves to a SQL database.
322
322
 
323
323
  Args:
324
+ csv_if_exists (str): Behavior if CSV file exists ('fail', 'replace', 'append').
324
325
  save_to_sql (bool): If True, also writes the results to a SQLite database in the save_dir.
325
326
  sql_table_name (str, optional): Specific table name for SQL. If None, uses the solutions filename.
326
327
  sql_if_exists (str): Behavior if SQL table exists ('fail', 'replace', 'append').
@@ -377,9 +378,24 @@ class DragonParetoOptimizer:
377
378
  # sanitize filename and add extension if missing
378
379
  sanitized_filename = sanitize_filename(filename)
379
380
  csv_filename = sanitized_filename if sanitized_filename.lower().endswith(".csv") else f"{sanitized_filename}.csv"
381
+ full_csv_path = save_path / csv_filename
380
382
 
381
- save_dataframe_filename(df=df_to_save, save_dir=save_path, filename=csv_filename, verbose=1)
382
- _LOGGER.info(f"💾 Pareto solutions saved to CSV: '{save_path.name}/{csv_filename}'. Shape: {df_to_save.shape}")
383
+ # Logic to handle Append/Fail/Replace for CSV
384
+ if csv_if_exists == 'append' and full_csv_path.exists():
385
+ try:
386
+ # Append mode: write without header, index=False to match standard data exports
387
+ df_to_save.to_csv(full_csv_path, mode='a', header=False, index=False)
388
+ _LOGGER.info(f"💾 Pareto solutions APPENDED to CSV: '{save_path.name}/{csv_filename}'. Added {len(df_to_save)} rows.")
389
+ except Exception as e:
390
+ _LOGGER.error(f"Failed to append CSV: {e}")
391
+ raise e
392
+ elif csv_if_exists == 'fail' and full_csv_path.exists():
393
+ _LOGGER.error(f"File '{full_csv_path}' already exists and csv_if_exists='fail'.")
394
+ raise FileExistsError()
395
+ else:
396
+ # Default 'replace' or new file creation using the existing utility
397
+ save_dataframe_filename(df=df_to_save, save_dir=save_path, filename=csv_filename, verbose=1)
398
+ _LOGGER.info(f"💾 Pareto solutions saved to CSV: '{save_path.name}/{csv_filename}'. Shape: {df_to_save.shape}")
383
399
 
384
400
  # Save optimization bounds as JSON for reference (debug mode)
385
401
  if self._debug:
@@ -404,13 +420,13 @@ class DragonParetoOptimizer:
404
420
  save_json(
405
421
  data=bounds_data,
406
422
  directory=save_path,
407
- filename="all_optimization_bounds.json",
423
+ filename="all_debug_optimization_bounds.json",
408
424
  verbose=False
409
425
  )
410
- _LOGGER.info(f"💾 Optimization bounds saved to: '{save_path.name}/all_optimization_bounds.json'")
426
+ _LOGGER.info(f"💾 Optimization bounds saved to: '{save_path.name}/all_debug_optimization_bounds.json'")
411
427
 
412
428
  except Exception as e:
413
- _LOGGER.warning(f"Failed to save optimization bounds to JSON: {e}")
429
+ _LOGGER.warning(f"Failed to save debug optimization bounds to JSON: {e}")
414
430
 
415
431
  # --- 2. Save SQL (Optional) ---
416
432
  if save_to_sql:
@@ -636,7 +652,7 @@ class DragonParetoOptimizer:
636
652
  z_target: Union[int, str],
637
653
  hue_target: Optional[Union[int, str]] = None):
638
654
  """
639
- Public API to generate 3D visualizations for specific targets.
655
+ Generate 3D visualizations for specific targets.
640
656
 
641
657
  Args:
642
658
  x_target (int|str): Index or name of the target for the X axis.
@@ -297,7 +297,7 @@ class _EvaluationConfig:
297
297
  # large sizes for SVG layout to accommodate large fonts
298
298
  REGRESSION_PLOT_SIZE = (12, 8)
299
299
  SEQUENCE_PLOT_SIZE = (12, 8)
300
- CLASSIFICATION_PLOT_SIZE = (10, 10)
300
+ CLASSIFICATION_PLOT_SIZE = (9, 9)
301
301
  # Loss plot
302
302
  LOSS_PLOT_SIZE = (18, 9)
303
303
  LOSS_PLOT_LABEL_SIZE = 24
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "dragon-ml-toolbox"
3
- version = "20.3.0"
3
+ version = "20.4.0"
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" }