# Copyright (c) 2025 PaddlePaddle Authors. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. from __future__ import annotations import paddle from paddle import Tensor from paddle.framework import ( in_dynamic_mode, ) def _check_out_status( out: Tensor | tuple[Tensor, Tensor] | list[Tensor], expect_multiple: bool = False, ): if out is None: return if not in_dynamic_mode(): raise RuntimeError( "Using `out` static graph CINN backend is currently not supported. Directly return the tensor tuple instead.\n" ) if expect_multiple: if not isinstance(out, (tuple, list)) or len(out) != 2: raise TypeError( f"Expected a list or tuple of two tensors, got {type(out)} instead." ) if not ( isinstance(out[0], paddle.Tensor) and isinstance(out[1], paddle.Tensor) ): raise TypeError( f"Expected Tensor type in the tuple/list, got ({type(out[0])}, {type(out[1])}) instead." ) else: if not isinstance(out, paddle.Tensor): raise TypeError(f"Expected a Tensor, got {type(out)} instead.")