import numpy as np
import pytest


# add a commandline option to pytest
def pytest_addoption(parser):
    """Add random seed option to py.test.
    """
    parser.addoption('--seed', dest='seed', type=int, action='store',
                     help='set random seed')


# configure pytest to automatically set the rnd seed if not passed on CLI
def pytest_configure(config):
    seed = config.getvalue("seed")
    # if seed was not set by the user, we set one now
    if seed is None or seed == ('NO', 'DEFAULT'):
        config.option.seed = int(np.random.randint(2**31-1))


def pytest_report_header(config):
    return f'Using random seed: {config.option.seed}'


@pytest.fixture
def random_state(request):
    random_state = np.random.RandomState(request.config.option.seed)
    return random_state
