def __array_ufunc__(self, ufunc: Callable, method: str, *inputs: Any, **kwargs: Any) -> 'DataFrame':
    if (all((isinstance(inp, DataFrame) for inp in inputs)) and any(((not same_anchor(inp, inputs[0])) for inp in inputs))):
        assert (len(inputs) == 2)
        this = inputs[0]
        that = inputs[1]
        if (this._internal.column_labels_level != that._internal.column_labels_level):
            raise ValueError('cannot join with no overlapping index names')

        def apply_op(psdf: DataFrame, this_column_labels: List[Label], that_column_labels: List[Label]) -> Iterator[Tuple[('Series', Label)]]:
            for (this_label, that_label) in zip(this_column_labels, that_column_labels):
                (yield (ufunc(psdf._psser_for(this_label), psdf._psser_for(that_label), **kwargs).rename(this_label), this_label))
        return align_diff_frames(apply_op, this, that, fillna=True, how='full')
    else:
        applied = []
        this = inputs[0]
        assert all(((inp is this) for inp in inputs if isinstance(inp, DataFrame)))
        for label in this._internal.column_labels:
            arguments = []
            for inp in inputs:
                arguments.append((inp[label] if isinstance(inp, DataFrame) else inp))
            applied.append(ufunc(*arguments, **kwargs).rename(label))
        internal = this._internal.with_new_columns(applied)
        return DataFrame(internal)
def __array_ufunc__(self, ufunc: Callable, method: str, *inputs: Any, **kwargs: Any) -> 'DataFrame':
    if (all((isinstance(inp, DataFrame) for inp in inputs)) and any(((not same_anchor(inp, inputs[0])) for inp in inputs))):
        assert (len(inputs) == 2)
        this = inputs[0]
        that = inputs[1]
        if (this._internal.column_labels_level != that._internal.column_labels_level):
            raise ValueError('cannot join with no overlapping index names')

        def apply_op(psdf: DataFrame, this_column_labels: List[Label], that_column_labels: List[Label]) -> Iterator[Tuple[('Series', Label)]]:
            for (this_label, that_label) in zip(this_column_labels, that_column_labels):
                (yield (ufunc(psdf._psser_for(this_label), psdf._psser_for(that_label), **kwargs).rename(this_label), this_label))
        return align_diff_frames(apply_op, this, that, fillna=True, how='full')
    else:
        applied = []
        this = inputs[0]
        assert all(((inp is this) for inp in inputs if isinstance(inp, DataFrame)))
        for label in this._internal.column_labels:
            arguments = []
            for inp in inputs:
                arguments.append((inp[label] if isinstance(inp, DataFrame) else inp))
            applied.append(ufunc(*arguments, **kwargs).rename(label))
        internal = this._internal.with_new_columns(applied)
        return DataFrame(internal)