# Path: mimesis/providers/generic.py
# class Generic(BaseProvider):
#     """Class which contain all providers at one."""
# 
#     _DEFAULT_PROVIDERS = (
#         Address,
#         BinaryFile,
#         Finance,
#         Choice,
#         Code,
#         Choice,
#         Datetime,
#         Development,
#         File,
#         Food,
#         Hardware,
#         Internet,
#         Numeric,
#         Path,
#         Payment,
#         Person,
#         Science,
#         Text,
#         Transport,
#         Cryptographic,
#     )
# 
#     def __init__(self, locale: Locale = Locale.DEFAULT, seed: Seed = None) -> None:
#         """Initialize attributes lazily."""
#         super().__init__(seed=seed)
#         self.locale = locale
# 
#         for provider in self._DEFAULT_PROVIDERS:
#             name = getattr(provider.Meta, "name")  # type: ignore
# 
#             # Check if a provider is locale-dependent.
#             if issubclass(provider, BaseDataProvider):
#                 setattr(self, f"_{name}", provider)
#             elif issubclass(provider, BaseProvider):
#                 setattr(self, name, provider(seed=self.seed))
# 
#     class Meta:
#         """Class for metadata."""
# 
#         name: Final[str] = "generic"
# 
#     def __getattr__(self, attrname: str) -> Any:
#         """Get attribute without underscore.
# 
#         :param attrname: Attribute name.
#         :return: An attribute.
#         """
#         attribute = object.__getattribute__(self, "_" + attrname)
#         if attribute and callable(attribute):
#             self.__dict__[attrname] = attribute(
#                 self.locale,
#                 self.seed,
#             )
#             return self.__dict__[attrname]
# 
#     def __dir__(self) -> List[str]:
#         """Available data providers.
# 
#         The list of result will be used in AbstractField to
#         determine method's class.
# 
#         :return: List of attributes.
#         """
#         attributes = []
#         exclude = BaseProvider().__dict__.keys()
# 
#         for a in self.__dict__:
#             if a not in exclude:
#                 if a.startswith("_"):
#                     attribute = a.replace("_", "", 1)
#                     attributes.append(attribute)
#                 else:
#                     attributes.append(a)
#         return attributes
# 
#     def reseed(self, seed: Seed = None) -> None:
#         """Reseed the internal random generator.
# 
#         Overrides method `BaseProvider.reseed()`.
# 
#         :param seed: Seed for random.
#         """
#         # Ensure that we reseed the random generator on Generic itself.
#         super().reseed(seed)
# 
#         for attr in self.__dir__():
#             try:
#                 provider = getattr(self, attr)
#                 provider.reseed(seed)
#             except AttributeError:
#                 continue
# 
#     def add_provider(self, cls: Type[BaseProvider], **kwargs: Any) -> None:
#         """Add a custom provider to Generic() object.
# 
#         :param cls: Custom provider.
#         :return: None
#         :raises TypeError: if cls is not class or is not a subclass
#             of BaseProvider.
#         """
#         if inspect.isclass(cls):
#             if not issubclass(cls, BaseProvider):
#                 raise TypeError(
#                     "The provider must be a "
#                     "subclass of mimesis.providers.BaseProvider"
#                 )
#             try:
#                 name = cls.Meta.name  # type: ignore
#             except AttributeError:
#                 name = cls.__name__.lower()
# 
#             if "seed" in kwargs:
#                 kwargs.pop("seed")
# 
#             setattr(self, name, cls(seed=self.seed, **kwargs))
#         else:
#             raise TypeError("The provider must be a class")
# 
#     def add_providers(self, *providers: Type[BaseProvider]) -> None:
#         """Add a lot of custom providers to Generic() object.
# 
#         :param providers: Custom providers.
#         :return: None
#         """
#         for provider in providers:
#             self.add_provider(provider)
# 
#     def __str__(self) -> str:
#         """Human-readable representation of locale."""
#         return f"{self.__class__.__name__} <{self.locale}>"
# 
# Path: mimesis/types.py
# JSON = Dict[str, Any]


import csv
import json
import pickle
import warnings
from typing import Any, Callable, ClassVar, Iterator, List, Optional, Sequence
from mimesis.exceptions import FieldError, SchemaError
from mimesis.locales import Locale
from mimesis.providers.generic import Generic
from mimesis.types import JSON, SchemaType, Seed
        .. note::
            Since data `mimesis` provides are limited, frequent calls of
            this method can cause data duplication.

        .. note::
            Before using this method, ask yourself: **Do I really need this**?

            In most cases, the answer is: Nah, :meth:`iterator` is enough.

        .. warning::
            Do not use this method without interrupt conditions, otherwise,
            you're risking running out of memory.

        .. warning::
            **Never** (seriously) call `list()`, `tuple()` or any other callable which tries to
            evaluate the whole lazy object on this method — infinite called infinite
            for a reason.

        :return: An infinite iterator with fulfilled schemas.
        """

        warnings.warn(
            "You're iterating over the infinite object! "
            "The schema.loop() can cause a serious memory leak."
            "Please, see: https://mimesis.name/en/latest/api.html#mimesis.schema.Schema.loop"
        )

        while True:
            yield self._schema()


# Path: mimesis/providers/generic.py
# class Generic(BaseProvider):
#     """Class which contain all providers at one."""
# 
#     _DEFAULT_PROVIDERS = (
#         Address,
#         BinaryFile,
#         Finance,
#         Choice,
#         Code,
#         Choice,
#         Datetime,
#         Development,
#         File,
#         Food,
#         Hardware,
#         Internet,
#         Numeric,
#         Path,
#         Payment,
#         Person,
#         Science,
#         Text,
#         Transport,
#         Cryptographic,
#     )
# 
#     def __init__(self, locale: Locale = Locale.DEFAULT, seed: Seed = None) -> None:
#         """Initialize attributes lazily."""
#         super().__init__(seed=seed)
#         self.locale = locale
# 
#         for provider in self._DEFAULT_PROVIDERS:
#             name = getattr(provider.Meta, "name")  # type: ignore
# 
#             # Check if a provider is locale-dependent.
#             if issubclass(provider, BaseDataProvider):
#                 setattr(self, f"_{name}", provider)
#             elif issubclass(provider, BaseProvider):
#                 setattr(self, name, provider(seed=self.seed))
# 
#     class Meta:
#         """Class for metadata."""
# 
#         name: Final[str] = "generic"
# 
#     def __getattr__(self, attrname: str) -> Any:
#         """Get attribute without underscore.
# 
#         :param attrname: Attribute name.
#         :return: An attribute.
#         """
#         attribute = object.__getattribute__(self, "_" + attrname)
#         if attribute and callable(attribute):
#             self.__dict__[attrname] = attribute(
#                 self.locale,
#                 self.seed,
#             )
#             return self.__dict__[attrname]
# 
#     def __dir__(self) -> List[str]:
#         """Available data providers.
# 
#         The list of result will be used in AbstractField to
#         determine method's class.
# 
#         :return: List of attributes.
#         """
#         attributes = []
#         exclude = BaseProvider().__dict__.keys()
# 
#         for a in self.__dict__:
#             if a not in exclude:
#                 if a.startswith("_"):
#                     attribute = a.replace("_", "", 1)
#                     attributes.append(attribute)
#                 else:
#                     attributes.append(a)
#         return attributes
# 
#     def reseed(self, seed: Seed = None) -> None:
#         """Reseed the internal random generator.
# 
#         Overrides method `BaseProvider.reseed()`.
# 
#         :param seed: Seed for random.
#         """
#         # Ensure that we reseed the random generator on Generic itself.
#         super().reseed(seed)
# 
#         for attr in self.__dir__():
#             try:
#                 provider = getattr(self, attr)
#                 provider.reseed(seed)
#             except AttributeError:
#                 continue
# 
#     def add_provider(self, cls: Type[BaseProvider], **kwargs: Any) -> None:
#         """Add a custom provider to Generic() object.
# 
#         :param cls: Custom provider.
#         :return: None
#         :raises TypeError: if cls is not class or is not a subclass
#             of BaseProvider.
#         """
#         if inspect.isclass(cls):
#             if not issubclass(cls, BaseProvider):
#                 raise TypeError(
#                     "The provider must be a "
#                     "subclass of mimesis.providers.BaseProvider"
#                 )
#             try:
#                 name = cls.Meta.name  # type: ignore
#             except AttributeError:
#                 name = cls.__name__.lower()
# 
#             if "seed" in kwargs:
#                 kwargs.pop("seed")
# 
#             setattr(self, name, cls(seed=self.seed, **kwargs))
#         else:
#             raise TypeError("The provider must be a class")
# 
#     def add_providers(self, *providers: Type[BaseProvider]) -> None:
#         """Add a lot of custom providers to Generic() object.
# 
#         :param providers: Custom providers.
#         :return: None
#         """
#         for provider in providers:
#             self.add_provider(provider)
# 
#     def __str__(self) -> str:
#         """Human-readable representation of locale."""
#         return f"{self.__class__.__name__} <{self.locale}>"
# 
# Path: mimesis/types.py
# JSON = Dict[str, Any]


# Path: mimesis/schema.py
import csv
import json
import pickle
import warnings
from typing import Any, Callable, ClassVar, Iterator, List, Optional, Sequence
from mimesis.exceptions import FieldError, SchemaError
from mimesis.locales import Locale
from mimesis.providers.generic import Generic
from mimesis.types import JSON, SchemaType, Seed

        .. note::
            Since data `mimesis` provides are limited, frequent calls of
            this method can cause data duplication.

        .. note::
            Before using this method, ask yourself: **Do I really need this**?

            In most cases, the answer is: Nah, :meth:`iterator` is enough.

        .. warning::
            Do not use this method without interrupt conditions, otherwise,
            you're risking running out of memory.

        .. warning::
            **Never** (seriously) call `list()`, `tuple()` or any other callable which tries to
            evaluate the whole lazy object on this method — infinite called infinite
            for a reason.

        :return: An infinite iterator with fulfilled schemas.
        """

        warnings.warn(
            "You're iterating over the infinite object! "
            "The schema.loop() can cause a serious memory leak."
            "Please, see: https://mimesis.name/en/latest/api.html#mimesis.schema.Schema.loop"
        )

        while True:
            yield self._schema()


    def iterator(self, iterations: int = 1) -> Iterator[JSON]: