@@ -693,12 +693,63 @@ def _collapse_subpackage_variants(
693693
694694 logger .debug ("final used_key_values %s" , pprint .pformat (used_key_values ))
695695
696+ configs = break_up_top_level_values (top_level_loop_vars , used_key_values )
697+
698+ # return (configs, top_level_loop_vars)
699+
696700 return (
697- break_up_top_level_values (top_level_loop_vars , used_key_values ),
701+ [
702+ config
703+ for config in configs
704+ if not _is_config_skipped (config , top_level_loop_vars , list_of_metas )
705+ ],
698706 top_level_loop_vars ,
699707 )
700708
701709
710+ def _is_config_skipped (config , top_level_loop_vars , list_of_metas ):
711+ trimmed_config = {loop_var : config [loop_var ] for loop_var in top_level_loop_vars }
712+ logger .debug ("checking config: %s" , trimmed_config )
713+ for i , meta in enumerate (list_of_metas ):
714+ trimmed_meta = {
715+ loop_var : meta .config .variant .get (loop_var )
716+ for loop_var in top_level_loop_vars
717+ }
718+ logger .debug (" checking in meta: %s" , trimmed_meta )
719+ for loop_var in top_level_loop_vars :
720+ variant = meta .config .variant
721+ if loop_var not in variant :
722+ logger .debug (
723+ " skipping meta because %s is not in meta variant" , loop_var
724+ )
725+ break
726+ if isinstance (variant [loop_var ], (list , set )) and set (
727+ config [loop_var ]
728+ ) - set (variant [loop_var ]):
729+ logger .debug (
730+ " skipping meta because %s in meta variant is %s, but in config is %s" ,
731+ loop_var ,
732+ variant [loop_var ],
733+ config [loop_var ],
734+ )
735+ break
736+ if isinstance (variant [loop_var ], (int , float , str )) and set (
737+ config [loop_var ]
738+ ) - set ([variant [loop_var ]]):
739+ logger .debug (
740+ " skipping meta because %s in meta variant is %s and in config is %s" ,
741+ loop_var ,
742+ [variant [loop_var ]],
743+ config [loop_var ],
744+ )
745+ break
746+ else :
747+ logger .debug (" FOUND! meta variant matches config" )
748+ return False
749+ logger .debug (" SKIPPED!" )
750+ return True
751+
752+
702753def _yaml_represent_ordereddict (yaml_representer , data ):
703754 # represent_dict processes dict-likes with a .sort() method or plain iterables of key-value
704755 # pairs. Only for the latter it never sorts and retains the order of the OrderedDict.
0 commit comments