feat(compatibility): Python3.6 compatibility
This commit is contained in:
		| @@ -1,7 +1,11 @@ | |||||||
| dist: bionic | dist: bionic | ||||||
| sudo: false | sudo: false | ||||||
| language: python | language: python | ||||||
| python: 3.9 | python: | ||||||
|  |   - 3.9 | ||||||
|  |   - 3.8 | ||||||
|  |   - 3.7 | ||||||
|  |   - 3.6 | ||||||
| cache: | cache: | ||||||
|   directories: |   directories: | ||||||
|   - "$HOME/.cache/pip" |   - "$HOME/.cache/pip" | ||||||
|   | |||||||
| @@ -1,7 +1,5 @@ | |||||||
| """`models` plugin for the `prototorch` package.""" | """`models` plugin for the `prototorch` package.""" | ||||||
|  |  | ||||||
| from importlib.metadata import PackageNotFoundError, version |  | ||||||
|  |  | ||||||
| from .callbacks import PrototypeConvergence, PruneLoserPrototypes | from .callbacks import PrototypeConvergence, PruneLoserPrototypes | ||||||
| from .cbc import CBC, ImageCBC | from .cbc import CBC, ImageCBC | ||||||
| from .glvq import ( | from .glvq import ( | ||||||
|   | |||||||
| @@ -1,7 +1,5 @@ | |||||||
| """Abstract classes to be inherited by prototorch models.""" | """Abstract classes to be inherited by prototorch models.""" | ||||||
|  |  | ||||||
| from typing import Final, final |  | ||||||
|  |  | ||||||
| import pytorch_lightning as pl | import pytorch_lightning as pl | ||||||
| import torch | import torch | ||||||
| import torchmetrics | import torchmetrics | ||||||
| @@ -43,7 +41,6 @@ class ProtoTorchBolt(pl.LightningModule): | |||||||
|         else: |         else: | ||||||
|             return optimizer |             return optimizer | ||||||
|  |  | ||||||
|     @final |  | ||||||
|     def reconfigure_optimizers(self): |     def reconfigure_optimizers(self): | ||||||
|         self.trainer.accelerator.setup_optimizers(self.trainer) |         self.trainer.accelerator.setup_optimizers(self.trainer) | ||||||
|  |  | ||||||
| @@ -175,7 +172,7 @@ class NonGradientMixin(ProtoTorchMixin): | |||||||
|     """Mixin for custom non-gradient optimization.""" |     """Mixin for custom non-gradient optimization.""" | ||||||
|     def __init__(self, *args, **kwargs): |     def __init__(self, *args, **kwargs): | ||||||
|         super().__init__(*args, **kwargs) |         super().__init__(*args, **kwargs) | ||||||
|         self.automatic_optimization: Final = False |         self.automatic_optimization = False | ||||||
|  |  | ||||||
|     def training_step(self, train_batch, batch_idx, optimizer_idx=None): |     def training_step(self, train_batch, batch_idx, optimizer_idx=None): | ||||||
|         raise NotImplementedError |         raise NotImplementedError | ||||||
| @@ -183,7 +180,6 @@ class NonGradientMixin(ProtoTorchMixin): | |||||||
|  |  | ||||||
| class ImagePrototypesMixin(ProtoTorchMixin): | class ImagePrototypesMixin(ProtoTorchMixin): | ||||||
|     """Mixin for models with image prototypes.""" |     """Mixin for models with image prototypes.""" | ||||||
|     @final |  | ||||||
|     def on_train_batch_end(self, outputs, batch, batch_idx, dataloader_idx): |     def on_train_batch_end(self, outputs, batch, batch_idx, dataloader_idx): | ||||||
|         """Constrain the components to the range [0, 1] by clamping after updates.""" |         """Constrain the components to the range [0, 1] by clamping after updates.""" | ||||||
|         self.proto_layer.components.data.clamp_(0.0, 1.0) |         self.proto_layer.components.data.clamp_(0.0, 1.0) | ||||||
|   | |||||||
| @@ -55,7 +55,7 @@ class PruneLoserPrototypes(pl.Callback): | |||||||
|                 distribution = dict(zip(labels.tolist(), counts.tolist())) |                 distribution = dict(zip(labels.tolist(), counts.tolist())) | ||||||
|                 if self.verbose: |                 if self.verbose: | ||||||
|                     print(f"Re-adding pruned prototypes...") |                     print(f"Re-adding pruned prototypes...") | ||||||
|                     print(f"{distribution=}") |                     print(f"distribution={distribution}") | ||||||
|                 pl_module.add_prototypes( |                 pl_module.add_prototypes( | ||||||
|                     distribution=distribution, |                     distribution=distribution, | ||||||
|                     components_initializer=self.prototypes_initializer) |                     components_initializer=self.prototypes_initializer) | ||||||
|   | |||||||
| @@ -112,7 +112,8 @@ class SiameseGLVQ(GLVQ): | |||||||
|         proto_opt = self.optimizer(self.proto_layer.parameters(), |         proto_opt = self.optimizer(self.proto_layer.parameters(), | ||||||
|                                    lr=self.hparams.proto_lr) |                                    lr=self.hparams.proto_lr) | ||||||
|         # Only add a backbone optimizer if backbone has trainable parameters |         # Only add a backbone optimizer if backbone has trainable parameters | ||||||
|         if (bb_params := list(self.backbone.parameters())): |         bb_params = list(self.backbone.parameters()) | ||||||
|  |         if (bb_params): | ||||||
|             bb_opt = self.optimizer(bb_params, lr=self.hparams.bb_lr) |             bb_opt = self.optimizer(bb_params, lr=self.hparams.bb_lr) | ||||||
|             optimizers = [proto_opt, bb_opt] |             optimizers = [proto_opt, bb_opt] | ||||||
|         else: |         else: | ||||||
|   | |||||||
| @@ -28,8 +28,8 @@ class LVQ1(NonGradientMixin, GLVQ): | |||||||
|             self.proto_layer.load_state_dict({"_components": updated_protos}, |             self.proto_layer.load_state_dict({"_components": updated_protos}, | ||||||
|                                              strict=False) |                                              strict=False) | ||||||
|  |  | ||||||
|         print(f"{dis=}") |         print(f"dis={dis}") | ||||||
|         print(f"{y=}") |         print(f"y={y}") | ||||||
|         # Logging |         # Logging | ||||||
|         self.log_acc(dis, y, tag="train_acc") |         self.log_acc(dis, y, tag="train_acc") | ||||||
|  |  | ||||||
|   | |||||||
| @@ -251,8 +251,6 @@ class VisImgComp(Vis2DAbstract): | |||||||
|                                    size=self.embedding_data, |                                    size=self.embedding_data, | ||||||
|                                    replace=False) |                                    replace=False) | ||||||
|             data = self.x_train[ind] |             data = self.x_train[ind] | ||||||
|             # print(f"{data.shape=}") |  | ||||||
|             # print(f"{self.y_train[ind].shape=}") |  | ||||||
|             tb.add_embedding(data.view(len(ind), -1), |             tb.add_embedding(data.view(len(ind), -1), | ||||||
|                              label_img=data, |                              label_img=data, | ||||||
|                              global_step=None, |                              global_step=None, | ||||||
|   | |||||||
							
								
								
									
										5
									
								
								setup.py
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								setup.py
									
									
									
									
									
								
							| @@ -63,7 +63,7 @@ setup( | |||||||
|     url=PROJECT_URL, |     url=PROJECT_URL, | ||||||
|     download_url=DOWNLOAD_URL, |     download_url=DOWNLOAD_URL, | ||||||
|     license="MIT", |     license="MIT", | ||||||
|     python_requires=">=3.9", |     python_requires=">=3.6", | ||||||
|     install_requires=INSTALL_REQUIRES, |     install_requires=INSTALL_REQUIRES, | ||||||
|     extras_require={ |     extras_require={ | ||||||
|         "dev": DEV, |         "dev": DEV, | ||||||
| @@ -80,6 +80,9 @@ setup( | |||||||
|         "License :: OSI Approved :: MIT License", |         "License :: OSI Approved :: MIT License", | ||||||
|         "Natural Language :: English", |         "Natural Language :: English", | ||||||
|         "Programming Language :: Python :: 3.9", |         "Programming Language :: Python :: 3.9", | ||||||
|  |         "Programming Language :: Python :: 3.8", | ||||||
|  |         "Programming Language :: Python :: 3.7", | ||||||
|  |         "Programming Language :: Python :: 3.6", | ||||||
|         "Operating System :: OS Independent", |         "Operating System :: OS Independent", | ||||||
|         "Topic :: Scientific/Engineering :: Artificial Intelligence", |         "Topic :: Scientific/Engineering :: Artificial Intelligence", | ||||||
|         "Topic :: Software Development :: Libraries", |         "Topic :: Software Development :: Libraries", | ||||||
|   | |||||||
| @@ -1,11 +1,27 @@ | |||||||
| #! /bin/bash | #! /bin/bash | ||||||
|  |  | ||||||
|  |  | ||||||
|  | # Read Flags | ||||||
|  | gpu=0 | ||||||
|  | while [ -n "$1" ]; do | ||||||
|  | 	case "$1" in | ||||||
|  | 	    --gpu) gpu=1;; | ||||||
|  | 	    -g) gpu=1;; | ||||||
|  |         *) path=$1;; | ||||||
|  | 	esac | ||||||
|  | 	shift | ||||||
|  | done | ||||||
|  |  | ||||||
|  | python --version | ||||||
|  | echo "Using GPU: " $gpu | ||||||
|  |  | ||||||
|  | # Loop | ||||||
| failed=0 | failed=0 | ||||||
|  |  | ||||||
| for example in $(find $1 -maxdepth 1 -name "*.py") | for example in $(find $path -maxdepth 1 -name "*.py") | ||||||
| do | do | ||||||
|     echo  -n "$x" $example '... ' |     echo  -n "$x" $example '... ' | ||||||
|     export DISPLAY= && python $example --fast_dev_run 1 --gpus 0 &> run_log.txt |     export DISPLAY= && python $example --fast_dev_run 1 --gpus $gpu &> run_log.txt | ||||||
|     if [[ $? -ne 0 ]]; then |     if [[ $? -ne 0 ]]; then | ||||||
|         echo "FAILED!!" |         echo "FAILED!!" | ||||||
|         cat run_log.txt |         cat run_log.txt | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user