Skip to content

Commit 87d1bf2

Browse files
authored
improve PVSystem and associated object reprs (#1031)
* add module_type and temp params * reprs * manually specify temp for py 3.5 order
1 parent 646c8fd commit 87d1bf2

File tree

5 files changed

+102
-46
lines changed

5 files changed

+102
-46
lines changed

docs/sphinx/source/whatsnew/v0.8.0.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ Enhancements
4444
(:pull:`1017`)
4545
* Add :py:func:`pvlib.inverter.fit_sandia` that fits the Sandia inverter model
4646
to a set of inverter efficiency curves. (:pull:`1011`)
47+
* Added *racking_model*, *module_type*, and *temperature_model_parameters* to
48+
PVSystem, LocalizedPVSystem, SingleAxisTracker, and
49+
LocalizedSingleAxisTracker repr methods. (:issue:`1027`)
4750

4851
Bug fixes
4952
~~~~~~~~~

pvlib/pvsystem.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -238,8 +238,9 @@ def __init__(self,
238238

239239
def __repr__(self):
240240
attrs = ['name', 'surface_tilt', 'surface_azimuth', 'module',
241-
'inverter', 'albedo', 'racking_model']
242-
return ('PVSystem: \n ' + '\n '.join(
241+
'inverter', 'albedo', 'racking_model', 'module_type',
242+
'temperature_model_parameters']
243+
return ('PVSystem:\n ' + '\n '.join(
243244
('{}: {}'.format(attr, getattr(self, attr)) for attr in attrs)))
244245

245246
def get_aoi(self, solar_zenith, solar_azimuth):
@@ -898,8 +899,9 @@ def __init__(self, pvsystem=None, location=None, **kwargs):
898899
def __repr__(self):
899900
attrs = ['name', 'latitude', 'longitude', 'altitude', 'tz',
900901
'surface_tilt', 'surface_azimuth', 'module', 'inverter',
901-
'albedo', 'racking_model']
902-
return ('LocalizedPVSystem: \n ' + '\n '.join(
902+
'albedo', 'racking_model', 'module_type',
903+
'temperature_model_parameters']
904+
return ('LocalizedPVSystem:\n ' + '\n '.join(
903905
('{}: {}'.format(attr, getattr(self, attr)) for attr in attrs)))
904906

905907

pvlib/tests/test_pvsystem.py

Lines changed: 50 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1119,23 +1119,43 @@ def test_PVSystem_localize_with_latlon():
11191119

11201120

11211121
def test_PVSystem___repr__():
1122-
system = pvsystem.PVSystem(module='blah', inverter='blarg', name='pv ftw')
1123-
1124-
expected = ('PVSystem: \n name: pv ftw\n surface_tilt: 0\n '
1125-
'surface_azimuth: 180\n module: blah\n inverter: blarg\n '
1126-
'albedo: 0.25\n racking_model: open_rack')
1127-
1122+
system = pvsystem.PVSystem(
1123+
module='blah', inverter='blarg', name='pv ftw',
1124+
temperature_model_parameters={'a': -3.56})
1125+
1126+
expected = """PVSystem:
1127+
name: pv ftw
1128+
surface_tilt: 0
1129+
surface_azimuth: 180
1130+
module: blah
1131+
inverter: blarg
1132+
albedo: 0.25
1133+
racking_model: open_rack
1134+
module_type: glass_polymer
1135+
temperature_model_parameters: {'a': -3.56}"""
11281136
assert system.__repr__() == expected
11291137

11301138

11311139
def test_PVSystem_localize___repr__():
1132-
system = pvsystem.PVSystem(module='blah', inverter='blarg', name='pv ftw')
1140+
system = pvsystem.PVSystem(
1141+
module='blah', inverter='blarg', name='pv ftw',
1142+
temperature_model_parameters={'a': -3.56})
11331143
localized_system = system.localize(latitude=32, longitude=-111)
1134-
1135-
expected = ('LocalizedPVSystem: \n name: None\n latitude: 32\n '
1136-
'longitude: -111\n altitude: 0\n tz: UTC\n '
1137-
'surface_tilt: 0\n surface_azimuth: 180\n module: blah\n '
1138-
'inverter: blarg\n albedo: 0.25\n racking_model: open_rack')
1144+
# apparently name is not preserved when creating a system using localize
1145+
expected = """LocalizedPVSystem:
1146+
name: None
1147+
latitude: 32
1148+
longitude: -111
1149+
altitude: 0
1150+
tz: UTC
1151+
surface_tilt: 0
1152+
surface_azimuth: 180
1153+
module: blah
1154+
inverter: blarg
1155+
albedo: 0.25
1156+
racking_model: open_rack
1157+
module_type: glass_polymer
1158+
temperature_model_parameters: {'a': -3.56}"""
11391159

11401160
assert localized_system.__repr__() == expected
11411161

@@ -1158,16 +1178,24 @@ def test_LocalizedPVSystem_creation():
11581178

11591179

11601180
def test_LocalizedPVSystem___repr__():
1161-
localized_system = pvsystem.LocalizedPVSystem(latitude=32,
1162-
longitude=-111,
1163-
module='blah',
1164-
inverter='blarg',
1165-
name='my name')
1166-
1167-
expected = ('LocalizedPVSystem: \n name: my name\n latitude: 32\n '
1168-
'longitude: -111\n altitude: 0\n tz: UTC\n '
1169-
'surface_tilt: 0\n surface_azimuth: 180\n module: blah\n '
1170-
'inverter: blarg\n albedo: 0.25\n racking_model: open_rack')
1181+
localized_system = pvsystem.LocalizedPVSystem(
1182+
latitude=32, longitude=-111, module='blah', inverter='blarg',
1183+
name='my name', temperature_model_parameters={'a': -3.56})
1184+
1185+
expected = """LocalizedPVSystem:
1186+
name: my name
1187+
latitude: 32
1188+
longitude: -111
1189+
altitude: 0
1190+
tz: UTC
1191+
surface_tilt: 0
1192+
surface_azimuth: 180
1193+
module: blah
1194+
inverter: blarg
1195+
albedo: 0.25
1196+
racking_model: open_rack
1197+
module_type: glass_polymer
1198+
temperature_model_parameters: {'a': -3.56}"""
11711199

11721200
assert localized_system.__repr__() == expected
11731201

pvlib/tests/test_tracking.py

Lines changed: 42 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -438,28 +438,51 @@ def test_get_irradiance():
438438

439439

440440
def test_SingleAxisTracker___repr__():
441-
system = tracking.SingleAxisTracker(max_angle=45, gcr=.25,
442-
module='blah', inverter='blarg')
443-
expected = ('SingleAxisTracker: \n axis_tilt: 0\n axis_azimuth: 0\n '
444-
'max_angle: 45\n backtrack: True\n gcr: 0.25\n '
445-
'name: None\n surface_tilt: None\n surface_azimuth: None\n '
446-
'module: blah\n inverter: blarg\n albedo: 0.25\n '
447-
'racking_model: open_rack')
441+
system = tracking.SingleAxisTracker(
442+
max_angle=45, gcr=.25, module='blah', inverter='blarg',
443+
temperature_model_parameters={'a': -3.56})
444+
expected = """SingleAxisTracker:
445+
axis_tilt: 0
446+
axis_azimuth: 0
447+
max_angle: 45
448+
backtrack: True
449+
gcr: 0.25
450+
name: None
451+
surface_tilt: None
452+
surface_azimuth: None
453+
module: blah
454+
inverter: blarg
455+
albedo: 0.25
456+
racking_model: open_rack
457+
module_type: glass_polymer
458+
temperature_model_parameters: {'a': -3.56}"""
448459
assert system.__repr__() == expected
449460

450461

451462
def test_LocalizedSingleAxisTracker___repr__():
452-
localized_system = tracking.LocalizedSingleAxisTracker(latitude=32,
453-
longitude=-111,
454-
module='blah',
455-
inverter='blarg',
456-
gcr=0.25)
457-
458-
expected = ('LocalizedSingleAxisTracker: \n axis_tilt: 0\n '
459-
'axis_azimuth: 0\n max_angle: 90\n backtrack: True\n '
460-
'gcr: 0.25\n name: None\n surface_tilt: None\n '
461-
'surface_azimuth: None\n module: blah\n inverter: blarg\n '
462-
'albedo: 0.25\n racking_model: open_rack\n '
463-
'latitude: 32\n longitude: -111\n altitude: 0\n tz: UTC')
463+
localized_system = tracking.LocalizedSingleAxisTracker(
464+
latitude=32, longitude=-111, module='blah', inverter='blarg',
465+
gcr=0.25, temperature_model_parameters={'a': -3.56})
466+
# apparently the repr order is different for LocalizedSingleAxisTracker
467+
# than for LocalizedPVSystem. maybe a MRO thing.
468+
expected = """LocalizedSingleAxisTracker:
469+
axis_tilt: 0
470+
axis_azimuth: 0
471+
max_angle: 90
472+
backtrack: True
473+
gcr: 0.25
474+
name: None
475+
surface_tilt: None
476+
surface_azimuth: None
477+
module: blah
478+
inverter: blarg
479+
albedo: 0.25
480+
racking_model: open_rack
481+
module_type: glass_polymer
482+
temperature_model_parameters: {'a': -3.56}
483+
latitude: 32
484+
longitude: -111
485+
altitude: 0
486+
tz: UTC"""
464487

465488
assert localized_system.__repr__() == expected

pvlib/tracking.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ def __init__(self, axis_tilt=0, axis_azimuth=0,
6161

6262
def __repr__(self):
6363
attrs = ['axis_tilt', 'axis_azimuth', 'max_angle', 'backtrack', 'gcr']
64-
sat_repr = ('SingleAxisTracker: \n ' + '\n '.join(
64+
sat_repr = ('SingleAxisTracker:\n ' + '\n '.join(
6565
('{}: {}'.format(attr, getattr(self, attr)) for attr in attrs)))
6666
# get the parent PVSystem info
6767
pvsystem_repr = super(SingleAxisTracker, self).__repr__()

0 commit comments

Comments
 (0)