| 806 | } |
| 807 | |
| 808 | fn cast_to_1d(&self, format: PyUtf8StrRef, vm: &VirtualMachine) -> PyResult<Self> { |
| 809 | let format_str = format.as_str(); |
| 810 | let format_spec = Self::parse_format(format_str, vm)?; |
| 811 | let itemsize = format_spec.size(); |
| 812 | if !self.desc.len.is_multiple_of(itemsize) { |
| 813 | return Err(vm.new_type_error("memoryview: length is not a multiple of itemsize")); |
| 814 | } |
| 815 | |
| 816 | Ok(Self { |
| 817 | buffer: self.buffer.clone(), |
| 818 | released: AtomicCell::new(false), |
| 819 | start: self.start, |
| 820 | format_spec, |
| 821 | desc: BufferDescriptor { |
| 822 | len: self.desc.len, |
| 823 | readonly: self.desc.readonly, |
| 824 | itemsize, |
| 825 | format: format_str.to_owned().into(), |
| 826 | dim_desc: vec![(self.desc.len / itemsize, itemsize as isize, 0)], |
| 827 | }, |
| 828 | hash: OnceCell::new(), |
| 829 | }) |
| 830 | } |
| 831 | |
| 832 | #[pymethod] |
| 833 | fn cast(&self, args: CastArgs, vm: &VirtualMachine) -> PyResult<PyRef<Self>> { |