Coverage report: 90%

Files Functions Classes

coverage.py v7.10.6, created at 2025-09-05 21:08 +0000

File function statements missing excluded branches partial coverage
src/CSET/__init__.py main 19 0 0 4 0 100%
src/CSET/__init__.py setup_argument_parser 26 0 0 0 0 100%
src/CSET/__init__.py setup_logging 16 0 0 4 0 100%
src/CSET/__init__.py setup_logging.NoFontMessageFilter.filter 1 0 0 0 0 100%
src/CSET/__init__.py _bake_command 5 0 0 0 0 100%
src/CSET/__init__.py _graph_command 2 0 0 0 0 100%
src/CSET/__init__.py _cookbook_command 10 0 0 4 0 100%
src/CSET/__init__.py _extract_workflow_command 2 0 0 0 0 100%
src/CSET/__init__.py (no function) 15 0 0 0 0 100%
src/CSET/_common.py parse_recipe 16 0 0 6 0 100%
src/CSET/_common.py check_recipe_has_steps 9 0 0 6 0 100%
src/CSET/_common.py slugify 1 0 0 0 0 100%
src/CSET/_common.py get_recipe_metadata 8 0 0 0 0 100%
src/CSET/_common.py parse_variable_options 24 0 0 10 0 100%
src/CSET/_common.py template_variables 11 0 0 10 0 100%
src/CSET/_common.py replace_template_variable 13 0 0 10 0 100%
src/CSET/_common.py render 6 0 0 2 0 100%
src/CSET/_common.py render.isidentifier 1 0 0 0 0 100%
src/CSET/_common.py render.extract_placeholders 3 0 0 0 0 100%
src/CSET/_common.py render.substitute_placeholder 6 0 0 0 0 100%
src/CSET/_common.py render_file 3 0 0 0 0 100%
src/CSET/_common.py iter_maybe 3 0 0 2 0 100%
src/CSET/_common.py human_sorted 2 0 0 0 0 100%
src/CSET/_common.py human_sorted.alphanum_key 4 0 0 0 0 100%
src/CSET/_common.py combine_dicts 7 0 0 6 0 100%
src/CSET/_common.py sort_dict 1 0 0 0 0 100%
src/CSET/_common.py sstrip 1 0 0 0 0 100%
src/CSET/_common.py (no function) 26 0 0 0 0 100%
src/CSET/cset_workflow/app/fetch_fcst/bin/fetch_data.py FileRetrieverABC.__enter__ 2 0 0 0 0 100%
src/CSET/cset_workflow/app/fetch_fcst/bin/fetch_data.py FileRetrieverABC.__exit__ 1 0 0 0 0 100%
src/CSET/cset_workflow/app/fetch_fcst/bin/fetch_data.py FileRetrieverABC.get_file 0 0 22 0 0 100%
src/CSET/cset_workflow/app/fetch_fcst/bin/fetch_data.py FilesystemFileRetriever.get_file 13 0 0 4 0 100%
src/CSET/cset_workflow/app/fetch_fcst/bin/fetch_data.py HTTPFileRetriever.get_file 13 0 0 2 0 100%
src/CSET/cset_workflow/app/fetch_fcst/bin/fetch_data.py _get_needed_environment_variables 9 0 0 2 0 100%
src/CSET/cset_workflow/app/fetch_fcst/bin/fetch_data.py _template_file_path 24 0 0 14 0 100%
src/CSET/cset_workflow/app/fetch_fcst/bin/fetch_data.py fetch_data 10 0 0 2 0 100%
src/CSET/cset_workflow/app/fetch_fcst/bin/fetch_data.py (no function) 24 0 2 0 0 100%
src/CSET/cset_workflow/app/finish_website/bin/finish_website.py construct_index 17 0 0 2 0 100%
src/CSET/cset_workflow/app/finish_website/bin/finish_website.py update_workflow_status 4 0 0 0 0 100%
src/CSET/cset_workflow/app/finish_website/bin/finish_website.py copy_rose_config 3 0 0 0 0 100%
src/CSET/cset_workflow/app/finish_website/bin/finish_website.py run 3 0 0 0 0 100%
src/CSET/cset_workflow/app/finish_website/bin/finish_website.py (no function) 13 0 2 0 0 100%
src/CSET/cset_workflow/app/parbake_recipes/bin/parbake.py parbake_all 6 0 0 4 0 100%
src/CSET/cset_workflow/app/parbake_recipes/bin/parbake.py main 5 0 0 0 0 100%
src/CSET/cset_workflow/app/parbake_recipes/bin/parbake.py (no function) 7 0 2 0 0 100%
src/CSET/cset_workflow/app/send_email/bin/send_email.py get_home_page_address 15 0 0 4 0 100%
src/CSET/cset_workflow/app/send_email/bin/send_email.py run 6 0 0 0 0 100%
src/CSET/cset_workflow/app/send_email/bin/send_email.py (no function) 4 0 2 0 0 100%
src/CSET/cset_workflow/lib/python/jinja_utils.py get_models 8 0 0 4 0 100%
src/CSET/cset_workflow/lib/python/jinja_utils.py b64json 5 0 0 2 0 100%
src/CSET/cset_workflow/lib/python/jinja_utils.py (no function) 4 0 0 0 0 100%
src/CSET/extract_workflow.py make_script_executable 16 0 0 8 0 100%
src/CSET/extract_workflow.py install_workflow 20 0 0 8 0 100%
src/CSET/extract_workflow.py (no function) 14 0 0 2 0 100%
src/CSET/graph.py save_graph 19 0 0 6 0 100%
src/CSET/graph.py save_graph.step_parser 15 0 0 8 0 100%
src/CSET/graph.py (no function) 9 0 0 0 0 100%
src/CSET/loaders/__init__.py (no function) 2 0 0 0 0 100%
src/CSET/loaders/aoa.py load 4 2 0 4 1 38%
src/CSET/loaders/aoa.py (no function) 3 0 0 0 0 100%
src/CSET/loaders/histograms.py load 20 12 0 24 6 32%
src/CSET/loaders/histograms.py (no function) 3 0 0 0 0 100%
src/CSET/loaders/profiles.py load 14 8 0 16 4 33%
src/CSET/loaders/profiles.py (no function) 3 0 0 0 0 100%
src/CSET/loaders/spatial_difference_field.py load 34 24 0 32 8 27%
src/CSET/loaders/spatial_difference_field.py (no function) 3 0 0 0 0 100%
src/CSET/loaders/spatial_field.py load 26 16 0 32 8 31%
src/CSET/loaders/spatial_field.py (no function) 3 0 0 0 0 100%
src/CSET/loaders/test.py load 3 0 0 2 0 100%
src/CSET/loaders/test.py (no function) 2 0 0 0 0 100%
src/CSET/loaders/timeseries.py load 24 14 0 28 8 35%
src/CSET/loaders/timeseries.py (no function) 3 0 0 0 0 100%
src/CSET/loaders/transects.py load 7 4 0 8 2 33%
src/CSET/loaders/transects.py (no function) 3 0 0 0 0 100%
src/CSET/operators/__init__.py get_operator 11 0 0 4 0 100%
src/CSET/operators/__init__.py _write_metadata 8 0 0 2 0 100%
src/CSET/operators/__init__.py _step_parser 19 0 0 8 0 100%
src/CSET/operators/__init__.py create_diagnostic_archive 6 0 0 4 0 100%
src/CSET/operators/__init__.py execute_recipe 27 0 0 8 0 100%
src/CSET/operators/__init__.py (no function) 18 0 0 0 0 100%
src/CSET/operators/_stash_to_lfric.py (no function) 3 0 0 0 0 100%
src/CSET/operators/_utils.py get_cube_yxcoordname 15 0 0 8 0 100%
src/CSET/operators/_utils.py get_cube_coordindex 5 0 0 2 0 100%
src/CSET/operators/_utils.py is_spatialdim 8 0 0 2 0 100%
src/CSET/operators/_utils.py is_transect 10 0 0 4 0 100%
src/CSET/operators/_utils.py fully_equalise_attributes 20 0 0 6 0 100%
src/CSET/operators/_utils.py is_time_aggregatable 4 0 0 0 0 100%
src/CSET/operators/_utils.py (no function) 11 0 0 0 0 100%
src/CSET/operators/ageofair.py _calc_dist 11 0 0 0 0 100%
src/CSET/operators/ageofair.py _aoa_core 46 0 0 28 1 99%
src/CSET/operators/ageofair.py compute_ageofair 70 0 0 36 0 100%
src/CSET/operators/ageofair.py (no function) 14 0 0 0 0 100%
src/CSET/operators/aggregate.py time_aggregate 6 0 0 0 0 100%
src/CSET/operators/aggregate.py ensure_aggregatable_across_cases 23 0 0 10 0 100%
src/CSET/operators/aggregate.py ensure_aggregatable_across_cases.Buckets.__init__ 1 0 0 0 0 100%
src/CSET/operators/aggregate.py ensure_aggregatable_across_cases.Buckets.add 5 0 0 4 0 100%
src/CSET/operators/aggregate.py ensure_aggregatable_across_cases.Buckets.get_buckets 1 0 0 0 0 100%
src/CSET/operators/aggregate.py add_hour_coordinate 9 0 0 4 0 100%
src/CSET/operators/aggregate.py (no function) 11 0 0 0 0 100%
src/CSET/operators/collapse.py collapse 27 4 0 18 2 87%
src/CSET/operators/collapse.py collapse_by_hour_of_day 35 0 0 20 1 98%
src/CSET/operators/collapse.py collapse_by_validity_time 35 0 0 12 0 100%
src/CSET/operators/collapse.py (no function) 16 0 0 0 0 100%
src/CSET/operators/constraints.py generate_stash_constraint 2 0 0 0 0 100%
src/CSET/operators/constraints.py generate_var_constraint 4 0 0 2 0 100%
src/CSET/operators/constraints.py generate_level_constraint 9 0 0 6 0 100%
src/CSET/operators/constraints.py generate_cell_methods_constraint 12 0 0 6 1 94%
src/CSET/operators/constraints.py generate_cell_methods_constraint.check_no_aggregation 1 0 0 0 0 100%
src/CSET/operators/constraints.py generate_cell_methods_constraint.check_cell_sum 1 1 0 0 0 0%
src/CSET/operators/constraints.py generate_time_constraint 8 0 0 6 0 100%
src/CSET/operators/constraints.py generate_area_constraint 10 1 0 6 1 88%
src/CSET/operators/constraints.py generate_area_constraint.bound_lat 1 1 0 0 0 0%
src/CSET/operators/constraints.py generate_area_constraint.bound_lon 3 3 0 2 0 0%
src/CSET/operators/constraints.py generate_remove_single_ensemble_member_constraint 1 0 0 0 0 100%
src/CSET/operators/constraints.py generate_realization_constraint 2 0 0 0 0 100%
src/CSET/operators/constraints.py combine_constraints 6 0 1 4 0 100%
src/CSET/operators/constraints.py (no function) 17 0 0 0 0 100%
src/CSET/operators/convection.py cape_ratio 16 0 0 4 0 100%
src/CSET/operators/convection.py inflow_layer_properties 15 0 0 6 0 100%
src/CSET/operators/convection.py (no function) 6 0 0 0 0 100%
src/CSET/operators/ensembles.py DKE 23 0 0 14 0 100%
src/CSET/operators/ensembles.py (no function) 4 0 0 0 0 100%
src/CSET/operators/filters.py apply_mask 7 0 0 0 0 100%
src/CSET/operators/filters.py filter_cubes 6 0 0 4 0 100%
src/CSET/operators/filters.py filter_multiple_cubes 9 0 0 4 0 100%
src/CSET/operators/filters.py generate_mask 26 0 0 16 0 100%
src/CSET/operators/filters.py (no function) 10 0 0 0 0 100%
src/CSET/operators/mesoscale.py spatial_perturbation_field 12 0 0 2 0 100%
src/CSET/operators/mesoscale.py (no function) 5 0 0 0 0 100%
src/CSET/operators/misc.py noop 1 0 0 0 0 100%
src/CSET/operators/misc.py remove_attribute 6 0 0 6 0 100%
src/CSET/operators/misc.py addition 1 0 0 0 0 100%
src/CSET/operators/misc.py subtraction 1 0 0 0 0 100%
src/CSET/operators/misc.py division 1 0 0 0 0 100%
src/CSET/operators/misc.py multiplication 1 0 0 0 0 100%
src/CSET/operators/misc.py combine_cubes_into_cubelist 6 0 1 4 0 100%
src/CSET/operators/misc.py difference 26 0 0 10 0 100%
src/CSET/operators/misc.py difference.is_increasing 1 0 0 0 0 100%
src/CSET/operators/misc.py _extract_common_time_points 21 0 0 6 0 100%
src/CSET/operators/misc.py convert_units 9 0 0 4 0 100%
src/CSET/operators/misc.py (no function) 19 0 0 0 0 100%
src/CSET/operators/plot.py _append_to_plot_index 13 0 0 2 0 100%
src/CSET/operators/plot.py _check_single_cube 6 0 0 6 0 100%
src/CSET/operators/plot.py _py312_importlib_resources_files_shim 5 0 0 2 0 100%
src/CSET/operators/plot.py _make_plot_html_page 10 0 0 0 0 100%
src/CSET/operators/plot.py _load_colorbar_map 13 0 0 2 0 100%
src/CSET/operators/plot.py _get_model_colors_map 10 1 0 4 1 86%
src/CSET/operators/plot.py _colorbar_map_levels 60 0 0 18 0 100%
src/CSET/operators/plot.py _setup_spatial_map 33 0 0 12 0 100%
src/CSET/operators/plot.py _get_plot_resolution 1 0 0 0 0 100%
src/CSET/operators/plot.py _plot_and_save_spatial_plot 38 1 0 16 2 94%
src/CSET/operators/plot.py _plot_and_save_postage_stamp_spatial_plot 26 2 0 10 1 92%
src/CSET/operators/plot.py _plot_and_save_line_series 37 6 0 14 2 80%
src/CSET/operators/plot.py _plot_and_save_vertical_line_series 41 7 0 14 3 78%
src/CSET/operators/plot.py _plot_and_save_scatter_plot 18 0 0 4 0 100%
src/CSET/operators/plot.py _plot_and_save_vector_plot 38 20 0 14 3 40%
src/CSET/operators/plot.py _plot_and_save_histogram_series 46 11 0 16 5 74%
src/CSET/operators/plot.py _plot_and_save_postage_stamp_histogram_series 13 0 0 2 0 100%
src/CSET/operators/plot.py _plot_and_save_postage_stamps_in_single_plot_histogram_series 11 0 0 2 0 100%
src/CSET/operators/plot.py _spatial_plot 28 0 0 10 0 100%
src/CSET/operators/plot.py _custom_colormap_mask 19 0 0 6 0 100%
src/CSET/operators/plot.py _custom_beaufort_scale 17 0 0 6 0 100%
src/CSET/operators/plot.py _custom_colourmap_precipitation 11 0 0 2 0 100%
src/CSET/operators/plot.py _custom_colourmap_visibility_in_air 12 0 0 2 0 100%
src/CSET/operators/plot.py _get_num_models 5 0 0 2 0 100%
src/CSET/operators/plot.py _validate_cube_shape 2 1 0 2 1 50%
src/CSET/operators/plot.py _validate_cubes_coords 2 1 0 2 1 50%
src/CSET/operators/plot.py spatial_contour_plot 2 0 0 0 0 100%
src/CSET/operators/plot.py spatial_pcolormesh_plot 2 0 0 0 0 100%
src/CSET/operators/plot.py plot_line_series 19 0 0 6 0 100%
src/CSET/operators/plot.py plot_vertical_line_series 47 6 0 16 4 81%
src/CSET/operators/plot.py plot_vertical_line_series.filter_cube_iterables 1 0 0 0 0 100%
src/CSET/operators/plot.py scatter_plot 16 0 0 10 0 100%
src/CSET/operators/plot.py vector_plot 19 2 0 6 2 84%
src/CSET/operators/plot.py plot_histogram_series 54 9 0 26 6 76%
src/CSET/operators/plot.py (no function) 59 0 0 0 0 100%
src/CSET/operators/read.py read_cube 4 0 0 2 0 100%
src/CSET/operators/read.py read_cubes 21 0 0 12 0 100%
src/CSET/operators/read.py _load_model 10 0 0 6 0 100%
src/CSET/operators/read.py _check_input_files 16 0 0 10 0 100%
src/CSET/operators/read.py _cutout_cubes 31 0 0 14 0 100%
src/CSET/operators/read.py _is_ensemble 11 0 0 6 0 100%
src/CSET/operators/read.py _create_callback 2 0 0 0 0 100%
src/CSET/operators/read.py _create_callback.callback 16 0 0 2 0 100%
src/CSET/operators/read.py _ensemble_callback 6 0 0 4 0 100%
src/CSET/operators/read.py _deterministic_callback 2 0 0 2 0 100%
src/CSET/operators/read.py _warn_once 1 0 0 0 0 100%
src/CSET/operators/read.py _um_normalise_callback 7 0 0 2 0 100%
src/CSET/operators/read.py _lfric_normalise_callback 6 0 0 2 0 100%
src/CSET/operators/read.py _lfric_time_coord_fix_callback 5 0 0 4 0 100%
src/CSET/operators/read.py _grid_longitude_fix_callback 21 2 0 8 1 90%
src/CSET/operators/read.py _fix_spatial_coords_callback 28 8 0 18 3 76%
src/CSET/operators/read.py _fix_pressure_coord_callback 6 0 0 8 0 100%
src/CSET/operators/read.py _fix_um_radtime 22 1 0 10 2 91%
src/CSET/operators/read.py _fix_cell_methods 7 0 0 6 1 92%
src/CSET/operators/read.py _convert_cube_units_callback 15 0 0 10 2 92%
src/CSET/operators/read.py _fix_lfric_cloud_base_altitude 4 0 0 2 0 100%
src/CSET/operators/read.py _fix_um_winds 10 5 0 4 1 43%
src/CSET/operators/read.py _add_wind_speed_um 5 5 0 0 0 0%
src/CSET/operators/read.py _convert_wind_true_dirn_um 5 5 0 0 0 0%
src/CSET/operators/read.py _normalise_var0_varname 11 3 0 12 3 74%
src/CSET/operators/read.py _lfric_time_callback 32 3 0 8 2 88%
src/CSET/operators/read.py _lfric_forecast_period_standard_name_callback 6 0 0 2 0 100%
src/CSET/operators/read.py (no function) 47 0 0 0 0 100%
src/CSET/operators/regrid.py regrid_onto_cube 15 0 0 10 0 100%
src/CSET/operators/regrid.py regrid_onto_xyspacing 20 0 0 10 0 100%
src/CSET/operators/regrid.py regrid_to_single_point 30 0 0 20 1 98%
src/CSET/operators/regrid.py transform_lat_long_points 7 0 0 0 0 100%
src/CSET/operators/regrid.py (no function) 11 0 0 0 0 100%
src/CSET/operators/transect.py _check_within_bounds 6 0 0 2 0 100%
src/CSET/operators/transect.py calc_transect 45 2 0 16 2 93%
src/CSET/operators/transect.py (no function) 6 0 0 0 0 100%
src/CSET/operators/wind.py convert_to_beaufort_scale 12 0 0 4 0 100%
src/CSET/operators/wind.py (no function) 5 0 0 0 0 100%
src/CSET/operators/write.py write_cube_to_nc 9 0 0 6 0 100%
src/CSET/operators/write.py (no function) 6 0 0 0 0 100%
src/CSET/recipes/__init__.py _version_agnostic_importlib_resources_file 5 0 0 2 0 100%
src/CSET/recipes/__init__.py _recipe_files_in_tree 10 0 0 10 0 100%
src/CSET/recipes/__init__.py _get_recipe_file 7 0 0 4 0 100%
src/CSET/recipes/__init__.py unpack_recipe 9 0 0 2 0 100%
src/CSET/recipes/__init__.py list_available_recipes 3 0 0 2 0 100%
src/CSET/recipes/__init__.py detail_recipe 5 0 0 2 0 100%
src/CSET/recipes/__init__.py RawRecipe.__init__ 4 0 0 0 0 100%
src/CSET/recipes/__init__.py RawRecipe.__str__ 7 0 0 0 0 100%
src/CSET/recipes/__init__.py RawRecipe.__eq__ 3 0 0 2 0 100%
src/CSET/recipes/__init__.py RawRecipe.parbake 13 0 0 2 0 100%
src/CSET/recipes/__init__.py Config.__init__ 1 0 0 0 0 100%
src/CSET/recipes/__init__.py Config.__getattr__ 1 0 0 0 0 100%
src/CSET/recipes/__init__.py Config.asdict 1 0 0 0 0 100%
src/CSET/recipes/__init__.py load_recipes 6 0 0 2 0 100%
src/CSET/recipes/__init__.py (no function) 31 0 0 0 0 100%
Total   2840 191 32 1058 92 90%

No items found using the specified filter.