<reponame>sbonner0/pykeen<filename>src/pykeen/stoppers/__init__.py
# -*- coding: utf-8 -*-

"""Early stoppers.

The following code will create a scenario in which training will stop
(quite) early when training :class:`pykeen.models.TransE` on the
:class:`pykeen.datasets.Nations` dataset.

>>> from pykeen.pipeline import pipeline
>>> pipeline_result = pipeline(
...     dataset='nations',
...     model='transe',
...     model_kwargs=dict(embedding_dim=20, scoring_fct_norm=1),
...     optimizer='SGD',
...     optimizer_kwargs=dict(lr=0.01),
...     loss='marginranking',
...     loss_kwargs=dict(margin=1),
...     training_loop='slcwa',
...     training_kwargs=dict(num_epochs=100, batch_size=128),
...     negative_sampler='basic',
...     negative_sampler_kwargs=dict(num_negs_per_pos=1),
...     evaluator_kwargs=dict(filtered=True),
...     evaluation_kwargs=dict(batch_size=128),
...     stopper='early',
...     stopper_kwargs=dict(frequency=5, patience=2, relative_delta=0.002),
... )
"""

from typing import Collection, Type

from class_resolver import Resolver, get_subclasses

from .early_stopping import EarlyStopper, StopperCallback  # noqa: F401
from .stopper import NopStopper, Stopper

__all__ = [
    "Stopper",
    "NopStopper",
    "EarlyStopper",
    # Utils
    "stopper_resolver",
]

_STOPPER_SUFFIX = "Stopper"
_STOPPERS: Collection[Type[Stopper]] = set(get_subclasses(Stopper))  # type: ignore
stopper_resolver = Resolver(
    _STOPPERS,
    default=NopStopper,
    suffix=_STOPPER_SUFFIX,
    base=Stopper,  # type: ignore
)

# -*- coding: utf-8 -*-

"""Early stoppers.

The following code will create a scenario in which training will stop
(quite) early when training :class:`pykeen.models.TransE` on the
:class:`pykeen.datasets.Nations` dataset.

>>> from pykeen.pipeline import pipeline
>>> pipeline_result = pipeline(
...     dataset='nations',
...     model='transe',
...     model_kwargs=dict(embedding_dim=20, scoring_fct_norm=1),
...     optimizer='SGD',
...     optimizer_kwargs=dict(lr=0.01),
...     loss='marginranking',
...     loss_kwargs=dict(margin=1),
...     training_loop='slcwa',
...     training_kwargs=dict(num_epochs=100, batch_size=128),
...     negative_sampler='basic',
...     negative_sampler_kwargs=dict(num_negs_per_pos=1),
...     evaluator_kwargs=dict(filtered=True),
...     evaluation_kwargs=dict(batch_size=128),
...     stopper='early',
...     stopper_kwargs=dict(frequency=5, patience=2, relative_delta=0.002),
... )
"""

from typing import Collection, Type

from class_resolver import Resolver, get_subclasses

from .early_stopping import EarlyStopper, StopperCallback  # noqa: F401
from .stopper import NopStopper, Stopper

__all__ = [
    "Stopper",
    "NopStopper",
    "EarlyStopper",
    # Utils
    "stopper_resolver",
]

_STOPPER_SUFFIX = "Stopper"
_STOPPERS: Collection[Type[Stopper]] = set(get_subclasses(Stopper))  # type: ignore
stopper_resolver = Resolver(
    _STOPPERS,
    default=NopStopper,
    suffix=_STOPPER_SUFFIX,
    base=Stopper,  # type: ignore
)
# -*- coding: utf-8 -*- Early stoppers.  The following code will create a scenario in which training will stop (quite) early when training :class:`pykeen.models.TransE` on the :class:`pykeen.datasets.Nations` dataset.  >>> from pykeen.pipeline import pipeline >>> pipeline_result = pipeline( ...     dataset='nations', ...     model='transe', ...     model_kwargs=dict(embedding_dim=20, scoring_fct_norm=1), ...     optimizer='SGD', ...     optimizer_kwargs=dict(lr=0.01), ...     loss='marginranking', ...     loss_kwargs=dict(margin=1), ...     training_loop='slcwa', ...     training_kwargs=dict(num_epochs=100, batch_size=128), ...     negative_sampler='basic', ...     negative_sampler_kwargs=dict(num_negs_per_pos=1), ...     evaluator_kwargs=dict(filtered=True), ...     evaluation_kwargs=dict(batch_size=128), ...     stopper='early', ...     stopper_kwargs=dict(frequency=5, patience=2, relative_delta=0.002), ... ) # noqa: F401 # Utils # type: ignore # type: ignore