wps_climdex_mmdmt¶
WPS wrapper for climdex.pcic's Monthly or Annual Maximum or Minimum of Daily Maximum or Minimum Temperature functions
- Monthly Maximum of Daily Maximum Temperature (climdex.txx): This function takes a climdexInput object as input and computes the monthly or annual maximum of daily maximum temperature
- Monthly Maximum of Daily Minimum Temperature (climdex.tnx): This function takes a climdexInput object as input and computes the monthly or annual maximum of daily minimum temperature.
- Monthly Minimum of Daily Maximum Temperature (climdex.txn): This function takes a climdexInput object as input and computes the monthly or annual minimum of daily maximum temperature
- Monthly Minimum of Daily Minimum Temperature (climdex.tnn): This function takes a climdexInput object as input and computes the monthly or annual minimum of daily Minimum temperature
In [1]:
import os
import requests
from birdy import WPSClient
from rpy2 import robjects
from urllib.request import urlretrieve
from importlib.resources import files
from tempfile import NamedTemporaryFile
from wps_tools.R import rda_to_vector, construct_r_out, test_rda_output
from wps_tools.testing import get_target_url
In [2]:
# Ensure we are in the working directory with access to the data
while os.path.basename(os.getcwd()) != "quail":
os.chdir('../')
In [3]:
# NBVAL_IGNORE_OUTPUT
url = get_target_url("quail")
print(f"Using quail on {url}")
Using quail on https://marble-dev01.pcic.uvic.ca/twitcher/ows/proxy/quail/wps
In [4]:
quail = WPSClient(url)
Help for individual processes can be diplayed using the ? command (ex/ bird.process?)¶
In [5]:
# NBVAL_IGNORE_OUTPUT
quail.climdex_mmdmt?
Signature: quail.climdex_mmdmt( climdex_input, month_type=None, loglevel='INFO', output_file='output.rda', freq='monthly', output_formats=None, ) Docstring: climdex_mmdmt includes the functions: - climdex.txx: Monthly (or annual) Maximum of Daily Maximum Temperature - climdex.tnx: Monthly (or annual) Maximum of Daily Minimum Temperature - climdex.txn: Monthly (or annual) Minimum of Daily Maximum Temperature - climdex.tnn: Monthly (or annual) Minimum of Daily Minimum Temperature Parameters ---------- climdex_input : ComplexData:mimetype:`application/x-gzip` RDS or Rdata (.rds, .rda, .rdata) file containing R Object of type climdexInput output_file : string Filename to store the output Rdata (extension .rda) month_type : {'txx', 'tnx', 'txn', 'tnn'}string Min/ max daily temperature type to compute freq : {'monthly', 'annual'}string Time frequency to aggregate to loglevel : {'CRITICAL', 'ERROR', 'WARNING', 'INFO', 'DEBUG', 'NOTSET'}string Logging level Returns ------- rda_output : ComplexData:mimetype:`application/x-gzip` Rda file containing R output data File: ~/github/quail/</tmp/quail-venv/lib/python3.8/site-packages/birdy/client/base.py-4> Type: method
Monthly Maximum of Daily Maximum Temperature¶
Run wps_climdex_mmdmt Process for climdex.txx() monthly¶
In [6]:
with NamedTemporaryFile(suffix=".rda", prefix="txx_", dir="/tmp", delete=True) as output_file:
output = quail.climdex_mmdmt(
climdex_input=(files("tests") / "data/climdexInput.rda").resolve(),
month_type="txx",
output_file=output_file.name,
)
txx_monthly_url = output.get()[0]
Run wps_climdex_mmdmt Process for climdex.txx() annual¶
In [7]:
with NamedTemporaryFile(suffix=".rda", prefix="txx_", dir="/tmp", delete=True) as output_file:
output = quail.climdex_mmdmt(
climdex_input=(files("tests") / "data/climdexInput.rda").resolve(),
month_type="txx",
freq="annual",
output_file=output_file.name,
)
txx_annual_url = output.get()[0]
Monthly Maximum of Daily Minimum Temperature¶
Run wps_climdex_mmdmt Process for climdex.tnx() monthly¶
In [8]:
with NamedTemporaryFile(suffix=".rda", prefix="tnx_", dir="/tmp", delete=True) as output_file:
output = quail.climdex_mmdmt(
climdex_input=(files("tests") / "data/climdexInput.rda").resolve(),
month_type="tnx",
output_file=output_file.name,
)
tnx_monthly_url = output.get()[0]
Run wps_climdex_mmdmt Process for climdex.tnx() annual¶
In [9]:
with NamedTemporaryFile(suffix=".rda", prefix="tnx_", dir="/tmp", delete=True) as output_file:
output = quail.climdex_mmdmt(
climdex_input=(files("tests") / "data/climdexInput.rda").resolve(),
month_type="tnx",
freq="annual",
output_file=output_file.name,
)
tnx_annual_url = output.get()[0]
Monthly Minimum of Daily Maximum Temperature¶
Run wps_climdex_mmdmt Process for climdex.txn() monthly¶
In [10]:
with NamedTemporaryFile(suffix=".rda", prefix="txn_", dir="/tmp", delete=True) as output_file:
output = quail.climdex_mmdmt(
climdex_input=(files("tests") / "data/climdexInput.rda").resolve(),
month_type="txn",
output_file=output_file.name,
)
txn_monthly_url = output.get()[0]
You can also run with multiple file inputs
Run wps_climdex_mmdmt Process for climdex.txn() annual with multiple inputs¶
In [11]:
climdex_inputs = [
(files("tests") / "data/climdexInput.rds").resolve(),
(files("tests") / "data/climdexInput.rda").resolve(),
(files("tests") / "data/climdex_input_multiple.rda").resolve(),
]
with NamedTemporaryFile(suffix=".rda", prefix="txn_", dir="/tmp", delete=True) as output_file:
output = quail.climdex_mmdmt(
climdex_input=climdex_inputs,
month_type="txn",
freq="annual",
output_file=output_file.name,
)
txn_annual_url = output.get()[0]
In [12]:
with NamedTemporaryFile(suffix=".rda", prefix="tnn_", dir="/tmp", delete=True) as output_file:
output = quail.climdex_mmdmt(
climdex_input=(files("tests") / "data/climdexInput.rda").resolve(),
month_type="tnn",
output_file=output_file.name,
)
tnn_monthly_url = output.get()[0]
You can also use rds input. Run wps_climdex_mmdmt Process for climdex.tnn() annual with rds input:
In [13]:
with NamedTemporaryFile(suffix=".rda", prefix="tnn_", dir="/tmp", delete=True) as output_file:
output = quail.climdex_mmdmt(
climdex_input=(files("tests") / "data/climdexInput.rds").resolve(),
month_type="tnn",
freq="annual",
output_file=output_file.name,
)
tnn_annual_url = output.get()[0]
Access the output with rda_to_vector or construct_r_out from wps_tools.R
In [14]:
# Eg/ Monthly Minimum of Daily Minimum Temperature
tnn = rda_to_vector(tnn_annual_url, "tnn_annual1_ci")
# use print() to see whole vector
print(f"Monthly Minimum of Daily Minimum Temperature (tnn)\n{tnn}")
Monthly Minimum of Daily Minimum Temperature (tnn) 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 NA -3.3 NA NA -6.7 NA -3.3 -1.7 -2.8 -13.9 -8.3 -2.2 -5.0 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 -8.3 -5.6 -6.1 -3.3 NA NA -8.5 -7.5 -6.5 -3.5 -8.5 -8.5 NA 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 NA -4.0 NA -2.0 -11.0 -8.5 NA -4.5 NA NA -4.0 -6.5 -4.0 1998 1999 2000 2001 2002 2003 2004 -6.0 0.0 -0.5 -1.0 NA 0.0 NA
In [15]:
construct_r_out([txx_monthly_url, tnx_monthly_url, txn_monthly_url, tnn_monthly_url])
Out[15]:
[[R object with classes: ('numeric',) mapped to: [ nan, nan, nan, nan, ..., 22.000000, 18.000000, nan, nan]], [R object with classes: ('numeric',) mapped to: [ nan, nan, nan, nan, ..., 12.500000, 10.000000, nan, nan]], [R object with classes: ('numeric',) mapped to: [ nan, nan, nan, nan, ..., 14.000000, 9.500000, nan, nan]], [R object with classes: ('numeric',) mapped to: [ nan, nan, nan, nan, ..., 7.000000, 4.000000, nan, nan]]]
Test output against expected output¶
In [16]:
test_rda_output(
txx_monthly_url, "txx_monthly1_ci", "expected_mmdmt_data.rda", "expected_txx_monthly"
)
test_rda_output(
txx_annual_url, "txx_annual1_ci", "expected_mmdmt_data.rda", "expected_txx_annual"
)
test_rda_output(
tnx_monthly_url, "tnx_monthly1_ci", "expected_mmdmt_data.rda", "expected_tnx_monthly"
)
test_rda_output(
tnx_annual_url, "tnx_annual1_ci", "expected_mmdmt_data.rda", "expected_tnx_annual"
)
test_rda_output(
txn_monthly_url, "txn_monthly1_ci", "expected_mmdmt_data.rda", "expected_txn_monthly"
)
test_rda_output(
txn_annual_url, "txn_annual1_ci", "expected_mmdmt_data.rda", "expected_txn_annual"
)
test_rda_output(
tnn_monthly_url, "tnn_monthly1_ci", "expected_mmdmt_data.rda", "expected_tnn_monthly"
)
test_rda_output(
tnn_annual_url, "tnn_annual1_ci", "expected_mmdmt_data.rda", "expected_tnn_annual"
)