| 240 | |
| 241 | impl AsNumber for PyWeakProxy { |
| 242 | fn as_number() -> &'static PyNumberMethods { |
| 243 | static AS_NUMBER: LazyLock<PyNumberMethods> = LazyLock::new(|| PyNumberMethods { |
| 244 | boolean: Some(|number, vm| { |
| 245 | let obj = proxy_upgrade(number.obj, vm)?; |
| 246 | obj.is_true(vm) |
| 247 | }), |
| 248 | int: Some(|number, vm| { |
| 249 | let obj = proxy_upgrade(number.obj, vm)?; |
| 250 | obj.try_int(vm).map(Into::into) |
| 251 | }), |
| 252 | float: Some(|number, vm| { |
| 253 | let obj = proxy_upgrade(number.obj, vm)?; |
| 254 | obj.try_float(vm).map(Into::into) |
| 255 | }), |
| 256 | index: Some(|number, vm| { |
| 257 | let obj = proxy_upgrade(number.obj, vm)?; |
| 258 | obj.try_index(vm).map(Into::into) |
| 259 | }), |
| 260 | negative: proxy_unary_slot!(_neg), |
| 261 | positive: proxy_unary_slot!(_pos), |
| 262 | absolute: proxy_unary_slot!(_abs), |
| 263 | invert: proxy_unary_slot!(_invert), |
| 264 | add: proxy_binary_slot!(_add), |
| 265 | subtract: proxy_binary_slot!(_sub), |
| 266 | multiply: proxy_binary_slot!(_mul), |
| 267 | remainder: proxy_binary_slot!(_mod), |
| 268 | divmod: proxy_binary_slot!(_divmod), |
| 269 | lshift: proxy_binary_slot!(_lshift), |
| 270 | rshift: proxy_binary_slot!(_rshift), |
| 271 | and: proxy_binary_slot!(_and), |
| 272 | xor: proxy_binary_slot!(_xor), |
| 273 | or: proxy_binary_slot!(_or), |
| 274 | floor_divide: proxy_binary_slot!(_floordiv), |
| 275 | true_divide: proxy_binary_slot!(_truediv), |
| 276 | matrix_multiply: proxy_binary_slot!(_matmul), |
| 277 | inplace_add: proxy_binary_slot!(_iadd), |
| 278 | inplace_subtract: proxy_binary_slot!(_isub), |
| 279 | inplace_multiply: proxy_binary_slot!(_imul), |
| 280 | inplace_remainder: proxy_binary_slot!(_imod), |
| 281 | inplace_lshift: proxy_binary_slot!(_ilshift), |
| 282 | inplace_rshift: proxy_binary_slot!(_irshift), |
| 283 | inplace_and: proxy_binary_slot!(_iand), |
| 284 | inplace_xor: proxy_binary_slot!(_ixor), |
| 285 | inplace_or: proxy_binary_slot!(_ior), |
| 286 | inplace_floor_divide: proxy_binary_slot!(_ifloordiv), |
| 287 | inplace_true_divide: proxy_binary_slot!(_itruediv), |
| 288 | inplace_matrix_multiply: proxy_binary_slot!(_imatmul), |
| 289 | power: proxy_ternary_slot!(_pow), |
| 290 | inplace_power: proxy_ternary_slot!(_ipow), |
| 291 | }); |
| 292 | &AS_NUMBER |
| 293 | } |
| 294 | } |
| 295 | |
| 296 | impl Comparable for PyWeakProxy { |