Giter Club home page Giter Club logo

epimargin's People

Contributors

ceilingloft avatar dependabot[bot] avatar manasip5 avatar nmarchio avatar satejsoman avatar stevenbuschbach avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

epimargin's Issues

add pytest suite

We need a more comprehensive unit testing suite as the functionality has matured.

Lint errors in core files

openjournals/joss-reviews#3464 | Related #117.

I am running a few lint tools e.g., pylint and pyflakes to locate errors in the module. This is related to #117 that also used studies folder. Since that may not be part of final release (#117 (comment)), this run restricts itself to the core files.

I am working on my fork and send a PR soon that will fix these issues if possible.

In this run, I am using poetry to manage the dependencies. Managing dependencies in Python has been less than ideal (poetry helps but the author need not add this to their DevOps).

The most critical among these should be fixed.

pylint

$ poetry run pylint -E epimargin
[dilawars@chutki epimargin (poetry)]$ poetry run pylint -E epimargin
************* Module epimargin.policy
epimargin/policy.py:205:15: E1101: Instance of 'VaccinationPolicy' has no 'daily_doses' member (no-member)
************* Module epimargin.estimators
epimargin/estimators.py:25:18: E1101: Method 'params' has no 'join' member (no-member)
************* Module epimargin.plots
epimargin/plots.py:62:0: E0102: function already defined line 14 (function-redefined)
epimargin/plots.py:194:0: E0102: function already defined line 14 (function-redefined)
************* Module epimargin.etl.covid19india
epimargin/etl/covid19india.py:348:22: E1101: Instance of 'TextFileReader' has no 'set_index' member (no-member)
************* Module epimargin.etl.devdatalab
epimargin/etl/devdatalab.py:28:57: E1101: Instance of 'TextFileReader' has no 'O_StateCensus2011' member (no-member)
************* Module epimargin.etl.csse
epimargin/etl/csse.py:27:8: E1101: Instance of 'TextFileReader' has no 'assign' member (no-member)
************* Module epimargin.etl
epimargin/etl/__init__.py:2:11: E0604: Invalid object 'download_data' in __all__, must contain only strings (invalid-all-object)
[dilawars@chutki epimargin (poetry)]$\

mypy

[dilawars@chutki epimargin (poetry)]$ poetry run mypy --ignore-missing-imports epimargin
epimargin/etl/commons.py:2: error: Library stubs not installed for "requests" (or incompatible with Python 3.9)
epimargin/etl/commons.py:2: note: Hint: "python3 -m pip install types-requests"
epimargin/etl/commons.py:2: note: (or run "mypy --install-types" to install all missing stub packages)
epimargin/etl/commons.py:2: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
epimargin/etl/__init__.py:2: error: Type of __all__ must be "Sequence[str]", not "List[Callable[[Path, str, str], Any]]"
epimargin/etl/devdatalab.py:14: error: Function "numpy.array" is not valid as a type
epimargin/etl/devdatalab.py:14: note: Perhaps you need "Callable[...]" or a callback protocol?
epimargin/etl/devdatalab.py:16: error: Value of type np.array? is not indexable
epimargin/models.py:127: error: "int" has no attribute "copy"
epimargin/models.py:175: error: "int" has no attribute "copy"
epimargin/models.py:250: error: "int" has no attribute "shape"
epimargin/models.py:279: error: Need type annotation for "dV" (hint: "dV: List[<type>] = ...")
epimargin/models.py:283: error: Function "numpy.array" is not valid as a type
epimargin/models.py:283: note: Perhaps you need "Callable[...]" or a callback protocol?
epimargin/models.py:283: error: Signature of "parallel_forward_epi_step" incompatible with supertype "SIR"
epimargin/models.py:448: error: Incompatible types in assignment (expression has type "bool", variable has type "str")
epimargin/models.py:455: error: Incompatible return value type (got "List[Union[_T, int]]", expected "Union[Dict[str, Sequence[float]], Sequence[float]]")
epimargin/models.py:456: error: Incompatible return value type (got "Dict[str, List[Union[_T, int]]]", expected "Union[Dict[str, Sequence[float]], Sequence[float]]")
epimargin/policy.py:19: error: "SIR" has no attribute "set_parameters"
epimargin/policy.py:36: error: Argument 1 to "len" has incompatible type "SIR"; expected "Sized"
epimargin/policy.py:37: error: "SIR" has no attribute "set_parameters"
epimargin/policy.py:43: error: Need type annotation for "Gs" (hint: "Gs: Set[<type>] = ...")
epimargin/policy.py:43: error: Need type annotation for "Ys" (hint: "Ys: Set[<type>] = ...")
epimargin/policy.py:43: error: Need type annotation for "Os" (hint: "Os: Set[<type>] = ...")
epimargin/policy.py:43: error: Need type annotation for "Rs" (hint: "Rs: Set[<type>] = ...")
epimargin/policy.py:46: error: Need type annotation for "unit"
epimargin/policy.py:46: error: Argument 1 to "enumerate" has incompatible type "SIR"; expected "Iterable[<nothing>]"
epimargin/policy.py:79: error: Value of type "SIR" is not indexable
epimargin/policy.py:88: error: Too many arguments for "run" of "SIR"
epimargin/policy.py:91: error: "SIR" has no attribute "gantt"
epimargin/policy.py:96: error: Argument 1 to "len" has incompatible type "SIR"; expected "Sized"
epimargin/policy.py:97: error: "SIR" has no attribute "set_parameters"
epimargin/policy.py:103: error: Need type annotation for "Gs" (hint: "Gs: Set[<type>] = ...")
epimargin/policy.py:103: error: Need type annotation for "Ys" (hint: "Ys: Set[<type>] = ...")
epimargin/policy.py:103: error: Need type annotation for "Os" (hint: "Os: Set[<type>] = ...")
epimargin/policy.py:103: error: Need type annotation for "Rs" (hint: "Rs: Set[<type>] = ...")
epimargin/policy.py:106: error: Need type annotation for "unit"
epimargin/policy.py:106: error: Argument 1 to "enumerate" has incompatible type "SIR"; expected "Iterable[<nothing>]"
epimargin/policy.py:142: error: Value of type "SIR" is not indexable
epimargin/policy.py:151: error: Too many arguments for "run" of "SIR"
epimargin/policy.py:154: error: "SIR" has no attribute "gantt"
epimargin/policy.py:174: error: Value of type "SIR" is not indexable
epimargin/policy.py:176: error: Argument 1 to "len" has incompatible type "SIR"; expected "Sized"
epimargin/policy.py:180: error: Value of type "SIR" is not indexable
epimargin/policy.py:181: error: Too many arguments for "run" of "SIR"
epimargin/policy.py:183: error: Value of type "SIR" is not indexable
epimargin/policy.py:194: error: Function "numpy.array" is not valid as a type
epimargin/policy.py:194: note: Perhaps you need "Callable[...]" or a callback protocol?
epimargin/policy.py:201: error: Function "numpy.array" is not valid as a type
epimargin/policy.py:201: note: Perhaps you need "Callable[...]" or a callback protocol?
epimargin/policy.py:205: error: "VaccinationPolicy" has no attribute "daily_doses"
epimargin/policy.py:209: error: np.array? has no attribute "sum"
epimargin/policy.py:211: error: np.array? has no attribute "sum"
epimargin/policy.py:215: error: Function "numpy.array" is not valid as a type
epimargin/policy.py:215: note: Perhaps you need "Callable[...]" or a callback protocol?
epimargin/policy.py:221: error: Function "numpy.array" is not valid as a type
epimargin/policy.py:221: note: Perhaps you need "Callable[...]" or a callback protocol?
epimargin/policy.py:221: error: Signature of "distribute_doses" incompatible with supertype "VaccinationPolicy"
epimargin/policy.py:223: error: Incompatible return value type (got "Tuple[ndarray, ndarray, ndarray]", expected "Tuple[np.array?]")
epimargin/policy.py:223: error: np.array? has no attribute "shape"
epimargin/policy.py:225: error: No overload variant of "__setitem__" of "list" matches argument types "int", "float"
epimargin/policy.py:225: note: Possible overload variants:
epimargin/policy.py:225: note:     def __setitem__(self, SupportsIndex, int) -> None
epimargin/policy.py:225: note:     def __setitem__(self, slice, Iterable[int]) -> None
epimargin/policy.py:229: error: "int" has no attribute "mean"
epimargin/policy.py:231: error: Incompatible return value type (got "Tuple[Any, Any, Any]", expected "Tuple[np.array?]")
epimargin/policy.py:238: error: Function "numpy.array" is not valid as a type
epimargin/policy.py:238: note: Perhaps you need "Callable[...]" or a callback protocol?
epimargin/policy.py:248: error: Function "numpy.array" is not valid as a type
epimargin/policy.py:248: note: Perhaps you need "Callable[...]" or a callback protocol?
epimargin/policy.py:248: error: Signature of "distribute_doses" incompatible with supertype "VaccinationPolicy"
epimargin/policy.py:250: error: Incompatible return value type (got "Tuple[None, None, None]", expected "Tuple[np.array?]")
epimargin/policy.py:253: error: No overload variant of "__setitem__" of "list" matches argument types "int", "float"
epimargin/policy.py:253: note: Possible overload variants:
epimargin/policy.py:253: note:     def __setitem__(self, SupportsIndex, int) -> None
epimargin/policy.py:253: note:     def __setitem__(self, slice, Iterable[int]) -> None
epimargin/policy.py:256: error: np.array? has no attribute "shape"
epimargin/policy.py:257: error: Value of type np.array? is not indexable
epimargin/policy.py:259: error: Value of type np.array? is not indexable
epimargin/policy.py:260: error: Value of type np.array? is not indexable
epimargin/policy.py:260: error: Unsupported target for indexed assignment (np.array?)
epimargin/policy.py:263: error: Value of type np.array? is not indexable
epimargin/policy.py:264: error: Value of type np.array? is not indexable
epimargin/policy.py:265: error: Unsupported target for indexed assignment (np.array?)
epimargin/policy.py:267: error: Unsupported operand types for + ("None" and "int")
epimargin/policy.py:267: note: Left operand is of type "Optional[int]"
epimargin/policy.py:268: error: Value of type np.array? is not indexable
epimargin/policy.py:268: error: Unsupported target for indexed assignment (np.array?)
epimargin/policy.py:268: error: Unsupported operand types for + ("None" and "int")
epimargin/policy.py:268: note: Left operand is of type "Optional[int]"
epimargin/policy.py:271: error: Incompatible return value type (got "Tuple[ndarray, Any, Any]", expected "Tuple[np.array?]")
epimargin/policy.py:274: error: "int" has no attribute "mean"
epimargin/plots.py:308: error: "SIR" has no attribute "units"
epimargin/plots.py:322: error: "SIR" has no attribute "aggregate"
epimargin/plots.py:380: error: "SIR" has no attribute "aggregate"
epimargin/plots.py:387: error: Need type annotation for "ranges"
epimargin/plots.py:401: error: Incompatible types in assignment (expression has type "List[Any]", variable has type "int")
epimargin/plots.py:405: error: Incompatible types in assignment (expression has type "List[int]", variable has type "int")
epimargin/plots.py:422: error: Value of type "int" is not indexable
epimargin/plots.py:547: error: "Callable[[Any, Any, Any, Any, Any, Any, Any, Any], Any]" has no attribute "horizontal"
epimargin/plots.py:548: error: "Callable[[Any, Any, Any, Any, Any, Any, Any, Any], Any]" has no attribute "vertical"
Found 82 errors in 6 files (checked 13 source files)

Invalid dependency version `zipp==4.1.0`

openjournals/joss-reviews#3464

https://pypi.org/project/zipp/#history does not have zip==4.1.0 as specified in the requirements.txt file. I am on debian buster with python3.7.

Here is a summary of pip install -r requirements.txt.

Collecting xlrd==1.2.0
Downloading xlrd-1.2.0-py2.py3-none-any.whl (103 kB)
ERROR: Could not find a version that satisfies the requirement zipp==4.1.0 (from versions: 0.1.0, 0.2.0, 0.2.1, 0.3.0, 0.3.1, 0.3.2, 0.3.3, 0.4.0, 0.5.0, 0.5.1, 0.5.2, 0.6.0, 1.0.0, 1.1.0, 1.1.1, 1.2.0, 2.0.0, 2.0.1, 2.1.0, 2.2.0, 2.2.1, 3.0.0, 3.1.0, 3.2.0, 3.3.0, 3.3.1, 3.3.2, 3.4.0, 3.4.1, 3.4.2, 3.5.0)
ERROR: No matching distribution found for zipp==4.1.0

model : SIR has missing `units`

def plot_SIRD(model: SIR, layout = (1, 4)) -> PlotDevice:

If model is a SIR type then it is missing .units (this function expects .units). Is it NetworkedSIR or other specialization (I don't see inheritance though)? If it is then t = has issues because model.Rt doesn't exist. I guess t= can be moved inside the loop?
Also in the for loop in this function, model is reused that may case mypy typer checker to fail (not essential).

Similarly plot_curves probably expects models: Sequence[NetworkedSIR] rather than model: Sequence[SIR]?

openjournals/joss-reviews#3464

Write issue in directory returned by `cwd()`

openjournals/joss-reviews#3464

Permission issues at the very first run.

After pip3 install epimargin on a Linux box. I ran the following snippets in python console.

from itertools import cycle

import epimargin.plots as plt
import numpy as np
import pandas as pd
from epimargin.utils import setup

(data, figs) = setup() # creates convenient directories
plt.set_theme("minimal")

I hit by permission issues when application tried to create default directory. Is is necessary to use /usr/bin/ to save data. In line 44 below, may be root can be set to someplace in user's $HOME?

<ipython-input-1-710a13386d8f> in <module>
      6 from epimargin.utils import setup
      7 
----> 8 (data, figs) = setup() # creates convenient directories
      9 plt.set_theme("minimal")

~/Work/FORKES/epimargin/epimargin/utils.py in setup(**kwargs)
     42     logging.basicConfig(**kwargs)
     43     logging.getLogger('flat_table').addFilter(lambda _: 0)
---> 44     return (mkdir(root / "data"), mkdir(root / "figs"))
     45 
     46 def fillna(array):

~/Work/FORKES/epimargin/epimargin/utils.py in mkdir(p, exist_ok)
     30 
     31 def mkdir(p: Path, exist_ok: bool = True) -> Path:
---> 32     p.mkdir(exist_ok = exist_ok)
     33     return p
     34 

/usr/lib/python3.9/pathlib.py in mkdir(self, mode, parents, exist_ok)
   1311         """
   1312         try:
-> 1313             self._accessor.mkdir(self, mode)
   1314         except FileNotFoundError:
   1315             if not parents or self.parent == self:

PermissionError: [Errno 13] Permission denied: '/usr/bin/data'

On Linux and OSX, https://github.com/COVID-IWG/epimargin /blob/1a8094ae8173a9f09f2efc5b872ac56d67a86c6f/epimargin/utils.py#L18 most likely to return /usr/bin since argv0 is /usr/bin/python3.

Another solution is to check if the cwd() is writable by the user. If not, default to a user-writable directory in user's $HOME? If not, the application needs to be run as root or sudo user which is not advisable.

Lint errors

openjournals/joss-reviews#3464

Various lint errors. Undefined variables have been used in few scripts. These need to be cleaned up or removed.

[centos@ip-172-26-6-166 epimargin (joss_lint_errors)]$  flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
./studies/adaptive-policy-evaluation/policy_analysis.py:47:82: F821 undefined name 'add_lag_cols'
    metro_state_policy_df = metro_state_policy_df.groupby(['metro-state']).apply(add_lag_cols, ['RR_pred'])
                                                                                 ^
./studies/empirical-reporting-delay/delay_curve.py:129:55: F821 undefined name 'slope_labels'
plt.scatter(x = next(i for i in range(len(slopes)) if slope_labels[i] == "TT"), y = slopes["TT"], c='r', label = "national")
                                                      ^
./studies/empirical-reporting-delay/delay_curve.py:142:13: F821 undefined name 'ts'
confirmed = ts.Hospitalized.copy()
            ^
./studies/empirical-reporting-delay/delay_curve.py:161:12: F821 undefined name 'ts'
mh_raw   = ts.loc["Maharashtra"].Hospitalized
           ^
./studies/empirical-reporting-delay/delay_curve.py:162:25: F821 undefined name 'ts'
mh_notch = notch_filter(ts.loc["Maharashtra"].Hospitalized)
                        ^
./studies/empirical-reporting-delay/delay_curve.py:163:25: F821 undefined name 'ts'
mh_adj   = delay_adjust(ts.loc["Maharashtra"].Hospitalized, state_dist.loc["Maharashtra"])
                        ^
./studies/empirical-reporting-delay/delay_curve.py:184:24: F821 undefined name 'ts'
notched = notch_filter(ts.loc["India"].Hospitalized)
                       ^
./studies/empirical-reporting-delay/delay_curve.py:205:13: F821 undefined name 'ts'
    raw   = ts.loc[state].Hospitalized
            ^
./studies/india_districts/max_rt_choro.py:20:13: F821 undefined name 'label_fn'
    label = label_fn(row)
            ^
./studies/india_districts/max_rt_choro.py:21:34: F821 undefined name 'Rt_c'
    a1 = ax.annotate(s=f"{label}{Rt_c}", xy=list(row["pt"].coords)[0], ha = "center", fontfamily = note_font["family"], color="white", **label_kwargs)
                                 ^
./studies/india_districts/max_rt_choro.py:21:100: F821 undefined name 'note_font'
    a1 = ax.annotate(s=f"{label}{Rt_c}", xy=list(row["pt"].coords)[0], ha = "center", fontfamily = note_font["family"], color="white", **label_kwargs)
                                                                                                   ^
./studies/india_districts/max_rt_choro.py:21:138: F821 undefined name 'label_kwargs'
    a1 = ax.annotate(s=f"{label}{Rt_c}", xy=list(row["pt"].coords)[0], ha = "center", fontfamily = note_font["family"], color="white", **label_kwargs)
                                                                                                                                         ^
./studies/india_districts/max_rt_choro.py:22:26: F821 undefined name 'Stroke'
    a1.set_path_effects([Stroke(linewidth = 2, foreground = "black"), Normal()])
                         ^
./studies/india_districts/max_rt_choro.py:22:71: F821 undefined name 'Normal'
    a1.set_path_effects([Stroke(linewidth = 2, foreground = "black"), Normal()])
                                                                      ^
./studies/india_districts/urban_aggregation.py:20:12: F821 undefined name 'data_path'
    "v3": [data_path(i) for i in (1, 2)],
           ^
./studies/india_districts/urban_aggregation.py:21:12: F821 undefined name 'data_path'
    "v4": [data_path(i) for i in (3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13)]
           ^
./studies/india_districts/urban_aggregation.py:25:5: F821 undefined name 'download_data'
    download_data(data, target)
    ^
./studies/india_districts/urban_aggregation.py:27:6: F821 undefined name 'load_all_data'
df = load_all_data(
     ^
./studies/india_districts/urban_aggregation.py:40:6: F821 undefined name 'get_time_series'
ts = get_time_series(cases_UA, "detected_district").Hospitalized.unstack().fillna(0).cumsum(axis = 1)
     ^
./studies/india_districts/urban_aggregation.py:48:18: F821 undefined name 'get_time_series'
UA_ts["Delhi"] = get_time_series(df.query("detected_state == 'Delhi'")).Hospitalized.cumsum()
                 ^
./studies/india_districts/sanity-checks/smoothing_checks.py:31:12: F821 undefined name 'cwd'
    root = cwd()
           ^
./studies/india_districts/sanity-checks/smoothing_checks.py:59:79: F821 undefined name 'anomaly_dates'
        plot_T_anomalies(dates, T_pred, T_CI_upper, T_CI_lower, new_cases_ts, anomaly_dates, anomalies, CI)
                                                                              ^
./studies/india_districts/sanity-checks/smoothing_checks.py:78:78: F821 undefined name 'box_filter'
        ) = analytical_MPVS(ts.Hospitalized, CI = CI, smoothing = lambda ts: box_filter(ts, n, None))
                                                                             ^
./studies/india_districts/sanity-checks/smoothing_checks.py:108:78: F821 undefined name 'box_filter'
        ) = analytical_MPVS(ts.Hospitalized, CI = CI, smoothing = lambda ts: box_filter(ts, n, s))
                                                                             ^
./studies/indonesia/idn_provinces.py:97:11: F821 undefined name 'Model'
    IDN = Model.single_unit(name = province, population = priority_pops[province], I0 = T_pred[-1], RR0 = RR_pred[-1], upper_CI = T_CI_upper[-1], lower_CI = T_CI_lower[-1], mobility = 0, random_seed = 0)\
            .run(prediction_period)
          ^
./studies/periodicity-analysis/periodicity.py:169:10: F821 undefined name 'signal'
b1, a1 = signal.iirnotch(f0, Q, fs)
         ^
./studies/periodicity-analysis/periodicity.py:170:10: F821 undefined name 'signal'
b2, a2 = signal.iirnotch(2*f0, 2*Q, fs)
         ^
./studies/periodicity-analysis/periodicity.py:183:11: F821 undefined name 'signal'
freq, h = signal.freqz(b, a, fs=fs)
          ^
./studies/realtime-epi-figs/delay_curve.py:56:50: F821 undefined name 'label_font'
    plt.ylabel("percentage of cases\n", fontdict=label_font)
                                                 ^
./studies/realtime-epi-figs/delay_curve.py:57:43: F821 undefined name 'label_font'
    plt.xlabel("\ndelay (days)", fontdict=label_font)
                                          ^
./studies/realtime-epi-figs/delay_curve.py:116:55: F821 undefined name 'slope_labels'
plt.scatter(x = next(i for i in range(len(slopes)) if slope_labels[i] == "TT"), y = slopes["TT"], c='r', label = "national")
                                                      ^
./studies/realtime-epi-figs/delay_curve.py:120:32: F821 undefined name 'label_font'
plt.xlabel("\nstate", fontdict=label_font)
                               ^
./studies/realtime-epi-figs/delay_curve.py:121:38: F821 undefined name 'label_font'
plt.ylabel("coefficient\n", fontdict=label_font)
                                     ^
./studies/realtime-epi-figs/delay_curve.py:161:31: F821 undefined name 'label_font'
plt.xlabel("date\n", fontdict=label_font)
                              ^
./studies/realtime-epi-figs/delay_curve.py:162:39: F821 undefined name 'label_font'
plt.ylabel("\nnumber cases", fontdict=label_font)
                                      ^
./studies/realtime-epi-figs/ica.py:22:1: F821 undefined name 'plt'
plt.plot(X_transformed[:, 1], X_transformed[:, 2])  
^
./studies/realtime-epi-figs/ica.py:23:1: F821 undefined name 'plt'
plt.show()
^
./studies/realtime-epi-figs/ridge.py:86:6: F821 undefined name 'fig'
ax = fig.add_subplot(111, projection='3d')
     ^
./studies/vaccine_allocation/archive/agestruct.py:40:76: F821 undefined name 'dT'
        self.dT = [(dT0 * prevalence_structure).astype(int)] if isinstance(dT, (int, float))         else dT
                                                                           ^
./studies/vaccine_allocation/archive/agestruct.py:40:107: F821 undefined name 'dT'
        self.dT = [(dT0 * prevalence_structure).astype(int)] if isinstance(dT, (int, float))         else dT
                                                                                                          ^
./studies/vaccine_allocation/archive/agestruct.py:43:83: F821 undefined name 'dT'
        self.S  = [((population - I0) * age_structure).astype(int)] if isinstance(dT, (int, float))  else population
                                                                                  ^
./studies/vaccine_allocation/archive/consumption_regression.py:1:19: F821 undefined name 'pd'
datareg_sep2020 = pd.read_stata(data/"datareg_sep2020.dta")\
    .dropna()\
    .drop(columns = ["_merge"])
                  ^
./studies/vaccine_allocation/archive/consumption_regression.py:1:33: F821 undefined name 'data'
datareg_sep2020 = pd.read_stata(data/"datareg_sep2020.dta")\
    .dropna()\
    .drop(columns = ["_merge"])
                                ^
43    F821 undefined name 'add_lag_cols'
43

unify parallelizing mechanisms

Currently, SIR is parallelized by running separate models with different seeds, but AgeSIRVD instantiates a single model and advances a vector state through multivariate draws tied to a single seed.

todo:
[] Update SIR to match the latter.
[] Update plotting code and analysis functions to take in a single new SIR model rather than an array of models

Run failure because of a dependency (`semver`) has removed functions

[centos@ip-172-26-6-166 karnataka (joss_lint_errors)]$ python3 age_rt.py 
WARNING (theano.tensor.blas): Using NumPy C-API based implementation for BLAS functions.
Traceback (most recent call last):
  File "/home/centos/Work/FORKES/epimargin/studies/karnataka/age_rt.py", line 3, in <module>
    from epimargin.estimators import analytical_MPVS
  File "/home/centos/Work/FORKES/epimargin/epimargin/estimators.py", line 7, in <module>
    import pymc3 as pm
  File "/home/centos/.local/lib/python3.9/site-packages/pymc3-3.11.2-py3.9.egg/pymc3/__init__.py", line 34, in <module>
    if not semver.match(theano.__version__, ">=1.1.2"):
AttributeError: module 'semver' has no attribute 'match'

The package semver has deprecated/removed the match function (python-semver/python-semver#236).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.