# PV-Module
---
PV-Module is a Python library which focus is to simulate photovoltaic systems.
This module can simulate both Monofacial & Bifacial modules.
## Installation
---
Use the package manager [pip](https://pypi.org/project/pvmodule) to install foobar.
```bash
pip install pvmodule
```
## Usage
---
### Usage - Location
Using the city name, this method will geolocate its coordinates, elevation, timezone.
To use costum locations, just input the desired parameters and they will overwrite the geolocation.
Parameters
----------
city: str
The name of the city in which the system is going to be built.
latitude: float, default = None,
A specific latitude to overwrite the automatic search.
longitude: float, default = None,
A specific longitude to overwrite the automatic search.
elevation: float, default = None,
A specific elevation to overwrite the automatic search.
This elevation corresponds to how many meters the city is above the sea-level.
timezone: str, default = None,
The timezone in which the city is located.
A specific timezone to overwrite the automatic search.
name: str, default = None,
The name of the system. This does not affect anything.
```python
>>> from pvmodule.location import Location
>>> Location = Location()
>>> location = Location.set_location('Lisbon')
>>> print(location.get_info())
{
'Address': 'Lisboa, Portugal',
'Latitude': 38.7077507,
'Longitude': -9.1365919,
'Elevation': 10.93380069732666,
'Timezone': 'Europe/Lisbon'
}
```
### Usage - PV Module Selection
To retrieve a list of 17000+ PV modules the following method can be used with the following parameters.
Parameters
----------
url : str, default = 'https://raw.githubusercontent.com/fabio-r-almeida/pvmodule/main/PV_Modules.csv'
Url to the list of modules. Can also be a .csv file.
wattage : int, default = None
Filter modules by a desired Wattage
BIPV : str, default = None, default values allows both bi-facial and mono-facial modules to appear in the list
Filter modules by bi-facial or monofacial modules
Bi-facial = 'Y'
Mono-facial = 'N'
```python
>>> from pvmodule.modules import Modules
>>> Modules = Modules()
>>> module_list = Modules.list_modules()
Manufacturer Model Number Safety Certification Pmax PTC Technology A_c N_s N_p BIPV Isc Voc Ipmax Vpmax NOCT Tc_pmax Tc_isc Tc_voc Short Side Long Side
0 Ablytek 6MN6A270 UL 1703 270.0 242.1 Mono-c-Si 1.627 60.0 1.0 N 9.34 38.63 8.81 30.72 47.4 -0.4509 0.0521 -0.3137 0.992 1.64
1 Ablytek 6MN6A275 UL 1703 275.0 246.7 Mono-c-Si 1.627 60.0 1.0 N 9.42 38.97 8.88 30.99 47.4 -0.4509 0.0521 -0.3137 0.992 1.64
2 Ablytek 6MN6A280 UL 1703 280.0 251.3 Mono-c-Si 1.627 60.0 1.0 N 9.51 39.31 8.96 31.26 47.4 -0.4509 0.0521 -0.3137 0.992 1.64
3 Ablytek 6MN6A285 UL 1703 285.0 256.0 Mono-c-Si 1.627 60.0 1.0 N 9.59 39.65 9.04 31.53 47.4 -0.4509 0.0521 -0.3137 0.992 1.64
4 Ablytek 6MN6A290 UL 1703 290.0 260.6 Mono-c-Si 1.627 60.0 1.0 N 9.67 39.99 9.12 31.80 47.4 -0.4509 0.0521 -0.3137 0.992 1.64
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
17706 Zytech Solar ZT300P UL 1703 300.0 271.2 Multi-c-Si 1.931 72.0 1.0 N 8.71 45.96 8.26 36.32 46.4 -0.4308 0.0483 -0.3199 0.990 1.95
17707 Zytech Solar ZT305P UL 1703 305.0 275.8 Multi-c-Si 1.931 72.0 1.0 N 8.87 46.12 8.36 36.49 46.4 -0.4308 0.0483 -0.3199 0.990 1.95
17708 Zytech Solar ZT310P UL 1703 310.0 280.5 Multi-c-Si 1.931 72.0 1.0 N 8.90 46.28 8.46 36.66 46.4 -0.4308 0.0483 -0.3199 0.990 1.95
17709 Zytech Solar ZT315P UL 1703 315.0 285.1 Multi-c-Si 1.931 72.0 1.0 N 9.01 46.44 8.56 36.81 46.4 -0.4308 0.0483 -0.3199 0.990 1.95
17710 Zytech Solar ZT320P UL 1703 320.0 289.8 Multi-c-Si 1.931 72.0 1.0 N 9.12 46.60 8.66 37.00 46.4 -0.4308 0.0483 -0.3199 0.990 1.95
```
### Usage - PV Inverter Selection
List of +1400 inverters provided by CEC.
Parameters
----------
url : str, default = 'https://raw.githubusercontent.com/fabio-r-almeida/pvmodule/main/CEC%20Inverters.csv'
Url to the list of inverters. Can also be a .csv file.
vac : str, default = None
Filters the results that are equal to the AC voltage output
pmax : int, default = None
Filters the results that are equal to the Max Power input
print_list : bool, default = False
Prints list of inverters
```python
>>> from pvmodule.inverters import Inverters
>>> Inverters = Inverters()
>>> inverter_list = Inverters.list_inverters()
Name Vac Pso Paco Pdco Vdco C0 C1 C2 C3 Pnt Vdcmax Idcmax Mppt_low Mppt_high CEC_Date CEC_hybrid
0 ABB: PVI-3.0-OUTD-S-US-A [208V] 208 18.1674 3000.0 3142.30 310.0 -8.040000e-06 -0.000011 0.000999 -0.000287 0.100000 480.0 10.13650 100.0 480.0 10/15/2018 N
1 ABB: PVI-3.0-OUTD-S-US-A [240V] 240 16.8813 3000.0 3121.67 340.0 -5.700000e-06 -0.000021 0.000583 -0.000712 0.100000 480.0 9.18138 100.0 480.0 10/15/2018 N
2 ABB: PVI-3.0-OUTD-S-US-A [277V] 277 22.0466 3000.0 3106.85 390.0 -5.460000e-06 -0.000033 -0.000032 -0.001180 0.200000 480.0 7.96628 100.0 480.0 10/15/2018 N
3 ABB: PVI-3.0-OUTD-S-US-Z-A [208V] 208 18.1674 3000.0 3142.30 310.0 -8.040000e-06 -0.000011 0.000999 -0.000287 0.100000 480.0 10.13650 100.0 480.0 10/15/2018 N
4 ABB: PVI-3.0-OUTD-S-US-Z-A [240V] 240 16.8813 3000.0 3121.67 340.0 -5.700000e-06 -0.000021 0.000583 -0.000712 0.100000 480.0 9.18138 100.0 480.0 10/15/2018 N
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
1415 Yaskawa Solectria Solar: SGI 750XTM [380V] 380 3714.1400 753200.0 777216.00 615.0 -1.410000e-08 0.000006 0.001554 -0.000272 122.550000 820.0 1263.77000 545.0 820.0 NaN N
1416 Yaskawa Solectria Solar: XGI 1500-125/125 [600V] 600 236.8650 124618.0 126553.00 1050.0 -4.580000e-08 0.000012 0.003275 0.000547 3.842105 1250.0 120.52600 860.0 1250.0 7/21/2020 N
1417 Yaskawa Solectria Solar: XGI 1500-125/150 [600V] 600 236.8650 124618.0 126553.00 1050.0 -4.580000e-08 0.000012 0.003275 0.000547 3.842105 1250.0 120.52600 860.0 1250.0 7/21/2020 N
1418 Yaskawa Solectria Solar: XGI 1500-150/166 [600V] 600 111.3230 150000.0 152458.00 1100.0 -3.140000e-08 0.000014 0.000113 -0.000354 2.750000 1250.0 138.59800 860.0 1250.0 7/21/2020 N
1419 Yaskawa Solectria Solar: XGI 1500-166/166 [600V] 600 253.1140 165139.0 167945.00 1050.0 -5.060000e-08 0.000014 0.003122 0.000368 3.842105 1250.0 159.94800 860.0 1250.0 7/21/2020 N
```
# Sample Usages
---
```python
>>> from pvmodule.location import Location
>>> from pvmodule.pvgis import PVGIS
>>> Location = Location()
>>> location = Location.set_location('Lisbon')
>>> print(location.get_info())
{
'Address': 'Lisboa, Portugal',
'Latitude': 38.7077507,
'Longitude': -9.1365919,
'Elevation': 10.93380069732666,
'Timezone': 'Europe/Lisbon'
}
```
## Retrieving Hourly data from PVGIS
```python
>>> from pvmodule.location import Location
>>> from pvmodule.pvgis import PVGIS
>>> Location = Location()
>>> location = Location.set_location('Lisbon')
>>> PVGIS = PVGIS()
>>> input, output, meta = PVGIS.retrieve_hourly(
latitude=location.latitude,
longitude=location.longitude
)
>>> print(output)
G(i) H_sun T2m WS10m Int
time
2005-01-01 00:10:00 0.0 0.0 11.29 3.86 0.0
2005-01-01 01:10:00 0.0 0.0 11.19 4.14 0.0
2005-01-01 02:10:00 0.0 0.0 11.08 4.07 0.0
2005-01-01 03:10:00 0.0 0.0 10.94 3.66 0.0
2005-01-01 04:10:00 0.0 0.0 10.84 3.24 0.0
... ... ... ... ... ...
2020-12-31 19:10:00 0.0 0.0 12.50 8.28 0.0
2020-12-31 20:10:00 0.0 0.0 12.12 8.34 0.0
2020-12-31 21:10:00 0.0 0.0 11.58 8.48 0.0
2020-12-31 22:10:00 0.0 0.0 11.41 8.28 0.0
2020-12-31 23:10:00 0.0 0.0 11.36 8.14 0.0
[140256 rows x 5 columns]
```
## Retrieving daily data from a specific month
```python
>>> from pvmodule.location import Location
>>> from pvmodule.pvgis import PVGIS
>>> Location = Location()
>>> location = Location.set_location('Lisbon')
>>> PVGIS = PVGIS()
>>> input, output, meta = PVGIS.retrieve_daily(
latitude=location.latitude,
longitude=location.longitude,
month=6
)
>>> print(output)
month G(i) Gb(i) Gd(i) T2m
time
00:00 6 0.00 0.00 0.00 17.49
01:00 6 0.00 0.00 0.00 17.35
02:00 6 0.00 0.00 0.00 17.21
03:00 6 0.00 0.00 0.00 17.09
04:00 6 0.00 0.00 0.00 16.98
05:00 6 0.00 0.00 0.00 16.91
06:00 6 88.17 36.65 51.52 16.97
07:00 6 244.22 136.17 108.05 17.53
08:00 6 406.34 251.83 154.51 18.42
09:00 6 560.33 366.56 193.77 19.39
10:00 6 691.23 479.46 211.78 20.29
11:00 6 788.61 558.10 230.51 21.05
12:00 6 869.24 632.05 237.19 21.59
13:00 6 877.81 644.56 233.24 21.88
14:00 6 828.50 609.14 219.36 21.92
15:00 6 738.56 540.56 198.01 21.75
16:00 6 594.07 420.05 174.01 21.38
17:00 6 426.24 280.32 145.91 20.88
18:00 6 244.49 141.33 103.16 20.25
19:00 6 82.36 35.16 47.20 19.45
20:00 6 0.00 0.00 0.00 18.68
21:00 6 0.00 0.00 0.00 18.18
22:00 6 0.00 0.00 0.00 17.90
23:00 6 0.00 0.00 0.00 17.69
```
## Retrieving Bifacial data
```python
>>> from pvmodule.location import Location
>>> from pvmodule.pvgis import PVGIS
>>> Location = Location()
>>> location = Location.set_location('Lisbon')
>>> PVGIS = PVGIS()
>>> _,bifacial_data,_ = PVGIS().retrieve_all_year_bifacial(
location,
azimuth=90
)
>>> print(bifacial_data)
Global irradiance on a fixed plane Global irradiance on 2-axis tracking plane Direct irradiance on a fixed plane Direct normal irradiance Diffuse irradiance on a fixed plane Diffuse irradiance on 2-axis tracking plane 2m Air Temperature 10m Wind speed month
time
00:00 0.0 0.0 0.0 0.0 0.0 0.0 11.29 2.978333 1.0
01:00 0.0 0.0 0.0 0.0 0.0 0.0 11.17 2.827083 1.0
02:00 0.0 0.0 0.0 0.0 0.0 0.0 10.90 2.719583 1.0
03:00 0.0 0.0 0.0 0.0 0.0 0.0 10.73 2.658750 1.0
04:00 0.0 0.0 0.0 0.0 0.0 0.0 10.61 2.638333 1.0
... ... ... ... ... ... ... ... ... ...
19:00 0.0 0.0 0.0 0.0 0.0 0.0 13.25 2.841250 12.0
20:00 0.0 0.0 0.0 0.0 0.0 0.0 12.71 2.850000 12.0
21:00 0.0 0.0 0.0 0.0 0.0 0.0 12.61 2.858333 12.0
22:00 0.0 0.0 0.0 0.0 0.0 0.0 12.26 2.861250 12.0
23:00 0.0 0.0 0.0 0.0 0.0 0.0 12.17 2.870000 12.0
288 rows × 9 columns
```
## Retrieving Monthly data
```python
>>> from pvmodule.location import Location
>>> from pvmodule.pvgis import PVGIS
>>> Location = Location()
>>> location = Location.set_location('Lisbon')
>>> PVGIS = PVGIS()
>>> input, output, meta = PVGIS.retrieve_monthly(
latitude = location.latitude,
longitude = location.longitude,
startyear=2020,
endyear=2020
)
>>> print(output)
year month H(h)_m Hb(n)_m Kd T2m
0 2020 1 71.23 107.98 0.42 12.8
1 2020 2 98.98 131.26 0.38 13.8
2 2020 3 147.58 168.06 0.36 13.7
3 2020 4 157.34 145.53 0.42 14.8
4 2020 5 218.93 220.23 0.31 18.1
5 2020 6 231.53 235.23 0.30 18.7
6 2020 7 244.94 261.47 0.26 21.2
7 2020 8 208.59 217.80 0.30 20.6
8 2020 9 159.27 167.80 0.36 20.3
9 2020 10 117.98 143.74 0.39 17.1
10 2020 11 68.78 81.66 0.52 15.4
11 2020 12 63.66 93.93 0.46 12.9
```
# from pvmodule.graph import Graph
## Yearly irradiance distribuition
``` python
>>> from pvmodule.location import Location
>>> from pvmodule.pvgis import PVGIS
>>> from pvmodule.graph import Graph
>>> location = Location().set_location(
latitude = 38.6973,
longitude = -9.30836
)
>>> _,normal_data,_ = PVGIS().retrieve_all_year(
location,
panel_tilt=35,
azimuth=0
)
>>> _,bifacial_data,_ = PVGIS().retrieve_all_year_bifacial(
location,
azimuth=90
)
>>> Graph().Comparison(
location,
bifacial_data,
normal_data,
'Global irradiance on a fixed plane'
)
```
![alt text](https://raw.githubusercontent.com/fabio-r-almeida/pvmodule/main/documentation/1.png)
``` python
>>> from pvmodule.location import Location
>>> from pvmodule.graph import Graph
>>> location = Location().set_location(latitude = 38.6973,
longitude = -9.30836
)
>>> Graph().Heatmap(
location,
panel_tilt=35,
surface_azimuth=0,
year=2020
)
```
![alt text](https://raw.githubusercontent.com/fabio-r-almeida/pvmodule/main/documentation/2.png)
## Comparison of monthly average irradiance from vertical vs. 35 horizontal configurations
``` python
>>> from pvmodule.location import Location
>>> from pvmodule.pvgis import PVGIS
>>> from pvmodule.graph import Graph
>>> location = Location().set_location(latitude = 38.6973,
longitude = -9.30836
)
>>> _,bi_data,_ = PVGIS().retrieve_all_year_bifacial(
location,
azimuth = 90)
>>> _,normal_data,_ = PVGIS().retrieve_all_year(
location,
panel_tilt = 35,
azimuth=0)
>>> Graph().plot_multiple_monthly(
[bi_data.where(bi_data["month"]==7), normal_data.where(normal_data["month"]==7)],
'Global irradiance on a fixed plane'
)
```
![alt text](https://raw.githubusercontent.com/fabio-r-almeida/pvmodule/main/documentation/3.png)
## Irradiance dependancy due to the changes of azimuth
``` python
>>> from pvmodule.location import Location
>>> from pvmodule.graph import Graph
>>> location = Location().set_location(latitude = 38.6973,
longitude = -9.30836
)
>>> Graph().azimuth_test(location)
```
![alt text](https://raw.githubusercontent.com/fabio-r-almeida/pvmodule/main/documentation/4.png)
``` python
>>> from pvmodule.location import Location
>>> from pvmodule.graph import Graph
>>> location = Location().set_location(latitude = 38.6973,
longitude = -9.30836
)
>>> Graph().Bifacial_azimuth_test(location)
```
![alt text](https://raw.githubusercontent.com/fabio-r-almeida/pvmodule/main/documentation/5.png)
## Maximum, Nominal and Minimum efficiencies of an specified inverter
``` python
>>> from pvmodule.module import Modules
>>> from pvmodule.inverter import Inverters
>>> from pvmodule.graph import Graph
>>> module = Modules().module(
'Bi_LG405N2T-L5',
losses=5,
number_of_modules=20
)
>>> inverter, module = Inverters().auto_select_inverter(module)
>>> Graph().Efficiency_curve_of_inverter(inverter)
```
![alt text](https://raw.githubusercontent.com/fabio-r-almeida/pvmodule/main/documentation/6.png)
## Yearly irradiance curves (of multiple locations)
``` python
>>> from pvmodule.location import Location
>>> from pvmodule.pvgis import PVGIS
>>> from pvmodule.graph import Graph
>>> location = Location().set_location(
latitude = 64.14466555827349,
longitude = -21.95256166366471
)
>>> _,location1,_ = PVGIS().retrieve_all_year(
location,
panel_tilt = 35,
azimuth=0
)
>>> location = Location().set_location(
latitude = 1.3490983309841909,
longitude = 103.80140706509002
)
>>> _,location2,_ = PVGIS().retrieve_all_year(
location,
panel_tilt = 35,
azimuth=0
)
>>> location = Location().set_location(
latitude = 38.6973,
longitude = -9.30836
)
>>> _,location3,_ = PVGIS().retrieve_all_year(
location,
panel_tilt = 35,
azimuth=0
)
>>> Graph().plot_multiple_yearly(
[
('Reykjavik, Iceland',location1)
],
'Global irradiance on a fixed plane'
)
#>>> Graph().plot_multiple_yearly(
# [
# ('Reykjavik, Iceland',location1),
# ('Singapore, Singapore',location2),
# ('Lisbon, Portugal',location3)
# ],
# 'Global irradiance on a fixed plane'
# )
```
![alt text](https://raw.githubusercontent.com/fabio-r-almeida/pvmodule/main/documentation/7.png)
## TODO
---
- Create a simulation method, in which:
- Calculate pv production
- Estimate output energy
- ~~Create annual heatmap~~
- ~~Average Irradiance dependancy due to the changes of azimuth~~
- ~~Inverter efficiencies curves~~
## Versions
---
All notable changes to this project will be documented in this file.
### [0.0.66] to [0.0.130] - 2023-03-20
### Added
- Added new *Graph* class.
- Multithreading yearly horizontal and vertical data acquisition with
- *PVGIS().retrieve_all_year_bifacial()*
- *PVGIS().retrieve_all_year()*
### Fixed
- Improved inverter auto-selection.
- Added error exception in both *Inverter* and *PVGIS* class.
### Removed
- Irradiance class will soon be removed due to incorrect irradiance estimations.
- This issue is believed to be cause due to the incorrect shadow calculation of the module.
### [0.0.62] to [0.0.65] - 2023-03-04
### Added
- Added a second order spline in order to smoothen out the values from PVGIS.
- Changed the timeframe from 1 hour to 5 minutes.
- Change TMY dates for future 2030 dates.
### [0.0.44] to [0.0.61] - 2023-03-04
### Fixed
- Solved issue where Irradiance calculations could be divided by zero and thus creating unlimited irradiance reaching the PV modules.
- Updated the CEC_Inverters database by adding:
- Short circuit currents per inverter;
- Number of MPPT strings per inverter.
- Bug fixing.
### [0.0.35] to [0.0.43] - 2023-02-28
### Added
- Added reverse Geolocalization using coordinates to determine the address.
### Fixed
- Bug fixing.
### Removed
- Removed Timezone from Location class due to unknown issues.
### [0.0.34] - 2023-01-31
### Added
- Added new class to calculare front and rear irradiance.
### Fixed
- Corrected/updated formulas to calculate spacing between modules.
- Resolved minor bugs.
## Contributing
---
Pull requests are welcome. For major changes, please open an issue first
to discuss what you would like to change.
Please make sure to update tests as appropriate.
## License
---
[MIT](https://choosealicense.com/licenses/mit/)
## Copyright
---
Copyright (c), 2023, Fabio Ramalho de Almeida
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Raw data
{
"_id": null,
"home_page": "",
"name": "pvmodule",
"maintainer": "",
"docs_url": null,
"requires_python": "",
"maintainer_email": "",
"keywords": "Python,PVGIS,Simulator,Photovoltaic,Solar energy,Solar panels,Solar simulation",
"author": "F\u00e1bio Almeida",
"author_email": "<fabio-r-almeida@outlook.com>",
"download_url": "https://files.pythonhosted.org/packages/54/82/b9e37f94b2ab39d52bfbc4b9b2445378819c7faa354393aa6ad5db399eb3/pvmodule-0.0.189.tar.gz",
"platform": null,
"description": "# PV-Module\n---\n\nPV-Module is a Python library which focus is to simulate photovoltaic systems.\nThis module can simulate both Monofacial & Bifacial modules.\n\n## Installation\n---\n\nUse the package manager [pip](https://pypi.org/project/pvmodule) to install foobar.\n\n```bash\npip install pvmodule\n```\n\n## Usage\n---\n### Usage - Location\n\nUsing the city name, this method will geolocate its coordinates, elevation, timezone.\nTo use costum locations, just input the desired parameters and they will overwrite the geolocation.\n\n Parameters\n ----------\n city: str\n The name of the city in which the system is going to be built.\n latitude: float, default = None,\n A specific latitude to overwrite the automatic search.\n longitude: float, default = None,\n A specific longitude to overwrite the automatic search.\n elevation: float, default = None,\n A specific elevation to overwrite the automatic search.\n This elevation corresponds to how many meters the city is above the sea-level.\n timezone: str, default = None,\n The timezone in which the city is located.\n A specific timezone to overwrite the automatic search.\n name: str, default = None,\n The name of the system. This does not affect anything.\n\n```python\n>>> from pvmodule.location import Location\n\n>>> Location = Location()\n>>> location = Location.set_location('Lisbon')\n\n>>> print(location.get_info())\n\n{\n 'Address': 'Lisboa, Portugal',\n 'Latitude': 38.7077507,\n 'Longitude': -9.1365919,\n 'Elevation': 10.93380069732666,\n 'Timezone': 'Europe/Lisbon'\n }\n```\n\n\n### Usage - PV Module Selection\nTo retrieve a list of 17000+ PV modules the following method can be used with the following parameters.\n\n\tParameters\n\t----------\n\turl : str, default = 'https://raw.githubusercontent.com/fabio-r-almeida/pvmodule/main/PV_Modules.csv'\n\t\tUrl to the list of modules. Can also be a .csv file.\n\twattage : int, default = None\n\t\tFilter modules by a desired Wattage\n\tBIPV : str, default = None, default values allows both bi-facial and mono-facial modules to appear in the list\n\t\tFilter modules by bi-facial or monofacial modules\n\t\t Bi-facial = 'Y'\n\t\t Mono-facial = 'N'\n```python\n>>> from pvmodule.modules import Modules\n\n>>> Modules = Modules()\n>>> module_list = Modules.list_modules()\n\n \tManufacturer \t\tModel Number \tSafety Certification \tPmax \tPTC \tTechnology \tA_c \tN_s \tN_p \tBIPV \tIsc \tVoc \tIpmax \tVpmax \tNOCT \tTc_pmax \tTc_isc \tTc_voc \tShort Side \tLong Side\n0 \tAblytek \t\t\t6MN6A270 \t\tUL 1703 \t\t\t\t270.0 \t242.1 \tMono-c-Si \t1.627 \t60.0 \t1.0 \tN \t\t9.34 \t38.63 \t8.81 \t30.72 \t47.4 \t-0.4509 \t0.0521 \t-0.3137 \t0.992 \t1.64\n1 \tAblytek \t\t\t6MN6A275 \t\tUL 1703 \t\t\t\t275.0 \t246.7 \tMono-c-Si \t1.627 \t60.0 \t1.0 \tN \t\t9.42 \t38.97 \t8.88 \t30.99 \t47.4 \t-0.4509 \t0.0521 \t-0.3137 \t0.992 \t1.64\n2 \tAblytek \t\t\t6MN6A280 \t\tUL 1703 \t\t\t\t280.0 \t251.3 \tMono-c-Si \t1.627 \t60.0 \t1.0 \tN \t\t9.51 \t39.31 \t8.96 \t31.26 \t47.4 \t-0.4509 \t0.0521 \t-0.3137 \t0.992 \t1.64\n3 \tAblytek \t\t\t6MN6A285 \t\tUL 1703 \t\t\t\t285.0 \t256.0 \tMono-c-Si \t1.627 \t60.0 \t1.0 \tN \t\t9.59 \t39.65 \t9.04 \t31.53 \t47.4 \t-0.4509 \t0.0521 \t-0.3137 \t0.992 \t1.64\n4 \tAblytek \t\t\t6MN6A290 \t\tUL 1703 \t\t\t\t290.0 \t260.6 \tMono-c-Si \t1.627 \t60.0 \t1.0 \tN \t\t9.67 \t39.99 \t9.12 \t31.80 \t47.4 \t-0.4509 \t0.0521 \t-0.3137 \t0.992 \t1.64\n... \t... \t\t\t... \t\t\t... \t\t\t\t\t... \t... \t... \t\t... \t... \t... \t... \t... \t... \t... \t... \t... \t... \t\t... \t... \t\t... \t...\n17706 \tZytech Solar \tZT300P \t\t\tUL 1703 \t\t\t\t300.0 \t271.2 \tMulti-c-Si \t1.931 \t72.0 \t1.0 \tN \t\t8.71 \t45.96 \t8.26 \t36.32 \t46.4 \t-0.4308 \t0.0483 \t-0.3199 \t0.990 \t1.95\n17707 \tZytech Solar \tZT305P \t\t\tUL 1703 \t\t\t\t305.0 \t275.8 \tMulti-c-Si \t1.931 \t72.0 \t1.0 \tN \t\t8.87 \t46.12 \t8.36 \t36.49 \t46.4 \t-0.4308 \t0.0483 \t-0.3199 \t0.990 \t1.95\n17708 \tZytech Solar \tZT310P \t\t\tUL 1703 \t\t\t\t310.0 \t280.5 \tMulti-c-Si \t1.931 \t72.0 \t1.0 \tN \t\t8.90 \t46.28 \t8.46 \t36.66 \t46.4 \t-0.4308 \t0.0483 \t-0.3199 \t0.990 \t1.95\n17709 \tZytech Solar \tZT315P \t\t\tUL 1703 \t\t\t\t315.0 \t285.1 \tMulti-c-Si \t1.931 \t72.0 \t1.0 \tN \t\t9.01 \t46.44 \t8.56 \t36.81 \t46.4 \t-0.4308 \t0.0483 \t-0.3199 \t0.990 \t1.95\n17710 \tZytech Solar \tZT320P \t\t\tUL 1703 \t\t\t\t320.0 \t289.8 \tMulti-c-Si \t1.931 \t72.0 \t1.0 \tN \t\t9.12 \t46.60 \t8.66 \t37.00 \t46.4 \t-0.4308 \t0.0483 \t-0.3199 \t0.990 \t1.95\n```\n\n\n### Usage - PV Inverter Selection\nList of +1400 inverters provided by CEC.\n\n Parameters\n ----------\n url : str, default = 'https://raw.githubusercontent.com/fabio-r-almeida/pvmodule/main/CEC%20Inverters.csv'\n Url to the list of inverters. Can also be a .csv file.\n vac : str, default = None\n Filters the results that are equal to the AC voltage output\n\n pmax : int, default = None\n Filters the results that are equal to the Max Power input\n\n print_list : bool, default = False\n Prints list of inverters\n\n```python\n>>> from pvmodule.inverters import Inverters\n\n>>> Inverters = Inverters()\n>>> inverter_list = Inverters.list_inverters()\n\n\t\tName \t\t\t\t\t\t\t\t\t\t\t\tVac \tPso \t\tPaco \t\tPdco \t\tVdco \tC0 \t\t\t\tC1 \t\t\tC2 \t\t\tC3 \t\t\tPnt \t\tVdcmax \tIdcmax \t\tMppt_low \tMppt_high \tCEC_Date \tCEC_hybrid\n0 \t\tABB: PVI-3.0-OUTD-S-US-A [208V] \t\t\t\t\t208 \t18.1674 \t3000.0 \t\t3142.30 \t310.0 \t-8.040000e-06 \t-0.000011 \t0.000999 \t-0.000287 \t0.100000 \t480.0 \t10.13650 \t100.0 \t\t480.0 \t\t10/15/2018 \t\tN\n1 \t\tABB: PVI-3.0-OUTD-S-US-A [240V] \t\t\t\t\t240 \t16.8813 \t3000.0 \t\t3121.67 \t340.0 \t-5.700000e-06 \t-0.000021 \t0.000583 \t-0.000712 \t0.100000 \t480.0 \t9.18138 \t100.0 \t\t480.0 \t\t10/15/2018 \t\tN\n2 \t\tABB: PVI-3.0-OUTD-S-US-A [277V] \t\t\t\t\t277 \t22.0466 \t3000.0 \t\t3106.85 \t390.0 \t-5.460000e-06 \t-0.000033 \t-0.000032 \t-0.001180 \t0.200000 \t480.0 \t7.96628 \t100.0 \t\t480.0 \t\t10/15/2018 \t\tN\n3 \t\tABB: PVI-3.0-OUTD-S-US-Z-A [208V] \t\t\t\t\t208 \t18.1674 \t3000.0 \t\t3142.30 \t310.0 \t-8.040000e-06 \t-0.000011 \t0.000999 \t-0.000287 \t0.100000 \t480.0 \t10.13650 \t100.0 \t\t480.0 \t\t10/15/2018 \t\tN\n4 \t\tABB: PVI-3.0-OUTD-S-US-Z-A [240V] \t\t\t\t\t240 \t16.8813 \t3000.0 \t\t3121.67 \t340.0 \t-5.700000e-06 \t-0.000021 \t0.000583 \t-0.000712 \t0.100000 \t480.0 \t9.18138 \t100.0 \t\t480.0 \t\t10/15/2018 \t\tN\n... \t... \t\t\t\t\t\t\t\t\t\t\t\t... \t... \t\t... \t\t... \t\t... \t... \t\t\t... \t\t... \t... \t\t\t... \t\t... \t... \t\t... \t\t... \t\t... \t\t\t...\n1415 \tYaskawa Solectria Solar: SGI 750XTM [380V] \t\t\t380 \t3714.1400 \t753200.0 \t777216.00 \t615.0 \t-1.410000e-08 \t0.000006 \t0.001554 \t-0.000272 \t122.550000 \t820.0 \t1263.77000 \t545.0 \t\t820.0 \t\tNaN \t\t\tN\n1416 \tYaskawa Solectria Solar: XGI 1500-125/125 [600V] \t600 \t236.8650 \t124618.0 \t126553.00 \t1050.0 \t-4.580000e-08 \t0.000012 \t0.003275 \t0.000547 \t3.842105 \t1250.0 \t120.52600 \t860.0 \t\t1250.0 \t\t7/21/2020 \t\tN\n1417 \tYaskawa Solectria Solar: XGI 1500-125/150 [600V] \t600 \t236.8650 \t124618.0 \t126553.00 \t1050.0 \t-4.580000e-08 \t0.000012 \t0.003275 \t0.000547 \t3.842105 \t1250.0 \t120.52600 \t860.0 \t\t1250.0 \t\t7/21/2020 \t\tN\n1418 \tYaskawa Solectria Solar: XGI 1500-150/166 [600V] \t600 \t111.3230 \t150000.0 \t152458.00 \t1100.0 \t-3.140000e-08 \t0.000014 \t0.000113 \t-0.000354 \t2.750000 \t1250.0 \t138.59800 \t860.0 \t\t1250.0 \t\t7/21/2020 \t\tN\n1419 \tYaskawa Solectria Solar: XGI 1500-166/166 [600V] \t600 \t253.1140 \t165139.0 \t167945.00 \t1050.0 \t-5.060000e-08 \t0.000014 \t0.003122 \t0.000368 \t3.842105 \t1250.0 \t159.94800 \t860.0 \t\t1250.0 \t\t7/21/2020 \t\tN\n\n```\n\n\n\n# Sample Usages\n---\n\n```python\n>>> from pvmodule.location import Location\n>>> from pvmodule.pvgis import PVGIS\n\n>>> Location = Location()\n>>> location = Location.set_location('Lisbon')\n\n>>> print(location.get_info())\n\n{\n 'Address': 'Lisboa, Portugal',\n 'Latitude': 38.7077507,\n 'Longitude': -9.1365919,\n 'Elevation': 10.93380069732666,\n 'Timezone': 'Europe/Lisbon'\n }\n\n\n```\n\n## Retrieving Hourly data from PVGIS\n\n```python\n>>> from pvmodule.location import Location\n>>> from pvmodule.pvgis import PVGIS\n\n>>> Location = Location()\n>>> location = Location.set_location('Lisbon')\n\n>>> PVGIS = PVGIS()\n>>> input, output, meta = PVGIS.retrieve_hourly(\n latitude=location.latitude,\n longitude=location.longitude\n )\n>>> print(output)\n\n G(i) H_sun T2m WS10m Int\ntime\n2005-01-01 00:10:00 0.0 0.0 11.29 3.86 0.0\n2005-01-01 01:10:00 0.0 0.0 11.19 4.14 0.0\n2005-01-01 02:10:00 0.0 0.0 11.08 4.07 0.0\n2005-01-01 03:10:00 0.0 0.0 10.94 3.66 0.0\n2005-01-01 04:10:00 0.0 0.0 10.84 3.24 0.0\n... ... ... ... ... ...\n2020-12-31 19:10:00 0.0 0.0 12.50 8.28 0.0\n2020-12-31 20:10:00 0.0 0.0 12.12 8.34 0.0\n2020-12-31 21:10:00 0.0 0.0 11.58 8.48 0.0\n2020-12-31 22:10:00 0.0 0.0 11.41 8.28 0.0\n2020-12-31 23:10:00 0.0 0.0 11.36 8.14 0.0\n\n[140256 rows x 5 columns]\n```\n\n## Retrieving daily data from a specific month\n\n```python\n>>> from pvmodule.location import Location\n>>> from pvmodule.pvgis import PVGIS\n\n>>> Location = Location()\n>>> location = Location.set_location('Lisbon')\n\n>>> PVGIS = PVGIS()\n>>> input, output, meta = PVGIS.retrieve_daily(\n latitude=location.latitude,\n longitude=location.longitude,\n month=6\n )\n>>> print(output)\n\n month G(i) Gb(i) Gd(i) T2m\ntime\n00:00 6 0.00 0.00 0.00 17.49\n01:00 6 0.00 0.00 0.00 17.35\n02:00 6 0.00 0.00 0.00 17.21\n03:00 6 0.00 0.00 0.00 17.09\n04:00 6 0.00 0.00 0.00 16.98\n05:00 6 0.00 0.00 0.00 16.91\n06:00 6 88.17 36.65 51.52 16.97\n07:00 6 244.22 136.17 108.05 17.53\n08:00 6 406.34 251.83 154.51 18.42\n09:00 6 560.33 366.56 193.77 19.39\n10:00 6 691.23 479.46 211.78 20.29\n11:00 6 788.61 558.10 230.51 21.05\n12:00 6 869.24 632.05 237.19 21.59\n13:00 6 877.81 644.56 233.24 21.88\n14:00 6 828.50 609.14 219.36 21.92\n15:00 6 738.56 540.56 198.01 21.75\n16:00 6 594.07 420.05 174.01 21.38\n17:00 6 426.24 280.32 145.91 20.88\n18:00 6 244.49 141.33 103.16 20.25\n19:00 6 82.36 35.16 47.20 19.45\n20:00 6 0.00 0.00 0.00 18.68\n21:00 6 0.00 0.00 0.00 18.18\n22:00 6 0.00 0.00 0.00 17.90\n23:00 6 0.00 0.00 0.00 17.69\n```\n\n## Retrieving Bifacial data\n\n```python\n>>> from pvmodule.location import Location\n>>> from pvmodule.pvgis import PVGIS\n\n>>> Location = Location()\n>>> location = Location.set_location('Lisbon')\n\n>>> PVGIS = PVGIS()\n>>> _,bifacial_data,_ = PVGIS().retrieve_all_year_bifacial(\n location,\n azimuth=90\n )\n>>> print(bifacial_data)\n\nGlobal irradiance on a fixed plane \tGlobal irradiance on 2-axis tracking plane \tDirect irradiance on a fixed plane \tDirect normal irradiance \tDiffuse irradiance on a fixed plane \tDiffuse irradiance on 2-axis tracking plane \t2m Air Temperature \t10m Wind speed \tmonth\ntime \t\t\t\t\t\t\t\t\t\n00:00 \t0.0 \t0.0 \t0.0 \t0.0 \t0.0 \t0.0 \t11.29 \t2.978333 \t1.0\n01:00 \t0.0 \t0.0 \t0.0 \t0.0 \t0.0 \t0.0 \t11.17 \t2.827083 \t1.0\n02:00 \t0.0 \t0.0 \t0.0 \t0.0 \t0.0 \t0.0 \t10.90 \t2.719583 \t1.0\n03:00 \t0.0 \t0.0 \t0.0 \t0.0 \t0.0 \t0.0 \t10.73 \t2.658750 \t1.0\n04:00 \t0.0 \t0.0 \t0.0 \t0.0 \t0.0 \t0.0 \t10.61 \t2.638333 \t1.0\n... \t... \t... \t... \t... \t... \t... \t... \t... \t...\n19:00 \t0.0 \t0.0 \t0.0 \t0.0 \t0.0 \t0.0 \t13.25 \t2.841250 \t12.0\n20:00 \t0.0 \t0.0 \t0.0 \t0.0 \t0.0 \t0.0 \t12.71 \t2.850000 \t12.0\n21:00 \t0.0 \t0.0 \t0.0 \t0.0 \t0.0 \t0.0 \t12.61 \t2.858333 \t12.0\n22:00 \t0.0 \t0.0 \t0.0 \t0.0 \t0.0 \t0.0 \t12.26 \t2.861250 \t12.0\n23:00 \t0.0 \t0.0 \t0.0 \t0.0 \t0.0 \t0.0 \t12.17 \t2.870000 \t12.0\n\n288 rows \u00c3\u2014 9 columns\n\n```\n\n## Retrieving Monthly data\n\n```python\n>>> from pvmodule.location import Location\n>>> from pvmodule.pvgis import PVGIS\n\n>>> Location = Location()\n>>> location = Location.set_location('Lisbon')\n\n>>> PVGIS = PVGIS()\n>>> input, output, meta = PVGIS.retrieve_monthly(\n latitude = location.latitude,\n longitude = location.longitude,\n startyear=2020,\n endyear=2020\n )\n>>> print(output)\n\n year month H(h)_m Hb(n)_m Kd T2m\n0 2020 1 71.23 107.98 0.42 12.8\n1 2020 2 98.98 131.26 0.38 13.8\n2 2020 3 147.58 168.06 0.36 13.7\n3 2020 4 157.34 145.53 0.42 14.8\n4 2020 5 218.93 220.23 0.31 18.1\n5 2020 6 231.53 235.23 0.30 18.7\n6 2020 7 244.94 261.47 0.26 21.2\n7 2020 8 208.59 217.80 0.30 20.6\n8 2020 9 159.27 167.80 0.36 20.3\n9 2020 10 117.98 143.74 0.39 17.1\n10 2020 11 68.78 81.66 0.52 15.4\n11 2020 12 63.66 93.93 0.46 12.9\n\n```\n\n# from pvmodule.graph import Graph\n\n## Yearly irradiance distribuition\n\n``` python\n>>> from pvmodule.location import Location\n>>> from pvmodule.pvgis import PVGIS\n>>> from pvmodule.graph import Graph\n\n>>> location = Location().set_location(\n latitude = 38.6973, \n longitude = -9.30836\n )\n>>> _,normal_data,_ = PVGIS().retrieve_all_year(\n location, \n panel_tilt=35, \n azimuth=0\n )\n>>> _,bifacial_data,_ = PVGIS().retrieve_all_year_bifacial(\n location, \n azimuth=90\n )\n>>> Graph().Comparison(\n location,\n bifacial_data, \n normal_data,\n 'Global irradiance on a fixed plane'\n )\n```\n\n![alt text](https://raw.githubusercontent.com/fabio-r-almeida/pvmodule/main/documentation/1.png)\n\n``` python\n>>> from pvmodule.location import Location\n>>> from pvmodule.graph import Graph\n\n>>> location = Location().set_location(latitude = 38.6973,\n longitude = -9.30836\n )\n>>> Graph().Heatmap(\n location, \n panel_tilt=35, \n surface_azimuth=0, \n year=2020\n )\n```\n\n![alt text](https://raw.githubusercontent.com/fabio-r-almeida/pvmodule/main/documentation/2.png)\n\n## Comparison of monthly average irradiance from vertical vs. 35 horizontal configurations\n\n``` python\n>>> from pvmodule.location import Location\n>>> from pvmodule.pvgis import PVGIS\n>>> from pvmodule.graph import Graph\n\n>>> location = Location().set_location(latitude = 38.6973,\n longitude = -9.30836\n )\n\n>>> _,bi_data,_ = PVGIS().retrieve_all_year_bifacial(\n location,\n azimuth = 90)\n>>> _,normal_data,_ = PVGIS().retrieve_all_year(\n location, \n panel_tilt = 35, \n azimuth=0)\n>>> Graph().plot_multiple_monthly(\n [bi_data.where(bi_data[\"month\"]==7), normal_data.where(normal_data[\"month\"]==7)],\n 'Global irradiance on a fixed plane'\n )\n\n```\n\n![alt text](https://raw.githubusercontent.com/fabio-r-almeida/pvmodule/main/documentation/3.png)\n\n\n## Irradiance dependancy due to the changes of azimuth\n``` python\n>>> from pvmodule.location import Location\n>>> from pvmodule.graph import Graph\n\n>>> location = Location().set_location(latitude = 38.6973,\n longitude = -9.30836\n )\n\n>>> Graph().azimuth_test(location)\n\n```\n\n![alt text](https://raw.githubusercontent.com/fabio-r-almeida/pvmodule/main/documentation/4.png)\n\n``` python\n>>> from pvmodule.location import Location\n>>> from pvmodule.graph import Graph\n\n>>> location = Location().set_location(latitude = 38.6973,\n longitude = -9.30836\n )\n\n>>> Graph().Bifacial_azimuth_test(location)\n\n```\n\n![alt text](https://raw.githubusercontent.com/fabio-r-almeida/pvmodule/main/documentation/5.png)\n\n\n## Maximum, Nominal and Minimum efficiencies of an specified inverter\n``` python\n>>> from pvmodule.module import Modules\n>>> from pvmodule.inverter import Inverters\n>>> from pvmodule.graph import Graph\n\n>>> module = Modules().module(\n 'Bi_LG405N2T-L5',\n losses=5,\n number_of_modules=20\n )\n\n>>> inverter, module = Inverters().auto_select_inverter(module)\n\n>>> Graph().Efficiency_curve_of_inverter(inverter)\n\n```\n\n![alt text](https://raw.githubusercontent.com/fabio-r-almeida/pvmodule/main/documentation/6.png)\n\n## Yearly irradiance curves (of multiple locations)\n``` python\n>>> from pvmodule.location import Location\n>>> from pvmodule.pvgis import PVGIS\n>>> from pvmodule.graph import Graph\n\n>>> location = Location().set_location(\n latitude = 64.14466555827349,\n longitude = -21.95256166366471\n )\n>>> _,location1,_ = PVGIS().retrieve_all_year(\n location,\n panel_tilt = 35,\n azimuth=0\n )\n\n>>> location = Location().set_location(\n latitude = 1.3490983309841909,\n longitude = 103.80140706509002\n )\n>>> _,location2,_ = PVGIS().retrieve_all_year(\n location,\n panel_tilt = 35,\n azimuth=0\n )\n\n>>> location = Location().set_location(\n latitude = 38.6973,\n longitude = -9.30836\n )\n>>> _,location3,_ = PVGIS().retrieve_all_year(\n location,\n panel_tilt = 35,\n azimuth=0\n )\n\n>>> Graph().plot_multiple_yearly(\n [\n ('Reykjavik, Iceland',location1)\n ],\n 'Global irradiance on a fixed plane'\n )\n\n#>>> Graph().plot_multiple_yearly(\n# [\n# ('Reykjavik, Iceland',location1),\n# ('Singapore, Singapore',location2), \n# ('Lisbon, Portugal',location3)\n# ],\n# 'Global irradiance on a fixed plane'\n# )\n\n```\n\n![alt text](https://raw.githubusercontent.com/fabio-r-almeida/pvmodule/main/documentation/7.png)\n\n\n\n## TODO\n---\n- Create a simulation method, in which:\n - Calculate pv production\n - Estimate output energy\n- ~~Create annual heatmap~~\n- ~~Average Irradiance dependancy due to the changes of azimuth~~\n- ~~Inverter efficiencies curves~~\n\n\n## Versions\n---\n\nAll notable changes to this project will be documented in this file.\n\n### [0.0.66] to [0.0.130] - 2023-03-20\n### Added\n- Added new *Graph* class.\n- Multithreading yearly horizontal and vertical data acquisition with \n - *PVGIS().retrieve_all_year_bifacial()*\n - *PVGIS().retrieve_all_year()*\n### Fixed\n- Improved inverter auto-selection.\n- Added error exception in both *Inverter* and *PVGIS* class.\n### Removed\n- Irradiance class will soon be removed due to incorrect irradiance estimations.\n - This issue is believed to be cause due to the incorrect shadow calculation of the module.\n\n\n### [0.0.62] to [0.0.65] - 2023-03-04\n### Added\n- Added a second order spline in order to smoothen out the values from PVGIS.\n- Changed the timeframe from 1 hour to 5 minutes.\n- Change TMY dates for future 2030 dates.\n\n\n\n### [0.0.44] to [0.0.61] - 2023-03-04\n### Fixed\n- Solved issue where Irradiance calculations could be divided by zero and thus creating unlimited irradiance reaching the PV modules.\n- Updated the CEC_Inverters database by adding: \n - Short circuit currents per inverter;\n - Number of MPPT strings per inverter.\n- Bug fixing.\n\n\n### [0.0.35] to [0.0.43] - 2023-02-28\n### Added\n- Added reverse Geolocalization using coordinates to determine the address.\n### Fixed\n- Bug fixing.\n### Removed\n- Removed Timezone from Location class due to unknown issues.\n\n\n### [0.0.34] - 2023-01-31\n### Added\n- Added new class to calculare front and rear irradiance.\n### Fixed\n- Corrected/updated formulas to calculate spacing between modules.\n- Resolved minor bugs.\n\n\n\n\n\n## Contributing\n---\n\nPull requests are welcome. For major changes, please open an issue first\nto discuss what you would like to change.\n\nPlease make sure to update tests as appropriate.\n\n## License\n---\n\n[MIT](https://choosealicense.com/licenses/mit/)\n\n## Copyright\n---\n\nCopyright (c), 2023, Fabio Ramalho de Almeida\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n",
"bugtrack_url": null,
"license": "",
"summary": "A library used to simulate photovoltaic energy production using PVGIS",
"version": "0.0.189",
"project_urls": null,
"split_keywords": [
"python",
"pvgis",
"simulator",
"photovoltaic",
"solar energy",
"solar panels",
"solar simulation"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "59ca13956547b76c94879d348604be2c50ce19d26ce7ce95c968eecef1a4dd14",
"md5": "cf2aa4dfcd5382e13b19ea9ca803ef90",
"sha256": "44bb8270084773b6a3f7bd482fdecf8eea3a94d1c24c6d3b23793a38e905877e"
},
"downloads": -1,
"filename": "pvmodule-0.0.189-py3-none-any.whl",
"has_sig": false,
"md5_digest": "cf2aa4dfcd5382e13b19ea9ca803ef90",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 45711,
"upload_time": "2023-05-02T21:43:06",
"upload_time_iso_8601": "2023-05-02T21:43:06.793873Z",
"url": "https://files.pythonhosted.org/packages/59/ca/13956547b76c94879d348604be2c50ce19d26ce7ce95c968eecef1a4dd14/pvmodule-0.0.189-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "5482b9e37f94b2ab39d52bfbc4b9b2445378819c7faa354393aa6ad5db399eb3",
"md5": "8338be04fc7113c0a586b52f64cc1df5",
"sha256": "22217cf4148876fb0785f192ef128f85e16ee4c1d78c595e6bbd67660c39a25c"
},
"downloads": -1,
"filename": "pvmodule-0.0.189.tar.gz",
"has_sig": false,
"md5_digest": "8338be04fc7113c0a586b52f64cc1df5",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 46335,
"upload_time": "2023-05-02T21:43:10",
"upload_time_iso_8601": "2023-05-02T21:43:10.661623Z",
"url": "https://files.pythonhosted.org/packages/54/82/b9e37f94b2ab39d52bfbc4b9b2445378819c7faa354393aa6ad5db399eb3/pvmodule-0.0.189.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-05-02 21:43:10",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "pvmodule"
}