from __future__ import annotations


def convert_axes_coordinates(x, y, source_axis, target_axis):
    """Convert data coordinates between Matplotlib axes via display coordinates."""
    if x is None or y is None or source_axis is None or target_axis is None:
        return None, None
    display_xy = source_axis.transData.transform((x, y))
    target_xy = target_axis.transData.inverted().transform(display_xy)
    return float(target_xy[0]), float(target_xy[1])
