From b722700e2013e9ceaa9dbf125cbe8a06fa9e9695 Mon Sep 17 00:00:00 2001 From: Will Holmgren Date: Mon, 24 Aug 2020 19:37:49 -0700 Subject: [PATCH 1/3] add module_type and temp params --- pvlib/pvsystem.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pvlib/pvsystem.py b/pvlib/pvsystem.py index cd3b217122..27f0944f86 100644 --- a/pvlib/pvsystem.py +++ b/pvlib/pvsystem.py @@ -237,8 +237,9 @@ def __init__(self, self.name = name def __repr__(self): - attrs = ['name', 'surface_tilt', 'surface_azimuth', 'module', - 'inverter', 'albedo', 'racking_model'] + attrs = ['name', 'surface_tilt', 'surface_azimuth', 'module_type', + 'module', 'inverter', 'albedo', 'racking_model', + 'temperature_model_parameters'] return ('PVSystem: \n ' + '\n '.join( ('{}: {}'.format(attr, getattr(self, attr)) for attr in attrs))) From 2c7d2a5d8f6a2b784b7f1e254eea414c453fd831 Mon Sep 17 00:00:00 2001 From: Will Holmgren Date: Mon, 24 Aug 2020 20:29:05 -0700 Subject: [PATCH 2/3] reprs --- docs/sphinx/source/whatsnew/v0.8.0.rst | 3 ++ pvlib/pvsystem.py | 11 +++--- pvlib/tests/test_pvsystem.py | 52 +++++++++++++++++++------- pvlib/tests/test_tracking.py | 48 ++++++++++++++++++------ pvlib/tracking.py | 2 +- 5 files changed, 85 insertions(+), 31 deletions(-) diff --git a/docs/sphinx/source/whatsnew/v0.8.0.rst b/docs/sphinx/source/whatsnew/v0.8.0.rst index 1fd41f232f..d23cdefce0 100644 --- a/docs/sphinx/source/whatsnew/v0.8.0.rst +++ b/docs/sphinx/source/whatsnew/v0.8.0.rst @@ -44,6 +44,9 @@ Enhancements (:pull:`1017`) * Add :py:func:`pvlib.inverter.fit_sandia` that fits the Sandia inverter model to a set of inverter efficiency curves. (:pull:`1011`) +* Added *racking_model*, *module_type*, and *temperature_model_parameters* to + PVSystem, LocalizedPVSystem, SingleAxisTracker, and + LocalizedSingleAxisTracker repr methods. (:issue:`1027`) Bug fixes ~~~~~~~~~ diff --git a/pvlib/pvsystem.py b/pvlib/pvsystem.py index 27f0944f86..8232d9dc73 100644 --- a/pvlib/pvsystem.py +++ b/pvlib/pvsystem.py @@ -237,10 +237,10 @@ def __init__(self, self.name = name def __repr__(self): - attrs = ['name', 'surface_tilt', 'surface_azimuth', 'module_type', - 'module', 'inverter', 'albedo', 'racking_model', + attrs = ['name', 'surface_tilt', 'surface_azimuth', 'module', + 'inverter', 'albedo', 'racking_model', 'module_type', 'temperature_model_parameters'] - return ('PVSystem: \n ' + '\n '.join( + return ('PVSystem:\n ' + '\n '.join( ('{}: {}'.format(attr, getattr(self, attr)) for attr in attrs))) def get_aoi(self, solar_zenith, solar_azimuth): @@ -899,8 +899,9 @@ def __init__(self, pvsystem=None, location=None, **kwargs): def __repr__(self): attrs = ['name', 'latitude', 'longitude', 'altitude', 'tz', 'surface_tilt', 'surface_azimuth', 'module', 'inverter', - 'albedo', 'racking_model'] - return ('LocalizedPVSystem: \n ' + '\n '.join( + 'albedo', 'racking_model', 'module_type', + 'temperature_model_parameters'] + return ('LocalizedPVSystem:\n ' + '\n '.join( ('{}: {}'.format(attr, getattr(self, attr)) for attr in attrs))) diff --git a/pvlib/tests/test_pvsystem.py b/pvlib/tests/test_pvsystem.py index e560894ed2..da17eb69de 100644 --- a/pvlib/tests/test_pvsystem.py +++ b/pvlib/tests/test_pvsystem.py @@ -1121,21 +1121,37 @@ def test_PVSystem_localize_with_latlon(): def test_PVSystem___repr__(): system = pvsystem.PVSystem(module='blah', inverter='blarg', name='pv ftw') - expected = ('PVSystem: \n name: pv ftw\n surface_tilt: 0\n ' - 'surface_azimuth: 180\n module: blah\n inverter: blarg\n ' - 'albedo: 0.25\n racking_model: open_rack') - + expected = """PVSystem: + name: pv ftw + surface_tilt: 0 + surface_azimuth: 180 + module: blah + inverter: blarg + albedo: 0.25 + racking_model: open_rack + module_type: glass_polymer + temperature_model_parameters: {'a': -3.56, 'b': -0.075, 'deltaT': 3}""" assert system.__repr__() == expected def test_PVSystem_localize___repr__(): system = pvsystem.PVSystem(module='blah', inverter='blarg', name='pv ftw') localized_system = system.localize(latitude=32, longitude=-111) - - expected = ('LocalizedPVSystem: \n name: None\n latitude: 32\n ' - 'longitude: -111\n altitude: 0\n tz: UTC\n ' - 'surface_tilt: 0\n surface_azimuth: 180\n module: blah\n ' - 'inverter: blarg\n albedo: 0.25\n racking_model: open_rack') + # apparently name is not preserved when creating a system using localize + expected = """LocalizedPVSystem: + name: None + latitude: 32 + longitude: -111 + altitude: 0 + tz: UTC + surface_tilt: 0 + surface_azimuth: 180 + module: blah + inverter: blarg + albedo: 0.25 + racking_model: open_rack + module_type: glass_polymer + temperature_model_parameters: {'a': -3.56, 'b': -0.075, 'deltaT': 3}""" assert localized_system.__repr__() == expected @@ -1164,10 +1180,20 @@ def test_LocalizedPVSystem___repr__(): inverter='blarg', name='my name') - expected = ('LocalizedPVSystem: \n name: my name\n latitude: 32\n ' - 'longitude: -111\n altitude: 0\n tz: UTC\n ' - 'surface_tilt: 0\n surface_azimuth: 180\n module: blah\n ' - 'inverter: blarg\n albedo: 0.25\n racking_model: open_rack') + expected = """LocalizedPVSystem: + name: my name + latitude: 32 + longitude: -111 + altitude: 0 + tz: UTC + surface_tilt: 0 + surface_azimuth: 180 + module: blah + inverter: blarg + albedo: 0.25 + racking_model: open_rack + module_type: glass_polymer + temperature_model_parameters: {'a': -3.56, 'b': -0.075, 'deltaT': 3}""" assert localized_system.__repr__() == expected diff --git a/pvlib/tests/test_tracking.py b/pvlib/tests/test_tracking.py index 365dca121c..d7f4d35726 100644 --- a/pvlib/tests/test_tracking.py +++ b/pvlib/tests/test_tracking.py @@ -440,11 +440,21 @@ def test_get_irradiance(): def test_SingleAxisTracker___repr__(): system = tracking.SingleAxisTracker(max_angle=45, gcr=.25, module='blah', inverter='blarg') - expected = ('SingleAxisTracker: \n axis_tilt: 0\n axis_azimuth: 0\n ' - 'max_angle: 45\n backtrack: True\n gcr: 0.25\n ' - 'name: None\n surface_tilt: None\n surface_azimuth: None\n ' - 'module: blah\n inverter: blarg\n albedo: 0.25\n ' - 'racking_model: open_rack') + expected = """SingleAxisTracker: + axis_tilt: 0 + axis_azimuth: 0 + max_angle: 45 + backtrack: True + gcr: 0.25 + name: None + surface_tilt: None + surface_azimuth: None + module: blah + inverter: blarg + albedo: 0.25 + racking_model: open_rack + module_type: glass_polymer + temperature_model_parameters: {'a': -3.56, 'b': -0.075, 'deltaT': 3}""" assert system.__repr__() == expected @@ -454,12 +464,26 @@ def test_LocalizedSingleAxisTracker___repr__(): module='blah', inverter='blarg', gcr=0.25) - - expected = ('LocalizedSingleAxisTracker: \n axis_tilt: 0\n ' - 'axis_azimuth: 0\n max_angle: 90\n backtrack: True\n ' - 'gcr: 0.25\n name: None\n surface_tilt: None\n ' - 'surface_azimuth: None\n module: blah\n inverter: blarg\n ' - 'albedo: 0.25\n racking_model: open_rack\n ' - 'latitude: 32\n longitude: -111\n altitude: 0\n tz: UTC') + # apparently the repr order is different for LocalizedSingleAxisTracker + # than for LocalizedPVSystem. maybe a MRO thing. + expected = """LocalizedSingleAxisTracker: + axis_tilt: 0 + axis_azimuth: 0 + max_angle: 90 + backtrack: True + gcr: 0.25 + name: None + surface_tilt: None + surface_azimuth: None + module: blah + inverter: blarg + albedo: 0.25 + racking_model: open_rack + module_type: glass_polymer + temperature_model_parameters: {'a': -3.56, 'b': -0.075, 'deltaT': 3} + latitude: 32 + longitude: -111 + altitude: 0 + tz: UTC""" assert localized_system.__repr__() == expected diff --git a/pvlib/tracking.py b/pvlib/tracking.py index 52d4c51483..8dd1877338 100644 --- a/pvlib/tracking.py +++ b/pvlib/tracking.py @@ -61,7 +61,7 @@ def __init__(self, axis_tilt=0, axis_azimuth=0, def __repr__(self): attrs = ['axis_tilt', 'axis_azimuth', 'max_angle', 'backtrack', 'gcr'] - sat_repr = ('SingleAxisTracker: \n ' + '\n '.join( + sat_repr = ('SingleAxisTracker:\n ' + '\n '.join( ('{}: {}'.format(attr, getattr(self, attr)) for attr in attrs))) # get the parent PVSystem info pvsystem_repr = super(SingleAxisTracker, self).__repr__() From 2b5526d9a1c690a8a2c1c5b60f0e93e1ed7dde7a Mon Sep 17 00:00:00 2001 From: Will Holmgren Date: Tue, 25 Aug 2020 08:52:59 -0700 Subject: [PATCH 3/3] manually specify temp for py 3.5 order --- pvlib/tests/test_pvsystem.py | 22 ++++++++++++---------- pvlib/tests/test_tracking.py | 17 ++++++++--------- 2 files changed, 20 insertions(+), 19 deletions(-) diff --git a/pvlib/tests/test_pvsystem.py b/pvlib/tests/test_pvsystem.py index da17eb69de..280c6d6d55 100644 --- a/pvlib/tests/test_pvsystem.py +++ b/pvlib/tests/test_pvsystem.py @@ -1119,7 +1119,9 @@ def test_PVSystem_localize_with_latlon(): def test_PVSystem___repr__(): - system = pvsystem.PVSystem(module='blah', inverter='blarg', name='pv ftw') + system = pvsystem.PVSystem( + module='blah', inverter='blarg', name='pv ftw', + temperature_model_parameters={'a': -3.56}) expected = """PVSystem: name: pv ftw @@ -1130,12 +1132,14 @@ def test_PVSystem___repr__(): albedo: 0.25 racking_model: open_rack module_type: glass_polymer - temperature_model_parameters: {'a': -3.56, 'b': -0.075, 'deltaT': 3}""" + temperature_model_parameters: {'a': -3.56}""" assert system.__repr__() == expected def test_PVSystem_localize___repr__(): - system = pvsystem.PVSystem(module='blah', inverter='blarg', name='pv ftw') + system = pvsystem.PVSystem( + module='blah', inverter='blarg', name='pv ftw', + temperature_model_parameters={'a': -3.56}) localized_system = system.localize(latitude=32, longitude=-111) # apparently name is not preserved when creating a system using localize expected = """LocalizedPVSystem: @@ -1151,7 +1155,7 @@ def test_PVSystem_localize___repr__(): albedo: 0.25 racking_model: open_rack module_type: glass_polymer - temperature_model_parameters: {'a': -3.56, 'b': -0.075, 'deltaT': 3}""" + temperature_model_parameters: {'a': -3.56}""" assert localized_system.__repr__() == expected @@ -1174,11 +1178,9 @@ def test_LocalizedPVSystem_creation(): def test_LocalizedPVSystem___repr__(): - localized_system = pvsystem.LocalizedPVSystem(latitude=32, - longitude=-111, - module='blah', - inverter='blarg', - name='my name') + localized_system = pvsystem.LocalizedPVSystem( + latitude=32, longitude=-111, module='blah', inverter='blarg', + name='my name', temperature_model_parameters={'a': -3.56}) expected = """LocalizedPVSystem: name: my name @@ -1193,7 +1195,7 @@ def test_LocalizedPVSystem___repr__(): albedo: 0.25 racking_model: open_rack module_type: glass_polymer - temperature_model_parameters: {'a': -3.56, 'b': -0.075, 'deltaT': 3}""" + temperature_model_parameters: {'a': -3.56}""" assert localized_system.__repr__() == expected diff --git a/pvlib/tests/test_tracking.py b/pvlib/tests/test_tracking.py index d7f4d35726..a2dbb6e732 100644 --- a/pvlib/tests/test_tracking.py +++ b/pvlib/tests/test_tracking.py @@ -438,8 +438,9 @@ def test_get_irradiance(): def test_SingleAxisTracker___repr__(): - system = tracking.SingleAxisTracker(max_angle=45, gcr=.25, - module='blah', inverter='blarg') + system = tracking.SingleAxisTracker( + max_angle=45, gcr=.25, module='blah', inverter='blarg', + temperature_model_parameters={'a': -3.56}) expected = """SingleAxisTracker: axis_tilt: 0 axis_azimuth: 0 @@ -454,16 +455,14 @@ def test_SingleAxisTracker___repr__(): albedo: 0.25 racking_model: open_rack module_type: glass_polymer - temperature_model_parameters: {'a': -3.56, 'b': -0.075, 'deltaT': 3}""" + temperature_model_parameters: {'a': -3.56}""" assert system.__repr__() == expected def test_LocalizedSingleAxisTracker___repr__(): - localized_system = tracking.LocalizedSingleAxisTracker(latitude=32, - longitude=-111, - module='blah', - inverter='blarg', - gcr=0.25) + localized_system = tracking.LocalizedSingleAxisTracker( + latitude=32, longitude=-111, module='blah', inverter='blarg', + gcr=0.25, temperature_model_parameters={'a': -3.56}) # apparently the repr order is different for LocalizedSingleAxisTracker # than for LocalizedPVSystem. maybe a MRO thing. expected = """LocalizedSingleAxisTracker: @@ -480,7 +479,7 @@ def test_LocalizedSingleAxisTracker___repr__(): albedo: 0.25 racking_model: open_rack module_type: glass_polymer - temperature_model_parameters: {'a': -3.56, 'b': -0.075, 'deltaT': 3} + temperature_model_parameters: {'a': -3.56} latitude: 32 longitude: -111 altitude: 0