About
Relying on TensorFlow and Keras as backends, [pidgan](https://github.com/mbarbetti/pidgan) is a Python package designed to simplify the implementation and training of GAN-based models intended for High Energy Physics (HEP) applications.
Available modules
- [**`algorithms`**](https://github.com/mbarbetti/pidgan/tree/main/src/pidgan/algorithms)
- [`BceGAN`](https://github.com/mbarbetti/pidgan/blob/main/src/pidgan/algorithms/BceGAN.py) - 🧩
- [`BceGAN_ALP`](https://github.com/mbarbetti/pidgan/blob/main/src/pidgan/algorithms/BceGAN_ALP.py)
- [`BceGAN_GP`](https://github.com/mbarbetti/pidgan/blob/main/src/pidgan/algorithms/BceGAN_GP.py) - 🧩
- [`CramerGAN`](https://github.com/mbarbetti/pidgan/blob/main/src/pidgan/algorithms/CramerGAN.py) - 🧩
- [`GAN`](https://github.com/mbarbetti/pidgan/blob/main/src/pidgan/algorithms/GAN.py) - 🧩
- [`LSGAN`](https://github.com/mbarbetti/pidgan/blob/main/src/pidgan/algorithms/LSGAN.py) - 🧩
- [`WGAN`](https://github.com/mbarbetti/pidgan/blob/main/src/pidgan/algorithms/WGAN.py) - 🧩
- [`WGAN_ALP`](https://github.com/mbarbetti/pidgan/blob/main/src/pidgan/algorithms/WGAN_ALP.py)
- [`WGAN_GP`](https://github.com/mbarbetti/pidgan/blob/main/src/pidgan/algorithms/WGAN_GP.py) - 🧩
- [**`callbacks`**](https://github.com/mbarbetti/pidgan/tree/main/src/pidgan/callbacks)
- [**`schedulers `**](https://github.com/mbarbetti/pidgan/tree/main/src/pidgan/callbacks/schedulers)
- [`LearnRateBaseScheduler`](https://github.com/mbarbetti/pidgan/blob/main/src/pidgan/callbacks/schedulers/LearnRateBaseScheduler.py)
- [`LearnRateCosineDecay`](https://github.com/mbarbetti/pidgan/blob/main/src/pidgan/callbacks/schedulers/LearnRateCosineDecay.py)
- [`LearnRateExpDecay`](https://github.com/mbarbetti/pidgan/blob/main/src/pidgan/callbacks/schedulers/LearnRateExpDecay.py)
- [`LearnRateInvTimeDecay`](https://github.com/mbarbetti/pidgan/blob/main/src/pidgan/callbacks/schedulers/LearnRateInvTimeDecay.py)
- [`LearnRatePiecewiseConstDecay`](https://github.com/mbarbetti/pidgan/blob/main/src/pidgan/callbacks/schedulers/LearnRatePiecewiseConstDecay.py)
- [`LearnRatePolynomialDecay`](https://github.com/mbarbetti/pidgan/blob/main/src/pidgan/callbacks/schedulers/LearnRatePolynomialDecay.py)
- [**`metrics`**](https://github.com/mbarbetti/pidgan/tree/main/src/pidgan/metrics)
- [`Accuracy`](https://github.com/mbarbetti/pidgan/blob/main/src/pidgan/metrics/Accuracy.py)
- [`BaseMetric`](https://github.com/mbarbetti/pidgan/blob/main/src/pidgan/metrics/BaseMetric.py)
- [`BinaryCrossentropy`](https://github.com/mbarbetti/pidgan/blob/main/src/pidgan/metrics/BinaryCrossentropy.py)
- [`JSDivergence`](https://github.com/mbarbetti/pidgan/blob/main/src/pidgan/metrics/JSDivergence.py)
- [`KLDivergence`](https://github.com/mbarbetti/pidgan/blob/main/src/pidgan/metrics/KLDivergence.py)
- [`MeanAbsoluteError`](https://github.com/mbarbetti/pidgan/blob/main/src/pidgan/metrics/MeanAbsoluteError.py)
- [`MeanSquaredError `](https://github.com/mbarbetti/pidgan/blob/main/src/pidgan/metrics/MeanSquaredError.py)
- [`RootMeanSquaredError `](https://github.com/mbarbetti/pidgan/blob/main/src/pidgan/metrics/RootMeanSquaredError.py)
- [`WassertsteinDistance`](https://github.com/mbarbetti/pidgan/blob/main/src/pidgan/metrics/WassertsteinDistance.py)
- [**`optimization`**](https://github.com/mbarbetti/pidgan/tree/main/src/pidgan/optimization)
- [**`callbacks`**](https://github.com/mbarbetti/pidgan/tree/main/src/pidgan/optimization/callbacks)
- [`HopaasPruner`](https://github.com/mbarbetti/pidgan/blob/main/src/pidgan/optimization/callbacks/HopaasPruner.py)
- [**`scores`**](https://github.com/mbarbetti/pidgan/tree/main/src/pidgan/optimization/scores)
- [`BaseScore`](https://github.com/mbarbetti/pidgan/blob/main/src/pidgan/optimization/scores/BaseScore.py)
- [`EMDistance`](https://github.com/mbarbetti/pidgan/blob/main/src/pidgan/optimization/scores/EMDistance.py)
- [`KSDistance`](https://github.com/mbarbetti/pidgan/blob/main/src/pidgan/optimization/scores/KSDistance.py)
- [**`players`**](https://github.com/mbarbetti/pidgan/tree/main/src/pidgan/players)
- [**`classifiers`**](https://github.com/mbarbetti/pidgan/tree/main/src/pidgan/players/classifiers)
- [`AuxClassifier`](https://github.com/mbarbetti/pidgan/blob/main/src/pidgan/players/classifiers/AuxClassifier.py)
- [`AuxMultiClassifier`](https://github.com/mbarbetti/pidgan/blob/main/src/pidgan/players/classifiers/AuxMultiClassifier.py)
- [`Classifier`](https://github.com/mbarbetti/pidgan/blob/main/src/pidgan/players/classifiers/Classifier.py)
- [`MultiClassifier`](https://github.com/mbarbetti/pidgan/blob/main/src/pidgan/players/classifiers/MultiClassifier.py)
- [`ResClassifier`](https://github.com/mbarbetti/pidgan/blob/main/src/pidgan/players/classifiers/ResClassifier.py)
- [`ResMultiClassifier`](https://github.com/mbarbetti/pidgan/blob/main/src/pidgan/players/classifiers/ResMultiClassifier.py)
- [**`discriminators`**](https://github.com/mbarbetti/pidgan/tree/main/src/pidgan/players/discriminators)
- [`AuxDiscriminator`](https://github.com/mbarbetti/pidgan/blob/main/src/pidgan/players/discriminators/AuxDiscriminator.py)
- [`Discriminator`](https://github.com/mbarbetti/pidgan/blob/main/src/pidgan/players/discriminators/Discriminator.py)
- [`ResDiscriminator`](https://github.com/mbarbetti/pidgan/blob/main/src/pidgan/players/discriminators/ResDiscriminator.py)
- [**`generators`**](https://github.com/mbarbetti/pidgan/tree/main/src/pidgan/players/generators)
- [`Generator`](https://github.com/mbarbetti/pidgan/blob/main/src/pidgan/players/generators/Generator.py)
- [`ResGenerator`](https://github.com/mbarbetti/pidgan/blob/main/src/pidgan/players/generators/ResGenerator.py)
- [**`utils`**](https://github.com/mbarbetti/pidgan/tree/main/src/pidgan/utils)
- [**`checks`**](https://github.com/mbarbetti/pidgan/tree/main/src/pidgan/utils/checks)
- [`checkMetrics`](https://github.com/mbarbetti/pidgan/blob/main/src/pidgan/utils/checks/checkMetrics.py)
- [`checkOptimizer`](https://github.com/mbarbetti/pidgan/blob/main/src/pidgan/utils/checks/checkOptimizer.py)
- [**`preprocessing `**](https://github.com/mbarbetti/pidgan/tree/main/src/pidgan/utils/preprocessing)
- [`invertColumnTransformer`](https://github.com/mbarbetti/pidgan/blob/main/src/pidgan/utils/preprocessing/invertColumnTransformer.py) - 🐛
- [**`reports `**](https://github.com/mbarbetti/pidgan/tree/main/src/pidgan/utils/reports)
- [`HPSingleton`](https://github.com/mbarbetti/pidgan/blob/main/src/pidgan/utils/reports/HPSingleton.py)
- [`getSummaryHTML`](https://github.com/mbarbetti/pidgan/blob/main/src/pidgan/utils/reports/getSummaryHTML.py)
🐛 Bug fixes
- [`invertColumnTransformer`](https://github.com/mbarbetti/pidgan/blob/main/src/pidgan/utils/preprocessing/invertColumnTransformer.py)
> **Problem.** When the column indices passed to a transformer of the scikit-learn's [`ColumnTransformer`](https://scikit-learn.org/stable/modules/generated/sklearn.compose.ColumnTransformer.html) aren't adjacent, this custom function has an unexpected behavior mixing the output columns.
> **Solution.** The function has been rewritten from scratch trying to follow a logical procedure that should mitigate new issues with the inversion of the [`ColumnTransformer`](https://scikit-learn.org/stable/modules/generated/sklearn.compose.ColumnTransformer.html).
🧩 Minor changes
Since regularization terms applied to either generator or discriminator can be extremely data-dependent, if they are computed also during the test step, it can produce loss values significantly different from the ones resulting in the train step. Hence, the GAN `algorithms` were updated so that the various `_compute_*_loss` methods take an additional boolean argument, called `test`, to avoid to compute any regularization terms during the test steps.
‼️ Note
This is the first release for [Zenodo](https://zenodo.org).