#| hide from __future__ import annotations import numpy as np from fastcore.test import * from nbdev.showdoc import * from nbdev.qmd import * def draw_n(n:int, # Number of cards to draw replace:bool=True # Draw with replacement? )->list: # List of cards "Draw `n` cards." #| echo: false #| output: asis print(div(DocmentTbl(draw_n)._repr_markdown_(), classes='py-2 px-3 mb-4 border rounded shadow-sm'.split())) def draw_n(n:int, replace:bool=True) -> Cards: """ Draw `n` cards. Parameters ---------- n Number of cards to draw replace Draw with replacement? Returns ------- cards List of cards """ def inc(x): return x + 1 test_eq(inc(3), 4) def divide(x, y): return x / y test_fail(lambda: divide(1, 0), contains="division by zero") class Color: def __init__(self, color): self.color = color def _repr_markdown_(self): style = f'background-color: {self.color}; width: 50px; height: 50px; margin: 10px' return f'
' Color('green') Color('blue') #| hide class Number: "A number." def __init__(self, num): self.num = num def __add__(self, other): "Sum of this and `other`." return Number(self.num + other.num) def __repr__(self): return f'Number({self.num})' #| eval: false show_doc(Number) Number(5) #| eval: false show_doc(Number.__add__) Number(3) + Number(4) def all(a, axis=None, out=None, keepdims=np._NoValue, *, where=np._NoValue): """ Test whether all array elements along a given axis evaluate to True. Parameters ---------- a : array_like Input array or object that can be converted to an array. axis : None or int or tuple of ints, optional Axis or axes along which a logical AND reduction is performed. The default (``axis=None``) is to perform a logical AND over all the dimensions of the input array. `axis` may be negative, in which case it counts from the last to the first axis. .. versionadded:: 1.7.0 If this is a tuple of ints, a reduction is performed on multiple axes, instead of a single axis or all the axes as before. out : ndarray, optional Alternate output array in which to place the result. It must have the same shape as the expected output and its type is preserved (e.g., if ``dtype(out)`` is float, the result will consist of 0.0's and 1.0's). See :ref:`ufuncs-output-type` for more details. keepdims : bool, optional If this is set to True, the axes which are reduced are left in the result as dimensions with size one. With this option, the result will broadcast correctly against the input array. If the default value is passed, then `keepdims` will not be passed through to the `all` method of sub-classes of `ndarray`, however any non-default value will be. If the sub-class' method does not implement `keepdims` any exceptions will be raised. where : array_like of bool, optional Elements to include in checking for all `True` values. See `~numpy.ufunc.reduce` for details. .. versionadded:: 1.20.0 Returns ------- all : ndarray, bool A new boolean or array is returned unless `out` is specified, in which case a reference to `out` is returned. See Also -------- ndarray.all : equivalent method any : Test whether any element along a given axis evaluates to True. Notes ----- Not a Number (NaN), positive infinity and negative infinity evaluate to `True` because these are not equal to zero. Examples -------- >>> np.all([[True,False],[True,True]]) False >>> np.all([[True,False],[True,True]], axis=0) array([ True, False]) >>> np.all([-1, 4, 5]) True >>> np.all([1.0, np.nan]) True >>> np.all([[True, True], [False, True]], where=[[True], [False]]) True >>> o=np.array(False) >>> z=np.all([-1, 4, 5], out=o) >>> id(z), id(o), z (28293632, 28293632, array(True)) # may vary """ ... #| eval: false def all(a, # Input array or object that can be converted to an array. axis:int|tuple|None=None, # Axis or axes along which a logical AND reduction is performed (default: all). out:np.ndarray|None=None, # Alternate output array in which to place the result. keepdims:bool=np._NoValue, # Leave reduced one-dimensional axes in the result? where=np._NoValue, # Elements to include in reduction. See `numpy.ufunc.reduce` for details. New in version 1.20.0. ) -> np.ndarray|bool: # A new boolean or array, or a reference to `out` if its specified. "Test whether all array elements along a given axis evaluate to `True`." ... show_doc(all) x = [[True,False],[True,True]] test_eq(np.all(x), False) test_eq(np.all(x, axis=0), [True,False]) test_eq(np.all(x, axis=-1), [False,True]) test_eq(np.all(x, axis=(0,1)), False) test_eq(np.all([-1, 1, -1.0, 1.0, np.nan, np.inf, -np.inf]), True) test_eq(np.all(x, where=[[False],[True]]), True) o = np.array(False) z = np.all([-1, 4, 5], out=o) test_is(z, o) test_eq(z, True) test_eq(np.all(x, axis=0, keepdims=True), [[True, False]]) # Note the nested list class MyArray(np.ndarray): def all(self, axis=None, out=None): ... y = MyArray((2,2)) y[:] = x np.all(y) # No TypeError since `keepdims` isn't passed test_fail(lambda: np.all(y, keepdims=True), contains="all() got an unexpected keyword argument 'keepdims'") test_eq(np.array(x).all(), np.all(x)) test_eq(np.any(x), True)