def METHOD_NAME(  # nosec
    value_counts: Union[StateMatrix, dict],
    param_value_counts: Union[StateMatrix, dict],
    unk_token: str,
) -> Tuple[StateMatrix, StateMatrix]:
    """
    Compute value related probabilities.
    In particular, compute the probabilities of the individual values,
    and also the probabilities of the values conditional on the param.
    Note that we will be modelling the values as categorical conditional
    on the parameter. Therefore, we DO expect these probabilities to sum
    to 1.
    Note also that each parameter can only take one value at a time
    (unlike how a command can take multiple parameters at a time).
    Parameters
    ----------
    value_counts: Union[StateMatrix, dict]
        individual value counts
    param_value_counts: Union[StateMatrix, dict]
        value conditional on param counts
    unk_token: str
        dummy command to signify an unseen command (e.g. "##UNK##")
    Returns
    -------
    Tuple:
        individual value probabilities,
        value conditional on param probabilities
    """
    value_probs: DefaultDict[str, float] = defaultdict(lambda: 0)
    value_cond_param_probs: DefaultDict[str, DefaultDict[str, float]] = defaultdict(
        lambda: defaultdict(lambda: 0)
    )
    for param, values in param_value_counts.items():
        n_val = sum(values.values())
        for value, count in values.items():
            value_cond_param_probs[param][value] = count / n_val
    tot_val = sum(value_counts.values())
    for value, count in value_counts.items():
        value_probs[value] = count / tot_val
    value_probs_sm = StateMatrix(states=value_probs, unk_token=unk_token)
    value_cond_param_probs_sm = StateMatrix(
        states=value_cond_param_probs, unk_token=unk_token
    )
    return value_probs_sm, value_cond_param_probs_sm