diff --git a/examples_artificial_data/04_floris_tuning/develop_ws_est.ipynb b/examples_artificial_data/04_floris_tuning/develop_ws_est.ipynb new file mode 100644 index 00000000..41c4dae2 --- /dev/null +++ b/examples_artificial_data/04_floris_tuning/develop_ws_est.ipynb @@ -0,0 +1,680 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Develop ws estimator\n", + "\n", + "This is likely a temporary example while working out the wins speed estimator method" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from pathlib import Path\n", + "\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import pandas as pd\n", + "import seaborn as sns\n", + "from floris import FlorisModel, TimeSeries\n", + "\n", + "from flasc.utilities.floris_tools import estimate_ws_with_floris" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Load FlorisModel" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "file_path = Path.cwd()\n", + "fm_path = file_path / \"../floris_input_artificial/gch.yaml\"\n", + "fm = FlorisModel(fm_path)\n", + "\n", + "# Set to 1 turbine layout\n", + "fm.set(layout_x=[0], layout_y=[0])" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# Set to\n", + "N = 25\n", + "wind_speeds = np.linspace(0.01, 20.0, N)\n", + "time_series = TimeSeries(\n", + " wind_speeds=wind_speeds, wind_directions=270.0, turbulence_intensities=0.06\n", + ")\n", + "\n", + "fm.set(wind_data=time_series)\n", + "\n", + "fm.run()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
timepow_000ws_000
000.0000001.010000
110.0000001.842917
220.0000002.675833
330.0000003.508750
4485.8712844.341667
55214.0610515.174583
66401.8713706.007500
77677.9275126.840417
881030.4431917.673333
991450.1084888.506250
10102004.1540849.339167
11112650.50864410.172083
12123422.43085511.005000
13134328.81309911.837917
14145000.00000012.670833
15155000.00000013.503750
16165000.00000014.336667
17175000.00000015.169583
18185000.00000016.002500
19195000.00000016.835417
20205000.00000017.668333
21215000.00000018.501250
22225000.00000019.334167
23235000.00000020.167083
24245000.00000021.000000
\n", + "
" + ], + "text/plain": [ + " time pow_000 ws_000\n", + "0 0 0.000000 1.010000\n", + "1 1 0.000000 1.842917\n", + "2 2 0.000000 2.675833\n", + "3 3 0.000000 3.508750\n", + "4 4 85.871284 4.341667\n", + "5 5 214.061051 5.174583\n", + "6 6 401.871370 6.007500\n", + "7 7 677.927512 6.840417\n", + "8 8 1030.443191 7.673333\n", + "9 9 1450.108488 8.506250\n", + "10 10 2004.154084 9.339167\n", + "11 11 2650.508644 10.172083\n", + "12 12 3422.430855 11.005000\n", + "13 13 4328.813099 11.837917\n", + "14 14 5000.000000 12.670833\n", + "15 15 5000.000000 13.503750\n", + "16 16 5000.000000 14.336667\n", + "17 17 5000.000000 15.169583\n", + "18 18 5000.000000 16.002500\n", + "19 19 5000.000000 16.835417\n", + "20 20 5000.000000 17.668333\n", + "21 21 5000.000000 18.501250\n", + "22 22 5000.000000 19.334167\n", + "23 23 5000.000000 20.167083\n", + "24 24 5000.000000 21.000000" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Make a df_scada from the data\n", + "df_scada = pd.DataFrame(\n", + " {\n", + " \"time\": np.arange(0, N),\n", + " \"pow_000\": fm.get_turbine_powers().squeeze() / 1000.0,\n", + " \"ws_000\": wind_speeds + 1.0, # Add 1m/s bias\n", + " }\n", + ")\n", + "df_scada" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
timepow_000ws_000ws_est_000ws_est_gain_000
000.0000001.0100001.3709880.190999
110.0000001.8429172.2113210.348510
220.0000002.6758332.7892660.506021
330.0000003.5087503.1048250.663532
4485.8712844.3416673.5115990.821043
55214.0610515.1745834.1825930.978554
66401.8713706.0075004.9910291.000000
77677.9275126.8404175.8212061.000000
881030.4431917.6733336.6513831.000000
991450.1084888.5062507.4815601.000000
10102004.1540849.3391678.3117371.000000
11112650.50864410.1720839.1419141.000000
12123422.43085511.00500010.0908220.885052
13134328.81309911.83791711.8379170.000000
14145000.00000012.67083312.6708330.000000
15155000.00000013.50375013.5037500.000000
16165000.00000014.33666714.3366670.000000
17175000.00000015.16958315.1695830.000000
18185000.00000016.00250016.0025000.000000
19195000.00000016.83541716.8354170.000000
20205000.00000017.66833317.6683330.000000
21215000.00000018.50125018.5012500.000000
22225000.00000019.33416719.3341670.000000
23235000.00000020.16708320.1670830.000000
24245000.00000021.00000021.0000000.000000
\n", + "
" + ], + "text/plain": [ + " time pow_000 ws_000 ws_est_000 ws_est_gain_000\n", + "0 0 0.000000 1.010000 1.370988 0.190999\n", + "1 1 0.000000 1.842917 2.211321 0.348510\n", + "2 2 0.000000 2.675833 2.789266 0.506021\n", + "3 3 0.000000 3.508750 3.104825 0.663532\n", + "4 4 85.871284 4.341667 3.511599 0.821043\n", + "5 5 214.061051 5.174583 4.182593 0.978554\n", + "6 6 401.871370 6.007500 4.991029 1.000000\n", + "7 7 677.927512 6.840417 5.821206 1.000000\n", + "8 8 1030.443191 7.673333 6.651383 1.000000\n", + "9 9 1450.108488 8.506250 7.481560 1.000000\n", + "10 10 2004.154084 9.339167 8.311737 1.000000\n", + "11 11 2650.508644 10.172083 9.141914 1.000000\n", + "12 12 3422.430855 11.005000 10.090822 0.885052\n", + "13 13 4328.813099 11.837917 11.837917 0.000000\n", + "14 14 5000.000000 12.670833 12.670833 0.000000\n", + "15 15 5000.000000 13.503750 13.503750 0.000000\n", + "16 16 5000.000000 14.336667 14.336667 0.000000\n", + "17 17 5000.000000 15.169583 15.169583 0.000000\n", + "18 18 5000.000000 16.002500 16.002500 0.000000\n", + "19 19 5000.000000 16.835417 16.835417 0.000000\n", + "20 20 5000.000000 17.668333 17.668333 0.000000\n", + "21 21 5000.000000 18.501250 18.501250 0.000000\n", + "22 22 5000.000000 19.334167 19.334167 0.000000\n", + "23 23 5000.000000 20.167083 20.167083 0.000000\n", + "24 24 5000.000000 21.000000 21.000000 0.000000" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_scada = estimate_ws_with_floris(df_scada, fm)\n", + "df_scada" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Calculate power with wind speed and estimated wind speed" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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vXHjxg189tlnOHDgAA4cOAAAVk0Z0b59e6hUKuzevRs7d+5EREQEAOCJJ57AX3/9hT/++ANJSUno3LlzkW1r166N2NhYfPzxxzhx4gR0Oh2WLVv2MKdKREQOjAHKCbgoZMjKtW7CsGydHi6KsglQ1atXR7du3bB06VLk5uaarcvMzMTatWvRv39/q57p17BhQxw6dMhs2cGDBx+pntevX0daWhreeOMNdOnSRbq0aC03Nze0bdsWe/fuxc8//yz1ciqVSoSFheGLL77AhQsXpPFPJfH29oafnx/u3LnzMKdDREQOjAHKCRiMAp5u1t2qqXFVwmDhJT9LfPzxx8jLy0N0dDR+/vlnXLhwAfHx8ejWrRtq1679wLFL9xs5ciROnTqFV199FadPn8b69euxatUqALAqiN3L29sb1atXx/Lly/H7779jx44dZvNzWSMyMhIbN26ETqfD448/Li2PiIjARx99JA02L/Tpp59i9OjR2LZtG86ePYsTJ07g1VdfxYkTJ9C7d++HqgMRETkuBignYBICMSElz0NVnB4hWpisGLP0II899hgOHTqEunXrol+/fqhXrx5efPFFREVFITk5ucQ5oEoSHByMDRs2YOPGjWjevDk++eQT6S684ubUsoRcLse6detw+PBhhISE4OWXX5YGqVsrMjISOTk5aNeundk4uoiICOTk5EjTHRRq06YNbt++jVGjRqFp06aIiIjA/v378cMPP0iXAImIqOKQCWtGBpNFsrOz4enpiaysrGJnIk9PT0dwcLBVs0dn3c1H6HvbLRpIrlTIcOiNblb3WpW39957D8uWLcOFCxfKuyowmUzIzs6GRqOxySSYZeFh30uORK/XY/PmzXjyySc58aANsZ3tg+1sH7Zs59I+v+/nmJ8MVIRaqcDkaMseafNqTCOobfxYl7KwdOlSHDx4EH/88Qe+/PJLzJs3D4MHDy7vahERET2Q08wDVdm5KhWIaxcEmaxgnqfieqKUChmmxDTCoPAgmz8XryycOXMG7777Lm7cuIGAgABMmjQJ06ZNK+9qERERPRADlBNRucgRGxaIfq3r4Mv957AlJRPZOj00rkr0CNEi9u9n4TlDeAKAhQsXYuHCheVdDSIiIqsxQDkZlUIGQ14+hncIxoud6sFFIYPBKGASwiYPESYiIqKiGKCckMFggLu7XBrcrHIpm/me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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Calculate with biased measurement\n", + "time_series = TimeSeries(\n", + " wind_speeds=df_scada.ws_000.values, wind_directions=270.0, turbulence_intensities=0.06\n", + ")\n", + "fm.set(wind_data=time_series)\n", + "fm.run()\n", + "power_from_original_ws = fm.get_turbine_powers().squeeze() / 1000.0\n", + "\n", + "# Calculate with estimated wind speed\n", + "time_series = TimeSeries(\n", + " wind_speeds=df_scada.ws_est_000.values, wind_directions=270.0, turbulence_intensities=0.06\n", + ")\n", + "fm.set(wind_data=time_series)\n", + "fm.run()\n", + "power_from_estimated_ws = fm.get_turbine_powers().squeeze() / 1000.0\n", + "\n", + "# Compute the error of each relative to measured power\n", + "original_ws_error = df_scada.pow_000.values - power_from_original_ws\n", + "estimated_ws_error = df_scada.pow_000.values - power_from_estimated_ws\n", + "\n", + "# Plot the error against the measured power\n", + "fig, ax = plt.subplots()\n", + "sns.scatterplot(x=df_scada.pow_000, y=original_ws_error, ax=ax, label=\"Original WS\", s=100)\n", + "sns.scatterplot(x=df_scada.pow_000, y=estimated_ws_error, ax=ax, label=\"Estimated WS\")\n", + "ax.set_xlabel(\"Measured Power [kW]\")\n", + "ax.set_ylabel(\"Error [kW]\")\n", + "ax.set_title(\"Error vs Measured Power\")\n", + "ax.grid(True)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots()\n", + "ax.scatter(df_scada[\"ws_000\"], df_scada[\"ws_est_000\"])\n", + "ax.set_xlabel(\"Original Wind Speed [m/s]\")\n", + "ax.set_ylabel(\"Estimated Wind Speed [m/s]\")\n", + "ax.set_title(\"Estimated Wind Speed vs Original Wind Speed\")\n", + "ax.grid(True)\n", + "plt.show()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.15" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/flasc/utilities/floris_tools.py b/flasc/utilities/floris_tools.py index 37f76a16..ce98281a 100644 --- a/flasc/utilities/floris_tools.py +++ b/flasc/utilities/floris_tools.py @@ -1,16 +1,20 @@ """Utility functions that use FlorisModels.""" +from __future__ import annotations + import copy from time import perf_counter as timerpc +from typing import Union import matplotlib.pyplot as plt import numpy as np import pandas as pd -from floris import TimeSeries, WindTIRose +from floris import FlorisModel, TimeSeries, WindTIRose from floris.utilities import wrap_360 from scipy import interpolate from scipy.stats import norm +from flasc import FlascDataFrame from flasc.logging_manager import LoggingManager from flasc.utilities import utilities as fsut @@ -503,6 +507,88 @@ def add_gaussian_blending_to_floris_approx_table(df_fi_approx, wd_std=3.0, pdf_c return df_fi_approx_gauss +def estimate_ws_with_floris( + df_scada: Union[pd.DataFrame, FlascDataFrame], + fm: FlorisModel, + verbose: bool = False, +) -> Union[pd.DataFrame, FlascDataFrame]: + """Estimate the wind speed at the turbine locations using a FLORIS model. + + This function estimates the wind speed at the turbine locations using a FLORIS model. + The approach follows the example from the RES wind-up method `add_ws_est_one_ttype` + (https://github.com/resgroup/wind-up/blob/main/wind_up/ws_est.py) by Alex Clerc. + However, in this implementation, FLORIS provides the power curves directly rather + than their being learned from data. In this way, the estimated wind speed is + the speed which would cause FLORIS to predict a power matched to the SCADA data. + This will be especially useful in model fitting to avoid any error on un-waked turbines. + + Args: + df_scada (pd.DataFrame | FlascDataFrame): Pandas DataFrame with the SCADA data. + fm (FlorisModel): FLORIS model object. + verbose (bool, optional): Print warnings and information to the console. Defaults to False. + + Returns: + pd.DataFrame | FlascDataFrame: Pandas DataFrame with the estimated wind speed + columns added. + """ + # To allow that turbine types might not be the same, loop over all turbines + for ti in range(fm.n_turbines): + if verbose: + logger.info(f"Estimating wind speed for turbine {ti} of {fm.n_turbines}.") + + # Get the power curve for this turbine from FLORIS + ws_pc = fm.core.farm.turbine_definitions[ti]["power_thrust_table"]["wind_speed"] + pow_pc = fm.core.farm.turbine_definitions[ti]["power_thrust_table"]["power"] + + # Take the diff of the power curve + pow_pc_diff = np.diff(pow_pc) + + # If first entry is not positive, remove it from ws_pc and pow_pc, loop until not true + while pow_pc_diff[0] <= 0: + ws_pc = ws_pc[1:] + pow_pc = pow_pc[1:] + pow_pc_diff = np.diff(pow_pc) + + # Find the first point where the diff is not positive and remove it and all following points + if np.any(pow_pc_diff <= 0): + idx = np.where(pow_pc_diff <= 0)[0][0] + ws_pc = ws_pc[: idx + 1] + pow_pc = pow_pc[: idx + 1] + pow_pc_diff = np.diff(pow_pc) + + # Identify certain quantities for establishing the estimator and blend schedule + rated_power = np.max(pow_pc) + + # Following the gain scheduling approach of `add_ws_est_one_ttype` + # define the gain via four wind speeds, however, more deterministically since + # driven by FLORIS + ws0 = 0 + ws1 = float(np.interp(rated_power * 0.1, pow_pc, ws_pc)) + ws2 = float(np.interp(rated_power * 0.9, pow_pc, ws_pc)) + ws3 = ws2 + 1.0 + + # For starters make simple gain schedule + ws_est_gain_x = [ws0, ws1, ws2, ws3] + ws_est_gain_y = [0, 1, 1, -1] + + ws_est_gain = np.interp(df_scada["ws_{:03d}".format(ti)], ws_est_gain_x, ws_est_gain_y) + ws_est_gain = np.clip(ws_est_gain, 0, 1) + + # Now estimate wind speed from power + ws_est_from_pow = np.interp(df_scada["pow_{:03d}".format(ti)], pow_pc, ws_pc) + ws_est = ( + ws_est_gain * ws_est_from_pow + (1.0 - ws_est_gain) * df_scada["ws_{:03d}".format(ti)] + ) + + # Add the estimated wind speed to the dataframe + df_scada["ws_est_{:03d}".format(ti)] = ws_est + + # Store the gain as well, at least for now + df_scada["ws_est_gain_{:03d}".format(ti)] = ws_est_gain + + return df_scada + + # TODO Is this function in the right module? # TODO Should include itself have a default? def get_turbs_in_radius( diff --git a/tests/floris_tools_test.py b/tests/floris_tools_test.py index d7068e36..007c15f5 100644 --- a/tests/floris_tools_test.py +++ b/tests/floris_tools_test.py @@ -7,6 +7,7 @@ from flasc.utilities.floris_tools import ( add_gaussian_blending_to_floris_approx_table, calc_floris_approx_table, + estimate_ws_with_floris, get_dependent_turbines_by_wd, interpolate_floris_from_df_approx, ) @@ -151,3 +152,43 @@ def test_get_dependent_turbines_by_wd(self): # Test the limit_number dep = get_dependent_turbines_by_wd(fi, 2, np.array([226]), limit_number=1) self.assertEqual(dep[0], [1]) + + def test_estimate_ws_with_floris(self): + # Load FLORIS object + fm, _ = load_floris() + + # Set as two turbine layout + fm.set(layout_x=[0.0, 0.0], layout_y=[0.0, 500.0]) + + # Create a sample SCADA dataframe + df_scada = pd.DataFrame( + { + "ws_000": [0.5, 8.5, 20.0], + "ws_001": [8.0, 8.5, 9.0], + "pow_000": [100.0, 100.0, 100.0], + "pow_001": [1000.0, 1000.0, 1000.0], + } + ) + + # Estimate wind speed using FLORIS + df_estimated = estimate_ws_with_floris(df_scada, fm) + + # Check if the estimated wind speed columns are added + self.assertTrue("ws_est_000" in df_estimated.columns) + self.assertTrue("ws_est_001" in df_estimated.columns) + + # Check if the estimated wind speed gain columns are added + self.assertTrue("ws_est_gain_000" in df_estimated.columns) + self.assertTrue("ws_est_gain_001" in df_estimated.columns) + + # Check that the third element of ws_est_000 are + # unchanged from ws_000 + self.assertTrue( + np.all(df_estimated["ws_est_000"].values[[2]] == df_scada["ws_000"].values[[2]]) + ) + + # Check the the middle element of ws_est_000 is less than from ws_000 + self.assertTrue(df_estimated["ws_est_000"].values[1] < df_scada["ws_000"].values[1]) + + # Check that estimated middle value for turbine 1 is greater that that of turbine 0 + self.assertTrue(df_estimated["ws_est_001"].values[1] > df_estimated["ws_est_000"].values[1])