From f5e8000bf6d75dc2b679ac062e0fbc1d00d29f12 Mon Sep 17 00:00:00 2001 From: Justus Schock <12886177+justusschock@users.noreply.github.com> Date: Mon, 31 May 2021 13:26:56 +0200 Subject: [PATCH 01/19] Update training_loop.py --- pytorch_lightning/trainer/training_loop.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pytorch_lightning/trainer/training_loop.py b/pytorch_lightning/trainer/training_loop.py index 7a12d7e766dae..dfadc012ba8d3 100644 --- a/pytorch_lightning/trainer/training_loop.py +++ b/pytorch_lightning/trainer/training_loop.py @@ -16,7 +16,7 @@ from contextlib import contextmanager, suppress from copy import copy from functools import partial, update_wrapper -from typing import Any, Callable, Dict, List, Optional, Tuple, Union +from typing import Any, Callable, Dict, List, Optional, Tuple, Union, Mapping import numpy as np import torch @@ -269,6 +269,10 @@ def _check_training_step_output(self, training_step_output): if training_step_output.grad_fn is None: # TODO: Find why - RuntimeError: Expected to mark a variable ready only once ... raise MisconfigurationException("In manual optimization, `training_step` should not return a Tensor") + elif self.trainer.automatic_optimization: + if not (isinstance(training_step_output, torch.Tensor) or (isinstance(training_step_output, Mapping) and 'loss' in training_step_output)): + raise MisconfigurationException("In automatic optimization, `training_step` must either return a Tensor or a dict with key 'loss'") + def training_step(self, split_batch, batch_idx, opt_idx, hiddens): # give the PL module a result for logging From 4269dc68e7b15fd6c1041d2337a5839cbe0c3616 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 31 May 2021 11:28:43 +0000 Subject: [PATCH 02/19] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- pytorch_lightning/trainer/training_loop.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/pytorch_lightning/trainer/training_loop.py b/pytorch_lightning/trainer/training_loop.py index dfadc012ba8d3..4e56c96bc0118 100644 --- a/pytorch_lightning/trainer/training_loop.py +++ b/pytorch_lightning/trainer/training_loop.py @@ -16,7 +16,7 @@ from contextlib import contextmanager, suppress from copy import copy from functools import partial, update_wrapper -from typing import Any, Callable, Dict, List, Optional, Tuple, Union, Mapping +from typing import Any, Callable, Dict, List, Mapping, Optional, Tuple, Union import numpy as np import torch @@ -270,9 +270,13 @@ def _check_training_step_output(self, training_step_output): # TODO: Find why - RuntimeError: Expected to mark a variable ready only once ... raise MisconfigurationException("In manual optimization, `training_step` should not return a Tensor") elif self.trainer.automatic_optimization: - if not (isinstance(training_step_output, torch.Tensor) or (isinstance(training_step_output, Mapping) and 'loss' in training_step_output)): - raise MisconfigurationException("In automatic optimization, `training_step` must either return a Tensor or a dict with key 'loss'") - + if not ( + isinstance(training_step_output, torch.Tensor) or + (isinstance(training_step_output, Mapping) and 'loss' in training_step_output) + ): + raise MisconfigurationException( + "In automatic optimization, `training_step` must either return a Tensor or a dict with key 'loss'" + ) def training_step(self, split_batch, batch_idx, opt_idx, hiddens): # give the PL module a result for logging From 987bbed34be5853a1326b890b5bfd1689dfce447 Mon Sep 17 00:00:00 2001 From: Justus Schock <12886177+justusschock@users.noreply.github.com> Date: Mon, 31 May 2021 13:35:11 +0200 Subject: [PATCH 03/19] Update test_training_loop.py --- tests/trainer/loops/test_training_loop.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/tests/trainer/loops/test_training_loop.py b/tests/trainer/loops/test_training_loop.py index da4ecbe5a9f05..e66101c53d4ca 100644 --- a/tests/trainer/loops/test_training_loop.py +++ b/tests/trainer/loops/test_training_loop.py @@ -15,6 +15,7 @@ import torch from pytorch_lightning import seed_everything, Trainer +from pytorch_lightning.utilities.exceptions import MisconfigurationException from tests.helpers import BoringModel @@ -142,3 +143,19 @@ def validation_step(self, *args): assert trainer.current_epoch == 0 assert trainer.global_step == 5 assert model.validation_called_at == (0, 4) + +@pytest.mark.parametrize(['output'], [5., {'a': 5}]) +def test_warning_invalid_trainstep_output(tmpdir, output): + class TestModel(BoringModel): + def training_step(self, batch, batch_idx): + return output + + model = TestModel() + + trainer = Trainer( + default_root_dir=tmpdir, + fast_dev_run=1 + ) + with pytest.raises(MisconfigurationException, + match="In automatic optimization, `training_step` must either return a Tensor or a dict with key 'loss'"): + trainer.fit(model) From ddfbb8d384aded532e3888f7550ff09cab702d14 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 31 May 2021 11:35:53 +0000 Subject: [PATCH 04/19] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- tests/trainer/loops/test_training_loop.py | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/tests/trainer/loops/test_training_loop.py b/tests/trainer/loops/test_training_loop.py index e66101c53d4ca..c338999e62f01 100644 --- a/tests/trainer/loops/test_training_loop.py +++ b/tests/trainer/loops/test_training_loop.py @@ -144,18 +144,20 @@ def validation_step(self, *args): assert trainer.global_step == 5 assert model.validation_called_at == (0, 4) + @pytest.mark.parametrize(['output'], [5., {'a': 5}]) def test_warning_invalid_trainstep_output(tmpdir, output): + class TestModel(BoringModel): + def training_step(self, batch, batch_idx): return output - + model = TestModel() - - trainer = Trainer( - default_root_dir=tmpdir, - fast_dev_run=1 - ) - with pytest.raises(MisconfigurationException, - match="In automatic optimization, `training_step` must either return a Tensor or a dict with key 'loss'"): + + trainer = Trainer(default_root_dir=tmpdir, fast_dev_run=1) + with pytest.raises( + MisconfigurationException, + match="In automatic optimization, `training_step` must either return a Tensor or a dict with key 'loss'" + ): trainer.fit(model) From 6542e5a5fcba00021efca780e6b817eeb8ddfa66 Mon Sep 17 00:00:00 2001 From: Justus Schock <12886177+justusschock@users.noreply.github.com> Date: Mon, 31 May 2021 14:40:43 +0200 Subject: [PATCH 05/19] Update test_training_loop.py --- tests/trainer/loops/test_training_loop.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/trainer/loops/test_training_loop.py b/tests/trainer/loops/test_training_loop.py index c338999e62f01..8062b594745ab 100644 --- a/tests/trainer/loops/test_training_loop.py +++ b/tests/trainer/loops/test_training_loop.py @@ -145,7 +145,7 @@ def validation_step(self, *args): assert model.validation_called_at == (0, 4) -@pytest.mark.parametrize(['output'], [5., {'a': 5}]) +@pytest.mark.parametrize(['output'], [(5.,), ({'a': 5},)]) def test_warning_invalid_trainstep_output(tmpdir, output): class TestModel(BoringModel): From 9d7cc1189c5b0c330f6c9ed289a266f380b0911b Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 31 May 2021 12:41:24 +0000 Subject: [PATCH 06/19] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- tests/trainer/loops/test_training_loop.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/trainer/loops/test_training_loop.py b/tests/trainer/loops/test_training_loop.py index 8062b594745ab..dd9ee3e57b860 100644 --- a/tests/trainer/loops/test_training_loop.py +++ b/tests/trainer/loops/test_training_loop.py @@ -145,7 +145,7 @@ def validation_step(self, *args): assert model.validation_called_at == (0, 4) -@pytest.mark.parametrize(['output'], [(5.,), ({'a': 5},)]) +@pytest.mark.parametrize(['output'], [(5., ), ({'a': 5}, )]) def test_warning_invalid_trainstep_output(tmpdir, output): class TestModel(BoringModel): From 371c058800ed38a1064b91d3a22d63192e0ba4c5 Mon Sep 17 00:00:00 2001 From: Justus Schock <12886177+justusschock@users.noreply.github.com> Date: Tue, 1 Jun 2021 07:51:48 +0200 Subject: [PATCH 07/19] Update training_loop.py --- pytorch_lightning/trainer/training_loop.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/pytorch_lightning/trainer/training_loop.py b/pytorch_lightning/trainer/training_loop.py index 4e56c96bc0118..32a22ea1594e3 100644 --- a/pytorch_lightning/trainer/training_loop.py +++ b/pytorch_lightning/trainer/training_loop.py @@ -269,14 +269,15 @@ def _check_training_step_output(self, training_step_output): if training_step_output.grad_fn is None: # TODO: Find why - RuntimeError: Expected to mark a variable ready only once ... raise MisconfigurationException("In manual optimization, `training_step` should not return a Tensor") - elif self.trainer.automatic_optimization: - if not ( - isinstance(training_step_output, torch.Tensor) or - (isinstance(training_step_output, Mapping) and 'loss' in training_step_output) - ): - raise MisconfigurationException( - "In automatic optimization, `training_step` must either return a Tensor or a dict with key 'loss'" - ) + elif self.trainer.automatic_optimization: + if not ( + isinstance(training_step_output, torch.Tensor) or + (isinstance(training_step_output, Mapping) and 'loss' in training_step_output) + ): + raise MisconfigurationException( + "In automatic optimization, `training_step` must either return a Tensor, " + "a dict with key 'loss' or None (where the step will be skipped)" + ) def training_step(self, split_batch, batch_idx, opt_idx, hiddens): # give the PL module a result for logging From 74937474d282f461d2a5e76e78072de908f2ff6e Mon Sep 17 00:00:00 2001 From: Justus Schock <12886177+justusschock@users.noreply.github.com> Date: Tue, 1 Jun 2021 13:31:41 +0200 Subject: [PATCH 08/19] Update pytorch_lightning/trainer/training_loop.py Co-authored-by: Ethan Harris --- pytorch_lightning/trainer/training_loop.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pytorch_lightning/trainer/training_loop.py b/pytorch_lightning/trainer/training_loop.py index 32a22ea1594e3..c468a3bfba7c2 100644 --- a/pytorch_lightning/trainer/training_loop.py +++ b/pytorch_lightning/trainer/training_loop.py @@ -276,7 +276,7 @@ def _check_training_step_output(self, training_step_output): ): raise MisconfigurationException( "In automatic optimization, `training_step` must either return a Tensor, " - "a dict with key 'loss' or None (where the step will be skipped)" + "a dict with key 'loss' or None (where the step will be skipped)." ) def training_step(self, split_batch, batch_idx, opt_idx, hiddens): From 7253cdda748b46b11a936a9437be24dabadb2216 Mon Sep 17 00:00:00 2001 From: Justus Schock <12886177+justusschock@users.noreply.github.com> Date: Tue, 1 Jun 2021 13:42:30 +0200 Subject: [PATCH 09/19] Update test_training_loop.py --- tests/trainer/loops/test_training_loop.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/trainer/loops/test_training_loop.py b/tests/trainer/loops/test_training_loop.py index dd9ee3e57b860..78520275ac3e9 100644 --- a/tests/trainer/loops/test_training_loop.py +++ b/tests/trainer/loops/test_training_loop.py @@ -158,6 +158,7 @@ def training_step(self, batch, batch_idx): trainer = Trainer(default_root_dir=tmpdir, fast_dev_run=1) with pytest.raises( MisconfigurationException, - match="In automatic optimization, `training_step` must either return a Tensor or a dict with key 'loss'" + match="In automatic optimization, `training_step` must either return a Tensor, " + "a dict with key 'loss' or None (where the step will be skipped)" ): trainer.fit(model) From 4c05db9b59cac28aaf353dc4058f12775893f5a4 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 1 Jun 2021 11:44:06 +0000 Subject: [PATCH 10/19] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- tests/trainer/loops/test_training_loop.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/trainer/loops/test_training_loop.py b/tests/trainer/loops/test_training_loop.py index 78520275ac3e9..a662e3db7a4de 100644 --- a/tests/trainer/loops/test_training_loop.py +++ b/tests/trainer/loops/test_training_loop.py @@ -159,6 +159,6 @@ def training_step(self, batch, batch_idx): with pytest.raises( MisconfigurationException, match="In automatic optimization, `training_step` must either return a Tensor, " - "a dict with key 'loss' or None (where the step will be skipped)" + "a dict with key 'loss' or None (where the step will be skipped)" ): trainer.fit(model) From 5034d5dd8da971e94451dbfe3b2648521b50d07f Mon Sep 17 00:00:00 2001 From: Justus Schock <12886177+justusschock@users.noreply.github.com> Date: Wed, 2 Jun 2021 11:09:07 +0200 Subject: [PATCH 11/19] Update training_loop.py --- pytorch_lightning/trainer/training_loop.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pytorch_lightning/trainer/training_loop.py b/pytorch_lightning/trainer/training_loop.py index c468a3bfba7c2..967f51ad015e6 100644 --- a/pytorch_lightning/trainer/training_loop.py +++ b/pytorch_lightning/trainer/training_loop.py @@ -271,8 +271,9 @@ def _check_training_step_output(self, training_step_output): raise MisconfigurationException("In manual optimization, `training_step` should not return a Tensor") elif self.trainer.automatic_optimization: if not ( - isinstance(training_step_output, torch.Tensor) or - (isinstance(training_step_output, Mapping) and 'loss' in training_step_output) + isinstance(training_step_output, torch.Tensor) or ( + isinstance(training_step_output, Mapping) and 'loss' in training_step_output + ) ): raise MisconfigurationException( "In automatic optimization, `training_step` must either return a Tensor, " From 6f09c2b126d60d242679e28b7663d1cf4fa75423 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 2 Jun 2021 09:29:40 +0000 Subject: [PATCH 12/19] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- pytorch_lightning/trainer/training_loop.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/pytorch_lightning/trainer/training_loop.py b/pytorch_lightning/trainer/training_loop.py index 967f51ad015e6..c468a3bfba7c2 100644 --- a/pytorch_lightning/trainer/training_loop.py +++ b/pytorch_lightning/trainer/training_loop.py @@ -271,9 +271,8 @@ def _check_training_step_output(self, training_step_output): raise MisconfigurationException("In manual optimization, `training_step` should not return a Tensor") elif self.trainer.automatic_optimization: if not ( - isinstance(training_step_output, torch.Tensor) or ( - isinstance(training_step_output, Mapping) and 'loss' in training_step_output - ) + isinstance(training_step_output, torch.Tensor) or + (isinstance(training_step_output, Mapping) and 'loss' in training_step_output) ): raise MisconfigurationException( "In automatic optimization, `training_step` must either return a Tensor, " From fa3a5b046747da4661a3e40045eb89485b83c6c5 Mon Sep 17 00:00:00 2001 From: Justus Schock <12886177+justusschock@users.noreply.github.com> Date: Fri, 4 Jun 2021 07:30:43 +0200 Subject: [PATCH 13/19] Update pytorch_lightning/trainer/training_loop.py Co-authored-by: ananthsub --- pytorch_lightning/trainer/training_loop.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pytorch_lightning/trainer/training_loop.py b/pytorch_lightning/trainer/training_loop.py index c468a3bfba7c2..d3b27a0d4fb70 100644 --- a/pytorch_lightning/trainer/training_loop.py +++ b/pytorch_lightning/trainer/training_loop.py @@ -269,7 +269,7 @@ def _check_training_step_output(self, training_step_output): if training_step_output.grad_fn is None: # TODO: Find why - RuntimeError: Expected to mark a variable ready only once ... raise MisconfigurationException("In manual optimization, `training_step` should not return a Tensor") - elif self.trainer.automatic_optimization: + elif self.trainer.lightning_module.automatic_optimization: if not ( isinstance(training_step_output, torch.Tensor) or (isinstance(training_step_output, Mapping) and 'loss' in training_step_output) From e39ee56d7cce2a023edb97d1abb770afe0a82923 Mon Sep 17 00:00:00 2001 From: Justus Schock <12886177+justusschock@users.noreply.github.com> Date: Fri, 4 Jun 2021 08:19:49 +0200 Subject: [PATCH 14/19] Update training_loop.py --- pytorch_lightning/trainer/training_loop.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pytorch_lightning/trainer/training_loop.py b/pytorch_lightning/trainer/training_loop.py index d3b27a0d4fb70..162d279bc5195 100644 --- a/pytorch_lightning/trainer/training_loop.py +++ b/pytorch_lightning/trainer/training_loop.py @@ -272,7 +272,7 @@ def _check_training_step_output(self, training_step_output): elif self.trainer.lightning_module.automatic_optimization: if not ( isinstance(training_step_output, torch.Tensor) or - (isinstance(training_step_output, Mapping) and 'loss' in training_step_output) + (isinstance(training_step_output, Mapping) and 'loss' in training_step_output) or training_step_output is None ): raise MisconfigurationException( "In automatic optimization, `training_step` must either return a Tensor, " From 4b62840a9f7be6049fad38346586c08bdf045226 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 4 Jun 2021 06:20:49 +0000 Subject: [PATCH 15/19] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- pytorch_lightning/trainer/training_loop.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pytorch_lightning/trainer/training_loop.py b/pytorch_lightning/trainer/training_loop.py index 162d279bc5195..23ca166f542c5 100644 --- a/pytorch_lightning/trainer/training_loop.py +++ b/pytorch_lightning/trainer/training_loop.py @@ -272,7 +272,8 @@ def _check_training_step_output(self, training_step_output): elif self.trainer.lightning_module.automatic_optimization: if not ( isinstance(training_step_output, torch.Tensor) or - (isinstance(training_step_output, Mapping) and 'loss' in training_step_output) or training_step_output is None + (isinstance(training_step_output, Mapping) and 'loss' in training_step_output) + or training_step_output is None ): raise MisconfigurationException( "In automatic optimization, `training_step` must either return a Tensor, " From 7f5673a071480ace56a3a3c63d4a8af450bc53b2 Mon Sep 17 00:00:00 2001 From: Justus Schock <12886177+justusschock@users.noreply.github.com> Date: Fri, 4 Jun 2021 08:22:56 +0200 Subject: [PATCH 16/19] Update test_training_loop.py --- tests/trainer/loops/test_training_loop.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/trainer/loops/test_training_loop.py b/tests/trainer/loops/test_training_loop.py index a662e3db7a4de..25444d136a03b 100644 --- a/tests/trainer/loops/test_training_loop.py +++ b/tests/trainer/loops/test_training_loop.py @@ -159,6 +159,6 @@ def training_step(self, batch, batch_idx): with pytest.raises( MisconfigurationException, match="In automatic optimization, `training_step` must either return a Tensor, " - "a dict with key 'loss' or None (where the step will be skipped)" + "a dict with key 'loss' or None (where the step will be skipped)." ): trainer.fit(model) From de9e282d5a896bc26a5eca667ab4b585dcf33e87 Mon Sep 17 00:00:00 2001 From: Justus Schock <12886177+justusschock@users.noreply.github.com> Date: Fri, 4 Jun 2021 08:30:37 +0200 Subject: [PATCH 17/19] Update training_loop.py --- pytorch_lightning/trainer/training_loop.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/pytorch_lightning/trainer/training_loop.py b/pytorch_lightning/trainer/training_loop.py index 23ca166f542c5..b6f993c4ec0f9 100644 --- a/pytorch_lightning/trainer/training_loop.py +++ b/pytorch_lightning/trainer/training_loop.py @@ -270,11 +270,10 @@ def _check_training_step_output(self, training_step_output): # TODO: Find why - RuntimeError: Expected to mark a variable ready only once ... raise MisconfigurationException("In manual optimization, `training_step` should not return a Tensor") elif self.trainer.lightning_module.automatic_optimization: - if not ( - isinstance(training_step_output, torch.Tensor) or - (isinstance(training_step_output, Mapping) and 'loss' in training_step_output) - or training_step_output is None - ): + if not any((isinstance(training_step_output, torch.Tensor), + (isinstance(training_step_output, Mapping) and 'loss' in training_step_output), + training_step_output is None + )): raise MisconfigurationException( "In automatic optimization, `training_step` must either return a Tensor, " "a dict with key 'loss' or None (where the step will be skipped)." From 45b174df26e7ff2d6091b07913b0347a3c2962d6 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 4 Jun 2021 06:31:38 +0000 Subject: [PATCH 18/19] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- pytorch_lightning/trainer/training_loop.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/pytorch_lightning/trainer/training_loop.py b/pytorch_lightning/trainer/training_loop.py index b6f993c4ec0f9..95ba6d5306309 100644 --- a/pytorch_lightning/trainer/training_loop.py +++ b/pytorch_lightning/trainer/training_loop.py @@ -270,9 +270,10 @@ def _check_training_step_output(self, training_step_output): # TODO: Find why - RuntimeError: Expected to mark a variable ready only once ... raise MisconfigurationException("In manual optimization, `training_step` should not return a Tensor") elif self.trainer.lightning_module.automatic_optimization: - if not any((isinstance(training_step_output, torch.Tensor), - (isinstance(training_step_output, Mapping) and 'loss' in training_step_output), - training_step_output is None + if not any(( + isinstance(training_step_output, torch.Tensor), + (isinstance(training_step_output, Mapping) + and 'loss' in training_step_output), training_step_output is None )): raise MisconfigurationException( "In automatic optimization, `training_step` must either return a Tensor, " From ccacbb9d92161b53d2d8b4d417fd2b1be1d7b0b8 Mon Sep 17 00:00:00 2001 From: Justus Schock Date: Fri, 4 Jun 2021 09:07:26 +0200 Subject: [PATCH 19/19] escape regex --- tests/trainer/loops/test_training_loop.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/tests/trainer/loops/test_training_loop.py b/tests/trainer/loops/test_training_loop.py index 25444d136a03b..a2706e5d37bc0 100644 --- a/tests/trainer/loops/test_training_loop.py +++ b/tests/trainer/loops/test_training_loop.py @@ -11,6 +11,8 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. +import re + import pytest import torch @@ -158,7 +160,9 @@ def training_step(self, batch, batch_idx): trainer = Trainer(default_root_dir=tmpdir, fast_dev_run=1) with pytest.raises( MisconfigurationException, - match="In automatic optimization, `training_step` must either return a Tensor, " - "a dict with key 'loss' or None (where the step will be skipped)." + match=re.escape( + "In automatic optimization, `training_step` must either return a Tensor, " + "a dict with key 'loss' or None (where the step will be skipped)." + ) ): trainer.fit(model)