diff --git a/README.md b/README.md index 0770f64..1eae287 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,21 @@ df = gen_cphm( print(df.head()) ``` +```python +from gen_surv import generate + +df = generate( + model="cphm", + n=100, + model_cens="uniform", + cens_par=1.0, + beta=0.5, + covar=2.0 +) + +print(df.head()) +``` + ## 🔧 Available Generators | Function | Description | diff --git a/docs/source/gen_surv.rst b/docs/source/gen_surv.rst deleted file mode 100644 index 34d6528..0000000 --- a/docs/source/gen_surv.rst +++ /dev/null @@ -1,69 +0,0 @@ -gen\_surv package -================= - -Submodules ----------- - -gen\_surv.bivariate module --------------------------- - -.. automodule:: gen_surv.bivariate - :members: - :undoc-members: - :show-inheritance: - -gen\_surv.censoring module --------------------------- - -.. automodule:: gen_surv.censoring - :members: - :undoc-members: - :show-inheritance: - -gen\_surv.cmm module --------------------- - -.. automodule:: gen_surv.cmm - :members: - :undoc-members: - :show-inheritance: - -gen\_surv.cphm module ---------------------- - -.. automodule:: gen_surv.cphm - :members: - :undoc-members: - :show-inheritance: - -gen\_surv.tdcm module ---------------------- - -.. automodule:: gen_surv.tdcm - :members: - :undoc-members: - :show-inheritance: - -gen\_surv.thmm module ---------------------- - -.. automodule:: gen_surv.thmm - :members: - :undoc-members: - :show-inheritance: - -gen\_surv.validate module -------------------------- - -.. automodule:: gen_surv.validate - :members: - :undoc-members: - :show-inheritance: - -Module contents ---------------- - -.. automodule:: gen_surv - :members: - :undoc-members: - :show-inheritance: diff --git a/docs/source/index.md b/docs/source/index.md index 7da4b49..be8cf8f 100644 --- a/docs/source/index.md +++ b/docs/source/index.md @@ -30,6 +30,21 @@ df = gen_cphm(n=100, model_cens="uniform", cens_par=1.0, beta=0.5, covar=2.0) print(df.head()) ``` +```python +from gen_surv import generate + +df = generate( + model="cphm", + n=100, + model_cens="uniform", + cens_par=1.0, + beta=0.5, + covar=2.0 +) + +print(df.head()) +``` + ## 🔗 Project Links - [Source Code](https://github.com/DiogoRibeiro7/genSurvPy) diff --git a/docs/source/modules.md b/docs/source/modules.md index a038506..ef79c53 100644 --- a/docs/source/modules.md +++ b/docs/source/modules.md @@ -16,6 +16,11 @@ undoc-members: true ::: gen_surv.thmm + options: + members: true + undoc-members: true + +::: gen_surv.interface options: members: true undoc-members: true \ No newline at end of file diff --git a/gen_surv-stubs/gen_surv/__init__.pyi b/gen_surv-stubs/gen_surv/__init__.pyi index e69de29..1bd66c2 100644 --- a/gen_surv-stubs/gen_surv/__init__.pyi +++ b/gen_surv-stubs/gen_surv/__init__.pyi @@ -0,0 +1 @@ +from .interface import generate as generate diff --git a/gen_surv-stubs/gen_surv/__main__.pyi b/gen_surv-stubs/gen_surv/__main__.pyi new file mode 100644 index 0000000..912906b --- /dev/null +++ b/gen_surv-stubs/gen_surv/__main__.pyi @@ -0,0 +1,6 @@ +from gen_surv.cmm import gen_cmm as gen_cmm +from gen_surv.cphm import gen_cphm as gen_cphm +from gen_surv.tdcm import gen_tdcm as gen_tdcm +from gen_surv.thmm import gen_thmm as gen_thmm + +def run_example(model: str): ... diff --git a/gen_surv-stubs/gen_surv/bivariate.pyi b/gen_surv-stubs/gen_surv/bivariate.pyi new file mode 100644 index 0000000..23596f2 --- /dev/null +++ b/gen_surv-stubs/gen_surv/bivariate.pyi @@ -0,0 +1 @@ +def sample_bivariate_distribution(n, dist, corr, dist_par): ... diff --git a/gen_surv-stubs/gen_surv/interface.pyi b/gen_surv-stubs/gen_surv/interface.pyi new file mode 100644 index 0000000..221c763 --- /dev/null +++ b/gen_surv-stubs/gen_surv/interface.pyi @@ -0,0 +1,6 @@ +from gen_surv.cmm import gen_cmm as gen_cmm +from gen_surv.cphm import gen_cphm as gen_cphm +from gen_surv.tdcm import gen_tdcm as gen_tdcm +from gen_surv.thmm import gen_thmm as gen_thmm + +def generate(model: str, **kwargs): ... diff --git a/gen_surv-stubs/gen_surv/tdcm.pyi b/gen_surv-stubs/gen_surv/tdcm.pyi index 2d849c7..15e7dd0 100644 --- a/gen_surv-stubs/gen_surv/tdcm.pyi +++ b/gen_surv-stubs/gen_surv/tdcm.pyi @@ -1,3 +1,4 @@ +from gen_surv.bivariate import sample_bivariate_distribution as sample_bivariate_distribution from gen_surv.censoring import rexpocens as rexpocens, runifcens as runifcens from gen_surv.validate import validate_gen_tdcm_inputs as validate_gen_tdcm_inputs diff --git a/gen_surv-stubs/gen_surv/validate.pyi b/gen_surv-stubs/gen_surv/validate.pyi index 4d49ea9..a86b28c 100644 --- a/gen_surv-stubs/gen_surv/validate.pyi +++ b/gen_surv-stubs/gen_surv/validate.pyi @@ -2,3 +2,4 @@ def validate_gen_cphm_inputs(n: int, model_cens: str, cens_par: float, covar: fl def validate_gen_cmm_inputs(n: int, model_cens: str, cens_par: float, beta: list, covar: float, rate: list): ... def validate_gen_tdcm_inputs(n: int, dist: str, corr: float, dist_par: list, model_cens: str, cens_par: float, beta: list, lam: float): ... def validate_gen_thmm_inputs(n: int, model_cens: str, cens_par: float, beta: list, covar: float, rate: list): ... +def validate_dg_biv_inputs(n: int, dist: str, corr: float, dist_par: list): ... diff --git a/gen_surv/__init__.py b/gen_surv/__init__.py index e69de29..e27e4b9 100644 --- a/gen_surv/__init__.py +++ b/gen_surv/__init__.py @@ -0,0 +1 @@ +from .interface import generate \ No newline at end of file diff --git a/gen_surv/interface.py b/gen_surv/interface.py new file mode 100644 index 0000000..a67bae1 --- /dev/null +++ b/gen_surv/interface.py @@ -0,0 +1,38 @@ +""" +Interface module to unify access to all survival data generators. + +Example: + >>> from gen_surv import generate + >>> df = generate(model="cphm", n=100, model_cens="uniform", cens_par=1.0, beta=0.5, covar=2.0) +""" + +from gen_surv.cphm import gen_cphm +from gen_surv.cmm import gen_cmm +from gen_surv.tdcm import gen_tdcm +from gen_surv.thmm import gen_thmm + + +_model_map = { + "cphm": gen_cphm, + "cmm": gen_cmm, + "tdcm": gen_tdcm, + "thmm": gen_thmm, +} + + +def generate(model: str, **kwargs): + """ + Generic interface to generate survival data from various models. + + Parameters: + model (str): One of ["cphm", "cmm", "tdcm", "thmm"] + **kwargs: Arguments forwarded to the selected model generator. + + Returns: + pd.DataFrame: Simulated survival data. + """ + model = model.lower() + if model not in _model_map: + raise ValueError(f"Unknown model '{model}'. Choose from {list(_model_map.keys())}.") + + return _model_map[model](**kwargs) diff --git a/pyproject.toml b/pyproject.toml index cdda6da..d838acc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,7 +8,7 @@ readme = "README.md" packages = [{ include = "gen_surv" }] homepage = "https://github.com/DiogoRibeiro7/genSurvPy" repository = "https://github.com/DiogoRibeiro7/genSurvPy" -documentation = "https://gen-surv.readthedocs.io/en/stable/" +documentation = "https://gensurvpy.readthedocs.io/en/stable/" [tool.poetry.dependencies] python = "^3.9" diff --git a/tests/test_interface.py b/tests/test_interface.py new file mode 100644 index 0000000..cee6a81 --- /dev/null +++ b/tests/test_interface.py @@ -0,0 +1,16 @@ +from gen_surv import generate + +def test_generate_tdcm_runs(): + df = generate( + model="tdcm", + n=10, + dist="weibull", + corr=0.5, + dist_par=[1, 2, 1, 2], + model_cens="uniform", + cens_par=1.0, + beta=[0.1, 0.2, 0.3], + lam=1.0 + ) + assert not df.empty + \ No newline at end of file