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]

Monthly Minimum of Daily Minimum Temperature¶

Run wps_climdex_mmdmt Process for climdex.tnn() monthly¶

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