1#![allow(dead_code)]
2use crate::op::{BinaryOpT, CmpOp, ReduceOp, UnaryOpT};
3use crate::{CpuStorage, DType, Error, Layout, Result, Shape};
4
5#[derive(Debug, Clone)]
6pub struct WgpuDevice;
7
8#[derive(Debug)]
9pub struct WgpuStorage;
10
11#[derive(thiserror::Error, Debug)]
12pub enum WgpuError {
13 #[error("{0}")]
14 Message(String),
15}
16
17impl From<String> for WgpuError {
18 fn from(e: String) -> Self {
19 WgpuError::Message(e)
20 }
21}
22
23fn err<T>() -> Result<T> {
24 Err(Error::Msg("hanzo was not compiled with wgpu support".into()))
25}
26
27macro_rules! fail {
28 () => {
29 unimplemented!("wgpu support has not been enabled, add `wgpu` feature to enable.")
30 };
31}
32
33impl crate::backend::BackendStorage for WgpuStorage {
34 type Device = WgpuDevice;
35
36 fn try_clone(&self, _: &Layout) -> Result<Self> {
37 err()
38 }
39
40 fn dtype(&self) -> DType {
41 fail!()
42 }
43
44 fn device(&self) -> &Self::Device {
45 fail!()
46 }
47
48 fn const_set(&mut self, _: crate::scalar::Scalar, _: &Layout) -> Result<()> {
49 err()
50 }
51
52 fn to_cpu_storage(&self) -> Result<CpuStorage> {
53 err()
54 }
55
56 fn affine(&self, _: &Layout, _: f64, _: f64) -> Result<Self> {
57 err()
58 }
59
60 fn powf(&self, _: &Layout, _: f64) -> Result<Self> {
61 err()
62 }
63
64 fn elu(&self, _: &Layout, _: f64) -> Result<Self> {
65 err()
66 }
67
68 fn reduce_op(&self, _: ReduceOp, _: &Layout, _: &[usize]) -> Result<Self> {
69 err()
70 }
71
72 fn cmp(&self, _: CmpOp, _: &Self, _: &Layout, _: &Layout) -> Result<Self> {
73 err()
74 }
75
76 fn to_dtype(&self, _: &Layout, _: DType) -> Result<Self> {
77 err()
78 }
79
80 fn unary_impl<B: UnaryOpT>(&self, _: &Layout) -> Result<Self> {
81 err()
82 }
83
84 fn binary_impl<B: BinaryOpT>(&self, _: &Self, _: &Layout, _: &Layout) -> Result<Self> {
85 err()
86 }
87
88 fn where_cond(&self, _: &Layout, _: &Self, _: &Layout, _: &Self, _: &Layout) -> Result<Self> {
89 err()
90 }
91
92 fn conv1d(
93 &self,
94 _: &Layout,
95 _: &Self,
96 _: &Layout,
97 _: &crate::conv::ParamsConv1D,
98 ) -> Result<Self> {
99 err()
100 }
101
102 fn conv_transpose1d(
103 &self,
104 _l: &Layout,
105 _kernel: &Self,
106 _kernel_l: &Layout,
107 _params: &crate::conv::ParamsConvTranspose1D,
108 ) -> Result<Self> {
109 err()
110 }
111
112 fn conv2d(
113 &self,
114 _: &Layout,
115 _: &Self,
116 _: &Layout,
117 _: &crate::conv::ParamsConv2D,
118 ) -> Result<Self> {
119 err()
120 }
121
122 fn conv_transpose2d(
123 &self,
124 _l: &Layout,
125 _kernel: &Self,
126 _kernel_l: &Layout,
127 _params: &crate::conv::ParamsConvTranspose2D,
128 ) -> Result<Self> {
129 err()
130 }
131
132 fn index_select(&self, _: &Self, _: &Layout, _: &Layout, _: usize) -> Result<Self> {
133 err()
134 }
135 fn gather(&self, _: &Layout, _: &Self, _: &Layout, _: usize) -> Result<Self> {
136 err()
137 }
138
139 fn scatter_set(
140 &mut self,
141 _: &Layout,
142 _: &Self,
143 _: &Layout,
144 _: &Self,
145 _: &Layout,
146 _: usize,
147 ) -> Result<()> {
148 err()
149 }
150
151 fn scatter_add_set(
152 &mut self,
153 _: &Layout,
154 _: &Self,
155 _: &Layout,
156 _: &Self,
157 _: &Layout,
158 _: usize,
159 ) -> Result<()> {
160 err()
161 }
162
163 fn index_add(
164 &self,
165 _: &Layout,
166 _: &Self,
167 _: &Layout,
168 _: &Self,
169 _: &Layout,
170 _: usize,
171 ) -> Result<Self> {
172 err()
173 }
174
175 fn matmul(
176 &self,
177 _: &Self,
178 _: (usize, usize, usize, usize),
179 _: &Layout,
180 _: &Layout,
181 ) -> Result<Self> {
182 err()
183 }
184
185 fn copy_strided_src(&self, _: &mut Self, _: usize, _: &Layout) -> Result<()> {
186 err()
187 }
188
189 fn copy2d(
190 &self,
191 _: &mut Self,
192 _: usize,
193 _: usize,
194 _: usize,
195 _: usize,
196 _: usize,
197 _: usize,
198 ) -> Result<()> {
199 err()
200 }
201
202 fn avg_pool2d(&self, _: &Layout, _: (usize, usize), _: (usize, usize)) -> Result<Self> {
203 err()
204 }
205
206 fn max_pool2d(&self, _: &Layout, _: (usize, usize), _: (usize, usize)) -> Result<Self> {
207 err()
208 }
209
210 fn upsample_nearest1d(&self, _: &Layout, _: usize) -> Result<Self> {
211 err()
212 }
213
214 fn upsample_nearest2d(&self, _: &Layout, _: usize, _: usize) -> Result<Self> {
215 err()
216 }
217
218 fn upsample_bilinear2d(
219 &self,
220 _: &Layout,
221 _: usize,
222 _: usize,
223 _: bool,
224 _: Option<f64>,
225 _: Option<f64>,
226 ) -> Result<Self> {
227 err()
228 }
229}
230
231impl crate::backend::BackendDevice for WgpuDevice {
232 type Storage = WgpuStorage;
233 fn new(_: usize) -> Result<Self> {
234 err()
235 }
236
237 fn set_seed(&self, _: u64) -> Result<()> {
238 err()
239 }
240
241 fn get_current_seed(&self) -> Result<u64> {
242 err()
243 }
244
245 fn location(&self) -> crate::DeviceLocation {
246 fail!()
247 }
248
249 fn same_device(&self, _: &Self) -> bool {
250 fail!()
251 }
252
253 fn zeros_impl(&self, _shape: &Shape, _dtype: DType) -> Result<Self::Storage> {
254 err()
255 }
256
257 unsafe fn alloc_uninit(&self, _shape: &Shape, _dtype: DType) -> Result<Self::Storage> {
258 err()
259 }
260
261 fn storage_from_slice<T: crate::WithDType>(&self, _: &[T]) -> Result<Self::Storage> {
262 err()
263 }
264
265 fn storage_from_cpu_storage(&self, _: &CpuStorage) -> Result<Self::Storage> {
266 err()
267 }
268
269 fn storage_from_cpu_storage_owned(&self, _: CpuStorage) -> Result<Self::Storage> {
270 err()
271 }
272
273 fn rand_uniform(&self, _: &Shape, _: DType, _: f64, _: f64) -> Result<Self::Storage> {
274 err()
275 }
276
277 fn rand_normal(&self, _: &Shape, _: DType, _: f64, _: f64) -> Result<Self::Storage> {
278 err()
279 }
280
281 fn synchronize(&self) -> Result<()> {
282 Ok(())
283 }
284}