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