コード例 #1
0
ファイル: test_problem.py プロジェクト: apulverizer/allagash
 def test_invalid_solver(self, binary_lscp_pulp_problem, binary_coverage):
     p = Problem(binary_lscp_pulp_problem, binary_coverage, 'lscp')
     with pytest.raises(TypeError) as e:
         s = p.solve(None)
     assert (
         e.value.args[0] ==
         "Expected 'LpSolver' type for solver, got '<class 'NoneType'>'")
コード例 #2
0
ファイル: test_problem.py プロジェクト: apulverizer/allagash
 def test_init_invalid_coverage(self, binary_lscp_pulp_problem):
     with pytest.raises(TypeError) as e:
         Problem(binary_lscp_pulp_problem, None, 'lscp')
     assert (
         e.value.args[0] ==
         "Expected 'Coverage' or 'list' type for coverages, got '<class 'NoneType'>'"
     )
コード例 #3
0
ファイル: test_problem.py プロジェクト: apulverizer/allagash
 def test_mclp_invalid_coverages(self):
     with pytest.raises(TypeError) as e:
         p = Problem.mclp(None, max_supply={})
     assert (
         e.value.args[0] ==
         "Expected 'Coverage' or 'list' type for coverages, got '<class 'NoneType'>'"
     )
コード例 #4
0
ファイル: test_lscp.py プロジェクト: pankababukova/allagash
 def test_multiple_supply_arcgis(self):
     demand_col = "Population"
     demand_id_col = "GEOID10"
     supply_id_col = "ORIG_ID"
     d = arcgis.GeoAccessor.from_featureclass(
         os.path.join(self.dir_name, "../test_data/demand_point.shp"))
     s = arcgis.GeoAccessor.from_featureclass(
         os.path.join(self.dir_name,
                      "../test_data/facility_service_areas.shp"))
     s2 = arcgis.GeoAccessor.from_featureclass(
         os.path.join(self.dir_name,
                      "../test_data/facility2_service_areas.shp"))
     coverage = Coverage.from_spatially_enabled_dataframes(
         d, s, demand_id_col, supply_id_col, demand_col=demand_col)
     coverage2 = Coverage.from_spatially_enabled_dataframes(
         d,
         s2,
         demand_id_col,
         supply_id_col,
         demand_name=coverage.demand_name,
         demand_col=demand_col)
     problem = Problem.lscp([coverage, coverage2])
     problem.solve(pulp.GLPK())
     selected_locations = problem.selected_supply(coverage)
     selected_locations2 = problem.selected_supply(coverage2)
     covered_demand = d.query(
         f"{demand_id_col} in ({[f'{i}' for i in problem.selected_demand(coverage)]})"
     )
     coverage = math.ceil(
         (covered_demand[demand_col].sum() / d[demand_col].sum()) * 100)
     assert (len(selected_locations) >= 5)
     assert (len(selected_locations2) >= 17)
     assert (coverage == 100)
コード例 #5
0
ファイル: test_problem.py プロジェクト: apulverizer/allagash
 def test_init_invalid_problem_type(self, binary_lscp_pulp_problem,
                                    binary_coverage):
     with pytest.raises(TypeError) as e:
         Problem(binary_lscp_pulp_problem, binary_coverage, None)
     assert (
         e.value.args[0] ==
         "Expected 'str' type for problem_type, got '<class 'NoneType'>'")
コード例 #6
0
ファイル: test_problem.py プロジェクト: apulverizer/allagash
 def test_mclp(self, binary_coverage, binary_coverage2):
     p = Problem.mclp([binary_coverage, binary_coverage2],
                      max_supply={
                          binary_coverage: 5,
                          binary_coverage2: 10
                      })
     assert (p.problem_type == "mclp")
コード例 #7
0
ファイル: test_problem.py プロジェクト: apulverizer/allagash
 def test_mclp_invalid_coverages5(self, binary_coverage):
     with pytest.raises(TypeError) as e:
         p = Problem.mclp(binary_coverage, max_supply={"test": 5})
     assert (
         e.value.args[0] ==
         "Expected 'Coverage' type as key in max_supply, got '<class 'str'>'"
     )
コード例 #8
0
ファイル: test_problem.py プロジェクト: apulverizer/allagash
 def test_mclp_invalid_coverages4(self, binary_coverage):
     with pytest.raises(TypeError) as e:
         p = Problem.mclp(binary_coverage,
                          max_supply={binary_coverage: 5.5})
     assert (
         e.value.args[0] ==
         "Expected 'int' type as value in max_supply, got '<class 'float'>'"
     )
コード例 #9
0
ファイル: test_problem.py プロジェクト: apulverizer/allagash
 def test_mclp_invalid_coverages2(self, binary_coverage, partial_coverage):
     with pytest.raises(ValueError) as e:
         p = Problem.mclp([binary_coverage, partial_coverage],
                          max_supply={
                              binary_coverage: 5,
                              partial_coverage: 5
                          })
     assert (
         e.value.args[0] ==
         "Invalid coverages. Coverages must have the same coverage type.")
コード例 #10
0
ファイル: test_lscp.py プロジェクト: pankababukova/allagash
 def test_single_supply(self):
     demand_id_col = "GEOID10"
     supply_id_col = "ORIG_ID"
     d = geopandas.read_file(
         os.path.join(self.dir_name, "../test_data/demand_point.shp"))
     s = geopandas.read_file(
         os.path.join(self.dir_name,
                      "../test_data/facility_service_areas.shp"))
     coverage = Coverage.from_geodataframes(d, s, demand_id_col,
                                            supply_id_col)
     problem = Problem.lscp(coverage)
     with pytest.raises((InfeasibleException, UndefinedException)) as e:
         problem.solve(pulp.GLPK())
コード例 #11
0
ファイル: test_lscp.py プロジェクト: pankababukova/allagash
 def test_single_supply_arcgis(self):
     demand_id_col = "GEOID10"
     supply_id_col = "ORIG_ID"
     d = arcgis.GeoAccessor.from_featureclass(
         os.path.join(self.dir_name, "../test_data/demand_point.shp"))
     s = arcgis.GeoAccessor.from_featureclass(
         os.path.join(self.dir_name,
                      "../test_data/facility_service_areas.shp"))
     coverage = Coverage.from_spatially_enabled_dataframes(
         d, s, demand_id_col, supply_id_col)
     problem = Problem.lscp(coverage)
     with pytest.raises((InfeasibleException, UndefinedException)) as e:
         problem.solve(pulp.GLPK())
コード例 #12
0
ファイル: test_mclp.py プロジェクト: pankababukova/allagash
 def test_multiple_supply(self):
     demand_id_col = "GEOID10"
     supply_id_col = "ORIG_ID"
     demand_col = "Population"
     d = geopandas.read_file(
         os.path.join(self.dir_name, "../test_data/demand_point.shp"))
     s = geopandas.read_file(
         os.path.join(self.dir_name,
                      "../test_data/facility_service_areas.shp"))
     s2 = geopandas.read_file(
         os.path.join(self.dir_name,
                      "../test_data/facility2_service_areas.shp"))
     coverage = Coverage.from_geodataframes(d,
                                            s,
                                            demand_id_col,
                                            supply_id_col,
                                            demand_col=demand_col)
     coverage2 = Coverage.from_geodataframes(
         d,
         s2,
         demand_id_col,
         supply_id_col,
         demand_col=demand_col,
         demand_name=coverage.demand_name)
     problem = Problem.mclp([coverage, coverage2],
                            max_supply={
                                coverage: 5,
                                coverage2: 10
                            })
     problem.solve(pulp.GLPK())
     selected_locations = problem.selected_supply(coverage)
     selected_locations2 = problem.selected_supply(coverage2)
     covered_demand = d.query(
         f"{demand_id_col} in ({[f'{i}' for i in problem.selected_demand(coverage)]})"
     )
     result = math.ceil(
         (covered_demand[demand_col].sum() / d[demand_col].sum()) * 100)
     assert (len(selected_locations) == 5)
     assert (len(selected_locations2) == 10)
     assert result == 96
コード例 #13
0
ファイル: test_mclp.py プロジェクト: pankababukova/allagash
 def test_single_supply(self):
     demand_id_col = "GEOID10"
     supply_id_col = "ORIG_ID"
     demand_col = "Population"
     d = geopandas.read_file(
         os.path.join(self.dir_name, "../test_data/demand_point.shp"))
     s = geopandas.read_file(
         os.path.join(self.dir_name,
                      "../test_data/facility_service_areas.shp"))
     coverage = Coverage.from_geodataframes(d,
                                            s,
                                            demand_id_col,
                                            supply_id_col,
                                            demand_col=demand_col)
     problem = Problem.mclp(coverage, max_supply={coverage: 5})
     problem.solve(pulp.GLPK())
     covered_demand = d.query(
         f"{demand_id_col} in ({[f'{i}' for i in problem.selected_demand(coverage)]})"
     )
     result = math.ceil(
         (covered_demand[demand_col].sum() / d[demand_col].sum()) * 100)
     assert result == 53
コード例 #14
0
ファイル: test_problem.py プロジェクト: apulverizer/allagash
 def test_init_invalid_problem_type_option(self, binary_lscp_pulp_problem,
                                           binary_coverage):
     with pytest.raises(ValueError) as e:
         Problem(binary_lscp_pulp_problem, binary_coverage, 'test')
     assert (e.value.args[0] == f"Invalid problem_type: 'test'")
コード例 #15
0
ファイル: test_problem.py プロジェクト: apulverizer/allagash
 def test_lscp_invalid_coverages3(self, partial_coverage):
     with pytest.raises(ValueError) as e:
         p = Problem.lscp(partial_coverage)
     assert (e.value.args[0] ==
             "LSCP can only be generated from binary coverage.")
コード例 #16
0
ファイル: test_problem.py プロジェクト: apulverizer/allagash
 def test_init_invalid_problem(self, binary_coverage):
     with pytest.raises(TypeError) as e:
         Problem(None, binary_coverage, 'lscp')
     assert (
         e.value.args[0] ==
         "Expected 'LpProblem' type for problem, got '<class 'NoneType'>'")
コード例 #17
0
ファイル: test_problem.py プロジェクト: apulverizer/allagash
 def test_lscp(self, binary_coverage, binary_coverage2):
     p = Problem.lscp([binary_coverage, binary_coverage2])
     assert (p.problem_type == "lscp")
コード例 #18
0
ファイル: test_problem.py プロジェクト: apulverizer/allagash
 def test_lscp_invalid_coverages2(self, binary_coverage, partial_coverage):
     with pytest.raises(ValueError) as e:
         p = Problem.lscp([binary_coverage, partial_coverage])
     assert (
         e.value.args[0] ==
         "Invalid coverages. Coverages must have the same coverage type.")
コード例 #19
0
ファイル: test_problem.py プロジェクト: apulverizer/allagash
 def test_mclp_invalid_coverages3(self, partial_coverage):
     with pytest.raises(ValueError) as e:
         p = Problem.mclp(partial_coverage,
                          max_supply={partial_coverage: 5})
     assert (e.value.args[0] ==
             "MCLP can only be generated from binary coverage.")
コード例 #20
0
ファイル: test_problem.py プロジェクト: apulverizer/allagash
 def test_init(self, binary_lscp_pulp_problem, binary_coverage):
     p = Problem(binary_lscp_pulp_problem, binary_coverage, 'lscp')
     assert (isinstance(p, Problem))
コード例 #21
0
ファイル: test_problem.py プロジェクト: apulverizer/allagash
 def test_solver(self, binary_lscp_pulp_problem, binary_coverage):
     p = Problem(binary_lscp_pulp_problem, binary_coverage, 'lscp')
     p = p.solve(GLPK())
     assert (isinstance(p, Problem))
コード例 #22
0
ファイル: test_problem.py プロジェクト: apulverizer/allagash
 def test_problem_type_property(self, binary_lscp_pulp_problem,
                                binary_coverage):
     p = Problem(binary_lscp_pulp_problem, binary_coverage, 'lscp')
     assert (p.problem_type == 'lscp')
コード例 #23
0
ファイル: test_problem.py プロジェクト: apulverizer/allagash
 def test_coverage_property(self, binary_lscp_pulp_problem,
                            binary_coverage):
     p = Problem(binary_lscp_pulp_problem, binary_coverage, 'lscp')
     assert (p.coverages[0] == binary_coverage)
コード例 #24
0
ファイル: test_problem.py プロジェクト: apulverizer/allagash
 def test_mclp_invalid_coverages6(self, binary_coverage):
     with pytest.raises(TypeError) as e:
         p = Problem.mclp(binary_coverage, max_supply=None)
     assert (
         e.value.args[0] ==
         "Expected 'dict' type for max_supply, got '<class 'NoneType'>'")
コード例 #25
0
ファイル: test_problem.py プロジェクト: apulverizer/allagash
 def test_mclp_invalid_coverages7(self, binary_coverage_no_demand):
     with pytest.raises(TypeError) as e:
         p = Problem.mclp(binary_coverage_no_demand,
                          max_supply={binary_coverage_no_demand: 5})
     assert (
         e.value.args[0] == "Coverages used in MCLP must have 'demand_col'")