# Path: catsim/simulation.py
# class Initializer(Simulable, metaclass=ABCMeta):
#     """Base class for CAT initializers"""
# 
#     def __init__(self):
#         super().__init__()
# 
#     @abstractmethod
#     def initialize(self, index: int) -> float:
#         """Selects an examinee's initial :math:`\\theta` value
# 
#         :param index: the index of the current examinee
#         :returns: examinee's initial :math:`\\theta` value
#         """
#         pass


import numpy
from .simulation import Initializer



class RandomInitializer(Initializer):
    """Randomly initializes the first estimate of an examinee's ability

    :param dist_type: either `uniform` or `normal`
    :param dist_params: a tuple containing minimum and maximum values for the
                        uniform distribution (in no particular order) or the average
                        and standard deviation values for the normal distribution
                        (in this particular order)."""

    def __str__(self):
        return "Random Initializer"

    def __init__(self, dist_type: str = "uniform", dist_params: tuple = (-5, 5)):
        super(RandomInitializer, self).__init__()

        available_distributions = ["uniform", "normal"]

# Path: catsim/simulation.py
# class Initializer(Simulable, metaclass=ABCMeta):
#     """Base class for CAT initializers"""
# 
#     def __init__(self):
#         super().__init__()
# 
#     @abstractmethod
#     def initialize(self, index: int) -> float:
#         """Selects an examinee's initial :math:`\\theta` value
# 
#         :param index: the index of the current examinee
#         :returns: examinee's initial :math:`\\theta` value
#         """
#         pass


# Path: catsim/initialization.py
import numpy
from .simulation import Initializer




class RandomInitializer(Initializer):
    """Randomly initializes the first estimate of an examinee's ability

    :param dist_type: either `uniform` or `normal`
    :param dist_params: a tuple containing minimum and maximum values for the
                        uniform distribution (in no particular order) or the average
                        and standard deviation values for the normal distribution
                        (in this particular order)."""

    def __str__(self):
        return "Random Initializer"

    def __init__(self, dist_type: str = "uniform", dist_params: tuple = (-5, 5)):
        super(RandomInitializer, self).__init__()

        available_distributions = ["uniform", "normal"]

        if dist_type not in available_distributions: