Skip to content

Relative Economic Value implementation#932

Open
thomaspagano wants to merge 4 commits intonci:developfrom
thomaspagano:issue-632-REV
Open

Relative Economic Value implementation#932
thomaspagano wants to merge 4 commits intonci:developfrom
thomaspagano:issue-632-REV

Conversation

@thomaspagano
Copy link
Contributor

Please work through the following checklists. Delete anything that isn't relevant.

Development for new xarray-based metrics

  • [yes ] Works with n-dimensional data and includes reduce_dims, preserve_dims, and weights args.
  • [yes ] Typehints added
  • [yes] Add error handling
  • [yes] Imported into the API
  • [yes] Works with both xr.DataArrays and xr.Datasets if possible

Docstrings

  • [yes] Docstrings complete and follow Napoleon (google) style
  • [yes] Maths equation added
  • [yes] Reference to paper/webpage is in docstring. The preferred referencing style for journal articles is APA (7th edition)
  • [yes] Code example added

Testing of new xarray-based metrics

  • [yes] 100% unit test coverage
  • [yes] Test that metric is compatible with dask.
  • [yes] Test that metrics work with inputs that contain NaNs
  • [yes] Test that broadcasting with xarray works
  • [yes] Test both reduce and preserve dims arguments work
  • [yes] Test that errors are raised as expected
  • [yes] Test that it works with both xr.DataArrays and xr.Datasets

Tutorial notebook

  • [yes] Short introduction to why you would use that metric and what it tells you
  • [yes] A link to a reference
  • [yes] A "things to try next" section at the end
  • [yes] Add notebook to Tutorial_Gallery.ipynb
  • [yes] Optional - a detailed discussion of how the metric works at the end of the notebook

Documentation

rev: xr.DataArray,
thresholds: Sequence[float],
cost_loss_ratios: Sequence[float],
special_outputs: Optional[Sequence[str]],
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Names like 'special' are a bit ambiguous - in what way are they special? Maybe something more concrete?

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

issue-632-REV afefa3a I renamed all instances of special_outputs to derived_metrics

Copy link
Collaborator

@nicholasloveday nicholasloveday left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm still working through my review, but here are some initial comments

" special_outputs=['maximum', 'rational_user']\n",
")\n",
"\n",
"print(\"REV for rational users (using probability directly):\")\n",
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we need to print out the xarray objects? Or is the plot enough?

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe it's overkill but I think seeing more is helpful.

I just noticed a potential issue and put it in the group chat:

a question about the "maximum" special output...

Is it right or wrong that the output should have cost_loss_ratio == threshold?

I think the optimal REV for a particular cost_loss_ratio can potentially come from a different threshold. For example... cost_loss_ratio = 0.2, REV maximum = 0.54, optimal threshold = 0.3. Is the above example misleading and if so, should the threshold coordinate be something other than equal to cost_loss_ratio. I haven't explored it, but I'm not sure if you can have repeating coordinates in xarray like 0.0, 0.1, 0.3, 0.3, 0.3, 0.5...

Copy link
Collaborator

@nicholasloveday nicholasloveday left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @thomaspagano - some more feedback from me

Copy link
Collaborator

@nicholasloveday nicholasloveday left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's starting to get closer @thomaspagano . I've made a few more suggestions. I still need to check a couple of the tests manually.

@nikeethr
Copy link
Collaborator

nikeethr commented Jan 6, 2026

I'm not reviewing this PR - but thanks for doing this, and I appreciate the defensive coding from a brief look.

I mostly wanted to comment about this:

try:
    import dask.array as da

    HAS_DASK = True
except ImportError:
    da = None
    HAS_DASK = False

This is not so much a "this PR" thing - and more directed at maybe @nicholasloveday and @tennlee, but is there a general utility function that can be used instead? And if not, should we be adding it?

if utils.dask_available(): do_dask_stuff or similar seems a bit cleaner to me. I notice this pattern re-emerging in other parts of the codebase and tests as well.

Comment on lines 1178 to 1182
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABSMAAAGJCAYAAABxfiYnAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAAkl1JREFUeJzs3Wl4FFX69/FfZ9/DEpJAWBIgCMgmMCgDKCqKCm6IiCuo47iAG4rLuIGiKKMjIzLoOIoy6iiijqN/UREVHxERRdxYRATDGgghCUnI2vW8CF10dXeS7tDd6STfz3V5SU6frtynzl2nTp9UV9kMwzAEAAAAAAAAAAEW1tgBAAAAAAAAAGgZWIwEAAAAAAAAEBQsRgIAAAAAAAAIChYjAQAAAAAAAAQFi5EAAAAAAAAAgoLFSAAAAAAAAABBwWIkAAAAAAAAgKBgMRIAAAAAAABAULAYCQAAAAAAACAoWIwEAABoIbZt2yabzabHH3/cb9ucMWOGbDab8vLy6q2bmZmpyZMnmz9/9tlnstls+uyzz8yyyZMnKzMz02/xhQLXdvtLIPqzqWiOeQIAQEvBYiQAACHuxRdflM1m8/jfXXfdFbQ4/vGPf+jFF1/0un5tMaenpwcuyBCxfv16zZgxQ9u2bfOqvmNBz/FfXFycevfurXvvvVdFRUWBDTbElZaWasaMGZYFy+aspKREDz30kPr166e4uDglJydrxIgRWrRokQzDaOzwmpyRI0fWOhb17NmzscOT5PvYCgBAUxfR2AEAAADvPPjgg8rKyrKU9enTJ2i//x//+IdSUlJ8usLrtNNO0xVXXGEpi42N9XNkoWf9+vWaOXOmRo4c6dPVWwsWLFBCQoKKi4v10Ucf6eGHH9Ynn3yilStXymazBS7gINm0aZPCwur+W/hzzz0nu91u/lxaWqqZM2dKqllYas5yc3N16qmnasOGDZo4caKmTp2qsrIyvfnmm5o0aZLef/99vfLKKwoPD2/sUJuUjh07avbs2W7lycnJjRCNu4aMrQAANGUsRgIA0ESceeaZGjx4sFd1y8rKFBUVVe/CT6D16NFDl112md+3W1VVJbvdrqioKL9vuzGNHz9eKSkpkqTrrrtOF1xwgd566y199dVXGjp0qMf3lJaWKi4uLphhNlh0dHS9dSIjI4MQSWiaNGmSNmzYoLffflvnnHOOWX7TTTdp+vTpevzxx3XcccfpzjvvbMQoPSspKVF8fHxjh+FRcnJyQMYhAADQMHxNGwCAJs5x373XXntN9957rzIyMhQXF2d+vfeNN97QoEGDFBsbq5SUFF122WXauXOnZRt79uzRlVdeqY4dOyo6Olrt27fXueeea37NODMzUz///LNWrFhhfsXRH1ep7d27V1dffbXS0tIUExOj/v3766WXXrLUcb4v3ty5c9WtWzdFR0dr/fr1kqSNGzdq/PjxatOmjWJiYjR48GD973//c/tdBQUFuvXWW5WZmano6Gh17NhRV1xxhXmvw4qKCt1///0aNGiQkpOTFR8frxEjRujTTz9129Zrr72mQYMGKTExUUlJSerbt6/+/ve/S6r5Wv2FF14oSTr55JPN/dWQrxmfcsopkqStW7dKqrkysE+fPvr222914oknKi4uTn/5y1+83pfOnnzySXXp0kWxsbE66aST9NNPP1le/+GHHzR58mR17dpVMTExSk9P11VXXaX9+/d73F5eXp4mTJigpKQktW3bVjfffLPKysosdby5d6LzvQC3bdumdu3aSZJmzpxp7ssZM2Zo4cKFstls+u6779y28cgjjyg8PNwtz539/vvvuuGGG3TMMccoNjZWbdu21YUXXuj21XrHbRJWrlypadOmqV27doqPj9f555+vffv2WeoahqFZs2apY8eOiouL08knn6yff/65zvY6fPXVV/rwww81efJky0Kkw+zZs5Wdna3HHntMhw4dcnu9vv6s7xh3WLp0qUaMGKH4+HglJiZqzJgxbm2YPHmyEhIStGXLFp111llKTEzUpZdeqqlTpyohIUGlpaVu8V188cVKT09XdXW1T79Lkv773/+qT58+iomJUZ8+ffT222/XuS99tWTJEtlsNq1YscLttWeffVY2m82yP70Zc7zNm7rG1srKSs2cOVPZ2dmKiYlR27ZtNXz4cC1btsyv7QcAINi4MhIAgCaisLDQ7SEhjqvoJOmhhx5SVFSUbr/9dpWXlysqKkovvviirrzySv3hD3/Q7NmzlZubq7///e9auXKlvvvuO7Vq1UqSdMEFF+jnn3/WjTfeqMzMTO3du1fLli1TTk6OMjMzNXfuXN14441KSEjQPffcI0lKS0urN+aysjK3mBMTExUdHa1Dhw5p5MiR+vXXXzV16lRlZWXpjTfe0OTJk1VQUKCbb77Z8r6FCxeqrKxMf/7znxUdHa02bdro559/1rBhw5SRkaG77rpL8fHxWrx4sc477zy9+eabOv/88yVJxcXFGjFihDZs2KCrrrpKAwcOVF5env73v/9px44dSklJUVFRkf71r3/p4osv1jXXXKODBw/q+eef1+jRo/X1119rwIABkqRly5bp4osv1qmnnqrHHntMkrRhwwatXLlSN998s0488UTddNNNeuqpp/SXv/xFvXr1kiTz/77YsmWLJKlt27Zm2f79+3XmmWdq4sSJuuyyy5SWlubzvly0aJEOHjyoKVOmqKysTH//+991yimn6McffzT7ddmyZfrtt9905ZVXKj09XT///LP++c9/6ueff9ZXX33l9rXxCRMmKDMzU7Nnz9ZXX32lp556SgcOHNCiRYt8brdDu3bttGDBAl1//fU6//zzNW7cOElSv379lJWVpSlTpuiVV17RcccdZ3nfK6+8opEjRyojI6PWba9Zs0ZffvmlJk6cqI4dO2rbtm1asGCBRo4cqfXr17tdbXrjjTeqdevWeuCBB7Rt2zbNnTtXU6dO1euvv27Wuf/++zVr1iydddZZOuuss7R27VqdfvrpqqioqLet7777riS53dbAISIiQpdccolmzpyplStXatSoUeZr3vRnfce4JP373//WpEmTNHr0aD322GMqLS3VggULNHz4cH333XeWWw5UVVVp9OjRGj58uB5//HHFxcUpMzNT8+fP1//93/+ZC/JSzdW77777riZPnmx+xdzb3/XRRx/pggsuUO/evTV79mzt37/fXFT1VnV1tccHLMXGxio+Pl5jxoxRQkKCFi9erJNOOslS5/XXX9exxx5r3hLD2zHHob68qWtsnTFjhmbPnq0//elPGjJkiIqKivTNN99o7dq1Ou2007xuPwAAIccAAAAhbeHChYYkj/8ZhmF8+umnhiSja9euRmlpqfm+iooKIzU11ejTp49x6NAhs/y9994zJBn333+/YRiGceDAAUOS8de//rXOOI499ljjpJNO8jru2mJeuHChYRiGMXfuXEOS8fLLL1tiHjp0qJGQkGAUFRUZhmEYW7duNSQZSUlJxt69ey2/49RTTzX69u1rlJWVmWV2u9344x//aGRnZ5tl999/vyHJeOutt9zitNvthmEYRlVVlVFeXm557cCBA0ZaWppx1VVXmWU333yzkZSUZFRVVdXa9jfeeMOQZHz66af17KUaDzzwgCHJ2LRpk7Fv3z5j69atxrPPPmtER0cbaWlpRklJiWEYhnHSSScZkoxnnnnG8n5f92VsbKyxY8cOs+7q1asNScatt95qljnnksN//vMfQ5Lx+eefu8V+zjnnWOrecMMNhiTj+++/N8u6dOliTJo0yfzZkbvO+2nSpElGly5dzJ/37dtnSDIeeOABt3guvvhio0OHDkZ1dbVZtnbtWkue1cZT+1atWmVIMhYtWmSWOY6/UaNGmbliGIZx6623GuHh4UZBQYFhGIaxd+9eIyoqyhgzZoyl3l/+8hdDkqXdnpx33nmGJOPAgQO11nnrrbcMScZTTz1lGIb3/enNMX7w4EGjVatWxjXXXGMp37Nnj5GcnGwpnzRpkiHJuOuuuyx17Xa7kZGRYVxwwQWW8sWLF1vyxpffNWDAAKN9+/bmfjYMw/joo48MSZY8qY3jmPH037XXXmvWu/jii43U1FTLcb17924jLCzMePDBB80yb8ccb/PGMGofW/v372+MGTOm3jYCANDU8DVtAACaiPnz52vZsmWW/5xNmjTJ8nCYb775Rnv37tUNN9ygmJgYs3zMmDHq2bOn/u///k9SzdVBUVFR+uyzz3TgwAG/xnzuuee6xTx69GhJ0vvvv6/09HRdfPHFZv3IyEjddNNNKi4udvvK5AUXXGB+ZVeS8vPz9cknn2jChAk6ePCg8vLylJeXp/3792v06NHavHmz+TXdN998U/3793e7akmSeYVfeHi4eQ9Ku92u/Px8VVVVafDgwVq7dq1Zv1WrViopKQnIVyWPOeYYtWvXTllZWbr22mvVvXt3/d///Z/lKr3o6GhdeeWVlvf5ui/PO+88y1WDQ4YM0fHHH6/333/fLHPOJccVrieccIIkWfaHw5QpUyw/33jjjWZsgXLFFVdo165dlq/Sv/LKK4qNjdUFF1xQ53ud21dZWan9+/ere/fuatWqlcf2/fnPf7ZcDTpixAhVV1fr999/lyR9/PHHqqio0I033mipd8stt3jVloMHD0qquXK4No7XXJ+wXl9/enOML1u2TAUFBbr44ovNYykvL0/h4eE6/vjjPd6u4Prrr7f8bLPZdOGFF+r9999XcXGxWf76668rIyNDw4cP9+l37d69W+vWrdOkSZMsD5s57bTT1Lt371r3k6vMzEy3cWjZsmWWvrnooou0d+9ey+0UlixZIrvdrosuukiSb2OOQ315U5dWrVrp559/1ubNm71uKwAATQFf0wYAoIkYMmRInQ+wcX3StuPD7jHHHONWt2fPnvriiy8k1SxuPfbYY7rtttuUlpamE044QWPHjtUVV1yh9PT0o4q5Y8eOlq+TusaXnZ3t9pAdx9eZXT+su7bv119/lWEYuu+++3Tfffd5/B179+5VRkaGtmzZUu/ilCS99NJLeuKJJ7Rx40ZVVlZ6/N033HCDFi9erDPPPFMZGRk6/fTTNWHCBJ1xxhn1br8+b775ppKSkhQZGamOHTuqW7dubnUyMjLcHtzj677Mzs52226PHj20ePFi8+f8/HzNnDlTr732mvbu3WupW1hY6PZ+121269ZNYWFhbvck9KfTTjtN7du31yuvvKJTTz1Vdrtd//nPf3TuuefWuagnSYcOHdLs2bO1cOFC7dy5U4ZhmK95al/nzp0tP7du3VqSzMU9xz523Q/t2rUz69bFEe/BgwfN2ye4qm3Bsr7+9OYYdyx4Oe5T6iopKcnyc0REhMevSl900UWaO3eu/ve//+mSSy5RcXGx3n//fV177bXmopy3v6u2fSrVjGueFo09iY+Pr3UccjjjjDOUnJys119/XaeeeqqkmkXUAQMGqEePHpJ8G3Mc6subujz44IM699xz1aNHD/Xp00dnnHGGLr/8cvXr16/e9wIAEMpYjAQAoJlwvtLLV7fccovOPvts/fe//9WHH36o++67T7Nnz9Ynn3zidj++xuLaPrvdLkm6/fbbzastXXXv3t3r7b/88suaPHmyzjvvPE2fPl2pqakKDw/X7NmzzXs3SlJqaqrWrVunDz/8UEuXLtXSpUu1cOFCXXHFFXU+MMYbJ554ouU+oJ4cTT/7YsKECfryyy81ffp0DRgwQAkJCbLb7TrjjDPMfV8X13tKBkJ4eLguueQSPffcc/rHP/6hlStXateuXV49OfnGG2/UwoULdcstt2jo0KFKTk6WzWbTxIkTPbbPca9DV86LmEejV69e+u9//6sffvhBJ554osc6P/zwgyT5dFWgQ33HuKPN//73vz3+ESIiwvqxITo62m3xW5JOOOEEZWZmavHixbrkkkv07rvv6tChQ+bVhZJ8/l3BEB0drfPOO09vv/22/vGPfyg3N1crV67UI488YtZpyJhzNHlz4oknasuWLXrnnXf00Ucf6V//+peefPJJPfPMM/rTn/7kbdMAAAg5LEYCANBMdenSRZK0adMmtyuQNm3aZL7u0K1bN91222267bbbtHnzZg0YMEBPPPGEXn75ZUn+X1zq0qWLfvjhB9ntdsuixsaNGy3x16Zr166Sar6OXN9VT926dXN7urCrJUuWqGvXrnrrrbcsbX3ggQfc6kZFRenss8/W2WefLbvdrhtuuEHPPvus7rvvPnXv3j0oC3HOfN2Xnr72+csvv5gPDTlw4ICWL1+umTNn6v7776/zfc6vOV9B+uuvv8put1seetIQ9e3LK664Qk888YTeffddLV26VO3atat1ocjZkiVLNGnSJD3xxBNmWVlZmQoKChoUp2Mfb9682cxNSdq3b59XV8GNHTtWs2fP1qJFizwuRlZXV+vVV19V69atNWzYMMtr9fWnQ13HuOMq3NTU1HqPp/pMmDBBf//731VUVKTXX39dmZmZ5lf8HXF487uc96mrTZs2HVWMnlx00UV66aWXtHz5cm3YsEGGYVgWUX0Zc3xRV463adNGV155pa688koVFxfrxBNP1IwZM1iMBAA0adwzEgCAZmrw4MFKTU3VM888o/LycrN86dKl2rBhg8aMGSOp5km3ZWVllvd269ZNiYmJlvfFx8c3eKHGk7POOkt79uyxPI24qqpK8+bNU0JCgttTbV2lpqZq5MiRevbZZ7V792631/ft22f++4ILLtD333+vt99+262e4wolxxVMzlcsrV69WqtWrbLU379/v+XnsLAw82uTjv0VHx8vSX7dX3XxdV/+97//tdzb7uuvv9bq1at15plnSvK8L6SaJ//WZv78+Zaf582bJ0nmNhvKcb/M2vZlv3791K9fP/3rX//Sm2++qYkTJ3p1ZV14eLhb++bNm6fq6uoGxTlq1ChFRkZq3rx5lu3Wtc+c/fGPf9SoUaO0cOFCvffee26v33PPPfrll190xx13uF0dW19/enOMjx49WklJSXrkkUcstyhwcD6e6nPRRRepvLxcL730kj744ANNmDDB8rq3v6t9+/YaMGCAXnrpJctX55ctW6b169d7HY+3Ro0apTZt2uj111/X66+/riFDhlgW2H0Zc3xR29jqOtYkJCSoe/fulnEZAICmiCsjAQBopiIjI/XYY4/pyiuv1EknnaSLL75Yubm5+vvf/67MzEzdeuutkmquoDr11FM1YcIE9e7dWxEREXr77beVm5uriRMnmtsbNGiQFixYoFmzZql79+5KTU2t9Z5v3vjzn/+sZ599VpMnT9a3336rzMxMLVmyRCtXrtTcuXPrveefVLMANnz4cPXt21fXXHONunbtqtzcXK1atUo7duzQ999/L0maPn26lixZogsvvFBXXXWVBg0apPz8fP3vf//TM888o/79+2vs2LF66623dP7552vMmDHaunWrnnnmGfXu3dvyMI4//elPys/P1ymnnKKOHTvq999/17x58zRgwADzHo0DBgxQeHi4HnvsMRUWFio6OlqnnHKKUlNTG7y//Lkvu3fvruHDh+v6669XeXm55s6dq7Zt2+qOO+6QVHPPvhNPPFFz5sxRZWWlMjIy9NFHH2nr1q21xrB161adc845OuOMM7Rq1Sq9/PLLuuSSS9S/f/+jaltsbKx69+6t119/XT169FCbNm3Up08f9enTx6xzxRVX6Pbbb5ckr76iLdVcifjvf/9bycnJ6t27t1atWqWPP/5Ybdu2bVCc7dq10+23367Zs2dr7NixOuuss/Tdd99p6dKl9X713mHRokU69dRTde655+qSSy7RiBEjVF5errfeekufffaZLrroIk2fPt3tffX1pzfHeFJSkhYsWKDLL79cAwcO1MSJE9WuXTvl5OTo//7v/zRs2DA9/fTTXrVj4MCB6t69u+655x6Vl5dbri709XfNnj1bY8aM0fDhw3XVVVcpPz9f8+bN07HHHms5LutSWFhoXuHtyjlfIiMjNW7cOL322msqKSnR448/7lbf2zHHF7WNrb1799bIkSM1aNAgtWnTRt98842WLFmiqVOn+vw7AAAIKY30FG8AAOClhQsXGpKMNWvWeHz9008/NSQZb7zxhsfXX3/9deO4444zoqOjjTZt2hiXXnqpsWPHDvP1vLw8Y8qUKUbPnj2N+Ph4Izk52Tj++OONxYsXW7azZ88eY8yYMUZiYqIhyTjppJPqjFuSMWXKlDrr5ObmGldeeaWRkpJiREVFGX379jUWLlxoqbN161ZDkvHXv/7V4za2bNliXHHFFUZ6eroRGRlpZGRkGGPHjjWWLFliqbd//35j6tSpRkZGhhEVFWV07NjRmDRpkpGXl2cYhmHY7XbjkUceMbp06WJER0cbxx13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7KmpU6YoOTk55NvUHPupubXJMXbs2L5dn332Wa25N3z4cD3++ONKTk4O+TYFq5/Cw8PVf8AAnXXmmYqMjDTLly5dqpKSEo0fP16SFBEZqalTpmjw4MEh3ybnfjpw4ICenj9fVZWVbm1yWLJkieLj43X2OeeY41Iot6m55B5tok3NqU2+zGH/MX++eR4K5TY591NERITOPOss9e/Xz61NzufciMhI3TF9uvr27RvybWouuUebaFNLa5O3z3AJ2a9pf/nllxo2bJh27dql9u3bm/UmTJggm82m119/XY888oheeuklbdq0ybKt1NRUzZw5U9dff73H3+XpykhHJzguI2WFmzbRJvc2rVu3TieccILGz5ynlMxsSYZsssrd+quW3D9FixYt0uTJkzV+5jy1y+wuQzbZZB1u9m79Va/fe72++eYbDRgwoFHa5NCc+qmuNjn6cNyMeUrL6i5Xhmzat3Wz3pxxo7766isNGDAg5NvkXN5c+qm5tcl17HAdC6SasePNB6Zq9erV5ngQym1yLQ9UP61bt06DBw/WxIcXqF3mkWPWUcMmad+2X7XkgZpjduDAgSHfJud+suZGd7NNzgzVnC/echqXQrlNzppy7tEm2tSc2uTLHPbrr7+u9zwUCm1yjmXdunX6wx/+oAkPzXc5VxyZfzufKwYNGhTybWouuUebaFNLa1NRUZHatGnTdL+mnZ6eLknKzc21LEbm5uaaJ4f09HTt3bvX8r6qqirl5+eb7/ckOjpa0dHRbuXh4eEKDw+3lDk62ZWv5a7bbUi5zWbzqdxfsdMm2uSI3WazqaqqSimZ2cro1d/j+w3ZzEHOUbdDHXWdt++KfvJ/mxx9mJpVe79INX3nur1QbZM3sTS1fjqaGEOxTd6OHdXV1R63FYpt8jaWoy232WrGyfrGUscx66gfym1y8DY3DkfpcVwKxTYdbTltok0NKadN/pvD+uM81Bj9ZLfbvT5XNCR2co820Sba5E15bbG61feqViPIyspSenq6li9fbpYVFRVp9erVGjp0qCRp6NChKigo0LfffmvW+eSTT2S323X88ccHPWYAAAAAAAAAtWvUKyOLi4v166+/mj9v3bpV69atU5s2bdS5c2fdcsstmjVrlrKzs5WVlaX77rtPHTp0ML/K3atXL51xxhm65ppr9Mwzz6iyslJTp07VxIkTvX6SNgAA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Xdvh2Gxhlmm++WHax33jHIdhO1LHOZb6tl1bud1ud9uuc1sN1fxum61m+9XV1bXUr2mra/3Gzj3HvnNukyvnmJ2358/cs+TS4X3jMRbD8Niu5nA8eVvuGovNaX+55Z10OPeO9KG3uXckN2y15oZqyY362uTt2OGYgLnmhuvYoXqO71DoJ3+V19ffruOSo34ot8nBl7GgobkXqNhDaYyo/bzl23kolNrUkP7wlEt1jR2S+1jjnns2n89DLSn3mlKbfJnDempvKLbJla9z2KbQplCcw3pb3lSPJ5utZtzzJZcC0SbH4lbND65jeY3a+rsl9FNd5Y3dptpidavvVS3VfBXqmGOOkSR169ZNpaWlltevueYaffXVV95uziulpaVuDQ0PDzeTMisrS+np6Vq+fLn5elFRkVavXq2hQ4f6NRYAAAAAAAAAR8frKyMnTZqkMWPGaOTIkfrmm290+eWXu9VJTU31a3Bnn322Hn74YXXu3FnHHnusvvvuO/3tb3/TVVddJalmZfeWW27RrFmzlJ2draysLN13333q0KGDzjvvPL/GAgAAAAAAAODoeL0Y+be//U0nn3yyNm7cqMmTJ+v0008PZFySpHnz5um+++7TDTfcoL1796pDhw669tprdf/995t17rjjDpWUlOjPf/6zCgoKNHz4cH3wwQeKiYkJeHwAAAAAAAAAvOfT07TPPvtsnX322YGKxU1iYqLmzp2ruXPn1lrHZrPpwQcf1IMPPhi0uAAAAAAAAAD4zqt7Rr722mteb3D79u1auXJlgwMCAAAAAAAA0Dx5tRi5YMEC9erVS3PmzNGGDRvcXi8sLNT777+vSy65RAMHDtT+/fv9HigAAAAAAACAps2rr2mvWLFC//vf/zRv3jzdfffdio+PV1pammJiYnTgwAHt2bNHKSkpmjx5sn766SelpaUFOm4AAAAAAAAATYzX94w855xzdM455ygvL09ffPGFfv/9dx06dEgpKSk67rjjdNxxxykszKsLLQEAABAAOTk5ysvLq7NOSkqKOnfuHKSIAAAAACufHmAj1UxgzzvvvACEAgAAgIbavXu3ho8YoUOlpXXWi42L08YNG1iQBAAAQKPweTESAAAAoaegoECHSks1YdYCpWZle6yzd+tmLb73euXl5bEYCQAAgEbBYiQAAEAzkpqVrYxe/Rs7DAAAAMAjbvII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ffv21ejRo3X66adr/Pjx5lWF3tiyZYsqKys1bNgwsywyMlJDhgzRhg0bJEnr1q3TiBEjzIVIZ3v37tWuXbv8cm/SwYMHu5W57pPvv/9en376qWVB12HLli06dOiQKioqdPzxx5vlycnJ6tq9+1HHBwBo/lKzspXRq39jhwEAAAAElc9P0542bZpWrFihd999VwUFBSooKNA777yjFStW6LbbbgtEjE2b070OPQrQ062lmsXH7t27m/+1b9/e8povwsPDtWzZMi1dulS9e/fWvHnzdMwxx2jr1q1+jTk2NrZBr0lSWFhNOhuGYZZVVlZ6rOup/a5lxcXFOvvss7Vu3TrLf5s3b9aJJ55YZywAAAAAAABw5/Ni5Jtvvqnnn39eZ555ppKSkpSUlKSzzjpLzz33nJYsWRKIGJu2bt3qfj1ErqLr1auXVq1aZVnIW7lypRITE9WxY0dJks1m07BhwzRz5kx99913ioqK0ttvvy1JioqKUnV1dZ2/o1u3boqKirLc47GyslJr1qxR7969JUn9+vXT//t//8/jImJiYqIyMzO1fPlyj9t33Cpg9+7dZpnzw2x8NXDgQP3888/KzMy0LOp2795d8fHx6tatmyIjI7V69WrzPUVFRdpa3wI0AAAAAABAC+Xz17RLS0uVlpbmVp6amqrSem7E3iL16FHzsJqPP675arZDeLg0alTAvqLtqxtuuEFz587VjTfeqKlTp2rTpk164IEHNG3aNIWFhWn16tVavny5Tj/9dKWmpmr16tXat2+fevXqJUnKzMzUhx9+qE2bNqlt27ZKTk52+6p1fHy8rr/+ek2fPl1t2rRR586dNWfOHJWWlurqq6+WJE2dOlXz5s3TxIkTdffddys5OVlfffWVhgwZomOOOUYzZszQddddp9TUVJ155pk6ePCgVq5cqRtvvFGxsbE64YQT9OijjyorK0t79+7Vvffe2+B9MmXKFD333HO6+OKLdccdd6hNmzb69ddf9dprr+lf//qXEhISdPXVV2v69Olq27atEhISNHPmTIXZfF7j97ucnBzLU789SUlJUefOnYMUEQAgFHG+QGMg7wAAaNl8XowcOnSoHnjgAS1atEgxMTGSpEOHDmnmzJkaOnSo3wNsFv7zn5qH1TjfO3LUqJryEJGRkaH3339f06dPV//+/dWmTRtdffXV5mJeUlKSPv/8c82dO1dFRUXq0qWLnnjiCfNBNNdcc40+++wzDR48WMXFxfr00081cuRIt9/z6KOPym636/LLL9fBgwc1ePBgffjhh+a9J9u2batPPvlE06dP10knnaTw8HANGDDAvM/kpEmTVFZWpieffFK33367UlJSNH78eHP7L7zwgq6++moNGjRIxxxzjObMmaPTTz+9QfukQ4cOWrlype68806dfvrpKi8vV5cuXXTGGWeYXwn/61//an6dOyEhQRMnTlRFlb1Bv89fdu/ereEjRnj1lNaNGzYw0QeAFsqXp3pzvoC/kHcAAMDnxci5c+fqjDPOUMeOHdW/f81N17///nvFxMToQ08PaoHUunXNU7M3b665R2T37gG/IvLFF1+s9bXPPvvMY/lJJ52kr7/+2uNrvXr10gd1PPm7Xbt2+uijj+qNKyYmRk899ZSeeuqpWuv069evzly69tprde2119Ya55dffmkpc/7q+ciRIy0/O9S2T7Kzs/XWW2/VGktCQoL+/e9/69///rdKSkq0YcMG3Xb/Q4qs5/6WgVRQUOD1U1rz8vKY5ANAC+XLU705X8BfyDsAAODzYmTfvn21efNmvfLKK9q4caMk6eKLL9all15a7wNGWrzs7JD5WjaaP57SCgDwBucLNAbyDgCAlsunxcjKykr17NlT7733nq655ppAxQQAAAAAAACgGfJpMTIyMlJlZWWBigUAEGJ4yAAAAACaGuawQGjz+WvaU6ZM0WOPPaZ//etfiojw+e0AgCaChyEBAACgqWEOC4Q+n1cT16xZo+XLl+ujjz5S3759FR8fb3m9rod9AACaDh6GBAAAgKaGOSwQ+nxejGzVqpUuuOCCQMQS0jw9gRnwnUEuocnhIQMAAABoapjDAqHL58XIhQsXBiKOkBUZGSmbzaZ9+/apXbt2stlsjR0SQlR5ebkkqaqiQgrzkCeGodKiQhUWFio1NTXI0QEAAAAAADS+Bt/0ce/evdq0aZMk6Zhjjmm2iyvh4eHq2LGjduzYoW3btjV2OAhhFRUVysvLU7nCFR4Z6bFOcekhPfzww3rppZeCHB0AAAAAAEDj83kxsqioSFOmTNFrr72m6upqSTULdhdddJHmz5+v5ORkvwfZ2BISEpSdna3KysrGDgUh7Oeff9Z1112nyx5fqNSuPT3W2bptvX766acgRwYAAAAAgH9589Ry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
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think that the implementation works as expected, but the tutorial is wrong.

I think it could be updated along the lines of

# With check_args=True: Error not raised until compute()
try:
    result = relative_economic_value(fcst_bad, obs_good, [0.5], check_args=True)
except ValueError as e:
    print(f"error point A")

# With check_args=True: Catches the error once compute() is called
try:
    result.compute()
except ValueError as e:
    print(f"error point B")

And then it should only print ("error point B").

There's probably a better way of demonstrating it, but I think that gives you an idea of the issue.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your updated version looks good. However I think that you need to re-run the notebook as the output doesn't exactly match your latest code!

},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABSMAAAGJCAYAAABxfiYnAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAAkl1JREFUeJzs3Wl4FFX69/FfZ9/DEpJAWBIgCMgmMCgDKCqKCm6IiCuo47iAG4rLuIGiKKMjIzLoOIoy6iiijqN/UREVHxERRdxYRATDGgghCUnI2vW8CF10dXeS7tDd6STfz3V5SU6frtynzl2nTp9UV9kMwzAEAAAAAAAAAAEW1tgBAAAAAAAAAGgZWIwEAAAAAAAAEBQsRgIAAAAAAAAIChYjAQAAAAAAAAQFi5EAAAAAAAAAgoLFSAAAAAAAAABBwWIkAAAAAAAAgKBgMRIAAAAAAABAULAYCQAAAAAAACAoWIwEAABoIbZt2yabzabHH3/cb9ucMWOGbDab8vLy6q2bmZmpyZMnmz9/9tlnstls+uyzz8yyyZMnKzMz02/xhQLXdvtLIPqzqWiOeQIAQEvBYiQAACHuxRdflM1m8/jfXXfdFbQ4/vGPf+jFF1/0un5tMaenpwcuyBCxfv16zZgxQ9u2bfOqvmNBz/FfXFycevfurXvvvVdFRUWBDTbElZaWasaMGZYFy+aspKREDz30kPr166e4uDglJydrxIgRWrRokQzDaOzwmpyRI0fWOhb17NmzscOT5PvYCgBAUxfR2AEAAADvPPjgg8rKyrKU9enTJ2i//x//+IdSUlJ8usLrtNNO0xVXXGEpi42N9XNkoWf9+vWaOXOmRo4c6dPVWwsWLFBCQoKKi4v10Ucf6eGHH9Ynn3yilStXymazBS7gINm0aZPCwur+W/hzzz0nu91u/lxaWqqZM2dKqllYas5yc3N16qmnasOGDZo4caKmTp2qsrIyvfnmm5o0aZLef/99vfLKKwoPD2/sUJuUjh07avbs2W7lycnJjRCNu4aMrQAANGUsRgIA0ESceeaZGjx4sFd1y8rKFBUVVe/CT6D16NFDl112md+3W1VVJbvdrqioKL9vuzGNHz9eKSkpkqTrrrtOF1xwgd566y199dVXGjp0qMf3lJaWKi4uLphhNlh0dHS9dSIjI4MQSWiaNGmSNmzYoLffflvnnHOOWX7TTTdp+vTpevzxx3XcccfpzjvvbMQoPSspKVF8fHxjh+FRcnJyQMYhAADQMHxNGwCAJs5x373XXntN9957rzIyMhQXF2d+vfeNN97QoEGDFBsbq5SUFF122WXauXOnZRt79uzRlVdeqY4dOyo6Olrt27fXueeea37NODMzUz///LNWrFhhfsXRH1ep7d27V1dffbXS0tIUExOj/v3766WXXrLUcb4v3ty5c9WtWzdFR0dr/fr1kqSNGzdq/PjxatOmjWJiYjR48GD973//c/tdBQUFuvXWW5WZmano6Gh17NhRV1xxhXmvw4qKCt1///0aNGiQkpOTFR8frxEjRujTTz9129Zrr72mQYMGKTExUUlJSerbt6/+/ve/S6r5Wv2FF14oSTr55JPN/dWQrxmfcsopkqStW7dKqrkysE+fPvr222914oknKi4uTn/5y1+83pfOnnzySXXp0kWxsbE66aST9NNPP1le/+GHHzR58mR17dpVMTExSk9P11VXXaX9+/d73F5eXp4mTJigpKQktW3bVjfffLPKysosdby5d6LzvQC3bdumdu3aSZJmzpxp7ssZM2Zo4cKFstls+u6779y28cgjjyg8PNwtz539/vvvuuGGG3TMMccoNjZWbdu21YUXXuj21XrHbRJWrlypadOmqV27doqPj9f555+vffv2WeoahqFZs2apY8eOiouL08knn6yff/65zvY6fPXVV/rwww81efJky0Kkw+zZs5Wdna3HHntMhw4dcnu9vv6s7xh3WLp0qUaMGKH4+HglJiZqzJgxbm2YPHmyEhIStGXLFp111llKTEzUpZdeqqlTpyohIUGlpaVu8V188cVKT09XdXW1T79Lkv773/+qT58+iomJUZ8+ffT222/XuS99tWTJEtlsNq1YscLttWeffVY2m82yP70Zc7zNm7rG1srKSs2cOVPZ2dmKiYlR27ZtNXz4cC1btsyv7QcAINi4MhIAgCaisLDQ7SEhjqvoJOmhhx5SVFSUbr/9dpWXlysqKkovvviirrzySv3hD3/Q7NmzlZubq7///e9auXKlvvvuO7Vq1UqSdMEFF+jnn3/WjTfeqMzMTO3du1fLli1TTk6OMjMzNXfuXN14441KSEjQPffcI0lKS0urN+aysjK3mBMTExUdHa1Dhw5p5MiR+vXXXzV16lRlZWXpjTfe0OTJk1VQUKCbb77Z8r6FCxeqrKxMf/7znxUdHa02bdro559/1rBhw5SRkaG77rpL8fHxWrx4sc477zy9+eabOv/88yVJxcXFGjFihDZs2KCrrrpKAwcOVF5env73v/9px44dSklJUVFRkf71r3/p4osv1jXXXKODBw/q+eef1+jRo/X1119rwIABkqRly5bp4osv1qmnnqrHHntMkrRhwwatXLlSN998s0488UTddNNNeuqpp/SXv/xFvXr1kiTz/77YsmWLJKlt27Zm2f79+3XmmWdq4sSJuuyyy5SWlubzvly0aJEOHjyoKVOmqKysTH//+991yimn6McffzT7ddmyZfrtt9905ZVXKj09XT///LP++c9/6ueff9ZXX33l9rXxCRMmKDMzU7Nnz9ZXX32lp556SgcOHNCiRYt8brdDu3bttGDBAl1//fU6//zzNW7cOElSv379lJWVpSlTpuiVV17RcccdZ3nfK6+8opEjRyojI6PWba9Zs0ZffvmlJk6cqI4dO2rbtm1asGCBRo4cqfXr17tdbXrjjTeqdevWeuCBB7Rt2zbNnTtXU6dO1euvv27Wuf/++zVr1iydddZZOuuss7R27VqdfvrpqqioqLet7777riS53dbAISIiQpdccolmzpyplStXatSoUeZr3vRnfce4JP373//WpEmTNHr0aD322GMqLS3VggULNHz4cH333XeWWw5UVVVp9OjRGj58uB5//HHFxcUpMzNT8+fP1//93/+ZC/JSzdW77777riZPnmx+xdzb3/XRRx/pggsuUO/evTV79mzt37/fXFT1VnV1tccHLMXGxio+Pl5jxoxRQkKCFi9erJNOOslS5/XXX9exxx5r3hLD2zHHob68qWtsnTFjhmbPnq0//elPGjJkiIqKivTNN99o7dq1Ou2007xuPwAAIccAAAAhbeHChYYkj/8ZhmF8+umnhiSja9euRmlpqfm+iooKIzU11ejTp49x6NAhs/y9994zJBn333+/YRiGceDAAUOS8de//rXOOI499ljjpJNO8jru2mJeuHChYRiGMXfuXEOS8fLLL1tiHjp0qJGQkGAUFRUZhmEYW7duNSQZSUlJxt69ey2/49RTTzX69u1rlJWVmWV2u9344x//aGRnZ5tl999/vyHJeOutt9zitNvthmEYRlVVlVFeXm557cCBA0ZaWppx1VVXmWU333yzkZSUZFRVVdXa9jfeeMOQZHz66af17KUaDzzwgCHJ2LRpk7Fv3z5j69atxrPPPmtER0cbaWlpRklJiWEYhnHSSScZkoxnnnnG8n5f92VsbKyxY8cOs+7q1asNScatt95qljnnksN//vMfQ5Lx+eefu8V+zjnnWOrecMMNhiTj+++/N8u6dOliTJo0yfzZkbvO+2nSpElGly5dzJ/37dtnSDIeeOABt3guvvhio0OHDkZ1dbVZtnbtWkue1cZT+1atWmVIMhYtWmSWOY6/UaNGmbliGIZx6623GuHh4UZBQYFhGIaxd+9eIyoqyhgzZoyl3l/+8hdDkqXdnpx33nmGJOPAgQO11nnrrbcMScZTTz1lGIb3/enNMX7w4EGjVatWxjXXXGMp37Nnj5GcnGwpnzRpkiHJuOuuuyx17Xa7kZGRYVxwwQWW8sWLF1vyxpffNWDAAKN9+/bmfjYMw/joo48MSZY8qY3jmPH037XXXmvWu/jii43U1FTLcb17924jLCzMePDBB80yb8ccb/PGMGofW/v372+MGTOm3jYCANDU8DVtAACaiPnz52vZsmWW/5xNmjTJ8nCYb775Rnv37tUNN9ygmJgYs3zMmDHq2bOn/u///k9SzdVBUVFR+uyzz3TgwAG/xnzuuee6xTx69GhJ0vvvv6/09HRdfPHFZv3IyEjddNNNKi4udvvK5AUXXGB+ZVeS8vPz9cknn2jChAk6ePCg8vLylJeXp/3792v06NHavHmz+TXdN998U/3793e7akmSeYVfeHi4eQ9Ku92u/Px8VVVVafDgwVq7dq1Zv1WrViopKQnIVyWPOeYYtWvXTllZWbr22mvVvXt3/d///Z/lKr3o6GhdeeWVlvf5ui/PO+88y1WDQ4YM0fHHH6/333/fLHPOJccVrieccIIkWfaHw5QpUyw/33jjjWZsgXLFFVdo165dlq/Sv/LKK4qNjdUFF1xQ53ud21dZWan9+/ere/fuatWqlcf2/fnPf7ZcDTpixAhVV1fr999/lyR9/PHHqqio0I033mipd8stt3jVloMHD0qquXK4No7XXJ+wXl9/enOML1u2TAUFBbr44ovNYykvL0/h4eE6/vjjPd6u4Prrr7f8bLPZdOGFF+r9999XcXGxWf76668rIyNDw4cP9+l37d69W+vWrdOkSZMsD5s57bTT1Lt371r3k6vMzEy3cWjZsmWWvrnooou0d+9ey+0UlixZIrvdrosuukiSb2OOQ315U5dWrVrp559/1ubNm71uKwAATQFf0wYAoIkYMmRInQ+wcX3StuPD7jHHHONWt2fPnvriiy8k1SxuPfbYY7rtttuUlpamE044QWPHjtUVV1yh9PT0o4q5Y8eOlq+TusaXnZ3t9pAdx9eZXT+su7bv119/lWEYuu+++3Tfffd5/B179+5VRkaGtmzZUu/ilCS99NJLeuKJJ7Rx40ZVVlZ6/N033HCDFi9erDPPPFMZGRk6/fTTNWHCBJ1xxhn1br8+b775ppKSkhQZGamOHTuqW7dubnUyMjLcHtzj677Mzs52226PHj20ePFi8+f8/HzNnDlTr732mvbu3WupW1hY6PZ+121269ZNYWFhbvck9KfTTjtN7du31yuvvKJTTz1Vdrtd//nPf3TuuefWuagnSYcOHdLs2bO1cOFC7dy5U4ZhmK95al/nzp0tP7du3VqSzMU9xz523Q/t2rUz69bFEe/BgwfN2ye4qm3Bsr7+9OYYdyx4Oe5T6iopKcnyc0REhMevSl900UWaO3eu/ve//+mSSy5RcXGx3n//fV177bXmopy3v6u2fSrVjGueFo09iY+Pr3UccjjjjDOUnJys119/XaeeeqqkmkXUAQMGqEePHpJ8G3Mc6subujz44IM699xz1aNHD/Xp00dnnHGGLr/8cvXr16/e9wIAEMpYjAQAoJlwvtLLV7fccovOPvts/fe//9WHH36o++67T7Nnz9Ynn3zidj++xuLaPrvdLkm6/fbbzastXXXv3t3r7b/88suaPHmyzjvvPE2fPl2pqakKDw/X7NmzzXs3SlJqaqrWrVunDz/8UEuXLtXSpUu1cOFCXXHFFXU+MMYbJ554ouU+oJ4cTT/7YsKECfryyy81ffp0DRgwQAkJCbLb7TrjjDPMfV8X13tKBkJ4eLguueQSPffcc/rHP/6hlStXateuXV49OfnGG2/UwoULdcstt2jo0KFKTk6WzWbTxIkTPbbPca9DV86LmEejV69e+u9//6sffvhBJ554osc6P/zwgyT5dFWgQ33HuKPN//73vz3+ESIiwvqxITo62m3xW5JOOOEEZWZmavHixbrkkkv07rvv6tChQ+bVhZJ8/l3BEB0drfPOO09vv/22/vGPfyg3N1crV67UI488YtZpyJhzNHlz4oknasuWLXrnnXf00Ucf6V//+peefPJJPfPMM/rTn/7kbdMAAAg5LEYCANBMdenSRZK0adMmtyuQNm3aZL7u0K1bN91222267bbbtHnzZg0YMEBPPPGEXn75ZUn+X1zq0qWLfvjhB9ntdsuixsaNGy3x16Zr166Sar6OXN9VT926dXN7urCrJUuWqGvXrnrrrbcsbX3ggQfc6kZFRenss8/W2WefLbvdrhtuuEHPPvus7rvvPnXv3j0oC3HOfN2Xnr72+csvv5gPDTlw4ICWL1+umTNn6v7776/zfc6vOV9B+uuvv8put1seetIQ9e3LK664Qk888YTeffddLV26VO3atat1ocjZkiVLNGnSJD3xxBNmWVlZmQoKChoUp2Mfb9682cxNSdq3b59XV8GNHTtWs2fP1qJFizwuRlZXV+vVV19V69atNWzYMMtr9fWnQ13HuOMq3NTU1HqPp/pMmDBBf//731VUVKTXX39dmZmZ5lf8HXF487uc96mrTZs2HVWMnlx00UV66aWXtHz5cm3YsEGGYVgWUX0Zc3xRV463adNGV155pa688koVFxfrxBNP1IwZM1iMBAA0adwzEgCAZmrw4MFKTU3VM888o/LycrN86dKl2rBhg8aMGSOp5km3ZWVllvd269ZNiYmJlvfFx8c3eKHGk7POOkt79uyxPI24qqpK8+bNU0JCgttTbV2lpqZq5MiRevbZZ7V792631/ft22f++4ILLtD333+vt99+262e4wolxxVMzlcsrV69WqtWrbLU379/v+XnsLAw82uTjv0VHx8vSX7dX3XxdV/+97//tdzb7uuvv9bq1at15plnSvK8L6SaJ//WZv78+Zaf582bJ0nmNhvKcb/M2vZlv3791K9fP/3rX//Sm2++qYkTJ3p1ZV14eLhb++bNm6fq6uoGxTlq1ChFRkZq3rx5lu3Wtc+c/fGPf9SoUaO0cOFCvffee26v33PPPfrll190xx13uF0dW19/enOMjx49WklJSXrkkUcstyhwcD6e6nPRRRepvLxcL730kj744ANNmDDB8rq3v6t9+/YaMGCAXnrpJctX55ctW6b169d7HY+3Ro0apTZt2uj111/X66+/riFDhlgW2H0Zc3xR29jqOtYkJCSoe/fulnEZAICmiCsjAQBopiIjI/XYY4/pyiuv1EknnaSLL75Yubm5+vvf/67MzEzdeuutkmquoDr11FM1YcIE9e7dWxEREXr77beVm5uriRMnmtsbNGiQFixYoFmzZql79+5KTU2t9Z5v3vjzn/+sZ599VpMnT9a3336rzMxMLVmyRCtXrtTcuXPrveefVLMANnz4cPXt21fXXHONunbtqtzcXK1atUo7duzQ999/L0maPn26lixZogsvvFBXXXWVBg0apPz8fP3vf//TM888o/79+2vs2LF66623dP7552vMmDHaunWrnnnmGfXu3dvyMI4//elPys/P1ymnnKKOHTvq999/17x58zRgwADzHo0DBgxQeHi4HnvsMRUWFio6OlqnnHKKUlNTG7y//Lkvu3fvruHDh+v6669XeXm55s6dq7Zt2+qOO+6QVHPPvhNPPFFz5sxRZWWlMjIy9NFHH2nr1q21xrB161adc845OuOMM7Rq1Sq9/PLLuuSSS9S/f/+jaltsbKx69+6t119/XT169FCbNm3Up08f9enTx6xzxRVX6Pbbb5ckr76iLdVcifjvf/9bycnJ6t27t1atWqWPP/5Ybdu2bVCc7dq10+23367Zs2dr7NixOuuss/Tdd99p6dKl9X713mHRokU69dRTde655+qSSy7RiBEjVF5errfeekufffaZLrroIk2fPt3tffX1pzfHeFJSkhYsWKDLL79cAwcO1MSJE9WuXTvl5OTo//7v/zRs2DA9/fTTXrVj4MCB6t69u+655x6Vl5dbri709XfNnj1bY8aM0fDhw3XVVVcpPz9f8+bN07HHHms5LutSWFhoXuHtyjlfIiMjNW7cOL322msqKSnR448/7lbf2zHHF7WNrb1799bIkSM1aNAgtWnTRt98842WLFmiqVOn+vw7AAAIKY30FG8AAOClhQsXGpKMNWvWeHz9008/NSQZb7zxhsfXX3/9deO4444zoqOjjTZt2hiXXnqpsWPHDvP1vLw8Y8qUKUbPnj2N+Ph4Izk52Tj++OONxYsXW7azZ88eY8yYMUZiYqIhyTjppJPqjFuSMWXKlDrr5ObmGldeeaWRkpJiREVFGX379jUWLlxoqbN161ZDkvHXv/7V4za2bNliXHHFFUZ6eroRGRlpZGRkGGPHjjWWLFliqbd//35j6tSpRkZGhhEVFWV07NjRmDRpkpGXl2cYhmHY7XbjkUceMbp06WJER0cbxx13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7KmpU6YoOTk55NvUHPupubXJMXbs2L5dn332Wa25N3z4cD3++ONKTk4O+TYFq5/Cw8PVf8AAnXXmmYqMjDTLly5dqpKSEo0fP16SFBEZqalTpmjw4MEh3ybnfjpw4ICenj9fVZWVbm1yWLJkieLj43X2OeeY41Iot6m55B5tok3NqU2+zGH/MX++eR4K5TY591NERITOPOss9e/Xz61NzufciMhI3TF9uvr27RvybWouuUebaFNLa5O3z3AJ2a9pf/nllxo2bJh27dql9u3bm/UmTJggm82m119/XY888oheeuklbdq0ybKt1NRUzZw5U9dff73H3+XpykhHJzguI2WFmzbRJvc2rVu3TieccILGz5ynlMxsSYZsssrd+quW3D9FixYt0uTJkzV+5jy1y+wuQzbZZB1u9m79Va/fe72++eYbDRgwoFHa5NCc+qmuNjn6cNyMeUrL6i5Xhmzat3Wz3pxxo7766isNGDAg5NvkXN5c+qm5tcl17HAdC6SasePNB6Zq9erV5ngQym1yLQ9UP61bt06DBw/WxIcXqF3mkWPWUcMmad+2X7XkgZpjduDAgSHfJud+suZGd7NNzgzVnC/echqXQrlNzppy7tEm2tSc2uTLHPbrr7+u9zwUCm1yjmXdunX6wx/+oAkPzXc5VxyZfzufKwYNGhTybWouuUebaFNLa1NRUZHatGnTdL+mnZ6eLknKzc21LEbm5uaaJ4f09HTt3bvX8r6qqirl5+eb7/ckOjpa0dHRbuXh4eEKDw+3lDk62ZWv5a7bbUi5zWbzqdxfsdMm2uSI3WazqaqqSimZ2cro1d/j+w3ZzEHOUbdDHXWdt++KfvJ/mxx9mJpVe79INX3nur1QbZM3sTS1fjqaGEOxTd6OHdXV1R63FYpt8jaWoy232WrGyfrGUscx66gfym1y8DY3DkfpcVwKxTYdbTltok0NKadN/pvD+uM81Bj9ZLfbvT5XNCR2co820Sba5E15bbG61feqViPIyspSenq6li9fbpYVFRVp9erVGjp0qCRp6NChKigo0LfffmvW+eSTT2S323X88ccHPWYAAAAAAAAAtWvUKyOLi4v166+/mj9v3bpV69atU5s2bdS5c2fdcsstmjVrlrKzs5WVlaX77rtPHTp0ML/K3atXL51xxhm65ppr9Mwzz6iyslJTp07VxIkTvX6SNgAA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Xdvh2Gxhlmm++WHax33jHIdhO1LHOZb6tl1bud1ud9uuc1sN1fxum61m+9XV1bXUr2mra/3Gzj3HvnNukyvnmJ2358/cs+TS4X3jMRbD8Niu5nA8eVvuGovNaX+55Z10OPeO9KG3uXckN2y15oZqyY362uTt2OGYgLnmhuvYoXqO71DoJ3+V19ffruOSo34ot8nBl7GgobkXqNhDaYyo/bzl23kolNrUkP7wlEt1jR2S+1jjnns2n89DLSn3mlKbfJnDempvKLbJla9z2KbQplCcw3pb3lSPJ5utZtzzJZcC0SbH4lbND65jeY3a+rsl9FNd5Y3dptpidavvVS3VfBXqmGOOkSR169ZNpaWlltevueYaffXVV95uziulpaVuDQ0PDzeTMisrS+np6Vq+fLn5elFRkVavXq2hQ4f6NRYAAAAAAAAAR8frKyMnTZqkMWPGaOTIkfrmm290+eWXu9VJTU31a3Bnn322Hn74YXXu3FnHHnusvvvuO/3tb3/TVVddJalmZfeWW27RrFmzlJ2draysLN13333q0KGDzjvvPL/GAgAAAAAAAODoeL0Y+be//U0nn3yyNm7cqMmTJ+v0008PZFySpHnz5um+++7TDTfcoL1796pDhw669tprdf/995t17rjjDpWUlOjPf/6zCgoKNHz4cH3wwQeKiYkJeHwAAAAAAAAAvOfT07TPPvtsnX322YGKxU1iYqLmzp2ruXPn1lrHZrPpwQcf1IMPPhi0uAAAAAAAAAD4zqt7Rr722mteb3D79u1auXJlgwMCAAAAAAAA0Dx5tRi5YMEC9erVS3PmzNGGDRvcXi8sLNT777+vSy65RAMHDtT+/fv9HigAAAAAAACAps2rr2mvWLFC//vf/zRv3jzdfffdio+PV1pammJiYnTgwAHt2bNHKSkpmjx5sn766SelpaUFOm4AAAAAAAAATYzX94w855xzdM455ygvL09ffPGFfv/9dx06dEgpKSk67rjjdNxxxykszKsLLQEAABAAOTk5ysvLq7NOSkqKOnfuHKSIAAAAACufHmAj1UxgzzvvvACEAgAAgIbavXu3ho8YoUOlpXXWi42L08YNG1iQBAAAQKPweTESAAAAoaegoECHSks1YdYCpWZle6yzd+tmLb73euXl5bEYCQAAgEbBYiQAAEAzkpqVrYxe/Rs7DAAAAMAjbvII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ffv21ejRo3X66adr/Pjx5lWF3tiyZYsqKys1bNgwsywyMlJDhgzRhg0bJEnr1q3TiBEjzIVIZ3v37tWuXbv8cm/SwYMHu5W57pPvv/9en376qWVB12HLli06dOiQKioqdPzxx5vlycnJ6tq9+1HHBwBo/lKzspXRq39jhwEAAAAElc9P0542bZpWrFihd999VwUFBSooKNA777yjFStW6LbbbgtEjE2b070OPQrQ062lmsXH7t27m/+1b9/e8povwsPDtWzZMi1dulS9e/fWvHnzdMwxx2jr1q1+jTk2NrZBr0lSWFhNOhuGYZZVVlZ6rOup/a5lxcXFOvvss7Vu3TrLf5s3b9aJJ55YZywAAAAAAABw5/Ni5Jtvvqnnn39eZ555ppKSkpSUlKSzzjpLzz33nJYsWRKIGJu2bt3qfj1ErqLr1auXVq1aZVnIW7lypRITE9WxY0dJks1m07BhwzRz5kx99913ioqK0ttvvy1JioqKUnV1dZ2/o1u3boqKirLc47GyslJr1qxR7969JUn9+vXT//t//8/jImJiYqIyMzO1fPlyj9t33Cpg9+7dZpnzw2x8NXDgQP3888/KzMy0LOp2795d8fHx6tatmyIjI7V69WrzPUVFRdpa3wI0AAAAAABAC+Xz17RLS0uVlpbmVp6amqrSem7E3iL16FHzsJqPP675arZDeLg0alTAvqLtqxtuuEFz587VjTfeqKlTp2rTpk164IEHNG3aNIWFhWn16tVavny5Tj/9dKWmpmr16tXat2+fevXqJUnKzMzUhx9+qE2bNqlt27ZKTk52+6p1fHy8rr/+ek2fPl1t2rRR586dNWfOHJWWlurqq6+WJE2dOlXz5s3TxIkTdffddys5OVlfffWVhgwZomOOOUYzZszQddddp9TUVJ155pk6ePCgVq5cqRtvvFGxsbE64YQT9OijjyorK0t79+7Vvffe2+B9MmXKFD333HO6+OKLdccdd6hNmzb69ddf9dprr+lf//qXEhISdPXVV2v69Olq27atEhISNHPmTIXZfF7j97ucnBzLU789SUlJUefOnYMUEQAgFHG+QGMg7wAAaNl8XowcOnSoHnjgAS1atEgxMTGSpEOHDmnmzJkaOnSo3wNsFv7zn5qH1TjfO3LUqJryEJGRkaH3339f06dPV//+/dWmTRtdffXV5mJeUlKSPv/8c82dO1dFRUXq0qWLnnjiCfNBNNdcc40+++wzDR48WMXFxfr00081cuRIt9/z6KOPym636/LLL9fBgwc1ePBgffjhh+a9J9u2batPPvlE06dP10knnaTw8HANGDDAvM/kpEmTVFZWpieffFK33367UlJSNH78eHP7L7zwgq6++moNGjRIxxxzjObMmaPTTz+9QfukQ4cOWrlype68806dfvrpKi8vV5cuXXTGGWeYXwn/61//an6dOyEhQRMnTlRFlb1Bv89fdu/ereEjRnj1lNaNGzYw0QeAFsqXp3pzvoC/kHcAAMDnxci5c+fqjDPOUMeOHdW/f81N17///nvFxMToQ08PaoHUunXNU7M3b665R2T37gG/IvLFF1+s9bXPPvvMY/lJJ52kr7/+2uNrvXr10gd1PPm7Xbt2+uijj+qNKyYmRk899ZSeeuqpWuv069evzly69tprde2119Ya55dffmkpc/7q+ciRIy0/O9S2T7Kzs/XWW2/VGktCQoL+/e9/69///rdKSkq0YcMG3Xb/Q4qs5/6WgVRQUOD1U1rz8vKY5ANAC+XLU705X8BfyDsAAODzYmTfvn21efNmvfLKK9q4caMk6eKLL9all15a7wNGWrzs7JD5WjaaP57SCgDwBucLNAbyDgCAlsunxcjKykr17NlT7733nq655ppAxQQAAAAAAACgGfJpMTIyMlJlZWWBigUAEGJ4yAAAAACaGuawQGjz+WvaU6ZM0WOPPaZ//etfiojw+e0AgCaChyEBAACgqWEOC4Q+n1cT16xZo+XLl+ujjz5S3759FR8fb3m9rod9AACaDh6GBAAAgKaGOSwQ+nxejGzVqpUuuOCCQMQS0jw9gRnwnUEuocnhIQMAAABoapjDAqHL58XIhQsXBiKOkBUZGSmbzaZ9+/apXbt2stlsjR0SQlR5ebkkqaqiQgrzkCeGodKiQhUWFio1NTXI0QEAAAAAADS+Bt/0ce/evdq0aZMk6Zhjjmm2iyvh4eHq2LGjduzYoW3btjV2OAhhFRUVysvLU7nCFR4Z6bFOcekhPfzww3rppZeCHB0AAAAAAEDj83kxsqioSFOmTNFrr72m6upqSTULdhdddJHmz5+v5ORkvwfZ2BISEpSdna3KysrGDgUh7Oeff9Z1112nyx5fqNSuPT3W2bptvX766acgRwYAAAAAgH9589Ry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
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this text needs updating to highlight that this only is called when the computation is triggered.

@nicholasloveday nicholasloveday changed the base branch from main to develop February 3, 2026 22:54
@tennlee tennlee changed the title Issue 632 rev Relative Economic Value implementation Feb 5, 2026
@tennlee tennlee linked an issue Feb 5, 2026 that may be closed by this pull request
return _weighted_mean(values, weights, reduce_dims)
return values.mean(reduce_dims)
result = _weighted_mean(values, weights, reduce_dims)
else:
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This isn't wrong, but why change it? There is no logical difference, so I'm not sure why this is here.

# Add the deferred assertion dependency if it exists
if assertion_graph is not None:
if isinstance(result, xr.DataArray):
result = _add_assertion_dependency(result, assertion_graph)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we get a comment on why this assertion graph is here and why it is needed?

if isinstance(weights, xr.Dataset):
w_results = {}
for name, da in values.data_vars.items():
for name, data in values.data_vars.items():
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why has this variable name changed? If it is for stylistic reasons, it should be in a separate PR since it's not specific to the REV metric. If it is for functional reasons, please let me know.

def _check_dask_array_safety(_da_weights: xr.DataArray):
"""
Checks if a Dask-backed DataArray meets weight criteria, deferring the error
until computation by adding the check as a Dask graph step.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this here? I don't understand the functional requirement for this deferral and fine-grained dask computation management. If it is required, more comments are needed to explain it to a reader (developer) who isn't sure about the dask implementation details.

@tennlee
Copy link
Collaborator

tennlee commented Feb 5, 2026

This PR is very large, with interleaving of multiple concerns. As a result, it is challenging to see the core algorithm, validate its correctness, and separate that from the dask details and other stylistic changes. We may need to approach this score differently. I would propose simplifying the PR to an xarray-only implementation at first (i.e. do not attempt to support dask, throw an exception if it is detective), and remove stylistic changes to unrelated functions and tests. This will focus the first PR on the REV calculation on core supported data types and allow more straightforward validation of the correctness. Any stylistic changes across the codebase can then be dealt with separately, and the dask implementation can also then be handled separately. Merging this as-is will take extensive review and will result in the PR being deferred at least for 4-6 weeks, potentially for longer, and I may take the approach of choosing to split up the PR into iterations in any case. The core REV algorithm methods look reasonable, but in order to confirm (or disconfirm) the presence of side-effects with the dask handling methods and stylistic changes, a careful approach is needed. I hope my comments here seem appropriately constructive. I can see a lot of work went into this, but I want to propose something to simplify the review process, the development process and speed up the PR acceptance.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Relative Economic value

5 participants