Conversion Error to ComplexDouble on MPS
Labels: triaged, module: complex, module: mps

### 🐛 Describe the bug

## Description
I am trying to use PyTorch for a generative model for audio phase reconstruction. In the model, I use the inverse Short-time Fourier Transform as a step on MPS, which requires a complex tensor that cannot be created when the device is set to `mps`. It works on the CPU, but then the training time is unfeasible. 

I found that there is an issue with MPS and double precision numbers here: https://github.com/pytorch/pytorch/issues/77781 but I was wondering if there is a workaround for this issue. 

## Code
```python
device = 'mps'

mag = torch.randn(512,512).to(device)
phase = torch.randn(512,512).to(device)

out = mag*(torch.cos(mag)+1j* torch.sin(phase))
```


## Traceback
```
libc++abi: terminating due to uncaught exception of type c10::TypeError: Trying to convert ComplexDouble to the MPS backend but it does not have support for that dtype.
Exception raised from getMPSScalarType at /Users/runner/work/pytorch/pytorch/pytorch/aten/src/ATen/native/mps/OperationUtils.mm:91 (most recent call first):
frame #0: at::native::mps::getMPSScalarType(c10::ScalarType) + 180 (0x1122cd940 in libtorch_cpu.dylib)
frame #1: invocation function for block in at::native::mps::binaryOpTensor(at::Tensor const&, at::Tensor const&, c10::Scalar const&, at::Tensor const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, MPSGraphTensor* (at::native::mps::BinaryOpCachedGraph*, MPSGraphTensor*, MPSGraphTensor*) block_pointer) + 156 (0x1122e8830 in libtorch_cpu.dylib)
frame #2: invocation function for block in at::native::mps::MPSGraphCache::CreateCachedGraph(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, at::native::mps::MPSCachedGraph* () block_pointer) + 216 (0x1122e38c0 in libtorch_cpu.dylib)
frame #3: _dispatch_client_callout + 20 (0x184c80400 in libdispatch.dylib)
frame #4: _dispatch_lane_barrier_sync_invoke_and_complete + 56 (0x184c8f97c in libdispatch.dylib)
frame #5: at::native::mps::MPSGraphCache::CreateCachedGraph(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, at::native::mps::MPSCachedGraph* () block_pointer) + 160 (0x1122d19cc in libtorch_cpu.dylib)
frame #6: at::native::mps::binaryOpTensor(at::Tensor const&, at::Tensor const&, c10::Scalar const&, at::Tensor const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, MPSGraphTensor* (at::native::mps::BinaryOpCachedGraph*, MPSGraphTensor*, MPSGraphTensor*) block_pointer) + 2352 (0x1122e7884 in libtorch_cpu.dylib)
frame #7: at::native::structured_mul_out_mps::impl(at::Tensor const&, at::Tensor const&, at::Tensor const&) + 128 (0x1122eb3dc in libtorch_cpu.dylib)
frame #8: at::(anonymous namespace)::wrapper_MPS_mul_Tensor(at::Tensor const&, at::Tensor const&) + 140 (0x10fa87e88 in libtorch_cpu.dylib)
frame #9: c10::impl::wrap_kernel_functor_unboxed_<c10::impl::detail::WrapFunctionIntoFunctor_<c10::CompileTimeFunctionPointer<at::Tensor (c10::DispatchKeySet, at::Tensor const&, at::Tensor const&), &torch::autograd::VariableType::(anonymous namespace)::mul_Tensor(c10::DispatchKeySet, at::Tensor const&, at::Tensor const&)>, at::Tensor, c10::guts::typelist::typelist<c10::DispatchKeySet, at::Tensor const&, at::Tensor const&>>, at::Tensor (c10::DispatchKeySet, at::Tensor const&, at::Tensor const&)>::call(c10::OperatorKernel*, c10::DispatchKeySet, at::Tensor const&, at::Tensor const&) + 1412 (0x11070c2a0 in libtorch_cpu.dylib)
frame #10: at::_ops::mul_Tensor::call(at::Tensor const&, at::Tensor const&) + 284 (0x10e8c5878 in libtorch_cpu.dylib)
frame #11: torch::autograd::THPVariable_mul(_object*, _object*, _object*) + 396 (0x1027749e8 in libtorch_python.dylib)
frame #12: _object* torch::autograd::TypeError_to_NotImplemented_<&torch::autograd::THPVariable_mul(_object*, _object*, _object*)>(_object*, _object*, _object*) + 12 (0x1026d0a3c in libtorch_python.dylib)
<omitting python frames>
frame #30: start + 2236 (0x184ad7f28 in dyld)
```

### Versions

PyTorch version: 2.0.1
Is debug build: False
CUDA used to build PyTorch: None
ROCM used to build PyTorch: N/A

OS: macOS 13.4 (arm64)
GCC version: Could not collect
Clang version: 14.0.3 (clang-1403.0.22.14.1)
CMake version: Could not collect
Libc version: N/A

Python version: 3.10.1 (main, Apr 29 2023, 23:15:20) [Clang 14.0.3 (clang-1403.0.22.14.1)] (64-bit runtime)
Python platform: macOS-13.4-arm64-arm-64bit
Is CUDA available: False
CUDA runtime version: No CUDA
CUDA_MODULE_LOADING set to: N/A
GPU models and configuration: No CUDA
Nvidia driver version: No CUDA
cuDNN version: No CUDA
HIP runtime version: N/A
MIOpen runtime version: N/A
Is XNNPACK available: True

CPU:
Apple M2 Max

Versions of relevant libraries:
[pip3] numpy==1.24.4
[pip3] pytorch-complex==0.1.2
[pip3] torch==2.0.1
[pip3] torch-tb-profiler==0.4.1
[pip3] torchaudio==2.0.2
[pip3] torchshow==0.5.1
[pip3] torchvision==0.15.2
[conda] Could not collect

cc @ezyang @anjali411 @dylanbespalko @mruberry @Lezcano @nikitaved @kulinseth @albanD @malfet @DenisVieriu97 @razarmehr @abhudev