Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for cf-units 3.* #1523

Open
dmentipl opened this issue Jun 25, 2021 · 0 comments
Open

Add support for cf-units 3.* #1523

dmentipl opened this issue Jun 25, 2021 · 0 comments

Comments

@dmentipl
Copy link
Contributor

dmentipl commented Jun 25, 2021

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 dmentipl mentioned this issue Jun 25, 2021
4 tasks
@dmentipl dmentipl removed their assignment Nov 8, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant