docs: def napi_or(values, **kwargs):
      """Perform element-wise logical *or* operation on arrays.
  
      If *values* contains a non-array object with truth_ value **True**, the
      outcome will be an array of **True**\s with suitable shape without arrays
      being evaluated. Non-array objects with truth value **False** are omitted.
  
      If array shapes do not match (after squeezing when enabled by user),
      :exc:`ValueError` is raised.
  
      This function uses :obj:`numpy.logical_or` or :obj:`numpy.any`."""
  
      arrays = []
      result = None
      shapes = set()
  
      for value in values:
          if isinstance(value, ndarray) and value.shape:
              arrays.append(value)
              shapes.add(value.shape)
          elif value:
              result = value
  
      if len(shapes) > 1 and kwargs.get('squeeze', kwargs.get('sq', False)):
          shapes.clear()
          for i, a in enumerate(arrays):
              a = arrays[i] = a.squeeze()
              shapes.add(a.shape)
          if len(shapes) > 1:
              raise ValueError('array shape mismatch, even after squeezing')
  
      if len(shapes) > 1:
          raise ValueError('array shape mismatch')
  
      shape = shapes.pop() if shapes else None
  
      if result is not None:
          if shape:
              return numpy.ones(shape, bool)
          else:
              return result
      elif arrays:
          sc = kwargs.get('sc', kwargs.get('shortcircuit', 0))
          if sc and numpy.prod(shape) >= sc:
              return short_circuit_or(arrays, shape)
          elif len(arrays) == 2:
              return numpy.logical_or(*arrays)
          else:
              return numpy.any(arrays, 0)
      else:
          return value