def METHOD_NAME(self, node_ids: np.ndarray, *, flatten=False):
    result = {}
    if not node_ids.size:
        return result
    mask = np.in1d(node_ids, np.fromiter(self.children_cache.keys(), dtype=NODE_ID))
    cached_children_ = self._children_vec(node_ids[mask])
    result.update({id_: c_ for id_, c_ in zip(node_ids[mask], cached_children_)})
    result.update(self._cg.get_children(node_ids[~mask], raw_only=True))
    update(
        self.children_cache, node_ids[~mask], [result[k] for k in node_ids[~mask]]
    )
    if flatten:
        return np.concatenate([*result.values()])
    return result