MCPcopy Index your code
hub / github.com/RustPython/RustPython / eq

Method eq

crates/vm/src/builtins/memory.rs:324–384  ·  view source on GitHub ↗
(zelf: &Py<Self>, other: &PyObject, vm: &VirtualMachine)

Source from the content-addressed store, hash-verified

322 }
323
324 fn eq(zelf: &Py<Self>, other: &PyObject, vm: &VirtualMachine) -> PyResult<bool> {
325 if zelf.is(other) {
326 return Ok(true);
327 }
328 if zelf.released.load() {
329 return Ok(false);
330 }
331
332 if let Some(other) = other.downcast_ref::<Self>()
333 && other.released.load()
334 {
335 return Ok(false);
336 }
337
338 let other = match PyBuffer::try_from_borrowed_object(vm, other) {
339 Ok(buf) => buf,
340 Err(_) => return Ok(false),
341 };
342
343 if !is_equiv_shape(&zelf.desc, &other.desc) {
344 return Ok(false);
345 }
346
347 let a_itemsize = zelf.desc.itemsize;
348 let b_itemsize = other.desc.itemsize;
349 let a_format_spec = &zelf.format_spec;
350 let b_format_spec = &Self::parse_format(&other.desc.format, vm)?;
351
352 if zelf.desc.ndim() == 0 {
353 let a_val = format_unpack(a_format_spec, &zelf.buffer.obj_bytes()[..a_itemsize], vm)?;
354 let b_val = format_unpack(b_format_spec, &other.obj_bytes()[..b_itemsize], vm)?;
355 return vm.bool_eq(&a_val, &b_val);
356 }
357
358 // TODO: optimize cmp by format
359 let mut ret = Ok(true);
360 let a_bytes = zelf.buffer.obj_bytes();
361 let b_bytes = other.obj_bytes();
362 zelf.desc.zip_eq(&other.desc, false, |a_range, b_range| {
363 let a_range = (a_range.start + zelf.start as isize) as usize
364 ..(a_range.end + zelf.start as isize) as usize;
365 let b_range = b_range.start as usize..b_range.end as usize;
366 let a_val = match format_unpack(a_format_spec, &a_bytes[a_range], vm) {
367 Ok(val) => val,
368 Err(e) => {
369 ret = Err(e);
370 return true;
371 }
372 };
373 let b_val = match format_unpack(b_format_spec, &b_bytes[b_range], vm) {
374 Ok(val) => val,
375 Err(e) => {
376 ret = Err(e);
377 return true;
378 }
379 };
380 ret = vm.bool_eq(&a_val, &b_val);
381 if let Ok(b) = ret { !b } else { true }

Callers

nothing calls this directly

Calls 9

is_equiv_shapeFunction · 0.85
format_unpackFunction · 0.85
isMethod · 0.80
bool_eqMethod · 0.80
zip_eqMethod · 0.80
ErrClass · 0.50
loadMethod · 0.45
ndimMethod · 0.45
obj_bytesMethod · 0.45

Tested by

no test coverage detected