# # # Distribution Statement A. Approved for public release. Distribution unlimited.# # ## # # Author:# # # Naval Research Laboratory, Marine Meteorology Division# # ## # # This program is free software: you can redistribute it and/or modify it under# # # the terms of the NRLMMD License included with this program. This program is# # # distributed WITHOUT ANY WARRANTY; without even the implied warranty of# # # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the included license# # # for more details. If you did not receive the license, for more information see:
Version 1.10.0a12 (2023-05-09)#
Overall YAML interface updates
Remove old YAML discovery functions in geoips_utils
Remove old style YAML configs
Update dev/output_config.py to use new YAML interfaces
Rework mapping routines to use new interfaces
Feature and gridline annotators interface
Add new feature and gridline annotators YAML-based interface
Refactor gridline_annotator and feature_annotator plugin schema and plugins
Update boundaries/gridlines_info to feature/gridline_annotator
Update boundaries/gridlines_params to feature/gridline_annotator
Sectors interface
Add new sector YAML-based interface
Remove sectorfiles option from commandline
Dynamic sectors interface
Update sector interface to include dynamic sectors
Update all TC templates to use updated sectors.generated schema
Update command line argument from tc_template_yaml to tc_spec_template
Sector adjusters interface
Add sector_adjusters module-based interface
Update single_source procflow to use new sector_adjusters interface
Replace adjust_area_def command line arg with sector_adjuster
Colormaps interface
Add colormap module-based interface
Add plugins/**.txt to pyproject.toml
Move colormaps from geoips/image_utils/ascii_palettes to plugins/txt/ascii_palettes
Update matplotlib_linear_norm to be a “configurable” colormap
Add “find_ascii_palette” routine to geoips_utils.py
Allow cbar_ticks == None to plot min/max of actual data
Allow matplotlib, ascii, and geoips colormap sources
Change colormap families to “matplotlib”
Run pytest on all installed geoips plugin packages
Products interface
Add products YAML-based interface
Update procflows to use products interface
Allow passing dictionary of product_spec_overrides to products.get_plugin
Support multiple coverage checkers for a single product
Bug fixes
Fix plugin names in product_defaults
Testing updates
Add data_fusion stitched test to test_full_install.sh
Add template_basic_plugin test to test_full_install.sh
Bug fixes#
Fix plugin names in product_defaults#
From NRLMMD-GEOIPS/geoips#211f: 2023-05-09, product updates
Update range -> output_data_range in Infared-Gray product_defaults
pmw_tc.pmw_ -> pmw_ algorithm name in PMW product_defaults
modified: plugins/yaml/product_defaults/pmw_37/37pct.yaml
modified: plugins/yaml/product_defaults/pmw_37/37pctNearest.yaml
modified: plugins/yaml/product_defaults/pmw_89/color89.yaml
modified: plugins/yaml/product_defaults/pmw_89/color89Nearest.yaml
modified: plugins/yaml/product_defaults/visir/Infrared-Gray.yaml
Major New Functionality#
Add new sector interface#
From NRLMMD-GEOIPS/geoips#211b: 2023-05-01, sector updates
This interface can be used for both dynamic templates and fully specified static yaml-based sectors.
new file: interfaces/yaml_based/sectors.py
Add sector_adjusters interface#
From NRLMMD-GEOIPS/geoips#211d: 2023-05-02, sector adjuster updates
This is only used within the recenter_tc repository, but interface added here.
new: geoips/interfaces/module_based/sector_adjusters.py
modified: geoips/interfaces/__init__.py
Allow cbar_ticks == None to plot min/max of actual data#
From NRLMMD-GEOIPS/geoips#211e: 2023-05-03, colormap updates
Update create_colorbar function to set cbar_ticks to cmap_norm.vmin and cmap_norm.vmax if cbar_ticks is “None”. Additionally, ensure if the “kwargs” options are included in mpl_colors_info, they are only used if not None (allows including defaults for all fields in mpl_colors_info)
modified: geoips/image_utils/mpl_utils.py
Update matplotlib_linear_norm to allow matplotlib, ascii, and geoips colormaps#
From NRLMMD-GEOIPS/geoips#211e: 2023-05-03, colormap updates
Pass “cmap_source” option to determine where to find the colormap. Default to “matplotlib” (so backwards compatible)
matplotlib builtin
ascii palette
geoips plugin
modified: geoips/plugins/modules/colormaps/matplotlib_linear_norm.py
Add “find_ascii_palette” routine to geoips_utils.py#
From NRLMMD-GEOIPS/geoips#211e: 2023-05-03, colormap updates
This searches the plugin directory for plugins/txt/ascii_palettes (for now). May tune this additionally, but for now we will hard code txt/ascii_palettes, and require ascii colormaps to have extension .txt.
modified: geoips/geoips_utils.py
Update matplotlib_linear_norm colormap plugin to support ASCII palettes#
From NRLMMD-GEOIPS/geoips#211e: 2023-05-03, colormap updates
This plugin provides the ability to fully specify matplotlib color info via call signature arguments. Add options for:
cmap_name - name of colormap to use
cmap_source - one of “matplotlib”, “geoips”, or “ascii”
cmap_path - optional full path to ascii palette
cbar_tick_labels - alternative labels to use if not the numeric values of cbar_ticks
cbar_spacing - cbar spacing, proportional or uniform
cbar_full_width - specify colorbar should be the full width of image
colorbar_kwargs - pass through to matplotlib “colorbar” command
set_ticks_kwargs - pass through to “set_ticks” command
Also add these fields to the colormap YAML schema.
Additionally, update image_utils.colormap_utils.from_ascii to take optional “cmap_name” kwarg, if not specified, just use the basename of fname.
modified: geoips/schema/product_defaults/bases/colormap.yaml
geoips/image_utils/colormap_utils.py
geoips/plugins/modules/colormaps/matplotlib_linear_norm.py
Breaking Changes#
Remove old YAML discovery functions in geoips_utils#
From NRLMMD-GEOIPS/geoips#211a: 2023-05-01, gridline/feature updates
Remove list_gridlines_params_dict_yamls
Remove list_boundaries_params_dict_yamls
geoips/geoips_utils.py
Remove old YAML configs and old interfaces#
From NRLMMD-GEOIPS/geoips#211: 2023-05-01, update code for new interfaces
NOTE: had to pull “set_lonlat_spacing” out of geoips/dev/gridlines.py and put it in geoips/dev/output_config.py. Will likely want to handle this differently in the future.
boundaries -> feature_annotator
gridlines -> gridline_annotator
sectors_static -> sectors.static
sectors_dynamic -> sectors.dynamic
product_inputs -> products
product_params -> product_defaults
modified: geoips/dev/output_config.py
deleted: geoips/dev/boundaries.py
deleted: geoips/dev/gridlines.py
deleted: geoips/yaml_configs/plotting_params/boundaries
deleted: geoips/yaml_configs/plotting_params/gridlines
deleted: geoips/yaml_configs/sectors_static
deleted: geoips/yaml_configs/sectors_dynamic
deleted: geoips/yaml_configs/product_inputs
deleted: geoips/yaml_configs/product_params
Update dev/output_config.py to use new YAML interfaces#
From NRLMMD-GEOIPS/geoips#211: 2023-05-01, update code for new interfaces
from geoips.dev.boundaries import get_boundaries
from geoips.dev.gridlines import get_gridlines
to:
from geoips.interfaces import feature_annotators
from geoips.interfaces import gridline_annotators
modified: geoips/dev/output_config.py
Refactor gridline_annotator and feature_annotator plugin schema and plugins#
From NRLMMD-GEOIPS/geoips#211a: 2023-05-01, gridline/feature updates
In feature annotators
use “coastlines” -> “coastline” and “countries” -> “borders”
use “edgecolor” instead of “color”
In gridline annotators
Move to three spec sections: “spacing”, “labels”, and “lines”
Use same line style for meridians and parallels
- ::
modified: schema/feature_annotators/cartopy.yaml modified: schema/gridline_annotators/cartopy.yaml modified: plugins/yaml/feature_annotators modified: plugins/yaml/gridline_annotators modified: tests/test_pytest/test_plugin_schema/bad/feature_annotators/cartopy.yaml modified: tests/test_pytest/test_plugin_schema/bad/gridline_annotators/cartopy.yaml
Rework mapping routines to use new interfaces#
From NRLMMD-GEOIPS/geoips#211a: 2023-05-01, gridline/feature updates
image_utils/maps.py
Remove all functionality relating to Basemap
Remove set_boundaries_info_dict and set_gridlines_info_dict
Rename check_gridlines_info_dict to check_gridline_annotator
Rename check_boundaries_info_dict to check_feature_annotator
Add compute_lat_auto_spacing and compute_lon_auto_spacing
Refactor all other functions
image_utils/mpl_utils.py
Replace all uses of boundaries_info with feature_annotator
Replace all uses of gridlines_info with gridline_annotator
- ::
image_utils/maps.py image_utils/mpl_utils.py
Update boundaries/gridlines_info to feature/gridline_annotator#
From NRLMMD-GEOIPS/geoips#211a: 2023-05-01, gridline/feature updates
These are dictionaries of feature information to use in the final output plot. Replace with “feature_annotator” terminology for the call signature argument.
modified: geoips/dev/output_config.py
modified: geoips/interfaces/module_based/output_formatters.py
modified: geoips/plugins/modules/output_formatters/full_disk_image.py
modified: geoips/plugins/modules/output_formatters/imagery_annotated.py
modified: geoips/plugins/modules/output_formatters/imagery_windbarbs.py
modified: geoips/image_utils/mpl_utils.py
Update boundaries/gridlines_params to feature/gridline_annotator#
From NRLMMD-GEOIPS/geoips#211a: 2023-05-01, gridline/feature updates
Update both command line calls and YAML output configs.
modified: geoips/commandline/args.py
modified: geoips/dev/output_config.py
modified: geoips/plugins/modules/procflows/single_source.py
modified: tests/scripts/amsr2.tc.89H-Physical.imagery_annotated.sh
modified: tests/scripts/amsub_mirs.tc.183-3H.imagery_annotated.sh
modified: tests/scripts/hy2.tc.windspeed.imagery_annotated.sh
modified: tests/scripts/saphir.tc.183-3HNearest.imagery_annotated.sh
modified: tests/scripts/sar.tc.nrcs.imagery_annotated.sh
modified: tests/scripts/viirsday.tc.Night-Vis-IR.imagery_annotated.sh
modified: tests/yaml_configs/abi_test.yaml
modified: tests/yaml_configs/abi_test_low_memory.yaml
Remove sectorfiles option from commandline#
From NRLMMD-GEOIPS/geoips#211b: 2023-05-01, sector updates
Sectors are now fully fledged plugins, so we can just pass the list of sectors command line, we do not have to pass the full path to the associated file. Remove all references to “sectorfiles” arguments, and rely on the sector list.
modified: geoips/commandline/args.py
modified: geoips/commandline/run_procflow.py
modified: geoips/dev/output_config.py
modified: geoips/plugins/modules/procflows/single_source.py
modified: geoips/sector_utils/utils.py
modified: tests/scripts/abi.static.Infrared.imagery_annotated.sh
modified: tests/scripts/abi.static.Visible.imagery_annotated.sh
modified: tests/scripts/documentation_imagery.sh
modified: tests/scripts/ewsg.static.Infrared.imagery_clean.sh
modified: tests/scripts/mimic_coarse.static.TPW-CIMSS.imagery_annotated.sh
modified: tests/yaml_configs/abi_test.yaml
modified: tests/yaml_configs/abi_test_low_memory.yaml
modified: tests/yaml_configs/amsr2_test.yaml
modified: tests/yaml_configs/amsr2_test_low_memory.yaml
Update all TC templates to use updated sectors.generated formatting#
From NRLMMD-GEOIPS/geoips#211c: 2023-05-02, dynamic sector updates
These only require sector_spec_generator specifications, not sector_metadata_generator. Metadata is determined separately from the area definition.
Update schema and all TC template YAMLs accordingly.
modified: geoips/schema/sectors/generated.yaml
modified: geoips/plugins/yaml/sectors/dynamic/tc_1024x1024/tc_1km_1024x1024.yaml
modified: geoips/plugins/yaml/sectors/dynamic/tc_1024x1024/tc_2km_1024x1024.yaml
modified: geoips/plugins/yaml/sectors/dynamic/tc_1400x1400/tc_1km_1400x1400.yaml
modified: geoips/plugins/yaml/sectors/dynamic/tc_1400x1400/tc_2km_1400x1400.yaml
modified: geoips/plugins/yaml/sectors/dynamic/tc_1600x1600/tc_2km_1600x1600.yaml
modified: geoips/plugins/yaml/sectors/dynamic/tc_1600x1600/tc_4km_1600x1600.yaml
modified: geoips/plugins/yaml/sectors/dynamic/tc_256x256/tc_4km_256x256.yaml
modified: geoips/plugins/yaml/sectors/dynamic/tc_512x512/tc_2km_512x512.yaml
modified: geoips/plugins/yaml/sectors/dynamic/tc_512x512/tc_4km_512x512.yaml
modified: geoips/plugins/yaml/sectors/dynamic/tc_800x800/tc_2km_800x800.yaml
modified: geoips/plugins/yaml/sectors/dynamic/tc_800x800/tc_4km_800x800.yaml
modified: geoips/plugins/yaml/sectors/dynamic/tc_huge/tc_0p1km_3200x3200.yaml
modified: geoips/plugins/yaml/sectors/dynamic/tc_huge/tc_1km_2500x2500.yaml
modified: geoips/plugins/yaml/sectors/dynamic/tc_huge/tc_1km_3200x3200.yaml
modified: geoips/plugins/yaml/sectors/dynamic/tc_web_ascat_high_barbs_template.yaml
modified: geoips/plugins/yaml/sectors/dynamic/tc_web_ascatuhr_barbs_template.yaml
modified: geoips/plugins/yaml/sectors/dynamic/tc_web_halfkm_template.yaml
modified: geoips/plugins/yaml/sectors/dynamic/tc_web_template.yaml
Replace tc_template_yaml command line argument with tc_spec_template#
From NRLMMD-GEOIPS/geoips#211c: 2023-05-02, dynamic sector updates
Now that TC templates are fully fledged plugins, reference them just based on plugin name rather than full path to YAML file.
modified: geoips/commandline/args.py
modified: geoips/dev/output_config.py
modified: geoips/plugins/modules/procflows/single_source.py
modified: geoips/sector_utils/tc_tracks.py
modified: scripts/ascat_knmi.tc.windbarbs.imagery_windbarbs_clean.sh
modified: scripts/ascat_uhr.tc.wind-ambiguities.imagery_windbarbs.sh
modified: scripts/atms.tc.165H.netcdf_geoips.sh
modified: scripts/oscat_knmi.tc.windbarbs.imagery_windbarbs.sh
modified: yaml_configs/abi_test.yaml
modified: yaml_configs/abi_test_low_memory.yaml
modified: yaml_configs/amsr2_test.yaml
modified: yaml_configs/amsr2_test_low_memory.yaml
Update single_source procflow to use new sector_adjusters interface#
From NRLMMD-GEOIPS/geoips#211d: 2023-05-02, sector adjuster updates
Was previously using “find_entry_point” directly.
modified: plugins/modules/procflows/single_source.py
Replace adjust_area_def command line arg with sector_adjuster#
From NRLMMD-GEOIPS/geoips#211d: 2023-05-02, sector adjuster updates
Update appropriately in config_based and single_source.
modified: commandline/args.py
modified: plugins/modules/procflows/config_based.py
modified: plugins/modules/procflows/single_source.py
Move colormaps to plugins/txt/ascii_palettes#
From NRLMMD-GEOIPS/geoips#211e: 2023-05-03, colormap updates
Consolidating user-defined capabilities within “plugins” directory.
Add support for text ascii_palettes - which are not strictly geoips plugins (since they will not have the required attributes, etc), but will be accessed in a similar way.
modified: pyproject.toml
modified: geoips/plugins/modules/colormaps/tpw/tpw_cimss.py
modified: geoips/plugins/modules/colormaps/tpw/tpw_purple.py
modified: geoips/plugins/modules/colormaps/tpw/tpw_pwat.py
renamed: geoips/image_utils/ascii_palettes/tpw_cimss.txt -> geoips/plugins/txt/ascii_palettes/tpw_cimss.txt
renamed: geoips/image_utils/ascii_palettes/tpw_purple.txt -> geoips/plugins/txt/ascii_palettes/tpw_purple.txt
renamed: geoips/image_utils/ascii_palettes/tpw_pwat.txt -> geoips/plugins/txt/ascii_palettes/tpw_pwat.txt
Change all colormap families to “matplotlib”#
From NRLMMD-GEOIPS/geoips#211e: 2023-05-03, colormap updates
Redefining plugin familes as a collection of required_parameters, required_kwargs, and allowable_kwargs. This allows us to have a collections of keyword arguments that can be specified for matplotlib-based colormaps, but do not have to be specified. So rather than having a different family for every combination of tuning parameters for color specifications, have a general “matplotlib” family that all return the “mpl_colors_info” dictionary, but can have a variable set of arguments (depending on requirements for a specific colormap).
All matplotlib families now have NO required params or kwargs, and a list of available_kwargs.
modified: geoips/interfaces/module_based/colormaps.py
modified: geoips/plugins/modules/colormaps/cmap_rgb.py
modified: geoips/plugins/modules/colormaps/matplotlib_linear_norm.py
modified: geoips/plugins/modules/colormaps/pmw_tb/cmap_150H.py
modified: geoips/plugins/modules/colormaps/pmw_tb/cmap_37H.py
modified: geoips/plugins/modules/colormaps/pmw_tb/cmap_37H_Legacy.py
modified: geoips/plugins/modules/colormaps/pmw_tb/cmap_37H_Physical.py
modified: geoips/plugins/modules/colormaps/pmw_tb/cmap_37pct.py
modified: geoips/plugins/modules/colormaps/pmw_tb/cmap_89H.py
modified: geoips/plugins/modules/colormaps/pmw_tb/cmap_89HW.py
modified: geoips/plugins/modules/colormaps/pmw_tb/cmap_89H_Legacy.py
modified: geoips/plugins/modules/colormaps/pmw_tb/cmap_89H_Physical.py
modified: geoips/plugins/modules/colormaps/pmw_tb/cmap_89pct.py
modified: geoips/plugins/modules/colormaps/pmw_tb/cmap_Rain.py
modified: geoips/plugins/modules/colormaps/tpw/tpw_cimss.py
modified: geoips/plugins/modules/colormaps/tpw/tpw_purple.py
modified: geoips/plugins/modules/colormaps/tpw/tpw_pwat.py
modified: geoips/plugins/modules/colormaps/visir/IR_BD.py
modified: geoips/plugins/modules/colormaps/visir/Infrared.py
modified: geoips/plugins/modules/colormaps/visir/WV.py
modified: geoips/plugins/modules/colormaps/winds/wind_radii_transitions.py
Allow passing dictionary of product_spec_overrides to products.get_plugin#
From NRLMMD-GEOIPS/geoips#211f: 2023-05-09, product updates
When opening a product plugin, if optional “product_spec_override” is passed to the get_plugin method, use the values contained within product_spec_override in place of those found in products and product_defaults.
This replaces the “product_params_override” used with the deprecated product interface.
modified: geoips/commandline/args.py
modified: geoips/interfaces/yaml_based/products.py
modified: geoips/plugins/modules/procflows/single_source.py
modified: tests/scripts/amsr2.tc.89H-Physical.imagery_annotated.sh
modified: tests/scripts/amsr2_ocean.tc.windspeed.imagery_clean.sh
modified: tests/scripts/amsub_mirs.tc.183-3H.imagery_annotated.sh
modified: tests/scripts/ascat_knmi.tc.windbarbs.imagery_windbarbs_clean.sh
modified: tests/scripts/ascat_low_knmi.tc.windbarbs.imagery_windbarbs.sh
modified: tests/scripts/ascat_uhr.tc.wind-ambiguities.imagery_windbarbs.sh
modified: tests/scripts/atms.tc.165H.netcdf_geoips.sh
modified: tests/scripts/gmi.tc.89pct.imagery_clean.sh
modified: tests/scripts/hy2.tc.windspeed.imagery_annotated.sh
modified: tests/scripts/oscat_knmi.tc.windbarbs.imagery_windbarbs.sh
modified: tests/scripts/saphir.tc.183-3HNearest.imagery_annotated.sh
modified: tests/scripts/sar.tc.nrcs.imagery_annotated.sh
modified: tests/scripts/ssmi.tc.37pct.imagery_clean.sh
modified: tests/scripts/viirsday.tc.Night-Vis-IR.imagery_annotated.sh
modified: tests/yaml_configs/amsr2_test.yaml
modified: tests/yaml_configs/amsr2_test_low_memory.yaml
Support multiple coverage checkers for a single product#
From NRLMMD-GEOIPS/geoips#211f: 2023-05-09, product updates
Add filename_coverage_checker, full_coverage_checker, and image_production_coverage_checker to product_defaults schema
Pass output_dict[“product_spec_override”] to all products.get_plugin calls.
modified: geoips/plugins/modules/procflows/config_based.py
modified: geoips/plugins/modules/procflows/single_source.py
modified: geoips/dev/output_config.py
modified: geoips/plugins/modules/filename_formatters/utils/tc_file_naming.py
modified: geoips/plugins/modules/output_formatters/imagery_annotated.py
modified: geoips/plugins/modules/output_formatters/metadata_tc.py
modified: geoips/schema/product_defaults/specs/algorithm_colormap.yaml
modified: geoips/schema/product_defaults/specs/algorithm_interpolator_colormap.yaml
modified: geoips/schema/product_defaults/specs/interpolator_algorithm.yaml
modified: geoips/schema/product_defaults/specs/interpolator_algorithm_colormap.yaml
Testing Updates#
Run pytest on all installed geoips plugin packages#
From NRLMMD-GEOIPS/geoips#211: 2023-05-09, interface updates
To ensure all functionality is tested, loop through all geoips plugin packages when running tests/test_pytest.
modified: tests/test_pytest/test_all_yaml_plugins.py
Add data_fusion stitched test to test_full_install.sh#
From NRLMMD-GEOIPS/geoips#211: 2023-05-09, interface updates
Add NOAA AWS pull of goes16, goes17, and himawari8 to test_data_fusion.
Update data_fusion test call to run test_all.sh vs just layered.sh
modified: setup.sh
modified: tests/test_full_install.sh
Add template_basic_plugin test to test_full_install.sh#
From NRLMMD-GEOIPS/geoips#211: 2023-05-09, interface updates
Ensure template_basic_plugin is installed properly.
modified; tests/test_full_install.sh