@@ -19,7 +19,7 @@ from mindtorch.utils import unsupported_attr, pynative_mode_condition, is_under_
set_multiple_name_tuple, INT32_MIN, INT64_MIN, INT32_MAX, INT64_MAX, FP64_MAX, FP64_MIN, FP32_MAX, FP32_MIN
from mindtorch.torch.tensor import Tensor as adapter_tensor
from mindtorch.torch.common._inner import _out_inplace_assign, _out_limit_pynative, \
_out_inplace_assign_with_adapter_tensor, _functional_inplace_assign
_out_inplace_assign_with_adapter_tensor, _functional_inplace_assign, _nametuple_out_inplace_assign
from mindtorch.torch.common.dtype import _TypeDict, all_int_type, all_float_type, all_complex_type, finfo, \
all_float_and_complex_type
from mindtorch.torch.linalg import matrix_power as linalg_matrix_power
@@ -584,21 +584,9 @@ def max(input, dim=None, keepdim=False, other=None, *, out=None):
value, indice = ms.ops.max(input_ms, dim, keepdim)
value = value.astype(type)
indice = indice.astype(ms.int64)
if pynative_mode_condition():
point = set_name_tuple('max')
rlt = point(cast_to_adapter_tensor(value), cast_to_adapter_tensor(indice))
if out is not None:
if len(out) != 2 or not isinstance(out[0], adapter_tensor) or not isinstance(out[1], adapter_tensor):
raise TypeError("In max(), `out` should be tuple of Tensors.")
out[0].assign_value(value)
out[1].assign_value(indice)
return out
return rlt
if out is not None:
raise ValueError('In MindSpore static graph mode, `out` in `max` should be None, '
'please set out=None and use return value instead of `out`.')
return cast_to_adapter_tensor(value), cast_to_adapter_tensor(indice)
point = set_name_tuple('max')
rlt = point(cast_to_adapter_tensor(value), cast_to_adapter_tensor(indice))
return _nametuple_out_inplace_assign(out, rlt, "max")
# To achieve the polymorphism torch.min(Tensor input, Tensor other, *, Tensor out)
@@ -620,21 +608,10 @@ def min(input, dim=None, keepdim=False, other=None, *, out=None):
result, indices = ms.ops.min(input_ms, dim, keepdim)
result = result.astype(type)
if pynative_mode_condition():
point = set_name_tuple('min')
rlt = point(cast_to_adapter_tensor(result), cast_to_adapter_tensor(indices))
if out is not None:
if len(out) != 2 or not isinstance(out[0], adapter_tensor) or not isinstance(out[1], adapter_tensor):
raise TypeError("In min(), `out` should be tuple of Tensors.")
out[0].assign_value(result)
out[1].assign_value(indices)
return out
return rlt
point = set_name_tuple('min')
rlt = point(cast_to_adapter_tensor(result), cast_to_adapter_tensor(indices))
return _nametuple_out_inplace_assign(out, rlt, "min")
if out is not None:
raise ValueError('In MindSpore static graph mode, `out` in `min` should be None, '
'please set out=None and use return value instead of `out`.')
return cast_to_adapter_tensor(result), cast_to_adapter_tensor(indices)
def fmax(input, other, *, out=None):
output = input.fmax(other)
@@ -2116,11 +2093,9 @@ def topk(input, k, dim=None, largest=True, sorted=True, *, out=None):
value, indice = (ms.ops.zeros((0,), dtype=input.dtype), ms.ops.zeros((0,), dtype=ms.int32))
else:
value, indice = ms.ops.topk(input_x, k, dim, largest, sorted)
if pynative_mode_condition():
point = set_name_tuple('topk')
rlt = point(cast_to_adapter_tensor(value), cast_to_adapter_tensor(indice))
return rlt
return _out_inplace_assign(out, (value, indice), "topk")
point = set_name_tuple('topk')
rlt = point(cast_to_adapter_tensor(value), cast_to_adapter_tensor(indice))
return _nametuple_out_inplace_assign(out, rlt, "topk")
def addbmm(input, batch1, batch2, *, beta=1, alpha=1, out=None):
_input, _batch1, _batch2 = cast_to_ms_tensor((input, batch1, batch2))
@@ -2843,12 +2818,9 @@ def histogramdd(input, bins=10, *, range=None, weight=None, density=False, out=N
bin_edges = [bin_edge.to(ms.float64) for bin_edge in bin_edges]
else:
hist, bin_edges = ms.numpy.histogramdd(input_ms, bins=bins, range=range, weights=weight, density=density)
output = (hist, bin_edges)
if pynative_mode_condition():
svd_namedtuple = set_multiple_name_tuple('histogramdd', 'hist, bin_edges')
output = svd_namedtuple(cast_to_adapter_tensor(hist), cast_to_adapter_tensor(bin_edges))
return output
return _out_inplace_assign(out, output, "histogramdd")
svd_namedtuple = set_multiple_name_tuple('histogramdd', 'hist, bin_edges')
output = svd_namedtuple(cast_to_adapter_tensor(hist), cast_to_adapter_tensor(bin_edges))
return _nametuple_out_inplace_assign(out, output, "histogramdd")
def diag_embed(input, offset=0, dim1=-2, dim2=-1, *, out=None):
output = input.diag_embed(offset=offset, dim1=dim1, dim2=dim2)