import pytest from statsmodels.tools.docstring import Docstring, remove_parameters, Parameter good = """ This is the summary. This is the extended summary. Parameters ---------- x : int The first parameter. y : float The second parameter. z : {int, float, None} The final parameter. Returns ------- float Some floating point value. See Also -------- statsmodels.api The main API location. Notes ----- This is where the notes go. .. index: default :refguide: something, else, and more References ---------- .. [*] Reference 1 here Examples -------- Using the API is simple >>> import statsmodels.api """ bad = """ Returns ------- float Some floating point value. Unknown ------- I don't know what this section does. """ repeat = """ Returns ------- float Some floating point value. Returns ------- float Some floating point value. """ bad_yields = """ Returns ------- float The return. Yields ------ float Can't also yield. """ with_sig = """ func(x) func(x, y) func(x, y, z=1) """ + good def test_remove_parameter(): ds = Docstring(good) ds.remove_parameters('x') assert 'x : int' not in str(ds) ds = Docstring(good) ds.remove_parameters(['x', 'y']) assert 'x : int' not in str(ds) assert 'y : float' not in str(ds) with pytest.raises(ValueError): Docstring(good).remove_parameters(['w']) ds = remove_parameters(good, 'x') assert 'x : int' not in ds assert isinstance(ds, str) def test_insert_parameters(): new = Parameter('w', 'ndarray', ['An array input.']) ds = Docstring(good) ds.insert_parameters('y', new) assert 'w : ndarray' in str(ds) assert 'An array input.' in str(ds) other = Parameter('q', 'DataFrame', ['A pandas dataframe.']) ds = Docstring(good) ds.insert_parameters(None, [new, other]) assert 'w : ndarray' in str(ds) assert 'An array input.' in str(ds) assert 'q : DataFrame' in str(ds) assert 'A pandas dataframe.' in str(ds) assert '---\nw : ndarray' in str(ds) ds = Docstring(good) with pytest.raises(ValueError): ds.insert_parameters('unknown', new) def test_set_unknown(): ds = Docstring(good) with pytest.raises(ValueError): ds._ds['Unknown'] = ['unknown'] def test_replace_block(): ds = Docstring(good) ds.replace_block('summary', ['The is the new summary.']) assert 'The is the new summary.' in str(ds) ds = Docstring(good) ds.replace_block('summary', 'The is the new summary.') assert 'The is the new summary.' in str(ds) with pytest.raises(ValueError): ds.replace_block('unknown', ['The is the new summary.']) def test_repeat(): with pytest.raises(ValueError): Docstring(repeat) def test_bad(): with pytest.raises(ValueError): Docstring(bad) def test_empty_ds(): ds = Docstring(None) ds.replace_block('summary', ['The is the new summary.']) ds.remove_parameters('x') new = Parameter('w', 'ndarray', ['An array input.']) ds.insert_parameters('y', new) assert str(ds) == 'None' def test_yield_return(): with pytest.raises(ValueError): Docstring(bad_yields) def test_multiple_sig(): Docstring(with_sig)