Source code for climextremes

name = "climextremes"

import pkg_resources  # part of setuptools
__version__ = pkg_resources.require("climextremes")[0].version

[docs] def reinstall_climextremes(force, version): import os import sys import rpy2.robjects import warnings from rpy2.rinterface import RRuntimeWarning warnings.filterwarnings("ignore", category=RRuntimeWarning) def install_cran_default(repos = 'https://cran.r-project.org'): # sometimes failure occurs with URL issue with cran.r-project.org, so try a mirror try: # this may fail with error or fail but only issue a warning rpy2.robjects.r("""install.packages('climextRemes',repos='{0}')""".format(repos)) rpy2.robjects.r('''library(climextRemes)''') except: rpy2.robjects.r("""install.packages('climextRemes',repos='https://cran.cnr.berkeley.edu')""") rpy2.robjects.r('''library(climextRemes)''') def get_devtools(repos = 'https://cran.us.r-project.org'): try: rpy2.robjects.r('''library(devtools)''') return True except: try: rpy2.robjects.r("""install.packages('devtools',repos='{0}')""".format(repos)) except: rpy2.robjects.r("""install.packages('devtools',repos='https://cran.cnr.berkeley.edu')""") try: rpy2.robjects.r('''library(devtools)''') except: print("Unable to install R package devtools; needed for version-specific installation of R climextRemes.") return False return True def install_cran_specific(version, repos = 'https://cran.us.r-project.org'): check = get_devtools() # When using Conda with R provided by Conda, TAR is incorrectly set to /bin/gtar, which causes errors. # Simply unsetting seems to avoid the problem and not prevent installation of R packages. rpy2.robjects.r("""Sys.unsetenv('TAR')""") if check: try: rpy2.robjects.r("""install_version('climextRemes','{0}',repos='{1}', upgrade = 'never')""".format(version, repos)) rpy2.robjects.r('''library(climextRemes)''') except: rpy2.robjects.r("""install_version('climextRemes','{0}',repos='https://cran.cnr.berkeley.edu', upgrade = 'never')""".format(version, repos)) rpy2.robjects.r('''library(climextRemes)''') if force: try: if version is None: install_cran_default() else: try: install_cran_specific(version) except: print("Installation of R climextRemes version: " + version + " failed, likely because the version is not available on the CRAN R package archive.") return False except: return False else: try: test_import = rpy2.robjects.r('''library(climextRemes)''') iv = rpy2.robjects.r('''packageVersion("climextRemes")''')[0] installed_version = str(iv[0]) + "." + str(iv[1]) + "." + str(iv[2]) if version is not None and version != installed_version: print("Current version: " + installed_version + " does not match requested version: " + version + ". Attempting installation of R climextRemes package (this may take a few minutes) ...") try: install_cran_specific(version) except: print("Installation of R climextRemes version: " + version + " failed (likely because the version is not on the CRAN R package archive).\nFalling back to installed version.") except: # initial import failed print("Attempting installation of R climextRemes package and its dependencies (this may take a few minutes) ...") try: if version is None: install_cran_default() else: try: install_cran_specific(version) except: print("Installation of version: " + version + " failed (likely because the version is not on the CRAN R package archive).\nFalling back to installing default CRAN package.") install_cran_default() except: return False return True
def __wrap_import(): import os import sys import rpy2.robjects global __version__ if not reinstall_climextremes(False, __version__): print("Installation of climextRemes failed. Please manually install climextRemes using CRAN R package archive.") return # Force R warnings to come through to Python rpy2.robjects.r('options(warn=1)') import warnings from rpy2.rinterface import RRuntimeWarning warnings.filterwarnings("always", category=RRuntimeWarning) # As of recent rpy2 (e.g., 3.5.14), need to give `climextremes_path` as # last line here. Probably would be fine to never define `climextremes_path`. __climextRemes_home__ = rpy2.robjects.r(''' library(climextRemes) sp <- searchpaths() climextremes_path <- sp[grep("climextRemes", sp)] climextremes_path ''')[0] __climextRemes_python_path__ = __climextRemes_home__ + "/python" sys.path.append(__climextRemes_python_path__) def __cleanup_import(): import sys del sys.path[-1] del sys.path[-1] __wrap_import() from climextRemes_wrapper import * __cleanup_import()