@staticmethod
def _item_eq(c1: Container, k1: Union[(DictKeyType, int)], c2: Container, k2: Union[(DictKeyType, int)]) -> bool:
    v1 = c1._get_node(k1)
    v2 = c2._get_node(k2)
    assert ((v1 is not None) and (v2 is not None))
    assert isinstance(v1, Node)
    assert isinstance(v2, Node)
    if (v1._is_none() and v2._is_none()):
        return True
    if (v1._is_missing() and v2._is_missing()):
        return True
    v1_inter = v1._is_interpolation()
    v2_inter = v2._is_interpolation()
    dv1: Optional[Node] = v1
    dv2: Optional[Node] = v2
    if v1_inter:
        dv1 = v1._maybe_dereference_node()
    if v2_inter:
        dv2 = v2._maybe_dereference_node()
    if (v1_inter and v2_inter):
        if ((dv1 is None) or (dv2 is None)):
            return (v1 == v2)
        else:
            if (isinstance(dv1, Container) and isinstance(dv2, Container)):
                if (dv1 != dv2):
                    return False
            dv1 = _get_value(dv1)
            dv2 = _get_value(dv2)
            return (dv1 == dv2)
    elif ((not v1_inter) and (not v2_inter)):
        v1 = _get_value(v1)
        v2 = _get_value(v2)
        ret = (v1 == v2)
        assert isinstance(ret, bool)
        return ret
    else:
        dv1 = _get_value(dv1)
        dv2 = _get_value(dv2)
        ret = (dv1 == dv2)
        assert isinstance(ret, bool)
        return ret
@staticmethod
def _item_eq(c1: Container, k1: Union[(DictKeyType, int)], c2: Container, k2: Union[(DictKeyType, int)]) -> bool:
    v1 = c1._get_node(k1)
    v2 = c2._get_node(k2)
    assert ((v1 is not None) and (v2 is not None))
    assert isinstance(v1, Node)
    assert isinstance(v2, Node)
    if (v1._is_none() and v2._is_none()):
        return True
    if (v1._is_missing() and v2._is_missing()):
        return True
    v1_inter = v1._is_interpolation()
    v2_inter = v2._is_interpolation()
    dv1: Optional[Node] = v1
    dv2: Optional[Node] = v2
    if v1_inter:
        dv1 = v1._maybe_dereference_node()
    if v2_inter:
        dv2 = v2._maybe_dereference_node()
    if (v1_inter and v2_inter):
        if ((dv1 is None) or (dv2 is None)):
            return (v1 == v2)
        else:
            if (isinstance(dv1, Container) and isinstance(dv2, Container)):
                if (dv1 != dv2):
                    return False
            dv1 = _get_value(dv1)
            dv2 = _get_value(dv2)
            return (dv1 == dv2)
    elif ((not v1_inter) and (not v2_inter)):
        v1 = _get_value(v1)
        v2 = _get_value(v2)
        ret = (v1 == v2)
        assert isinstance(ret, bool)
        return ret
    else:
        dv1 = _get_value(dv1)
        dv2 = _get_value(dv2)
        ret = (dv1 == dv2)
        assert isinstance(ret, bool)
        return ret