autoencodix 0.2.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 autoencodix might be problematic. Click here for more details.

Files changed (91) hide show
  1. autoencodix/__init__.py +27 -0
  2. autoencodix/base/.ipynb_checkpoints/_base_pipeline-checkpoint.py +1274 -0
  3. autoencodix/base/.ipynb_checkpoints/_base_trainer-checkpoint.py +247 -0
  4. autoencodix/base/__init__.py +21 -0
  5. autoencodix/base/_base_autoencoder.py +138 -0
  6. autoencodix/base/_base_dataset.py +103 -0
  7. autoencodix/base/_base_evaluator.py +34 -0
  8. autoencodix/base/_base_loss.py +311 -0
  9. autoencodix/base/_base_pipeline.py +1355 -0
  10. autoencodix/base/_base_predictor.py +6 -0
  11. autoencodix/base/_base_preprocessor.py +1033 -0
  12. autoencodix/base/_base_trainer.py +259 -0
  13. autoencodix/base/_base_visualizer.py +578 -0
  14. autoencodix/base/sampleconfig.yaml +132 -0
  15. autoencodix/configs/__init__.py +21 -0
  16. autoencodix/configs/default_config.py +652 -0
  17. autoencodix/configs/disentanglix_config.py +15 -0
  18. autoencodix/configs/maskix_config.py +39 -0
  19. autoencodix/configs/ontix_config.py +35 -0
  20. autoencodix/configs/stackix_config.py +33 -0
  21. autoencodix/configs/vanillix_config.py +18 -0
  22. autoencodix/configs/varix_config.py +15 -0
  23. autoencodix/configs/xmodalix_config.py +43 -0
  24. autoencodix/disentanglix.py +72 -0
  25. autoencodix/evaluate/.ipynb_checkpoints/evaluate-checkpoint.py +532 -0
  26. autoencodix/evaluate/__init__.py +4 -0
  27. autoencodix/evaluate/_general_evaluator.py +730 -0
  28. autoencodix/evaluate/_xmodalix_evaluator.py +376 -0
  29. autoencodix/imagix.py +76 -0
  30. autoencodix/losses/disentanglix_loss.py +215 -0
  31. autoencodix/losses/maskix_loss.py +94 -0
  32. autoencodix/losses/vanillix_loss.py +28 -0
  33. autoencodix/losses/varix_loss.py +102 -0
  34. autoencodix/losses/xmodal_loss.py +304 -0
  35. autoencodix/maskix.py +108 -0
  36. autoencodix/modeling/.ipynb_checkpoints/__init__-checkpoint.py +16 -0
  37. autoencodix/modeling/.ipynb_checkpoints/_captum_forward-checkpoint.py +16 -0
  38. autoencodix/modeling/__init__.py +20 -0
  39. autoencodix/modeling/_captum_forward.py +20 -0
  40. autoencodix/modeling/_classifier.py +45 -0
  41. autoencodix/modeling/_imagevae_architecture.py +296 -0
  42. autoencodix/modeling/_imgfast_architecture.py +288 -0
  43. autoencodix/modeling/_layer_factory.py +71 -0
  44. autoencodix/modeling/_maskix_architecture.py +190 -0
  45. autoencodix/modeling/_ontix_architecture.py +305 -0
  46. autoencodix/modeling/_vanillix_architecture.py +136 -0
  47. autoencodix/modeling/_varix_architecture.py +192 -0
  48. autoencodix/notebooks/__init__.py +0 -0
  49. autoencodix/ontix.py +136 -0
  50. autoencodix/py.typed +0 -0
  51. autoencodix/stackix.py +122 -0
  52. autoencodix/trainers/__init__.py +6 -0
  53. autoencodix/trainers/_general_trainer.py +525 -0
  54. autoencodix/trainers/_maskix_trainer.py +116 -0
  55. autoencodix/trainers/_ontix_trainer.py +77 -0
  56. autoencodix/trainers/_stackix_orchestrator.py +522 -0
  57. autoencodix/trainers/_stackix_trainer.py +209 -0
  58. autoencodix/trainers/_xmodal_trainer.py +1006 -0
  59. autoencodix/utils/.ipynb_checkpoints/_explainer-checkpoint.py +118 -0
  60. autoencodix/utils/.ipynb_checkpoints/_model_output-checkpoint.py +30 -0
  61. autoencodix/utils/.ipynb_checkpoints/_utils-checkpoint.py +626 -0
  62. autoencodix/utils/.ipynb_checkpoints/adata_converter-checkpoint.py +99 -0
  63. autoencodix/utils/.ipynb_checkpoints/feature_importance-checkpoint.py +823 -0
  64. autoencodix/utils/__init__.py +22 -0
  65. autoencodix/utils/_annealer.py +193 -0
  66. autoencodix/utils/_bulkreader.py +232 -0
  67. autoencodix/utils/_explainer.py +246 -0
  68. autoencodix/utils/_imgreader.py +404 -0
  69. autoencodix/utils/_internals.py +23 -0
  70. autoencodix/utils/_llm_explainer.py +318 -0
  71. autoencodix/utils/_losses.py +20 -0
  72. autoencodix/utils/_model_output.py +30 -0
  73. autoencodix/utils/_result.py +393 -0
  74. autoencodix/utils/_screader.py +76 -0
  75. autoencodix/utils/_traindynamics.py +187 -0
  76. autoencodix/utils/_utils.py +690 -0
  77. autoencodix/utils/adata_converter.py +111 -0
  78. autoencodix/utils/example_data.py +398 -0
  79. autoencodix/utils/feature_importance.py +829 -0
  80. autoencodix/utils/prompts.py +21 -0
  81. autoencodix/vanillix.py +141 -0
  82. autoencodix/varix.py +80 -0
  83. autoencodix/visualize/__init__.py +5 -0
  84. autoencodix/visualize/_general_visualizer.py +913 -0
  85. autoencodix/visualize/_imagix_visualizer.py +111 -0
  86. autoencodix/visualize/_xmodal_visualizer.py +841 -0
  87. autoencodix/visualize/visualize.py +1214 -0
  88. autoencodix/xmodalix.py +318 -0
  89. autoencodix-0.2.0.dist-info/METADATA +143 -0
  90. autoencodix-0.2.0.dist-info/RECORD +91 -0
  91. autoencodix-0.2.0.dist-info/WHEEL +4 -0
@@ -0,0 +1,209 @@
1
+ from typing import Dict, Optional, Tuple, Type
2
+
3
+ import torch
4
+ from lightning_fabric import Fabric
5
+
6
+ from autoencodix.base._base_autoencoder import BaseAutoencoder
7
+ from autoencodix.base._base_dataset import BaseDataset
8
+ from autoencodix.base._base_loss import BaseLoss
9
+ from autoencodix.base._base_trainer import BaseTrainer
10
+ from autoencodix.data._stackix_dataset import StackixDataset
11
+ from autoencodix.trainers._general_trainer import GeneralTrainer
12
+ from autoencodix.trainers._stackix_orchestrator import StackixOrchestrator
13
+ from autoencodix.utils._result import Result
14
+ from autoencodix.configs.default_config import DefaultConfig
15
+
16
+
17
+ class StackixTrainer(GeneralTrainer):
18
+ """StackixTrainer is a wrapper for StackixOrchestrator that conforms to the BaseTrainer interface.
19
+
20
+ This trainer maintains compatibility with the BasePipeline interface while
21
+ leveraging the more modular and well-designed StackixOrchestrator
22
+ classes for the actual implementation.
23
+
24
+ Attributes:
25
+ _workdir: Directory for saving intermediate models and results
26
+ _result: Result object to store training outcomes
27
+ _config: Configuration parameters for training and model architecture
28
+ _model_type: Type of autoencoder model to use for each modality
29
+ _loss_type: Type of loss function to use for training
30
+ _trainset: Training dataset containing multiple modalities
31
+ _validset: Validation dataset containing multiple modalities
32
+ _orchestrator_type: Type to use for orchestrating modality training (default is StackixOrchestrator)
33
+ _trainer_type: Type to use for training each modality model (default is GeneralTrainer)
34
+ _modality_trainers: Dictionary of trained models for each modality
35
+ _modality_results: Dictionary of training results for each modality
36
+ _trainer: Trainer for the stacked model
37
+ _fabric: Lightning Fabric wrapper for device and precision management
38
+ _train_latent_ds: Training dataset with concatenated latent spaces
39
+ _valid_latent_ds: Validation dataset with concatenated latent spaces
40
+ concat_idx: Indices used for concatenating latent spaces
41
+ _model: The instantiated stacked model architecture
42
+ _optimizer: The optimizer used for training
43
+ _orchestrator: The orchestrator that manages modality model training and latent space preparation
44
+ _workdir: Directory for saving intermediate models and results
45
+ """
46
+
47
+ def __init__(
48
+ self,
49
+ trainset: Optional[StackixDataset],
50
+ validset: Optional[StackixDataset],
51
+ result: Result,
52
+ config: DefaultConfig,
53
+ model_type: Type[BaseAutoencoder],
54
+ loss_type: Type[BaseLoss],
55
+ orchestrator_type: Type[StackixOrchestrator] = StackixOrchestrator,
56
+ trainer_type: Type[BaseTrainer] = GeneralTrainer,
57
+ workdir: str = "./stackix_work",
58
+ ontologies: Optional[Tuple] = None,
59
+ **kwargs,
60
+ ) -> None:
61
+ """Initialize the StackixTrainer with datasets and configuration.
62
+
63
+ Args:
64
+ trainset: Training dataset containing multiple modalities
65
+ validset: Validation dataset containing multiple modalities
66
+ result: Result object to store training outcomes
67
+ config: Configuration parameters for training and model architecture
68
+ model_type: Type of autoencoder model to use for each modality
69
+ loss_type: Type of loss function to use for training
70
+ orchestrator_type: Type to use for orchestrating modality training (default is StackixOrchestrator)
71
+ trainer_type: Type to use for training each modality model (default is GeneralTrainer)
72
+ workdir: Directory to save intermediate models and results (default is "./stackix_work")
73
+ onotologies: Ontology information, if provided for Ontix compatibility
74
+ """
75
+ self._workdir = workdir
76
+ self._result = result
77
+ self._config = config
78
+ self._model_type = model_type
79
+ self._loss_type = loss_type
80
+ self._trainset = trainset
81
+ self._validset = validset
82
+ self._orchestrator_type = orchestrator_type
83
+ self._trainer_type = trainer_type
84
+
85
+ self._orchestrator = self._orchestrator_type(
86
+ trainset=trainset,
87
+ validset=validset,
88
+ config=config,
89
+ model_type=model_type,
90
+ loss_type=loss_type,
91
+ workdir=workdir,
92
+ )
93
+ self._modality_trainers: Optional[Dict[str, BaseAutoencoder]] = None
94
+ self._modality_results: Optional[Dict[str, Result]] = None
95
+
96
+ self._fabric = Fabric(
97
+ accelerator=self._config.device,
98
+ devices=self._config.n_gpus,
99
+ precision=self._config.float_precision,
100
+ strategy=self._config.gpu_strategy,
101
+ )
102
+
103
+ super().__init__(
104
+ trainset=trainset,
105
+ validset=validset,
106
+ result=result,
107
+ config=config,
108
+ model_type=model_type,
109
+ loss_type=loss_type,
110
+ )
111
+
112
+ def get_model(self) -> torch.nn.Module:
113
+ """Getter for the the trained model.
114
+
115
+ Returns:
116
+ The trained model
117
+ """
118
+ return self._model
119
+
120
+ def train(self) -> Result:
121
+ """Train the stacked model on the concatenated latent space.
122
+
123
+ Uses the standard BaseTrainer training process but with the stacked model.
124
+
125
+ Returns:
126
+ Training results including losses, latent spaces, and other metrics
127
+ """
128
+ print("Training each modality model...")
129
+ self._train_modalities()
130
+ print("finished training each modality model")
131
+ self._trainer = self._trainer_type(
132
+ trainset=self._train_latent_ds,
133
+ validset=self._valid_latent_ds,
134
+ result=self._result,
135
+ config=self._config,
136
+ model_type=self._model_type,
137
+ loss_type=self._loss_type,
138
+ )
139
+
140
+ self._model = self._trainer._model
141
+ self._result = self._trainer.train()
142
+
143
+ return self._result
144
+
145
+ def _train_modalities(self) -> None:
146
+ """Trains a Autoencoder for each modality in the dataset.
147
+ This method orchestrates the training of individual modality models
148
+
149
+ This method orchestrates the complete training process:
150
+ 1. Train individual modality models
151
+ 2. Extract and concatenate latent spaces
152
+ 3. Populates the self._modality_models and self._modality_results attributes
153
+
154
+ """
155
+ # Step 1: Train individual modality models
156
+ self._modality_trainers, self._modality_results = (
157
+ self._orchestrator.train_modalities()
158
+ )
159
+
160
+ self._result.sub_results = self._modality_results
161
+ # Step 2: Prepare concatenated latent space datasets
162
+ self._train_latent_ds = self._orchestrator.prepare_latent_datasets(
163
+ split="train"
164
+ )
165
+ self._valid_latent_ds = self._orchestrator.prepare_latent_datasets(
166
+ split="valid"
167
+ )
168
+ self.concat_idx = self._orchestrator.concat_idx
169
+
170
+ def _reconstruct(self, split: str) -> None:
171
+ """Orchestrates the reconstruction by delegating the task to the StackixOrchestrator.
172
+
173
+ Args:
174
+ split: The data split to reconstruct ('train', 'valid', 'test').
175
+ """
176
+ stacked_recon = self._result.reconstructions.get(epoch=-1, split=split)
177
+ if stacked_recon is None:
178
+ print(f"Warning: No reconstruction found for split '{split}'. Skipping.")
179
+ return
180
+
181
+ # The orchestrator handles the de-concatenation, re-assembly, and decoding.
182
+ modality_reconstructions = self._orchestrator.reconstruct_from_stack(
183
+ reconstructed_stack=torch.from_numpy(stacked_recon).to(self._fabric.device)
184
+ )
185
+
186
+ # The result is the final, full-sized data reconstructions.
187
+ self._result.sub_reconstructions = modality_reconstructions
188
+
189
+ def predict(
190
+ self, data: BaseDataset, model: Optional[torch.nn.Module] = None, **kwargs
191
+ ) -> Result:
192
+ """Make predictions on the given dataset.
193
+
194
+ Args:
195
+ data: The dataset to make predictions on.
196
+ model: The model to use for predictions. If None, uses the trained model.
197
+ **kwargs: Additional keyword arguments.
198
+ Returns:
199
+ Result: The prediction results including reconstructions and latent spaces.
200
+ """
201
+ self.n_test = len(data) if data is not None else 0
202
+ self._orchestrator.set_testset(testset=data)
203
+ test_ds = self._orchestrator.prepare_latent_datasets(split="test")
204
+ self.testset = test_ds
205
+ print(test_ds)
206
+ pred_result = super().predict(data=test_ds, model=model)
207
+ self._result.update(other=pred_result)
208
+ self._reconstruct(split="test")
209
+ return self._result