improver icon indicating copy to clipboard operation
improver copied to clipboard

Add support for cf-units 3.*

Open dmentipl opened this issue 3 years ago • 0 comments

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) =

dmentipl avatar Jun 25 '21 05:06 dmentipl