# Buggy code
def __init__(
    self,
    schedulers: List[ParamScheduler],
    names: Optional[List[str]] = None,
    save_history=False,
):
    if not (
        isinstance(schedulers, Sequence)
        and all(isinstance(scheduler, ParamScheduler) for scheduler in schedulers)
    ):
        raise ValueError(
            "Argument schedulers should be a list/tuple of parameter schedulers"
        )

    if names is None:
        names = [s.param_name for s in schedulers]

    if not (
        isinstance(names, (list, tuple)) and all(isinstance(n, str) for n in names)
    ):
        raise ValueError(
            "Argument names should be a list/tuple of parameter scheduler's names"
        )

    if len(names) != len(schedulers):
        raise ValueError("{} should be equal {}".format(len(schedulers), len(names)))

    self.schedulers = schedulers
    self.names = names

    optimizer = self.schedulers[0].optimizer
    if not (all(id(s.optimizer) == id(optimizer) for s in schedulers)):
        raise ValueError("schedulers should be related to same optimizer")

    super(ParamGroupScheduler, self).__init__(
        optimizer=optimizer, param_name="lr", save_history=save_history
    )


# Traceback (TypeError)
Traceback (most recent call last):
File "tutorials/misc/lr_schedulers.py", line 56, in <module>
lr_values = LRScheduler.simulate_values(num_events=50, lr_scheduler=lr_scheduler)
File "/work/desrozis/Softwares/conda/envs/focus-light/lib/python3.7/site-packages/ignite/contrib/handlers/param_scheduler.py", line 606, in simulate_values
copy_lr_scheduler = LRScheduler._replicate_lr_scheduler(lr_scheduler)
File "/work/desrozis/Softwares/conda/envs/focus-light/lib/python3.7/site-packages/ignite/contrib/handlers/param_scheduler.py", line 627, in _replicate_lr_scheduler
copy_lr_scheduler = lr_scheduler_cls(optimizer=dummy_optimizer, **kwargs)
TypeError: __init__() got an unexpected keyword argument 'T_i'

# Fixed code
def __init__(
    self,
    schedulers: List[ParamScheduler],
    names: Optional[List[str]] = None,
    save_history=False,
):
    if not (
        isinstance(schedulers, Sequence)
        and all(isinstance(scheduler, ParamScheduler) for scheduler in schedulers)
    ):
        raise ValueError(
            "Argument schedulers should be a list/tuple of parameter schedulers"
        )

    if names is None:
        names = [s.param_name for s in schedulers]

    if not (
        isinstance(names, (list, tuple)) and all(isinstance(n, str) for n in names)
    ):
        raise ValueError(
            "Argument names should be a list/tuple of parameter scheduler's names"
        )

    if len(names) != len(schedulers):
        raise ValueError("{} should be equal {}".format(len(schedulers), len(names)))

    self.schedulers = schedulers
    self.names = names

    self.optimizer = self.schedulers[0].optimizer
    if not (all(id(s.optimizer) == id(self.optimizer) for s in schedulers)):
        raise ValueError("schedulers should be related to same optimizer")

    # schedulers should have save_history sync with ParamGroupScheduler
    for s in schedulers:
        s.save_history = save_history

    super(ParamGroupScheduler, self).__init__(
        optimizer=self.optimizer, param_name="lr", save_history=save_history
    )