From 8f0cc4ccda242126d7df15c074cf0364b9f24e1f Mon Sep 17 00:00:00 2001 From: Javier Lopez Lorente Date: Tue, 5 May 2026 12:21:12 +0200 Subject: [PATCH] Adapt and run notebooks to version 0.2.0 --- .../Example_About_Service_endpoints.ipynb | 20 +- docs/notebooks/Example_Compose_Plant.ipynb | 152 ++-- .../Example_EnergyCalculations.ipynb | 77 +- docs/notebooks/Example_PVSystem.ipynb | 345 ++++---- .../Example_TerminateAsync_endpoint.ipynb | 10 +- .../Annual and Monthly Results.json | 823 ------------------ .../CalculationAttributes.json | 77 -- .../Annual and Monthly Results.json | 0 .../CalculationAttributes.json | 0 .../testing_output_123/PVsystResults.csv | 2 +- 10 files changed, 296 insertions(+), 1210 deletions(-) delete mode 100644 docs/notebooks/sample_data/Inputs_Matera_3D_trackers/sf_outputs_20260309_165530/Annual and Monthly Results.json delete mode 100644 docs/notebooks/sample_data/Inputs_Matera_3D_trackers/sf_outputs_20260309_165530/CalculationAttributes.json rename docs/notebooks/sample_data/Inputs_Matera_3D_trackers/{sf_outputs_20260305_210943 => sf_outputs_20260505_121505}/Annual and Monthly Results.json (100%) rename docs/notebooks/sample_data/Inputs_Matera_3D_trackers/{sf_outputs_20260305_210943 => sf_outputs_20260505_121505}/CalculationAttributes.json (100%) diff --git a/docs/notebooks/Example_About_Service_endpoints.ipynb b/docs/notebooks/Example_About_Service_endpoints.ipynb index 5aaff4e..283a96f 100644 --- a/docs/notebooks/Example_About_Service_endpoints.ipynb +++ b/docs/notebooks/Example_About_Service_endpoints.ipynb @@ -23,8 +23,8 @@ "## 0. Prerequisites\n", "\n", "**Notebook Information:**\n", - "- **Last Updated:** February 2026\n", - "- **Written for:** SolarFarmer SDK v0.1.0+\n", + "- **Last Updated:** May 2026\n", + "- **Written for:** SolarFarmer SDK v0.2.0+\n", "- [View latest version in repository](https://...)\n", "\n", "### 0.1 Install the SolarFarmer Python SDK\n", @@ -32,7 +32,7 @@ "This notebook requires the SolarFarmer Python SDK to be installed. Install it via pip:\n", "\n", "```bash\n", - "pip install solarfarmer\n", + "pip install dnv-solarfarmer\n", "```" ] }, @@ -46,7 +46,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "SolarFarmer Python SDK v0.1.0\n" + "SolarFarmer Python SDK v0.2.0\n" ] } ], @@ -55,7 +55,7 @@ "import solarfarmer as sf\n", "\n", "# Check SDK version compatibility\n", - "NOTEBOOK_MIN_SDK_VERSION = \"0.1.0\"\n", + "NOTEBOOK_MIN_SDK_VERSION = \"0.2.0\"\n", "\n", "print(f\"SolarFarmer Python SDK v{sf.__version__}\")\n", "\n", @@ -185,14 +185,14 @@ "name": "stderr", "output_type": "stream", "text": [ - "INFO: SF-Core version: 0.4.423.0\n", - "INFO: SF-API version: 6.0.19\n" + "INFO: SF-Core version: 0.4.429.0\n", + "INFO: SF-API version: 6.0.21\n" ] }, { "data": { "text/plain": [ - "{'solarFarmerCoreVersion': '0.4.423.0', 'solarFarmerApiVersion': '6.0.19'}" + "{'solarFarmerCoreVersion': '0.4.429.0', 'solarFarmerApiVersion': '6.0.21'}" ] }, "metadata": {}, @@ -363,7 +363,7 @@ ], "metadata": { "kernelspec": { - "display_name": "solarfarmer", + "display_name": ".venv", "language": "python", "name": "python3" }, @@ -377,7 +377,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.13" + "version": "3.11.2" } }, "nbformat": 4, diff --git a/docs/notebooks/Example_Compose_Plant.ipynb b/docs/notebooks/Example_Compose_Plant.ipynb index e337383..7f25141 100644 --- a/docs/notebooks/Example_Compose_Plant.ipynb +++ b/docs/notebooks/Example_Compose_Plant.ipynb @@ -36,8 +36,8 @@ "## 0. Prerequisites\n", "\n", "**Notebook Information:**\n", - "- **Last Updated:** March 2026\n", - "- **Written for:** SolarFarmer SDK v0.1.0+\n", + "- **Last Updated:** May 2026\n", + "- **Written for:** SolarFarmer SDK v0.2.0+\n", "- [View latest version in repository](https://...)\n", "\n", "### 0.1 Install the SolarFarmer Python SDK\n", @@ -45,7 +45,7 @@ "This notebook requires the SolarFarmer Python SDK to be installed. Install it via pip:\n", "\n", "```bash\n", - "pip install solarfarmer\n", + "pip install dnv-solarfarmer\n", "```" ] }, @@ -59,7 +59,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "SolarFarmer Python SDK v0.1.0\n" + "SolarFarmer Python SDK v0.2.0\n" ] } ], @@ -86,7 +86,7 @@ ")\n", "\n", "# Check SDK version compatibility\n", - "NOTEBOOK_MIN_SDK_VERSION = \"0.1.0\"\n", + "NOTEBOOK_MIN_SDK_VERSION = \"0.2.0\"\n", "\n", "print(f\"SolarFarmer Python SDK v{sf.__version__}\")\n", "\n", @@ -228,10 +228,10 @@ "2 validation errors for Location\n", "longitude\n", " Input should be less than or equal to 180 [type=less_than_equal, input_value=9943.21, input_type=float]\n", - " For further information visit https://errors.pydantic.dev/2.12/v/less_than_equal\n", + " For further information visit https://errors.pydantic.dev/2.13/v/less_than_equal\n", "latitude\n", " Input should be less than or equal to 90 [type=less_than_equal, input_value=1234, input_type=int]\n", - " For further information visit https://errors.pydantic.dev/2.12/v/less_than_equal\n" + " For further information visit https://errors.pydantic.dev/2.13/v/less_than_equal\n" ] } ], @@ -902,7 +902,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Payload saved to: /home/iantse/git_repos/solarfarmer-api-python-sdk/docs/notebooks/EnergyCalcInputs_Pydantic.json\n" + "Payload saved to: c:\\repos\\solarfarmer-python-sdk-github\\docs\\notebooks\\EnergyCalcInputs_Pydantic.json\n" ] } ], @@ -966,10 +966,10 @@ "\n", "Clone the full repository:\n", "```bash\n", - "git clone tbd.git\n", + "git clone https://github.com/dnv-opensource/solarfarmer-python-sdk.git\n", "```\n", "\n", - "Or download the `docs/notebooks/sample_data/` folder directly from the [repository](tbd):\n", + "Or download the `docs/notebooks/sample_data/` folder directly from the [repository](https://github.com/dnv-opensource/solarfarmer-python-sdk/):\n", "\n", "Update `sample_data_dir` to where the data is located on your system.\n" ] @@ -984,7 +984,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Sample data found at: /home/iantse/git_repos/solarfarmer-api-python-sdk/docs/notebooks/sample_data\n" + "Sample data found at: c:\\repos\\solarfarmer-python-sdk-github\\docs\\notebooks\\sample_data\n" ] } ], @@ -1047,7 +1047,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Payload saved to: /home/iantse/git_repos/solarfarmer-api-python-sdk/docs/notebooks/EnergyCalcInputs_Bern_Pydantic.json\n" + "Payload saved to: c:\\repos\\solarfarmer-python-sdk-github\\docs\\notebooks\\EnergyCalcInputs_Bern_Pydantic.json\n" ] } ], @@ -1081,10 +1081,8 @@ "output_type": "stream", "text": [ "INFO: Making API call to ModelChain (2D) endpoint: https://solarfarmer.dnv.com/latest/api/ModelChain\n", - "Start time = 04-03-2026 11:59:43\n", - "INFO: SUCCESS: Calculation returned successfully (time taken: 10.1 seconds)\n", - "/home/iantse/git_repos/solarfarmer-api-python-sdk/solarfarmer/models/energy_calculation_results.py:1771: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", - " data[\"date\"] = pd.to_datetime(data[\"date\"], utc=True).dt.tz_localize(None)\n" + "Start time = 05-05-2026 12:08:49\n", + "INFO: SUCCESS: Calculation returned successfully (time taken: 5.6 seconds)\n" ] }, { @@ -1150,69 +1148,69 @@ "name": "stdout", "output_type": "stream", "text": [ - "\n", "----------------------------------------\n", "Annual Results Summary (Years: 1 (1990))\n", "----------------------------------------\n", - "Property Units Year 1\n", - " (1990)\n", - "--------------------------- -------- ----------\n", - "Energy yield kWh/kWp 1,363.69\n", - "Net energy MWh/year 189.01\n", - "Production DC kWh 195,085.66\n", - "Production AC kWh 191,483.26\n", - "Performance Ratio % 84.99\n", - "Performance Ratio Bifacial % 84.99\n", - "Average annual temperature °C 10.61\n", - "Horizontal irradiation kWh/m² 1,192.73\n", - "Irradiation on tilted plane kWh/m² 1,604.46\n", - "GI with horizon kWh/m² 1,604.46\n", - "Global effective irradiance kWh/m² 1,533.93\n", - "Gain on tilted plane % 34.52\n", - "\\n----------------------------------------\n", + "Property Units Year 1\n", + " (1990)\n", + "--------------------------- -------- --------\n", + "Energy yield kWh/kWp 1363.69\n", + "Net energy MWh/year 189.01\n", + "Production DC kWh 195086\n", + "Production AC kWh 191483\n", + "Performance Ratio % 84.99\n", + "Performance Ratio Bifacial % 84.99\n", + "Average annual temperature °C 10.61\n", + "Horizontal irradiation kWh/m² 1192.73\n", + "Irradiation on tilted plane kWh/m² 1604.46\n", + "GI with horizon kWh/m² 1604.46\n", + "Global effective irradiance kWh/m² 1533.93\n", + "Gain on tilted plane % 34.52\n", + "----------------------------------------\n", "Annual Effects Summary (Years: 1 (1990))\n", "----------------------------------------\n", - "Effect (%) Year 1\\n(1990)\n", - "------------------------------------ ----------------\n", - "Horizon 0.00\n", - "Near shading irradiance -1.68\n", - "Soiling -1.00\n", - "Angular -1.78\n", - "Spectral 0.00\n", - "Back irradiance gain 0.00\n", - "Bifacial angular 0.00\n", - "Bifacial shading 0.00\n", - "Bifacial transmission 0.00\n", - "Back near shading irradiance 0.00\n", - "Modeling 0.01\n", - "Modeling correction -0.01\n", - "Temperature -4.37\n", - "Irradiance -1.00\n", - "Bifaciality factor 0.00\n", - "Back irradiance mismatch 0.00\n", - "Power binning 0.38\n", - "Light induced degradation -3.00\n", - "Module quality 1.00\n", - "Module mismatch -0.50\n", - "Optimizers operational input limits 0.00\n", - "Optimizers efficiency 0.00\n", - "Optimizers operational output limits 0.00\n", - "Electrical mismatch -0.00\n", - "Ohmic DC -0.94\n", - "Inverter min DC voltage 0.00\n", - "Inverter max DC current 0.00\n", - "Inverter max DC voltage 0.00\n", - "Inverter min DC power 0.00\n", - "Inverter efficiency -1.83\n", - "Inverter max AC power -0.00\n", - "Inverter over power shutdown 0.00\n", - "Inverter tare -0.02\n", - "Auxiliaries 0.00\n", - "Ohmic AC -0.30\n", - "Transformer -1.00\n", - "System availability 0.00\n", - "Grid limit 0.00\n", - "Grid availability 0.00\n" + "Effect (%) Year 1\n", + " (1990)\n", + "------------------------------------ --------\n", + "Horizon 0.00\n", + "Near shading irradiance -1.68\n", + "Soiling -1.00\n", + "Angular -1.78\n", + "Spectral 0.00\n", + "Back irradiance gain 0.00\n", + "Bifacial angular 0.00\n", + "Bifacial shading 0.00\n", + "Bifacial transmission 0.00\n", + "Back near shading irradiance 0.00\n", + "Modeling 0.01\n", + "Modeling correction -0.01\n", + "Temperature -4.37\n", + "Irradiance -1.00\n", + "Bifaciality factor 0.00\n", + "Back irradiance mismatch 0.00\n", + "Power binning 0.38\n", + "Light induced degradation -3.00\n", + "Module quality 1.00\n", + "Module mismatch -0.50\n", + "Optimizers operational input limits 0.00\n", + "Optimizers efficiency 0.00\n", + "Optimizers operational output limits 0.00\n", + "Electrical mismatch -0.00\n", + "Ohmic DC -0.94\n", + "Inverter min DC voltage 0.00\n", + "Inverter max DC current 0.00\n", + "Inverter max DC voltage 0.00\n", + "Inverter min DC power 0.00\n", + "Inverter efficiency -1.83\n", + "Inverter max AC power -0.00\n", + "Inverter over power shutdown 0.00\n", + "Inverter tare -0.02\n", + "Auxiliaries 0.00\n", + "Ohmic AC -0.30\n", + "Transformer -1.00\n", + "System availability 0.00\n", + "Grid limit 0.00\n", + "Grid availability 0.00\n" ] } ], @@ -1482,7 +1480,7 @@ "outputs": [ { "data": { - "image/png": "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qH48WNgEMpkMq1evxpgxYwAAZ86cQYcOHXDs2DF07twZgGHwSkBAAN566y088cQT+OuvvzBq1Cjk5+fD3d0dAFBYWAhPT0/89ddfiI2NxcmTJ9GpUyfs378fvXv3BgBs3LgRd9xxB65cuYKgoCBJni8RERERGXAn2ozKy8sBAGq1WrxMLpdDpVJh165d4hqZTAaVSiWuUavVkMvl4pqEhAR4eHiICTQAxMbGQi6XIzEx0RpPhYiIiIhugkm0GUVGRiI0NBQvv/wy8vPzUVFRgfnz5+PKlStIT08HAPTr1w8uLi548cUXUVpaipKSEvznP/+BTqcT12RkZMDPz6/GfTs4OMDLywsZGRlWf15EREREVBOTaDNydHTEr7/+ijNnzsDLywvOzs7YunUrRo0aBbnc8FL7+vpi1apV+P333+Hq6gqNRoOCggL06tVLXENEREREto0TC80sKioKhw4dQmFhISoqKuDr64vo6OgapRkjRozA+fPnkZOTAwcHB3h4eCAgIACtW7cGAAQEBCArK6vG/VZVVSEvLw8BAQFWfT5EREREVBu3Pi1Eo9HA19cXZ8+exYEDB+ocA+7j4wMPDw9s2bIFWVlZ+Ne//gUAiImJQUFBAZKSksS1W7ZsgV6vR3R0tNWeAxERERHVjTvRJiouLsa5c+fEP6ekpODQoUPw8vJCaGgoVq1aBV9fX4SGhuLo0aN47rnnMGbMGIwYMUK8zdKlS9GxY0f4+voiISEBzz33HGbOnIkOHToAADp27IiRI0diypQpWLJkCSorKxEfH4+xY8eyMwcRERGRDWCLOxNt27YNw4YNq3X5hAkTsGzZMnz00Ud49913kZmZicDAQIwfPx6vvvoqlEqluPall17CsmXLkJeXh/DwcDz55JOYOXMmZDKZuCYvLw/x8fH4/fffIZfLcd999+Gjjz6Cq6urVZ4nEREREdWPSTQRERERkYlYE01EREREZCIm0UREREREJmISTURERERkIibRREREREQmYhJNRERERGQiJtFERERERCZiEk1EREREZCIm0UREREREJmISTURE9Ro6dChmzJghdRhERDaHSTQREZnFtm3bIJPJUFBQIHUoREQWxySaiIiIiMhETKKJiAgAUFJSgvHjx8PV1RWBgYFYsGBBjetXrFiB3r17w83NDQEBAXjkkUeQlZUFALh48SKGDRsGAPD09IRMJsPEiRMBAHq9HvPmzUNERAScnJzQvXt3/Pzzz1Z9bkRE5sYkmoiIAADPP/88tm/fjt9++w1//fUXtm3bhoMHD4rXV1ZWYu7cuTh8+DDWrFmDixcviolySEgIfvnlFwDA6dOnkZ6ejg8//BAAMG/ePHzzzTdYsmQJjh8/jpkzZ+LRRx/F9u3brf4ciYjMRSYIgiB1EEREJK3i4mJ4e3vj22+/xQMPPAAAyMvLQ6tWrTB16lQsXLiw1m0OHDiAPn36oKioCK6urti2bRuGDRuG/Px8eHh4AADKy8vh5eWFv//+GzExMeJtn3jiCZSWluL777+3xtMjIjI7B6kDICIi6Z0/fx4VFRWIjo4WL/Py8kKHDh3EPyclJWHOnDk4fPgw8vPzodfrAQCpqano1KlTnfd77tw5lJaW4vbbb69xeUVFBXr27GmBZ0JEZB1MoomI6JZKSkoQFxeHuLg4fPfdd/D19UVqairi4uJQUVFR7+2Ki4sBAOvXr0dwcHCN61QqlUVjJiKyJCbRRESENm3awNHREYmJiQgNDQUA5Ofn48yZMxgyZAhOnTqF3NxcvP322wgJCQFgKOe4kVKpBADodDrxsk6dOkGlUiE1NRVDhgyx0rMhIrI8JtFERARXV1dMnjwZzz//PLy9veHn54f//e9/kMsN589DQ0OhVCrx8ccf48knn8SxY8cwd+7cGvcRFhYGmUyGdevW4Y477oCTkxPc3Nzwn//8BzNnzoRer8fAgQNRWFiI3bt3w93dHRMmTJDi6RIRNRm7cxAREQDg3XffxaBBg3DXXXchNjYWAwcORFRUFADA19cXy5Ytw6pVq9CpUye8/fbbeO+992rcPjg4GK+//jpeeukl+Pv7Iz4+HgAwd+5cvPrqq5g3bx46duyIkSNHYv369YiIiLD6cyQiMhd25yAiIiIiMhF3oomIiIiITMQkmoiIiIjIREyiiYiIiIhMxCSaiIiIiMhETKKJiIiIiEzEJJqIiIiIyERMoomIiIiITMQkmoiIiIjIREyiiYiIiIhMxCSaiIiIiMhETKKJiIiIiEzEJJqIiIiIyET/D2NxQae6JQVuAAAAAElFTkSuQmCC", + "image/png": "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", "text/plain": [ "
" ] @@ -1580,7 +1578,7 @@ ], "metadata": { "kernelspec": { - "display_name": "solarfarmer", + "display_name": ".venv", "language": "python", "name": "python3" }, @@ -1594,7 +1592,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.13" + "version": "3.11.2" } }, "nbformat": 4, diff --git a/docs/notebooks/Example_EnergyCalculations.ipynb b/docs/notebooks/Example_EnergyCalculations.ipynb index 23adaa3..6237f0f 100644 --- a/docs/notebooks/Example_EnergyCalculations.ipynb +++ b/docs/notebooks/Example_EnergyCalculations.ipynb @@ -27,8 +27,8 @@ "## 0. Prerequisites\n", "\n", "**Notebook Information:**\n", - "- **Last Updated:** February 2026\n", - "- **Written for:** SolarFarmer SDK v0.1.0+\n", + "- **Last Updated:** May 2026\n", + "- **Written for:** SolarFarmer SDK v0.2.0+\n", "- [View latest version in repository](https://...)\n", "\n", "### 0.1 Install the SolarFarmer Python SDK\n", @@ -36,7 +36,7 @@ "This notebook requires the SolarFarmer Python SDK to be installed. Install it via pip:\n", "\n", "```bash\n", - "pip install solarfarmer\n", + "pip install dnv-solarfarmer\n", "```" ] }, @@ -50,7 +50,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "SolarFarmer Python SDK v0.1.0\n" + "SolarFarmer Python SDK v0.2.0\n" ] } ], @@ -67,7 +67,7 @@ " print(\"Install it with: pip install pandas\\n\")\n", "\n", "# Check SDK version compatibility\n", - "NOTEBOOK_MIN_SDK_VERSION = \"0.1.0\"\n", + "NOTEBOOK_MIN_SDK_VERSION = \"0.2.0\"\n", "\n", "print(f\"SolarFarmer Python SDK v{sf.__version__}\")\n", "\n", @@ -158,10 +158,10 @@ "\n", "Clone the full repository:\n", "```bash\n", - "git clone tbd.git\n", + "git clone https://github.com/dnv-opensource/solarfarmer-python-sdk.git\n", "```\n", "\n", - "Or download the `docs/notebooks/sample_data/` folder directly from the [repository](tbd):\n", + "Or download the `docs/notebooks/sample_data/` folder directly from the [repository](https://github.com/dnv-opensource/solarfarmer-python-sdk/):\n", "\n", "\n", "The examples below assume the data is in a `sample_data/` folder relative to this notebook, but you can place it anywhere and update the path in the next cell." @@ -177,7 +177,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Sample data found at: /home/iantse/git_repos/solarfarmer-api-python-sdk/docs/notebooks/sample_data\n" + "Sample data found at: c:\\repos\\solarfarmer-python-sdk-github\\docs\\notebooks\\sample_data\n" ] } ], @@ -189,7 +189,7 @@ "# Verify the path exists\n", "if not sample_data_dir.exists():\n", " print(f\"WARNING: Sample data not found at: {sample_data_dir.absolute()}\")\n", - " print(\"Please download from: https://...\") #TODO: Add actual URL\n", + " print(\"Please download from `docs/notebooks/sample_data` in https://github.com/dnv-opensource/solarfarmer-python-sdk/\")\n", " print(\"Or update the 'sample_data_dir' path above.\")\n", "else:\n", " print(f\"Sample data found at: {sample_data_dir.absolute()}\")" @@ -220,10 +220,8 @@ "output_type": "stream", "text": [ "INFO: Making API call to ModelChain (2D) endpoint: https://solarfarmer.dnv.com/latest/api/ModelChain\n", - "Start time = 02-03-2026 13:51:20\n", - "INFO: SUCCESS: Calculation returned successfully (time taken: 12.7 seconds)\n", - "/home/iantse/git_repos/solarfarmer-api-python-sdk/solarfarmer/models/energy_calculation_results.py:1769: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", - " data[\"date\"] = pd.to_datetime(data[\"date\"], utc=True).dt.tz_localize(None)\n" + "Start time = 05-05-2026 12:13:41\n", + "INFO: SUCCESS: Calculation returned successfully (time taken: 6.4 seconds)\n" ] }, { @@ -239,7 +237,7 @@ "Mounting type = Fixed-tilt racks\n", "AC capacity of system = 0.375 MW\n", "DC capacity of system = 0.4455 MW\n", - "Run in SolarFarmer API version 6.0.19\n", + "Run in SolarFarmer API version 6.0.21\n", "-------------------------------------------------------\n", " Annual Performance Summary (project year 1, 2017)\n", "------------------------------------- ---------------\n", @@ -299,10 +297,8 @@ "output_type": "stream", "text": [ "INFO: Making API call to ModelChain (2D) endpoint: https://solarfarmer.dnv.com/latest/api/ModelChain\n", - "Start time = 02-03-2026 13:51:33\n", - "INFO: SUCCESS: Calculation returned successfully (time taken: 9.0 seconds)\n", - "/home/iantse/git_repos/solarfarmer-api-python-sdk/solarfarmer/models/energy_calculation_results.py:1769: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", - " data[\"date\"] = pd.to_datetime(data[\"date\"], utc=True).dt.tz_localize(None)\n" + "Start time = 05-05-2026 12:13:50\n", + "INFO: SUCCESS: Calculation returned successfully (time taken: 5.1 seconds)\n" ] }, { @@ -318,7 +314,7 @@ "Mounting type = Fixed-tilt racks\n", "AC capacity of system = 0.375 MW\n", "DC capacity of system = 0.4455 MW\n", - "Run in SolarFarmer API version 6.0.19\n", + "Run in SolarFarmer API version 6.0.21\n", "-------------------------------------------------------\n", " Annual Performance Summary (project year 1, 2017)\n", "------------------------------------- ---------------\n", @@ -393,16 +389,16 @@ "output_type": "stream", "text": [ "INFO: Making API call to ModelChainAsync (3D) endpoint: https://solarfarmer.dnv.com/latest/api/ModelChainAsync\n", - "Start time = 02-03-2026 13:51:43\n", - "INFO: Instance ID returned = Matera-IT_SDK_example_2026-03-02T215144_uf5odlwedl\n", - "INFO: 1: Time: 0:00:03 \tRun status: Running \tCustom status: Calculation pending... [Shading: 0.0%, ModelChain: 0.0%, Overall: 0.0%]\n", + "Start time = 05-05-2026 12:13:59\n", + "INFO: Instance ID returned = Matera-IT_SDK_example_2026-05-05T101359_u2wl4egqtl\n", + "INFO: 1: Time: 0:00:01 \tRun status: Running \tCustom status: Calculation pending... [Shading: 0.0%, ModelChain: 0.0%, Overall: 0.0%]\n", "INFO: Plant stats: 3D Trackers, AC = 0.84 MW\n", - "INFO: 2: Time: 0:00:14 \tRun status: Running \tCustom status: Calculation pending... [Shading: 0.0%, ModelChain: 0.0%, Overall: 0.0%]\n", - "INFO: 3: Time: 0:00:25 \tRun status: Running \tCustom status: Running model chain calculation (0/46 tasks complete) [Shading: 100.0%, ModelChain: 0.0%, Overall: 35.3%]\n", - "INFO: 4: Time: 0:00:37 \tRun status: Running \tCustom status: Running model chain calculation (0/46 tasks complete) [Shading: 100.0%, ModelChain: 0.0%, Overall: 35.3%]\n", - "INFO: 5: Time: 0:00:48 \tRun status: Running \tCustom status: Running post-processing (0/46 tasks complete) [Shading: 100.0%, ModelChain: 100.0%, Overall: 69.1%]\n", - "INFO: 6: Time: 0:00:59 \tRun status: Completed \tCustom status: Finishing up. [Shading: 100.0%, ModelChain: 100.0%, Overall: 100.0%]\n", - "INFO: SUCCESS: Calculation returned successfully (time taken: 69.7 seconds)\n" + "INFO: 2: Time: 0:00:12 \tRun status: Running \tCustom status: Calculation pending... [Shading: 0.0%, ModelChain: 0.0%, Overall: 0.0%]\n", + "INFO: 3: Time: 0:00:22 \tRun status: Running \tCustom status: Running model chain calculation (0/46 tasks complete) [Shading: 100.0%, ModelChain: 0.0%, Overall: 35.3%]\n", + "INFO: 4: Time: 0:00:33 \tRun status: Running \tCustom status: Running model chain calculation (0/46 tasks complete) [Shading: 100.0%, ModelChain: 0.0%, Overall: 35.3%]\n", + "INFO: 5: Time: 0:00:44 \tRun status: Running \tCustom status: Running post-processing (2/46 tasks complete) [Shading: 100.0%, ModelChain: 100.0%, Overall: 70.5%]\n", + "INFO: 6: Time: 0:00:55 \tRun status: Completed \tCustom status: Finishing up. [Shading: 100.0%, ModelChain: 100.0%, Overall: 100.0%]\n", + "INFO: SUCCESS: Calculation returned successfully (time taken: 65.8 seconds)\n" ] }, { @@ -418,7 +414,7 @@ "Mounting type = Single-axis trackers\n", "AC capacity of system = 0.84 MW\n", "DC capacity of system = 1.197 MW\n", - "Run in SolarFarmer API version 6.0.19\n", + "Run in SolarFarmer API version 6.0.21\n", "-------------------------------------------------------\n", " Annual Performance Summary (project year 1, 2017)\n", "------------------------------------- ----------------\n", @@ -510,7 +506,7 @@ "WARNING: Could not export the file LossTreeResults.tsv due to missing data.\n", "WARNING: Could not export the file PVsystResults.csv due to missing data.\n", "WARNING: Could not export the file DetailedTimeseries.tsv due to missing data.\n", - "INFO: Results written out to sample_data/testing_output_456\n" + "INFO: Results written out to sample_data\\testing_output_456\n" ] } ], @@ -530,9 +526,9 @@ "name": "stderr", "output_type": "stream", "text": [ - "WARNING: The file sample_data/testing_output_456/LossTreeResults.tsv could not be found.\n", - "WARNING: The file sample_data/testing_output_456/PVsystResults.csv could not be found.\n", - "WARNING: The file sample_data/testing_output_456/DetailedTimeseries.tsv could not be found.\n" + "WARNING: The file sample_data\\testing_output_456\\LossTreeResults.tsv could not be found.\n", + "WARNING: The file sample_data\\testing_output_456\\PVsystResults.csv could not be found.\n", + "WARNING: The file sample_data\\testing_output_456\\DetailedTimeseries.tsv could not be found.\n" ] } ], @@ -577,7 +573,7 @@ "Mounting type = Single-axis trackers\n", "AC capacity of system = 0.84 MW\n", "DC capacity of system = 1.197 MW\n", - "Run in SolarFarmer API version 6.0.19\n", + "Run in SolarFarmer API version 6.0.21\n", "-------------------------------------------------------\n", " Annual Performance Summary (project year 1, 2017)\n", "------------------------------------- ----------------\n", @@ -676,6 +672,7 @@ " energy_yield: 1194.5706976\n", " net_energy: 1429.9760244\n", " performance_ratio: 0.8090517\n", + " performance_ratio_bifacial: 0.8090517\n", "\n", "Multi-year performance summary:\n" ] @@ -710,6 +707,7 @@ " energy_yield\n", " net_energy\n", " performance_ratio\n", + " performance_ratio_bifacial\n", " \n", " \n", " \n", @@ -724,6 +722,7 @@ " 1194.570698\n", " 1429.976024\n", " 0.809052\n", + " 0.809052\n", " \n", " \n", "\n", @@ -736,8 +735,8 @@ " irradiation_on_tilted_plane effective_irradiation energy_yield \\\n", "0 1476.507246 1388.937528 1194.570698 \n", "\n", - " net_energy performance_ratio \n", - "0 1429.976024 0.809052 " + " net_energy performance_ratio performance_ratio_bifacial \n", + "0 1429.976024 0.809052 0.809052 " ] }, "execution_count": 11, @@ -1156,7 +1155,7 @@ "PVsyst timeseries: not available\n", "Detailed timeseries: not available\n", "\n", - "Calculation attributes: 1.197 MWp DC, 0.84 MWac, SF API v6.0.19\n" + "Calculation attributes: 1.197 MWp DC, 0.84 MWac, SF API v6.0.21\n" ] } ], @@ -1191,7 +1190,7 @@ ], "metadata": { "kernelspec": { - "display_name": "solarfarmer", + "display_name": ".venv", "language": "python", "name": "python3" }, @@ -1205,7 +1204,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.13" + "version": "3.11.2" } }, "nbformat": 4, diff --git a/docs/notebooks/Example_PVSystem.ipynb b/docs/notebooks/Example_PVSystem.ipynb index 183a87d..ec0ffc1 100644 --- a/docs/notebooks/Example_PVSystem.ipynb +++ b/docs/notebooks/Example_PVSystem.ipynb @@ -33,8 +33,8 @@ "## 0. Prerequisites\n", "\n", "**Notebook Information:**\n", - "- **Last Updated:** March 2026\n", - "- **Written for:** SolarFarmer SDK v0.1.0+\n", + "- **Last Updated:** May 2026\n", + "- **Written for:** SolarFarmer SDK v0.2.0+\n", "- [View latest version in repository](https://...)\n", "\n", "### 0.1 Install the SolarFarmer Python SDK\n", @@ -42,13 +42,13 @@ "This notebook requires the SolarFarmer Python SDK to be installed. Install it via pip:\n", "\n", "```bash\n", - "pip install solarfarmer\n", + "pip install dnv-solarfarmer\n", "```" ] }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 10, "id": "c4d31fd9", "metadata": {}, "outputs": [ @@ -56,7 +56,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "SolarFarmer Python SDK v0.1.0\n" + "SolarFarmer Python SDK v0.2.0\n" ] } ], @@ -66,7 +66,7 @@ "from pathlib import Path\n", "\n", "# Check SDK version compatibility\n", - "NOTEBOOK_MIN_SDK_VERSION = \"0.1.0\"\n", + "NOTEBOOK_MIN_SDK_VERSION = \"0.2.0\"\n", "\n", "print(f\"SolarFarmer Python SDK v{sf.__version__}\")\n", "\n", @@ -157,19 +157,19 @@ "\n", "Clone the full repository:\n", "```bash\n", - "git clone tbd.git\n", + "git clone https://github.com/dnv-opensource/solarfarmer-python-sdk.git\n", "```\n", "\n", "Or download the `docs/notebooks/sample_data/` folder directly from the repository:\n", "\n", - "tbd url\n", + "[github.com/dnv-opensource/solarfarmer-python-sdk](https://github.com/dnv-opensource/solarfarmer-python-sdk)\n", "\n", "The examples below assume the data is in a `sample_data/` folder relative to this notebook, but you can place it anywhere and update the path in the next cell." ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 11, "id": "031ae1e5", "metadata": {}, "outputs": [ @@ -177,7 +177,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Sample data found at: /home/iantse/git_repos/solarfarmer-api-python-sdk/docs/notebooks/sample_data\n" + "Sample data found at: c:\\repos\\solarfarmer-python-sdk-github\\docs\\notebooks\\sample_data\n" ] } ], @@ -189,7 +189,7 @@ "# Verify the path exists\n", "if not sample_data_dir.exists():\n", " print(f\"WARNING: Sample data not found at: {sample_data_dir.absolute()}\")\n", - " print(\"Please download from: https://...\") #TODO: Add actual URL\n", + " print(\"Please download from `docs/notebooks/sample_data` in https://github.com/dnv-opensource/solarfarmer-python-sdk/\")\n", " print(\"Or update the 'sample_data_dir' path above.\")\n", "else:\n", " print(f\"Sample data found at: {sample_data_dir.absolute()}\")" @@ -211,7 +211,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 12, "id": "666a5205", "metadata": {}, "outputs": [], @@ -261,7 +261,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 13, "id": "4a2509a2", "metadata": {}, "outputs": [ @@ -340,18 +340,19 @@ "--- MODELING OPTIONS ---\n", "Enable Spectral Modeling: False\n", "Module IAM Model Override: None\n", + "Calculate DHI (from GHI in weather file): False\n", "\n", "--- OUTPUT OPTIONS ---\n", "Generate PVsyst Format Timeseries: True\n", "Generate Loss Tree Timeseries: True\n", "\n", "--- AUXILIARY FILES ---\n", - "Weather File: sample_data/Inputs_Bern_2D_racks/Bern-hour.dat\n", + "Weather File: sample_data\\Inputs_Bern_2D_racks\\Bern-hour.dat\n", "Horizon File: Not set\n", "Registered PAN Files: 1\n", - " - Module1: sample_data/Inputs_Bern_2D_racks/CanadianSolar_CS6U-330M_APP.PAN\n", + " - Module1: sample_data\\Inputs_Bern_2D_racks\\CanadianSolar_CS6U-330M_APP.PAN\n", "Registered OND Files: 1\n", - " - Inverter1: sample_data/Inputs_Bern_2D_racks/Sungrow_SG125HV_APP.OND\n", + " - Inverter1: sample_data\\Inputs_Bern_2D_racks\\Sungrow_SG125HV_APP.OND\n", "\n", "======================================================================\n", "\n" @@ -374,7 +375,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 14, "id": "82d955aa", "metadata": {}, "outputs": [ @@ -383,7 +384,7 @@ "output_type": "stream", "text": [ "INFO: Making API call to ModelChain (2D) endpoint: https://solarfarmer.dnv.com/v6/api/ModelChain\n", - "Start time = 05-03-2026 14:18:13\n" + "Start time = 05-05-2026 12:17:01\n" ] }, { @@ -414,9 +415,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "INFO: SUCCESS: Calculation returned successfully (time taken: 6.6 seconds)\n", - "/home/iantse/git_repos/solarfarmer-api-python-sdk/solarfarmer/models/energy_calculation_results.py:1771: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", - " data[\"date\"] = pd.to_datetime(data[\"date\"], utc=True).dt.tz_localize(None)\n" + "INFO: SUCCESS: Calculation returned successfully (time taken: 4.3 seconds)\n" ] }, { @@ -445,6 +444,16 @@ "Performance Ratio 0.7481\n", "------------------------------------- -----------------\n" ] + }, + { + "data": { + "text/plain": [ + "CalculationResults(name='my_project_id', years=1)" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ @@ -468,7 +477,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 15, "id": "d01f0131", "metadata": {}, "outputs": [ @@ -476,69 +485,69 @@ "name": "stdout", "output_type": "stream", "text": [ - "\n", "----------------------------------------\n", "Annual Results Summary (Years: 1 (1990))\n", "----------------------------------------\n", - "Property Units Year 1\n", - " (1990)\n", - "--------------------------- -------- -------------\n", - "Energy yield kWh/kWp 959.58\n", - "Net energy MWh/year 11,506.52\n", - "Production DC kWh 12,025,493.79\n", - "Production AC kWh 11,768,464.63\n", - "Performance Ratio % 74.81\n", - "Performance Ratio Bifacial % 74.81\n", - "Average annual temperature °C 10.61\n", - "Horizontal irradiation kWh/m² 1,192.73\n", - "Irradiation on tilted plane kWh/m² 1,282.73\n", - "GI with horizon kWh/m² 1,282.73\n", - "Global effective irradiance kWh/m² 1,164.71\n", - "Gain on tilted plane % 7.55\n", - "\\n----------------------------------------\n", + "Property Units Year 1\n", + " (1990)\n", + "--------------------------- -------- -----------\n", + "Energy yield kWh/kWp 959.58\n", + "Net energy MWh/year 11506.5\n", + "Production DC kWh 1.20255e+07\n", + "Production AC kWh 1.17685e+07\n", + "Performance Ratio % 74.81\n", + "Performance Ratio Bifacial % 74.81\n", + "Average annual temperature °C 10.61\n", + "Horizontal irradiation kWh/m² 1192.73\n", + "Irradiation on tilted plane kWh/m² 1282.73\n", + "GI with horizon kWh/m² 1282.73\n", + "Global effective irradiance kWh/m² 1164.71\n", + "Gain on tilted plane % 7.55\n", + "----------------------------------------\n", "Annual Effects Summary (Years: 1 (1990))\n", "----------------------------------------\n", - "Effect (%) Year 1\\n(1990)\n", - "------------------------------------ ----------------\n", - "Horizon 0.00\n", - "Near shading irradiance -6.70\n", - "Soiling 0.00\n", - "Angular -2.68\n", - "Spectral 0.00\n", - "Back irradiance gain 0.00\n", - "Bifacial angular 0.00\n", - "Bifacial shading 0.00\n", - "Bifacial transmission 0.00\n", - "Back near shading irradiance 0.00\n", - "Modeling 0.01\n", - "Modeling correction -0.01\n", - "Temperature -3.24\n", - "Irradiance -1.60\n", - "Bifaciality factor 0.00\n", - "Back irradiance mismatch 0.00\n", - "Power binning 0.38\n", - "Light induced degradation -3.00\n", - "Module quality 0.00\n", - "Module mismatch -0.50\n", - "Optimizers operational input limits 0.00\n", - "Optimizers efficiency 0.00\n", - "Optimizers operational output limits 0.00\n", - "Electrical mismatch -5.85\n", - "Ohmic DC -0.85\n", - "Inverter min DC voltage 0.00\n", - "Inverter max DC current 0.00\n", - "Inverter max DC voltage 0.00\n", - "Inverter min DC power 0.00\n", - "Inverter efficiency -2.01\n", - "Inverter max AC power -0.11\n", - "Inverter over power shutdown 0.00\n", - "Inverter tare -0.02\n", - "Auxiliaries 0.00\n", - "Ohmic AC -0.29\n", - "Transformer -1.31\n", - "System availability 0.00\n", - "Grid limit -0.64\n", - "Grid availability 0.00\n" + "Effect (%) Year 1\n", + " (1990)\n", + "------------------------------------ --------\n", + "Horizon 0.00\n", + "Near shading irradiance -6.70\n", + "Soiling 0.00\n", + "Angular -2.68\n", + "Spectral 0.00\n", + "Back irradiance gain 0.00\n", + "Bifacial angular 0.00\n", + "Bifacial shading 0.00\n", + "Bifacial transmission 0.00\n", + "Back near shading irradiance 0.00\n", + "Modeling 0.01\n", + "Modeling correction -0.01\n", + "Temperature -3.24\n", + "Irradiance -1.60\n", + "Bifaciality factor 0.00\n", + "Back irradiance mismatch 0.00\n", + "Power binning 0.38\n", + "Light induced degradation -3.00\n", + "Module quality 0.00\n", + "Module mismatch -0.50\n", + "Optimizers operational input limits 0.00\n", + "Optimizers efficiency 0.00\n", + "Optimizers operational output limits 0.00\n", + "Electrical mismatch -5.85\n", + "Ohmic DC -0.85\n", + "Inverter min DC voltage 0.00\n", + "Inverter max DC current 0.00\n", + "Inverter max DC voltage 0.00\n", + "Inverter min DC power 0.00\n", + "Inverter efficiency -2.01\n", + "Inverter max AC power -0.11\n", + "Inverter over power shutdown 0.00\n", + "Inverter tare -0.02\n", + "Auxiliaries 0.00\n", + "Ohmic AC -0.29\n", + "Transformer -1.31\n", + "System availability 0.00\n", + "Grid limit -0.64\n", + "Grid availability 0.00\n" ] } ], @@ -558,7 +567,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 16, "id": "8c1d6588", "metadata": {}, "outputs": [], @@ -595,7 +604,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 18, "id": "3a06ecac", "metadata": {}, "outputs": [ @@ -604,40 +613,8 @@ "output_type": "stream", "text": [ "INFO: Making API call to ModelChain (2D) endpoint: https://solarfarmer.dnv.com/v6/api/ModelChain\n", - "Start time = 05-03-2026 14:18:20\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "=============================================\n", - "DESIGN SUMMARY\n", - "=============================================\n", - "\n", - "Capacity Summary:\n", - " Target (input) DC Capacity: 11.99121 MW\n", - " Design (output for simulation) DC Capacity: 11.991 MW\n", - " Target (input) AC Capacity: 10.0 MW\n", - " Design (output for simulation) AC Capacity: 10.000 MW\n", - "\n", - "Layout Configuration:\n", - " Number of Inverters: 80\n", - " Number of Modules: 36337\n", - " String Length: 29\n", - " Total Strings: 2320\n", - "=============================================\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO: SUCCESS: Calculation returned successfully (time taken: 6.1 seconds)\n", - "/home/iantse/git_repos/solarfarmer-api-python-sdk/solarfarmer/models/energy_calculation_results.py:1771: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", - " data[\"date\"] = pd.to_datetime(data[\"date\"], utc=True).dt.tz_localize(None)\n" + "Start time = 05-05-2026 12:17:46\n", + "INFO: SUCCESS: Calculation returned successfully (time taken: 3.1 seconds)\n" ] }, { @@ -666,9 +643,21 @@ "Performance Ratio 0.6088\n", "------------------------------------- ----------------\n" ] + }, + { + "data": { + "text/plain": [ + "CalculationResults(name='my_project_id', years=1)" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ + "advanced_plant.print_design_summary = False # Disable printing the design summary before the energy calculation\n", + "\n", "advanced_plant.run_energy_calculation(\n", " project_id=\"my_project_id\",\n", " api_version=\"v6\",\n", @@ -679,7 +668,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 19, "id": "fbcca53a", "metadata": {}, "outputs": [ @@ -687,69 +676,69 @@ "name": "stdout", "output_type": "stream", "text": [ - "\n", "----------------------------------------\n", "Annual Results Summary (Years: 1 (1990))\n", "----------------------------------------\n", - "Property Units Year 1\n", - " (1990)\n", - "--------------------------- -------- ------------\n", - "Energy yield kWh/kWp 788.88\n", - "Net energy MWh/year 9,459.62\n", - "Production DC kWh 9,887,837.17\n", - "Production AC kWh 9,670,401.01\n", - "Performance Ratio % 60.88\n", - "Performance Ratio Bifacial % 60.88\n", - "Average annual temperature °C 10.61\n", - "Horizontal irradiation kWh/m² 1,192.73\n", - "Irradiation on tilted plane kWh/m² 1,295.80\n", - "GI with horizon kWh/m² 1,159.80\n", - "Global effective irradiance kWh/m² 914.09\n", - "Gain on tilted plane % 8.64\n", - "\\n----------------------------------------\n", + "Property Units Year 1\n", + " (1990)\n", + "--------------------------- -------- -----------\n", + "Energy yield kWh/kWp 788.88\n", + "Net energy MWh/year 9459.62\n", + "Production DC kWh 9.88784e+06\n", + "Production AC kWh 9.6704e+06\n", + "Performance Ratio % 60.88\n", + "Performance Ratio Bifacial % 60.88\n", + "Average annual temperature °C 10.61\n", + "Horizontal irradiation kWh/m² 1192.73\n", + "Irradiation on tilted plane kWh/m² 1295.8\n", + "GI with horizon kWh/m² 1159.8\n", + "Global effective irradiance kWh/m² 914.09\n", + "Gain on tilted plane % 8.64\n", + "----------------------------------------\n", "Annual Effects Summary (Years: 1 (1990))\n", "----------------------------------------\n", - "Effect (%) Year 1\\n(1990)\n", - "------------------------------------ ----------------\n", - "Horizon -10.50\n", - "Near shading irradiance -5.88\n", - "Soiling -14.00\n", - "Angular -2.63\n", - "Spectral 0.00\n", - "Back irradiance gain 0.00\n", - "Bifacial angular 0.00\n", - "Bifacial shading 0.00\n", - "Bifacial transmission 0.00\n", - "Back near shading irradiance 0.00\n", - "Modeling 0.01\n", - "Modeling correction -0.01\n", - "Temperature -2.41\n", - "Irradiance -2.14\n", - "Bifaciality factor 0.00\n", - "Back irradiance mismatch 0.00\n", - "Power binning 0.38\n", - "Light induced degradation -3.00\n", - "Module quality 1.00\n", - "Module mismatch -0.50\n", - "Optimizers operational input limits 0.00\n", - "Optimizers efficiency 0.00\n", - "Optimizers operational output limits 0.00\n", - "Electrical mismatch -2.76\n", - "Ohmic DC -0.73\n", - "Inverter min DC voltage 0.00\n", - "Inverter max DC current 0.00\n", - "Inverter max DC voltage 0.00\n", - "Inverter min DC power -0.00\n", - "Inverter efficiency -2.18\n", - "Inverter max AC power 0.01\n", - "Inverter over power shutdown 0.00\n", - "Inverter tare -0.03\n", - "Auxiliaries -0.50\n", - "Ohmic AC -0.26\n", - "Transformer -1.41\n", - "System availability 0.00\n", - "Grid limit -0.02\n", - "Grid availability 0.00\n" + "Effect (%) Year 1\n", + " (1990)\n", + "------------------------------------ --------\n", + "Horizon -10.50\n", + "Near shading irradiance -5.88\n", + "Soiling -14.00\n", + "Angular -2.63\n", + "Spectral 0.00\n", + "Back irradiance gain 0.00\n", + "Bifacial angular 0.00\n", + "Bifacial shading 0.00\n", + "Bifacial transmission 0.00\n", + "Back near shading irradiance 0.00\n", + "Modeling 0.01\n", + "Modeling correction -0.01\n", + "Temperature -2.41\n", + "Irradiance -2.14\n", + "Bifaciality factor 0.00\n", + "Back irradiance mismatch 0.00\n", + "Power binning 0.38\n", + "Light induced degradation -3.00\n", + "Module quality 1.00\n", + "Module mismatch -0.50\n", + "Optimizers operational input limits 0.00\n", + "Optimizers efficiency 0.00\n", + "Optimizers operational output limits 0.00\n", + "Electrical mismatch -2.76\n", + "Ohmic DC -0.73\n", + "Inverter min DC voltage 0.00\n", + "Inverter max DC current 0.00\n", + "Inverter max DC voltage 0.00\n", + "Inverter min DC power -0.00\n", + "Inverter efficiency -2.18\n", + "Inverter max AC power 0.01\n", + "Inverter over power shutdown 0.00\n", + "Inverter tare -0.03\n", + "Auxiliaries -0.50\n", + "Ohmic AC -0.26\n", + "Transformer -1.41\n", + "System availability 0.00\n", + "Grid limit -0.02\n", + "Grid availability 0.00\n" ] } ], @@ -771,7 +760,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 20, "id": "a9fc38fd", "metadata": {}, "outputs": [ @@ -805,7 +794,7 @@ "'{\"location\":{\"longitude\":7.37,\"latitude\":46.95,\"altitude\":575.0},\"pvPlant\":{\"transformers\":[{\"transformerCount\":1,\"inverters\":[{\"inverterSpecID\":\"Sungrow_SG125HV_APP\",\"inverterCount\":53,\"layouts\":[{\"layoutCount\":1,\"moduleSpecificationID\":\"CanadianSolar_CS6U-330M_APP\",\"mountingTypeID\":\"Fixed-Tilt Rack Template 1\",\"isTrackers\":false,\"azimuth\":225.0,\"pitch\":4.8999999999999995,\"totalNumberOfStrings\":16,\"stringLength\":29,\"inverterInput\":[0],\"dcOhmicConnectorLoss\":0.015,\"moduleMismatchLoss\":0.005,\"name\":\"layout_1\",\"numberOfStringsInFrontRow\":0,\"numberOfStringsInBackRow\":0,\"numberOfStringsInRightRow\":0,\"numberOfStringsInLeftRow\":0,\"numberOfStringsInIsolatedRow\":0,\"terrainAzimuth\":0.0,\"terrainSlope\":0.0,\"moduleQualityFactor\":0.0}],\"acWiringOhmicLoss\":0.005,\"name\":\"Inverter_1\"},{\"inverterSpecID\":\"Sungrow_SG125HV_APP\",\"inverterCount\":27,\"layouts\":[{\"layoutCount\":1,\"moduleSpecificationID\":\"CanadianSolar_CS6U-330M_APP\",\"mountingTypeID\":\"Fixed-Tilt Rack Template 1\",\"isTrackers\":false,\"azimuth\":225.0,\"pitch\":4.8999999999999995,\"totalNumberOfStrings\":15,\"stringLength\":29,\"inverterInput\":[0],\"dcOhmicConnectorLoss\":0.015,\"moduleMismatchLoss\":0.005,\"name\":\"layout_1\",\"numberOfStringsInFrontRow\":0,\"numberOfStringsInBackRow\":0,\"numberOfStringsInRightRow\":0,\"numberOfStringsInLeftRow\":0,\"numberOfStringsInIsolatedRow\":0,\"terrainAzimuth\":0.0,\"terrainSlope\":0.0,\"moduleQualityFactor\":0.0}],\"acWiringOhmicLoss\":0.005,\"name\":\"Inverter_2\"}],\"name\":\"Transformer1\",\"transformerSpecID\":\"Transformer Specification 1\"}],\"mountingTypeSpecifications\":{\"Fixed-Tilt Rack Template 1\":{\"isTracker\":false,\"numberOfModulesHigh\":1,\"modulesAreLandscape\":false,\"rackHeight\":1.96,\"ySpacingBetweenModules\":0.0,\"frameBottomWidth\":0.0,\"constantHeatTransferCoefficient\":29.0,\"convectiveHeatTransferCoefficient\":0.0,\"monthlySoilingLoss\":[0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0],\"tilt\":45.0,\"heightOfLowestEdgeFromGround\":0.7,\"transmissionFactor\":0.0,\"bifacialShadeLossFactor\":0.0,\"bifacialMismatchLossFactor\":0.0}},\"gridConnectionLimit\":9000000.0,\"transformerSpecifications\":{\"Transformer Specification 1\":{\"modelType\":\"NoLoadAndOhmic\",\"ratedPower\":10000000.0,\"noLoadLoss\":10000.0,\"fullLoadOhmicLoss\":100000.0}}},\"monthlyAlbedo\":[0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2,0.2],\"energyCalculationOptions\":{\"diffuseModel\":\"Perez\",\"includeHorizon\":false,\"calculationYear\":1990,\"defaultWindSpeed\":0.0,\"calculateDHI\":false,\"treatCircumsolarAsDirect\":true,\"useMostShadedCellForDiffuse\":false,\"modelBackRowSeparately\":true,\"applyIAM\":true,\"applySpectralMismatchModifier\":false,\"includeModulePerformance\":true,\"includeCellTemperatureModel\":true,\"includeSoilingLossInTemperatureModel\":true,\"useIAMForTemperatureModel\":true,\"includeArrayIV\":true,\"includeInverterModel\":true,\"includeACModel\":true,\"systemAvailabilityLoss\":0.0,\"gridAvailabilityLoss\":0.0,\"addTareLossToInverterEfficiencyModel\":false,\"ignoreLowPowerPointInEfficiencyData\":false,\"solarMeasurementPlaneAzimuth\":0.0,\"solarMeasurementPlaneTilt\":0.0,\"solarZenithAngleLimit\":88.0,\"returnPvSystFormatTimeSeriesResults\":true,\"returnDetailedTimeSeriesResults\":false,\"returnLossTreeTimeSeriesResults\":true,\"desiredVariablesForPvSystFormatTimeSeries\":[]},\"panFileSupplements\":{\"CanadianSolar_CS6U-330M_APP\":{\"modelingCorrectionFactor\":1.0,\"recalculateModelingCorrectionFactor\":true,\"moduleQualityFactor\":0.0,\"lidLoss\":0.03,\"bifacialityFactor\":0.0}}}'" ] }, - "execution_count": 11, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } @@ -817,7 +806,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 21, "id": "bc1ca343", "metadata": {}, "outputs": [], diff --git a/docs/notebooks/Example_TerminateAsync_endpoint.ipynb b/docs/notebooks/Example_TerminateAsync_endpoint.ipynb index 5418fba..0ebfce5 100644 --- a/docs/notebooks/Example_TerminateAsync_endpoint.ipynb +++ b/docs/notebooks/Example_TerminateAsync_endpoint.ipynb @@ -25,8 +25,8 @@ "## 0. Prerequisites\n", "\n", "**Notebook Information:**\n", - "- **Last Updated:** February 2026\n", - "- **Written for:** SolarFarmer SDK v0.1.0+\n", + "- **Last Updated:** May 2026\n", + "- **Written for:** SolarFarmer SDK v0.2.0+\n", "- [View latest version in repository](https://...)\n", "\n", "### 0.1 Install the SolarFarmer Python SDK\n", @@ -34,13 +34,13 @@ "This notebook requires the SolarFarmer Python SDK to be installed. Install it via pip:\n", "\n", "```bash\n", - "pip install solarfarmer\n", + "pip install dnv-solarfarmer\n", "```\n" ] }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "13a268ae", "metadata": {}, "outputs": [ @@ -57,7 +57,7 @@ "import solarfarmer as sf\n", "\n", "# Check SDK version compatibility\n", - "NOTEBOOK_MIN_SDK_VERSION = \"0.1.0\"\n", + "NOTEBOOK_MIN_SDK_VERSION = \"0.2.0\"\n", "\n", "print(f\"SolarFarmer Python SDK v{sf.__version__}\")\n", "\n", diff --git a/docs/notebooks/sample_data/Inputs_Matera_3D_trackers/sf_outputs_20260309_165530/Annual and Monthly Results.json b/docs/notebooks/sample_data/Inputs_Matera_3D_trackers/sf_outputs_20260309_165530/Annual and Monthly Results.json deleted file mode 100644 index 8bfcd36..0000000 --- a/docs/notebooks/sample_data/Inputs_Matera_3D_trackers/sf_outputs_20260309_165530/Annual and Monthly Results.json +++ /dev/null @@ -1,823 +0,0 @@ -[ - { - "year": 2017, - "annualEffects": { - "horizon": 0, - "nearShadingIrradiance": -0.0291986, - "soiling": -0.01, - "angular": -0.021228, - "spectral": 0, - "backIrradianceGain": 0, - "bifacialAngular": 0, - "bifacialShading": 0, - "bifacialTransmission": 0, - "backNearShadingIrradiance": 0, - "modeling": -0.0004819, - "modelingCorrection": 0, - "temperature": -0.0264273, - "irradiance": -0.0125413, - "bifacialityFactor": 0, - "backIrradianceMismatch": 0, - "powerBinning": 0.00325, - "lightInducedDegradation": -0.025, - "moduleQuality": 0, - "moduleMismatch": -0.01, - "optimizersOperationalInputLimits": 0, - "optimizersEfficiency": 0, - "optimizersOperationalOutputLimits": 0, - "electricalMismatch": -0.0055201, - "ohmicDc": 0, - "inverterMinDcVoltage": -2.37e-05, - "inverterMaxDcCurrent": 0, - "inverterMaxDcVoltage": -5.4e-05, - "inverterMinDcPower": 0, - "inverterEfficiency": -0.0218833, - "inverterMaxAcPower": -0.0267627, - "inverterOverPowerShutdown": -0.0036053, - "inverterTare": -0.0001344, - "auxiliaries": 0, - "ohmicAc": 0, - "transformer": -0.015004, - "systemAvailability": 0, - "gridLimit": 0, - "gridAvailability": -0.005 - }, - "energyYieldResults": { - "recordCount": 8760, - "percentComplete": 99.99999999999987, - "averageTemperature": 8.0037424, - "ghi": 1169.61585, - "gi": 1476.5072462, - "giWithHorizon": 1476.5072462, - "gainOnTiltedPlane": 0.2623865, - "globalEffectiveIrradiance": 1388.9375277, - "modulePower": 1597634.9801527, - "modulePowerAtSTC": 1661843.99791, - "nominalEnergy": 1662645.2469573, - "pdc": 1538588.7168261, - "pac": 1459053.5202249, - "performanceRatio": 0.8090517, - "performanceRatioBifacial": 0.8090517, - "netEnergy": 1429.9760244, - "energyYield": 1194.5706976 - }, - "monthlyEnergyYieldResults": [ - { - "month": 1, - "monthlyEffects": { - "horizon": 0, - "nearShadingIrradiance": -0.0375959, - "soiling": -0.01, - "angular": -0.0459001, - "spectral": 0, - "backIrradianceGain": 0, - "bifacialAngular": 0, - "bifacialShading": 0, - "bifacialTransmission": 0, - "backNearShadingIrradiance": 0, - "modeling": -0.0004819, - "modelingCorrection": 0, - "temperature": 0.0582101, - "irradiance": -0.0357569, - "bifacialityFactor": 0, - "backIrradianceMismatch": 0, - "powerBinning": 0.00325, - "lightInducedDegradation": -0.025, - "moduleQuality": 0, - "moduleMismatch": -0.01, - "optimizersOperationalInputLimits": 0, - "optimizersEfficiency": 0, - "optimizersOperationalOutputLimits": 0, - "electricalMismatch": -0.0176889, - "ohmicDc": 0, - "inverterMinDcVoltage": -2.24e-05, - "inverterMaxDcCurrent": 0, - "inverterMaxDcVoltage": -0.0001496, - "inverterMinDcPower": 0, - "inverterEfficiency": -0.0226057, - "inverterMaxAcPower": 0, - "inverterOverPowerShutdown": 0, - "inverterTare": -0.0004656, - "auxiliaries": 0, - "ohmicAc": 0, - "transformer": -0.015014, - "systemAvailability": 0, - "gridLimit": 0, - "gridAvailability": -0.005 - }, - "energyYieldResults": { - "recordCount": 744, - "percentComplete": 100, - "averageTemperature": 0.3627151, - "ghi": 35.576, - "gi": 43.4980552, - "giWithHorizon": 43.4980552, - "gainOnTiltedPlane": 0.2226798, - "globalEffectiveIrradiance": 39.5417894, - "modulePower": 48274.2743963, - "modulePowerAtSTC": 47310.4771736, - "nominalEnergy": 47333.2876629, - "pdc": 45921.256784, - "pac": 44854.5637994, - "performanceRatio": 0.8442666, - "performanceRatioBifacial": 0.8442666, - "netEnergy": 43.960213, - "energyYield": 36.7239552 - } - }, - { - "month": 2, - "monthlyEffects": { - "horizon": 0, - "nearShadingIrradiance": -0.0315799, - "soiling": -0.01, - "angular": -0.0343092, - "spectral": 0, - "backIrradianceGain": 0, - "bifacialAngular": 0, - "bifacialShading": 0, - "bifacialTransmission": 0, - "backNearShadingIrradiance": 0, - "modeling": -0.0004819, - "modelingCorrection": 0, - "temperature": 0.0335202, - "irradiance": -0.0184931, - "bifacialityFactor": 0, - "backIrradianceMismatch": 0, - "powerBinning": 0.00325, - "lightInducedDegradation": -0.025, - "moduleQuality": 0, - "moduleMismatch": -0.01, - "optimizersOperationalInputLimits": 0, - "optimizersEfficiency": 0, - "optimizersOperationalOutputLimits": 0, - "electricalMismatch": -0.0123593, - "ohmicDc": 0, - "inverterMinDcVoltage": -2.66e-05, - "inverterMaxDcCurrent": 0, - "inverterMaxDcVoltage": -2.82e-05, - "inverterMinDcPower": 0, - "inverterEfficiency": -0.0211743, - "inverterMaxAcPower": -0.0002216, - "inverterOverPowerShutdown": -0.0007112, - "inverterTare": -0.0002003, - "auxiliaries": 0, - "ohmicAc": 0, - "transformer": -0.015006, - "systemAvailability": 0, - "gridLimit": 0, - "gridAvailability": -0.005 - }, - "energyYieldResults": { - "recordCount": 672, - "percentComplete": 100, - "averageTemperature": 0.8292708, - "ghi": 62.3436, - "gi": 80.2211652, - "giWithHorizon": 80.2211652, - "gainOnTiltedPlane": 0.2867586, - "globalEffectiveIrradiance": 74.2721635, - "modulePower": 90139.3156162, - "modulePowerAtSTC": 88859.1055318, - "nominalEnergy": 88901.9484664, - "pdc": 86210.9080653, - "pac": 84285.2400322, - "performanceRatio": 0.8602685, - "performanceRatioBifacial": 0.8602685, - "netEnergy": 82.6053527, - "energyYield": 69.0117415 - } - }, - { - "month": 3, - "monthlyEffects": { - "horizon": 0, - "nearShadingIrradiance": -0.0339475, - "soiling": -0.01, - "angular": -0.0262883, - "spectral": 0, - "backIrradianceGain": 0, - "bifacialAngular": 0, - "bifacialShading": 0, - "bifacialTransmission": 0, - "backNearShadingIrradiance": 0, - "modeling": -0.0004819, - "modelingCorrection": 0, - "temperature": 0.0026701, - "irradiance": -0.0158423, - "bifacialityFactor": 0, - "backIrradianceMismatch": 0, - "powerBinning": 0.00325, - "lightInducedDegradation": -0.025, - "moduleQuality": 0, - "moduleMismatch": -0.01, - "optimizersOperationalInputLimits": 0, - "optimizersEfficiency": 0, - "optimizersOperationalOutputLimits": 0, - "electricalMismatch": -0.0080698, - "ohmicDc": 0, - "inverterMinDcVoltage": -4.68e-05, - "inverterMaxDcCurrent": 0, - "inverterMaxDcVoltage": -0.0001489, - "inverterMinDcPower": 0, - "inverterEfficiency": -0.0214597, - "inverterMaxAcPower": -0.0220393, - "inverterOverPowerShutdown": -0.0081913, - "inverterTare": -0.0001605, - "auxiliaries": 0, - "ohmicAc": 0, - "transformer": -0.0150048, - "systemAvailability": 0, - "gridLimit": 0, - "gridAvailability": -0.005 - }, - "energyYieldResults": { - "recordCount": 744, - "percentComplete": 100, - "averageTemperature": 3.6762903, - "ghi": 90.311, - "gi": 108.7346419, - "giWithHorizon": 108.7346419, - "gainOnTiltedPlane": 0.2040022, - "globalEffectiveIrradiance": 101.2591311, - "modulePower": 119548.0379172, - "modulePowerAtSTC": 121148.9581692, - "nominalEnergy": 121207.3694807, - "pdc": 114834.5381207, - "pac": 108954.6618672, - "performanceRatio": 0.8204276, - "performanceRatioBifacial": 0.8204276, - "netEnergy": 106.7832183, - "energyYield": 89.2089013 - } - }, - { - "month": 4, - "monthlyEffects": { - "horizon": 0, - "nearShadingIrradiance": -0.0306479, - "soiling": -0.01, - "angular": -0.0196243, - "spectral": 0, - "backIrradianceGain": 0, - "bifacialAngular": 0, - "bifacialShading": 0, - "bifacialTransmission": 0, - "backNearShadingIrradiance": 0, - "modeling": -0.0004819, - "modelingCorrection": 0, - "temperature": -0.0070658, - "irradiance": -0.0141824, - "bifacialityFactor": 0, - "backIrradianceMismatch": 0, - "powerBinning": 0.00325, - "lightInducedDegradation": -0.025, - "moduleQuality": 0, - "moduleMismatch": -0.01, - "optimizersOperationalInputLimits": 0, - "optimizersEfficiency": 0, - "optimizersOperationalOutputLimits": 0, - "electricalMismatch": -0.0030452, - "ohmicDc": 0, - "inverterMinDcVoltage": -1.24e-05, - "inverterMaxDcCurrent": 0, - "inverterMaxDcVoltage": -1.9e-06, - "inverterMinDcPower": 0, - "inverterEfficiency": -0.022779, - "inverterMaxAcPower": -0.0303792, - "inverterOverPowerShutdown": -0.0347809, - "inverterTare": -0.0001234, - "auxiliaries": 0, - "ohmicAc": 0, - "transformer": -0.0150037, - "systemAvailability": 0, - "gridLimit": 0, - "gridAvailability": -0.005 - }, - "energyYieldResults": { - "recordCount": 720, - "percentComplete": 100, - "averageTemperature": 6.652375, - "ghi": 100.815, - "gi": 123.2310757, - "giWithHorizon": 123.2310757, - "gainOnTiltedPlane": 0.2223486, - "globalEffectiveIrradiance": 115.9389936, - "modulePower": 135778.2021035, - "modulePowerAtSTC": 138711.6713505, - "nominalEnergy": 138778.5504286, - "pdc": 131085.4517736, - "pac": 119871.3393978, - "performanceRatio": 0.7964527, - "performanceRatioBifacial": 0.7964527, - "netEnergy": 117.4824617, - "energyYield": 98.147723 - } - }, - { - "month": 5, - "monthlyEffects": { - "horizon": 0, - "nearShadingIrradiance": -0.0281736, - "soiling": -0.01, - "angular": -0.0163151, - "spectral": 0, - "backIrradianceGain": 0, - "bifacialAngular": 0, - "bifacialShading": 0, - "bifacialTransmission": 0, - "backNearShadingIrradiance": 0, - "modeling": -0.0004819, - "modelingCorrection": 0, - "temperature": -0.0425888, - "irradiance": -0.0084598, - "bifacialityFactor": 0, - "backIrradianceMismatch": 0, - "powerBinning": 0.00325, - "lightInducedDegradation": -0.025, - "moduleQuality": 0, - "moduleMismatch": -0.01, - "optimizersOperationalInputLimits": 0, - "optimizersEfficiency": 0, - "optimizersOperationalOutputLimits": 0, - "electricalMismatch": -0.0033007, - "ohmicDc": 0, - "inverterMinDcVoltage": -6e-07, - "inverterMaxDcCurrent": 0, - "inverterMaxDcVoltage": 0, - "inverterMinDcPower": 0, - "inverterEfficiency": -0.0223466, - "inverterMaxAcPower": -0.0491154, - "inverterOverPowerShutdown": 0, - "inverterTare": -7.32e-05, - "auxiliaries": 0, - "ohmicAc": 0, - "transformer": -0.0150022, - "systemAvailability": 0, - "gridLimit": 0, - "gridAvailability": -0.005 - }, - "energyYieldResults": { - "recordCount": 744, - "percentComplete": 100, - "averageTemperature": 12.2221774, - "ghi": 152.711, - "gi": 188.2800977, - "giWithHorizon": 188.2800977, - "gainOnTiltedPlane": 0.2329177, - "globalEffectiveIrradiance": 178.1904045, - "modulePower": 202384.2918477, - "modulePowerAtSTC": 213190.5471596, - "nominalEnergy": 213293.3358227, - "pdc": 195339.4400733, - "pac": 181581.0766294, - "performanceRatio": 0.7896444, - "performanceRatioBifacial": 0.7896444, - "netEnergy": 177.9626767, - "energyYield": 148.6743248 - } - }, - { - "month": 6, - "monthlyEffects": { - "horizon": 0, - "nearShadingIrradiance": -0.0261098, - "soiling": -0.01, - "angular": -0.0154347, - "spectral": 0, - "backIrradianceGain": 0, - "bifacialAngular": 0, - "bifacialShading": 0, - "bifacialTransmission": 0, - "backNearShadingIrradiance": 0, - "modeling": -0.0004819, - "modelingCorrection": 0, - "temperature": -0.051145, - "irradiance": -0.0098629, - "bifacialityFactor": 0, - "backIrradianceMismatch": 0, - "powerBinning": 0.00325, - "lightInducedDegradation": -0.025, - "moduleQuality": 0, - "moduleMismatch": -0.01, - "optimizersOperationalInputLimits": 0, - "optimizersEfficiency": 0, - "optimizersOperationalOutputLimits": 0, - "electricalMismatch": -0.0014667, - "ohmicDc": 0, - "inverterMinDcVoltage": 0, - "inverterMaxDcCurrent": 0, - "inverterMaxDcVoltage": 0, - "inverterMinDcPower": 0, - "inverterEfficiency": -0.0220242, - "inverterMaxAcPower": -0.0469443, - "inverterOverPowerShutdown": 0, - "inverterTare": -6.69e-05, - "auxiliaries": 0, - "ohmicAc": 0, - "transformer": -0.015002, - "systemAvailability": 0, - "gridLimit": 0, - "gridAvailability": -0.005 - }, - "energyYieldResults": { - "recordCount": 720, - "percentComplete": 100, - "averageTemperature": 15.182375, - "ghi": 146.0896, - "gi": 182.2573918, - "giWithHorizon": 182.2573918, - "gainOnTiltedPlane": 0.2475727, - "globalEffectiveIrradiance": 173.0114518, - "modulePower": 194471.3593175, - "modulePowerAtSTC": 206995.277078, - "nominalEnergy": 207095.0787253, - "pdc": 188047.3425244, - "pac": 175260.7067837, - "performanceRatio": 0.7873411, - "performanceRatioBifacial": 0.7873411, - "netEnergy": 171.7682874, - "energyYield": 143.4987353 - } - }, - { - "month": 7, - "monthlyEffects": { - "horizon": 0, - "nearShadingIrradiance": -0.0258961, - "soiling": -0.01, - "angular": -0.0148211, - "spectral": 0, - "backIrradianceGain": 0, - "bifacialAngular": 0, - "bifacialShading": 0, - "bifacialTransmission": 0, - "backNearShadingIrradiance": 0, - "modeling": -0.0004819, - "modelingCorrection": 0, - "temperature": -0.0562084, - "irradiance": -0.0061932, - "bifacialityFactor": 0, - "backIrradianceMismatch": 0, - "powerBinning": 0.00325, - "lightInducedDegradation": -0.025, - "moduleQuality": 0, - "moduleMismatch": -0.01, - "optimizersOperationalInputLimits": 0, - "optimizersEfficiency": 0, - "optimizersOperationalOutputLimits": 0, - "electricalMismatch": -0.0025003, - "ohmicDc": 0, - "inverterMinDcVoltage": -8e-07, - "inverterMaxDcCurrent": 0, - "inverterMaxDcVoltage": 0, - "inverterMinDcPower": 0, - "inverterEfficiency": -0.0218985, - "inverterMaxAcPower": -0.0414137, - "inverterOverPowerShutdown": 0, - "inverterTare": -6.16e-05, - "auxiliaries": 0, - "ohmicAc": 0, - "transformer": -0.0150018, - "systemAvailability": 0, - "gridLimit": 0, - "gridAvailability": -0.005 - }, - "energyYieldResults": { - "recordCount": 744, - "percentComplete": 100, - "averageTemperature": 16.5924328, - "ghi": 168.60545, - "gi": 215.9482875, - "giWithHorizon": 215.9482875, - "gainOnTiltedPlane": 0.2807907, - "globalEffectiveIrradiance": 205.1659645, - "modulePower": 230233.9973869, - "modulePowerAtSTC": 245466.0350859, - "nominalEnergy": 245584.3852, - "pdc": 222398.1595397, - "pac": 208506.3270083, - "performanceRatio": 0.7905558, - "performanceRatioBifacial": 0.7905558, - "netEnergy": 204.3514548, - "energyYield": 170.7191712 - } - }, - { - "month": 8, - "monthlyEffects": { - "horizon": 0, - "nearShadingIrradiance": -0.0252574, - "soiling": -0.01, - "angular": -0.0152917, - "spectral": 0, - "backIrradianceGain": 0, - "bifacialAngular": 0, - "bifacialShading": 0, - "bifacialTransmission": 0, - "backNearShadingIrradiance": 0, - "modeling": -0.0004819, - "modelingCorrection": 0, - "temperature": -0.0600437, - "irradiance": -0.0050839, - "bifacialityFactor": 0, - "backIrradianceMismatch": 0, - "powerBinning": 0.00325, - "lightInducedDegradation": -0.025, - "moduleQuality": 0, - "moduleMismatch": -0.01, - "optimizersOperationalInputLimits": 0, - "optimizersEfficiency": 0, - "optimizersOperationalOutputLimits": 0, - "electricalMismatch": -0.0047479, - "ohmicDc": 0, - "inverterMinDcVoltage": -1.99e-05, - "inverterMaxDcCurrent": 0, - "inverterMaxDcVoltage": 0, - "inverterMinDcPower": 0, - "inverterEfficiency": -0.0216055, - "inverterMaxAcPower": -0.0248329, - "inverterOverPowerShutdown": 0, - "inverterTare": -6.18e-05, - "auxiliaries": 0, - "ohmicAc": 0, - "transformer": -0.0150019, - "systemAvailability": 0, - "gridLimit": 0, - "gridAvailability": -0.005 - }, - "energyYieldResults": { - "recordCount": 744, - "percentComplete": 100, - "averageTemperature": 17.5267339, - "ghi": 168.52665, - "gi": 225.5413304, - "giWithHorizon": 225.5413304, - "gainOnTiltedPlane": 0.3383125, - "globalEffectiveIrradiance": 214.3181269, - "modulePower": 239788.6957232, - "modulePowerAtSTC": 256409.7956421, - "nominalEnergy": 256533.4222308, - "pdc": 231105.7587853, - "pac": 220479.5599547, - "performanceRatio": 0.8004158, - "performanceRatioBifacial": 0.8004158, - "netEnergy": 216.0860977, - "energyYield": 180.5268444 - } - }, - { - "month": 9, - "monthlyEffects": { - "horizon": 0, - "nearShadingIrradiance": -0.0296985, - "soiling": -0.01, - "angular": -0.0208837, - "spectral": 0, - "backIrradianceGain": 0, - "bifacialAngular": 0, - "bifacialShading": 0, - "bifacialTransmission": 0, - "backNearShadingIrradiance": 0, - "modeling": -0.0004819, - "modelingCorrection": 0, - "temperature": -0.0291727, - "irradiance": -0.0104758, - "bifacialityFactor": 0, - "backIrradianceMismatch": 0, - "powerBinning": 0.00325, - "lightInducedDegradation": -0.025, - "moduleQuality": 0, - "moduleMismatch": -0.01, - "optimizersOperationalInputLimits": 0, - "optimizersEfficiency": 0, - "optimizersOperationalOutputLimits": 0, - "electricalMismatch": -0.0071982, - "ohmicDc": 0, - "inverterMinDcVoltage": -8.73e-05, - "inverterMaxDcCurrent": 0, - "inverterMaxDcVoltage": 0, - "inverterMinDcPower": 0, - "inverterEfficiency": -0.0209536, - "inverterMaxAcPower": -0.0075309, - "inverterOverPowerShutdown": 0, - "inverterTare": -0.0001109, - "auxiliaries": 0, - "ohmicAc": 0, - "transformer": -0.0150033, - "systemAvailability": 0, - "gridLimit": 0, - "gridAvailability": -0.005 - }, - "energyYieldResults": { - "recordCount": 720, - "percentComplete": 100, - "averageTemperature": 13.8119444, - "ghi": 107.58165, - "gi": 140.0710214, - "giWithHorizon": 140.0710214, - "gainOnTiltedPlane": 0.3019973, - "globalEffectiveIrradiance": 131.7420575, - "modulePower": 151419.8968154, - "modulePowerAtSTC": 157621.1575228, - "nominalEnergy": 157697.1537068, - "pdc": 145577.5813656, - "pac": 141425.8093994, - "performanceRatio": 0.8266826, - "performanceRatioBifacial": 0.8266826, - "netEnergy": 138.6074319, - "energyYield": 115.7942762 - } - }, - { - "month": 10, - "monthlyEffects": { - "horizon": 0, - "nearShadingIrradiance": -0.0308624, - "soiling": -0.01, - "angular": -0.0276922, - "spectral": 0, - "backIrradianceGain": 0, - "bifacialAngular": 0, - "bifacialShading": 0, - "bifacialTransmission": 0, - "backNearShadingIrradiance": 0, - "modeling": -0.0004819, - "modelingCorrection": 0, - "temperature": 0.0028188, - "irradiance": -0.016817, - "bifacialityFactor": 0, - "backIrradianceMismatch": 0, - "powerBinning": 0.00325, - "lightInducedDegradation": -0.025, - "moduleQuality": 0, - "moduleMismatch": -0.01, - "optimizersOperationalInputLimits": 0, - "optimizersEfficiency": 0, - "optimizersOperationalOutputLimits": 0, - "electricalMismatch": -0.0096984, - "ohmicDc": 0, - "inverterMinDcVoltage": -8.46e-05, - "inverterMaxDcCurrent": 0, - "inverterMaxDcVoltage": -2e-06, - "inverterMinDcPower": 0, - "inverterEfficiency": -0.0210873, - "inverterMaxAcPower": -0.0018015, - "inverterOverPowerShutdown": 0, - "inverterTare": -0.0001855, - "auxiliaries": 0, - "ohmicAc": 0, - "transformer": -0.0150056, - "systemAvailability": 0, - "gridLimit": 0, - "gridAvailability": -0.005 - }, - "energyYieldResults": { - "recordCount": 744, - "percentComplete": 100, - "averageTemperature": 8.1446505, - "ghi": 73.16145, - "gi": 94.8229945, - "giWithHorizon": 94.8229945, - "gainOnTiltedPlane": 0.2960787, - "globalEffectiveIrradiance": 88.4581869, - "modulePower": 104346.5578399, - "modulePowerAtSTC": 105833.0380314, - "nominalEnergy": 105884.0648552, - "pdc": 100067.8530731, - "pac": 97754.6213946, - "performanceRatio": 0.8440884, - "performanceRatioBifacial": 0.8440884, - "netEnergy": 95.8063191, - "energyYield": 80.0389897 - } - }, - { - "month": 11, - "monthlyEffects": { - "horizon": 0, - "nearShadingIrradiance": -0.0372064, - "soiling": -0.01, - "angular": -0.0388418, - "spectral": 0, - "backIrradianceGain": 0, - "bifacialAngular": 0, - "bifacialShading": 0, - "bifacialTransmission": 0, - "backNearShadingIrradiance": 0, - "modeling": -0.0004819, - "modelingCorrection": 0, - "temperature": 0.044206, - "irradiance": -0.0432091, - "bifacialityFactor": 0, - "backIrradianceMismatch": 0, - "powerBinning": 0.00325, - "lightInducedDegradation": -0.025, - "moduleQuality": 0, - "moduleMismatch": -0.01, - "optimizersOperationalInputLimits": 0, - "optimizersEfficiency": 0, - "optimizersOperationalOutputLimits": 0, - "electricalMismatch": -0.0065205, - "ohmicDc": 0, - "inverterMinDcVoltage": -3.8e-06, - "inverterMaxDcCurrent": 0, - "inverterMaxDcVoltage": -5.87e-05, - "inverterMinDcPower": 0, - "inverterEfficiency": -0.0233415, - "inverterMaxAcPower": 0, - "inverterOverPowerShutdown": 0, - "inverterTare": -0.0004997, - "auxiliaries": 0, - "ohmicAc": 0, - "transformer": -0.015015, - "systemAvailability": 0, - "gridLimit": 0, - "gridAvailability": -0.005 - }, - "energyYieldResults": { - "recordCount": 720, - "percentComplete": 100, - "averageTemperature": 3.4939028, - "ghi": 33.5684, - "gi": 37.8550138, - "giWithHorizon": 37.8550138, - "gainOnTiltedPlane": 0.1276979, - "globalEffectiveIrradiance": 34.6806079, - "modulePower": 41462.8590943, - "modulePowerAtSTC": 41500.7570373, - "nominalEnergy": 41520.7664016, - "pdc": 39890.2865387, - "pac": 38937.2883677, - "performanceRatio": 0.8420082, - "performanceRatioBifacial": 0.8420082, - "netEnergy": 38.1608818, - "energyYield": 31.874232 - } - }, - { - "month": 12, - "monthlyEffects": { - "horizon": 0, - "nearShadingIrradiance": -0.0451719, - "soiling": -0.01, - "angular": -0.0503341, - "spectral": 0, - "backIrradianceGain": 0, - "bifacialAngular": 0, - "bifacialShading": 0, - "bifacialTransmission": 0, - "backNearShadingIrradiance": 0, - "modeling": -0.0004819, - "modelingCorrection": 0, - "temperature": 0.0733041, - "irradiance": -0.0445156, - "bifacialityFactor": 0, - "backIrradianceMismatch": 0, - "powerBinning": 0.00325, - "lightInducedDegradation": -0.025, - "moduleQuality": 0, - "moduleMismatch": -0.01, - "optimizersOperationalInputLimits": 0, - "optimizersEfficiency": 0, - "optimizersOperationalOutputLimits": 0, - "electricalMismatch": -0.0108891, - "ohmicDc": 0, - "inverterMinDcVoltage": 0, - "inverterMaxDcCurrent": 0, - "inverterMaxDcVoltage": -0.0014161, - "inverterMinDcPower": 0, - "inverterEfficiency": -0.0234538, - "inverterMaxAcPower": 0, - "inverterOverPowerShutdown": 0, - "inverterTare": -0.0005728, - "auxiliaries": 0, - "ohmicAc": 0, - "transformer": -0.0150172, - "systemAvailability": 0, - "gridLimit": 0, - "gridAvailability": -0.005 - }, - "energyYieldResults": { - "recordCount": 744, - "percentComplete": 100, - "averageTemperature": -2.4499597, - "ghi": 30.32605, - "gi": 36.0461709, - "giWithHorizon": 36.0461709, - "gainOnTiltedPlane": 0.1886207, - "globalEffectiveIrradiance": 32.3586501, - "modulePower": 39787.4920948, - "modulePowerAtSTC": 38797.1781278, - "nominalEnergy": 38815.8839763, - "pdc": 38110.1401825, - "pac": 37142.3255903, - "performanceRatio": 0.8418653, - "performanceRatioBifacial": 0.8418653, - "netEnergy": 36.4016294, - "energyYield": 30.3460205 - } - } - ] - } -] \ No newline at end of file diff --git a/docs/notebooks/sample_data/Inputs_Matera_3D_trackers/sf_outputs_20260309_165530/CalculationAttributes.json b/docs/notebooks/sample_data/Inputs_Matera_3D_trackers/sf_outputs_20260309_165530/CalculationAttributes.json deleted file mode 100644 index df04a85..0000000 --- a/docs/notebooks/sample_data/Inputs_Matera_3D_trackers/sf_outputs_20260309_165530/CalculationAttributes.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "systemAttributes": { - "location": { - "longitude": 7.368291, - "latitude": 46.893301, - "altitude": 714.25 - }, - "acCapacityInMegawatts": 0.84, - "dcCapacityInMegawatts": 1.197, - "is3D": true, - "mounting": "Single-axis trackers", - "solarFarmerCoreVersion": "0.4.429.0", - "solarFarmerApiVersion": "6.0.21" - }, - "inputDerivedData": { - "DiffuseModel": {}, - "FixedCases": {}, - "UpFrontCalcResults": { - "LocConsts": { - "sinOfLatitude": 0.7300823835293915, - "cosOfLatitude": 0.6833591392964922, - "u": 46.7972882576672, - "x": 0.6846581317253263, - "y": 0.726574000704002 - }, - "TotalModuleArea": 6206.269439999292, - "InverterData": { - "60_10_APP02": { - "ModelType": 0, - "CecCurveSplines": { - "vMin": 570, - "vNom": 630, - "vMax": 800, - "minCurveLossesSpline": {}, - "nominalCurveLossesSpline": {}, - "maxCurveLossesSpline": {} - }, - "MaxAndWeightedData": null - } - }, - "PVsystDiodeParameters": { - "TrinaSolar_TSM-375DE14A(II)_APP": { - "SeriesResistance": 0.0038750000000000004, - "ShuntResistance": 6.944444444444445, - "ShuntResistanceAtZeroIrradiance": 27.77777777777778, - "ShuntResistanceExponentialParameter": 5.5, - "PhotoCurrent": 9.885513040217399, - "DiodeReverseSaturationCurrent": 6.555951743490188e-11, - "EnergyGap": 1.12, - "DiodeIdealityFactor": 1.019, - "DiodeIdealityTemperatureCoefficient": -0.0007, - "RecombinationCurrentScaleFactorD2mutau": 0, - "TemperatureSensitivityFactorForRecombCurrentMuD2mutau": 0, - "BaseToIntrinsicLayerVoltageVbi": 0, - "ShortCircuitCurrent": 9.88, - "OpenCircuitVoltage": 0.6736111111111112, - "ShortCircuitCurrentTemperatureCoeff": 0.00488, - "ModelingCorrectionFactor": 1 - } - }, - "ModeledEfficienciesUnderSTC": { - "TrinaSolar_TSM-375DE14A(II)_APP": 0.19277654034359704 - }, - "VocEstUnderSTC": { - "TrinaSolar_TSM-375DE14A(II)_APP": 0.6738692739602735 - }, - "ModuleAreaPerModuleType": { - "TrinaSolar_TSM-375DE14A(II)_APP": 6206.269439999992 - }, - "BifacialityCoefficients": { - "TrinaSolar_TSM-375DE14A(II)_APP": 0 - }, - "HorizonSkyViewFactor": 1 - } - }, - "totalModuleArea": 6206.269439999292 -} \ No newline at end of file diff --git a/docs/notebooks/sample_data/Inputs_Matera_3D_trackers/sf_outputs_20260305_210943/Annual and Monthly Results.json b/docs/notebooks/sample_data/Inputs_Matera_3D_trackers/sf_outputs_20260505_121505/Annual and Monthly Results.json similarity index 100% rename from docs/notebooks/sample_data/Inputs_Matera_3D_trackers/sf_outputs_20260305_210943/Annual and Monthly Results.json rename to docs/notebooks/sample_data/Inputs_Matera_3D_trackers/sf_outputs_20260505_121505/Annual and Monthly Results.json diff --git a/docs/notebooks/sample_data/Inputs_Matera_3D_trackers/sf_outputs_20260305_210943/CalculationAttributes.json b/docs/notebooks/sample_data/Inputs_Matera_3D_trackers/sf_outputs_20260505_121505/CalculationAttributes.json similarity index 100% rename from docs/notebooks/sample_data/Inputs_Matera_3D_trackers/sf_outputs_20260305_210943/CalculationAttributes.json rename to docs/notebooks/sample_data/Inputs_Matera_3D_trackers/sf_outputs_20260505_121505/CalculationAttributes.json diff --git a/docs/notebooks/sample_data/testing_output_123/PVsystResults.csv b/docs/notebooks/sample_data/testing_output_123/PVsystResults.csv index 90692be..0b3955c 100644 --- a/docs/notebooks/sample_data/testing_output_123/PVsystResults.csv +++ b/docs/notebooks/sample_data/testing_output_123/PVsystResults.csv @@ -4,7 +4,7 @@ SF-Core 0.4.429+eb18e4dc1f958badef24db5b5574a09c6a064a72 -Simulation date;;09/03/26 23h54 +Simulation date;;05/05/26 10h13