def METHOD_NAME(
    nodes_with_weights: List[NNCFNode],
    default_weight_qconfig: QuantizerConfig,
    global_weight_constraints: QuantizationConstraints = None,
    scope_overrides_dict: Dict = None,
    hw_config: HWConfig = None,
) -> Dict[NNCFNode, List[QuantizerConfig]]:
    """
    Assigns a list of possible quantizer configurations (as determined by HW config, defaults and overrides)
    to each weighted node that was passed.
    :param nodes_with_weights: The nodes in NNCFGraph that correspond to weighted operations.
    :param default_weight_qconfig: The default quantizer configuration for weights, to be used if
      no other information is given.
    :param global_weight_constraints: The constraints imposed on all weights by the NNCFConfig .json file, such
      as "all symmetric" or "all per-channel" etc.
    :param scope_overrides_dict: The dictionary of strings vs dict of overrides for a given weight quantizer.
      The strings are matched against the name of the NNCFNodes in nodes_with_weights.
    :param hw_config: The HWConfig object to be used for device-specific constraints on allowed weights.
    :return: A dict of each weighted node vs. the list of quantizer configs allowed for quantizing the associated
      weights
    """
    retval = {}  # type: Dict[NNCFNode, List[QuantizerConfig]]
    default_qconfig = deepcopy(default_weight_qconfig)
    if global_weight_constraints is not None:
        default_qconfig = global_weight_constraints.apply_constraints_to(default_qconfig)
    if scope_overrides_dict is None:
        scope_overrides_dict = {}
    weight_scope_overrides_dict = scope_overrides_dict.get("weights")
    if hw_config is not None:
        meta_vs_qconfig_map = hw_config.get_metatype_vs_quantizer_configs_map(for_weights=True)
    for node in nodes_with_weights:
        qconfig_for_current_scope = get_scoped_quantizer_config(
            default_qconfig, node.node_name, weight_scope_overrides_dict
        )
        if hw_config is None:
            qconfig_list = [qconfig_for_current_scope]
        else:
            metatype = node.metatype
            qconfig_list = meta_vs_qconfig_map[metatype]
            if HWConfig.is_wildcard_quantization(qconfig_list):  # Empty list = wildcard quantization
                qconfig_list = [default_qconfig]
            elif HWConfig.is_qconf_list_corresponding_to_unspecified_op(qconfig_list):
                continue  # The module will not have its weights quantized
            local_constraints = global_weight_constraints
            for overridden_scope, scoped_override_dict in scope_overrides_dict.items():
                if matches_any(node.node_name, overridden_scope):
                    scope_constraints = QuantizationConstraints.from_config_dict(scoped_override_dict)
                    local_constraints = local_constraints.get_updated_constraints(scope_constraints)
            qconfig_list = local_constraints.constrain_qconfig_list(
                node.node_name, hw_config.target_device, qconfig_list
            )
        retval[node] = qconfig_list
    return retval