diff --git a/doc/source/api/base_class/relife.model.LifetimeModel.rst b/doc/source/api/base_class/relife.model.LifetimeModel.rst deleted file mode 100644 index 0ee493a1..00000000 --- a/doc/source/api/base_class/relife.model.LifetimeModel.rst +++ /dev/null @@ -1,66 +0,0 @@ - - - -LifetimeModel -============= - -.. currentmodule:: relife.model - -.. autoclass:: LifetimeModel - :members: - :inherited-members: - :exclude-members: __init__, __new__ - - - .. rubric:: Methods - - .. autosummary:: - :nosignatures: - - - - - ~LifetimeModel.cdf - - - ~LifetimeModel.chf - - - ~LifetimeModel.hf - - - ~LifetimeModel.ichf - - - ~LifetimeModel.isf - - - ~LifetimeModel.ls_integrate - - - ~LifetimeModel.mean - - - ~LifetimeModel.median - - - ~LifetimeModel.moment - - - ~LifetimeModel.mrl - - - ~LifetimeModel.pdf - - - ~LifetimeModel.ppf - - - ~LifetimeModel.rvs - - - ~LifetimeModel.sf - - - ~LifetimeModel.var - \ No newline at end of file diff --git a/doc/source/api/base_class/relife.model.Parameters.rst b/doc/source/api/base_class/relife.model.Parameters.rst deleted file mode 100644 index d7b16f36..00000000 --- a/doc/source/api/base_class/relife.model.Parameters.rst +++ /dev/null @@ -1,51 +0,0 @@ - - - -Parameters -========== - -.. currentmodule:: relife.model - -.. autoclass:: Parameters - :members: - :inherited-members: - :exclude-members: __init__, __new__ - - - .. rubric:: Methods - - .. autosummary:: - :nosignatures: - - - - - ~Parameters.all_items - - - ~Parameters.del_leaf - - - ~Parameters.get_leaf - - - ~Parameters.items_walk - - - ~Parameters.set_leaf - - - ~Parameters.set_names - - - ~Parameters.set_values - - - ~Parameters.update - - - ~Parameters.update_items - - - ~Parameters.update_parents - \ No newline at end of file diff --git a/doc/source/api/base_class/relife.model.ParametricLifetimeModel.rst b/doc/source/api/base_class/relife.model.ParametricLifetimeModel.rst deleted file mode 100644 index 067abe44..00000000 --- a/doc/source/api/base_class/relife.model.ParametricLifetimeModel.rst +++ /dev/null @@ -1,81 +0,0 @@ - - - -ParametricLifetimeModel -======================= - -.. currentmodule:: relife.model - -.. autoclass:: ParametricLifetimeModel - :members: - :inherited-members: - :exclude-members: __init__, __new__ - - - .. rubric:: Methods - - .. autosummary:: - :nosignatures: - - - - - ~ParametricLifetimeModel.cdf - - - ~ParametricLifetimeModel.chf - - - ~ParametricLifetimeModel.compose_with - - - ~ParametricLifetimeModel.copy - - - ~ParametricLifetimeModel.fit - - - ~ParametricLifetimeModel.hf - - - ~ParametricLifetimeModel.ichf - - - ~ParametricLifetimeModel.init_params - - - ~ParametricLifetimeModel.isf - - - ~ParametricLifetimeModel.ls_integrate - - - ~ParametricLifetimeModel.mean - - - ~ParametricLifetimeModel.median - - - ~ParametricLifetimeModel.moment - - - ~ParametricLifetimeModel.mrl - - - ~ParametricLifetimeModel.new_params - - - ~ParametricLifetimeModel.pdf - - - ~ParametricLifetimeModel.ppf - - - ~ParametricLifetimeModel.rvs - - - ~ParametricLifetimeModel.sf - - - ~ParametricLifetimeModel.var - \ No newline at end of file diff --git a/doc/source/api/base_class/relife.model.ParametricModel.rst b/doc/source/api/base_class/relife.model.ParametricModel.rst deleted file mode 100644 index 4924ab59..00000000 --- a/doc/source/api/base_class/relife.model.ParametricModel.rst +++ /dev/null @@ -1,30 +0,0 @@ - - - -ParametricModel -=============== - -.. currentmodule:: relife.model - -.. autoclass:: ParametricModel - :members: - :inherited-members: - :exclude-members: __init__, __new__ - - - .. rubric:: Methods - - .. autosummary:: - :nosignatures: - - - - - ~ParametricModel.compose_with - - - ~ParametricModel.copy - - - ~ParametricModel.new_params - \ No newline at end of file diff --git a/doc/source/api/decorator_models/relife.model.AgeReplacementModel.rst b/doc/source/api/decorator_models/relife.model.AgeReplacementModel.rst deleted file mode 100644 index da78bbb9..00000000 --- a/doc/source/api/decorator_models/relife.model.AgeReplacementModel.rst +++ /dev/null @@ -1,137 +0,0 @@ - - - - - - -AgeReplacementModel -=================== - -.. currentmodule:: relife.model - -.. autoclass:: AgeReplacementModel - :members: - :inherited-members: - :exclude-members: __init__, __new__, compose_with, new_params, init_params - - .. rubric:: Methods - - **Survival functions** - - .. autosummary:: - :nosignatures: - - - - - - ~AgeReplacementModel.chf - - - ~AgeReplacementModel.hf - - - ~AgeReplacementModel.ichf - - - ~AgeReplacementModel.isf - - - - - - - ~AgeReplacementModel.mrl - - - - - - ~AgeReplacementModel.sf - - - - .. autosummary:: - :nosignatures: - - - - - ~AgeReplacementModel.cdf - - - - - - - - - - - - ~AgeReplacementModel.pdf - - - ~AgeReplacementModel.ppf - - - - - - **Statistics** - - .. autosummary:: - :nosignatures: - - - - - - - - - - - ~AgeReplacementModel.mean - - - ~AgeReplacementModel.median - - - ~AgeReplacementModel.moment - - - - - - - - ~AgeReplacementModel.var - - - **Other methods** - - .. autosummary:: - :nosignatures: - - - - - - - - - - ~AgeReplacementModel.ls_integrate - - - - - - - - - ~AgeReplacementModel.rvs - - - \ No newline at end of file diff --git a/doc/source/api/decorator_models/relife.model.EquilibriumDistribution.rst b/doc/source/api/decorator_models/relife.model.EquilibriumDistribution.rst deleted file mode 100644 index c6aff4ba..00000000 --- a/doc/source/api/decorator_models/relife.model.EquilibriumDistribution.rst +++ /dev/null @@ -1,137 +0,0 @@ - - - - - - -EquilibriumDistribution -======================= - -.. currentmodule:: relife.model - -.. autoclass:: EquilibriumDistribution - :members: - :inherited-members: - :exclude-members: __init__, __new__, compose_with, new_params, init_params - - .. rubric:: Methods - - **Survival functions** - - .. autosummary:: - :nosignatures: - - - - - - ~EquilibriumDistribution.chf - - - ~EquilibriumDistribution.hf - - - ~EquilibriumDistribution.ichf - - - ~EquilibriumDistribution.isf - - - - - - - ~EquilibriumDistribution.mrl - - - - - - ~EquilibriumDistribution.sf - - - - .. autosummary:: - :nosignatures: - - - - - ~EquilibriumDistribution.cdf - - - - - - - - - - - - ~EquilibriumDistribution.pdf - - - ~EquilibriumDistribution.ppf - - - - - - **Statistics** - - .. autosummary:: - :nosignatures: - - - - - - - - - - - ~EquilibriumDistribution.mean - - - ~EquilibriumDistribution.median - - - ~EquilibriumDistribution.moment - - - - - - - - ~EquilibriumDistribution.var - - - **Other methods** - - .. autosummary:: - :nosignatures: - - - - - - - - - - ~EquilibriumDistribution.ls_integrate - - - - - - - - - ~EquilibriumDistribution.rvs - - - \ No newline at end of file diff --git a/doc/source/api/decorator_models/relife.model.LeftTruncatedModel.rst b/doc/source/api/decorator_models/relife.model.LeftTruncatedModel.rst deleted file mode 100644 index 756d080a..00000000 --- a/doc/source/api/decorator_models/relife.model.LeftTruncatedModel.rst +++ /dev/null @@ -1,137 +0,0 @@ - - - - - - -LeftTruncatedModel -================== - -.. currentmodule:: relife.model - -.. autoclass:: LeftTruncatedModel - :members: - :inherited-members: - :exclude-members: __init__, __new__, compose_with, new_params, init_params - - .. rubric:: Methods - - **Survival functions** - - .. autosummary:: - :nosignatures: - - - - - - ~LeftTruncatedModel.chf - - - ~LeftTruncatedModel.hf - - - ~LeftTruncatedModel.ichf - - - ~LeftTruncatedModel.isf - - - - - - - ~LeftTruncatedModel.mrl - - - - - - ~LeftTruncatedModel.sf - - - - .. autosummary:: - :nosignatures: - - - - - ~LeftTruncatedModel.cdf - - - - - - - - - - - - ~LeftTruncatedModel.pdf - - - ~LeftTruncatedModel.ppf - - - - - - **Statistics** - - .. autosummary:: - :nosignatures: - - - - - - - - - - - ~LeftTruncatedModel.mean - - - ~LeftTruncatedModel.median - - - ~LeftTruncatedModel.moment - - - - - - - - ~LeftTruncatedModel.var - - - **Other methods** - - .. autosummary:: - :nosignatures: - - - - - - - - - - ~LeftTruncatedModel.ls_integrate - - - - - - - - - ~LeftTruncatedModel.rvs - - - \ No newline at end of file diff --git a/doc/source/api/index.rst b/doc/source/api/index.rst index 0335fe80..5e83fe2d 100644 --- a/doc/source/api/index.rst +++ b/doc/source/api/index.rst @@ -18,13 +18,13 @@ data like parameters, other nested models, etc. :caption: Lifetime models :nosignatures: - Exponential - Weibull - Gompertz - Gamma - LogLogistic - ProportionalHazard - AFT + models.Exponential + models.Weibull + models.Gompertz + models.Gamma + models.LogLogistic + models.ProportionalHazard + models.AFT .. rubric:: Non-parametric lifetime estimators @@ -39,10 +39,10 @@ parameters but estimations of functions values. :caption: Non-parametric lifetime estimators :nosignatures: - ECDF - KaplanMeier - NelsonAalen - Turnbull + models.ECDF + models.KaplanMeier + models.NelsonAalen + models.Turnbull .. rubric:: Renewal policies @@ -57,10 +57,10 @@ data. :caption: Renewal policies :nosignatures: - OneCycleAgeReplacementPolicy - OneCycleRunToFailure - RunToFailure - AgeReplacementPolicy + policies.OneCycleAgeReplacementPolicy + policies.OneCycleRunToFailure + policies.RunToFailure + policies.AgeReplacementPolicy .. rubric:: Likelihoods @@ -70,28 +70,28 @@ data. :caption: Likelihoods :nosignatures: - likelihoods.LikelihoodFromLifetimes + core.likelihoods.LikelihoodFromLifetimes -.. rubric:: Decorator models +.. rubric:: Nested models -A decorator model is basically a `LifetimeModel` object that wraps another `LifetimeModel` object set as a baseline. +A nested model is basically a `LifetimeModel` object that wraps another `LifetimeModel` object set as a baseline. Those models mainly deserves to some functionnalities in `Policy` object but advanced users can clearly use them for a specific purpose. For instance `LeftTruncatedModel` wraps a baseline model by overriding some of its probibability function in order to take into account the time condition imposed by a left trunctation `a0`. .. autosummary:: - :toctree: decorator_models + :toctree: nested_models :template: parametric-lifetime-model-class.rst - :caption: Decorator models + :caption: Nested models :nosignatures: - model.AgeReplacementModel - model.LeftTruncatedModel - model.EquilibriumDistribution + core.nested_model.AgeReplacementModel + core.nested_model.LeftTruncatedModel + core.nested_model.EquilibriumDistribution -.. rubric:: Base class +.. rubric:: Base model -What we call `base class` are objects (in Python class are objects) used at the core of ReLife subsystems. +What we call `base model` are objects (in Python class are objects) used at the core of ReLife subsystems. For beginners, it is not necessary to know them. If you start to inspect ReLife code, you will encounter them regularly in inheritance hierarchy. In fact, most objects created for fiability theory inherits from one of those objects. One can think of them as `engines` that empower objects with special functionalities to make ReLife model creation easier. @@ -103,7 +103,7 @@ think of them as `engines` that empower objects with special functionalities to :caption: Base class :nosignatures: - model.Parameters - model.ParametricModel - model.LifetimeModel - model.ParametricLifetimeModel + core.model.Parameters + core.model.ParametricModel + core.model.LifetimeModel + core.model.ParametricLifetimeModel diff --git a/doc/source/api/lifetime_models/relife.AFT.rst b/doc/source/api/lifetime_models/relife.AFT.rst deleted file mode 100644 index 5aa46ea1..00000000 --- a/doc/source/api/lifetime_models/relife.AFT.rst +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - -AFT -=== - -.. currentmodule:: relife - -.. autoclass:: AFT - :members: - :inherited-members: - :exclude-members: __init__, __new__, compose_with, new_params, init_params - - .. rubric:: Methods - - **Survival functions** - - .. autosummary:: - :nosignatures: - - - - - - ~AFT.chf - - - - - ~AFT.dhf - - - - ~AFT.hf - - - ~AFT.ichf - - - - ~AFT.isf - - - - ~AFT.jac_chf - - - ~AFT.jac_hf - - - - - - - - - ~AFT.mrl - - - - - - - ~AFT.sf - - - - .. autosummary:: - :nosignatures: - - - - - ~AFT.cdf - - - - - - - - - - - - - - - - - - - - - - - ~AFT.pdf - - - ~AFT.ppf - - - - - - **Statistics** - - .. autosummary:: - :nosignatures: - - - - - - - - - - - - - - - - - - - - - ~AFT.mean - - - ~AFT.median - - - ~AFT.moment - - - - - - - - - ~AFT.var - - - **Other methods** - - .. autosummary:: - :nosignatures: - - - - - - - - ~AFT.copy - - - - ~AFT.fit - - - - - - - ~AFT.jac_cdf - - - - - ~AFT.jac_pdf - - - ~AFT.jac_sf - - - ~AFT.ls_integrate - - - - - - - - - - ~AFT.rvs - - - \ No newline at end of file diff --git a/doc/source/api/lifetime_models/relife.Exponential.rst b/doc/source/api/lifetime_models/relife.Exponential.rst deleted file mode 100644 index 3bcd21a9..00000000 --- a/doc/source/api/lifetime_models/relife.Exponential.rst +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - -Exponential -=========== - -.. currentmodule:: relife - -.. autoclass:: Exponential - :members: - :inherited-members: - :exclude-members: __init__, __new__, compose_with, new_params, init_params - - .. rubric:: Methods - - **Survival functions** - - .. autosummary:: - :nosignatures: - - - - - - ~Exponential.chf - - - - - ~Exponential.dhf - - - - ~Exponential.hf - - - ~Exponential.ichf - - - - ~Exponential.isf - - - - ~Exponential.jac_chf - - - ~Exponential.jac_hf - - - - - - - - - ~Exponential.mrl - - - - - - - ~Exponential.sf - - - - .. autosummary:: - :nosignatures: - - - - - ~Exponential.cdf - - - - - - - - - - - - - - - - - - - - - - - ~Exponential.pdf - - - ~Exponential.ppf - - - - - - **Statistics** - - .. autosummary:: - :nosignatures: - - - - - - - - - - - - - - - - - - - - - ~Exponential.mean - - - ~Exponential.median - - - ~Exponential.moment - - - - - - - - - ~Exponential.var - - - **Other methods** - - .. autosummary:: - :nosignatures: - - - - - - - - ~Exponential.copy - - - - ~Exponential.fit - - - - - - - ~Exponential.jac_cdf - - - - - ~Exponential.jac_pdf - - - ~Exponential.jac_sf - - - ~Exponential.ls_integrate - - - - - - - - - - ~Exponential.rvs - - - \ No newline at end of file diff --git a/doc/source/api/lifetime_models/relife.Gamma.rst b/doc/source/api/lifetime_models/relife.Gamma.rst deleted file mode 100644 index 7fa7cb33..00000000 --- a/doc/source/api/lifetime_models/relife.Gamma.rst +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - -Gamma -===== - -.. currentmodule:: relife - -.. autoclass:: Gamma - :members: - :inherited-members: - :exclude-members: __init__, __new__, compose_with, new_params, init_params - - .. rubric:: Methods - - **Survival functions** - - .. autosummary:: - :nosignatures: - - - - - - ~Gamma.chf - - - - - ~Gamma.dhf - - - - ~Gamma.hf - - - ~Gamma.ichf - - - - ~Gamma.isf - - - - ~Gamma.jac_chf - - - ~Gamma.jac_hf - - - - - - - - - ~Gamma.mrl - - - - - - - ~Gamma.sf - - - - .. autosummary:: - :nosignatures: - - - - - ~Gamma.cdf - - - - - - - - - - - - - - - - - - - - - - - ~Gamma.pdf - - - ~Gamma.ppf - - - - - - **Statistics** - - .. autosummary:: - :nosignatures: - - - - - - - - - - - - - - - - - - - - - ~Gamma.mean - - - ~Gamma.median - - - ~Gamma.moment - - - - - - - - - ~Gamma.var - - - **Other methods** - - .. autosummary:: - :nosignatures: - - - - - - - - ~Gamma.copy - - - - ~Gamma.fit - - - - - - - ~Gamma.jac_cdf - - - - - ~Gamma.jac_pdf - - - ~Gamma.jac_sf - - - ~Gamma.ls_integrate - - - - - - - - - - ~Gamma.rvs - - - \ No newline at end of file diff --git a/doc/source/api/lifetime_models/relife.Gompertz.rst b/doc/source/api/lifetime_models/relife.Gompertz.rst deleted file mode 100644 index 71c3c2db..00000000 --- a/doc/source/api/lifetime_models/relife.Gompertz.rst +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - -Gompertz -======== - -.. currentmodule:: relife - -.. autoclass:: Gompertz - :members: - :inherited-members: - :exclude-members: __init__, __new__, compose_with, new_params, init_params - - .. rubric:: Methods - - **Survival functions** - - .. autosummary:: - :nosignatures: - - - - - - ~Gompertz.chf - - - - - ~Gompertz.dhf - - - - ~Gompertz.hf - - - ~Gompertz.ichf - - - - ~Gompertz.isf - - - - ~Gompertz.jac_chf - - - ~Gompertz.jac_hf - - - - - - - - - ~Gompertz.mrl - - - - - - - ~Gompertz.sf - - - - .. autosummary:: - :nosignatures: - - - - - ~Gompertz.cdf - - - - - - - - - - - - - - - - - - - - - - - ~Gompertz.pdf - - - ~Gompertz.ppf - - - - - - **Statistics** - - .. autosummary:: - :nosignatures: - - - - - - - - - - - - - - - - - - - - - ~Gompertz.mean - - - ~Gompertz.median - - - ~Gompertz.moment - - - - - - - - - ~Gompertz.var - - - **Other methods** - - .. autosummary:: - :nosignatures: - - - - - - - - ~Gompertz.copy - - - - ~Gompertz.fit - - - - - - - ~Gompertz.jac_cdf - - - - - ~Gompertz.jac_pdf - - - ~Gompertz.jac_sf - - - ~Gompertz.ls_integrate - - - - - - - - - - ~Gompertz.rvs - - - \ No newline at end of file diff --git a/doc/source/api/lifetime_models/relife.LogLogistic.rst b/doc/source/api/lifetime_models/relife.LogLogistic.rst deleted file mode 100644 index 5a09f516..00000000 --- a/doc/source/api/lifetime_models/relife.LogLogistic.rst +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - -LogLogistic -=========== - -.. currentmodule:: relife - -.. autoclass:: LogLogistic - :members: - :inherited-members: - :exclude-members: __init__, __new__, compose_with, new_params, init_params - - .. rubric:: Methods - - **Survival functions** - - .. autosummary:: - :nosignatures: - - - - - - ~LogLogistic.chf - - - - - ~LogLogistic.dhf - - - - ~LogLogistic.hf - - - ~LogLogistic.ichf - - - - ~LogLogistic.isf - - - - ~LogLogistic.jac_chf - - - ~LogLogistic.jac_hf - - - - - - - - - ~LogLogistic.mrl - - - - - - - ~LogLogistic.sf - - - - .. autosummary:: - :nosignatures: - - - - - ~LogLogistic.cdf - - - - - - - - - - - - - - - - - - - - - - - ~LogLogistic.pdf - - - ~LogLogistic.ppf - - - - - - **Statistics** - - .. autosummary:: - :nosignatures: - - - - - - - - - - - - - - - - - - - - - ~LogLogistic.mean - - - ~LogLogistic.median - - - ~LogLogistic.moment - - - - - - - - - ~LogLogistic.var - - - **Other methods** - - .. autosummary:: - :nosignatures: - - - - - - - - ~LogLogistic.copy - - - - ~LogLogistic.fit - - - - - - - ~LogLogistic.jac_cdf - - - - - ~LogLogistic.jac_pdf - - - ~LogLogistic.jac_sf - - - ~LogLogistic.ls_integrate - - - - - - - - - - ~LogLogistic.rvs - - - \ No newline at end of file diff --git a/doc/source/api/lifetime_models/relife.ProportionalHazard.rst b/doc/source/api/lifetime_models/relife.ProportionalHazard.rst deleted file mode 100644 index 2ef3c3ad..00000000 --- a/doc/source/api/lifetime_models/relife.ProportionalHazard.rst +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - -ProportionalHazard -================== - -.. currentmodule:: relife - -.. autoclass:: ProportionalHazard - :members: - :inherited-members: - :exclude-members: __init__, __new__, compose_with, new_params, init_params - - .. rubric:: Methods - - **Survival functions** - - .. autosummary:: - :nosignatures: - - - - - - ~ProportionalHazard.chf - - - - - ~ProportionalHazard.dhf - - - - ~ProportionalHazard.hf - - - ~ProportionalHazard.ichf - - - - ~ProportionalHazard.isf - - - - ~ProportionalHazard.jac_chf - - - ~ProportionalHazard.jac_hf - - - - - - - - - ~ProportionalHazard.mrl - - - - - - - ~ProportionalHazard.sf - - - - .. autosummary:: - :nosignatures: - - - - - ~ProportionalHazard.cdf - - - - - - - - - - - - - - - - - - - - - - - ~ProportionalHazard.pdf - - - ~ProportionalHazard.ppf - - - - - - **Statistics** - - .. autosummary:: - :nosignatures: - - - - - - - - - - - - - - - - - - - - - ~ProportionalHazard.mean - - - ~ProportionalHazard.median - - - ~ProportionalHazard.moment - - - - - - - - - ~ProportionalHazard.var - - - **Other methods** - - .. autosummary:: - :nosignatures: - - - - - - - - ~ProportionalHazard.copy - - - - ~ProportionalHazard.fit - - - - - - - ~ProportionalHazard.jac_cdf - - - - - ~ProportionalHazard.jac_pdf - - - ~ProportionalHazard.jac_sf - - - ~ProportionalHazard.ls_integrate - - - - - - - - - - ~ProportionalHazard.rvs - - - \ No newline at end of file diff --git a/doc/source/api/lifetime_models/relife.Weibull.rst b/doc/source/api/lifetime_models/relife.Weibull.rst deleted file mode 100644 index 458268f1..00000000 --- a/doc/source/api/lifetime_models/relife.Weibull.rst +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - -Weibull -======= - -.. currentmodule:: relife - -.. autoclass:: Weibull - :members: - :inherited-members: - :exclude-members: __init__, __new__, compose_with, new_params, init_params - - .. rubric:: Methods - - **Survival functions** - - .. autosummary:: - :nosignatures: - - - - - - ~Weibull.chf - - - - - ~Weibull.dhf - - - - ~Weibull.hf - - - ~Weibull.ichf - - - - ~Weibull.isf - - - - ~Weibull.jac_chf - - - ~Weibull.jac_hf - - - - - - - - - ~Weibull.mrl - - - - - - - ~Weibull.sf - - - - .. autosummary:: - :nosignatures: - - - - - ~Weibull.cdf - - - - - - - - - - - - - - - - - - - - - - - ~Weibull.pdf - - - ~Weibull.ppf - - - - - - **Statistics** - - .. autosummary:: - :nosignatures: - - - - - - - - - - - - - - - - - - - - - ~Weibull.mean - - - ~Weibull.median - - - ~Weibull.moment - - - - - - - - - ~Weibull.var - - - **Other methods** - - .. autosummary:: - :nosignatures: - - - - - - - - ~Weibull.copy - - - - ~Weibull.fit - - - - - - - ~Weibull.jac_cdf - - - - - ~Weibull.jac_pdf - - - ~Weibull.jac_sf - - - ~Weibull.ls_integrate - - - - - - - - - - ~Weibull.rvs - - - \ No newline at end of file diff --git a/doc/source/api/likelihood/relife.likelihoods.LikelihoodFromLifetimes.rst b/doc/source/api/likelihood/relife.likelihoods.LikelihoodFromLifetimes.rst deleted file mode 100644 index 1eb687fd..00000000 --- a/doc/source/api/likelihood/relife.likelihoods.LikelihoodFromLifetimes.rst +++ /dev/null @@ -1,27 +0,0 @@ - - - -LikelihoodFromLifetimes -======================= - -.. currentmodule:: relife.likelihoods - -.. autoclass:: LikelihoodFromLifetimes - :members: - :inherited-members: - :exclude-members: __init__, __new__ - - - .. rubric:: Methods - - .. autosummary:: - :nosignatures: - - - - - ~LikelihoodFromLifetimes.jac_negative_log - - - ~LikelihoodFromLifetimes.negative_log - \ No newline at end of file diff --git a/doc/source/api/nonparametric/relife.ECDF.rst b/doc/source/api/nonparametric/relife.ECDF.rst deleted file mode 100644 index 97551bde..00000000 --- a/doc/source/api/nonparametric/relife.ECDF.rst +++ /dev/null @@ -1,30 +0,0 @@ - - - -ECDF -==== - -.. currentmodule:: relife - -.. autoclass:: ECDF - :members: - :inherited-members: - :exclude-members: __init__, __new__ - - - .. rubric:: Methods - - .. autosummary:: - :nosignatures: - - - - - ~ECDF.cdf - - - ~ECDF.fit - - - ~ECDF.sf - \ No newline at end of file diff --git a/doc/source/api/nonparametric/relife.KaplanMeier.rst b/doc/source/api/nonparametric/relife.KaplanMeier.rst deleted file mode 100644 index b08ecce4..00000000 --- a/doc/source/api/nonparametric/relife.KaplanMeier.rst +++ /dev/null @@ -1,27 +0,0 @@ - - - -KaplanMeier -=========== - -.. currentmodule:: relife - -.. autoclass:: KaplanMeier - :members: - :inherited-members: - :exclude-members: __init__, __new__ - - - .. rubric:: Methods - - .. autosummary:: - :nosignatures: - - - - - ~KaplanMeier.fit - - - ~KaplanMeier.sf - \ No newline at end of file diff --git a/doc/source/api/nonparametric/relife.NelsonAalen.rst b/doc/source/api/nonparametric/relife.NelsonAalen.rst deleted file mode 100644 index 59dccec7..00000000 --- a/doc/source/api/nonparametric/relife.NelsonAalen.rst +++ /dev/null @@ -1,27 +0,0 @@ - - - -NelsonAalen -=========== - -.. currentmodule:: relife - -.. autoclass:: NelsonAalen - :members: - :inherited-members: - :exclude-members: __init__, __new__ - - - .. rubric:: Methods - - .. autosummary:: - :nosignatures: - - - - - ~NelsonAalen.chf - - - ~NelsonAalen.fit - \ No newline at end of file diff --git a/doc/source/api/nonparametric/relife.Turnbull.rst b/doc/source/api/nonparametric/relife.Turnbull.rst deleted file mode 100644 index 1462892a..00000000 --- a/doc/source/api/nonparametric/relife.Turnbull.rst +++ /dev/null @@ -1,27 +0,0 @@ - - - -Turnbull -======== - -.. currentmodule:: relife - -.. autoclass:: Turnbull - :members: - :inherited-members: - :exclude-members: __init__, __new__ - - - .. rubric:: Methods - - .. autosummary:: - :nosignatures: - - - - - ~Turnbull.fit - - - ~Turnbull.sf - \ No newline at end of file diff --git a/doc/source/api/renewal_policy/relife.AgeReplacementPolicy.rst b/doc/source/api/renewal_policy/relife.AgeReplacementPolicy.rst deleted file mode 100644 index 4f9e2fe0..00000000 --- a/doc/source/api/renewal_policy/relife.AgeReplacementPolicy.rst +++ /dev/null @@ -1,48 +0,0 @@ - - - -AgeReplacementPolicy -==================== - -.. currentmodule:: relife - -.. autoclass:: AgeReplacementPolicy - :members: - :inherited-members: - :exclude-members: __init__, __new__ - - - .. rubric:: Methods - - .. autosummary:: - :nosignatures: - - - - - ~AgeReplacementPolicy.asymptotic_expected_equivalent_annual_cost - - - ~AgeReplacementPolicy.asymptotic_expected_total_cost - - - ~AgeReplacementPolicy.expected_equivalent_annual_cost - - - ~AgeReplacementPolicy.expected_number_of_failures - - - ~AgeReplacementPolicy.expected_number_of_preventive_replacements - - - ~AgeReplacementPolicy.expected_number_of_replacements - - - ~AgeReplacementPolicy.expected_total_cost - - - ~AgeReplacementPolicy.fit - - - ~AgeReplacementPolicy.sample - \ No newline at end of file diff --git a/doc/source/api/renewal_policy/relife.OneCycleAgeReplacementPolicy.rst b/doc/source/api/renewal_policy/relife.OneCycleAgeReplacementPolicy.rst deleted file mode 100644 index 07698109..00000000 --- a/doc/source/api/renewal_policy/relife.OneCycleAgeReplacementPolicy.rst +++ /dev/null @@ -1,39 +0,0 @@ - - - -OneCycleAgeReplacementPolicy -============================ - -.. currentmodule:: relife - -.. autoclass:: OneCycleAgeReplacementPolicy - :members: - :inherited-members: - :exclude-members: __init__, __new__ - - - .. rubric:: Methods - - .. autosummary:: - :nosignatures: - - - - - ~OneCycleAgeReplacementPolicy.asymptotic_expected_equivalent_annual_cost - - - ~OneCycleAgeReplacementPolicy.asymptotic_expected_total_cost - - - ~OneCycleAgeReplacementPolicy.expected_equivalent_annual_cost - - - ~OneCycleAgeReplacementPolicy.expected_total_cost - - - ~OneCycleAgeReplacementPolicy.fit - - - ~OneCycleAgeReplacementPolicy.sample - \ No newline at end of file diff --git a/doc/source/api/renewal_policy/relife.OneCycleRunToFailure.rst b/doc/source/api/renewal_policy/relife.OneCycleRunToFailure.rst deleted file mode 100644 index 9602ce20..00000000 --- a/doc/source/api/renewal_policy/relife.OneCycleRunToFailure.rst +++ /dev/null @@ -1,36 +0,0 @@ - - - -OneCycleRunToFailure -==================== - -.. currentmodule:: relife - -.. autoclass:: OneCycleRunToFailure - :members: - :inherited-members: - :exclude-members: __init__, __new__ - - - .. rubric:: Methods - - .. autosummary:: - :nosignatures: - - - - - ~OneCycleRunToFailure.asymptotic_expected_equivalent_annual_cost - - - ~OneCycleRunToFailure.asymptotic_expected_total_cost - - - ~OneCycleRunToFailure.expected_equivalent_annual_cost - - - ~OneCycleRunToFailure.expected_total_cost - - - ~OneCycleRunToFailure.sample - \ No newline at end of file diff --git a/doc/source/api/renewal_policy/relife.RunToFailure.rst b/doc/source/api/renewal_policy/relife.RunToFailure.rst deleted file mode 100644 index ac5f1197..00000000 --- a/doc/source/api/renewal_policy/relife.RunToFailure.rst +++ /dev/null @@ -1,45 +0,0 @@ - - - -RunToFailure -============ - -.. currentmodule:: relife - -.. autoclass:: RunToFailure - :members: - :inherited-members: - :exclude-members: __init__, __new__ - - - .. rubric:: Methods - - .. autosummary:: - :nosignatures: - - - - - ~RunToFailure.asymptotic_expected_equivalent_annual_cost - - - ~RunToFailure.asymptotic_expected_total_cost - - - ~RunToFailure.expected_equivalent_annual_cost - - - ~RunToFailure.expected_number_of_failures - - - ~RunToFailure.expected_number_of_preventive_replacements - - - ~RunToFailure.expected_number_of_replacements - - - ~RunToFailure.expected_total_cost - - - ~RunToFailure.sample - \ No newline at end of file diff --git a/doc/source/get_started/get_started_example.ipynb b/doc/source/get_started/get_started_example.ipynb index 45af2610..5b21dc65 100644 --- a/doc/source/get_started/get_started_example.ipynb +++ b/doc/source/get_started/get_started_example.ipynb @@ -188,7 +188,7 @@ "metadata": {}, "outputs": [], "source": [ - "from relife import KaplanMeier, Weibull, Gompertz\n", + "from relife.models import KaplanMeier, Weibull, Gompertz\n", "\n", "km = KaplanMeier().fit(time, event, entry)\n", "weibull = Weibull().fit(time, event, entry)\n", @@ -346,7 +346,7 @@ "metadata": {}, "outputs": [], "source": [ - "from relife import AgeReplacementPolicy\n", + "from relife.policies import AgeReplacementPolicy\n", "\n", "policy = AgeReplacementPolicy(\n", " gompertz, cf, cp, discounting_rate=discounting_rate, a0=a0, nb_assets=3\n", diff --git a/doc/source/user_guide/demo_distribution.ipynb b/doc/source/user_guide/demo_distribution.ipynb index 17a44418..7b999d04 100644 --- a/doc/source/user_guide/demo_distribution.ipynb +++ b/doc/source/user_guide/demo_distribution.ipynb @@ -25,7 +25,7 @@ "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", - "from relife import Weibull, Gompertz\n", + "from relife.models import Weibull, Gompertz\n", "from relife.datasets import load_circuit_breaker" ] }, diff --git a/doc/source/user_guide/demo_financial_analysis.ipynb b/doc/source/user_guide/demo_financial_analysis.ipynb index 245a087c..ed76836a 100644 --- a/doc/source/user_guide/demo_financial_analysis.ipynb +++ b/doc/source/user_guide/demo_financial_analysis.ipynb @@ -17,7 +17,8 @@ "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", - "from relife import Gompertz, AgeReplacementPolicy, OneCycleAgeReplacementPolicy" + "from relife.models import Gompertz\n", + "from relife.policies import AgeReplacementPolicy, OneCycleAgeReplacementPolicy" ] }, { diff --git a/doc/source/user_guide/demo_nonparametric.ipynb b/doc/source/user_guide/demo_nonparametric.ipynb index 84444958..caab108a 100644 --- a/doc/source/user_guide/demo_nonparametric.ipynb +++ b/doc/source/user_guide/demo_nonparametric.ipynb @@ -17,7 +17,7 @@ "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", - "from relife import KaplanMeier, Gompertz, NelsonAalen\n", + "from relife.models import KaplanMeier, Gompertz, NelsonAalen\n", "from relife.datasets import load_circuit_breaker" ] }, diff --git a/doc/source/user_guide/demo_regression.ipynb b/doc/source/user_guide/demo_regression.ipynb index 3911fcf3..9fbdda21 100644 --- a/doc/source/user_guide/demo_regression.ipynb +++ b/doc/source/user_guide/demo_regression.ipynb @@ -18,7 +18,8 @@ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", - "from relife import ProportionalHazard, AgeReplacementPolicy, Weibull, Gompertz\n", + "from relife.models import ProportionalHazard, Weibull, Gompertz\n", + "from relife.policies import AgeReplacementPolicy\n", "from relife.datasets import load_insulator_string" ] }, @@ -67,16 +68,16 @@ { "data": { "text/plain": [ - "array([[1.85748294e-05],\n", - " [2.87804129e-05],\n", - " [5.72340392e-06],\n", - " [1.69700162e-04],\n", - " [2.07513341e-05],\n", - " [1.00906648e-04],\n", - " [3.65663721e-05],\n", - " [1.32461531e-05],\n", - " [7.39777310e-06],\n", - " [2.08323997e-05]])" + "array([[1.46783849e-05],\n", + " [5.42951408e-05],\n", + " [1.05144624e-05],\n", + " [3.61177139e-05],\n", + " [3.48798498e-05],\n", + " [3.24496916e-05],\n", + " [1.46152505e-04],\n", + " [6.21107733e-05],\n", + " [5.63674190e-05],\n", + " [1.78487920e-05]])" ] }, "execution_count": 4, diff --git a/doc/source/user_guide/demo_renewal_theory.ipynb b/doc/source/user_guide/demo_renewal_theory.ipynb index b7fec619..58904d9f 100644 --- a/doc/source/user_guide/demo_renewal_theory.ipynb +++ b/doc/source/user_guide/demo_renewal_theory.ipynb @@ -17,8 +17,8 @@ "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", - "from relife import Weibull\n", - "from relife.renewal import RenewalProcess" + "from relife.models import Weibull\n", + "from relife.process import RenewalProcess" ] }, { @@ -71,7 +71,7 @@ } ], "source": [ - "from relife.renewal import renewal_equation_solver\n", + "from relife.process.renewal import renewal_equation_solver\n", "\n", "\n", "def f(x):\n", @@ -131,7 +131,7 @@ "# Calcul de la distribution des âges à l'équilibre. A temps suffisament long, la varariance des durées de vie \"étale\" les défaillance dans le temps\n", "# ce qui aboutit à une stabilisation du rythme d'apparition des défaillances au cours du temps. Lorsque ce régime stationnaire est atteint,\n", "# la population d'actifs a une distribution d'âge qui ne varie plus au cours du temps : c'est la distribution d'âges à l'équilibre.\n", - "from relife.model import EquilibriumDistribution\n", + "from relife.core.nested_model import EquilibriumDistribution\n", "\n", "eq_distrib = EquilibriumDistribution(distrib)\n", "\n", @@ -153,7 +153,7 @@ "outputs": [ { "data": { - "image/png": "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smSJxdEULt7e3oSGhrrGT58+zdGjR4mOjr7m53ROmTLlWsOT60xHkEQKqYuPCm3bto0WLVpQrFgxAgICaNCgAZs2bWLVqlX06tWLxMREbDYbNpuN0aNHA3Dy5Em6d+9O8eLFKVKkCPfccw979+51W8+7775LWFgYRYoUoUOHDkyYMMFtvaNHj6Zu3bq89957VKxYEV9fXwCWLl3K7bffTlBQEMHBwdx333388ssvruUOHDiAzWbj008/5Y477sDPz49GjRrx888/s3HjRho2bEjRokW55557OHbsmGu580fYXn75ZUJCQggKCuKFF14gPT2doUOHUqJECW666SY+/PBDt+04fPgwDz/8MEFBQZQoUYJ27dpx4MCBS7bx4sWLqVq1Kn5+frRo0SLL8t9//70r/rCwMAYOHEhycrJr/ltvvUWVKlXw9fUlJCSEBx98MNv1/fnnn3Tp0oVy5cpRpEgRatWqxSeffOJW5q+//qJr1674+/tTpkwZ3njjjUxHS1JSUnjqqacoV64c/v7+REREsGrVKtf8gwcP0rZtW4oXL46/vz+33HILixcvzjauo0eP0rZtW/z8/KhYsSKzZs3KVObUqVP06dOHUqVKERAQwF133cW2bdtc87PbP7MzYcIEatWqhb+/P2FhYfz73//m9OnTbmXWrl1L8+bNKVKkCMWLFyc6OpqTJ0/Ss2dPVq9ezaRJk1z7/IEDB9yOwq5atYpixYoBcNddd2Gz2Vi1atUVt83HH39Mw4YNKVasGKGhoTzyyCOumxhmpXnz5hw8eJAhQ4a4YjvvcvtSeHg4L730Et27d6do0aJUqFCBhQsXcuzYMdq1a0fRokWpXbu2W7ue/55YsGCBaz+Mjo7m8OHDV/3eXGzHjh3cdddd+Pn5ERwcTL9+/dzeq/Of2ddff50yZcoQHBzME0884XaJfnx8PG3atHHtY7Nnz87zI21KkERuEF27duWmm25i48aNxMXFMWzYMLy8vGjatCkTJ04kICCA+Ph44uPjeeqpp4CML65NmzaxcOFCYmNjMcZw7733ur641q5dy+OPP86gQYPYunUrrVq1YsyYMZnWvW/fPj7//HPmz5/P1q1bAUhOTiYmJoZNmzaxfPly7HY7HTp0wOl0ui07atQonnvuOTZv3oynpyePPPIITz/9NJMmTeK7775j3759jBw50m2ZFStW8Mcff7BmzRomTJjAqFGjuO+++yhevDjr16/n8ccf57HHHuO3334DMu6VEh0dTbFixfjuu+9Yu3YtRYsWpXXr1qSmpmbZnocPH+aBBx6gbdu2bN26lT59+jBs2DC3Mr/88gutW7emY8eObN++nblz5/L999/Tv39/ADZt2sTAgQN54YUX2LNnD0uXLuXOO+/M9j08d+4cDRo04KuvvmLnzp3069ePbt26sWHDBleZmJgY1q5dy8KFC1m2bBnfffcdmzdvdqunf//+xMbGMmfOHLZv385DDz1E69atXcnvE088QUpKCmvWrGHHjh288sorFC1aNNu4evbs6Trd99lnn/HWW29lSgIeeughjh49ypIlS4iLi6N+/fq0bNmSEydOANnvn9mx2+1MnjyZXbt28dFHH7FixQqefvpp1/ytW7fSsmVLatasSWxsLN9//z1t27bF4XAwadIkIiMj6du3r2ufDwsLc6u/adOm7NmzB4DPP/+c+Ph4mjZtesVtk5aWxosvvsi2bdtYsGABBw4coGfPntmWnz9/PjfddBMvvPCCKza4/L503htvvMFtt93Gli1baNOmDd26daN79+48+uijbN68mZtvvpnu3btz4WNYz5w5w5gxY5g5cyZr167l1KlTdO7c2TX/St+bCyUnJxMdHU3x4sXZuHEj8+bN49tvv80U98qVK/nll19YuXIlH330ETNmzGDGjBmu+d27d+ePP/5g1apVfP7550yfPv2SiWauMHJVEhMTDWASExOtDkWuwtmzZ82PP/5ozp49m2lehWcWXbfhavTo0cN4eHgYf39/t8HX19cA5uTJk8YYYz788EMTGBjoWq5YsWJmxowZWdZ5cVljjPn5558NYNauXeuadvz4cePn52c+/fRTY4wxnTp1Mm3atHFbrmvXrm51jRo1ynh5eZmjR49ecruOHTtmALNjxw5jjDH79+83gHnvvfdcZT755BMDmOXLl7umjR071lSrVs2tfSpUqGAcDodrWrVq1cwdd9zhGk9PTzf+/v7mk08+McYY8/HHH5tq1aoZp9PpKpOSkmL8/PzM119/nWW8w4cPNzVr1nSb9swzz7i9B7179zb9+vVzK/Pdd98Zu91uzp49az7//HMTEBBgkpKSLtk2l9KmTRvz5JNPGmOMSUpKMl5eXmbevHmu+adOnTJFihQxgwYNMsYYc/DgQePh4WF+//13t3patmxphg8fbowxplatWmb06NE5Wv+ePXsMYDZs2OCatnv3bgOYN954wxiTsc0BAQHm3LlzbsvefPPN5p133jHGXHr/zIl58+aZ4OBg13iXLl3Mbbfdlm35Zs2audrkvJUrV7q9fydPnjSAWblypavMlbRNVjZu3GgA89dff2VbpkKFCq62O+9y+9L55R599FHX/Pj4eAOYESNGuKbFxsYawMTHxxtjMj77gPnhhx9cZc6/f+vXrzfGXPl7A5gvvvjCGGPM9OnTTfHixc3p06dd87/66itjt9tNQkKCMeafz2x6erqrzEMPPWQ6derkFs/GjRtd8/fu3eu2j13sUt/xOf391hEkkQKoRYsWbN261W147733LrlMTEwMffr0ISoqinHjxrmdzsrK7t278fT0JCIiwjUtODiYatWqsXv3bgD27NlD48aN3Za7eBygQoUKlCpVym3a3r176dKlC5UqVSIgIIDw8HAADh065Faudu3artchISEA1KpVy23axf9J3nLLLW5XC4WEhLgt4+HhQXBwsGu5bdu2sW/fPooVK0bRokUpWrQoJUqU4Ny5c9m20+7du93aBiAyMtJtfNu2bcyYMcNVZ9GiRYmOjsbpdLJ//35atWpFhQoVqFSpEt26dWPWrFmcOXMmy/VBxiNyXnzxRWrVqkWJEiUoWrQoX3/9tavNfv31V9LS0tzeg8DAQKpVq+Ya37FjBw6Hg6pVq7rFtXr1ate2Dhw4kJdeeonbbruNUaNGsX379mxjOr+fNGjQwDWtevXqmU7vnj59muDgYLd17t+/37XOK90/v/32W1q2bEm5cuUoVqwY3bp1488//3S13/kjSLntStoGIC4ujrZt21K+fHmKFStGs2bNgMz7+eVcbl86LyefF8DtM+Pp6UmjRo1c4+ffv/Of8yt9by60e/du6tSpg7+/v2vabbfdhtPpdB2hg4zP7IWPBClTpowrxj179uDp6Un9+vVd8ytXrkzx4sVzHMfVUIIkUgD5+/tTuXJlt6FcuXKXXGb06NHs2rWLNm3asGLFCmrWrMkXX3xx3eK9WNu2bTlx4gTvvvsu69evZ/369QCZTmldeCj/fH+Mi6ddfFru4sP/Npsty2nnlzt9+jQNGjTIlHT+/PPPPPLII1e6uS6nT5/msccec6tz27Zt7N27l5tvvplixYqx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Hn/8cQYNGsTWrVtp1aoVY8aMcavju+++o3v37gwaNIgff/yRd955hxkzZrjKff7557zxxhu888477N27lwULFlCrVq1sYzp9+jT33nsvy5cvZ8uWLbRu3Zq2bdty6NCh7Bv8Mi73fhw+fJgHHniAtm3bsnXrVvr06cOwYcOuen1XYsSIEXTs2JFt27bRtWtXOnfunKnv1fnP+u7du4mOjmbWrFmMHDmSMWPGsHv3bl5++WVGjBjBRx99dF1izlVGrkpiYqIBTGJiotWhyFU4e/as+fHHH83Zs2f/mZhy2phRAdd/SDl9RbH36NHDtGvXLst5nTp1MjVq1HCNA+aLL74wxhgzYMAAc9dddxmn05nlsheWPW/UqFHGy8vLHD161G16s2bNzKBBg1zjFSpUMK1bt84Uyz333GOMMWb//v0GMFu2bHHNP3nypAHMypUrjTHGrFy50gDm5MmT2a7r559/NoBZu3ata/7x48eNn5+f+fTTT40xxnz44YcGMPv27XOVmTp1qgkJCclyuy+37ttvv91tWqNGjcwzzzxjjDHmu+++MwEBAebcuXNuZW6++WbzzjvvGGOMadq0qenbt6/b/Iceesjce++9rnHADB48+JIxdenSxW0ZYzLaODAw0DWe1b4xaNAg06xZM2OMMefOnTNFihQx69atcyvTu3dv06VLF5OVPXv2GMBs2LDBNW337t0GMG+88UaO26FYsWJmxowZWa4jJ+bNm2eCg4Nd4506dTJt2rRxK9O1a1e39mjZsqV5+eWX3cp8/PHHpkyZMsYYY8aPH2+qVq1qUlNTrzquW265xbz55pvZzh81apSpU6dOlvNy8n4MHz7c1KxZ023+M88847ZvZLWON954w1SoUME1fvG+kdVn+Pz7aUzGPvn444+71RkREWH+9a9/GWP++UxPnDjRrczNN99sZs+e7TbtxRdfNJGRkVm2QV7J8jv+bzn9/dYRJJFCxBiDzWbLcl7Pnj3ZunUr1apVY+DAgXzzzTc5qrNChQo56p8QGRmZaTynV/rk1O7du/H09CQiIsI1LTg4mGrVqrmtq0iRItx8882u8TJlymQ64pFTtWvXdhu/sK5t27Zx+vRpgoODKVq0qGvYv38/v/zyiyvm2267za2O2267LVPbNGzY8JJx7N692227IXObX86+ffs4c+YMrVq1cot35syZrnizWq+npycNGjRwTatevbrbqayctENMTAx9+vQhKiqKcePGZbu+87799ltatmxJuXLlKFasGN26dePPP//kzJkzQMbRvsaNG7stc/H4tm3beOGFF9xi6tu3L/Hx8Zw5c4aHHnqIs2fPUqlSJfr27csXX3zhOv2WldOnT/PUU09Ro0YNgoKCKFq0KLt3777qI0g5eT9y432/Wjn5TF+43yYnJ/PLL7/Qu3dvt+156aWXLvt+50f5opP21KlTee2110hISKBOnTq8+eabmXb0C82bN48RI0Zw4MABqlSpwiuvvMK9997rmj969GjmzJnD4cOH8fb2pkGDBowZM8ZtJwsPD+fgwYNu9Y4dO/a6HbqUfMirCDz7hzXrzSW7d++mYsWKWc6rX78++/fvZ8mSJXz77bc8/PDDREVFXbb/ib+//zXHZbdn/C9mLjideOEpsdx28akbm83mtu5rrev81YKnT5+mTJkyrFq1KtNyF/eFuZzcaueLt/PCdj7fh+err76iXLlybuWu5cqpnLTD6NGjeeSRR/jqq69YsmQJo0aNYs6cOXTo0CHTMgcOHOC+++7jX//6F2PGjKFEiRJ8//339O7dm9TUVIoUydln5vTp0zz//PM88MADmeb5+voSFhbGnj17+Pbbb1m2bBn//ve/ee2111i9enWWp/+eeuopli1bxuuvv07lypXx8/PjwQcfJDU1NUfxZBUfXPv7cbn3PS9duN+e35533303U1Ln4eFxXeLJTZYnSHPnziUmJoZp06YRERHBxIkTiY6OZs+ePZQuXTpT+XXr1tGlSxfGjh3Lfffdx+zZs2nfvj2bN2/m1ltvBTIuw5wyZQqVKlXi7NmzvPHGG9x9993s27fP7T/hF154gb59+7rGixUrlvcbLPmXzQbe1/4jZZUVK1awY8eOS14OHRAQQKdOnejUqRMPPvggrVu35sSJE5QoUQIvLy8cDsdVr/+HH37INF6jRg3gnytk4uPjqVevHkCm/kze3t4Al4yhRo0apKens379epo2bQrAn3/+yZ49e6hZs+ZVx56TdWelfv36JCQk4Onp6dYh9uKY165dS48ePVzT1q5de8Xx1qhRg/Xr17tNu7jNS5Uqxc6dO92mbd261fVjX7NmTXx8fDh06BDNmjXL0XqrV69Oeno6cXFxNGrUCMg4enNh5/GctANkfDdXrVqVIUOG0KVLFz788MMsE6S4uDicTifjx493JdeffvqpW5lq1aplupLs4vH69euzZ88eKleunG1Mfn5+tG3blrZt2/LEE09QvXp1duzYkeW9iNauXUvPnj1dMZ8+fZoDBw5kW/fl5OT9qFGjBgsXLnSbltX7npCQ4HYEOTeuiPvhhx/o3r272/j5z29WQkJCKFu2LL/++itdu3a95vVbzfIEacKECfTt25devXoBMG3aNL766is++OCDLI/mTJo0idatWzN06FAAXnzxRZYtW8aUKVOYNm0aQKbLQSdMmMD777/P9u3badmypWt6sWLFbujLaKXgSklJISEhwe0y//P/NFz4hXahCRMmUKZMGerVq4fdbmfevHmEhoa6/sMPDw9n+fLl3Hbbbfj4+FC8ePErimnt2rW8+uqrtG/fnmXLljFv3jy++uorIONHqEmTJowbN46KFSty9OhRnnvuObflK1SogM1mY9GiRdx77734+flRtGhRtzJVqlShXbt29O3bl3feeYdixYoxbNgwypUrR7t27a4o3itdd1aioqKIjIykffv2vPrqq1StWpU//viDr776ig4dOtCwYUOGDh3Kww8/TL169YiKiuLLL79k/vz5V3z108CBA7ntttt4/fXXadeuHV9//TVLly51K3PXXXfx2muvMXPmTCIjI/nvf//Lzp07XT9qxYoV46mnnmLIkCE4nU5uv/12EhMTWbt2LQEBAW5J3HnVqlWjdevWPPbYY7z99tt4enoyePBg/Pz8ctwOt9xyC0OHDuXBBx+kYsWK/Pbbb2zcuJGOHTtmua2VK1cmLS2NN998k7Zt27J27VrX9/t5AwYM4M4772TChAm0bduWFStWsGTJErdTzCNHjuS+++6jfPnyPPjgg9jtdrZt28bOnTt56aWXmDFjBg6Hg4iICIoUKcJ///tf/Pz8qFChQpZxValShfnz59O2bVtsNhsjRozIdO+xK5GT9+Pxxx9n/PjxDB06lD59+hAXF5fpfkbNmzfn2LFjvPrqqzz44IMsXbqUJUuWEBAQcNWxQcbZmoYNG3L77bcza9YsNmzYwPvvv3/JZZ5//nkGDhxIYGAgrVu3JiUlhU2bNnHy5EliYmKuKZ7rLve7RuVcSkqK8fDwyNQxtHv37ub+++/PcpmwsDC3jmTGGDNy5EhTu3btbNfx2muvmcDAQHPs2DHX9AoV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hBrw7Wg4dcjqKOUK2Iwxun/6VUhKSiIwMJDExEQCAgJyvf7wYV/lep0iInJ9+JDKwx6reMxzETfZjgPgMDa+dTbgE8ddfOeshQOP6xbPgXFtrtu68ruc/n57XseYREREbggpePOx425mO1rS0r6Z7h7fcLvHLqI9NhHtsYljJpCFjqbMd9zOLhMO2KwOWS6iBElERCSPOPDgG2cjvnE2onL6b3T1WM79HusoZUukt+cSensuYb8zhGXOhixzNGCzqXJdjyxJ9nSK7SrpFJuIiFwNT9K5076dBzy+p5U9Dh9bmmveCVOUlc66rHXcyg/OmvxByVxZp06x/UOn2ERERPKhdDxZ4azPCmd9/DnLnfbttPKI4y77FkrYTtPR43s6enwPwEFnaWKdNYkzVdnmvJl9phxOXV91XShBEhERsUgyfixxRrDEGYEHDhrafqa5x1aa2HdTy/YrFexHqWA/SmdWAXDG+LDThLPdWYndzgrsM2X5xZTlNEWs3ZBCKF+koVOnTiU8PBxfX18iIiLYsGHDJcvPmzeP6tWr4+vrS61atVi8eLHbfGMMI0eOpEyZMvj5+REVFcXevXvdypw4cYKuXbsSEBBAUFAQvXv35vTp07m+bSIiIjnhwIP1pgavpHehQ+oL1E2ZTs/UoUxLv48fnDU4bXwpYkuhsX0PfTyXMN57Gv/zGclO3z784PME//Uaw/OeH9LP40va2H+gnm0vpTiJDafVm1YgWd4Hae7cuXTv3p1p06YRERHBxIkTmTdvHnv27KF06dKZyq9bt44777yTsWPHct999zF79mxeeeUVNm/ezK233grAK6+8wtixY/noo4+oWLEiI0aMYMeOHfz444/4+voCcM899xAfH88777xDWloavXr1olGjRsyePTtHcasPkoiIXE92nFS0xVPH9gu17PupavuNyvbfCbGduuRyKcYTn+LlwL8k+JfK+Fvk/OtS4BcEPgHgU+yCIQA8CudJppz+flueIEVERNCoUSOmTJkCgNPpJCwsjAEDBjBs2LBM5Tt16kRycjKLFi1yTWvSpAl169Zl2rRpGGMoW7YsTz75JE899RQAiYmJhISEMGPGDDp37szu3bupWbMmGzdupGHDhgAsXbqUe++9l99++42yZcteNm4lSCIikh8EkMzNtj+obP+dcFsCZW1/Us52nHK244RyAg/b1f3MnzE+JOPLWeNNCt6k4JUxmL//np9mvEjFk3Q8cGK/4K8dB3YcxiPj79/D+TLnXxtw/TXYMNhwGhsTOtWDis0goEyutleB6KSdmppKXFwcw4cPd02z2+1ERUURGxub5TKxsbHExMS4TYuOjmbBggUA7N+/n4SEBKKiolzzAwMDiYiIIDY2ls6dOxMbG0tQUJArOQKIiorCbrezfv16OnTokGm9KSkppKSkuMYTExOBjIbOC86UM3lSr4iIFC6nsBFHOeIol2meBw5Kc5LStlOUsCVR3HaaEiQRbPuLEra/KEEixWxn8ecsxWzn8Ocsfq6r6s7hwzl8ru/muCTNAR7+GG5ukbv1/v27fbnjQ5YmSMePH8fhcBASEuI2PSQkhJ9++inLZRISErIsn5CQ4Jp/ftqlylx8+s7T05MSJUq4ylxs7NixPP/885mmh4WFZbd5IiIiljtgdQDXYlz7PKv6r7/+IjAwMNv5hfMEYx4YPny425Erp9PJiRMnCA4OxmbLvTugJiUlERYWxuHDh/Pk1N2NTu2bd9S2eUdtm7fUvnknP7atMYa//vrrst1pLE2QSpYsiYeHB0eOHHGbfuTIEUJDQ7NcJjQ09JLlz/89cuQIZcqUcStTt25dV5mjR4+61ZGens6JEyeyXa+Pjw8+Pu4HGoOCgi69gdcgICAg3+xMhZHaN++obfOO2jZvqX3zTn5r20sdOTrP0sv8vb29adCgAcuXL3dNczqdLF++nMjIyCyXiYyMdCsPsGzZMlf5ihUrEhoa6lYmKSmJ9evXu8pERkZy6tQp4uLiXGVWrFiB0+kkIiIi17ZPRERECibLT7HFxMTQo0cPGjZsSOPGjZk4cSLJycn06tULgO7du1OuXDnGjh0LwKBBg2jWrBnjx4+nTZs2zJkzh02bNjF9+nQAbDYbgwcP5qWXXqJKlSquy/zLli1L+/btAahRowatW7emb9++TJs2jbS0NPr370/nzp1zdAWbiIiIFG6WJ0idOnXi2LFjjBw5koSEBOrWrcvSpUtdnawPHTqE3f7Pga6mTZsye/ZsnnvuOZ599lmqVKnCggULXPdAAnj66adJTk6mX79+nDp1ittvv52lS5e67oEEMGvWLPr370/Lli2x2+107NiRyZMnX78Nz4aPjw+jRo3KdDpPcofaN++obfOO2jZvqX3zTkFuW8vvgyQiIiKS3+SLR42IiIiI5CdKkEREREQuogRJRERE5CJKkEREREQuogQpn5k6dSrh4eH4+voSERHBhg0brA6pwFmzZg1t27albNmy2Gw213P6zjPGMHLkSMqUKYOfnx9RUVHs3bvXmmALmLFjx9KoUSOKFStG6dKlad++PXv27HErc+7cOZ544gmCg4MpWrQoHTt2zHRzV8na22+/Te3atV031YuMjGTJkiWu+Wrb3DNu3DjXbWHOU/tendGjR2Oz2dyG6tWru+YX1HZVgpSPzJ07l5iYGEaNGsXmzZupU6cO0dHRme76LZeWnJxMnTp1mDp1apbzX331VSZPnsy0adNYv349/v7+REdHc+7cuescacGzevVqnnjiCX744QeWLVtGWload999N8nJya4yQ4YM4csvv2TevHmsXr2aP/74gwceeMDCqAuOm266iXHjxhEXF8emTZu46667aNeuHbt27QLUtrll48aNvPPOO9SuXdttutr36t1yyy3Ex8e7hu+//941r8C2q5F8o3HjxuaJJ55wjTscDlO2bFkzduxYC6Mq2ADzxRdfuMadTqcJDQ01r732mmvaqVOnjI+Pj/nkk08siLBgO3r0qAHM6tWrjTEZbenl5WXmzZvnKrN7924DmNjYWKvCLNCKFy9u3nvvPbVtLvnrr79MlSpVzLJly0yzZs3MoEGDjDHad6/FqFGjTJ06dbKcV5DbVUeQ8onU1FTi4uKIiopyTbPb7URFRREbG2thZIXL/v37SUhIcGvnwMBAIiIi1M5XITExEYASJUoAEBcXR1pamlv7Vq9enfLly6t9r5DD4WDOnDkkJycTGRmpts0lTzzxBG3atHFrR9C+e6327t1L2bJlqVSpEl27duXQoUNAwW5Xy++kLRmOHz+Ow+Fw3UH8vJCQEH766SeLoip8EhISALJs5/PzJGecTieDBw/mtttuc93JPiEhAW9v70wPclb75tyOHTuIjIzk3LlzFC1alC+++IKaNWuydetWte01mjNnDps3b2bjxo2Z5mnfvXoRERHMmDGDatWqER8fz/PPP88dd9zBzp07C3S7KkESkavyxBNPsHPnTre+BnLtqlWrxtatW0lMTOSzzz6jR48erF692uqwCrzDhw8zaNAgli1b5vbYKbl299xzj+t17dq1iYiIoEKFCnz66af4+flZGNm10Sm2fKJkyZJ4eHhk6tl/5MgRQkNDLYqq8Dnflmrna9O/f38WLVrEypUruemmm1zTQ0NDSU1N5dSpU27l1b455+3tTeXKlWnQoAFjx46lTp06TJo0SW17jeLi4jh69Cj169fH09MTT09PVq9ezeTJk/H09CQkJETtm0uCgoKoWrUq+/btK9D7rRKkfMLb25sGDRqwfPly1zSn08ny5cuJjIy0MLLCpWLFioSGhrq1c1JSEuvXr1c754Axhv79+/PFF1+wYsUKKlas6Da/QYMGeHl5ubXvnj17OHTokNr3KjmdTlJSUtS216hly5bs2LGDrVu3uoaGDRvStWtX12u1b+44ffo0v/zyC2XKlCnY+63VvcTlH3PmzDE+Pj5mxowZ5scffzT9+vUzQUFBJiEhwerQCpS//vrLbNmyxWzZssUAZsKECWbLli3m4MGDxhhjxo0bZ4KCgsz//vc/s337dtOuXTtTsWJFc/bsWYsjz//+9a9/mcDAQLNq1SoTHx/vGs6cOeMq8/jjj5vy5cubFStWmE2bNpnIyEgTGRlpYdQFx7Bhw8zq1avN/v37zfbt282wYcOMzWYz33zzjTFGbZvbLryKzRi179V68sknzapVq8z+/fvN2rVrTVRUlClZsqQ5evSoMabgtqsSpHzmzTffNOXLlzfe3t6mcePG5ocffrA6pAJn5cqVBsg09OjRwxiTcan/iBEjTEhIiPHx8TEtW7Y0e/bssTboAiKrdgXMhx9+6Cpz9uxZ8+9//9sUL17cFClSxHTo0MHEx8dbF3QB8n//93+mQoUKxtvb25QqVcq0bNnSlRwZo7bNbRcnSGrfq9OpUydTpkwZ4+3tbcqVK2c6depk9u3b55pfUNvVZowx1hy7EhEREcmf1AdJRERE5CJKkEREREQuogRJRERE5CJKkEREREQuogRJRERE5CJKkEREREQuogRJRERE5CJKkEREREQuogRJRAq12NhYPDw8aNOmjdWhiEgBojtpi0ih1qdPH4oWLcr777/Pnj17KFu2rNUhiUgBoCNIIlJonT59mrlz5/Kvf/2LNm3aMGPGDLf5CxcupEqVKvj6+tKiRQs++ugjbDYbp06dcpX5/vvvueOOO/Dz8yMsLIyBAweSnJzsmv/WW2+56ggJCeHBBx+8TlsnInlJCZKIFFqffvop1atXp1q1ajz66KN88MEHnD9ovn//fh588EHat2/Ptm3beOyxx/jPf/7jtvwvv/xC69at6dixI9u3b2fu3Ll8//339O/fH4BNmzYxcOBAXnjhBfbs2cPSpUu58847r/t2ikju0yk2ESm0brvtNh5++GEGDRpEeno6ZcqUYd68eTRv3pxhw4bx1VdfsWPHDlf55557jjFjxnDy5EmCgoLo06cPHh4evPPOO64y33//Pc2aNSM5OZnFixfTq1cvfvvtN4oVK2bFJopIHtERJBEplPbs2cOGDRvo0qULAJ6ennTq1In333/fNb9Ro0ZuyzRu3NhtfNu2bcyYMYOiRYu6hujoaJxOJ/v376dVq1ZUqFCBSpUq0a1bN2bNmsWZM2euzwaKSJ7ytDoAEZG88P7775Oenu7WKdsYg4+PD1OmTMlRHadPn+axxx5j4MCBmeaVL18eb29vNm/ezKpVq/jmm28YOXIko0ePZuPGjQQFBeXWpoiIBZQgiUihk56ezsyZMxk/fjx3332327z27dvzySefUK1aNRYvXuw2b+PGjW7j9evX58cff6Ry5crZrsvT05OoqCiioqIYNWoUQUFBrFixggceeCD3NkhErjslSCJS6CxatIiTJ0/Su3dvAgMD3eZ17NiR999/n08//ZQJEybwzDPP0Lt3b7Zu3eq6ys1mswHwzDPP0KRJE/r370+fPn3w9/fnxx9/ZNmyZUyZMoVFixbx66+/cuedd1K8eHEWL16M0+mkWrVq13uTRSSXqQ+SiBQ677//PlFRUZmSI8hIkDZt2sRff/3FZ599xvz586lduzZvv/226yo2Hx8fAGrXrs3q1av5+eefueOOO6hXrx4jR450nbYLCgpi/vz53HXXXdSoUYNp06bxySefcMstt1y/jRWRPKGr2ERE/jZmzBimTZvG4cOHrQ5FRCymU2wicsN66623aNSoEcHBwaxdu5bXXnvNdY8jEbmxKUESkRvW3r17eemllzhx4gTly5fnySefZPjw4VaHJSL5gE6xiYiIiFxEnbRFRERELqIESUREROQiSpBERERELqIESUREROQiSpBERERELqIESUREROQiSpBERERELqIESUREROQiSpBERERELvL/kVXTRMgwt0EAAAAASUVORK5CYII=", + "image/png": "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bOHDDz+kYsWKjB49moYNG+Y7NMPEiROZOnUqzzzzDGvWrCE+Pp6oqKh8LwPmF5ObmxtxcXEuce3cuZOpU6cC0L9/f3799Vd69uzJ9u3badq0Ka+99tplHYeKFSvmOr67d+/mqaeeAi7u87l//37uuusuGjRowCeffEJcXBwzZswA/vn8XKkbFC7m2Jy5vOTv78/cuXPZtGmTc58u5pzBhT9LZxTk+wLk+s6cz9X47Tjf99MqSpBEriG1atVi2LBhfPnll9x7773Ojsqenp5kZ2e71K1bty5ZWVnOxAVyOgnv3r2bevXqAVC7dm02bdrksty57/NyZj0jR46kbdu21K1bl+PHj1/u7l2yxo0bs2fPHipUqJAr8Tz7lu+z1a1b16XvD8D333+fa70//fRTrnXWqFHDeSefu7s7kZGRTJgwgR9++IH9+/ezevXqPLe5bt06OnfuzEMPPUTDhg2pXr26y1AO1atXx8PDw+UcJCcnu9S56aabyM7OJikpKVdMZ9/BFRoayqOPPsqiRYt44okneOutt/KMqU6dOmRlZREXF+cs2717t0uS17hxYxITE3F3d8+1zXLlyjnr5ff5PFdcXBwOh4NJkybRokULatWqxR9//OFSp0GDBqxatSrP5SHvz3xBFfTY7Nq1iz///JOXXnqJW265hTp16hSo30xesRXks3SpsrKyXDpdnzl/devWdZYV9Nycq27dumzbts2lM/m6deuw2+0uLZvnU7t2bbKysti6dauzbO/evVf8N0MJksg14NSpUwwcONB5F866devYtGmT8wcwLCyM1NRUVq1axdGjRzl58iQ1a9akc+fODBgwgO+++45t27bx0EMPUblyZTp37gzAoEGDWLZsGZMnT2bPnj28+eabLF++/ILPQSpTpgxBQUHMmjWLvXv3snr1amJiYq74cchPjx49KFeuHJ07d+bbb79l3759rF27lsGDBzs7cp/r0UcfZc+ePTz11FPs3r2befPmuXQqBXjmmWdYv349AwcOJD4+nj179vC///3P2UF16dKlTJs2jfj4eA4cOMCcOXNwOBz5/uGoWbMmK1euZP369ezcuZNHHnnEZYRmPz8/evfuzVNPPcWaNWv48ccf6devH3a73XlOatWqRY8ePejVqxeLFi1i3759bNy4kfHjx/P55zmDpA4dOpQvvviCffv2sWXLFtasWePyx/JstWvXpn379jzyyCNs2LCBuLg4+vfv79KCExkZSUREBNHR0Xz55Zfs37+f9evX83//939s3rz5gp/Pc9WoUYPMzExee+01fv31Vz744ANmzpzpUmfEiBFs2rSJf//73/zwww/s2rWLN954g6NHjwI5n/kNGzawf/9+jh49WuDWios5NlWqVMHT09MZ55IlSwo0llJYWBjffPMNv//+uzPeC32WLoeHhweDBg1ynr8+ffrQokULmjdvftHn5lw9evTA29ub3r17s2PHDtasWcOgQYPo2bOn83LfhdSpU4fIyEgefvhhNm7cyNatW3n44Yfx8fG5ss/TLFCPK8lFnbSLt/N14CvqevfubTp37pyr/NwOpmd3vE5PTzcPPPCACQ0NNZ6enqZSpUpm4MCBLvv/6KOPmqCgIAOYMWPGGGOMOXbsmOnZs6cJCAgwPj4+Jioqyvz8888u2501a5apXLmy8fHxMdHR0ebFF180ISEhzvljxowxDRs2zBXvypUrTd26dY2Xl5dp0KCBWbt2rUvnzjOdtLdu3ZrvPp67n/kdn7w65J7bETYhIcH06tXLlCtXznh5eZnq1aubAQMGnPc7/tlnn5kaNWoYLy8vc8stt5h33303V3wbN2407dq1M6VLlza+vr6mQYMGZty4ccaYnE62rVu3NmXKlDE+Pj6mQYMGZsGCBflu788//zSdO3c2pUuXNhUqVDAjR440vXr1ctnflJQU8+CDD5pSpUqZkJAQM3nyZNO8eXMzfPhwZ52MjAwzevRoExYWZjw8PEzFihXNPffcY3744QdjjDEDBw40119/vfHy8jLly5c3PXv2NEePHs03roSEBNOxY0fj5eVlqlSpYubMmZPr+KakpJhBgwaZSpUqGQ8PDxMaGmp69OhhDh48WKDP57kmT55sKlas6PxczpkzJ9exX7t2rWnZsqXx8vIygYGBJioqyjl/9+7dpkWLFsbHx8cAZt++fQXqpH2xx2bevHkmLCzMeHl5mYiICLNkyZJcn+tzxcbGmgYNGhgvLy9z9p/p832WjMm7c/fZ3yljcn+vznx/PvnkE1O9enXj5eVlIiMjzYEDB4wxBfvtONe52/zhhx9MmzZtjLe3tylbtqwZMGCASyf1vL6zQ4YMMa1bt3a+/+OPP8ydd95pvLy8TNWqVc28efNMhQoVzMyZM/OMoTA6adv+3hm5SCkpKQQEBJCcnIy/v7/V4chFOn36NPv27XMZl0cKx4ABA9i1axfffvut1aEIOf1gKleuzKRJk+jXr5/V4UgRU1wfSfTbb78RGhrq7Kx/rvP9xhf077dG0haRy/LKK6/Qrl07fH19Wb58Oe+//z6vv/661WFds7Zu3cquXbto3ry580GpgPOyqEhxtHr1alJTU6lfvz4JCQk8/fTThIWFnXfcsMulBElELsvGjRuZMGECf/31F9WrV2fatGn079/f6rCuaa+88gq7d+/G09OTJk2a8O2337p0hhYpbjIzM3n22Wf59ddf8fPzo2XLlsydO7fAA1ZeCl1iu0S6xFa86RKbiEjJVRiX2HQXm4iIiMg5lCCJiIiInEMJkoiIiMg5lCCJiIiInEMJkoiIiMg5lCCJiBSS48eP89xzz5GQkGB1KCXGG2+8wTfffGN1GE5z5szhiy++uGLrnzp1KrGxsVds/VJwSpBESjCbzcbixYsLfb233XYbQ4cOdb4PCwtjypQphb6dvLZ1NV3Mto0x9O7dm1OnTlGxYsXL3vbatWux2WxFdoTjK3nOz1iyZAn//e9/6d+/v6UPMz5bixYtePjhh9m5c2eB6o8dO5ZGjRoVqO6kSZNYtGgRjRs3vowI89anTx+io6Od7y/0Hb5Svx3FiRIkkWKmT58+2Gw2bDYbHh4eBAcH065dO959991cD9xMSEjgzjvvLNB6L+YHcdGiRQV66ObFyC8huBLbKui2L8bEiRPx9/dn/PjxhRJTy5YtSUhIICAgoFDWV9wkJyczduxYPvnkE8aOHcuwYcOsDgnIedjv3Llz6dWrF6dOnbro5ceOHUufPn1yla9bt44PPviA//3vf3h5eRVCpK6mTp2a62HKZ9u0aRMPP/xwoW+3ONNI2iLFUPv27XnvvffIzs7m8OHDrFixgiFDhvDxxx+zZMkS3N1zvtohISGFut2MjAw8PT0pW7Zsoa73fK7mti7H008/XWjryszMxNPTs9DPX3ESEBDAli1bAHjwwQd58MEHLY7oHzfffDObNm0q1HW2atWK+Pj4Ql3n2S6UaJcvX/6yt5GZmXlFR7a+2tSCJFIMeXl5ERISQuXKlWncuDHPPvss//vf/1i+fLnL/xLPbhXKyMhg4MCBVKxYEW9vb6pWreps7QgLCwPgnnvuwWazOd+fuTzw9ttvu4xIm9elp7/++ovu3bvj6+tL5cqVmTFjhnPe/v37sdlsLn8ATpw4gc1mY+3atezfv582bdoAUKZMGWw2m/N/2edu6/jx4/Tq1YsyZcpQqlQp7rzzTvbs2eOcP3v2bAIDA/niiy+oW7cupUuXpn379vn2CzrftgEcDgdPP/00ZcuWJSQkhLFjx7osf+LECfr370/58uXx9/fn9ttvZ9u2bS513njjDa6//no8PT2pXbs2H3zwgct8m83GG2+8wd13342vry/jxo3Ls1Vr9uzZVKlShVKlSnHPPfcwadIkAgMDnfPPvYwCMHToUG677TaX/Rk/fjzVqlXDx8eHhg0b8vHHH+d5bM5ISkqiU6dO+Pj4UK1aNebOnZurzoWOw7Zt22jTpg1+fn74+/vTpEkTNm/enO82J0+eTP369fH19SU0NJR///vfpKamutR56623CA0NdR6PyZMnuxwPgP/97380btwYb29vqlevznPPPUdWVhaQc1l07NixVKlSBS8vLypVqsTgwYPzjemXX36hc+fOBAcHU7p0aZo1a8ZXX3113mN3IQU5H8uWLaNWrVr4+PjQpk0bZs+e7fLZyOsy3pQpU5zfY8j7s3G2vC6ZnmmB9vHxoXr16i5xnflOL1iwgNatW+Pt7e38XLz99tvUrVsXb29v6tSpU2yfzagESeQMYyAj7epPhfS0n9tvv52GDRuyaNGiPOdPmzaNJUuW8NFHH7F7927mzp3r/AE987/h9957j4SEBJf/He/du5dPPvmERYsWnfd/uBMnTqRhw4Zs3bqV4cOHM2TIEFauXFmg2ENDQ/nkk08A2L17NwkJCUydOjXPun369GHz5s0sWbKE2NhYjDF06NCBzMxMZ52TJ0/yyiuv8MEHH/DNN99w8OBBnnzyyUva9vvvv4+vry8bNmxgwoQJPP/88y77dd9995GUlMTy5cuJi4ujcePGtG3blmPHjgHw6aefMmTIEJ544gl27NjBI488Qt++fVmzZo1LHGPHjuWee+5h+/bt/Otf/8oV54YNG+jXrx8DBw4kPj6eNm3a8OKLLxbk8LoYP348c+bMYebMmfz4448MGzaMhx56iK+//jrfZfr06cOhQ4dYs2YNH3/8Ma+//jpJSUkudS50HHr06MF1113Hpk2biIuLY/jw4edtbbDb7UybNo0ff/yR999/n9WrV7u00q1bt45HH32UIUOGEB8fT7t27Rg3bpzLOr799lt69erFkCFD+Omnn3jzzTeZPXu2s94nn3zCq6++yptvvsmePXtYvHgx9evXzzem1NRUOnTowKpVq9i6dSvt27enU6dOHDx4MP8DfgEXOh+HDh3i3nvvpVOnTsTHx9O/f3+GDx9+ydu7GKNGjaJLly5s27aNHj168MADD+Tqe3Xmu75z506ioqKYO3cuo0ePZty4cezcuZP//Oc/jBo1ivfff/+qxFyojFyS5ORkA5jk5GSrQ5FLcOrUKfPTTz+ZU6dO/VOYnmrMGP+rP6WnXlTsvXv3Np07d85zXrdu3UzdunWd7wHz6aefGmOMGTRokLn99tuNw+HIc9mz654xZswY4+HhYZKSklzKW7dubYYMGeJ8X7VqVdO+fftcsdx5553GGGP27dtnALN161bn/OPHjxvArFmzxhhjzJo1awxgjh8/nu+2fv75ZwOYdevWOecfPXrU+Pj4mI8++sgYY8x7771nALN3715nnRkzZpjg4OA89/tC27755ptdypo1a2aeeeYZY4wx3377rfH39zenT592qXP99debN9980xhjTMuWLc2AAQNc5t93332mQ4cOzveAGTp06Hlj6t69u8syxuQc44CAAOf7vD4bQ4YMMa1btzbGGHP69GlTqlQps379epc6/fr1M927dzd52b17twHMxo0bnWU7d+40gHn11VcLfBz8/PzM7Nmz89xGQSxcuNAEBQU533fr1s107NjRpU6PHj1cjkfbtm3Nf/7zH5c6H3zwgalYsaIxxphJkyaZWrVqmYyMjEuO64YbbjCvvfZavvPHjBljGjZsmOe8gpyPESNGmHr16rnMf+aZZ1w+G3lt49VXXzVVq1Z1vj/3s5HXd/jM+TQm5zP56KOPuqwzPDzcPPbYY8aYf77TU6ZMcalz/fXXm3nz5rmUvfDCCyYiIiLPY3Cl5Pkb/7eC/v1WC5JICWKMwWaz5TmvT58+xMfHU7t2bQYPHsyXX35ZoHVWrVq1QP0TIiIicr0v6J0+BbVz507c3d0JDw93lgUFBVG7dm2XbZUqVYrrr7/e+b5ixYq5WjwKqkGDBi7vz17Xtm3bSE1NJSgoiNKlSzunffv28csvvzhjbtWqlcs6WrVqlevYNG3a9Lxx7Ny502W/Ifcxv5C9e/dy8uRJ2rVr5xLvnDlznPHmtV13d3eaNGniLKtTp47LpayCHIeYmBj69+9PZGQkL730Ur7bO+Orr76ibdu2VK5cGT8/P3r27Mmff/7JyZMngZzWvubNm7ssc+77bdu28fzzz7vENGDAABISEjh58iT33Xcfp06donr16gwYMIBPP/3UefktL6mpqTz55JPUrVuXwMBASpcuzc6dOy+5Bakg56MwzvulKsh3+uzPbVpaGr/88gv9+vVz2Z8XX3zxgue7KCoSnbRnzJjBxIkTSUxMpGHDhrz22mu5PuhnW7hwIaNGjWL//v3UrFmTl19+mQ4dOjjnjx07lvnz53Po0CE8PT1p0qQJ48aNc/mQhYWFceDAAZf1jh8//qo1XUoR5FEKnv3Dmu0Wkp07d1KtWrU85zVu3Jh9+/axfPlyvvrqK+6//34iIyMv2P/E19f3suOy23P+L2bOupx49iWxwnbupRubzeay7ctd15m7BVNTU6lYsSJr167Ntdy5fWEupLCO87n7efZxPtOH5/PPP6dy5cou9S7nzqmCHIexY8fy4IMP8vnnn7N8+XLGjBnD/Pnzueeee3Its3//fu666y4ee+wxxo0bR9myZfnuu+/o168fGRkZlCpVsO9Mamoqzz33HPfee2+ued7e3oSGhrJ7926++uorVq5cyb///W8mTpzI119/neflvyeffJKVK1fyyiuvUKNGDXx8fOjatSsZGRkFiiev+ODyz8eFzvuVdPbn9sz+vPXWW7mSOjc3t6sST2GyPEFasGABMTExzJw5k/DwcKZMmUJUVBS7d++mQoUKueqvX7+e7t27M378eO666y7mzZtHdHQ0W7Zs4cYbbwRybsOcPn061atX59SpU7z66qvccccd7N271+V/ws8//zwDBgxwvvfz87vyOyxFl80Gnpf/R8oqq1evZvv27ee9Hdrf359u3brRrVs3unbtSvv27Tl27Bhly5bFw8OD7OzsS97+999/n+t93bp1gX/ukElISOCmm24CyNWfydPTE+C8MdStW5esrCw2bNhAy5YtAfjzzz/ZvXs39erVu+TYC7LtvDRu3JjExETc3d1dOsSeG/O6devo3bu3s2zdunUXHW/dunXZsGGDS9m5x7x8+fLs2LHDpSw+Pt75x75evXp4eXlx8OBBWrduXaDt1qlTh6ysLOLi4mjWrBmQ03pzdufxghwHyPltrlWrFsOGDaN7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xxr0+S8KLB9JW3IcPXqU7Oxs5wjiZwQHB7Nr1y6Lorp2JSYmAuR5Ps7Mk8LjcDgYOnQorVq1co6Kn5iYiKenZ66HQuscFJ7t27cTERHB6dOnKV26NJ9++in16tUjPj5ex/4qmD9/Plu2bGHTpk255unzbz0lSCJiuccff5wdO3bw3XffWR3KNaV27drEx8eTnJzMxx9/TO/evfn666+tDuuacOjQIYYMGcLKlStdHoMlRYcusRUR5cqVw83NLdcdCocPHyYkJMSiqK5dZ465zseVN3DgQJYuXcqaNWu47rrrnOUhISFkZGRw4sQJl/o6B4XH09OTGjVq0KRJE8aPH0/Dhg2ZOnWqjv1VEBcXR1JSEo0bN8bd3R13d3e+/vprpk2bhru7O8HBwToHFlOCVER4enrSpEkTVq1a5SxzOBysWrWKiIgICyO7NlWrVo2QkBCX85GSksKGDRt0PgqJMYaBAwfy6aefsnr1aqpVq+Yyv0mTJnh4eLicg927d3Pw4EGdgyvE4XCQnp6uY38VtG3blu3btxMfH++cmjZtSo8ePZyvdQ6spUtsRUhMTAy9e/emadOmNG/enClTppCWlkbfvn2tDq1ESk1NZe/evc73+/btIz4+nrJly1KlShWGDh3Kiy++SM2aNalWrRqjRo2iUqVKREdHWxd0CfL4448zb948/ve//+Hn5+fsVxEQEICPjw8BAQH069ePmJgYypYti7+/P4MGDSIiIoIWLVpYHH3xN2LECO68806qVKnCX3/9xbx581i7di1ffPGFjv1V4Ofn5+xvd4avry9BQUHOcp0Di1l9G524eu2110yVKlWMp6enad68ufn++++tDqnEWrNmjQFyTb179zbG5NzqP2rUKBMcHGy8vLxM27Ztze7du60NugTJ69gD5r333nPWOXXqlPn3v/9typQpY0qVKmXuuecek5CQYF3QJci//vUvU7VqVePp6WnKly9v2rZta7788kvnfB37q+/s2/yN0Tmwms0YYyzKzURERESKJPVBEhERETmHEiQRERGRcyhBEhERETmHEiQRERGRcyhBEhERETmHEiQRERGRcyhBEhERETmHEiQRERGRcyhBEpESLTY2Fjc3Nzp27Gh1KCJSjGgkbREp0fr370/p0qV555132L17N5UqVbI6JBEpBtSCJCIlVmpqKgsWLOCxxx6jY8eOzJ4922X+kiVLqFmzJt7e3rRp04b3338fm83GiRMnnHW+++47brnlFnx8fAgNDWXw4MGkpaU557/++uvOdQQHB9O1a9ertHciciUpQRKREuujjz6iTp061K5dm4ceeoh3332XM43m+/bto2vXrkRHR7Nt2zYeeeQR/u///s9l+V9++YX27dvTpUsXfvjhBxYsWMB3333HwIEDAdi8eTODBw/m+eefZ/fu3axYsYJbb731qu+niBQ+XWITkRKrVatW3H///QwZMoSsrCwqVqzIwoULue222xg+fDiff/4527dvd9YfOXIk48aN4/jx4wQGBtK/f3/c3Nx48803nXW+++47WrduTVpaGsuWLaNv37789ttv+Pn5WbGLInKFqAVJREqk3bt3s3HjRrp37w6Au7s73bp145133nHOb9asmcsyzZs3d3m/bds2Zs+eTenSpZ1TVFQUDoeDffv20a5dO6pWrUr16tXp2bMnc+fO5eTJk1dnB0XkinK3OgARkSvhnXfeISsry6VTtjEGLy8vpk+fXqB1pKam8sgjjzB48OBc86pUqYKnpydbtmxh7dq1fPnll4wePZqxY8eyadMmAgMDC2tXRMQCSpBEpMTJyspizpw5TJo0iTvuuMNlXnR0NB9++CG1a9dm2bJlLvM2bdrk8r5x48b89NNP1KhRI99tubu7ExkZSWRkJGPGjCEwMJDVq1dz7733Ft4OichVpwRJREqcpUuXcvz4cfr160dAQIDLvC5duvDOO+/w0UcfMXnyZJ555hn69etHfHy88y43m80GwDPPPEOLFi0YOHAg/fv3x9fXl59++omVK1cyffp0li5dyq+//sqtt95KmTJlWLZsGQ6Hg9q1a1/tXRaRQqY+SCJS4rzzzjtERkbmSo4gJ0HavHkzf/31Fx9//DGLFi2iQYMGvPHGG8672Ly8vABo0KABX3/9NT///DO33HILN910E6NHj3ZetgsMDGTRokXcfvvt1K1bl5kzZ/Lhhx9yww03XL2dFZErQnexiYj8bdy4ccycOZNDhw5ZHYqIWEyX2ETkmvX666/TrFkzgoKCWLduHRMnTnSOcSQi1zYlSCJyzdqzZw8vvvgix44do0qVKjzxxBOMGDHC6rBEpAjQJTYRERGRc6iTtoiIiMg5lCCJiIiInEMJkoiIiMg5lCCJiIiInEMJkoiIiMg5lCCJiIiInEMJkoiIiMg5lCCJiIiInEMJkoiIiMg5/h8Jg17AimXbWgAAAABJRU5ErkJggg==", "text/plain": [ "
" ] @@ -192,7 +192,7 @@ "outputs": [ { "data": { - "image/png": "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HD58mO+++44JEyYwcuRI7r33XkqUKMHGjRt54oknePzxx/nzzz+BzLFSIiMj8fPzY926daxfv57ixYvTtm1bUlNTsz2ehw4d4oEHHqBDhw5s376dPn36MHToUJc6v//+O23btuXBBx/kxx9/ZO7cuXz//ff0798fgC1btjBw4EBeeukldu/ezbJly7jjjjsu+R6eO3eORo0asXjxYn7++Wf69etHt27d2LRpk7NOdHQ069evZ+HChaxYsYJ169axdetWl3b69+9PTEwMc+bM4ccff+Shhx6ibdu2zuT3ySefJCUlhe+++46ffvqJ1157jeLFi18yrp49ezov933++ee88847WZKAhx56iKNHj7J06VJiY2Np2LAhbdq04cSJE8ClP5+XYrfbeeutt9i5cycff/wxq1at4tlnn3Uu3759O23atKF27drExMTw/fff06FDBzIyMpg0aRLh4eH07dvX+ZkPCQlxab958+bs3r0bgC+++IK4uDiaN29+1ccmLS2Nl19+mR07drBgwQL2799Pz549L1l//vz53HTTTbz00kvO2ODKn6Xz3nzzTVq0aMG2bdto37493bp1o3v37jz22GNs3bqVm2++me7du3PhY1jPnDnDmDFjmDlzJuvXr+fUqVM88sgjzuVX+95cKDk5mcjISEqUKMHmzZuZN28e3377bZa4V69eze+//87q1av5+OOPmTFjBjNmzHAu7969O4cPH2bNmjV88cUXTJs27bKJZq4wck0SEhIMYBISEqwORa7B2bNnzS+//GLOnj2bZVml5xbdsOla9OjRw7i5uRlfX1+Xydvb2wDm5MmTxhhjPvroIxMQEOBcz8/Pz8yYMSPbNi+ua4wxv/32mwHM+vXrnWXHjx83Pj4+5rPPPjPGGNO5c2fTvn17l/W6du3q0tbIkSONh4eHOXr06GX369ixYwYwP/30kzHGmH379hnAfPDBB846n376qQHMypUrnWVjx441NWrUcDk+lSpVMhkZGc6yGjVqmNtvv905n56ebnx9fc2nn35qjDHmk08+MTVq1DAOh8NZJyUlxfj4+Jjly5dnG++wYcNM7dq1Xcqee+45l/egd+/epl+/fi511q1bZ+x2uzl79qz54osvjL+/v0lMTLzssbmc9u3bm6eeesoYY0xiYqLx8PAw8+bNcy4/deqUKVasmBk0aJAxxpgD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61ZWr17t8mN5oRo1atC2bVsef/xxNm7cSGxsLH369HE5gxMREUF4eDhRUVF888037N+/nw0bNvCf//yHLVu2XPHzebGqVauSlpbG22+/zR9//MEnn3zC1KlTXeoMGzaMzZs38+9//5sff/yRX3/9lXfffZfjx48DmZ/5jRs3sn//fo4fP57jsxVXc2wqVqyIp6enM86FCxfmaCyl0NBQvvvuO/766y9nvFf6LF0PDw8PBgwY4Hz/evbsSbNmzWjatOlVvzcX69q1K97e3vTo0YOff/6Z1atXM2DAALp16+a83HclNWvWJCIign79+rFp0ya2bdtGv3798PHxydvnaeaox5VkoU7aBdvlOvDldz169DAdO3bMUn5xB9MLO16npKSYRx55xISEhBhPT09Tvnx5079/f5f9f+KJJ0ypUqUMYEaOHGmMMebEiROmW7duJiAgwPj4+JjIyEjz22+/uWx32rRppkKFCsbHx8dERUWZ0aNHm+DgYOfykSNHmnr16mWJd8WKFaZWrVrGy8vL1K1b16xZs8alc+f5Ttrbtm275D5evJ+XOj7Zdci9uCNsXFyc6d69uyldurTx8vIyVapUMX379r3sd/zrr782VatWNV5eXub22283H374YZb4Nm3aZO666y5TvHhx4+vra+rWrWvGjBljjMnsZNuyZUtTokQJ4+PjY+rWrWvmzp17ye39/fffpmPHjqZ48eKmbNmy5oUXXjDdu3d32d/ExETz6KOPmmLFipng4GAzYcIE07RpUzN06FBnndTUVDNixAgTGhpqPDw8TLly5cz9999vfvzxR2OMMf379zc333yz8fLyMmXKlDHdunUzx48fv2RccXFxpn379sbLy8tUrFjRzJw5M8vxTUxMNAMGDDDly5c3Hh4eJiQkxHTt2tUcPHgwR5/Pi02YMMGUK1fO+bmcOXNmlmO/Zs0a07x5c+Pl5WUCAwNNZGSkc/nu3btNs2bNjI+PjwHMvn37ctRJ+2qPzezZs01oaKjx8vIy4eHhZuHChVk+1xeLiYkxdevWNV5eXubCn+nLfZaMyb5z94XfKWOyfq/Of3+++OILU6VKFePl5WUiIiLMgQMHjDE5+9txsYu3+eOPP5rWrVsbb29vU7JkSdO3b1+XTurZfWcHDRpkWrZs6Zw/fPiwueeee4yXl5epVKmSmT17tilbtqyZOnVqtjHkRidt2/92Rq5SYmIiAQEBJCQk4O/vb3U4cpXOnTvHvn37XMblkdzRt29ffv31V9atW2d1KEJmP5gKFSowfvx4evfubXU4ks8U1EcS/fnnn4SEhDg761/scn/jc/r7rZG0ReS6vPHGG9x11134+vqydOlSPv74Y9555x2rwyqytm3bxq+//krTpk2dD0oFnJdFRQqiVatWkZSURJ06dYiLi+PZZ58lNDT0suOGXS8lSCJyXTZt2sS4ceM4ffo0VapU4a233qJPnz5Wh1WkvfHGG+zevRtPT08aNWrEunXrXDpDixQ0aWlpPP/88/zxxx/4+fnRvHlzZs2aleMBK6+FLrFdI11iK9h0iU1EpPDKjUtsuotNRERE5CJKkEREREQuogRJRERE5CJKkEREREQuogRJRERE5CJKkEREcsnJkyd58cUXiYuLszqUQuPdd9/lu+++szoMp5kzZ7J8+fI8a3/SpEnExMTkWfuSc0qQRAoxm83GggULcr3dVq1aMXjwYOd8aGgoEydOzPXtZLetG+lqtm2MoUePHpw9e5Zy5cpd97bXrFmDzWbLtyMc5+V7ft7ChQv573//S58+fSx9mPGFmjVrRr9+/di1a1eO6o8aNYr69evnqO748eOZP38+DRs2vI4Is9ezZ0+ioqKc81f6DufV346CRAmSSAHTs2dPbDYbNpsNDw8PgoKCuOuuu/jwww+zPHAzLi6Oe+65J0ftXs0fxPnz5+fooZtX41IJQV5sK6fbvhqvv/46/v7+jB07Nldiat68OXFxcQQEBORKewVNQkICo0aN4osvvmDUqFEMGTLE6pCAzIf9zpo1i+7du3P27NmrXn/UqFH07NkzS/n69ev55JNP+Oqrr/Dy8sqFSF1NmjQpy8OUL7R582b69euX69styDSStkgB1LZtWz766CMyMjI4cuQIy5YtY9CgQXz++ecsXLgQd/fMr3ZwcHCubjc1NRVPT09KliyZq+1ezo3c1vV49tlnc62ttLQ0PD09c/39K0gCAgLYunUrAI8++iiPPvqoxRH947bbbmPz5s252maLFi3Yvn17rrZ5oSsl2mXKlLnubaSlpeXpyNY3ms4giRRAXl5eBAcHU6FCBRo2bMjzzz/PV199xdKlS13+l3jhWaHU1FT69+9PuXLl8Pb2plKlSs6zHaGhoQDcf//92Gw25/z5ywMf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Z86c6Yw3u+26u7vTqFEjZ1nNmjVdLmXl5DhER0fTp08fIiIiePXVVy+5vfO+/fZb2rRpQ4UKFfDz86Nbt278/fffnDlzBsg829e0aVOXdS6e37FjBy+99JJLTH379iUuLo4zZ87w0EMPcfbsWapUqULfvn358ssvnZffspOUlMTTTz9NrVq1CAwMpHjx4uzateuazyDl5P3Ijff9WuXkO33h5zY5OZnff/+d3r17u+zP6NGjr/h+50f5opP2lClTeP3114mPj6devXq8/fbbWT7oF5o3bx7Dhw9n//79VKtWjddee4127do5l48aNYo5c+Zw6NAhPD09adSoEWPGjHH5kIWGhnLgwAGXdseOHXvDTl1KPuRRDJ4/bM12c8muXbuoXLlytssaNmzIvn37WLp0Kd9++y0PP/wwERERV+x/4uvre91x2e2Z/xczF1xOvPCSWG67+NKNzWZz2fb1tnX+bsGkpCTKlSvHmjVrsqx3cV+YK8mt43zxfl54nM/34Vm8eDEVKlRwqXc9d07l5DiMGjWKRx99lMWLF7N06VJGjhzJnDlzuP/++7Oss3//fu69917+7//+jzFjxlCyZEm+//57evfuTWpqKsWK5ew7k5SUxIsvvsgDDzyQZZm3tzchISHs3r2bb7/9lhUrVvDvf/+b119/nbVr12Z7+e/pp59mxYoVvPHGG1StWhUfHx86depEampqjuLJLj64/vfjSu97Xrrwc3t+f95///0sSZ2bm9sNiSc3WZ4gzZ07l+joaKZOnUpYWBgTJ04kMjKS3bt3U7Zs2Sz1N2zYQJcuXRg7diz33nsvs2fPJioqiq1bt3LrrbcCmbdhTp48mSpVqnD27FnefPNN7r77bvbu3evyP+GXXnqJvn37Ouf9/Pzyfocl/7LZwPP6f6SssmrVKn766afL3g7t7+9P586d6dy5M506daJt27acOHGCkiVL4uHhQUZGxjVv/4cffsgyX6tWLeCfO2Ti4uJo0KABQJb+TJ6engCXjaFWrVqkp6ezceNGmjdvDsDff//N7t27qV279jXHnpNtZ6dhw4bEx8fj7u7u0iH24pjXr19Pjx49nGXr16+/6nhr1arFxo0bXcouPuZlypTh559/dinbvn2788e+du3aeHl5cfDgQVq2bJmj7dasWZP09HRiY2Np0qQJkHn25sLO4zk5DpD5t7l6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bNnCtGnTALDZbAwePJjRo0dTrVo1523+5cuXJyoqCoBatWrRtm1b+vbty9SpU0lLS6N///488sgjObqDTURERAo3yxOkzp07c+zYMUaMGEF8fDz169dn2bJlzk7WBw8exH7B8OXNmzdn9uzZvPDCCzz//PNUq1aNBQsWOMdAAnj22WdJTk6mX79+nDp1ittuu41ly5Y5x0ACmDVrFv3796dNmzbY7XYefPBB3nrrrRu345fg5eXFyJEjs1zOkxtDx99aOv7W0vG3lo5//mL5OEgiIiIi+U2+eNSIiIiISH6iBElERETkIkqQRERERC6iBElERETkIkqQ8pkpU6YQGhqKt7c3YWFhbNq0yeqQCqXvvvuODh06UL58eWw2m/NZfucZYxgxYgTlypXDx8eHiIgI9uzZY02whczYsWNp0qQJfn5+lC1blqioKHbv3u1S59y5czz55JOUKlWK4sWL8+CDD2YZIFauzbvvvkvdunWdgxGGh4ezdOlS53Id+xvr1VdfdQ5Pc57eg/xBCVI+MnfuXKKjoxk5ciRbt26lXr16REZGZhn1W65fcnIy9erVY8qUKdkuHzduHG+99RZTp05l48aN+Pr6EhkZyblz525wpIXP2rVrefLJJ/nhhx9YsWIFaWlp3H333SQnJzvrDBkyhK+//pp58+axdu1aDh8+zAMPPGBh1IXHTTfdxKuvvkpsbCxbtmzhzjvvpGPHjuzcuRPQsb+RNm/ezHvvvUfdunVdyvUe5BNG8o2mTZuaJ5980jmfkZFhypcvb8aOHWthVIUfYL788kvnvMPhMMHBweb11193lp06dcp4eXmZTz/91IIIC7ejR48awKxdu9YYk3msPTw8zLx585x1du3aZQATExNjVZiFWokSJcwHH3ygY38DnT592lSrVs2sWLHCtGzZ0gwaNMgYo89/fqIzSPlEamoqsbGxREREOMvsdjsRERHExMRYGFnRs2/fPuLj413ei4CAAMLCwvRe5IGEhAQASpYsCUBsbCxpaWkux79mzZpUrFhRxz+XZWRkMGfOHJKTkwkPD9exv4GefPJJ2rdv73KsQZ///MTykbQl0/Hjx8nIyHCOIH5eUFAQv/76q0VRFU3x8fEA2b4X55dJ7nA4HAwePJgWLVo4R8OPj4/H09Mzy8Ogdfxzz08//UR4eDjnzp2jePHifPnll9SuXZvt27fr2N8Ac+bMYevWrWzevDnLMn3+8w8lSCJimSeffJKff/6Z77//3upQipQaNWqwfft2EhIS+Pzzz+nRowdr1661Oqwi4dChQwwaNIgVK1a4PP5K8h9dYssnSpcujZubW5Y7FY4cOUJwcLBFURVN54+33ou81b9/fxYtWsTq1au56aabnOXBwcGkpqZy6tQpl/o6/rnH09OTqlWr0qhRI8aOHUu9evWYNGmSjv0NEBsby9GjR2nYsCHu7u64u7uzdu1a3nrrLdzd3QkKCtJ7kE8oQconPD09adSoEStXrnSWORwOVq5cSXh4uIWRFT2VK1cmODjY5b1ITExk48aNei9ygTGG/v378+WXX7Jq1SoqV67ssrxRo0Z4eHi4HP/du3dz8OBBHf884nA4SElJ0bG/Adq0acNPP/3E9u3bnVPjxo3p2rWr87Xeg/xBl9jykejoaHr06EHjxo1p2rQpEydOJDk5mV69elkdWqGTlJTE3r17nfP79u1j+/btlCxZkooVKzJ48GBGjx5NtWrVqFy5MsOHD6d8+fJERUVZF3Qh8eSTTzJ79my++uor/Pz8nP0qAgIC8PHxISAggN69exMdHU3JkiXx9/dnwIABhIeH06xZM4ujL/iGDRvGPffcQ8WKFTl9+jSzZ89mzZo1LF++XMf+BvDz83P2tzvP19eXUqVKOcv1HuQTVt9GJ67efvttU7FiRePp6WmaNm1qfvjhB6tDKpRWr15tgCxTjx49jDGZt/oPHz7cBAUFGS8vL9OmTRuze/dua4MuJLI77oD56KOPnHXOnj1r/v3vf5sSJUqYYsWKmfvvv9/ExcVZF3Qh8q9//ctUqlTJeHp6mjJlypg2bdqYb775xrlcx/7Gu/A2f2P0HuQXNmOMsSg3ExEREcmX1AdJRERE5CJKkEREREQuogRJRERE5CJKkEREREQuogRJRERE5CJKkEREREQuogRJRERE5CJKkEREREQuogRJRAq1mJgY3NzcaN++vdWhiEgBopG0RaRQ69OnD8WLF2f69Ons3r2b8uXLWx2SiBQAOoMkIoVWUlISc+fO5f/+7/9o3749M2bMcFm+cOFCqlWrhre3N61bt+bjjz/GZrNx6tQpZ53vv/+e22+/HR8fH0JCQhg4cCDJycnO5e+8846zjaCgIDp16nSD9k5E8pISJBEptD777DNq1qxJjRo1eOyxx/jwww85f9J83759dOrUiaioKHbs2MHjjz/Of/7zH5f1f//9d9q2bcuDDz7Ijz/+yNy5c/n+++/p378/AFu2bGHgwIG89NJL7N69m2XLlnHHHXfc8P0UkdynS2wiUmi1aNGChx9+mEGDBpGenk65cuWYN28erVq1YujQoSxevJiffvrJWf+FF15gzJgxnDx5ksDAQPr06YObmxvvvfees873339Py5YtSU5OZsmSJfTq1Ys///wTPz8/K3ZRRPKIziCJSKG0e/duNm3aRJcuXQBwd3enc+fOTJ8+3bm8SZMmLus0bdrUZX7Hjh3MmDGD4sWLO6fIyEgcDgf79u3jrrvuolKlSlSpUoVu3boxa9Yszpw5c2N2UETylLvVAYiI5IXp06eTnp7u0inbGIOXlxeTJ0/OURtJSUk8/vjjDBw4MMuyihUr4unpydatW1mzZg3ffPMNI0aMYNSoUWzevJnAwMDc2hURsYASJBEpdNLT05k5cybjx4/n7rvvdlkWFRXFp59+So0aNViyZInLss2bN7vMN2zYkF9++YWqVateclvu7u5EREQQERHByJEjCQwMZNWqVTzwwAO5t0MicsMpQRKRQmfRokWcPHmS3r17ExAQ4LLswQcfZPr06Xz22WdMmDCB5557jt69e7N9+3bnXW42mw2A5557jmbNmtG/f3/69OmDr68vv/zyCytWrGDy5MksWrSIP/74gzvuuIMSJUqwZMkSHA4HNWrUuNG7LCK5TH2QRKTQmT59OhEREVmSI8hMkLZs2cLp06f5/PPPmT9/PnXr1uXdd9913sXm5eUFQN26dVm7di2//fYbt99+Ow0aNGDEiBHOy3aBgYHMnz+fO++8k1q1ajF16lQ+/fRTbrnllhu3syKSJ3QXm4jI/4wZM4apU6dy6NAhq0MREYvpEpuIFFnvvPMOTZo0oVSpUqxfv57XX3/dOcaRiBRtSpBEpMjas2cPo0eP5sSJE1SsWJGnnnqKYcOGWR2WiOQDusQmIiIichF10hYRERG5iBIkERERkYsoQRIRERG5iBIkERERkYsoQRIRERG5iBIkERERkYsoQRIRERG5iBIkERERkYsoQRIRERG5yP8D608XCs6z05cAAAAASUVORK5CYII=", + "image/png": "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tNldevr7779p164d/v7+lC5dmvHjx7um7d27F5vN5vYDcOLECWw2G8uXL2fv3r00btwYgCJFimCz2Vz/ZZ+/ruPHj9OxY0eKFClCoUKFuP/++9m9e7dr+pQpUwgODuabb76hatWqFC5cmKZNm+bYLuhC6wZwOBw888wzFC1alLCwMIYNG+Y2/4kTJ+jWrRvFixcnMDCQe+65h02bNrnVeffdd7n55pvx9vamcuXKfPzxx27TbTYb7777Lg899BD+/v68/PLL2Z7VmjJlCmXKlKFQoUK0bNmSUaNGERwc7Jp+/mUUgH79+nH33Xe7bc+IESMoV64cfn5+1KxZk88//zzbfXPW4cOHad68OX5+fpQrV45p06ZlqXOx/bBp0yYaN25MQEAAgYGB1KlTh3Xr1uW4ztGjR1O9enX8/f0JDw/nv//9LydPnnSr8/777xMeHu7aH6NHj3bbHwBfffUVtWvXxtfXl/Lly/PCCy+QkZEBOC+LDhs2jDJlyuDj40OpUqXo06dPjjH9+uuvtGjRgtDQUAoXLky9evX47rvvLrjvLiY3x2PBggVUqlQJPz8/GjduzJQpU9zeG9ldxhszZozrcwzZvzfOld0l07NnoP38/ChfvrxbXGc/0zNnzqRRo0b4+vq63hcffPABVatWxdfXlypVqhTYZzMqQRI5yxhIS7n2Qx497eeee+6hZs2azJ49O9vpb731FnPnzuWzzz5j586dTJs2zfUFeva/4cmTJ3Pw4EG3/45/+eUXvvjiC2bPnn3B/3Bff/11atasyYYNGxg4cCB9+/Zl8eLFuYo9PDycL774AoCdO3dy8OBBxo4dm23dzp07s27dOubOnUt8fDzGGB544AHS09NddU6dOsUbb7zBxx9/zPfff8/+/ft5+umnL2vdH330Ef7+/qxevZrXXnuN4cOHu21XmzZtOHz4MAsXLiQhIYHatWvTpEkTjh07BsCXX35J3759eeqpp9i6dSs9e/akS5cuLFu2zC2OYcOG0bJlS7Zs2cL//d//ZYlz9erVdO3alV69erFx40YaN27MSy+9lJvd62bEiBFMnTqVCRMmsG3bNvr378/jjz/OihUrcpync+fOHDhwgGXLlvH555/zzjvvcPjwYbc6F9sP7du356abbmLt2rUkJCQwcODAC55tsNvtvPXWW2zbto2PPvqIpUuXup2lW7lyJU888QR9+/Zl48aN3Hvvvbz88stuy/jhhx/o2LEjffv25eeff+a9995jypQprnpffPEFb775Ju+99x67d+9mzpw5VK9ePceYTp48yQMPPMCSJUvYsGEDTZs2pXnz5uzfvz/nHX4RFzseBw4c4OGHH6Z58+Zs3LiRbt26MXDgwMte36V4/vnnadWqFZs2baJ9+/Y8+uijWdpenf2sb9++nZiYGKZNm8aQIUN4+eWX2b59O6+88grPP/88H3300TWJOU8ZuSxJSUkGMElJSVaHIpfh9OnT5ueffzanT5/+tzD1pDFDA6/9kHrykmLv1KmTadGiRbbT2rZta6pWreoaB8yXX35pjDGmd+/e5p577jEOhyPbec+te9bQoUONl5eXOXz4sFt5o0aNTN++fV3jZcuWNU2bNs0Sy/3332+MMWbPnj0GMBs2bHBNP378uAHMsmXLjDHGLFu2zADm+PHjOa5r165dBjArV650TT969Kjx8/Mzn332mTHGmMmTJxvA/PLLL64648ePN6Ghodlu98XWfccdd7iV1atXzzz77LPGGGN++OEHExgYaM6cOeNW5+abbzbvvfeeMcaYhg0bmu7du7tNb9OmjXnggQdc44Dp16/fBWNq166d2zzGOPdxUFCQazy790bfvn1No0aNjDHGnDlzxhQqVMisWrXKrU7Xrl1Nu3btTHZ27txpALNmzRpX2fbt2w1g3nzzzVzvh4CAADNlypRs15Ebs2bNMiEhIa7xtm3bmmbNmrnVad++vdv+aNKkiXnllVfc6nz88cemZMmSxhhjRo0aZSpVqmTS0tIuO65bbrnFvP322zlOHzp0qKlZs2a203JzPAYNGmSqVavmNv3ZZ591e29kt44333zTlC1b1jV+/nsju8/w2eNpjPM9+cQTT7gtMzIy0vznP/8xxvz7mR4zZoxbnZtvvtlMnz7drezFF180UVFR2e6DqyXb7/h/5Pb3W2eQRK4jxhhsNlu20zp37szGjRupXLkyffr04dtvv83VMsuWLZur9glRUVFZxnN7p09ubd++HU9PTyIjI11lISEhVK5c2W1dhQoV4uabb3aNlyxZMssZj9yqUaOG2/i5y9q0aRMnT54kJCSEwoULu4Y9e/bw66+/umK+/fbb3ZZx++23Z9k3devWvWAc27dvd9tuyLrPL+aXX37h1KlT3HvvvW7xTp06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z2G7etkWuRyXdQZp//79hIeH87///S/baWXKlLniwERE5DKVrgO394Uf34R5cVD2dihU1OqoRAqUyzqDVK5cOY4cOZKl/K+//qJcuXJXHJSIiFyhRgOhWGVIOQyLBlodjUiBc1kJkjEGm82WpfzkyZP4+vpecVAiInKFvHz/vdS2eSbsWHDxeUTE5ZIuscXFxQHOu9aef/55t1v9MzMzWb16NbVq1crTAEVE5DLdVBca9oaVY2FePyjTQJfaRHLpkhKkDRs2AM4zSFu2bMHb29s1zdvbm5o1a/L000/nbYQiInL57h4MOxfC0V3wzWBoOcHqiEQKhEtKkJYtWwZAly5dGDt2LIGBgVclKBERySNevtDiHfjwPtj0KdzyMFS6z+qoRPK9y2qDNHnyZCVHIiIFRXg9aPBf5+v5cZB60tp4RAqAXJ9Bevjhh5kyZQqBgYE8/PDDF6w7e/bsKw5MRETyUOPBsH0unNgPS1+C+0daHZFIvpbrBCkoKMh151pQUNBVC0hERK4Cb3948E34pBWsngDV2zgfTSIi2cp1gjR58uRsX4uISAFRIRqqPwJbPoO5vaHnCvDwsjoqkXzpstognT59mlOnTrnG9+3bx5gxY/j222/zLDAREbkKmo4Av6JweBusesvqaETyrctKkFq0aMHUqVMBOHHiBPXr12fUqFG0aNGCd99995KXN378eCIiIvD19SUyMpI1a9ZcsP6sWbOoUqUKvr6+VK9enQUL/u0ALT09nWeffZbq1avj7+9PqVKl6NixI3/++afbMo4dO0b79u0JDAwkODiYrl27cvKkGi6KyHXOvxjEvOJ8vfxV+OtXa+MRyacuK0Fav349d955JwCff/45YWFh7Nu3j6lTp/LWW5f2H8nMmTOJi4tj6NChrF+/npo1axITE8Phw4ezrb9q1SratWtH165d2bBhA7GxscTGxrJ161YATp06xfr163n++edZv349s2fPZufOnTz00ENuy2nfvj3btm1j8eLFzJs3j++//54ePXpcxt4QESlgaj4K5RtDZip83ReMsToikXzHZsylfzIKFSrEjh07KFOmDI888gi33HILQ4cO5cCBA1SuXNnt8tvFREZGUq9ePcaNGweAw+EgPDyc3r17M3Bg1ucHtW3blpSUFObNm+cqa9CgAbVq1WLChOw7QFu7di3169dn3759lClT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uLBriImJweFwsGfPHu69917Kli1L+fLl6dChA9OmTePUqVPXZgNF5KrytDoAEZGrYdKkSWRkZLg1yjbG4OPjw7hx43K1jJMnT9KzZ0/69OmTZVqZMmXw9vZm/fr1LF++nG+//ZYhQ4YwbNgw1q5dS3BwcF5tiohYQAmSiFx3MjIymDp1KqNGjeK+++5zmxYbG8unn35K5cqVWbBggdu0tWvXuo3Xrl2bn3/+mQoVKuS4Lk9PT6Kjo4mOjmbo0KEEBwezdOlSHn744bzbIBG55pQgich1Z968eRw/fpyuXbsSFBTkNq1Vq1ZMmjSJzz77jNGjR/Pss8/StWtXNm7c6LrLzWazAfDss8/SoEEDevXqRbdu3fD39+fnn39m8eLFjBs3jnnz5vHbb79x1113UaRIERYsWIDD4aBy5crXepNFJI+pDZKIXHcmTZpEdHR0luQInAnSunXr+Pvvv/n888+ZPXs2NWrU4N1333Xdxebj4wNAjRo1WLFiBbt27eLOO+/ktttuY8iQIa7LdsHBwcyePZt77rmHqlWrMmHCBD799FNuueWWa7exInJV6C42EZF/vPzyy0yYMIEDBw5YHYqIWEyX2ETkhvXOO+9Qr149QkJCWLlyJa+//rqrjyMRubEpQRKRG9bu3bt56aWXOHbsGGXKlOGpp55i0KBBVoclIvmALrGJiIiInEeNtEVERETOowRJRERE5DxKkERERETOowRJRERE5DxKkERERETOowRJRERE5DxKkERERETOowRJRERE5DxKkERERETO8/8fEhQxQnK9ZQAAAABJRU5ErkJggg==", "text/plain": [ "
" ] diff --git a/relife/__init__.py b/relife/__init__.py index 04a74b8f..e69de29b 100644 --- a/relife/__init__.py +++ b/relife/__init__.py @@ -1,27 +0,0 @@ -from .distributions import Exponential, Gamma, Gompertz, LogLogistic, Weibull -from .nonparametric import ECDF, KaplanMeier, NelsonAalen, Turnbull -from .policies import ( - AgeReplacementPolicy, - OneCycleAgeReplacementPolicy, - OneCycleRunToFailure, - RunToFailure, -) -from .regression import AFT, ProportionalHazard - -__all__ = [ - "Exponential", - "Gamma", - "Gompertz", - "LogLogistic", - "Weibull", - "AFT", - "ProportionalHazard", - "ECDF", - "KaplanMeier", - "NelsonAalen", - "Turnbull", - "AgeReplacementPolicy", - "OneCycleAgeReplacementPolicy", - "RunToFailure", - "OneCycleRunToFailure", -] diff --git a/relife/core/__init__.py b/relife/core/__init__.py new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/relife/core/__init__.py @@ -0,0 +1 @@ + diff --git a/relife/descriptors.py b/relife/core/descriptors.py similarity index 94% rename from relife/descriptors.py rename to relife/core/descriptors.py index ecaa55f5..13de236b 100644 --- a/relife/descriptors.py +++ b/relife/core/descriptors.py @@ -27,6 +27,10 @@ def __get__(self, obj, objtype=None): def __set__( self, obj, value: Optional[Union[NDArray[np.float64], ModelArgs]] ) -> ModelArgs: + """ + if nb_assets is 1, values are all 1d array (event floats) + if nb_assets is more than 1, values are all 2d array + """ if value is None: setattr(obj, self.private_name, value) else: diff --git a/relife/discounting.py b/relife/core/discounting.py similarity index 100% rename from relife/discounting.py rename to relife/core/discounting.py diff --git a/relife/likelihoods.py b/relife/core/likelihoods.py similarity index 98% rename from relife/likelihoods.py rename to relife/core/likelihoods.py index a14b0f75..4776d42a 100644 --- a/relife/likelihoods.py +++ b/relife/core/likelihoods.py @@ -11,7 +11,7 @@ from relife.data import LifetimeData if TYPE_CHECKING: # avoid circular imports due to typing - from relife.model import ParametricLifetimeModel, ParametricModel + from .model import ParametricLifetimeModel, ParametricModel class Likelihood(Protocol): @@ -71,7 +71,7 @@ class LikelihoodFromLifetimes(Likelihood): Parameters ---------- model : ParametricLifetimeModel - Underlying model used to compute probability functions + Underlying core used to compute probability functions lifetime_data : LifetimeData Observed lifetime data used one which the likelihood is evaluated model_args : tuple of zero or more ndarray, default is () @@ -84,7 +84,7 @@ def __init__( lifetime_data: LifetimeData, model_args: tuple[NDArray[np.float64], ...] = (), ): - self.model = model.copy() # a copy is made as likelihood modifies model.params + self.model = model.copy() # a copy is made as likelihood modifies core.params self.lifetime_data = lifetime_data self.model_args = model_args diff --git a/relife/model/base.py b/relife/core/model.py similarity index 89% rename from relife/model/base.py rename to relife/core/model.py index 7079974c..966e96e6 100644 --- a/relife/model/base.py +++ b/relife/core/model.py @@ -1,17 +1,18 @@ import copy from abc import ABC, abstractmethod from dataclasses import InitVar, asdict, dataclass, field +from functools import wraps from itertools import chain -from typing import Any, Callable, Generic, Iterator, Optional, Self, Union +from typing import Any, Callable, Generic, Iterator, Optional, Self, Union, Protocol import numpy as np from numpy.typing import NDArray from scipy.optimize import Bounds, OptimizeResult, minimize, newton from relife.data import LifetimeData, lifetime_data_factory -from relife.likelihoods import LikelihoodFromLifetimes, hessian_from_likelihood +from .likelihoods import LikelihoodFromLifetimes, hessian_from_likelihood from relife.plots import PlotSurvivalFunc -from relife.quadratures import gauss_legendre, quad_laguerre +from .quadratures import gauss_legendre, quad_laguerre from relife.types import VariadicArgs @@ -146,9 +147,9 @@ def update(self): class ParametricModel: """ - Base class to create a parametric model. + Base class to create a parametric core. - Any parametric model must inherit from `ParametricModel`. + Any parametric core must inherit from `ParametricModel`. """ def __init__(self): @@ -163,14 +164,14 @@ def params(self) -> NDArray[np.float64]: Returns ------- ndarray - Parameters values of the model + Parameters values of the core Notes ----- If parameter values are not set, they are encoded as `np.nan` value. - Parameters can be by manually setting`params` through its setter, fitting the model if `fit` exists or - by specifying all parameters values when the model object is initialized. + Parameters can be by manually setting`params` through its setter, fitting the core if `fit` exists or + by specifying all parameters values when the core object is initialized. """ return np.array(self._params.values) @@ -249,7 +250,7 @@ def new_params(self, **kwparams: float): """Change local parameters structure. This method only affects **local** parameters. `ParametricModel` components are not - affected. This is usefull when one wants to change model parameters for any reason. For + affected. This is usefull when one wants to change core parameters for any reason. For instance `Regression` models use `new_params` to change number of regression coefficients depending on the number of covariates that are passed to the `fit` method. @@ -305,9 +306,9 @@ def copy(self): class LifetimeModel(Generic[*VariadicArgs], ABC): """ - Base class to create a lifetime model. + Base class to create a lifetime core. - A lifetime model is an object that can answer to traditional lifetime probability + A lifetime core is an object that can answer to traditional lifetime probability functions (``sf``, ``hf`` etc.) and other common probabilitu functions (``pdf``, ``cdf``, etc.). """ @@ -701,7 +702,7 @@ def ls_integrate( r""" Lebesgue-Stieltjes integration. - The Lebesgue-Stieljes intregration of a function with respect to the lifetime model + The Lebesgue-Stieljes intregration of a function with respect to the lifetime core taking into account the probability density function and jumps The Lebesgue-Stieltjes integral is: @@ -714,7 +715,7 @@ def ls_integrate( where: - :math:`F` is the cumulative distribution function, - - :math:`f` the probability density function of the lifetime model, + - :math:`f` the probability density function of the lifetime core, - :math:`a_i` and :math:`w_i` are the points and weights of the jumps. Parameters @@ -726,7 +727,7 @@ def ls_integrate( b : ndarray (max dim of 2) Upper bound(s) of integration. If lower bound(s) is infinite, use np.inf as value. args : ndarray (max dim of 2) - Other arguments needed by the lifetime model (eg. covariates) + Other arguments needed by the lifetime core (eg. covariates) deg : int, default 100 Degree of the polynomials interpolation @@ -789,7 +790,7 @@ def plot(self) -> PlotSurvivalFunc: @dataclass class FittingResults: - """Fitting results of the parametric model.""" + """Fitting results of the parametric core.""" nb_samples: InitVar[int] #: Number of observations (samples). @@ -856,9 +857,9 @@ def asdict(self) -> dict: class ParametricLifetimeModel(LifetimeModel[*VariadicArgs], ParametricModel, ABC): """ - Base class to create a parametric lifetime model + Base class to create a parametric lifetime core - A parametric lifetime model is an ``LifetimeModel`` having parameters that can + A parametric lifetime core is an ``LifetimeModel`` having parameters that can be estimated, i.e. it has a `fit` method. """ @@ -922,7 +923,7 @@ def fit( **kwargs: Any, ) -> Union[Self, None]: """ - Estimation of lifetime model parameters with respect to lifetime data. + Estimation of lifetime core parameters with respect to lifetime data. Parameters @@ -936,9 +937,9 @@ def fit( departure : ndarray of float (1d), default is None Right truncations applied to lifetime values. model_args : tuple of ndarray, default is None - Other arguments needed by the lifetime model. + Other arguments needed by the lifetime core. inplace : boolean, default is True - If true, parameters of the lifetime model will be replaced by estimated parameters. + If true, parameters of the lifetime core will be replaced by estimated parameters. **kwargs Extra arguments used by `scipy.minimize`. Default values are: - `method` : `"L-BFGS-B"` @@ -1020,6 +1021,91 @@ def __getattribute__(self, item): ): if not self._all_params_set: raise ValueError( - f"Can't call {item} if one model params is not set. Instanciate fully parametrized model or fit it" + f"Can't call {item} if one core params is not set. Instanciate fully parametrized core or fit it" ) return super().__getattribute__(item) + + +@dataclass +class Estimates: + """ + Stores the estimates for a non-parametric lifetime core. + + Parameters + ---------- + timeline : np.ndarray of shape (n, ) + The timeline of the estimates. + values : np.ndarray of shape (n, ) + The estimated values. + se : np.ndarray of shape (n, ), optional + The standard errors of the estimates. If not provided, defaults to an array of zeros. + + Raises + ------ + ValueError + If the shapes of `timeline`, `values`, and `se` are not compatible. + """ + + timeline: NDArray[np.float64] + values: NDArray[np.float64] + se: Optional[NDArray[np.float64]] = None + + def __post_init__(self): + if self.se is None: + self.se = np.zeros_like( + self.values + ) # garder None/Nan efaire le changement de valeur au niveau du plot + + if self.timeline.shape != self.values.shape != self.se: + raise ValueError("Incompatible timeline, values and se in Estimates") + + def nearest_1dinterp( + self, x: float | NDArray[np.float64] + ) -> tuple[NDArray[np.float64], NDArray[np.float64]]: + """Returns x nearest interpolation based on timeline and values data points + timeline has to be monotonically increasing + + Args: + x (NDArray[np.float64]): 1d x coordinates to interpolate + + Returns: + NDArray[np.float64]: interpolation values of x + """ + spacing = np.diff(self.timeline) / 2 + xp = np.hstack([spacing, spacing[-1]]) + self.timeline + values_p = np.concatenate([self.values, self.values[-1, None]]) + se_p = np.concatenate([self.se, self.se[-1, None]]) + return ( + values_p[np.searchsorted(xp, np.asarray(x))], + se_p[np.searchsorted(xp, np.asarray(x))], + ) + + +def estimated(method): + @wraps(method) + def wrapper(self, *args, **kwargs): + if None in self.estimates.values(): + return ValueError( + f"{self.__class__.__name__} instance has not been fitted yet, call fit first" + ) + return method(self, *args, **kwargs) + + return wrapper + + +class NonParametricModel(Protocol): + """ + Non-parametric lifetime estimator. + + Attributes + ---------- + estimates : Estimations + The estimations produced when fitting the estimator. + """ + + estimates: dict[str, Optional[Estimates]] + + @property + @estimated + def plot(self): + return PlotSurvivalFunc(self) diff --git a/relife/model/nested.py b/relife/core/nested_model.py similarity index 93% rename from relife/model/nested.py rename to relife/core/nested_model.py index 1bd0c769..8a683d80 100644 --- a/relife/model/nested.py +++ b/relife/core/nested_model.py @@ -5,26 +5,26 @@ from scipy.optimize import newton from typing_extensions import override -from relife.model import LifetimeModel -from relife.quadratures import gauss_legendre +from .model import LifetimeModel +from .quadratures import gauss_legendre from relife.types import ModelArgs class AgeReplacementModel(LifetimeModel[NDArray[np.float64], *ModelArgs]): r""" - Age replacement model. + Age replacement core. - Lifetime model where the asset is replaced at age :math:`a_r`. + Lifetime core where the asset is replaced at age :math:`a_r`. Parameters ---------- baseline : LifetimeModel - Underlying lifetime model. + Underlying lifetime core. Notes ----- This is equivalent to the distribution of :math:`\min(X,a_r)` where - :math:`X` is a baseline lifetime model and ar the age of replacement. + :math:`X` is a baseline lifetime core and ar the age of replacement. """ def __init__(self, baseline: LifetimeModel[*ModelArgs]): @@ -125,14 +125,14 @@ def integrand( class LeftTruncatedModel(LifetimeModel[NDArray[np.float64], *ModelArgs]): - r"""Left truncated model. + r"""Left truncated core. - Conditional distribution of the lifetime model for an asset having reach age :math:`a_0`. + Conditional distribution of the lifetime core for an asset having reach age :math:`a_0`. Parameters ---------- baseline : LifetimeModel - Underlying lifetime model. + Underlying lifetime core. """ def __init__(self, baseline: LifetimeModel[*ModelArgs]): @@ -203,12 +203,12 @@ class EquilibriumDistribution(LifetimeModel[*ModelArgs]): r"""Equilibrium distribution. The equilibirum distribution is the distrbution computed from a lifetime - model that makes the associated delayed renewal process stationary. + core that makes the associated delayed renewal process stationary. Parameters ---------- baseline : LifetimeModel - Underlying lifetime model. + Underlying lifetime core. References ---------- diff --git a/relife/quadratures.py b/relife/core/quadratures.py similarity index 100% rename from relife/quadratures.py rename to relife/core/quadratures.py diff --git a/relife/data/renewal.py b/relife/data/renewal.py index 6a9eccdb..623bb8ef 100644 --- a/relife/data/renewal.py +++ b/relife/data/renewal.py @@ -35,16 +35,27 @@ def _get_args( self, index, previous_args: Optional[tuple[NDArray[np.float64], ...]] = None ) -> tuple[NDArray[np.float64], ...]: args = () - if self.nb_assets > 1 and bool(self.model_args): - if previous_args: - args = tuple( - ( - np.concatenate((p, np.take(a, index, axis=0))) - for p, a in zip(previous_args, self.model_args) + if bool(self.model_args): + if self.nb_assets > 1: + if previous_args: + args = tuple( + ( + np.concatenate((p, np.take(a, index, axis=0))) + for p, a in zip(previous_args, self.model_args) + ) ) - ) - else: - args = tuple((np.take(a, index, axis=0) for a in self.model_args)) + else: + args = tuple((np.take(a, index, axis=0) for a in self.model_args)) + if self.nb_assets == 1: + if previous_args: + args = tuple( + ( + np.concatenate((p, np.tile(a, (len(index), 1)))) + for p, a in zip(previous_args, self.model_args) + ) + ) + else: + args = tuple((np.tile(a, (len(index), 1)) for a in self.model_args)) return args def to_fit( diff --git a/relife/generator.py b/relife/generator.py index 0844cbfe..6272c07c 100644 --- a/relife/generator.py +++ b/relife/generator.py @@ -3,8 +3,9 @@ import numpy as np from numpy.typing import NDArray -from relife.discounting import exponential_discounting -from relife.model import AgeReplacementModel, LifetimeModel +from relife.core.discounting import exponential_discounting +from relife.core.nested_model import AgeReplacementModel +from relife.core.model import LifetimeModel from relife.types import ( Model1Args, ModelArgs, @@ -49,7 +50,7 @@ def compute_events( model_args: ModelArgs = (), ) -> NDArray[np.bool_]: """ - tag lifetimes as being right censored or not depending on model used + tag lifetimes as being right censored or not depending on core used """ events = np.ones_like(lifetimes, dtype=np.bool_) ar = 0.0 diff --git a/relife/model/__init__.py b/relife/model/__init__.py deleted file mode 100644 index 11e67587..00000000 --- a/relife/model/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -from .base import LifetimeModel, Parameters, ParametricLifetimeModel, ParametricModel -from .nested import AgeReplacementModel, EquilibriumDistribution, LeftTruncatedModel diff --git a/relife/models/__init__.py b/relife/models/__init__.py new file mode 100644 index 00000000..41b06e9e --- /dev/null +++ b/relife/models/__init__.py @@ -0,0 +1,3 @@ +from .distributions import Exponential, Weibull, Gamma, Gompertz, LogLogistic +from .regression import AFT, ProportionalHazard +from .nonparametric import ECDF, KaplanMeier, NelsonAalen, Turnbull diff --git a/relife/distributions.py b/relife/models/distributions.py similarity index 99% rename from relife/distributions.py rename to relife/models/distributions.py index f8bd31a0..7a192ef9 100644 --- a/relife/distributions.py +++ b/relife/models/distributions.py @@ -8,8 +8,8 @@ from typing_extensions import override from relife.data import LifetimeData -from relife.model import ParametricLifetimeModel -from relife.quadratures import shifted_laguerre +from relife.core.model import ParametricLifetimeModel +from relife.core.quadratures import shifted_laguerre # Ts type var is a zero long tuple (see https://github.com/python/mypy/issues/16199) @@ -17,7 +17,7 @@ # no args are required class Distribution(ParametricLifetimeModel[()], ABC): """ - Base class of distribution model. + Base class of distribution core. """ def sf(self, time: float | NDArray[np.float64]) -> NDArray[np.float64]: @@ -243,17 +243,17 @@ class Exponential(Distribution): Examples -------- - Constructing exponential model with rate of 0.75. + Constructing exponential core with rate of 0.75. - >>> model = Exponential(0.75) + >>> core = Exponential(0.75) >>> time = np.linspace(3, 10, num=5) - >>> model.sf(time) + >>> core.sf(time) array([0.10539922, 0.02836782, 0.00763509, 0.00205496, 0.00055308])) Notice that only one asset is considered here. To pass another asset, use a 2d time array >>> time = np.linspace([3, 5], [10, 10], num=5, axis=1) - >>> model.sf(time) + >>> core.sf(time) array([[0.10539922, 0.02836782, 0.00763509, 0.00205496, 0.00055308], [0.02351775, 0.00920968, 0.00360656, 0.00141235, 0.00055308]]) """ diff --git a/relife/nonparametric.py b/relife/models/nonparametric.py similarity index 87% rename from relife/nonparametric.py rename to relife/models/nonparametric.py index a295ccfd..bd689333 100644 --- a/relife/nonparametric.py +++ b/relife/models/nonparametric.py @@ -1,100 +1,13 @@ -from dataclasses import dataclass -from functools import wraps -from typing import Optional, Protocol, Self, Union +from typing import Optional, Self, Union import numpy as np from numpy.typing import NDArray +from relife.core.model import Estimates, NonParametricModel, estimated from relife.data.lifetime import LifetimeData, lifetime_data_factory -from relife.plots import PlotSurvivalFunc -@dataclass -class Estimates: - """ - Stores the estimates for a non-parametric lifetime model. - - Parameters - ---------- - timeline : np.ndarray of shape (n, ) - The timeline of the estimates. - values : np.ndarray of shape (n, ) - The estimated values. - se : np.ndarray of shape (n, ), optional - The standard errors of the estimates. If not provided, defaults to an array of zeros. - - Raises - ------ - ValueError - If the shapes of `timeline`, `values`, and `se` are not compatible. - """ - - timeline: NDArray[np.float64] - values: NDArray[np.float64] - se: Optional[NDArray[np.float64]] = None - - def __post_init__(self): - if self.se is None: - self.se = np.zeros_like( - self.values - ) # garder None/Nan efaire le changement de valeur au niveau du plot - - if self.timeline.shape != self.values.shape != self.se: - raise ValueError("Incompatible timeline, values and se in Estimates") - - def nearest_1dinterp( - self, x: float | NDArray[np.float64] - ) -> tuple[NDArray[np.float64], NDArray[np.float64]]: - """Returns x nearest interpolation based on timeline and values data points - timeline has to be monotonically increasing - - Args: - x (NDArray[np.float64]): 1d x coordinates to interpolate - - Returns: - NDArray[np.float64]: interpolation values of x - """ - spacing = np.diff(self.timeline) / 2 - xp = np.hstack([spacing, spacing[-1]]) + self.timeline - values_p = np.concatenate([self.values, self.values[-1, None]]) - se_p = np.concatenate([self.se, self.se[-1, None]]) - return ( - values_p[np.searchsorted(xp, np.asarray(x))], - se_p[np.searchsorted(xp, np.asarray(x))], - ) - - -def estimated(method): - @wraps(method) - def wrapper(self, *args, **kwargs): - if None in self.estimates.values(): - return ValueError( - f"{self.__class__.__name__} instance has not been fitted yet, call fit first" - ) - return method(self, *args, **kwargs) - - return wrapper - - -class NonParametricEstimator(Protocol): - """ - Non-parametric lifetime estimator. - - Attributes - ---------- - estimates : Estimations - The estimations produced when fitting the estimator. - """ - - estimates: dict[str, Optional[Estimates]] - - @property - @estimated - def plot(self): - return PlotSurvivalFunc(self) - - -class ECDF(NonParametricEstimator): +class ECDF(NonParametricModel): """ Empirical Cumulative Distribution Function. """ @@ -183,7 +96,7 @@ def cdf(self, time: float | NDArray[np.float64]) -> NDArray[np.float64]: return self.estimates["cdf"].nearest_1dinterp(time)[0] -class KaplanMeier(NonParametricEstimator): +class KaplanMeier(NonParametricModel): r"""Kaplan-Meier estimator. Compute the non-parametric Kaplan-Meier estimator (also known as the product @@ -326,7 +239,7 @@ def sf(self, time: float | NDArray[np.float64]) -> NDArray[np.float64]: return self.estimates["sf"].nearest_1dinterp(time)[0] -class NelsonAalen(NonParametricEstimator): +class NelsonAalen(NonParametricModel): r"""Nelson-Aalen estimator. Compute the non-parametric Nelson-Aalen estimator of the cumulative hazard @@ -467,7 +380,7 @@ def chf(self, time: float | NDArray[np.float64]) -> NDArray[np.float64]: return self.estimates["chf"].nearest_1dinterp(time)[0] -class Turnbull(NonParametricEstimator): +class Turnbull(NonParametricModel): """Turnbull estimator""" def __init__( diff --git a/relife/regression.py b/relife/models/regression.py similarity index 92% rename from relife/regression.py rename to relife/models/regression.py index 70fc053e..e8a91d8f 100644 --- a/relife/regression.py +++ b/relife/models/regression.py @@ -15,7 +15,7 @@ from typing_extensions import override from relife.data import LifetimeData -from relife.model import ParametricLifetimeModel, ParametricModel +from relife.core.model import ParametricLifetimeModel, ParametricModel from relife.types import ModelArgs @@ -89,7 +89,7 @@ class Regression( Parameters ---------- baseline : ParametricLifetimeModel - Any parametric lifetime model to serve as the baseline. + Any parametric lifetime core to serve as the baseline. coef : tuple of floats (values can be None), optional Coefficients values of the covariate effects. @@ -116,16 +116,16 @@ def init_params( *args: *ModelArgs, ) -> None: """ - Initialize parameters for the regression model. + Initialize parameters for the regression core. Parameters ---------- lifetime_data : LifetimeData - The lifetime data used to initialize the baseline model. + The lifetime data used to initialize the baseline core. covar : np.ndarray of shape (k, ) or (m, k) Covariate values. Should have shape (k, ) or (m, k) where m is the number of assets and k is the number of covariates. *args : variable number of arguments - Any additional arguments needed by the baseline model. + Any additional arguments needed by the baseline core. """ self.covar_effect.new_params( **{f"coef_{i}": 0.0 for i in range(covar.shape[-1])} @@ -177,7 +177,7 @@ def sf( covar : np.ndarray of shape (k, ) or (m, k) Covariate values. *args : variable number of np.ndarray - Any other variables needed by the model. + Any other variables needed by the core. Returns ------- @@ -203,7 +203,7 @@ def isf( covar : np.ndarray of shape (k, ) or (m, k) Covariate values. *args : variable number of np.ndarray - Any other variables needed by the model. + Any other variables needed by the core. Returns ------- @@ -230,7 +230,7 @@ def cdf( covar : np.ndarray of shape (k, ) or (m, k) Covariate values. *args : variable number of np.ndarray - Any other variables needed by the model. + Any other variables needed by the core. Returns ------- @@ -255,7 +255,7 @@ def pdf( covar : np.ndarray of shape (k, ) or (m, k) Covariate values. *args : variable number of np.ndarray - Any other variables needed by the model. + Any other variables needed by the core. Returns ------- @@ -281,7 +281,7 @@ def ppf( covar : np.ndarray of shape (k, ) or (m, k) Covariate values. *args : variable number of np.ndarray - Any other variables needed by the model. + Any other variables needed by the core. Returns ------- @@ -307,7 +307,7 @@ def mrl( covar : np.ndarray of shape (k, ) or (m, k) Covariate values. *args : variable number of np.ndarray - Any other variables needed by the model. + Any other variables needed by the core. Returns ------- @@ -332,7 +332,7 @@ def rvs( covar : np.ndarray of shape (k, ) or (m, k) Covariate values. *args : variable number of np.ndarray - Any other variables needed by the model. + Any other variables needed by the core. size : int, optional Number of random variates to generate. seed : int, optional @@ -357,7 +357,7 @@ def mean( covar : np.ndarray of shape (k, ) or (m, k) Covariate values. *args : variable number of np.ndarray - Any other variables needed by the model. + Any other variables needed by the core. Returns ------- @@ -376,7 +376,7 @@ def var(self, covar: NDArray[np.float64], *args: *ModelArgs) -> NDArray[np.float covar : np.ndarray of shape (k, ) or (m, k) Covariate values. *args : variable number of np.ndarray - Any other variables needed by the model. + Any other variables needed by the core. Returns ------- @@ -397,7 +397,7 @@ def median( covar : np.ndarray of shape (k, ) or (m, k) Covariate values. *args : variable number of np.ndarray - Any other variables needed by the model. + Any other variables needed by the core. Returns ------- @@ -423,7 +423,7 @@ def jac_hf( covar : np.ndarray of shape (k, ) or (m, k) Covariate values. *args : variable number of np.ndarray - Any other variables needed by the model. + Any other variables needed by the core. Returns ------- @@ -448,7 +448,7 @@ def jac_chf( covar : np.ndarray of shape (k, ) or (m, k) Covariate values. *args : variable number of np.ndarray - Any other variables needed by the model. + Any other variables needed by the core. Returns ------- @@ -473,7 +473,7 @@ def dhf( covar : np.ndarray of shape (k, ) or (m, k) Covariate values. *args : variable number of np.ndarray - Any other variables needed by the model. + Any other variables needed by the core. Returns ------- @@ -489,7 +489,7 @@ def jac_sf( ) -> NDArray[np.float64]: """Jacobian of the survival function - Jacobian with respect to model parameters. + Jacobian with respect to core parameters. Parameters ---------- @@ -498,7 +498,7 @@ def jac_sf( covar : np.darray of shape (k, ) or (m, k) Covariates values. *args : variable number of np.darray - Any other variables needed by the model + Any other variables needed by the core Returns ------- @@ -516,7 +516,7 @@ def jac_cdf( ) -> NDArray[np.float64]: """Jacobian of the cumulative distribution function. - Jacobian with respect to model parameters. + Jacobian with respect to core parameters. Parameters ---------- @@ -525,7 +525,7 @@ def jac_cdf( covar : np.darray of shape (k, ) or (m, k) Covariates values. *args : variable number of np.darray - Any other variables needed by the model + Any other variables needed by the core Returns ------- @@ -542,7 +542,7 @@ def jac_pdf( ) -> NDArray[np.float64]: """Jacobian of the probability density function. - Jacobian with respect to model parameters. + Jacobian with respect to core parameters. Parameters ---------- @@ -551,7 +551,7 @@ def jac_pdf( covar : np.darray of shape (k, ) or (m, k) Covariates values. *args : variable number of np.darray - Any other variables needed by the model + Any other variables needed by the core Returns ------- @@ -566,7 +566,7 @@ def jac_pdf( class ProportionalHazard(Regression): r""" - Proportional Hazard regression model. + Proportional Hazard regression core. The cumulative hazard function :math:`H` is linked to the multiplier function :math:`g` by the relation: @@ -582,7 +582,7 @@ class ProportionalHazard(Regression): Parameters ---------- baseline : ParametricLifetimeModel - Any parametric lifetime model to serve as the baseline. + Any parametric lifetime core to serve as the baseline. coef : tuple of floats (values can be None), optional Coefficients values of the covariate effects. @@ -620,7 +620,7 @@ def hf( covar : np.darray Covariates values. *args : variable number of np.darray - Any other variables needed by the model + Any other variables needed by the core Returns @@ -649,7 +649,7 @@ def chf( covar : np.ndarray of shape (k, ) or (m, k) Covariate values. *args : variable number of np.ndarray - Any other variables needed by the model. + Any other variables needed by the core. Returns ------- @@ -674,7 +674,7 @@ def ichf( covar : np.ndarray of shape (k, ) or (m, k) Covariate values. *args : variable number of np.ndarray - Any other variables needed by the model. + Any other variables needed by the core. Returns ------- @@ -739,7 +739,7 @@ class AFT(Regression): Parameters ---------- baseline : ParametricLifetimeModel - Any parametric lifetime model to serve as the baseline. + Any parametric lifetime core to serve as the baseline. coef : tuple of floats (values can be None), optional Coefficients values of the covariate effects. @@ -773,7 +773,7 @@ def hf( covar : np.ndarray of shape (k, ) or (m, k) Covariate values. *args : variable number of np.ndarray - Any other variables needed by the model. + Any other variables needed by the core. Returns ------- @@ -802,7 +802,7 @@ def chf( covar : np.ndarray of shape (k, ) or (m, k) Covariate values. *args : variable number of np.ndarray - Any other variables needed by the model. + Any other variables needed by the core. Returns ------- @@ -828,7 +828,7 @@ def ichf( covar : np.ndarray of shape (k, ) or (m, k) Covariate values. *args : variable number of np.ndarray - Any other variables needed by the model. + Any other variables needed by the core. Returns ------- @@ -854,7 +854,7 @@ def jac_hf( covar : np.ndarray of shape (k, ) or (m, k) Covariate values. *args : variable number of np.ndarray - Any other variables needed by the model. + Any other variables needed by the core. Returns ------- @@ -886,7 +886,7 @@ def jac_chf( covar : np.ndarray of shape (k, ) or (m, k) Covariate values. *args : variable number of np.ndarray - Any other variables needed by the model. + Any other variables needed by the core. Returns ------- @@ -919,7 +919,7 @@ def dhf( covar : np.ndarray of shape (k, ) or (m, k) Covariate values. *args : variable number of np.ndarray - Any other variables needed by the model. + Any other variables needed by the core. Returns ------- diff --git a/relife/plots.py b/relife/plots.py index f15f2b8c..c67c21b8 100644 --- a/relife/plots.py +++ b/relife/plots.py @@ -11,8 +11,7 @@ from relife.types import ModelArgs if TYPE_CHECKING: # avoid circular imports due to typing - from relife.model import LifetimeModel - from relife.nonparametric import NonParametricEstimator + from relife.core.model import LifetimeModel, NonParametricModel def plot( @@ -67,7 +66,7 @@ def param_probfunc_plot( alpha_ci: float = 0.05, **kwargs, ) -> Axes: - r"""Plot functions of the distribution model. + r"""Plot functions of the distribution core. Parameters ---------- @@ -76,12 +75,12 @@ def param_probfunc_plot( timeline : 1D array, optional Timeline of the plot (x-axis), by default guessed by the millile. model_args : Tuple[ndarray], optional - Extra arguments required by the parametric lifetime model, by + Extra arguments required by the parametric lifetime core, by default (). alpha_ci : float, optional :math:`\alpha`-value to define the :math:`100(1-\alpha)\%` confidence interval, by default 0.05 corresponding to the 95\% - confidence interval. If set to None or if the model has not been + confidence interval. If set to None or if the core has not been fitted, no confidence interval is plotted. fname : str, optional Name of the function to be plotted, by default 'sf'. Should be one @@ -141,7 +140,7 @@ def param_probfunc_plot( def nonparam_probfunc_plot( fname: str, - model: NonParametricEstimator, + model: NonParametricModel, timeline: NDArray[np.float64] = None, alpha_ci: float = 0.05, **kwargs, @@ -170,7 +169,7 @@ def nonparam_probfunc_plot( def nelsonaalen_plot( fname: str, - model: NonParametricEstimator, + model: NonParametricModel, timeline: NDArray[np.float64] = None, alpha_ci: float = 0.05, **kwargs, @@ -212,9 +211,13 @@ def __set_name__(self, owner, name): self.name = name def __get__(self, obj, objtype=None): - from relife.distributions import Distribution # avoid circular import - from relife.nonparametric import ECDF, KaplanMeier, NelsonAalen - from relife.regression import Regression + from relife.models import ( + ECDF, + KaplanMeier, + NelsonAalen, + ) # avoid circular import + from relife.models.regression import Regression + from relife.models.distributions import Distribution if isinstance(obj.model, Distribution): return BoundPlot(obj.model, param_probfunc_plot, self.name) @@ -234,5 +237,5 @@ class PlotSurvivalFunc: hf = PlotDescriptor() pdf = PlotDescriptor() - def __init__(self, model: LifetimeModel[*ModelArgs] | NonParametricEstimator): + def __init__(self, model: LifetimeModel[*ModelArgs] | NonParametricModel): self.model = model diff --git a/relife/policies/age_replacement.py b/relife/policies/age_replacement.py index ad72f709..476eea57 100644 --- a/relife/policies/age_replacement.py +++ b/relife/policies/age_replacement.py @@ -5,15 +5,16 @@ from scipy.optimize import newton from relife.data import RenewalRewardData -from relife.discounting import exponential_discounting +from relife.core.discounting import exponential_discounting from relife.generator import lifetimes_rewards_generator -from relife.model import AgeReplacementModel, LeftTruncatedModel, LifetimeModel -from relife.quadratures import gauss_legendre -from relife.renewal import RenewalRewardProcess, reward_partial_expectation +from relife.core.nested_model import AgeReplacementModel, LeftTruncatedModel +from relife.core.model import LifetimeModel +from relife.core.quadratures import gauss_legendre +from relife.process.renewal import RenewalRewardProcess, reward_partial_expectation from relife.types import Model1Args, ModelArgs, Policy from .decorators import ifset -from relife.descriptors import ShapedArgs +from relife.core.descriptors import ShapedArgs def age_replacement_cost( @@ -34,7 +35,7 @@ class OneCycleAgeReplacementPolicy(Policy): Parameters ---------- model : LifetimeModel - The lifetime model of the assets. + The lifetime core of the assets. cf : np.ndarray The cost of failure for each asset. cp : np.ndarray @@ -46,7 +47,7 @@ class OneCycleAgeReplacementPolicy(Policy): with ``fit`` model_args : ModelArgs, optional ModelArgs is a tuple of zero or more ndarray required by the underlying - lifetime model of the process. + lifetime core of the process. nb_assets : int, optional Number of assets (default is 1). a0 : ndarray, optional @@ -293,7 +294,7 @@ class AgeReplacementPolicy(Policy): Parameters ---------- model : LifetimeModel - The lifetime model of the assets. + The lifetime core of the assets. cf : np.ndarray The cost of failure for each asset. cp : np.ndarray @@ -308,20 +309,20 @@ class AgeReplacementPolicy(Policy): The discounting rate. model_args : ModelArgs, optional ModelArgs is a tuple of zero or more ndarray required by the underlying - lifetime model of the process. + lifetime core of the process. nb_assets : int, optional Number of assets (default is 1). a0 : ndarray, optional Current ages of the assets (default is None). Setting ``a0`` will add left truncations. model1 : LifetimeModel, optional - The lifetime model used for the cycle of replacements. When one adds - `model1`, we assume that ``model1`` is different from ``model`` meaning + The lifetime core used for the cycle of replacements. When one adds + `model1`, we assume that ``model1`` is different from ``core`` meaning the underlying survival probabilities behave differently for the first cycle model1_args : ModelArgs, optional ModelArgs is a tuple of zero or more ndarray required by the lifetime - model of the first cycle of replacements. + core of the first cycle of replacements. Attributes ---------- diff --git a/relife/policies/run_to_failure.py b/relife/policies/run_to_failure.py index c0c03950..5c769449 100644 --- a/relife/policies/run_to_failure.py +++ b/relife/policies/run_to_failure.py @@ -4,11 +4,12 @@ from numpy.typing import NDArray from relife.data import RenewalRewardData -from relife.descriptors import ShapedArgs -from relife.discounting import exponential_discounting +from relife.core.descriptors import ShapedArgs +from relife.core.discounting import exponential_discounting from relife.generator import lifetimes_rewards_generator -from relife.model import LeftTruncatedModel, LifetimeModel -from relife.renewal import RenewalRewardProcess, reward_partial_expectation +from relife.core.nested_model import LeftTruncatedModel +from relife.core.model import LifetimeModel +from relife.process.renewal import RenewalRewardProcess, reward_partial_expectation from relife.types import Model1Args, ModelArgs, Policy @@ -26,14 +27,14 @@ class OneCycleRunToFailure(Policy): Parameters ---------- model : LifetimeModel - The lifetime model of the assets. + The lifetime core of the assets. cf : np.ndarray The cost of failure for each asset. discounting_rate : float, default is 0. The discounting rate. model_args : ModelArgs, optional ModelArgs is a tuple of zero or more ndarray required by the underlying - lifetime model of the process. + lifetime core of the process. nb_assets : int, optional Number of assets (default is 1). a0 : ndarray, optional @@ -203,27 +204,27 @@ class RunToFailure(Policy): Parameters ---------- model : LifetimeModel - The lifetime model of the assets. + The lifetime core of the assets. cf : np.ndarray The cost of failure for each asset. discounting_rate : float, default is 0. The discounting rate. model_args : ModelArgs, optional ModelArgs is a tuple of zero or more ndarray required by the underlying - lifetime model of the process. + lifetime core of the process. nb_assets : int, optional Number of assets (default is 1). a0 : ndarray, optional Current ages of the assets (default is None). Setting ``a0`` will add left truncations. model1 : LifetimeModel, optional - The lifetime model used for the cycle of replacements. When one adds - `model1`, we assume that `model1` is different from `model` meaning + The lifetime core used for the cycle of replacements. When one adds + `model1`, we assume that `model1` is different from `core` meaning the underlying survival probabilities behave differently for the first cycle model1_args : ModelArgs, optional ModelArgs is a tuple of zero or more ndarray required by the lifetime - model of the first cycle of replacements. + core of the first cycle of replacements. References ---------- diff --git a/relife/process/__init__.py b/relife/process/__init__.py new file mode 100644 index 00000000..40a6ca4c --- /dev/null +++ b/relife/process/__init__.py @@ -0,0 +1 @@ +from .renewal import RenewalProcess, RenewalRewardProcess diff --git a/relife/renewal.py b/relife/process/renewal.py similarity index 98% rename from relife/renewal.py rename to relife/process/renewal.py index 1fc68a27..aff45886 100644 --- a/relife/renewal.py +++ b/relife/process/renewal.py @@ -5,10 +5,10 @@ from numpy.typing import NDArray from relife.data import RenewalData, RenewalRewardData -from relife.descriptors import ShapedArgs -from relife.discounting import exponential_discounting +from relife.core.descriptors import ShapedArgs +from relife.core.discounting import exponential_discounting from relife.generator import lifetimes_generator, lifetimes_rewards_generator -from relife.model import LifetimeModel +from relife.core.model import LifetimeModel from relife.types import Model1Args, ModelArgs, Reward1Args, RewardArgs, Reward diff --git a/test/distibutions_test.py b/test/distibutions_test.py index 4d1cf301..78ee7397 100644 --- a/test/distibutions_test.py +++ b/test/distibutions_test.py @@ -1,7 +1,7 @@ import numpy as np import pytest -from relife import Exponential, Gamma, Gompertz, LogLogistic, Weibull +from relife.models import Exponential, Gamma, Gompertz, LogLogistic, Weibull from relife.datasets import load_power_transformer @@ -52,8 +52,8 @@ def test_fit(model, data): assert model.params == pytest.approx(expected_params, rel=1e-3) -# def test_minimum_distribution(model, data): -# params = model.params.copy() +# def test_minimum_distribution(core, data): +# params = core.params.copy() # n = np.ones((data.size, 1)) -# model = MinimumDistribution(model).fit(*data.astuple(), args=(n,)) -# assert model.params == pytest.approx(params, rel=1e-3) +# core = MinimumDistribution(core).fit(*data.astuple(), args=(n,)) +# assert core.params == pytest.approx(params, rel=1e-3) diff --git a/test/lifetimedata_factories_test.py b/test/lifetimedata_factories_test.py index c74a8276..f26a0421 100644 --- a/test/lifetimedata_factories_test.py +++ b/test/lifetimedata_factories_test.py @@ -1,8 +1,7 @@ import numpy as np import pytest -from relife.data import LifetimeData -from relife.data.lifetime import Lifetime1DParser, Lifetime2DParser +from relife.data.lifetime import LifetimeData, Lifetime1DParser, Lifetime2DParser @pytest.fixture diff --git a/test/nonparametric_test.py b/test/nonparametric_test.py index 9fcfd45b..2c3a3442 100644 --- a/test/nonparametric_test.py +++ b/test/nonparametric_test.py @@ -1,7 +1,7 @@ import numpy as np import pytest -from relife import ECDF, KaplanMeier, NelsonAalen, Turnbull, Weibull +from relife.models import ECDF, KaplanMeier, NelsonAalen, Turnbull, Weibull from relife.datasets import load_input_turnbull, load_power_transformer diff --git a/test/regressions_test.py b/test/regressions_test.py index cb4a7fb0..50c83534 100644 --- a/test/regressions_test.py +++ b/test/regressions_test.py @@ -10,7 +10,7 @@ import pytest from scipy.stats import boxcox, zscore -from relife import ( +from relife.models import ( AFT, Exponential, Gamma, diff --git a/test/renewal_process_test.py b/test/renewal_process_test.py index ae4fb4b9..d80593de 100644 --- a/test/renewal_process_test.py +++ b/test/renewal_process_test.py @@ -7,9 +7,9 @@ import numpy as np import pytest -from relife import AFT, Gamma, Gompertz, LogLogistic, ProportionalHazard, Weibull -from relife.model import AgeReplacementModel, EquilibriumDistribution -from relife.renewal import RenewalProcess, RenewalRewardProcess +from relife.models import AFT, Gamma, Gompertz, LogLogistic, ProportionalHazard, Weibull +from relife.process import RenewalProcess, RenewalRewardProcess +from relife.core.nested_model import AgeReplacementModel, EquilibriumDistribution from relife.policies.run_to_failure import run_to_failure_cost diff --git a/test/replacement_policy_test.py b/test/replacement_policy_test.py index c1d2fa87..9cd1c97c 100644 --- a/test/replacement_policy_test.py +++ b/test/replacement_policy_test.py @@ -7,15 +7,12 @@ import numpy as np import pytest -from relife import ( +from relife.models import Gamma, Gompertz, LogLogistic, Weibull +from relife.policies import ( AgeReplacementPolicy, - Gamma, - Gompertz, - LogLogistic, OneCycleAgeReplacementPolicy, OneCycleRunToFailure, RunToFailure, - Weibull, ) diff --git a/test/to_fit_test.py b/test/to_fit_test.py index bdbde893..d7fe4bf2 100644 --- a/test/to_fit_test.py +++ b/test/to_fit_test.py @@ -1,6 +1,7 @@ import numpy as np import pytest +from relife.core.descriptors import ShapedArgs from relife.data import RenewalData @@ -29,7 +30,7 @@ def samples2_assets1(): event_times, lifetimes, np.ones_like(lifetimes, dtype=np.bool_), # events - (), # model args + (), # core args False, # with model1 ) return sample_data @@ -50,10 +51,14 @@ def samples2_assets1(): @pytest.fixture( params=[ - (np.array(1),), - (np.array([1, 2, 3]),), + (np.array([[1], [1]]),), + (np.array([[1, 2, 3], [1, 2, 3]]),), (np.array([[1, 2, 3], [4, 5, 6]]),), - (np.array(1), np.array([1, 2, 3]), np.array([[1, 2, 3], [4, 5, 6]])), + ( + np.array([[1], [1]]), + np.array([[1, 2, 3], [1, 2, 3]]), + np.array([[1, 2, 3], [4, 5, 6]]), + ), ] ) def samples2_assets2(request):