diff --git a/.codacy.yml b/.codacy.yml deleted file mode 100644 index 2e7468d..0000000 --- a/.codacy.yml +++ /dev/null @@ -1,15 +0,0 @@ -# To validate the contents of your configuration file -# run the following command in the folder where the configuration file is located: -# codacy-analysis-cli validate-configuration --directory `pwd` -# To analyse, run: -# codacy-analysis-cli analyse --tool remark-lint --directory `pwd` ---- -engines: - pylintpython3: - exclude_paths: - - config/engines.yml - remark-lint: - exclude_paths: - - config/engines.yml -exclude_paths: - - 'tests/**' diff --git a/.codecov.yml b/.codecov.yml deleted file mode 100644 index cbf6b65..0000000 --- a/.codecov.yml +++ /dev/null @@ -1,2 +0,0 @@ -comment: - require_changes: yes diff --git a/.github/workflows/examples.yml b/.github/workflows/examples.yml new file mode 100644 index 0000000..8357dd5 --- /dev/null +++ b/.github/workflows/examples.yml @@ -0,0 +1,25 @@ +# Thi workflow will install Python dependencies, run tests and lint with a single version of Python +# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions + +name: examples + +on: + push: + paths: + - 'examples/**.py' +jobs: + cpu: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Set up Python 3.9 + uses: actions/setup-python@v2 + with: + python-version: 3.9 + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install .[all] + - name: Run examples + run: | + ./tests/test_examples.sh examples/ diff --git a/.github/workflows/pythonapp.yml b/.github/workflows/pythonapp.yml new file mode 100644 index 0000000..d94683b --- /dev/null +++ b/.github/workflows/pythonapp.yml @@ -0,0 +1,73 @@ +# This workflow will install Python dependencies, run tests and lint with a single version of Python +# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions + +name: tests + +on: + push: + pull_request: + branches: [ master ] + +jobs: + style: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Set up Python 3.9 + uses: actions/setup-python@v2 + with: + python-version: 3.9 + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install .[all] + - uses: pre-commit/action@v2.0.3 + compatibility: + needs: style + strategy: + fail-fast: false + matrix: + python-version: ["3.7", "3.8", "3.9"] + os: [ubuntu-latest, windows-latest] + exclude: + - os: windows-latest + python-version: "3.7" + - os: windows-latest + python-version: "3.8" + + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v2 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install .[all] + - name: Test with pytest + run: | + pytest + publish_pypi: + if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags') + needs: compatibility + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Set up Python 3.9 + uses: actions/setup-python@v2 + with: + python-version: "3.9" + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install .[all] + pip install wheel + - name: Build package + run: python setup.py sdist bdist_wheel + - name: Publish a Python distribution to PyPI + uses: pypa/gh-action-pypi-publish@release/v1 + with: + user: __token__ + password: ${{ secrets.PYPI_API_TOKEN }} diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 001227c..94784d7 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -3,7 +3,7 @@ repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.0.1 + rev: v4.1.0 hooks: - id: trailing-whitespace - id: end-of-file-fixer @@ -18,19 +18,19 @@ repos: - id: autoflake - repo: http://github.com/PyCQA/isort - rev: 5.8.0 + rev: 5.10.1 hooks: - id: isort - repo: https://github.com/pre-commit/mirrors-mypy - rev: v0.902 + rev: v0.931 hooks: - id: mypy files: prototorch additional_dependencies: [types-pkg_resources] - repo: https://github.com/pre-commit/mirrors-yapf - rev: v0.31.0 + rev: v0.32.0 hooks: - id: yapf @@ -42,7 +42,7 @@ repos: - id: python-check-blanket-noqa - repo: https://github.com/asottile/pyupgrade - rev: v2.19.4 + rev: v2.31.0 hooks: - id: pyupgrade diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index de0b7d6..0000000 --- a/.travis.yml +++ /dev/null @@ -1,44 +0,0 @@ -dist: bionic -sudo: false -language: python -python: - - 3.9 - - 3.8 - - 3.7 - - 3.6 -cache: - directories: - - "$HOME/.cache/pip" - - "./tests/artifacts" - - "$HOME/datasets" -install: -- pip install git+git://github.com/si-cim/prototorch@dev --progress-bar off -- pip install .[all] --progress-bar off -script: -- coverage run -m pytest -- ./tests/test_examples.sh examples/ -after_success: -- bash <(curl -s https://codecov.io/bash) - -# Publish on PyPI -jobs: - include: - - stage: build - python: 3.9 - script: echo "Starting Pypi build" - deploy: - provider: pypi - username: __token__ - distributions: "sdist bdist_wheel" - password: - secure: PDoASdYdVlt1aIROYilAsCW6XpBs/TDel0CSptDzX0CI7i4+ksEW6Jk0JyL58bQt7V4F8PeGty4A8SODzAUIk2d8sty5RI4VJjvXZFCXlUsW+JGUN3EvWNqJLnwN8TDxgu2ENao37GUh0dC6pL8b6bVDGeOLaY1E/YR1jimmTJuxxjKjBIU8ByqTNBnC3rzybMTPU3nRoOM/WMQUyReHrPoUJj685sLqrLruhAqhiYsPbotP8xY6i8+KBbhp5vgiARV2+LkbeGcYZwozCzrEqPKY7YIfVPh895cw0v4NRyFwK1P2jyyIt22Z9Ni0Uy1J5/Qp9Sv6mBPeGjm3pnpDCQyS+2bNIDaj08KUYTIo1mC/Jcu4jQgppZEF+oey9q1tgGo+/JhsTeERKV9BoPF5HDiRArU1s5aWJjFnCsHfu+W1XqX8bwN3aTYsEIaApT3/irc6XyFJIfMN82+z+lUcZ4Y1yAHT3nH1Vif+pZYZB0UOSGrHwuI/UayjKzbCzHMuHWylWB/9ehd4o4YVp6iubVHc7Sj0KQkwBgwgl6TvwNcUuFsplFabCxmX0mVcavXsWiOBc+ivPmU6574zGj0JcEk5ghVgnKH+QS96aVrKOzegwbl4O13jY8dJp+/zgXl0gJOvRKr4BhuBJKcBaMQHdSKUChVsJJtqDyt59GvWcbg= - on: - tags: true - skip_existing: true - -# The password is encrypted with: -# `cd prototorch && travis encrypt your-pypi-api-token --add deploy.password` -# See https://docs.travis-ci.com/user/deployment/pypi and -# https://github.com/travis-ci/travis.rb#installation -# for more details -# Note: The encrypt command does not work well in ZSH. diff --git a/README.md b/README.md index 7cb728f..ec72c57 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,5 @@ # ProtoTorch Models -[![Build Status](https://api.travis-ci.com/si-cim/prototorch_models.svg?branch=main)](https://travis-ci.com/github/si-cim/prototorch_models) [![GitHub tag (latest by date)](https://img.shields.io/github/v/tag/si-cim/prototorch_models?color=yellow&label=version)](https://github.com/si-cim/prototorch_models/releases) [![PyPI](https://img.shields.io/pypi/v/prototorch_models)](https://pypi.org/project/prototorch_models/) [![GitHub license](https://img.shields.io/github/license/si-cim/prototorch_models)](https://github.com/si-cim/prototorch_models/blob/master/LICENSE) diff --git a/examples/ksom_colors.py b/examples/ksom_colors.py index eee4a04..f86d3ac 100644 --- a/examples/ksom_colors.py +++ b/examples/ksom_colors.py @@ -10,6 +10,7 @@ from prototorch.utils.colors import hex_to_rgb class Vis2DColorSOM(pl.Callback): + def __init__(self, data, title="ColorSOMe", pause_time=0.1): super().__init__() self.title = title diff --git a/examples/lvqmln_iris.py b/examples/lvqmln_iris.py index 79df874..6a6023c 100644 --- a/examples/lvqmln_iris.py +++ b/examples/lvqmln_iris.py @@ -8,6 +8,7 @@ import torch class Backbone(torch.nn.Module): + def __init__(self, input_size=4, hidden_size=10, latent_size=2): super().__init__() self.input_size = input_size diff --git a/examples/siamese_glvq_iris.py b/examples/siamese_glvq_iris.py index 9ca9d07..e7a297b 100644 --- a/examples/siamese_glvq_iris.py +++ b/examples/siamese_glvq_iris.py @@ -8,6 +8,7 @@ import torch class Backbone(torch.nn.Module): + def __init__(self, input_size=4, hidden_size=10, latent_size=2): super().__init__() self.input_size = input_size diff --git a/examples/siamese_gtlvq_iris.py b/examples/siamese_gtlvq_iris.py index cf25eb2..455c0fb 100644 --- a/examples/siamese_gtlvq_iris.py +++ b/examples/siamese_gtlvq_iris.py @@ -8,6 +8,7 @@ import torch class Backbone(torch.nn.Module): + def __init__(self, input_size=4, hidden_size=10, latent_size=2): super().__init__() self.input_size = input_size diff --git a/prototorch/models/__init__.py b/prototorch/models/__init__.py index 78244de..dfba23d 100644 --- a/prototorch/models/__init__.py +++ b/prototorch/models/__init__.py @@ -19,9 +19,23 @@ from .glvq import ( SiameseGTLVQ, ) from .knn import KNN -from .lvq import LVQ1, LVQ21, MedianLVQ -from .probabilistic import CELVQ, PLVQ, RSLVQ, SLVQ -from .unsupervised import GrowingNeuralGas, HeskesSOM, KohonenSOM, NeuralGas +from .lvq import ( + LVQ1, + LVQ21, + MedianLVQ, +) +from .probabilistic import ( + CELVQ, + PLVQ, + RSLVQ, + SLVQ, +) +from .unsupervised import ( + GrowingNeuralGas, + HeskesSOM, + KohonenSOM, + NeuralGas, +) from .vis import * __version__ = "0.3.0" diff --git a/prototorch/models/abstract.py b/prototorch/models/abstract.py index a49a87c..4c2355e 100644 --- a/prototorch/models/abstract.py +++ b/prototorch/models/abstract.py @@ -14,6 +14,7 @@ from ..nn.wrappers import LambdaLayer class ProtoTorchBolt(pl.LightningModule): """All ProtoTorch models are ProtoTorch Bolts.""" + def __init__(self, hparams, **kwargs): super().__init__() @@ -52,6 +53,7 @@ class ProtoTorchBolt(pl.LightningModule): class PrototypeModel(ProtoTorchBolt): + def __init__(self, hparams, **kwargs): super().__init__(hparams, **kwargs) @@ -81,6 +83,7 @@ class PrototypeModel(ProtoTorchBolt): class UnsupervisedPrototypeModel(PrototypeModel): + def __init__(self, hparams, **kwargs): super().__init__(hparams, **kwargs) @@ -103,6 +106,7 @@ class UnsupervisedPrototypeModel(PrototypeModel): class SupervisedPrototypeModel(PrototypeModel): + def __init__(self, hparams, **kwargs): super().__init__(hparams, **kwargs) @@ -178,6 +182,7 @@ class ProtoTorchMixin(object): class NonGradientMixin(ProtoTorchMixin): """Mixin for custom non-gradient optimization.""" + def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.automatic_optimization = False @@ -188,6 +193,7 @@ class NonGradientMixin(ProtoTorchMixin): class ImagePrototypesMixin(ProtoTorchMixin): """Mixin for models with image prototypes.""" + def on_train_batch_end(self, outputs, batch, batch_idx, dataloader_idx): """Constrain the components to the range [0, 1] by clamping after updates.""" self.proto_layer.components.data.clamp_(0.0, 1.0) diff --git a/prototorch/models/callbacks.py b/prototorch/models/callbacks.py index 095f41d..f12d162 100644 --- a/prototorch/models/callbacks.py +++ b/prototorch/models/callbacks.py @@ -11,6 +11,7 @@ from .extras import ConnectionTopology class PruneLoserPrototypes(pl.Callback): + def __init__(self, threshold=0.01, idle_epochs=10, @@ -67,6 +68,7 @@ class PruneLoserPrototypes(pl.Callback): class PrototypeConvergence(pl.Callback): + def __init__(self, min_delta=0.01, idle_epochs=10, verbose=False): self.min_delta = min_delta self.idle_epochs = idle_epochs # epochs to wait @@ -89,6 +91,7 @@ class GNGCallback(pl.Callback): Based on "A Growing Neural Gas Network Learns Topologies" by Bernd Fritzke. """ + def __init__(self, reduction=0.1, freq=10): self.reduction = reduction self.freq = freq diff --git a/prototorch/models/cbc.py b/prototorch/models/cbc.py index a8cba61..8eeb554 100644 --- a/prototorch/models/cbc.py +++ b/prototorch/models/cbc.py @@ -13,6 +13,7 @@ from .glvq import SiameseGLVQ class CBC(SiameseGLVQ): """Classification-By-Components.""" + def __init__(self, hparams, **kwargs): super().__init__(hparams, **kwargs) diff --git a/prototorch/models/extras.py b/prototorch/models/extras.py index 03e394d..8a230d3 100644 --- a/prototorch/models/extras.py +++ b/prototorch/models/extras.py @@ -54,6 +54,7 @@ def ltangent_distance(x, y, omegas): class GaussianPrior(torch.nn.Module): + def __init__(self, variance): super().__init__() self.variance = variance @@ -63,6 +64,7 @@ class GaussianPrior(torch.nn.Module): class RankScaledGaussianPrior(torch.nn.Module): + def __init__(self, lambd): super().__init__() self.lambd = lambd @@ -72,6 +74,7 @@ class RankScaledGaussianPrior(torch.nn.Module): class ConnectionTopology(torch.nn.Module): + def __init__(self, agelimit, num_prototypes): super().__init__() self.agelimit = agelimit diff --git a/prototorch/models/glvq.py b/prototorch/models/glvq.py index 8dbf240..66ad1d7 100644 --- a/prototorch/models/glvq.py +++ b/prototorch/models/glvq.py @@ -4,9 +4,17 @@ import torch from torch.nn.parameter import Parameter from ..core.competitions import wtac -from ..core.distances import lomega_distance, omega_distance, squared_euclidean_distance +from ..core.distances import ( + lomega_distance, + omega_distance, + squared_euclidean_distance, +) from ..core.initializers import EyeTransformInitializer -from ..core.losses import GLVQLoss, lvq1_loss, lvq21_loss +from ..core.losses import ( + GLVQLoss, + lvq1_loss, + lvq21_loss, +) from ..core.transforms import LinearTransform from ..nn.wrappers import LambdaLayer, LossLayer from .abstract import ImagePrototypesMixin, SupervisedPrototypeModel @@ -15,6 +23,7 @@ from .extras import ltangent_distance, orthogonalization class GLVQ(SupervisedPrototypeModel): """Generalized Learning Vector Quantization.""" + def __init__(self, hparams, **kwargs): super().__init__(hparams, **kwargs) @@ -99,6 +108,7 @@ class SiameseGLVQ(GLVQ): transformation pipeline are only learned from the inputs. """ + def __init__(self, hparams, backbone=torch.nn.Identity(), @@ -165,6 +175,7 @@ class LVQMLN(SiameseGLVQ): rather in the embedding space. """ + def compute_distances(self, x): latent_protos, _ = self.proto_layer() latent_x = self.backbone(x) @@ -180,6 +191,7 @@ class GRLVQ(SiameseGLVQ): TODO Make a RelevanceLayer. `bb_lr` is ignored otherwise. """ + def __init__(self, hparams, **kwargs): super().__init__(hparams, **kwargs) @@ -205,6 +217,7 @@ class SiameseGMLVQ(SiameseGLVQ): Implemented as a Siamese network with a linear transformation backbone. """ + def __init__(self, hparams, **kwargs): super().__init__(hparams, **kwargs) @@ -235,6 +248,7 @@ class GMLVQ(GLVQ): function. This makes it easier to implement a localized variant. """ + def __init__(self, hparams, **kwargs): distance_fn = kwargs.pop("distance_fn", omega_distance) super().__init__(hparams, distance_fn=distance_fn, **kwargs) @@ -269,6 +283,7 @@ class GMLVQ(GLVQ): class LGMLVQ(GMLVQ): """Localized and Generalized Matrix Learning Vector Quantization.""" + def __init__(self, hparams, **kwargs): distance_fn = kwargs.pop("distance_fn", lomega_distance) super().__init__(hparams, distance_fn=distance_fn, **kwargs) @@ -285,6 +300,7 @@ class LGMLVQ(GMLVQ): class GTLVQ(LGMLVQ): """Localized and Generalized Tangent Learning Vector Quantization.""" + def __init__(self, hparams, **kwargs): distance_fn = kwargs.pop("distance_fn", ltangent_distance) super().__init__(hparams, distance_fn=distance_fn, **kwargs) @@ -323,6 +339,7 @@ class SiameseGTLVQ(SiameseGLVQ, GTLVQ): class GLVQ1(GLVQ): """Generalized Learning Vector Quantization 1.""" + def __init__(self, hparams, **kwargs): super().__init__(hparams, **kwargs) self.loss = LossLayer(lvq1_loss) @@ -331,6 +348,7 @@ class GLVQ1(GLVQ): class GLVQ21(GLVQ): """Generalized Learning Vector Quantization 2.1.""" + def __init__(self, hparams, **kwargs): super().__init__(hparams, **kwargs) self.loss = LossLayer(lvq21_loss) @@ -362,6 +380,7 @@ class ImageGTLVQ(ImagePrototypesMixin, GTLVQ): after updates. """ + def on_train_batch_end(self, outputs, batch, batch_idx, dataloader_idx): """Constrain the components to the range [0, 1] by clamping after updates.""" self.proto_layer.components.data.clamp_(0.0, 1.0) diff --git a/prototorch/models/knn.py b/prototorch/models/knn.py index 0886550..f1a7be5 100644 --- a/prototorch/models/knn.py +++ b/prototorch/models/knn.py @@ -4,13 +4,17 @@ import warnings from ..core.competitions import KNNC from ..core.components import LabeledComponents -from ..core.initializers import LiteralCompInitializer, LiteralLabelsInitializer +from ..core.initializers import ( + LiteralCompInitializer, + LiteralLabelsInitializer, +) from ..utils.utils import parse_data_arg from .abstract import SupervisedPrototypeModel class KNN(SupervisedPrototypeModel): """K-Nearest-Neighbors classification algorithm.""" + def __init__(self, hparams, **kwargs): super().__init__(hparams, **kwargs) diff --git a/prototorch/models/lvq.py b/prototorch/models/lvq.py index f398f93..655f539 100644 --- a/prototorch/models/lvq.py +++ b/prototorch/models/lvq.py @@ -9,6 +9,7 @@ from .glvq import GLVQ class LVQ1(NonGradientMixin, GLVQ): """Learning Vector Quantization 1.""" + def training_step(self, train_batch, batch_idx, optimizer_idx=None): protos, plables = self.proto_layer() x, y = train_batch @@ -38,6 +39,7 @@ class LVQ1(NonGradientMixin, GLVQ): class LVQ21(NonGradientMixin, GLVQ): """Learning Vector Quantization 2.1.""" + def training_step(self, train_batch, batch_idx, optimizer_idx=None): protos, plabels = self.proto_layer() @@ -70,6 +72,7 @@ class MedianLVQ(NonGradientMixin, GLVQ): # TODO Avoid computing distances over and over """ + def __init__(self, hparams, verbose=True, **kwargs): self.verbose = verbose super().__init__(hparams, **kwargs) diff --git a/prototorch/models/probabilistic.py b/prototorch/models/probabilistic.py index c00375f..cb9948a 100644 --- a/prototorch/models/probabilistic.py +++ b/prototorch/models/probabilistic.py @@ -11,6 +11,7 @@ from .glvq import GLVQ, SiameseGMLVQ class CELVQ(GLVQ): """Cross-Entropy Learning Vector Quantization.""" + def __init__(self, hparams, **kwargs): super().__init__(hparams, **kwargs) @@ -29,6 +30,7 @@ class CELVQ(GLVQ): class ProbabilisticLVQ(GLVQ): + def __init__(self, hparams, rejection_confidence=0.0, **kwargs): super().__init__(hparams, **kwargs) @@ -62,6 +64,7 @@ class ProbabilisticLVQ(GLVQ): class SLVQ(ProbabilisticLVQ): """Soft Learning Vector Quantization.""" + def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.loss = LossLayer(nllr_loss) @@ -70,6 +73,7 @@ class SLVQ(ProbabilisticLVQ): class RSLVQ(ProbabilisticLVQ): """Robust Soft Learning Vector Quantization.""" + def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.loss = LossLayer(rslvq_loss) @@ -81,6 +85,7 @@ class PLVQ(ProbabilisticLVQ, SiameseGMLVQ): TODO: Use Backbone LVQ instead """ + def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.conditional_distribution = RankScaledGaussianPrior( diff --git a/prototorch/models/unsupervised.py b/prototorch/models/unsupervised.py index c18f033..ed2a796 100644 --- a/prototorch/models/unsupervised.py +++ b/prototorch/models/unsupervised.py @@ -18,6 +18,7 @@ class KohonenSOM(NonGradientMixin, UnsupervisedPrototypeModel): TODO Allow non-2D grids """ + def __init__(self, hparams, **kwargs): h, w = hparams.get("shape") # Ignore `num_prototypes` @@ -69,6 +70,7 @@ class KohonenSOM(NonGradientMixin, UnsupervisedPrototypeModel): class HeskesSOM(UnsupervisedPrototypeModel): + def __init__(self, hparams, **kwargs): super().__init__(hparams, **kwargs) @@ -78,6 +80,7 @@ class HeskesSOM(UnsupervisedPrototypeModel): class NeuralGas(UnsupervisedPrototypeModel): + def __init__(self, hparams, **kwargs): super().__init__(hparams, **kwargs) @@ -110,6 +113,7 @@ class NeuralGas(UnsupervisedPrototypeModel): class GrowingNeuralGas(NeuralGas): + def __init__(self, hparams, **kwargs): super().__init__(hparams, **kwargs) diff --git a/prototorch/models/vis.py b/prototorch/models/vis.py index 9744a9d..49724a0 100644 --- a/prototorch/models/vis.py +++ b/prototorch/models/vis.py @@ -11,6 +11,7 @@ from ..utils.utils import mesh2d class Vis2DAbstract(pl.Callback): + def __init__(self, data, title="Prototype Visualization", @@ -118,6 +119,7 @@ class Vis2DAbstract(pl.Callback): class VisGLVQ2D(Vis2DAbstract): + def on_epoch_end(self, trainer, pl_module): if not self.precheck(trainer): return True @@ -141,6 +143,7 @@ class VisGLVQ2D(Vis2DAbstract): class VisSiameseGLVQ2D(Vis2DAbstract): + def __init__(self, *args, map_protos=True, **kwargs): super().__init__(*args, **kwargs) self.map_protos = map_protos @@ -179,6 +182,7 @@ class VisSiameseGLVQ2D(Vis2DAbstract): class VisGMLVQ2D(Vis2DAbstract): + def __init__(self, *args, ev_proj=True, **kwargs): super().__init__(*args, **kwargs) self.ev_proj = ev_proj @@ -212,6 +216,7 @@ class VisGMLVQ2D(Vis2DAbstract): class VisCBC2D(Vis2DAbstract): + def on_epoch_end(self, trainer, pl_module): if not self.precheck(trainer): return True @@ -235,6 +240,7 @@ class VisCBC2D(Vis2DAbstract): class VisNG2D(Vis2DAbstract): + def on_epoch_end(self, trainer, pl_module): if not self.precheck(trainer): return True @@ -262,6 +268,7 @@ class VisNG2D(Vis2DAbstract): class VisImgComp(Vis2DAbstract): + def __init__(self, *args, random_data=0, diff --git a/setup.cfg b/setup.cfg index 24eeb0b..e3c8135 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,8 +1,23 @@ -[isort] -profile = hug -src_paths = isort, test - [yapf] based_on_style = pep8 spaces_before_comment = 2 split_before_logical_operator = true + +[pylint] +disable = + too-many-arguments, + too-few-public-methods, + fixme, + + +[pycodestyle] +max-line-length = 79 + +[isort] +profile = hug +src_paths = isort, test +multi_line_output = 3 +include_trailing_comma = True +force_grid_wrap = 3 +use_parentheses = True +line_length = 79 diff --git a/tests/test_.py b/tests/test_.py index 88da1bc..d3c12d8 100644 --- a/tests/test_.py +++ b/tests/test_.py @@ -4,6 +4,7 @@ import unittest class TestDummy(unittest.TestCase): + def setUp(self): pass