Exemplo n.º 1
0
def test_apply_argspec_transforms():
    def curie(fname, when, where, field1='Physics', field2='Chemistry'):
        pass
    xforms = pm.compile_argspec_transforms(
        curie, {'population': 0, 'generator_name': ['field1', 'field2']})
    assert ['when', 'where'] == xforms['required_names']
    log = lambda: None
    log.generator_name = 'genny'
    (dargs, dkwargs) = pm.apply_argspec_transforms(
        log, xforms, ('one', 'two'), {'field1': 'zip!'})
    assert [log, 'one', 'two', 'zip!', 'genny'] == dargs
    assert {} == dkwargs  # Only using dkwargs for varkw at this point.

    (dargs, dkwargs) = pm.apply_argspec_transforms(
        log, xforms, ('when', 'where', 'f_one', 'f_two'), {})
    assert [log, 'when', 'where', 'f_one', 'f_two'] == dargs
    assert {} == dkwargs
Exemplo n.º 2
0
def test_variable_arglengths():
    pop = quickstart('foo', df=pandas.DataFrame({'a': [11, 22]}),
                     session_capture_name='test_population.py')
    spec = pm.compile_argspec_transforms(hasvarargs, {'population_name': 0})
    assert ['_u'] == spec['required_names']
    assert 2 == len(spec['required_transformers'])
    assert ['pop'] == spec['optional_names']
    assert 1 == len(spec['optional_transformers'])
    xfm = spec['optional_transformers']['pop']
    assert None == xfm(pop, {})
    assert 7 == xfm(pop, {'pop': 7})
    assert None == xfm(pop, {'zip': 7})
    assert 'args' == spec['varargs']
    assert None == spec['varkw']
    
    assert ('foo', 1, 3) == pop.hasvarargs("U", 1, 2, 3, 4)
    assert ('foo', 'pip', 3) == pop.hasvarkw("U", pop='pip', a=1, b=2, c=3)
    assert ('foo', None, 0, 0) == pop.hasboth_arg('U', 'V')
    assert ('foo', 'W', 1, 2) == pop.hasboth_arg("U", "V", "W", "X",
                                                 y="Y", z="Z")
    assert ('foo', 'foo', 0, 0) == pop.hasboth_argkwarg('U', 'V')
    assert ('foo', 'W', 1, 2) == pop.hasboth_argkwarg("U", "V", "W", "X",
                                                      y="Y", z="Z")
    assert ('foo', 'fizz', 0, 0) == pop.hasboth_haspop('U', 'V')
    
    with pytest.raises(TypeError) as exc:
        pop.hasvarargs("U", 1, 2, 3, 4, pop='pip')
    assert "multiple values for keyword argument 'pop'" in str(exc.value)
    with pytest.raises(TypeError):
        pop.hasvarargs("U", 1, 2, a=1, b=2)
    with pytest.raises(TypeError):
        pop.hasvarkw("U", 1, 2, 3, 4, 5, 6, 7)
    with pytest.raises(TypeError):
        pop.hasboth_arg()
    with pytest.raises(TypeError):
        pop.hasboth_argkwarg()
        
    # Can only fill named parameters with population-implicit values.
    with pytest.raises(IndexError):
        @pm.population_method(population_name='0')
        def cannot_fill_unnamed_kwargs(*args, **kwargs):
            pass
    with pytest.raises(IndexError):
        @pm.population_method(population_name='pop')
        def cannot_fill_unnamed_args(*args, **kwargs):
            pass
Exemplo n.º 3
0
def test_apply_argspec_transforms():
    def curie(fname, when, where, field1='Physics', field2='Chemistry'):
        pass
    xforms = pm.compile_argspec_transforms(
        curie, {'population': 0, 'generator_name': ['field1', 'field2']})
    assert ['when', 'where'] == xforms['required_names']
    log = lambda: None
    log.generator_name = 'genny'
    (dargs, dkwargs) = pm.apply_argspec_transforms(
        log, xforms, ('one', 'two'), {'field1': 'zip!'})
    assert [log, 'one', 'two', 'zip!', 'genny'] == dargs
    assert {} == dkwargs  # Only using dkwargs for varkw at this point.

    (dargs, dkwargs) = pm.apply_argspec_transforms(
        log, xforms, ('when', 'where', 'f_one', 'f_two'), {})
    assert [log, 'when', 'where', 'f_one', 'f_two'] == dargs
    assert {} == dkwargs
Exemplo n.º 4
0
def test_variable_arglengths():
    pop = Population('foo', df=pandas.DataFrame({'a': [11, 22]}),
                     session_capture_name='test_population.py')
    spec = pm.compile_argspec_transforms(hasvarargs, {'population_name': 0})
    assert ['_u'] == spec['required_names']
    assert 2 == len(spec['required_transformers'])
    assert ['pop'] == spec['optional_names']
    assert 1 == len(spec['optional_transformers'])
    xfm = spec['optional_transformers']['pop']
    assert None == xfm(pop, {})
    assert 7 == xfm(pop, {'pop': 7})
    assert None == xfm(pop, {'zip': 7})
    assert 'args' == spec['varargs']
    assert None == spec['varkw']

    assert ('foo', 1, 3) == pop.hasvarargs("U", 1, 2, 3, 4)
    assert ('foo', 'pip', 3) == pop.hasvarkw("U", pop='pip', a=1, b=2, c=3)
    assert ('foo', None, 0, 0) == pop.hasboth_arg('U', 'V')
    assert ('foo', 'W', 1, 2) == pop.hasboth_arg("U", "V", "W", "X",
                                                 y="Y", z="Z")
    assert ('foo', 'foo', 0, 0) == pop.hasboth_argkwarg('U', 'V')
    assert ('foo', 'W', 1, 2) == pop.hasboth_argkwarg("U", "V", "W", "X",
                                                      y="Y", z="Z")
    assert ('foo', 'fizz', 0, 0) == pop.hasboth_haspop('U', 'V')

    with pytest.raises(TypeError) as exc:
        pop.hasvarargs("U", 1, 2, 3, 4, pop='pip')
    assert "multiple values for keyword argument 'pop'" in str(exc.value)
    with pytest.raises(TypeError):
        pop.hasvarargs("U", 1, 2, a=1, b=2)
    with pytest.raises(TypeError):
        pop.hasvarkw("U", 1, 2, 3, 4, 5, 6, 7)
    with pytest.raises(TypeError):
        pop.hasboth_arg()
    with pytest.raises(TypeError):
        pop.hasboth_argkwarg()

    # Can only fill named parameters with population-implicit values.
    with pytest.raises(IndexError):
        @pm.population_method(population_name='0')
        def cannot_fill_unnamed_kwargs(*args, **kwargs):
            pass
    with pytest.raises(IndexError):
        @pm.population_method(population_name='pop')
        def cannot_fill_unnamed_args(*args, **kwargs):
            pass
Exemplo n.º 5
0
def test_compile_argspec_transforms():
    def curie(fname, when, where, field1='Physics', field2='Chemistry'):
        pass
    xforms = pm.compile_argspec_transforms(curie, {})
    assert ['fname', 'when', 'where'] == xforms['required_names']
    assert 3 == len(xforms['required_transformers'])
    for i, xform in enumerate(xforms['required_transformers']):
        assert i+1 == xform(None, [1, 2, 3])
    assert 2 == len(xforms['optional_transformers'])

    xforms = pm.compile_argspec_transforms(
        curie, {'population': 0, 'generator_name': ['field1', 'field2']})
    assert ['when', 'where'] == xforms['required_names']
    dummy_self = lambda: None  # Can set attrs on this, unlike an object().
    assert 3 == len(xforms['required_transformers'])
    assert dummy_self == xforms['required_transformers'][0](dummy_self, [])
    assert 'boo' == xforms['required_transformers'][1](dummy_self, ['boo'])
    assert 'bee' == xforms['required_transformers'][2](dummy_self, [1, 'bee'])
    assert 2 == len(xforms['optional_transformers'])
    assert 'good' == xforms['optional_transformers']['field1'](
        dummy_self, {'field1': 'good'})
    dummy_self.generator_name = 'great'
    assert 'great' == xforms['optional_transformers']['field2'](
        dummy_self, {'field1': 'bad'})

    with pytest.raises(IndexError):
        xforms = pm.compile_argspec_transforms(
            curie, {'population': -1, 'generator_name': ['field1', 'field2']})

    with pytest.raises(IndexError):
        xforms = pm.compile_argspec_transforms(
            curie, {'population': 1, 'population_to_bdb': 1})

    with pytest.raises(IndexError):
        xforms = pm.compile_argspec_transforms(
            curie, {'population': 'field1', 'population_to_bdb': ['field1']})

    with pytest.raises(IndexError):
        xforms = pm.compile_argspec_transforms(
            curie, {'population': 'no_such_option'})

    with pytest.raises(IndexError):
        xforms = pm.compile_argspec_transforms(
            curie, {'population': 1, 'population_to_bdb': 1})
Exemplo n.º 6
0
def test_compile_argspec_transforms():
    def curie(fname, when, where, field1='Physics', field2='Chemistry'):
        pass
    xforms = pm.compile_argspec_transforms(curie, {})
    assert ['fname', 'when', 'where'] == xforms['required_names']
    assert 3 == len(xforms['required_transformers'])
    for i, xform in enumerate(xforms['required_transformers']):
        assert i+1 == xform(None, [1, 2, 3])
    assert 2 == len(xforms['optional_transformers'])

    xforms = pm.compile_argspec_transforms(
        curie, {'population': 0, 'generator_name': ['field1', 'field2']})
    assert ['when', 'where'] == xforms['required_names']
    dummy_self = lambda: None  # Can set attrs on this, unlike an object().
    assert 3 == len(xforms['required_transformers'])
    assert dummy_self == xforms['required_transformers'][0](dummy_self, [])
    assert 'boo' == xforms['required_transformers'][1](dummy_self, ['boo'])
    assert 'bee' == xforms['required_transformers'][2](dummy_self, [1, 'bee'])
    assert 2 == len(xforms['optional_transformers'])
    assert 'good' == xforms['optional_transformers']['field1'](
        dummy_self, {'field1': 'good'})
    dummy_self.generator_name = 'great'
    assert 'great' == xforms['optional_transformers']['field2'](
        dummy_self, {'field1': 'bad'})

    with pytest.raises(IndexError):
        xforms = pm.compile_argspec_transforms(
            curie, {'population': -1, 'generator_name': ['field1', 'field2']})

    with pytest.raises(IndexError):
        xforms = pm.compile_argspec_transforms(
            curie, {'population': 1, 'population_to_bdb': 1})

    with pytest.raises(IndexError):
        xforms = pm.compile_argspec_transforms(
            curie, {'population': 'field1', 'population_to_bdb': ['field1']})

    with pytest.raises(IndexError):
        xforms = pm.compile_argspec_transforms(
            curie, {'population': 'no_such_option'})

    with pytest.raises(IndexError):
        xforms = pm.compile_argspec_transforms(
            curie, {'population': 1, 'population_to_bdb': 1})