MCPcopy Create free account
hub / github.com/numpy/numpy / _vectorize_call_with_signature

Method _vectorize_call_with_signature

numpy/lib/function_base.py:2464–2522  ·  view source on GitHub ↗

Vectorized call over positional arguments with a signature.

(self, func, args)

Source from the content-addressed store, hash-verified

2462 return res
2463
2464 def _vectorize_call_with_signature(self, func, args):
2465 """Vectorized call over positional arguments with a signature."""
2466 input_core_dims, output_core_dims = self._in_and_out_core_dims
2467
2468 if len(args) != len(input_core_dims):
2469 raise TypeError('wrong number of positional arguments: '
2470 'expected %r, got %r'
2471 % (len(input_core_dims), len(args)))
2472 args = tuple(asanyarray(arg) for arg in args)
2473
2474 broadcast_shape, dim_sizes = _parse_input_dimensions(
2475 args, input_core_dims)
2476 input_shapes = _calculate_shapes(broadcast_shape, dim_sizes,
2477 input_core_dims)
2478 args = [np.broadcast_to(arg, shape, subok=True)
2479 for arg, shape in zip(args, input_shapes)]
2480
2481 outputs = None
2482 otypes = self.otypes
2483 nout = len(output_core_dims)
2484
2485 for index in np.ndindex(*broadcast_shape):
2486 results = func(*(arg[index] for arg in args))
2487
2488 n_results = len(results) if isinstance(results, tuple) else 1
2489
2490 if nout != n_results:
2491 raise ValueError(
2492 'wrong number of outputs from pyfunc: expected %r, got %r'
2493 % (nout, n_results))
2494
2495 if nout == 1:
2496 results = (results,)
2497
2498 if outputs is None:
2499 for result, core_dims in zip(results, output_core_dims):
2500 _update_dim_sizes(dim_sizes, result, core_dims)
2501
2502 outputs = _create_arrays(broadcast_shape, dim_sizes,
2503 output_core_dims, otypes, results)
2504
2505 for output, result in zip(outputs, results):
2506 output[index] = result
2507
2508 if outputs is None:
2509 # did not call the function even once
2510 if otypes is None:
2511 raise ValueError('cannot call `vectorize` on size 0 inputs '
2512 'unless `otypes` is set')
2513 if builtins.any(dim not in dim_sizes
2514 for dims in output_core_dims
2515 for dim in dims):
2516 raise ValueError('cannot call `vectorize` with a signature '
2517 'including new output dimensions on size 0 '
2518 'inputs')
2519 outputs = _create_arrays(broadcast_shape, dim_sizes,
2520 output_core_dims, otypes)
2521

Callers 1

_vectorize_callMethod · 0.95

Calls 7

asanyarrayFunction · 0.85
_parse_input_dimensionsFunction · 0.85
_calculate_shapesFunction · 0.85
_update_dim_sizesFunction · 0.85
_create_arraysFunction · 0.85
funcFunction · 0.70
anyMethod · 0.45

Tested by

no test coverage detected