1# Copyright 2020 Huawei Technologies Co., Ltd 2# 3# Licensed under the Apache License, Version 2.0 (the "License"); 4# you may not use this file except in compliance with the License. 5# You may obtain a copy of the License at 6# 7# http://www.apache.org/licenses/LICENSE-2.0 8# 9# Unless required by applicable law or agreed to in writing, software 10# distributed under the License is distributed on an "AS IS" BASIS, 11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12# See the License for the specific language governing permissions and 13# limitations under the License. 14# ============================================================================ 15 16import numpy as np 17import pytest 18 19import mindspore.common.dtype as mstype 20import mindspore.context as context 21from mindspore.common.tensor import Tensor 22from mindspore.nn import Cell 23from mindspore.ops import operations as P 24 25 26class Net(Cell): 27 def __init__(self, dtype): 28 super(Net, self).__init__() 29 self.Cast = P.Cast() 30 self.dtype = dtype 31 32 def construct(self, x): 33 return self.Cast(x, self.dtype) 34 35 36@pytest.mark.level0 37@pytest.mark.platform_x86_cpu 38@pytest.mark.env_onecard 39def test_cast_bool(): 40 tensor_to_cast = [] 41 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.bool))) 42 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.float16))) 43 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.float32))) 44 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.float64))) 45 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.int8))) 46 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.int16))) 47 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.int32))) 48 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.int64))) 49 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.uint8))) 50 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.uint16))) 51 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.uint32))) 52 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.uint64))) 53 t = mstype.bool_ 54 55 context.set_context(mode=context.GRAPH_MODE, device_target='CPU') 56 for tensor in tensor_to_cast: 57 net = Net(t) 58 output = net(tensor) 59 assert output.asnumpy().dtype == 'bool' 60 61@pytest.mark.level0 62@pytest.mark.platform_x86_cpu 63@pytest.mark.env_onecard 64def test_cast_float16(): 65 tensor_to_cast = [] 66 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.bool))) 67 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.float16))) 68 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.float32))) 69 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.float64))) 70 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.int8))) 71 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.int16))) 72 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.int32))) 73 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.int64))) 74 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.uint8))) 75 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.uint16))) 76 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.uint32))) 77 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.uint64))) 78 t = mstype.float16 79 80 context.set_context(mode=context.GRAPH_MODE, device_target='CPU') 81 for tensor in tensor_to_cast: 82 net = Net(t) 83 output = net(tensor) 84 assert output.asnumpy().dtype == 'float16' 85 86@pytest.mark.level0 87@pytest.mark.platform_x86_cpu 88@pytest.mark.env_onecard 89def test_cast_float32(): 90 tensor_to_cast = [] 91 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.bool))) 92 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.float16))) 93 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.float32))) 94 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.float64))) 95 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.int8))) 96 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.int16))) 97 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.int32))) 98 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.int64))) 99 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.uint8))) 100 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.uint16))) 101 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.uint32))) 102 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.uint64))) 103 t = mstype.float32 104 105 context.set_context(mode=context.GRAPH_MODE, device_target='CPU') 106 for tensor in tensor_to_cast: 107 net = Net(t) 108 output = net(tensor) 109 assert output.asnumpy().dtype == 'float32' 110 111@pytest.mark.level0 112@pytest.mark.platform_x86_cpu 113@pytest.mark.env_onecard 114def test_cast_float64(): 115 tensor_to_cast = [] 116 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.bool))) 117 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.float16))) 118 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.float32))) 119 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.float64))) 120 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.int8))) 121 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.int16))) 122 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.int32))) 123 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.int64))) 124 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.uint8))) 125 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.uint16))) 126 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.uint32))) 127 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.uint64))) 128 t = mstype.float64 129 130 context.set_context(mode=context.GRAPH_MODE, device_target='CPU') 131 for tensor in tensor_to_cast: 132 net = Net(t) 133 output = net(tensor) 134 assert output.asnumpy().dtype == 'float64' 135 136@pytest.mark.level0 137@pytest.mark.platform_x86_cpu 138@pytest.mark.env_onecard 139def test_cast_int8(): 140 tensor_to_cast = [] 141 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.bool))) 142 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.float16))) 143 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.float32))) 144 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.float64))) 145 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.int8))) 146 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.int16))) 147 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.int32))) 148 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.int64))) 149 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.uint8))) 150 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.uint16))) 151 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.uint32))) 152 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.uint64))) 153 t = mstype.int8 154 155 context.set_context(mode=context.GRAPH_MODE, device_target='CPU') 156 for tensor in tensor_to_cast: 157 net = Net(t) 158 output = net(tensor) 159 assert output.asnumpy().dtype == 'int8' 160 161@pytest.mark.level0 162@pytest.mark.platform_x86_cpu 163@pytest.mark.env_onecard 164def test_cast_int16(): 165 tensor_to_cast = [] 166 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.bool))) 167 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.float16))) 168 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.float32))) 169 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.float64))) 170 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.int8))) 171 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.int16))) 172 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.int32))) 173 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.int64))) 174 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.uint8))) 175 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.uint16))) 176 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.uint32))) 177 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.uint64))) 178 t = mstype.int16 179 180 context.set_context(mode=context.GRAPH_MODE, device_target='CPU') 181 for tensor in tensor_to_cast: 182 net = Net(t) 183 output = net(tensor) 184 assert output.asnumpy().dtype == 'int16' 185 186@pytest.mark.level0 187@pytest.mark.platform_x86_cpu 188@pytest.mark.env_onecard 189def test_cast_int32(): 190 tensor_to_cast = [] 191 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.bool))) 192 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.float16))) 193 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.float32))) 194 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.float64))) 195 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.int8))) 196 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.int16))) 197 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.int32))) 198 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.int64))) 199 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.uint8))) 200 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.uint16))) 201 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.uint32))) 202 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.uint64))) 203 t = mstype.int32 204 205 context.set_context(mode=context.GRAPH_MODE, device_target='CPU') 206 for tensor in tensor_to_cast: 207 net = Net(t) 208 output = net(tensor) 209 assert output.asnumpy().dtype == 'int32' 210 211@pytest.mark.level0 212@pytest.mark.platform_x86_cpu 213@pytest.mark.env_onecard 214def test_cast_int64(): 215 tensor_to_cast = [] 216 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.bool))) 217 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.float16))) 218 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.float32))) 219 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.float64))) 220 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.int8))) 221 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.int16))) 222 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.int32))) 223 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.int64))) 224 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.uint8))) 225 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.uint16))) 226 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.uint32))) 227 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.uint64))) 228 t = mstype.int64 229 230 context.set_context(mode=context.GRAPH_MODE, device_target='CPU') 231 for tensor in tensor_to_cast: 232 net = Net(t) 233 output = net(tensor) 234 assert output.asnumpy().dtype == 'int64' 235 236@pytest.mark.level0 237@pytest.mark.platform_x86_cpu 238@pytest.mark.env_onecard 239def test_cast_uint8(): 240 tensor_to_cast = [] 241 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.bool))) 242 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.float16))) 243 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.float32))) 244 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.float64))) 245 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.int8))) 246 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.int16))) 247 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.int32))) 248 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.int64))) 249 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.uint8))) 250 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.uint16))) 251 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.uint32))) 252 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.uint64))) 253 t = mstype.uint8 254 255 context.set_context(mode=context.GRAPH_MODE, device_target='CPU') 256 for tensor in tensor_to_cast: 257 net = Net(t) 258 output = net(tensor) 259 assert output.asnumpy().dtype == 'uint8' 260 261@pytest.mark.level0 262@pytest.mark.platform_x86_cpu 263@pytest.mark.env_onecard 264def test_cast_uint16(): 265 tensor_to_cast = [] 266 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.bool))) 267 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.float16))) 268 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.float32))) 269 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.float64))) 270 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.int8))) 271 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.int16))) 272 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.int32))) 273 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.int64))) 274 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.uint8))) 275 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.uint16))) 276 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.uint32))) 277 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.uint64))) 278 t = mstype.uint16 279 280 context.set_context(mode=context.GRAPH_MODE, device_target='CPU') 281 for tensor in tensor_to_cast: 282 net = Net(t) 283 output = net(tensor) 284 assert output.asnumpy().dtype == 'uint16' 285 286@pytest.mark.level0 287@pytest.mark.platform_x86_cpu 288@pytest.mark.env_onecard 289def test_cast_uint32(): 290 tensor_to_cast = [] 291 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.bool))) 292 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.float16))) 293 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.float32))) 294 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.float64))) 295 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.int8))) 296 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.int16))) 297 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.int32))) 298 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.int64))) 299 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.uint8))) 300 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.uint16))) 301 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.uint32))) 302 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.uint64))) 303 t = mstype.uint32 304 305 context.set_context(mode=context.GRAPH_MODE, device_target='CPU') 306 for tensor in tensor_to_cast: 307 net = Net(t) 308 output = net(tensor) 309 assert output.asnumpy().dtype == 'uint32' 310 311@pytest.mark.level0 312@pytest.mark.platform_x86_cpu 313@pytest.mark.env_onecard 314def test_cast_uint64(): 315 tensor_to_cast = [] 316 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.bool))) 317 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.float16))) 318 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.float32))) 319 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.float64))) 320 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.int8))) 321 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.int16))) 322 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.int32))) 323 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.int64))) 324 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.uint8))) 325 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.uint16))) 326 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.uint32))) 327 tensor_to_cast.append(Tensor(np.random.uniform(-2, 2, (3, 2)).astype(np.uint64))) 328 t = mstype.uint64 329 330 context.set_context(mode=context.GRAPH_MODE, device_target='CPU') 331 for tensor in tensor_to_cast: 332 net = Net(t) 333 output = net(tensor) 334 assert output.asnumpy().dtype == 'uint64' 335