123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- #!/usr/bin/env python3
- import pytest
- from numpy import isnan
- from hashlib import sha256
- from rdflib import Namespace
- from probs_runner import PROBS, QUANTITYKIND
- from numpy.testing import assert_allclose
- PRODCOM2016 = Namespace("http://w3id.org/probs-lab/data/prodcom/2016/")
- PRODCOM2017 = Namespace("http://w3id.org/probs-lab/data/prodcom/2017/")
- GEONAMES = Namespace("https://sws.geonames.org/")
- def assert_exact_results(result, expected_value):
- assert len(result) == 1
- assert result[0].bound == PROBS.ExactBound
- assert_allclose(result[0].measurement, expected_value, rtol=1e-3)
- def assert_no_measurement(result):
- assert len(result) == 1
- assert isnan(result[0].measurement)
- def assert_no_result(result):
- assert len(result) == 0
- # Do most tests for 2016; then spot check a few values for the other years
- class TestProdcom2016Data:
- """Test PRODCOM2016 DATA conversion"""
- endpoint_data = ["outputs/PRODCOM2016DATA.nt.gz",
- "outputs/PRD_2016_20200617_185122.nt.gz"]
- @pytest.mark.parametrize("code,metric,expected_value", [
- ("10113250", QUANTITYKIND.Mass, 2717950),
- ("10841270", QUANTITYKIND.Mass, 622435736),
- ("15115100", QUANTITYKIND.Mass, 0),
- ("17121439", QUANTITYKIND.Mass, 43196000),
- ("20132455", QUANTITYKIND.MassAmountOfSubstance, 1396308),
- ])
- def test_expected_measurements(self, rdfox, code, metric, expected_value):
- result = rdfox.get_observations(
- PROBS.TimePeriod_YearOf2016,
- GEONAMES["2635167"],
- metric,
- PROBS.SoldProduction,
- object_code=code
- )
- assert_exact_results(result, expected_value)
- @pytest.mark.parametrize("code,metric", [
- ("14391090", QUANTITYKIND.AmountOfSubstance),
- ("20141325", QUANTITYKIND.Mass),
- # This one has no measurement or data at all, so is loaded with metric "Unknown"
- ("20421975", QUANTITYKIND.Unknown),
- ])
- def test_missing_measurements(self, rdfox, code, metric):
- # these codes have no data -- expect an observation with no measurement
- result = rdfox.get_observations(
- PROBS.TimePeriod_YearOf2016,
- GEONAMES["2635167"] ,
- metric,
- PROBS.SoldProduction,
- object_code=code
- )
- assert_no_measurement(result)
- @pytest.mark.parametrize("code,metric", [
- ("14391090", QUANTITYKIND.Mass),
- ("20141325", QUANTITYKIND.AmountOfSubstance),
- ])
- def test_no_result_with_wrong_metric(self, rdfox, code, metric):
- # same as above, but with the wrong metric
- result = rdfox.get_observations(
- PROBS.TimePeriod_YearOf2016,
- GEONAMES["2635167"] ,
- metric,
- PROBS.SoldProduction,
- object_code=code
- )
- assert_no_result(result)
- class TestProdcom2017Data:
- """Test PRODCOM2017 DATA conversion.
- Just include a few expected values, since other behaviour is tested for the 2016 data.
- """
- endpoint_data = ["outputs/PRODCOM2017DATA.nt.gz",
- "outputs/PRD_2017_20200617_185035.nt.gz"]
- @pytest.mark.parametrize("code,metric,expected_value", [
- ("10721253", QUANTITYKIND.Mass, 244871494),
- ("16212400", QUANTITYKIND.Volume, 0),
- ("23111290", QUANTITYKIND.Area, 28514781),
- ("25711430", QUANTITYKIND.AmountOfSubstance, 329685),
- ])
- def test_expected_measurements(self, rdfox, code, metric, expected_value):
- result = rdfox.get_observations(
- PROBS.TimePeriod_YearOf2017,
- GEONAMES["2635167"],
- metric,
- PROBS.SoldProduction,
- object_code=code
- )
- assert_exact_results(result, expected_value)
- class TestProdcom2018Data:
- """Test PRODCOM2018 DATA conversion.
- Just include a few expected values, since other behaviour is tested for the 2016 data.
- """
- endpoint_data = ["outputs/PRODCOM2018DATA.nt.gz",
- "outputs/PRD_2017_20200617_185035.nt.gz"]
- @pytest.mark.parametrize("code,metric,expected_value", [
- ("10131120", QUANTITYKIND.Mass, 104282828),
- ("11052000", QUANTITYKIND.Mass, 737526732),
- ("13921530", QUANTITYKIND.Area, 1197738),
- ("15112200", QUANTITYKIND.Area, 0),
- ])
- def test_expected_measurements(self, rdfox, code, metric, expected_value):
- result = rdfox.get_observations(
- PROBS.TimePeriod_YearOf2018,
- GEONAMES["2635167"],
- metric,
- PROBS.SoldProduction,
- object_code=code
- )
- assert_exact_results(result, expected_value)
|