def test_ts_windowtransf_input_dictionary(self):
        """
        Test that the forecasting window transformer dictionary input parameter is correctly formatted
        """

        with pytest.raises(TypeError):
            window_transformations = None  # None input
            self.series_univ_det.window_transform(transforms=window_transformations)

        with pytest.raises(ValueError):
            window_transformations = []  # empty list
            self.series_univ_det.window_transform(transforms=window_transformations)

        with pytest.raises(KeyError):
            window_transformations = {}  # empty dictionary
            self.series_univ_det.window_transform(transforms=window_transformations)

        with pytest.raises(ValueError):
            window_transformations = [1, 2, 3]  # list of not dictionaries
            self.series_univ_det.window_transform(transforms=window_transformations)

        with pytest.raises(KeyError):
            window_transformations = {"random_fn_name": "mean"}  # no 'function' key
            self.series_univ_det.window_transform(transforms=window_transformations)

        with pytest.raises(AttributeError):
            window_transformations = {
                "function": "wild_fn"
            }  # not valid pandas built-in function
            self.series_univ_det.window_transform(transforms=window_transformations)

        with pytest.raises(ValueError):
            window_transformations = {
                "function": 1
            }  # not valid pandas built-in function nore callable
            self.series_univ_det.window_transform(transforms=window_transformations)

        with pytest.raises(ValueError):
            window_transformations = {"function": None}  # None function value
            self.series_univ_det.window_transform(transforms=window_transformations)

        with pytest.raises(TypeError):
            window_transformations = {
                "function": "quantile",
                "window": [3],
            }  # not enough mandatory arguments for quantile
            self.series_univ_det.window_transform(transforms=window_transformations)

        with pytest.raises(ValueError):
            window_transformations = {
                "function": "mean",
                "mode": "rolling",
                "window": -3,
            }  # negative window
            self.series_univ_det.window_transform(transforms=window_transformations)

        with pytest.raises(ValueError):
            window_transformations = {
                "function": "mean",
                "mode": "rolling",
                "window": None,
            }  # None window
            self.series_univ_det.window_transform(transforms=window_transformations)

        with pytest.raises(ValueError):
            window_transformations = {
                "function": "mean",
                "mode": "rolling",
                "window": [5],
            }  # window list
            self.series_univ_det.window_transform(transforms=window_transformations)

        with pytest.raises(ValueError):
            window_transformations = {
                "function": "mean",
                "window": 3,
                "mode": "rolling",
                "step": -2,
            }  # Negative step
            self.series_univ_det.window_transform(transforms=window_transformations)

        with pytest.raises(ValueError):
            window_transformations = {
                "function": "mean",
                "window": 3,
                "mode": "rnd",
            }  # invalid mode
            self.series_univ_det.window_transform(transforms=window_transformations)

        with pytest.raises(ValueError):
            window_transformations = {
                "function": "mean",
                "mode": "rolling",
                "window": 3,
                "center": "True",
            }  # forecating_safe=True vs center=True
            self.series_univ_det.window_transform(transforms=window_transformations)

        # keep_names and overlapping transforms
        with pytest.raises(ValueError) as err:
            window_transformations = [
                {
                    "function": "mean",
                    "mode": "rolling",
                    "window": 3,
                    "components": self.series_multi_det.components[:1],
                },
                {
                    "function": "median",
                    "mode": "rolling",
                    "window": 3,
                    "components": self.series_multi_det.components,
                },
            ]
            self.series_multi_det.window_transform(
                transforms=window_transformations, keep_names=True
            )
        assert str(err.value) == (
            "Cannot keep the original component names as some transforms are overlapping "
            "(applied to the same components). Set `keep_names` to `False`."
        )

        # keep_names and keep_non_transformed
        with pytest.raises(ValueError) as err:
            window_transformations = [
                {
                    "function": "mean",
                    "mode": "rolling",
                    "window": 3,
                    "components": self.series_multi_det.components[:1],
                },
            ]
            self.series_multi_det.window_transform(
                transforms=window_transformations,
                keep_names=True,
                keep_non_transformed=True,
            )
        assert str(err.value) == (
            "`keep_names = True` and `keep_non_transformed = True` cannot be used together."
        )

        Test that the forecasting window transformer dictionary input parameter is correctly formatted
        
darts/tests/dataprocessing/transformers/test_window_transformations.py