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()