lisa.fuzz.GenMonad#

class lisa.fuzz.GenMonad(f, name=None)[source]#

Bases: StateDiscard, Loggable

Random generator monad inspired by Haskell’s QuickCheck.

Attributes

__slots__ inherited

Properties

f inherited

State-transforming function of type state -> (value, new_state).

logger inherited

Convenience short-hand for self.get_logger().

Methods

bind()

Takes a monadic value Monad[A], a function that takes an A and returns Monad[B], and returns a Monad[B].

make_state()

Initialize the RNG state with either an rng or a seed.

__await__() inherited

__call__() inherited

Allow calling monadic values to run the state-transforming function, with the initial state provided by State.make_state().

do() inherited

Decorate a coroutine function so that awaits gains the powers of the monad.

from_f() inherited

Build a monadic value out of a state modifying function of type state -> (value, new_state).

get_logger() inherited

Provides a logging.Logger named after cls.

get_state() inherited

Returns a monadic value returning the current state.

hoist() inherited

Lift a monadic value m by one level in the stack, i.e.: Given a stack for 3 transformers T1(T2(T3(Identity))), a value m = T2(Identity).pure(42). we have T2.hoist(m, T3.pure) == T2(T3(Identity)).pure(42).

join() inherited

Takes a monadic value Monad[Monad[A]], and returns a Monad[A].

lift() inherited

Lift a monadic value m by one level in the stack, i.e.: Given a stack for 3 transformers T1(T2(T3(Identity))), a value m = T3(Identity).pure(42). we have T2.lift(m) == T2(T3(Identity)).pure(42).

log_locals() inherited

Debugging aid: log the local variables of the calling function.

map() inherited

Takes a monadic value Monad[A], a function that takes an A and returns B, and returns a Monad[B].

modify_state() inherited

Returns a monadic value applying f on the current state, setting the new state and then returning it.

pure() inherited

Turn a regular value of type A into a monadic value of type Monad[A].

set_state() inherited

Returns a monadic value setting the current state and returning the old one.

Attributes#

GenMonad.__slots__ = ('_f',)#

Properties#

property GenMonad.f#

Inherited property, see lisa.monad.State.f

State-transforming function of type state -> (value, new_state).

property GenMonad.logger#

Inherited property, see lisa.utils.Loggable.logger

Convenience short-hand for self.get_logger().

Methods#

GenMonad.bind(continuation)#

Takes a monadic value Monad[A], a function that takes an A and returns Monad[B], and returns a Monad[B].

Note

It is allowed to return a _TailCall instance.

classmethod GenMonad.make_state(*, rng=None, seed=None)[source]#

Initialize the RNG state with either an rng or a seed.

Parameters:
GenMonad.__await__()#

Inherited method, see lisa.monad.Monad.__await__()

GenMonad.__call__(*args, **kwargs)#

Inherited method, see lisa.monad.StateDiscard.__call__()

Allow calling monadic values to run the state-transforming function, with the initial state provided by State.make_state().

classmethod GenMonad.do(f)#

Inherited method, see lisa.monad.MonadTrans.do()

Decorate a coroutine function so that awaits gains the powers of the monad.

classmethod GenMonad.from_f(f)#

Inherited method, see lisa.monad.State.from_f()

Build a monadic value out of a state modifying function of type state -> (value, new_state).

classmethod GenMonad.get_logger(suffix=None)#

Inherited method, see lisa.utils.Loggable.get_logger()

Provides a logging.Logger named after cls.

classmethod GenMonad.get_state()#

Inherited method, see lisa.monad.State.get_state()

Returns a monadic value returning the current state.

classmethod GenMonad.hoist(self, nat)#

Inherited method, see lisa.monad.State.hoist()

Lift a monadic value m by one level in the stack, i.e.: Given a stack for 3 transformers T1(T2(T3(Identity))), a value m = T2(Identity).pure(42). we have T2.hoist(m, T3.pure) == T2(T3(Identity)).pure(42).

classmethod GenMonad.join(self)#

Inherited method, see lisa.monad.Monad.join()

Takes a monadic value Monad[Monad[A]], and returns a Monad[A].

classmethod GenMonad.lift(m)#

Inherited method, see lisa.monad.State.lift()

Lift a monadic value m by one level in the stack, i.e.: Given a stack for 3 transformers T1(T2(T3(Identity))), a value m = T3(Identity).pure(42). we have T2.lift(m) == T2(T3(Identity)).pure(42).

classmethod GenMonad.log_locals(var_names=None, level='debug')#

Inherited method, see lisa.utils.Loggable.log_locals()

Debugging aid: log the local variables of the calling function.

classmethod GenMonad.map(self, f)#

Inherited method, see lisa.monad.Monad.map()

Takes a monadic value Monad[A], a function that takes an A and returns B, and returns a Monad[B].

classmethod GenMonad.modify_state(f)#

Inherited method, see lisa.monad.State.modify_state()

Returns a monadic value applying f on the current state, setting the new state and then returning it.

classmethod GenMonad.pure(x)#

Inherited method, see lisa.monad.MonadTrans.pure()

Turn a regular value of type A into a monadic value of type Monad[A].

classmethod GenMonad.set_state(new)#

Inherited method, see lisa.monad.State.set_state()

Returns a monadic value setting the current state and returning the old one.