improver
improver copied to clipboard
Add support for cf-units 3.*
A new version of cf-units (3.0.0) has been released with breaking changes: release notes. This leads to 48 unit test failures in IMPROVER. I discovered this during testing with the new Conda environments using Iris 3 (see PR #1507).
These test failures stop us from using the latest cf-units (3.0.0). They require further investigation.
Related issues: #1437, #1507, #1517, #1522
See pytest output:
============================= test session starts ==============================
platform linux -- Python 3.8.10, pytest-6.2.4, py-1.10.0, pluggy-0.13.1
rootdir: /home/dmentipl/repos/improver, configfile: pytest.ini, testpaths: improver_tests
plugins: cov-2.12.1, forked-1.3.0, xdist-2.3.0
collected 2752 items / 315 deselected / 2437 selected
improver_tests/test_PostProcessingPlugin.py ... [ 0%]
improver_tests/test_licence.py . [ 0%]
improver_tests/acceptance/test_checksums.py . [ 0%]
improver_tests/between_thresholds/test_between_thresholds.py .......... [ 0%]
improver_tests/blending/test_utilities.py ...... [ 0%]
improver_tests/blending/blend_across_adjacent_points/test_TriangularWeightedBlendAcrossAdjacentPoints.py . [ 0%]
.......... [ 1%]
improver_tests/blending/calculate_weights_and_blend/test_WeightAndBlend.py . [ 1%]
......................... [ 2%]
improver_tests/blending/spatial_weights/test_SpatiallyVaryingWeightsFromMask.py . [ 2%]
.............. [ 2%]
improver_tests/blending/weighted_blend/test_MergeCubesForWeightedBlending.py . [ 3%]
................... [ 3%]
improver_tests/blending/weighted_blend/test_PercentileBlendingAggregator.py . [ 3%]
........ [ 4%]
improver_tests/blending/weighted_blend/test_WeightedBlendAcrossWholeDimension.py . [ 4%]
................................... [ 5%]
improver_tests/blending/weights/test_ChooseDefaultWeightsLinear.py ..... [ 5%]
......... [ 6%]
improver_tests/blending/weights/test_ChooseDefaultWeightsNonLinear.py .. [ 6%]
........... [ 6%]
improver_tests/blending/weights/test_ChooseDefaultWeightsTriangular.py . [ 6%]
............. [ 7%]
improver_tests/blending/weights/test_ChooseWeightsLinear.py ............ [ 7%]
............ [ 8%]
improver_tests/blending/weights/test_WeightsUtilities.py ............. [ 8%]
improver_tests/calibration/test_init.py ........ [ 9%]
improver_tests/calibration/ensemble_calibration/test_ApplyEMOS.py ...... [ 9%]
...... [ 9%]
improver_tests/calibration/ensemble_calibration/test_CalibratedForecastDistributionParameters.py . [ 9%]
.................. [ 10%]
improver_tests/calibration/ensemble_calibration/test_ContinuousRankedProbabilityScoreMinimisers.py . [ 10%]
...................... [ 11%]
improver_tests/calibration/ensemble_calibration/test_EstimateCoefficientsForEnsembleCalibration.py . [ 11%]
...........................s..s.........s... [ 13%]
improver_tests/calibration/reliability_calibration/test_AggregateReliabilityCalibrationTables.py . [ 13%]
......... [ 13%]
improver_tests/calibration/reliability_calibration/test_ApplyReliabilityCalibration.py . [ 13%]
................. [ 14%]
improver_tests/calibration/reliability_calibration/test_ConstructReliabilityCalibrationTables.py . [ 14%]
................... [ 15%]
improver_tests/calibration/reliability_calibration/test_ManipulateReliabilityTable.py . [ 15%]
......................... [ 16%]
improver_tests/calibration/utilities/test_utilities.py ................. [ 16%]
........................s [ 18%]
improver_tests/cli/test_init.py ......................... [ 19%]
improver_tests/cube_combiner/test_CubeCombiner.py ............... [ 19%]
improver_tests/cube_combiner/test_CubeMultiplier.py ...... [ 19%]
improver_tests/developer_tools/test_MOMetadataInterpreter.py ........... [ 20%]
..................................... [ 21%]
improver_tests/developer_tools/test_display_interpretation.py .......... [ 22%]
... [ 22%]
improver_tests/ensemble_copula_coupling/test_ConvertLocationAndScaleParameters.py . [ 22%]
....... [ 22%]
improver_tests/ensemble_copula_coupling/test_ConvertLocationAndScaleParametersToPercentiles.py . [ 22%]
............... [ 23%]
improver_tests/ensemble_copula_coupling/test_ConvertLocationAndScaleParametersToProbabilities.py . [ 23%]
............... [ 24%]
improver_tests/ensemble_copula_coupling/test_ConvertProbabilitiesToPercentiles.py . [ 24%]
........................... [ 25%]
improver_tests/ensemble_copula_coupling/test_EnsembleReordering.py ..... [ 25%]
........... [ 25%]
improver_tests/ensemble_copula_coupling/test_RebadgePercentilesAsRealizations.py . [ 25%]
... [ 26%]
improver_tests/ensemble_copula_coupling/test_ResamplePercentiles.py .... [ 26%]
.............. [ 26%]
improver_tests/ensemble_copula_coupling/test_utilities.py .............. [ 27%]
............ [ 27%]
improver_tests/feels_like_temperature/test_feels_like_temperature.py ... [ 27%]
...... [ 28%]
improver_tests/generate_ancillaries/test_CorrectLandSeaMask.py . [ 28%]
improver_tests/generate_ancillaries/test_GenerateOrographyBandAncils.py . [ 28%]
.............. [ 28%]
improver_tests/generate_ancillaries/test_GenerateTimezoneMask.py F...... [ 29%]
.......FF..FF..FF.. [ 29%]
improver_tests/generate_ancillaries/test_GenerateTopographicZoneWeights.py . [ 29%]
...................... [ 30%]
improver_tests/generate_ancillaries/test_OrographicSmoothingCoefficients.py . [ 30%]
.............. [ 31%]
improver_tests/generate_ancillaries/test_SaturatedVapourPressureTable.py . [ 31%]
.... [ 31%]
improver_tests/generate_ancillaries/test_generate_ancillary.py ..... [ 31%]
improver_tests/lapse_rate/test_ApplyGriddedLapseRate.py ........ [ 32%]
improver_tests/lapse_rate/test_LapseRate.py ............................ [ 33%]
... [ 33%]
improver_tests/metadata/test_amend.py ............ [ 33%]
improver_tests/metadata/test_check_datatypes.py .............. [ 34%]
improver_tests/metadata/test_forecast_times.py ....................F.... [ 35%]
. [ 35%]
improver_tests/metadata/test_probabilistic.py .......................... [ 36%]
......... [ 37%]
improver_tests/metadata/test_utilities.py ...................... [ 37%]
improver_tests/nbhood/test_init.py .... [ 38%]
improver_tests/nbhood/circular_kernel/test_CircularNeighbourhood.py .... [ 38%]
................ [ 38%]
improver_tests/nbhood/circular_kernel/test_GeneratePercentilesFromACircularNeighbourhood.py . [ 38%]
...................... [ 39%]
improver_tests/nbhood/circular_kernel/test_check_radius_against_distance.py . [ 39%]
. [ 39%]
improver_tests/nbhood/circular_kernel/test_circular_kernel.py ......... [ 40%]
improver_tests/nbhood/nbhood/test_BaseNeighbourhoodProcessing.py ....... [ 40%]
.......... [ 41%]
improver_tests/nbhood/nbhood/test_GeneratePercentilesFromANeighbourhood.py . [ 41%]
.... [ 41%]
improver_tests/nbhood/nbhood/test_NeighbourhoodProcessing.py ...... [ 41%]
improver_tests/nbhood/recursive_filter/test_RecursiveFilter.py ......... [ 41%]
............... [ 42%]
improver_tests/nbhood/square_kernel/test_SquareNeighbourhood.py ........ [ 42%]
........ [ 43%]
improver_tests/nbhood/use_nbhood/test_ApplyNeighbourhoodProcessingWithAMask.py . [ 43%]
.......... [ 43%]
improver_tests/nowcasting/accumulation/test_Accumulation.py ............ [ 44%]
................ [ 44%]
improver_tests/nowcasting/forecasting/test_AdvectField.py .............. [ 45%]
........... [ 45%]
improver_tests/nowcasting/forecasting/test_CreateExtrapolationForecast.py . [ 45%]
...F.FF. [ 46%]
improver_tests/nowcasting/lightning/test_NowcastLightning.py .....F.FFFF [ 46%]
FF.FFF.......................FF....FF [ 48%]
improver_tests/nowcasting/optical_flow/test_OpticalFlow.py ............. [ 48%]
.............................................. [ 50%]
improver_tests/nowcasting/optical_flow/test_generate_advection_velocities_from_winds.py F [ 50%]
FF [ 50%]
improver_tests/nowcasting/optical_flow/test_generate_optical_flow_components.py . [ 50%]
.. [ 50%]
improver_tests/nowcasting/optical_flow/test_utilities.py ........ [ 51%]
improver_tests/nowcasting/pysteps_advection/test_PystepsExtrapolate.py F [ 51%]
..FFFFF [ 51%]
improver_tests/nowcasting/utilities/test_ApplyOrographicEnhancement.py . [ 51%]
.FFFF...........FFFFFFF [ 52%]
improver_tests/nowcasting/utilities/test_ExtendRadarMask.py ..... [ 52%]
improver_tests/nowcasting/utilities/test_FillRadarHoles.py ... [ 52%]
improver_tests/orographic_enhancement/test_OrographicEnhancement.py .... [ 52%]
........................... [ 54%]
improver_tests/percentile/test_PercentileConverter.py ....... [ 54%]
improver_tests/precipitation_type/calculate_sleet_prob/test_calculate_sleet_probability.py . [ 54%]
... [ 54%]
improver_tests/precipitation_type/convection/test_ConvectionRatioFromComponents.py . [ 54%]
............... [ 55%]
improver_tests/precipitation_type/convection/test_DiagnoseConvectivePrecipitation.py . [ 55%]
............... [ 55%]
improver_tests/precipitation_type/field_texture/test_FieldTexture.py ... [ 55%]
............ [ 56%]
improver_tests/precipitation_type/shower_condition/test_ShowerCondition.py . [ 56%]
..... [ 56%]
improver_tests/precipitation_type/snow_fraction/test_SnowFraction.py ... [ 56%]
....................... [ 57%]
improver_tests/psychrometric_calculations/test_PhaseChangeLevel.py ..... [ 57%]
..................... [ 58%]
improver_tests/psychrometric_calculations/test_WetBulbTemperature.py ... [ 58%]
............ [ 59%]
improver_tests/psychrometric_calculations/test_WetBulbTemperatureIntegral.py . [ 59%]
. [ 59%]
improver_tests/psychrometric_calculations/test_calculate_svp_in_air.py . [ 59%]
.. [ 59%]
improver_tests/psychrometric_calculations/precip_phase_probability/test_PrecipPhaseProbability.py . [ 59%]
........ [ 59%]
improver_tests/psychrometric_calculations/test_significant_phase_mask/test_SignificantPhaseMask.py . [ 59%]
..................... [ 60%]
improver_tests/regrid/test_AdjustLandSeaPoints.py ................. [ 61%]
improver_tests/regrid/test_RegridLandSea.py ........... [ 62%]
improver_tests/regrid/test_RegridWithLandSeaMask.py ..... [ 62%]
improver_tests/regrid/test_grid.py .................. [ 62%]
improver_tests/regrid/test_grid_contains_cutout.py ........ [ 63%]
improver_tests/spotdata/test_NeighbourSelection.py ..................... [ 64%]
.......................... [ 65%]
improver_tests/spotdata/test_SpotExtraction.py ................. [ 65%]
improver_tests/spotdata/test_SpotLapseRateAdjust.py .... [ 66%]
improver_tests/spotdata/test_build_spotdata_cube.py .......... [ 66%]
improver_tests/spotdata/test_check_grid_match.py ...... [ 66%]
improver_tests/standardise/test_StandardiseMetadata.py ......... [ 67%]
improver_tests/synthetic_data/test_generate_metadata.py ................ [ 67%]
...................... [ 68%]
improver_tests/synthetic_data/test_set_up_test_cubes.py ................ [ 69%]
........................................ [ 70%]
improver_tests/synthetic_data/test_utilities.py ....... [ 71%]
improver_tests/threshold/test_BasicThreshold.py ........................ [ 72%]
......................... [ 73%]
improver_tests/utilities/test_DifferenceBetweenAdjacentGridSquares.py .. [ 73%]
........ [ 73%]
improver_tests/utilities/test_GenerateTimeLaggedEnsemble.py ........ [ 73%]
improver_tests/utilities/test_GradientBetweenAdjacentGridSquares.py .. [ 74%]
improver_tests/utilities/test_InterpolateUsingDifference.py ............ [ 74%]
. [ 74%]
improver_tests/utilities/test_OccurrenceWithinVicinity.py ......... [ 74%]
improver_tests/utilities/test_TemporalInterpolation.py ................. [ 75%]
............... [ 76%]
improver_tests/utilities/test_cli_utilities.py .. [ 76%]
improver_tests/utilities/test_compare.py .............. [ 76%]
improver_tests/utilities/test_cube_checker.py ....................... [ 77%]
improver_tests/utilities/test_cube_constraints.py ... [ 78%]
improver_tests/utilities/test_cube_extraction.py ....................... [ 78%]
.......... [ 79%]
improver_tests/utilities/test_indexing_operations.py ....... [ 79%]
improver_tests/utilities/test_interpolate.py ............. [ 80%]
improver_tests/utilities/test_load.py ......................... [ 81%]
improver_tests/utilities/test_mathematical_operations.py ............... [ 81%]
............. [ 82%]
improver_tests/utilities/test_neighbourhood_tools.py .............. [ 82%]
improver_tests/utilities/test_pad_spatial.py ...................... [ 83%]
improver_tests/utilities/test_rescale.py .......... [ 84%]
improver_tests/utilities/test_round.py .... [ 84%]
improver_tests/utilities/test_save.py ......................... [ 85%]
improver_tests/utilities/test_spatial.py .........................x. [ 86%]
improver_tests/utilities/test_warnings_handler.py .......... [ 86%]
improver_tests/utilities/cube_manipulation/test_MergeCubes.py .......... [ 87%]
....... [ 87%]
improver_tests/utilities/cube_manipulation/test_clip_cube_data.py .. [ 87%]
improver_tests/utilities/cube_manipulation/test_collapse_realizations.py . [ 87%]
[ 87%]
improver_tests/utilities/cube_manipulation/test_collapsed.py ... [ 87%]
improver_tests/utilities/cube_manipulation/test_compare_attributes.py .. [ 87%]
....... [ 88%]
improver_tests/utilities/cube_manipulation/test_compare_coords.py ...... [ 88%]
[ 88%]
improver_tests/utilities/cube_manipulation/test_enforce_coordinate_ordering.py . [ 88%]
......... [ 88%]
improver_tests/utilities/cube_manipulation/test_expand_bounds.py ..... [ 89%]
improver_tests/utilities/cube_manipulation/test_get_filtered_attributes.py . [ 89%]
... [ 89%]
improver_tests/utilities/cube_manipulation/test_sort_coord_in_cube.py .. [ 89%]
..... [ 89%]
improver_tests/utilities/cube_manipulation/test_strip_var_names.py .... [ 89%]
improver_tests/utilities/solar/test_DayNightMask.py ......... [ 90%]
improver_tests/utilities/solar/test_solar.py .................... [ 90%]
improver_tests/utilities/temporal/test_TimezoneExtraction.py .....F..... [ 91%]
........ [ 91%]
improver_tests/utilities/temporal/test_temporal.py .........FF.......... [ 92%]
..... [ 92%]
improver_tests/uv_index/test_uv_index.py ...... [ 93%]
improver_tests/wind_calculations/wind_components/test_ResolveWindComponents.py . [ 93%]
.......... [ 93%]
improver_tests/wind_calculations/wind_direction/test_WindDirection.py .. [ 93%]
....................... [ 94%]
improver_tests/wind_calculations/wind_downscaling/test_FrictionVelocity.py . [ 94%]
.... [ 94%]
improver_tests/wind_calculations/wind_downscaling/test_RoughnessCorrection.py . [ 94%]
........................... [ 95%]
improver_tests/wind_calculations/wind_gust_diagnostic/test_WindGustDiagnostic.py . [ 95%]
................. [ 96%]
improver_tests/wxcode/wxcode/test_WeatherSymbols.py .................... [ 97%]
.......................... [ 98%]
improver_tests/wxcode/wxcode/test_utilities.py .................. [ 99%]
improver_tests/wxcode/wxcode/test_wxcode_decision_tree.py .............. [ 99%]
..... [100%]
=================================== FAILURES ===================================
________________________________ test__set_time ________________________________
uk_grid = <iris 'Cube' of template / (K) (projection_y_coordinate: 21; projection_x_coordinate: 22)>
def test__set_time(uk_grid):
"""Test time is set correctly from either the cube or user."""
# Set by the cube time coordinate
expected = datetime(2017, 11, 10, 4, tzinfo=pytz.utc)
plugin = GenerateTimezoneMask()
> plugin._set_time(uk_grid)
improver_tests/generate_ancillaries/test_GenerateTimezoneMask.py:133:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
improver/generate_ancillaries/generate_timezone_mask.py:129: in _set_time
self.time = pytz.utc.localize(self.time)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <UTC>, dt = cftime.DatetimeGregorian(2017, 11, 10, 4, 0, 0, 0)
is_dst = False
def localize(self, dt, is_dst=False):
'''Convert naive time to local time'''
> if dt.tzinfo is not None:
E AttributeError: 'cftime._cftime.DatetimeGregorian' object has no attribute 'tzinfo'
../../conda/envs/improver_py38_iris30/lib/python3.8/site-packages/pytz/__init__.py:244: AttributeError
___________________ test_process[global_grid-None-ungrouped] ___________________
request = <FixtureRequest for <Function test_process[global_grid-None-ungrouped]>>
grid_fixture = 'global_grid', time = None, grouping = 'ungrouped'
@pytest.mark.parametrize("grouping", ["ungrouped", "grouped"])
@pytest.mark.parametrize("time", [None, "20200716T1500Z"])
@pytest.mark.parametrize("grid_fixture", ["global_grid", "global_grid_360", "uk_grid"])
def test_process(request, grid_fixture, time, grouping):
"""Test that the process method returns cubes that take the expected form
for different grids and different dates.
The output data is primarily checked in the acceptance tests as a reasonably
large number of data points are required to reliably check it. Here we check
only a small sample."""
domain = grid_fixture.split("_")[0]
groupings = None
if grouping == "grouped":
groupings = {-6: [-12, 0], 6: [1, 14]}
expected = EXPECTED[grouping][domain][time]
expected_time = EXPECTED_TIME[time]
index = EXPECTED[grouping][domain]["indices"]
grid = request.getfixturevalue(grid_fixture)
> result = GenerateTimezoneMask(time=time, include_dst=True, groupings=groupings)(
grid
)
improver_tests/generate_ancillaries/test_GenerateTimezoneMask.py:383:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
improver/__init__.py:60: in __call__
return self.process(*args, **kwargs)
improver/generate_ancillaries/generate_timezone_mask.py:344: in process
self._set_time(cube)
improver/generate_ancillaries/generate_timezone_mask.py:129: in _set_time
self.time = pytz.utc.localize(self.time)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <UTC>, dt = cftime.DatetimeGregorian(2017, 11, 10, 4, 0, 0, 0)
is_dst = False
def localize(self, dt, is_dst=False):
'''Convert naive time to local time'''
> if dt.tzinfo is not None:
E AttributeError: 'cftime._cftime.DatetimeGregorian' object has no attribute 'tzinfo'
../../conda/envs/improver_py38_iris30/lib/python3.8/site-packages/pytz/__init__.py:244: AttributeError
____________________ test_process[global_grid-None-grouped] ____________________
request = <FixtureRequest for <Function test_process[global_grid-None-grouped]>>
grid_fixture = 'global_grid', time = None, grouping = 'grouped'
@pytest.mark.parametrize("grouping", ["ungrouped", "grouped"])
@pytest.mark.parametrize("time", [None, "20200716T1500Z"])
@pytest.mark.parametrize("grid_fixture", ["global_grid", "global_grid_360", "uk_grid"])
def test_process(request, grid_fixture, time, grouping):
"""Test that the process method returns cubes that take the expected form
for different grids and different dates.
The output data is primarily checked in the acceptance tests as a reasonably
large number of data points are required to reliably check it. Here we check
only a small sample."""
domain = grid_fixture.split("_")[0]
groupings = None
if grouping == "grouped":
groupings = {-6: [-12, 0], 6: [1, 14]}
expected = EXPECTED[grouping][domain][time]
expected_time = EXPECTED_TIME[time]
index = EXPECTED[grouping][domain]["indices"]
grid = request.getfixturevalue(grid_fixture)
> result = GenerateTimezoneMask(time=time, include_dst=True, groupings=groupings)(
grid
)
improver_tests/generate_ancillaries/test_GenerateTimezoneMask.py:383:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
improver/__init__.py:60: in __call__
return self.process(*args, **kwargs)
improver/generate_ancillaries/generate_timezone_mask.py:344: in process
self._set_time(cube)
improver/generate_ancillaries/generate_timezone_mask.py:129: in _set_time
self.time = pytz.utc.localize(self.time)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <UTC>, dt = cftime.DatetimeGregorian(2017, 11, 10, 4, 0, 0, 0)
is_dst = False
def localize(self, dt, is_dst=False):
'''Convert naive time to local time'''
> if dt.tzinfo is not None:
E AttributeError: 'cftime._cftime.DatetimeGregorian' object has no attribute 'tzinfo'
../../conda/envs/improver_py38_iris30/lib/python3.8/site-packages/pytz/__init__.py:244: AttributeError
_________________ test_process[global_grid_360-None-ungrouped] _________________
request = <FixtureRequest for <Function test_process[global_grid_360-None-ungrouped]>>
grid_fixture = 'global_grid_360', time = None, grouping = 'ungrouped'
@pytest.mark.parametrize("grouping", ["ungrouped", "grouped"])
@pytest.mark.parametrize("time", [None, "20200716T1500Z"])
@pytest.mark.parametrize("grid_fixture", ["global_grid", "global_grid_360", "uk_grid"])
def test_process(request, grid_fixture, time, grouping):
"""Test that the process method returns cubes that take the expected form
for different grids and different dates.
The output data is primarily checked in the acceptance tests as a reasonably
large number of data points are required to reliably check it. Here we check
only a small sample."""
domain = grid_fixture.split("_")[0]
groupings = None
if grouping == "grouped":
groupings = {-6: [-12, 0], 6: [1, 14]}
expected = EXPECTED[grouping][domain][time]
expected_time = EXPECTED_TIME[time]
index = EXPECTED[grouping][domain]["indices"]
grid = request.getfixturevalue(grid_fixture)
> result = GenerateTimezoneMask(time=time, include_dst=True, groupings=groupings)(
grid
)
improver_tests/generate_ancillaries/test_GenerateTimezoneMask.py:383:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
improver/__init__.py:60: in __call__
return self.process(*args, **kwargs)
improver/generate_ancillaries/generate_timezone_mask.py:344: in process
self._set_time(cube)
improver/generate_ancillaries/generate_timezone_mask.py:129: in _set_time
self.time = pytz.utc.localize(self.time)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <UTC>, dt = cftime.DatetimeGregorian(2017, 11, 10, 4, 0, 0, 0)
is_dst = False
def localize(self, dt, is_dst=False):
'''Convert naive time to local time'''
> if dt.tzinfo is not None:
E AttributeError: 'cftime._cftime.DatetimeGregorian' object has no attribute 'tzinfo'
../../conda/envs/improver_py38_iris30/lib/python3.8/site-packages/pytz/__init__.py:244: AttributeError
__________________ test_process[global_grid_360-None-grouped] __________________
request = <FixtureRequest for <Function test_process[global_grid_360-None-grouped]>>
grid_fixture = 'global_grid_360', time = None, grouping = 'grouped'
@pytest.mark.parametrize("grouping", ["ungrouped", "grouped"])
@pytest.mark.parametrize("time", [None, "20200716T1500Z"])
@pytest.mark.parametrize("grid_fixture", ["global_grid", "global_grid_360", "uk_grid"])
def test_process(request, grid_fixture, time, grouping):
"""Test that the process method returns cubes that take the expected form
for different grids and different dates.
The output data is primarily checked in the acceptance tests as a reasonably
large number of data points are required to reliably check it. Here we check
only a small sample."""
domain = grid_fixture.split("_")[0]
groupings = None
if grouping == "grouped":
groupings = {-6: [-12, 0], 6: [1, 14]}
expected = EXPECTED[grouping][domain][time]
expected_time = EXPECTED_TIME[time]
index = EXPECTED[grouping][domain]["indices"]
grid = request.getfixturevalue(grid_fixture)
> result = GenerateTimezoneMask(time=time, include_dst=True, groupings=groupings)(
grid
)
improver_tests/generate_ancillaries/test_GenerateTimezoneMask.py:383:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
improver/__init__.py:60: in __call__
return self.process(*args, **kwargs)
improver/generate_ancillaries/generate_timezone_mask.py:344: in process
self._set_time(cube)
improver/generate_ancillaries/generate_timezone_mask.py:129: in _set_time
self.time = pytz.utc.localize(self.time)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <UTC>, dt = cftime.DatetimeGregorian(2017, 11, 10, 4, 0, 0, 0)
is_dst = False
def localize(self, dt, is_dst=False):
'''Convert naive time to local time'''
> if dt.tzinfo is not None:
E AttributeError: 'cftime._cftime.DatetimeGregorian' object has no attribute 'tzinfo'
../../conda/envs/improver_py38_iris30/lib/python3.8/site-packages/pytz/__init__.py:244: AttributeError
_____________________ test_process[uk_grid-None-ungrouped] _____________________
request = <FixtureRequest for <Function test_process[uk_grid-None-ungrouped]>>
grid_fixture = 'uk_grid', time = None, grouping = 'ungrouped'
@pytest.mark.parametrize("grouping", ["ungrouped", "grouped"])
@pytest.mark.parametrize("time", [None, "20200716T1500Z"])
@pytest.mark.parametrize("grid_fixture", ["global_grid", "global_grid_360", "uk_grid"])
def test_process(request, grid_fixture, time, grouping):
"""Test that the process method returns cubes that take the expected form
for different grids and different dates.
The output data is primarily checked in the acceptance tests as a reasonably
large number of data points are required to reliably check it. Here we check
only a small sample."""
domain = grid_fixture.split("_")[0]
groupings = None
if grouping == "grouped":
groupings = {-6: [-12, 0], 6: [1, 14]}
expected = EXPECTED[grouping][domain][time]
expected_time = EXPECTED_TIME[time]
index = EXPECTED[grouping][domain]["indices"]
grid = request.getfixturevalue(grid_fixture)
> result = GenerateTimezoneMask(time=time, include_dst=True, groupings=groupings)(
grid
)
improver_tests/generate_ancillaries/test_GenerateTimezoneMask.py:383:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
improver/__init__.py:60: in __call__
return self.process(*args, **kwargs)
improver/generate_ancillaries/generate_timezone_mask.py:344: in process
self._set_time(cube)
improver/generate_ancillaries/generate_timezone_mask.py:129: in _set_time
self.time = pytz.utc.localize(self.time)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <UTC>, dt = cftime.DatetimeGregorian(2017, 11, 10, 4, 0, 0, 0)
is_dst = False
def localize(self, dt, is_dst=False):
'''Convert naive time to local time'''
> if dt.tzinfo is not None:
E AttributeError: 'cftime._cftime.DatetimeGregorian' object has no attribute 'tzinfo'
../../conda/envs/improver_py38_iris30/lib/python3.8/site-packages/pytz/__init__.py:244: AttributeError
______________________ test_process[uk_grid-None-grouped] ______________________
request = <FixtureRequest for <Function test_process[uk_grid-None-grouped]>>
grid_fixture = 'uk_grid', time = None, grouping = 'grouped'
@pytest.mark.parametrize("grouping", ["ungrouped", "grouped"])
@pytest.mark.parametrize("time", [None, "20200716T1500Z"])
@pytest.mark.parametrize("grid_fixture", ["global_grid", "global_grid_360", "uk_grid"])
def test_process(request, grid_fixture, time, grouping):
"""Test that the process method returns cubes that take the expected form
for different grids and different dates.
The output data is primarily checked in the acceptance tests as a reasonably
large number of data points are required to reliably check it. Here we check
only a small sample."""
domain = grid_fixture.split("_")[0]
groupings = None
if grouping == "grouped":
groupings = {-6: [-12, 0], 6: [1, 14]}
expected = EXPECTED[grouping][domain][time]
expected_time = EXPECTED_TIME[time]
index = EXPECTED[grouping][domain]["indices"]
grid = request.getfixturevalue(grid_fixture)
> result = GenerateTimezoneMask(time=time, include_dst=True, groupings=groupings)(
grid
)
improver_tests/generate_ancillaries/test_GenerateTimezoneMask.py:383:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
improver/__init__.py:60: in __call__
return self.process(*args, **kwargs)
improver/generate_ancillaries/generate_timezone_mask.py:344: in process
self._set_time(cube)
improver/generate_ancillaries/generate_timezone_mask.py:129: in _set_time
self.time = pytz.utc.localize(self.time)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <UTC>, dt = cftime.DatetimeGregorian(2017, 11, 10, 4, 0, 0, 0)
is_dst = False
def localize(self, dt, is_dst=False):
'''Convert naive time to local time'''
> if dt.tzinfo is not None:
E AttributeError: 'cftime._cftime.DatetimeGregorian' object has no attribute 'tzinfo'
../../conda/envs/improver_py38_iris30/lib/python3.8/site-packages/pytz/__init__.py:244: AttributeError
____________________ Test__find_latest_cycletime.test_basic ____________________
self = <improver_tests.metadata.test_forecast_times.Test__find_latest_cycletime testMethod=test_basic>
def test_basic(self):
"""Test the type of the output and that the input is unchanged."""
original_cubelist = iris.cube.CubeList(
[self.input_cube.copy(), self.input_cube2.copy()]
)
cycletime = _find_latest_cycletime(self.input_cubelist)
self.assertEqual(self.input_cubelist[0], original_cubelist[0])
self.assertEqual(self.input_cubelist[1], original_cubelist[1])
> self.assertIsInstance(cycletime, datetime)
E AssertionError: cftime.DatetimeGregorian(2015, 11, 23, 4, 0, 0, 0) is not an instance of <class 'datetime.datetime'>
improver_tests/metadata/test_forecast_times.py:384: AssertionError
___________________ Test__init__.test_orographic_enhancement ___________________
self = <improver_tests.nowcasting.forecasting.test_CreateExtrapolationForecast.Test__init__ testMethod=test_orographic_enhancement>
def test_orographic_enhancement(self):
"""Test what happens if an orographic enhancement cube is provided"""
> plugin = CreateExtrapolationForecast(
self.precip_cube,
self.vel_x,
self.vel_y,
orographic_enhancement_cube=self.oe_cube.copy(),
)
improver_tests/nowcasting/forecasting/test_CreateExtrapolationForecast.py:132:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
improver/nowcasting/forecasting.py:438: in __init__
(input_cube,) = ApplyOrographicEnhancement("subtract")(
improver/__init__.py:60: in __call__
return self.process(*args, **kwargs)
improver/nowcasting/utilities.py:388: in process
oe_cube = self._select_orographic_enhancement_cube(
improver/nowcasting/utilities.py:271: in _select_orographic_enhancement_cube
oe_cube_slice = extract_nearest_time_point(
improver/utilities/temporal.py:260: in extract_nearest_time_point
time_point = datetime_to_iris_time(dt)
improver/utilities/temporal.py:158: in datetime_to_iris_time
result = dt_in.replace(tzinfo=timezone.utc).timestamp()
cftime/_cftime.pyx:942: in cftime._cftime.datetime.replace
???
cftime/_cftime.pyx:1203: in cftime._cftime.DatetimeGregorian.__init__
???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> ???
E TypeError: __init__() got an unexpected keyword argument 'tzinfo'
cftime/_cftime.pyx:862: TypeError
___________________________ Test__repr__.test_basic ____________________________
self = <improver_tests.nowcasting.forecasting.test_CreateExtrapolationForecast.Test__repr__ testMethod=test_basic>
def test_basic(self):
"""Test string representation"""
> plugin = CreateExtrapolationForecast(
self.precip_cube,
self.vel_x,
self.vel_y,
orographic_enhancement_cube=self.oe_cube,
)
improver_tests/nowcasting/forecasting/test_CreateExtrapolationForecast.py:164:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
improver/nowcasting/forecasting.py:438: in __init__
(input_cube,) = ApplyOrographicEnhancement("subtract")(
improver/__init__.py:60: in __call__
return self.process(*args, **kwargs)
improver/nowcasting/utilities.py:388: in process
oe_cube = self._select_orographic_enhancement_cube(
improver/nowcasting/utilities.py:271: in _select_orographic_enhancement_cube
oe_cube_slice = extract_nearest_time_point(
improver/utilities/temporal.py:260: in extract_nearest_time_point
time_point = datetime_to_iris_time(dt)
improver/utilities/temporal.py:158: in datetime_to_iris_time
result = dt_in.replace(tzinfo=timezone.utc).timestamp()
cftime/_cftime.pyx:942: in cftime._cftime.datetime.replace
???
cftime/_cftime.pyx:1203: in cftime._cftime.DatetimeGregorian.__init__
???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> ???
E TypeError: __init__() got an unexpected keyword argument 'tzinfo'
cftime/_cftime.pyx:862: TypeError
______________ Test_extrapolate.test_with_orographic_enhancement _______________
self = <improver_tests.nowcasting.forecasting.test_CreateExtrapolationForecast.Test_extrapolate testMethod=test_with_orographic_enhancement>
def test_with_orographic_enhancement(self):
"""Test plugin returns the correct advected forecast cube, with
orographic enhancement.
In this case we have 600m grid spacing in our cubes, and 1m/s
advection velocities in the x and y direction, so after 10 minutes,
our precipitation will have moved exactly one grid square along
each axis.
The orographic enhancement has been removed before advecting, then
added back on afterwards, leading to a different end result."""
> plugin = CreateExtrapolationForecast(
self.precip_cube,
self.vel_x,
self.vel_y,
orographic_enhancement_cube=self.oe_cube,
)
improver_tests/nowcasting/forecasting/test_CreateExtrapolationForecast.py:233:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
improver/nowcasting/forecasting.py:438: in __init__
(input_cube,) = ApplyOrographicEnhancement("subtract")(
improver/__init__.py:60: in __call__
return self.process(*args, **kwargs)
improver/nowcasting/utilities.py:388: in process
oe_cube = self._select_orographic_enhancement_cube(
improver/nowcasting/utilities.py:271: in _select_orographic_enhancement_cube
oe_cube_slice = extract_nearest_time_point(
improver/utilities/temporal.py:260: in extract_nearest_time_point
time_point = datetime_to_iris_time(dt)
improver/utilities/temporal.py:158: in datetime_to_iris_time
result = dt_in.replace(tzinfo=timezone.utc).timestamp()
cftime/_cftime.pyx:942: in cftime._cftime.datetime.replace
???
cftime/_cftime.pyx:1203: in cftime._cftime.DatetimeGregorian.__init__
???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> ???
E TypeError: __init__() got an unexpected keyword argument 'tzinfo'
cftime/_cftime.pyx:862: TypeError
_____________________ Test__modify_first_guess.test_basic ______________________
self = <improver_tests.nowcasting.lightning.test_NowcastLightning.Test__modify_first_guess testMethod=test_basic>
def test_basic(self):
"""Test that the method returns the expected cube type"""
> result = self.plugin._modify_first_guess(
self.cube, self.fg_cube, self.ltng_cube, self.precip_cube, self.vii_cube
)
improver_tests/nowcasting/lightning/test_NowcastLightning.py:298:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
improver/nowcasting/lightning.py:279: in _modify_first_guess
first_guess_slice = extract_nearest_time_point(
improver/utilities/temporal.py:260: in extract_nearest_time_point
time_point = datetime_to_iris_time(dt)
improver/utilities/temporal.py:158: in datetime_to_iris_time
result = dt_in.replace(tzinfo=timezone.utc).timestamp()
cftime/_cftime.pyx:942: in cftime._cftime.datetime.replace
???
cftime/_cftime.pyx:1203: in cftime._cftime.DatetimeGregorian.__init__
???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> ???
E TypeError: __init__() got an unexpected keyword argument 'tzinfo'
cftime/_cftime.pyx:862: TypeError
_________________ Test__modify_first_guess.test_input_with_vii _________________
self = <improver_tests.nowcasting.lightning.test_NowcastLightning.Test__modify_first_guess testMethod=test_input_with_vii>
def test_input_with_vii(self):
"""Test that the method does not modify the input cubes."""
cube_a = self.cube.copy()
cube_b = self.fg_cube.copy()
cube_c = self.ltng_cube.copy()
cube_d = self.precip_cube.copy()
cube_e = self.vii_cube.copy()
> self.plugin._modify_first_guess(cube_a, cube_b, cube_c, cube_d, cube_e)
improver_tests/nowcasting/lightning/test_NowcastLightning.py:310:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
improver/nowcasting/lightning.py:279: in _modify_first_guess
first_guess_slice = extract_nearest_time_point(
improver/utilities/temporal.py:260: in extract_nearest_time_point
time_point = datetime_to_iris_time(dt)
improver/utilities/temporal.py:158: in datetime_to_iris_time
result = dt_in.replace(tzinfo=timezone.utc).timestamp()
cftime/_cftime.pyx:942: in cftime._cftime.datetime.replace
???
cftime/_cftime.pyx:1203: in cftime._cftime.DatetimeGregorian.__init__
???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> ???
E TypeError: __init__() got an unexpected keyword argument 'tzinfo'
cftime/_cftime.pyx:862: TypeError
__________________ Test__modify_first_guess.test_lrate_large ___________________
self = <improver_tests.nowcasting.lightning.test_NowcastLightning.Test__modify_first_guess testMethod=test_lrate_large>
def test_lrate_large(self):
"""Test that large lightning rates increase zero lightning risk"""
expected = self.fg_cube.copy()
# expected.data contains all ones
# Set prob(precip) data for lowest threshold to to 1., so it has a Null
# impact when lightning is present.
self.precip_cube.data[0, 1, 1] = 1.0
# Set first-guess data zero point that will be increased
self.fg_cube.data[1, 1] = 0.0
# No halo - we're only testing this method.
> result = self.plugin._modify_first_guess(
self.cube, self.fg_cube, self.ltng_cube, self.precip_cube, None
)
improver_tests/nowcasting/lightning/test_NowcastLightning.py:400:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
improver/nowcasting/lightning.py:279: in _modify_first_guess
first_guess_slice = extract_nearest_time_point(
improver/utilities/temporal.py:260: in extract_nearest_time_point
time_point = datetime_to_iris_time(dt)
improver/utilities/temporal.py:158: in datetime_to_iris_time
result = dt_in.replace(tzinfo=timezone.utc).timestamp()
cftime/_cftime.pyx:942: in cftime._cftime.datetime.replace
???
cftime/_cftime.pyx:1203: in cftime._cftime.DatetimeGregorian.__init__
???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> ???
E TypeError: __init__() got an unexpected keyword argument 'tzinfo'
cftime/_cftime.pyx:862: TypeError
________________ Test__modify_first_guess.test_lrate_large_null ________________
self = <improver_tests.nowcasting.lightning.test_NowcastLightning.Test__modify_first_guess testMethod=test_lrate_large_null>
def test_lrate_large_null(self):
"""Test that large lightning rates do not increase high lightning
risk"""
expected = self.fg_cube.copy()
# expected.data contains all ones
# Set precip data to 1. so it has a Null impact
# Set prob(precip) data for lowest threshold to to 1., so it has a Null
# impact when lightning is present.
self.precip_cube.data[0, 1, 1] = 1.0
# Set first-guess data zero point that will be increased
self.fg_cube.data[1, 1] = 1.0
# No halo - we're only testing this method.
> result = self.plugin._modify_first_guess(
self.cube, self.fg_cube, self.ltng_cube, self.precip_cube, None
)
improver_tests/nowcasting/lightning/test_NowcastLightning.py:441:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
improver/nowcasting/lightning.py:279: in _modify_first_guess
first_guess_slice = extract_nearest_time_point(
improver/utilities/temporal.py:260: in extract_nearest_time_point
time_point = datetime_to_iris_time(dt)
improver/utilities/temporal.py:158: in datetime_to_iris_time
result = dt_in.replace(tzinfo=timezone.utc).timestamp()
cftime/_cftime.pyx:942: in cftime._cftime.datetime.replace
???
cftime/_cftime.pyx:1203: in cftime._cftime.DatetimeGregorian.__init__
???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> ???
E TypeError: __init__() got an unexpected keyword argument 'tzinfo'
cftime/_cftime.pyx:862: TypeError
______________ Test__modify_first_guess.test_lrate_large_shortfc _______________
self = <improver_tests.nowcasting.lightning.test_NowcastLightning.Test__modify_first_guess testMethod=test_lrate_large_shortfc>
def test_lrate_large_shortfc(self):
"""Test that nearly-large lightning rates increases zero lightning risk
when forecast_period is non-zero"""
expected = self.fg_cube.copy()
# expected.data contains all ones
# Set precip data to 1. so it has a Null impact
# Set prob(precip) data for lowest threshold to to 1., so it has a Null
# impact when lightning is present.
self.precip_cube.data[0, 1, 1] = 1.0
# Test the impact of the lightning-rate function.
# A highish lightning value at one-hour lead time isn't high enough to
# get to the high lightning category.
self.ltng_cube.data[1, 1] = 0.8
self.cube.coord("forecast_period").points = [3600.0] # seconds
# Set first-guess data zero point that will be increased
self.fg_cube.data[1, 1] = 0.0
# This time, lightning probability increases only to 0.25, not 1.
expected.data[1, 1] = 0.25
# No halo - we're only testing this method.
> result = self.plugin._modify_first_guess(
self.cube, self.fg_cube, self.ltng_cube, self.precip_cube, None
)
improver_tests/nowcasting/lightning/test_NowcastLightning.py:424:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
improver/nowcasting/lightning.py:279: in _modify_first_guess
first_guess_slice = extract_nearest_time_point(
improver/utilities/temporal.py:260: in extract_nearest_time_point
time_point = datetime_to_iris_time(dt)
improver/utilities/temporal.py:158: in datetime_to_iris_time
result = dt_in.replace(tzinfo=timezone.utc).timestamp()
cftime/_cftime.pyx:942: in cftime._cftime.datetime.replace
???
cftime/_cftime.pyx:1203: in cftime._cftime.DatetimeGregorian.__init__
???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> ???
E TypeError: __init__() got an unexpected keyword argument 'tzinfo'
cftime/_cftime.pyx:862: TypeError
__________________ Test__modify_first_guess.test_lrate_small ___________________
self = <improver_tests.nowcasting.lightning.test_NowcastLightning.Test__modify_first_guess testMethod=test_lrate_small>
def test_lrate_small(self):
"""Test that lightning nearby (encoded as lightning rate zero)
increases lightning risk at point"""
# Set prob(precip) data for lowest threshold to to 1., so it has a Null
# impact when lightning is present.
self.precip_cube.data[0, 1, 1] = 1.0
# Set lightning data to zero to represent the data halo
self.ltng_cube.data[1, 1] = 0.0
# Set first-guess data zero point that will be increased
self.fg_cube.data[1, 1] = 0.0
# No halo - we're only testing this method.
expected = self.fg_cube.copy()
# expected.data contains all ones except:
expected.data[1, 1] = 0.25
> result = self.plugin._modify_first_guess(
self.cube, self.fg_cube, self.ltng_cube, self.precip_cube, None
)
improver_tests/nowcasting/lightning/test_NowcastLightning.py:460:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
improver/nowcasting/lightning.py:279: in _modify_first_guess
first_guess_slice = extract_nearest_time_point(
improver/utilities/temporal.py:260: in extract_nearest_time_point
time_point = datetime_to_iris_time(dt)
improver/utilities/temporal.py:158: in datetime_to_iris_time
result = dt_in.replace(tzinfo=timezone.utc).timestamp()
cftime/_cftime.pyx:942: in cftime._cftime.datetime.replace
???
cftime/_cftime.pyx:1203: in cftime._cftime.DatetimeGregorian.__init__
???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> ???
E TypeError: __init__() got an unexpected keyword argument 'tzinfo'
cftime/_cftime.pyx:862: TypeError
______________ Test__modify_first_guess.test_missing_first_guess _______________
self = <improver_tests.nowcasting.lightning.test_NowcastLightning.Test__modify_first_guess testMethod=test_missing_first_guess>
def test_missing_first_guess(self):
"""Test that the method raises an error if the first-guess cube doesn't
match the meta-data cube time coordinate."""
self.fg_cube.coord("time").points = [1.0]
msg = "is not available within the input cube within the " "allowed difference"
with self.assertRaisesRegex(ValueError, msg):
> self.plugin._modify_first_guess(
self.cube, self.fg_cube, self.ltng_cube, self.precip_cube, None
)
improver_tests/nowcasting/lightning/test_NowcastLightning.py:333:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
improver/nowcasting/lightning.py:279: in _modify_first_guess
first_guess_slice = extract_nearest_time_point(
improver/utilities/temporal.py:260: in extract_nearest_time_point
time_point = datetime_to_iris_time(dt)
improver/utilities/temporal.py:158: in datetime_to_iris_time
result = dt_in.replace(tzinfo=timezone.utc).timestamp()
cftime/_cftime.pyx:942: in cftime._cftime.datetime.replace
???
cftime/_cftime.pyx:1203: in cftime._cftime.DatetimeGregorian.__init__
???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> ???
E TypeError: __init__() got an unexpected keyword argument 'tzinfo'
cftime/_cftime.pyx:862: TypeError
______________________ Test__modify_first_guess.test_null ______________________
self = <improver_tests.nowcasting.lightning.test_NowcastLightning.Test__modify_first_guess testMethod=test_null>
def test_null(self):
"""Test that large precip probs and -1 lrates have no impact"""
# Set prob(precip) data for lowest threshold to to 0.1, the highest
# value that has no impact.
self.precip_cube.data[0, 1, 1] = 0.1
# Set lightning data to -1 so it has a Null impact
self.ltng_cube.data = np.full_like(self.ltng_cube.data, -1.0)
# No halo - we're only testing this method.
expected = self.fg_cube.copy()
# expected.data should be an unchanged copy of fg_cube.
> result = self.plugin._modify_first_guess(
self.cube, self.fg_cube, self.ltng_cube, self.precip_cube, None
)
improver_tests/nowcasting/lightning/test_NowcastLightning.py:385:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
improver/nowcasting/lightning.py:279: in _modify_first_guess
first_guess_slice = extract_nearest_time_point(
improver/utilities/temporal.py:260: in extract_nearest_time_point
time_point = datetime_to_iris_time(dt)
improver/utilities/temporal.py:158: in datetime_to_iris_time
result = dt_in.replace(tzinfo=timezone.utc).timestamp()
cftime/_cftime.pyx:942: in cftime._cftime.datetime.replace
???
cftime/_cftime.pyx:1203: in cftime._cftime.DatetimeGregorian.__init__
???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> ???
E TypeError: __init__() got an unexpected keyword argument 'tzinfo'
cftime/_cftime.pyx:862: TypeError
__________________ Test__modify_first_guess.test_precip_zero ___________________
self = <improver_tests.nowcasting.lightning.test_NowcastLightning.Test__modify_first_guess testMethod=test_precip_zero>
def test_precip_zero(self):
"""Test that apply_precip is being called"""
# Set lightning data to "no-data" so it has a Null impact
self.ltng_cube.data = np.full_like(self.ltng_cube.data, -1.0)
# No halo - we're only testing this method.
expected = self.fg_cube.copy()
# expected.data contains all ones except:
expected.data[1, 1] = 0.0067
> result = self.plugin._modify_first_guess(
self.cube, self.fg_cube, self.ltng_cube, self.precip_cube, None
)
improver_tests/nowcasting/lightning/test_NowcastLightning.py:355:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
improver/nowcasting/lightning.py:279: in _modify_first_guess
first_guess_slice = extract_nearest_time_point(
improver/utilities/temporal.py:260: in extract_nearest_time_point
time_point = datetime_to_iris_time(dt)
improver/utilities/temporal.py:158: in datetime_to_iris_time
result = dt_in.replace(tzinfo=timezone.utc).timestamp()
cftime/_cftime.pyx:942: in cftime._cftime.datetime.replace
???
cftime/_cftime.pyx:1203: in cftime._cftime.DatetimeGregorian.__init__
???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> ???
E TypeError: __init__() got an unexpected keyword argument 'tzinfo'
cftime/_cftime.pyx:862: TypeError
___________________ Test__modify_first_guess.test_vii_large ____________________
self = <improver_tests.nowcasting.lightning.test_NowcastLightning.Test__modify_first_guess testMethod=test_vii_large>
def test_vii_large(self):
"""Test that ApplyIce is being called"""
# Set lightning data to zero so it has a Null impact
self.vii_cube.data[:, 1, 1] = 1.0
self.ltng_cube.data[1, 1] = -1.0
self.fg_cube.data[1, 1] = 0.0
# No halo - we're only testing this method.
expected = self.fg_cube.copy()
# expected.data contains all ones except:
expected.data[1, 1] = 0.9
> result = self.plugin._modify_first_guess(
self.cube, self.fg_cube, self.ltng_cube, self.precip_cube, self.vii_cube
)
improver_tests/nowcasting/lightning/test_NowcastLightning.py:370:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
improver/nowcasting/lightning.py:279: in _modify_first_guess
first_guess_slice = extract_nearest_time_point(
improver/utilities/temporal.py:260: in extract_nearest_time_point
time_point = datetime_to_iris_time(dt)
improver/utilities/temporal.py:158: in datetime_to_iris_time
result = dt_in.replace(tzinfo=timezone.utc).timestamp()
cftime/_cftime.pyx:942: in cftime._cftime.datetime.replace
???
cftime/_cftime.pyx:1203: in cftime._cftime.DatetimeGregorian.__init__
???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> ???
E TypeError: __init__() got an unexpected keyword argument 'tzinfo'
cftime/_cftime.pyx:862: TypeError
___________________________ Test_process.test_basic ____________________________
self = <improver_tests.nowcasting.lightning.test_NowcastLightning.Test_process testMethod=test_basic>
def test_basic(self):
"""Test that the method returns the expected cube type with coords"""
> result = self.plugin(CubeList([self.fg_cube, self.ltng_cube, self.precip_cube]))
improver_tests/nowcasting/lightning/test_NowcastLightning.py:835:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
improver/__init__.py:84: in __call__
cube = super().__call__(*args, **kwargs)
improver/__init__.py:60: in __call__
return self.process(*args, **kwargs)
improver/nowcasting/lightning.py:534: in process
new_cube = self._modify_first_guess(
improver/nowcasting/lightning.py:279: in _modify_first_guess
first_guess_slice = extract_nearest_time_point(
improver/utilities/temporal.py:260: in extract_nearest_time_point
time_point = datetime_to_iris_time(dt)
improver/utilities/temporal.py:158: in datetime_to_iris_time
result = dt_in.replace(tzinfo=timezone.utc).timestamp()
cftime/_cftime.pyx:942: in cftime._cftime.datetime.replace
???
cftime/_cftime.pyx:1203: in cftime._cftime.DatetimeGregorian.__init__
???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> ???
E TypeError: __init__() got an unexpected keyword argument 'tzinfo'
cftime/_cftime.pyx:862: TypeError
_______________________ Test_process.test_basic_with_vii _______________________
self = <improver_tests.nowcasting.lightning.test_NowcastLightning.Test_process testMethod=test_basic_with_vii>
def test_basic_with_vii(self):
"""Test that the method returns the expected cube type when vii is
present"""
> result = self.plugin(
CubeList([self.fg_cube, self.ltng_cube, self.precip_cube, self.vii_cube])
)
improver_tests/nowcasting/lightning/test_NowcastLightning.py:851:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
improver/__init__.py:84: in __call__
cube = super().__call__(*args, **kwargs)
improver/__init__.py:60: in __call__
return self.process(*args, **kwargs)
improver/nowcasting/lightning.py:534: in process
new_cube = self._modify_first_guess(
improver/nowcasting/lightning.py:279: in _modify_first_guess
first_guess_slice = extract_nearest_time_point(
improver/utilities/temporal.py:260: in extract_nearest_time_point
time_point = datetime_to_iris_time(dt)
improver/utilities/temporal.py:158: in datetime_to_iris_time
result = dt_in.replace(tzinfo=timezone.utc).timestamp()
cftime/_cftime.pyx:942: in cftime._cftime.datetime.replace
???
cftime/_cftime.pyx:1203: in cftime._cftime.DatetimeGregorian.__init__
???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> ???
E TypeError: __init__() got an unexpected keyword argument 'tzinfo'
cftime/_cftime.pyx:862: TypeError
______________________ Test_process.test_result_with_vii _______________________
self = <improver_tests.nowcasting.lightning.test_NowcastLightning.Test_process testMethod=test_result_with_vii>
def test_result_with_vii(self):
"""Test that the method returns the expected data when vii is
present"""
# Set precip_cube forecast period to be zero.
self.precip_cube.coord("forecast_period").points = [0.0]
expected = self.set_up_vii_input_output()
# No halo - we're only testing this method.
# 2000m is the grid-length, so halo includes only one pixel.
plugin = Plugin(2000.0)
> result = plugin(
CubeList([self.fg_cube, self.ltng_cube, self.precip_cube, self.vii_cube])
)
improver_tests/nowcasting/lightning/test_NowcastLightning.py:915:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
improver/__init__.py:84: in __call__
cube = super().__call__(*args, **kwargs)
improver/__init__.py:60: in __call__
return self.process(*args, **kwargs)
improver/nowcasting/lightning.py:534: in process
new_cube = self._modify_first_guess(
improver/nowcasting/lightning.py:279: in _modify_first_guess
first_guess_slice = extract_nearest_time_point(
improver/utilities/temporal.py:260: in extract_nearest_time_point
time_point = datetime_to_iris_time(dt)
improver/utilities/temporal.py:158: in datetime_to_iris_time
result = dt_in.replace(tzinfo=timezone.utc).timestamp()
cftime/_cftime.pyx:942: in cftime._cftime.datetime.replace
???
cftime/_cftime.pyx:1203: in cftime._cftime.DatetimeGregorian.__init__
???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> ???
E TypeError: __init__() got an unexpected keyword argument 'tzinfo'
cftime/_cftime.pyx:862: TypeError
___________________ Test_process.test_result_with_vii_longfc ___________________
self = <improver_tests.nowcasting.lightning.test_NowcastLightning.Test_process testMethod=test_result_with_vii_longfc>
def test_result_with_vii_longfc(self):
"""Test that the method returns the expected data when vii is
present and forecast time is 4 hours"""
expected = self.set_up_vii_input_output()
# test_vii_null with no precip will now return 0.0067
expected.data[5, 5] = 0.0067
# test_vii_small with no and light precip will now return zero
expected.data[7, 5:7] = 0.0
# test_vii_large with no and light precip now return zero
# and 0.25 for heavy precip
expected.data[8, 5:8] = [0.0, 0.0, 0.25]
# No halo - we're only testing this method.
# 2000m is the grid-length, so halo includes only one pixel.
plugin = Plugin(2000.0)
> result = plugin(
CubeList([self.fg_cube, self.ltng_cube, self.precip_cube, self.vii_cube])
)
improver_tests/nowcasting/lightning/test_NowcastLightning.py:938:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
improver/__init__.py:84: in __call__
cube = super().__call__(*args, **kwargs)
improver/__init__.py:60: in __call__
return self.process(*args, **kwargs)
improver/nowcasting/lightning.py:534: in process
new_cube = self._modify_first_guess(
improver/nowcasting/lightning.py:279: in _modify_first_guess
first_guess_slice = extract_nearest_time_point(
improver/utilities/temporal.py:260: in extract_nearest_time_point
time_point = datetime_to_iris_time(dt)
improver/utilities/temporal.py:158: in datetime_to_iris_time
result = dt_in.replace(tzinfo=timezone.utc).timestamp()
cftime/_cftime.pyx:942: in cftime._cftime.datetime.replace
???
cftime/_cftime.pyx:1203: in cftime._cftime.DatetimeGregorian.__init__
???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> ???
E TypeError: __init__() got an unexpected keyword argument 'tzinfo'
cftime/_cftime.pyx:862: TypeError
___________ Test_generate_advection_velocities_from_winds.test_basic ___________
args = (<improver_tests.nowcasting.optical_flow.test_generate_advection_velocities_from_winds.Test_generate_advection_velocities_from_winds testMethod=test_basic>,)
kwargs = {}, warning_list = None, message = 'No non-zero data in input fields'
warning_type = <class 'UserWarning'>
def warnings_wrapper(*args: Any, **kwargs: Any) -> NoReturn:
"""
Wrapper function to set up the warnings.catch_warnings context
manager and the filters before calling the input function, with
the warning_list if needed.
"""
with warnings.catch_warnings(record=self.record) as warning_list:
warnings.filterwarnings("always")
self.reset_warning_registry()
if self.messages is not None:
for message, warning_type in zip(self.messages, self.warning_types):
warnings.filterwarnings("ignore", message, warning_type)
if self.record:
result = func(*args, warning_list=warning_list, **kwargs)
else:
> result = func(*args, **kwargs)
improver/utilities/warnings_handler.py:136:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
improver_tests/nowcasting/optical_flow/test_generate_advection_velocities_from_winds.py:97: in test_basic
result = generate_advection_velocities_from_winds(
improver/nowcasting/optical_flow.py:136: in generate_advection_velocities_from_winds
advected_cube = PystepsExtrapolate(lead_time_minutes, lead_time_minutes)(
improver/__init__.py:60: in __call__
return self.process(*args, **kwargs)
improver/nowcasting/pysteps_advection.py:266: in process
precip_rate = self._get_advectable_precip_rate()
improver/nowcasting/pysteps_advection.py:82: in _get_advectable_precip_rate
(self.analysis_cube,) = ApplyOrographicEnhancement("subtract").process(
improver/nowcasting/utilities.py:388: in process
oe_cube = self._select_orographic_enhancement_cube(
improver/nowcasting/utilities.py:271: in _select_orographic_enhancement_cube
oe_cube_slice = extract_nearest_time_point(
improver/utilities/temporal.py:260: in extract_nearest_time_point
time_point = datetime_to_iris_time(dt)
improver/utilities/temporal.py:158: in datetime_to_iris_time
result = dt_in.replace(tzinfo=timezone.utc).timestamp()
cftime/_cftime.pyx:942: in cftime._cftime.datetime.replace
???
cftime/_cftime.pyx:1203: in cftime._cftime.DatetimeGregorian.__init__
???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> ???
E TypeError: __init__() got an unexpected keyword argument 'tzinfo'
cftime/_cftime.pyx:862: TypeError
----------------------------- Captured stdout call -----------------------------
Pysteps configuration file found at: /home/dmentipl/conda/envs/improver_py38_iris30/lib/python3.8/site-packages/pysteps/pystepsrc
________ Test_generate_advection_velocities_from_winds.test_input_sort _________
args = (<improver_tests.nowcasting.optical_flow.test_generate_advection_velocities_from_winds.Test_generate_advection_velocities_from_winds testMethod=test_input_sort>,)
kwargs = {}, warning_list = None, message = 'No non-zero data in input fields'
warning_type = <class 'UserWarning'>
def warnings_wrapper(*args: Any, **kwargs: Any) -> NoReturn:
"""
Wrapper function to set up the warnings.catch_warnings context
manager and the filters before calling the input function, with
the warning_list if needed.
"""
with warnings.catch_warnings(record=self.record) as warning_list:
warnings.filterwarnings("always")
self.reset_warning_registry()
if self.messages is not None:
for message, warning_type in zip(self.messages, self.warning_types):
warnings.filterwarnings("ignore", message, warning_type)
if self.record:
result = func(*args, warning_list=warning_list, **kwargs)
else:
> result = func(*args, **kwargs)
improver/utilities/warnings_handler.py:136:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
improver_tests/nowcasting/optical_flow/test_generate_advection_velocities_from_winds.py:121: in test_input_sort
result = generate_advection_velocities_from_winds(
improver/nowcasting/optical_flow.py:136: in generate_advection_velocities_from_winds
advected_cube = PystepsExtrapolate(lead_time_minutes, lead_time_minutes)(
improver/__init__.py:60: in __call__
return self.process(*args, **kwargs)
improver/nowcasting/pysteps_advection.py:266: in process
precip_rate = self._get_advectable_precip_rate()
improver/nowcasting/pysteps_advection.py:82: in _get_advectable_precip_rate
(self.analysis_cube,) = ApplyOrographicEnhancement("subtract").process(
improver/nowcasting/utilities.py:388: in process
oe_cube = self._select_orographic_enhancement_cube(
improver/nowcasting/utilities.py:271: in _select_orographic_enhancement_cube
oe_cube_slice = extract_nearest_time_point(
improver/utilities/temporal.py:260: in extract_nearest_time_point
time_point = datetime_to_iris_time(dt)
improver/utilities/temporal.py:158: in datetime_to_iris_time
result = dt_in.replace(tzinfo=timezone.utc).timestamp()
cftime/_cftime.pyx:942: in cftime._cftime.datetime.replace
???
cftime/_cftime.pyx:1203: in cftime._cftime.DatetimeGregorian.__init__
???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> ???
E TypeError: __init__() got an unexpected keyword argument 'tzinfo'
cftime/_cftime.pyx:862: TypeError
___________ Test_generate_advection_velocities_from_winds.test_time ____________
args = (<improver_tests.nowcasting.optical_flow.test_generate_advection_velocities_from_winds.Test_generate_advection_velocities_from_winds testMethod=test_time>,)
kwargs = {}, warning_list = None, message = 'No non-zero data in input fields'
warning_type = <class 'UserWarning'>
def warnings_wrapper(*args: Any, **kwargs: Any) -> NoReturn:
"""
Wrapper function to set up the warnings.catch_warnings context
manager and the filters before calling the input function, with
the warning_list if needed.
"""
with warnings.catch_warnings(record=self.record) as warning_list:
warnings.filterwarnings("always")
self.reset_warning_registry()
if self.messages is not None:
for message, warning_type in zip(self.messages, self.warning_types):
warnings.filterwarnings("ignore", message, warning_type)
if self.record:
result = func(*args, warning_list=warning_list, **kwargs)
else:
> result = func(*args, **kwargs)
improver/utilities/warnings_handler.py:136:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
improver_tests/nowcasting/optical_flow/test_generate_advection_velocities_from_winds.py:108: in test_time
result = generate_advection_velocities_from_winds(
improver/nowcasting/optical_flow.py:136: in generate_advection_velocities_from_winds
advected_cube = PystepsExtrapolate(lead_time_minutes, lead_time_minutes)(
improver/__init__.py:60: in __call__
return self.process(*args, **kwargs)
improver/nowcasting/pysteps_advection.py:266: in process
precip_rate = self._get_advectable_precip_rate()
improver/nowcasting/pysteps_advection.py:82: in _get_advectable_precip_rate
(self.analysis_cube,) = ApplyOrographicEnhancement("subtract").process(
improver/nowcasting/utilities.py:388: in process
oe_cube = self._select_orographic_enhancement_cube(
improver/nowcasting/utilities.py:271: in _select_orographic_enhancement_cube
oe_cube_slice = extract_nearest_time_point(
improver/utilities/temporal.py:260: in extract_nearest_time_point
time_point = datetime_to_iris_time(dt)
improver/utilities/temporal.py:158: in datetime_to_iris_time
result = dt_in.replace(tzinfo=timezone.utc).timestamp()
cftime/_cftime.pyx:942: in cftime._cftime.datetime.replace
???
cftime/_cftime.pyx:1203: in cftime._cftime.DatetimeGregorian.__init__
???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> ???
E TypeError: __init__() got an unexpected keyword argument 'tzinfo'
cftime/_cftime.pyx:862: TypeError
___________________________ Test_process.test_basic ____________________________
self = <improver_tests.nowcasting.pysteps_advection.test_PystepsExtrapolate.Test_process testMethod=test_basic>
def test_basic(self):
"""Test output is a list of cubes with expected contents and
global attributes"""
expected_analysis = self.rain_cube.data.copy()
> result = self.plugin(self.rain_cube, self.ucube, self.vcube, self.orogenh_cube)
improver_tests/nowcasting/pysteps_advection/test_PystepsExtrapolate.py:152:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
improver/__init__.py:60: in __call__
return self.process(*args, **kwargs)
improver/nowcasting/pysteps_advection.py:266: in process
precip_rate = self._get_advectable_precip_rate()
improver/nowcasting/pysteps_advection.py:82: in _get_advectable_precip_rate
(self.analysis_cube,) = ApplyOrographicEnhancement("subtract").process(
improver/nowcasting/utilities.py:388: in process
oe_cube = self._select_orographic_enhancement_cube(
improver/nowcasting/utilities.py:271: in _select_orographic_enhancement_cube
oe_cube_slice = extract_nearest_time_point(
improver/utilities/temporal.py:260: in extract_nearest_time_point
time_point = datetime_to_iris_time(dt)
improver/utilities/temporal.py:158: in datetime_to_iris_time
result = dt_in.replace(tzinfo=timezone.utc).timestamp()
cftime/_cftime.pyx:942: in cftime._cftime.datetime.replace
???
cftime/_cftime.pyx:1203: in cftime._cftime.DatetimeGregorian.__init__
???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> ???
E TypeError: __init__() got an unexpected keyword argument 'tzinfo'
cftime/_cftime.pyx:862: TypeError
____________ Test_process.test_existing_time_coordinates_respected _____________
self = <improver_tests.nowcasting.pysteps_advection.test_PystepsExtrapolate.Test_process testMethod=test_existing_time_coordinates_respected>
def test_existing_time_coordinates_respected(self):
"""Test that time coordinates are not added to a cube that already
has them"""
expected_coords = {
"projection_y_coordinate",
"projection_x_coordinate",
"forecast_period",
"forecast_reference_time",
"time",
}
frt_coord = self.rain_cube.coord("time").copy()
frt_coord.rename("forecast_reference_time")
self.rain_cube.add_aux_coord(frt_coord)
self.rain_cube.add_aux_coord(
iris.coords.AuxCoord(
np.array([0], dtype=np.int32), "forecast_period", "seconds"
)
)
> result = self.plugin(self.rain_cube, self.ucube, self.vcube, self.orogenh_cube)
improver_tests/nowcasting/pysteps_advection/test_PystepsExtrapolate.py:230:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
improver/__init__.py:60: in __call__
return self.process(*args, **kwargs)
improver/nowcasting/pysteps_advection.py:266: in process
precip_rate = self._get_advectable_precip_rate()
improver/nowcasting/pysteps_advection.py:82: in _get_advectable_precip_rate
(self.analysis_cube,) = ApplyOrographicEnhancement("subtract").process(
improver/nowcasting/utilities.py:388: in process
oe_cube = self._select_orographic_enhancement_cube(
improver/nowcasting/utilities.py:271: in _select_orographic_enhancement_cube
oe_cube_slice = extract_nearest_time_point(
improver/utilities/temporal.py:260: in extract_nearest_time_point
time_point = datetime_to_iris_time(dt)
improver/utilities/temporal.py:158: in datetime_to_iris_time
result = dt_in.replace(tzinfo=timezone.utc).timestamp()
cftime/_cftime.pyx:942: in cftime._cftime.datetime.replace
???
cftime/_cftime.pyx:1203: in cftime._cftime.DatetimeGregorian.__init__
???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> ???
E TypeError: __init__() got an unexpected keyword argument 'tzinfo'
cftime/_cftime.pyx:862: TypeError
_______________________ Test_process.test_set_attributes _______________________
self = <improver_tests.nowcasting.pysteps_advection.test_PystepsExtrapolate.Test_process testMethod=test_set_attributes>
def test_set_attributes(self):
"""Test plugin returns a cube with the specified attributes."""
attributes_dict = {
"mosg__grid_version": "1.0.0",
"mosg__model_configuration": "nc_det",
"source": "Met Office Nowcast",
"institution": "Met Office",
"title": "Nowcast on UK 2 km Standard Grid",
}
plugin = PystepsExtrapolate(self.interval, self.max_lead_time)
> result = plugin(
self.rain_cube,
self.ucube,
self.vcube,
self.orogenh_cube,
attributes_dict=attributes_dict.copy(),
)
improver_tests/nowcasting/pysteps_advection/test_PystepsExtrapolate.py:181:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
improver/__init__.py:60: in __call__
return self.process(*args, **kwargs)
improver/nowcasting/pysteps_advection.py:266: in process
precip_rate = self._get_advectable_precip_rate()
improver/nowcasting/pysteps_advection.py:82: in _get_advectable_precip_rate
(self.analysis_cube,) = ApplyOrographicEnhancement("subtract").process(
improver/nowcasting/utilities.py:388: in process
oe_cube = self._select_orographic_enhancement_cube(
improver/nowcasting/utilities.py:271: in _select_orographic_enhancement_cube
oe_cube_slice = extract_nearest_time_point(
improver/utilities/temporal.py:260: in extract_nearest_time_point
time_point = datetime_to_iris_time(dt)
improver/utilities/temporal.py:158: in datetime_to_iris_time
result = dt_in.replace(tzinfo=timezone.utc).timestamp()
cftime/_cftime.pyx:942: in cftime._cftime.datetime.replace
???
cftime/_cftime.pyx:1203: in cftime._cftime.DatetimeGregorian.__init__
???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> ???
E TypeError: __init__() got an unexpected keyword argument 'tzinfo'
cftime/_cftime.pyx:862: TypeError
______________________ Test_process.test_time_coordinates ______________________
self = <improver_tests.nowcasting.pysteps_advection.test_PystepsExtrapolate.Test_process testMethod=test_time_coordinates>
def test_time_coordinates(self):
"""Test cubelist has correct time metadata"""
> result = self.plugin(self.rain_cube, self.ucube, self.vcube, self.orogenh_cube)
improver_tests/nowcasting/pysteps_advection/test_PystepsExtrapolate.py:193:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
improver/__init__.py:60: in __call__
return self.process(*args, **kwargs)
improver/nowcasting/pysteps_advection.py:266: in process
precip_rate = self._get_advectable_precip_rate()
improver/nowcasting/pysteps_advection.py:82: in _get_advectable_precip_rate
(self.analysis_cube,) = ApplyOrographicEnhancement("subtract").process(
improver/nowcasting/utilities.py:388: in process
oe_cube = self._select_orographic_enhancement_cube(
improver/nowcasting/utilities.py:271: in _select_orographic_enhancement_cube
oe_cube_slice = extract_nearest_time_point(
improver/utilities/temporal.py:260: in extract_nearest_time_point
time_point = datetime_to_iris_time(dt)
improver/utilities/temporal.py:158: in datetime_to_iris_time
result = dt_in.replace(tzinfo=timezone.utc).timestamp()
cftime/_cftime.pyx:942: in cftime._cftime.datetime.replace
???
cftime/_cftime.pyx:1203: in cftime._cftime.DatetimeGregorian.__init__
???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> ???
E TypeError: __init__() got an unexpected keyword argument 'tzinfo'
cftime/_cftime.pyx:862: TypeError
____________________ Test_process.test_values_integer_step _____________________
self = <improver_tests.nowcasting.pysteps_advection.test_PystepsExtrapolate.Test_process testMethod=test_values_integer_step>
def test_values_integer_step(self):
"""Test values for an advection speed of one grid square per time step
over 8 time steps (9 output forecasts including T+0)"""
> result = self.plugin(self.rain_cube, self.ucube, self.vcube, self.orogenh_cube)
improver_tests/nowcasting/pysteps_advection/test_PystepsExtrapolate.py:237:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
improver/__init__.py:60: in __call__
return self.process(*args, **kwargs)
improver/nowcasting/pysteps_advection.py:266: in process
precip_rate = self._get_advectable_precip_rate()
improver/nowcasting/pysteps_advection.py:82: in _get_advectable_precip_rate
(self.analysis_cube,) = ApplyOrographicEnhancement("subtract").process(
improver/nowcasting/utilities.py:388: in process
oe_cube = self._select_orographic_enhancement_cube(
improver/nowcasting/utilities.py:271: in _select_orographic_enhancement_cube
oe_cube_slice = extract_nearest_time_point(
improver/utilities/temporal.py:260: in extract_nearest_time_point
time_point = datetime_to_iris_time(dt)
improver/utilities/temporal.py:158: in datetime_to_iris_time
result = dt_in.replace(tzinfo=timezone.utc).timestamp()
cftime/_cftime.pyx:942: in cftime._cftime.datetime.replace
???
cftime/_cftime.pyx:1203: in cftime._cftime.DatetimeGregorian.__init__
???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> ???
E TypeError: __init__() got an unexpected keyword argument 'tzinfo'
cftime/_cftime.pyx:862: TypeError
___________________ Test_process.test_values_noninteger_step ___________________
self = <improver_tests.nowcasting.pysteps_advection.test_PystepsExtrapolate.Test_process testMethod=test_values_noninteger_step>
def test_values_noninteger_step(self):
"""Test values for an advection speed of 0.6 grid squares per time
step"""
nanmatrix = np.full((8, 8), np.nan).astype(np.float32)
# displacement at T+1 is 0.6, rounded up to 1
expected_data_1 = nanmatrix.copy()
expected_data_1[1:, 1:] = self.rain_cube.data[:-1, :-1]
# displacement at T+2 is 1.2, rounded down to 1, BUT nans are advected
# in at trailing edge
expected_data_2 = expected_data_1.copy()
expected_data_2[:2, :] = np.nan
expected_data_2[:, :2] = np.nan
# displacement at T+3 is 1.8, rounded up to 2
expected_data_3 = nanmatrix.copy()
expected_data_3[2:, 2:] = self.rain_cube.data[:-2, :-2]
self.ucube.data = 0.6 * self.ucube.data
self.vcube.data = 0.6 * self.vcube.data
> result = self.plugin(self.rain_cube, self.ucube, self.vcube, self.orogenh_cube)
improver_tests/nowcasting/pysteps_advection/test_PystepsExtrapolate.py:271:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
improver/__init__.py:60: in __call__
return self.process(*args, **kwargs)
improver/nowcasting/pysteps_advection.py:266: in process
precip_rate = self._get_advectable_precip_rate()
improver/nowcasting/pysteps_advection.py:82: in _get_advectable_precip_rate
(self.analysis_cube,) = ApplyOrographicEnhancement("subtract").process(
improver/nowcasting/utilities.py:388: in process
oe_cube = self._select_orographic_enhancement_cube(
improver/nowcasting/utilities.py:271: in _select_orographic_enhancement_cube
oe_cube_slice = extract_nearest_time_point(
improver/utilities/temporal.py:260: in extract_nearest_time_point
time_point = datetime_to_iris_time(dt)
improver/utilities/temporal.py:158: in datetime_to_iris_time
result = dt_in.replace(tzinfo=timezone.utc).timestamp()
cftime/_cftime.pyx:942: in cftime._cftime.datetime.replace
???
cftime/_cftime.pyx:1203: in cftime._cftime.DatetimeGregorian.__init__
???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> ???
E TypeError: __init__() got an unexpected keyword argument 'tzinfo'
cftime/_cftime.pyx:862: TypeError
___ Test__select_orographic_enhancement_cube.test_alternative_time_half_past ___
self = <improver_tests.nowcasting.utilities.test_ApplyOrographicEnhancement.Test__select_orographic_enhancement_cube testMethod=test_alternative_time_half_past>
def test_alternative_time_half_past(self):
"""Test extracting a time coordinate from the orographic enhancement
cube at half past an hour. Note that the time point will round down
from the midpoint."""
plugin = ApplyOrographicEnhancement("add")
self.precip_cube.coord("time").points = (
self.precip_cube.coord("time").points + 30 * 60
) # add 30 mins
> result = plugin._select_orographic_enhancement_cube(
self.precip_cube, self.oe_cube
)
improver_tests/nowcasting/utilities/test_ApplyOrographicEnhancement.py:175:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
improver/nowcasting/utilities.py:271: in _select_orographic_enhancement_cube
oe_cube_slice = extract_nearest_time_point(
improver/utilities/temporal.py:260: in extract_nearest_time_point
time_point = datetime_to_iris_time(dt)
improver/utilities/temporal.py:158: in datetime_to_iris_time
result = dt_in.replace(tzinfo=timezone.utc).timestamp()
cftime/_cftime.pyx:942: in cftime._cftime.datetime.replace
???
cftime/_cftime.pyx:1203: in cftime._cftime.DatetimeGregorian.__init__
???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> ???
E TypeError: __init__() got an unexpected keyword argument 'tzinfo'
cftime/_cftime.pyx:862: TypeError
_ Test__select_orographic_enhancement_cube.test_alternative_time_quarter_past __
self = <improver_tests.nowcasting.utilities.test_ApplyOrographicEnhancement.Test__select_orographic_enhancement_cube testMethod=test_alternative_time_quarter_past>
def test_alternative_time_quarter_past(self):
"""Test extracting a time coordinate from the orographic enhancement
cube at quarter past an hour."""
plugin = ApplyOrographicEnhancement("add")
self.precip_cube.coord("time").points = (
self.precip_cube.coord("time").points + 15 * 60
) # add 15 mins
> result = plugin._select_orographic_enhancement_cube(
self.precip_cube, self.oe_cube
)
improver_tests/nowcasting/utilities/test_ApplyOrographicEnhancement.py:159:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
improver/nowcasting/utilities.py:271: in _select_orographic_enhancement_cube
oe_cube_slice = extract_nearest_time_point(
improver/utilities/temporal.py:260: in extract_nearest_time_point
time_point = datetime_to_iris_time(dt)
improver/utilities/temporal.py:158: in datetime_to_iris_time
result = dt_in.replace(tzinfo=timezone.utc).timestamp()
cftime/_cftime.pyx:942: in cftime._cftime.datetime.replace
???
cftime/_cftime.pyx:1203: in cftime._cftime.DatetimeGregorian.__init__
???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> ???
E TypeError: __init__() got an unexpected keyword argument 'tzinfo'
cftime/_cftime.pyx:862: TypeError
__ Test__select_orographic_enhancement_cube.test_alternative_time_quarter_to ___
self = <improver_tests.nowcasting.utilities.test_ApplyOrographicEnhancement.Test__select_orographic_enhancement_cube testMethod=test_alternative_time_quarter_to>
def test_alternative_time_quarter_to(self):
"""Test extracting a time coordinate from the orographic enhancement
cube at quarter to an hour."""
plugin = ApplyOrographicEnhancement("add")
self.precip_cube.coord("time").points = (
self.precip_cube.coord("time").points + 45 * 60
) # add 45 mins
> result = plugin._select_orographic_enhancement_cube(
self.precip_cube, self.oe_cube
)
improver_tests/nowcasting/utilities/test_ApplyOrographicEnhancement.py:190:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
improver/nowcasting/utilities.py:271: in _select_orographic_enhancement_cube
oe_cube_slice = extract_nearest_time_point(
improver/utilities/temporal.py:260: in extract_nearest_time_point
time_point = datetime_to_iris_time(dt)
improver/utilities/temporal.py:158: in datetime_to_iris_time
result = dt_in.replace(tzinfo=timezone.utc).timestamp()
cftime/_cftime.pyx:942: in cftime._cftime.datetime.replace
???
cftime/_cftime.pyx:1203: in cftime._cftime.DatetimeGregorian.__init__
???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> ???
E TypeError: __init__() got an unexpected keyword argument 'tzinfo'
cftime/_cftime.pyx:862: TypeError
_____________ Test__select_orographic_enhancement_cube.test_basic ______________
self = <improver_tests.nowcasting.utilities.test_ApplyOrographicEnhancement.Test__select_orographic_enhancement_cube testMethod=test_basic>
def test_basic(self):
"""Test extracting a time coordinate from the orographic enhancement
cube."""
plugin = ApplyOrographicEnhancement("add")
> result = plugin._select_orographic_enhancement_cube(
self.precip_cube, self.oe_cube
)
improver_tests/nowcasting/utilities/test_ApplyOrographicEnhancement.py:144:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
improver/nowcasting/utilities.py:271: in _select_orographic_enhancement_cube
oe_cube_slice = extract_nearest_time_point(
improver/utilities/temporal.py:260: in extract_nearest_time_point
time_point = datetime_to_iris_time(dt)
improver/utilities/temporal.py:158: in datetime_to_iris_time
result = dt_in.replace(tzinfo=timezone.utc).timestamp()
cftime/_cftime.pyx:942: in cftime._cftime.datetime.replace
???
cftime/_cftime.pyx:1203: in cftime._cftime.DatetimeGregorian.__init__
???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> ???
E TypeError: __init__() got an unexpected keyword argument 'tzinfo'
cftime/_cftime.pyx:862: TypeError
_______________________ Test_process.test_add_with_mask ________________________
self = <improver_tests.nowcasting.utilities.test_ApplyOrographicEnhancement.Test_process testMethod=test_add_with_mask>
def test_add_with_mask(self):
"""Test the addition of cubelists containing cubes of
precipitation rate and orographic enhancement, where a mask has
been applied. Orographic enhancement is not added to the masked
points (where precip rate <= 1 mm/hr)."""
expected0 = np.array([[[0.0, 1.0, 2.0], [1.0, 2.0, 7.0], [0.0, 3.0, 4.0]]])
expected1 = np.array([[[9.0, 9.0, 1.0], [6.0, 5.0, 1.0], [6.0, 5.0, 1.0]]])
precip_cubes = self.precip_cubes.copy()
# Mask values within the input precipitation cube that are equal to,
# or below 1.
new_precip_cubes = iris.cube.CubeList([])
for precip_cube in precip_cubes:
precip_cube.convert_units("mm/hr")
masked = np.ma.masked_where(precip_cube.data <= 1, precip_cube.data)
precip_cube.data = masked
precip_cube.convert_units("m/s")
new_precip_cubes.append(precip_cube)
plugin = ApplyOrographicEnhancement("add")
> result = plugin.process(self.precip_cubes, self.oe_cube)
improver_tests/nowcasting/utilities/test_ApplyOrographicEnhancement.py:518:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
improver/nowcasting/utilities.py:388: in process
oe_cube = self._select_orographic_enhancement_cube(
improver/nowcasting/utilities.py:271: in _select_orographic_enhancement_cube
oe_cube_slice = extract_nearest_time_point(
improver/utilities/temporal.py:260: in extract_nearest_time_point
time_point = datetime_to_iris_time(dt)
improver/utilities/temporal.py:158: in datetime_to_iris_time
result = dt_in.replace(tzinfo=timezone.utc).timestamp()
cftime/_cftime.pyx:942: in cftime._cftime.datetime.replace
???
cftime/_cftime.pyx:1203: in cftime._cftime.DatetimeGregorian.__init__
???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> ???
E TypeError: __init__() got an unexpected keyword argument 'tzinfo'
cftime/_cftime.pyx:862: TypeError
_________________________ Test_process.test_basic_add __________________________
self = <improver_tests.nowcasting.utilities.test_ApplyOrographicEnhancement.Test_process testMethod=test_basic_add>
def test_basic_add(self):
"""Test the addition of a precipitation rate cubelist and an
orographic enhancement cube with multiple times."""
expected0 = np.array([[[0.0, 1.0, 2.0], [1.0, 2.0, 7.0], [0.0, 3.0, 4.0]]])
expected1 = np.array([[[9.0, 9.0, 6.0], [6.0, 5.0, 1.0], [6.0, 5.0, 1.0]]])
plugin = ApplyOrographicEnhancement("add")
> result = plugin.process(self.precip_cubes, self.oe_cube)
improver_tests/nowcasting/utilities/test_ApplyOrographicEnhancement.py:449:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
improver/nowcasting/utilities.py:388: in process
oe_cube = self._select_orographic_enhancement_cube(
improver/nowcasting/utilities.py:271: in _select_orographic_enhancement_cube
oe_cube_slice = extract_nearest_time_point(
improver/utilities/temporal.py:260: in extract_nearest_time_point
time_point = datetime_to_iris_time(dt)
improver/utilities/temporal.py:158: in datetime_to_iris_time
result = dt_in.replace(tzinfo=timezone.utc).timestamp()
cftime/_cftime.pyx:942: in cftime._cftime.datetime.replace
???
cftime/_cftime.pyx:1203: in cftime._cftime.DatetimeGregorian.__init__
???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> ???
E TypeError: __init__() got an unexpected keyword argument 'tzinfo'
cftime/_cftime.pyx:862: TypeError
_______________________ Test_process.test_basic_subtract _______________________
self = <improver_tests.nowcasting.utilities.test_ApplyOrographicEnhancement.Test_process testMethod=test_basic_subtract>
def test_basic_subtract(self):
"""Test the subtraction of a cube of orographic
enhancement with multiple times from cubes of precipitation rate."""
expected0 = np.array(
[
[
[0.0, 1.0, 2.0],
[1.0, 2.0, MIN_PRECIP_RATE_MMH],
[0.0, 1.0, MIN_PRECIP_RATE_MMH],
]
]
)
expected1 = np.array(
[
[
[MIN_PRECIP_RATE_MMH, MIN_PRECIP_RATE_MMH, MIN_PRECIP_RATE_MMH],
[2.0, 3.0, 1.0],
[2.0, 3.0, 1.0],
]
]
)
plugin = ApplyOrographicEnhancement("subtract")
> result = plugin.process(self.precip_cubes, self.oe_cube)
improver_tests/nowcasting/utilities/test_ApplyOrographicEnhancement.py:480:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
improver/nowcasting/utilities.py:388: in process
oe_cube = self._select_orographic_enhancement_cube(
improver/nowcasting/utilities.py:271: in _select_orographic_enhancement_cube
oe_cube_slice = extract_nearest_time_point(
improver/utilities/temporal.py:260: in extract_nearest_time_point
time_point = datetime_to_iris_time(dt)
improver/utilities/temporal.py:158: in datetime_to_iris_time
result = dt_in.replace(tzinfo=timezone.utc).timestamp()
cftime/_cftime.pyx:942: in cftime._cftime.datetime.replace
???
cftime/_cftime.pyx:1203: in cftime._cftime.DatetimeGregorian.__init__
???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> ???
E TypeError: __init__() got an unexpected keyword argument 'tzinfo'
cftime/_cftime.pyx:862: TypeError
_________________________ Test_process.test_exception __________________________
self = <improver_tests.nowcasting.utilities.test_ApplyOrographicEnhancement.Test_process testMethod=test_exception>
def test_exception(self):
"""Test that an exception is raised if the operation requested is
not a valid choice."""
plugin = ApplyOrographicEnhancement("invalid")
msg = "Operation 'invalid' not supported for"
with self.assertRaisesRegex(ValueError, msg):
> plugin.process(self.precip_cubes, self.oe_cube)
improver_tests/nowcasting/utilities/test_ApplyOrographicEnhancement.py:495:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
improver/nowcasting/utilities.py:388: in process
oe_cube = self._select_orographic_enhancement_cube(
improver/nowcasting/utilities.py:271: in _select_orographic_enhancement_cube
oe_cube_slice = extract_nearest_time_point(
improver/utilities/temporal.py:260: in extract_nearest_time_point
time_point = datetime_to_iris_time(dt)
improver/utilities/temporal.py:158: in datetime_to_iris_time
result = dt_in.replace(tzinfo=timezone.utc).timestamp()
cftime/_cftime.pyx:942: in cftime._cftime.datetime.replace
???
cftime/_cftime.pyx:1203: in cftime._cftime.DatetimeGregorian.__init__
???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> ???
E TypeError: __init__() got an unexpected keyword argument 'tzinfo'
cftime/_cftime.pyx:862: TypeError
_______________________ Test_process.test_one_input_cube _______________________
self = <improver_tests.nowcasting.utilities.test_ApplyOrographicEnhancement.Test_process testMethod=test_one_input_cube>
def test_one_input_cube(self):
"""Test the addition of precipitation rate and orographic enhancement,
where a single precipitation rate cube is provided."""
expected = np.array([[[0.0, 1.0, 2.0], [1.0, 2.0, 7.0], [0.0, 3.0, 4.0]]])
plugin = ApplyOrographicEnhancement("add")
> result = plugin.process(self.precip_cubes[0], self.oe_cube)
improver_tests/nowcasting/utilities/test_ApplyOrographicEnhancement.py:580:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
improver/nowcasting/utilities.py:388: in process
oe_cube = self._select_orographic_enhancement_cube(
improver/nowcasting/utilities.py:271: in _select_orographic_enhancement_cube
oe_cube_slice = extract_nearest_time_point(
improver/utilities/temporal.py:260: in extract_nearest_time_point
time_point = datetime_to_iris_time(dt)
improver/utilities/temporal.py:158: in datetime_to_iris_time
result = dt_in.replace(tzinfo=timezone.utc).timestamp()
cftime/_cftime.pyx:942: in cftime._cftime.datetime.replace
???
cftime/_cftime.pyx:1203: in cftime._cftime.DatetimeGregorian.__init__
???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> ???
E TypeError: __init__() got an unexpected keyword argument 'tzinfo'
cftime/_cftime.pyx:862: TypeError
____________ Test_process.test_only_one_orographic_enhancement_cube ____________
self = <improver_tests.nowcasting.utilities.test_ApplyOrographicEnhancement.Test_process testMethod=test_only_one_orographic_enhancement_cube>
def test_only_one_orographic_enhancement_cube(self):
"""Test where is an orographic enhancement cube with a single time
point is supplied, so that multiple input precipitation fields are
adjusted by the same orographic enhancement."""
expected0 = np.array(
[
[
[0.0, 1.0, 2.0],
[1.0, 2.0, MIN_PRECIP_RATE_MMH],
[0.0, 1.0, MIN_PRECIP_RATE_MMH],
]
]
)
expected1 = np.array(
[
[
[4.0, 4.0, 1.0],
[4.0, 4.0, MIN_PRECIP_RATE_MMH],
[3.0, 3.0, MIN_PRECIP_RATE_MMH],
]
]
)
sliced_oe_cube = self.oe_cube[0]
# Change the time of precip to be within 30 mins of oe_cube.
self.precip_cubes[1].coord("time").points = (
self.precip_cubes[1].coord("time").points - 2700
)
plugin = ApplyOrographicEnhancement("subtract")
> result = plugin.process(self.precip_cubes, sliced_oe_cube)
improver_tests/nowcasting/utilities/test_ApplyOrographicEnhancement.py:616:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
improver/nowcasting/utilities.py:388: in process
oe_cube = self._select_orographic_enhancement_cube(
improver/nowcasting/utilities.py:271: in _select_orographic_enhancement_cube
oe_cube_slice = extract_nearest_time_point(
improver/utilities/temporal.py:260: in extract_nearest_time_point
time_point = datetime_to_iris_time(dt)
improver/utilities/temporal.py:158: in datetime_to_iris_time
result = dt_in.replace(tzinfo=timezone.utc).timestamp()
cftime/_cftime.pyx:942: in cftime._cftime.datetime.replace
???
cftime/_cftime.pyx:1203: in cftime._cftime.DatetimeGregorian.__init__
???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> ???
E TypeError: __init__() got an unexpected keyword argument 'tzinfo'
cftime/_cftime.pyx:862: TypeError
_____________________ Test_process.test_subtract_with_mask _____________________
self = <improver_tests.nowcasting.utilities.test_ApplyOrographicEnhancement.Test_process testMethod=test_subtract_with_mask>
def test_subtract_with_mask(self):
"""Test the subtraction of cubelists containing cubes of orographic
enhancement from cubes of precipitation rate, where a mask has been
applied. Orographic enhancement is not added to the masked points
(where precip rate <= 1 mm/hr)."""
expected0 = np.array(
[
[
[0.0, 1.0, 2.0],
[1.0, 2.0, MIN_PRECIP_RATE_MMH],
[0.0, 1.0, MIN_PRECIP_RATE_MMH],
]
]
)
expected1 = np.array(
[
[
[MIN_PRECIP_RATE_MMH, MIN_PRECIP_RATE_MMH, 1.0],
[2.0, 3.0, 1.0],
[2.0, 3.0, 1.0],
]
]
)
# Mask values within the input precipitation cube that are equal to,
# or below 1.
precip_cubes = self.precip_cubes.copy()
new_precip_cubes = iris.cube.CubeList([])
for precip_cube in precip_cubes:
precip_cube.convert_units("mm/hr")
masked = np.ma.masked_where(precip_cube.data <= 1, precip_cube.data)
precip_cube.data = masked
precip_cube.convert_units("m/s")
new_precip_cubes.append(precip_cube)
plugin = ApplyOrographicEnhancement("subtract")
> result = plugin.process(self.precip_cubes, self.oe_cube)
improver_tests/nowcasting/utilities/test_ApplyOrographicEnhancement.py:565:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
improver/nowcasting/utilities.py:388: in process
oe_cube = self._select_orographic_enhancement_cube(
improver/nowcasting/utilities.py:271: in _select_orographic_enhancement_cube
oe_cube_slice = extract_nearest_time_point(
improver/utilities/temporal.py:260: in extract_nearest_time_point
time_point = datetime_to_iris_time(dt)
improver/utilities/temporal.py:158: in datetime_to_iris_time
result = dt_in.replace(tzinfo=timezone.utc).timestamp()
cftime/_cftime.pyx:942: in cftime._cftime.datetime.replace
???
cftime/_cftime.pyx:1203: in cftime._cftime.DatetimeGregorian.__init__
???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> ???
E TypeError: __init__() got an unexpected keyword argument 'tzinfo'
cftime/_cftime.pyx:862: TypeError
________________ test_check_input_cube_time[local_time1-False] _________________
local_time = datetime.datetime(2017, 11, 10, 6, 0), expect_success = False
@pytest.mark.parametrize(
"local_time, expect_success",
((datetime(2017, 11, 10, 5, 0), True), (datetime(2017, 11, 10, 6, 0), False)),
)
def test_check_input_cube_time(local_time, expect_success):
"""Checks that check_input_cube_time can differentiate between arguments that match
expected times and arguments that don't."""
cube = make_input_cube([3, 4])
timezone_cube = make_timezone_cube()
plugin = TimezoneExtraction()
plugin.check_input_cube_dims(cube, timezone_cube)
if expect_success:
plugin.check_input_cube_time(cube, local_time)
else:
with pytest.raises(
ValueError, match=r"Time coord on input cube does not match required times."
):
> plugin.check_input_cube_time(cube, local_time)
improver_tests/utilities/temporal/test_TimezoneExtraction.py:208:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
improver/utilities/temporal.py:463: in check_input_cube_time
+ "\n".join([f"{t:%Y%m%dT%H%MZ}" for t in input_time_points])
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.0 = <list_iterator object at 0x7f05dd3dab80>
> + "\n".join([f"{t:%Y%m%dT%H%MZ}" for t in input_time_points])
)
E TypeError: unsupported format string passed to cftime._cftime.DatetimeGregorian.__format__
improver/utilities/temporal.py:463: TypeError
____________________ Test_iris_time_to_datetime.test_basic _____________________
self = <improver_tests.utilities.temporal.test_temporal.Test_iris_time_to_datetime testMethod=test_basic>
def test_basic(self):
"""Test iris_time_to_datetime returns list of datetime """
result = iris_time_to_datetime(self.cube.coord("time"))
self.assertIsInstance(result, list)
for item in result:
> self.assertIsInstance(item, datetime)
E AssertionError: cftime.DatetimeGregorian(2017, 2, 17, 6, 0, 0, 0) is not an instance of <class 'datetime.datetime'>
improver_tests/utilities/temporal/test_temporal.py:164: AssertionError
____________________ Test_iris_time_to_datetime.test_bounds ____________________
self = <improver_tests.utilities.temporal.test_temporal.Test_iris_time_to_datetime testMethod=test_bounds>
def test_bounds(self):
"""Test iris_time_to_datetime returns list of datetimes calculated
from the coordinate bounds."""
# Assign time bounds equivalent to [
# datetime(2017, 2, 17, 5, 0),
# datetime(2017, 2, 17, 6, 0)]
self.cube.coord("time").bounds = [1487307600, 1487311200]
result = iris_time_to_datetime(self.cube.coord("time"), point_or_bound="bound")
self.assertIsInstance(result, list)
self.assertEqual(len(result), 1)
self.assertEqual(len(result[0]), 2)
for item in result[0]:
> self.assertIsInstance(item, datetime)
E AssertionError: cftime.DatetimeGregorian(2017, 2, 17, 5, 0, 0, 0) is not an instance of <class 'datetime.datetime'>
improver_tests/utilities/temporal/test_temporal.py:180: AssertionError
=========================== short test summary info ============================
FAILED improver_tests/generate_ancillaries/test_GenerateTimezoneMask.py::test__set_time
FAILED improver_tests/generate_ancillaries/test_GenerateTimezoneMask.py::test_process[global_grid-None-ungrouped]
FAILED improver_tests/generate_ancillaries/test_GenerateTimezoneMask.py::test_process[global_grid-None-grouped]
FAILED improver_tests/generate_ancillaries/test_GenerateTimezoneMask.py::test_process[global_grid_360-None-ungrouped]
FAILED improver_tests/generate_ancillaries/test_GenerateTimezoneMask.py::test_process[global_grid_360-None-grouped]
FAILED improver_tests/generate_ancillaries/test_GenerateTimezoneMask.py::test_process[uk_grid-None-ungrouped]
FAILED improver_tests/generate_ancillaries/test_GenerateTimezoneMask.py::test_process[uk_grid-None-grouped]
FAILED improver_tests/metadata/test_forecast_times.py::Test__find_latest_cycletime::test_basic
FAILED improver_tests/nowcasting/forecasting/test_CreateExtrapolationForecast.py::Test__init__::test_orographic_enhancement
FAILED improver_tests/nowcasting/forecasting/test_CreateExtrapolationForecast.py::Test__repr__::test_basic
FAILED improver_tests/nowcasting/forecasting/test_CreateExtrapolationForecast.py::Test_extrapolate::test_with_orographic_enhancement
FAILED improver_tests/nowcasting/lightning/test_NowcastLightning.py::Test__modify_first_guess::test_basic
FAILED improver_tests/nowcasting/lightning/test_NowcastLightning.py::Test__modify_first_guess::test_input_with_vii
FAILED improver_tests/nowcasting/lightning/test_NowcastLightning.py::Test__modify_first_guess::test_lrate_large
FAILED improver_tests/nowcasting/lightning/test_NowcastLightning.py::Test__modify_first_guess::test_lrate_large_null
FAILED improver_tests/nowcasting/lightning/test_NowcastLightning.py::Test__modify_first_guess::test_lrate_large_shortfc
FAILED improver_tests/nowcasting/lightning/test_NowcastLightning.py::Test__modify_first_guess::test_lrate_small
FAILED improver_tests/nowcasting/lightning/test_NowcastLightning.py::Test__modify_first_guess::test_missing_first_guess
FAILED improver_tests/nowcasting/lightning/test_NowcastLightning.py::Test__modify_first_guess::test_null
FAILED improver_tests/nowcasting/lightning/test_NowcastLightning.py::Test__modify_first_guess::test_precip_zero
FAILED improver_tests/nowcasting/lightning/test_NowcastLightning.py::Test__modify_first_guess::test_vii_large
FAILED improver_tests/nowcasting/lightning/test_NowcastLightning.py::Test_process::test_basic
FAILED improver_tests/nowcasting/lightning/test_NowcastLightning.py::Test_process::test_basic_with_vii
FAILED improver_tests/nowcasting/lightning/test_NowcastLightning.py::Test_process::test_result_with_vii
FAILED improver_tests/nowcasting/lightning/test_NowcastLightning.py::Test_process::test_result_with_vii_longfc
FAILED improver_tests/nowcasting/optical_flow/test_generate_advection_velocities_from_winds.py::Test_generate_advection_velocities_from_winds::test_basic
FAILED improver_tests/nowcasting/optical_flow/test_generate_advection_velocities_from_winds.py::Test_generate_advection_velocities_from_winds::test_input_sort
FAILED improver_tests/nowcasting/optical_flow/test_generate_advection_velocities_from_winds.py::Test_generate_advection_velocities_from_winds::test_time
FAILED improver_tests/nowcasting/pysteps_advection/test_PystepsExtrapolate.py::Test_process::test_basic
FAILED improver_tests/nowcasting/pysteps_advection/test_PystepsExtrapolate.py::Test_process::test_existing_time_coordinates_respected
FAILED improver_tests/nowcasting/pysteps_advection/test_PystepsExtrapolate.py::Test_process::test_set_attributes
FAILED improver_tests/nowcasting/pysteps_advection/test_PystepsExtrapolate.py::Test_process::test_time_coordinates
FAILED improver_tests/nowcasting/pysteps_advection/test_PystepsExtrapolate.py::Test_process::test_values_integer_step
FAILED improver_tests/nowcasting/pysteps_advection/test_PystepsExtrapolate.py::Test_process::test_values_noninteger_step
FAILED improver_tests/nowcasting/utilities/test_ApplyOrographicEnhancement.py::Test__select_orographic_enhancement_cube::test_alternative_time_half_past
FAILED improver_tests/nowcasting/utilities/test_ApplyOrographicEnhancement.py::Test__select_orographic_enhancement_cube::test_alternative_time_quarter_past
FAILED improver_tests/nowcasting/utilities/test_ApplyOrographicEnhancement.py::Test__select_orographic_enhancement_cube::test_alternative_time_quarter_to
FAILED improver_tests/nowcasting/utilities/test_ApplyOrographicEnhancement.py::Test__select_orographic_enhancement_cube::test_basic
FAILED improver_tests/nowcasting/utilities/test_ApplyOrographicEnhancement.py::Test_process::test_add_with_mask
FAILED improver_tests/nowcasting/utilities/test_ApplyOrographicEnhancement.py::Test_process::test_basic_add
FAILED improver_tests/nowcasting/utilities/test_ApplyOrographicEnhancement.py::Test_process::test_basic_subtract
FAILED improver_tests/nowcasting/utilities/test_ApplyOrographicEnhancement.py::Test_process::test_exception
FAILED improver_tests/nowcasting/utilities/test_ApplyOrographicEnhancement.py::Test_process::test_one_input_cube
FAILED improver_tests/nowcasting/utilities/test_ApplyOrographicEnhancement.py::Test_process::test_only_one_orographic_enhancement_cube
FAILED improver_tests/nowcasting/utilities/test_ApplyOrographicEnhancement.py::Test_process::test_subtract_with_mask
FAILED improver_tests/utilities/temporal/test_TimezoneExtraction.py::test_check_input_cube_time[local_time1-False]
FAILED improver_tests/utilities/temporal/test_temporal.py::Test_iris_time_to_datetime::test_basic
FAILED improver_tests/utilities/temporal/test_temporal.py::Test_iris_time_to_datetime::test_bounds
= 48 failed, 2384 passed, 4 skipped, 315 deselected, 1 xfailed, 3544 warnings in 119.15s (0:01:59) =