예제 #1
0
    def test_update(self, mocked_update):
        self._make_mocked_api()
        module = Module(api=self.mocked_api, id=808)

        module.update()
        self.assertEqual(module.update_url_suffix, "/Module")
        self.assertTrue(mocked_update.called)
예제 #2
0
    def test_generate_iv_curve(self):
        self._make_mocked_api()
        module = Module(api=self.mocked_api)
        iv_curve = module.generate_iv_curve()
        module.num_iv_points = 100

        self.assertEqual(iv_curve, [{"current": 1.2, "voltage": 100.0}])
예제 #3
0
    def test_calculate_effective_irradiance_response(self):
        self._make_mocked_api()
        module = Module(self.mocked_api)

        response = module.calculate_effective_irradiance_response()
        self.assertEqual(json.loads(response.content),
                         [{
                             'temperature': 25,
                             'irradiance': 1000,
                             'relative_efficiency': 1.0
                         }, {
                             'temperature': 25,
                             'irradiance': 800,
                             'relative_efficiency': 1.02
                         }, {
                             'temperature': 25,
                             'irradiance': 600,
                             'relative_efficiency': 1.001
                         }, {
                             'temperature': 25,
                             'irradiance': 400,
                             'relative_efficiency': 0.99
                         }, {
                             'temperature': 25,
                             'irradiance': 200,
                             'relative_efficiency': 0.97
                         }])
예제 #4
0
    def test_get(self, mocked_get):
        self._make_mocked_api()
        module = Module(api=self.mocked_api, id=808)

        module.get()
        self.assertEqual(module.get_url_suffix, "/Module/808")
        self.assertTrue(mocked_get.called)
예제 #5
0
    def test_parse_full_iv_curves_template_with_sheet_name(self):
        self._make_mocked_api()
        module = Module(api=self.mocked_api)
        iv_curves = module._parse_full_iv_curves_template(
            file_path="test_data/test_parse_full_iv_curves_template.xlsx",
            sheet_name="NewSheetName")

        self.assertEqual(len(iv_curves), 1)
        self.assertEqual(len(iv_curves[0]["data_points"]), 200)
        self.assertEqual(iv_curves[0]["temperature"], 25)
        self.assertAlmostEqual(iv_curves[0]["data_points"][3]["current"],
                               2.450329288)
예제 #6
0
    def test_parse_key_iv_points_template_no_sheet_name(self):
        self._make_mocked_api()
        module = Module(api=self.mocked_api)
        key_iv_points = module._parse_key_iv_points_template(
            file_path="test_data/test_parse_key_iv_points_template.xlsx")

        self.assertEqual(len(key_iv_points), 27)
        self.assertEqual(key_iv_points[5]["temperature"], 15)
        self.assertEqual(key_iv_points[5]["irradiance"], 1000)
        self.assertEqual(key_iv_points[5]["short_circuit_current"],
                         1.74346881517)
        self.assertEqual(key_iv_points[5]["mpp_voltage"], 74.21342493)
예제 #7
0
    def test_process_key_iv_points_no_inputs(self):
        self._make_mocked_api()
        module = Module(api=self.mocked_api)

        with self.assertRaises(ValueError) as e:
            module.process_key_iv_points()
        self.assertEqual(
            e.exception.args[0],
            "Either a file path to the .xslx template for Key IV Points input or the "
            "properly formatted JSON-serializable data structure for Key IV Points "
            "input must be assigned as input. See the Python SDK documentation "
            "(https://plantpredict-python.readthedocs.io/en/latest/) for more "
            "information.")
예제 #8
0
    def test_optimize_series_resistance(self):
        self._make_mocked_api()
        module = Module(self.mocked_api)

        response = module.optimize_series_resistance()
        self.assertEqual(
            json.loads(response.content), {
                "maximum_series_resistance": 6.0,
                "maximum_recombination_parameter": 2.5,
                "saturation_current_at_stc": 0.0000000012,
                "diode_ideality_factor_at_stc": 1.22,
                "linear_temp_dependence_on_gamma": -0.04,
                "light_generated_current": 1.8
            })
        self.assertEqual(module.diode_ideality_factor_at_stc, 1.22)
예제 #9
0
    def test_parse_full_iv_curves_template_no_sheet_name(self):
        self._make_mocked_api()
        module = Module(api=self.mocked_api)
        iv_curves = module._parse_full_iv_curves_template(
            "test_data/test_parse_full_iv_curves_template.xlsx")

        self.assertEqual(len(iv_curves), 2)
        self.assertEqual(len(iv_curves[0]["data_points"]), 200)
        self.assertEqual(iv_curves[0]["temperature"], 25)
        self.assertEqual(len(iv_curves[1]["data_points"]), 200)
        self.assertEqual(iv_curves[1]["temperature"], 50)
        self.assertAlmostEqual(iv_curves[0]["data_points"][3]["current"],
                               2.450329288)
        self.assertAlmostEqual(iv_curves[1]["data_points"][198]["voltage"],
                               224.9763771)
예제 #10
0
    def test_process_key_iv_points_conflicting_inputs(self):
        self._make_mocked_api()
        module = Module(api=self.mocked_api)

        with self.assertRaises(ValueError) as e:
            module.process_key_iv_points(file_path="fake_file_path.xlsx",
                                         key_iv_points_data={
                                             "temperature": 25,
                                             "irradiance": 1000,
                                             "short_circuit_current": 9.43,
                                             "open_circuit_voltage": 46.39,
                                             "mpp_current": 8.9598,
                                             "mpp_voltage": 38.1285,
                                             "max_power": 341.6237
                                         })
        self.assertEqual(e.exception.args[0],
                         "Only one input option may be specified.")
예제 #11
0
    def test_process_iv_curves_conflicting_inputs(self):
        self._make_mocked_api()
        module = Module(api=self.mocked_api)

        with self.assertRaises(ValueError) as e:
            module.process_iv_curves(file_path="fake_file_path.xlsx",
                                     iv_curve_data={
                                         "temperature":
                                         25,
                                         "irradiance":
                                         1000,
                                         "data_points": [{
                                             "current": 1.25,
                                             "voltage": 20.0
                                         }]
                                     })
        self.assertEqual(e.exception.args[0],
                         "Only one input option may be specified.")
예제 #12
0
    def test_create(self, mocked_create):
        self._make_mocked_api()
        module = Module(api=self.mocked_api)
        module.stc_short_circuit_current = 1.23
        module.stc_short_circuit_current_temp_coef = 0.04
        module.length = 2000
        module.width = 1200
        module.stc_max_power = 120.0

        module.create()
        self.assertEqual(module.create_url_suffix, "/Module")
        self.assertTrue(mocked_create.called)
        self.assertEqual(module.short_circuit_current_at_stc, 1.23)
        self.assertEqual(module.linear_temp_dependence_on_isc, 0.04)
        self.area = 2.4
        self.stc_efficiency = 120.0 / (2.4 * 1000.0)
예제 #13
0
    def test_process_iv_curves_with_file(self):
        self._make_mocked_api()
        module = Module(api=self.mocked_api)

        data = module.process_iv_curves(
            file_path="test_data/test_parse_full_iv_curves_template.xlsx")
        self.assertEqual(data, [{
            "temperature": 25,
            "irradiance": 1000,
            "short_circuit_current": 9.43,
            "open_circuit_voltage": 46.39,
            "mpp_current": 8.9598,
            "mpp_voltage": 38.1285,
            "max_power": 341.6237
        }, {
            "temperature": 25,
            "irradiance": 1000,
            "short_circuit_current": 9.43,
            "open_circuit_voltage": 46.39,
            "mpp_current": 8.9598,
            "mpp_voltage": 38.1285,
            "max_power": 341.6237
        }])
예제 #14
0
    def test_calculate_basic_data_at_conditions(self):
        self._make_mocked_api()
        module = Module(self.mocked_api)

        data = module.calculate_basic_data_at_conditions(temperature=25,
                                                         irradiance=1000)
        self.assertEqual(data, [{
            "temperature": 25,
            "irradiance": 1000,
            "short_circuit_current": 9.43,
            "open_circuit_voltage": 46.39,
            "mpp_current": 8.9598,
            "mpp_voltage": 38.1285,
            "max_power": 341.6237
        }, {
            "temperature": 25,
            "irradiance": 1000,
            "short_circuit_current": 9.43,
            "open_circuit_voltage": 46.39,
            "mpp_current": 8.9598,
            "mpp_voltage": 38.1285,
            "max_power": 341.6237
        }])
예제 #15
0
    def test_process_iv_curves_with_file(self):
        self._make_mocked_api()
        module = Module(api=self.mocked_api)

        data = module.process_iv_curves(
            iv_curve_data=[{
                "temperature": 25,
                "irradiance": 1000,
                "data_points": [{
                    "current": 1.25,
                    "voltage": 20.0
                }]
            }, {
                "temperature": 25,
                "irradiance": 1000,
                "data_points": [{
                    "current": 1.25,
                    "voltage": 20.0
                }]
            }])
        self.assertEqual(data, [{
            "temperature": 25,
            "irradiance": 1000,
            "short_circuit_current": 9.43,
            "open_circuit_voltage": 46.39,
            "mpp_current": 8.9598,
            "mpp_voltage": 38.1285,
            "max_power": 341.6237
        }, {
            "temperature": 25,
            "irradiance": 1000,
            "short_circuit_current": 9.43,
            "open_circuit_voltage": 46.39,
            "mpp_current": 8.9598,
            "mpp_voltage": 38.1285,
            "max_power": 341.6237
        }])
    def _make_mocked_api(self, mocked_api, module_id=123):
        self.mocked_api = mocked_api()
        self.mocked_api.base_url = "https://api.plantpredict.com"
        self.mocked_api.access_token = 'dummy_token'

        self.mocked_api.prediction.return_value = Prediction(self.mocked_api)
        self.mocked_api.module.return_value = Module(api=self.mocked_api,
                                                     id=module_id)
        self.mocked_api.project.return_value = Project(api=self.mocked_api,
                                                       id=7)
        self.mocked_api.ashrae.return_value = ASHRAE(api=self.mocked_api,
                                                     latitude=33.0,
                                                     longitude=-110.0)

        self._mock_geo_with_all_methods_called()
예제 #17
0
 def module(self, **kwargs):
     return Module(self, **kwargs)
예제 #18
0
    def test_process_key_iv_points_with_data(self):
        self._make_mocked_api()
        module = Module(api=self.mocked_api)

        response = module.process_key_iv_points(
            key_iv_points_data=[{
                "temperature": 25,
                "irradiance": 1000,
                "short_circuit_current": 9.43,
                "open_circuit_voltage": 46.39,
                "mpp_current": 8.9598,
                "mpp_voltage": 38.1285,
                "max_power": 341.6237
            }, {
                "temperature": 25,
                "irradiance": 1000,
                "short_circuit_current": 9.43,
                "open_circuit_voltage": 46.39,
                "mpp_current": 8.9598,
                "mpp_voltage": 38.1285,
                "max_power": 341.6237
            }])
        self.assertEqual(
            json.loads(response.content), {
                "stc_short_circuit_current":
                1.7592,
                "stc_open_circuit_voltage":
                90.2189,
                "stc_mpp_current":
                1.6084,
                "stc_mpp_voltage":
                72.4938,
                "stc_short_circuit_current_temp_coef":
                0.0519,
                "stc_open_circuit_voltage_temp_coef":
                -0.3081,
                "stc_power_temp_coef":
                -0.3535,
                "effective_irradiance_response": [
                    {
                        "temperature": 25,
                        "irradiance": 1000,
                        "relative_efficiency": 1.0
                    },
                    {
                        "temperature": 25,
                        "irradiance": 800,
                        "relative_efficiency": 1.0039
                    },
                    {
                        "temperature": 25,
                        "irradiance": 600,
                        "relative_efficiency": 1.0032
                    },
                    {
                        "temperature": 25,
                        "irradiance": 400,
                        "relative_efficiency": 0.9925
                    },
                    {
                        "temperature": 25,
                        "irradiance": 200,
                        "relative_efficiency": 0.9582
                    },
                ]
            })
        self.assertEqual(module.stc_short_circuit_current, 1.7592)
        self.assertEqual(module.effective_irradiance_response, [
            {
                "temperature": 25,
                "irradiance": 1000,
                "relative_efficiency": 1.0
            },
            {
                "temperature": 25,
                "irradiance": 800,
                "relative_efficiency": 1.0039
            },
            {
                "temperature": 25,
                "irradiance": 600,
                "relative_efficiency": 1.0032
            },
            {
                "temperature": 25,
                "irradiance": 400,
                "relative_efficiency": 0.9925
            },
            {
                "temperature": 25,
                "irradiance": 200,
                "relative_efficiency": 0.9582
            },
        ])