Coverage for moptipy / operators / intspace / op0_random.py: 94%

16 statements  

« prev     ^ index     » next       coverage.py v7.13.0, created at 2025-12-15 11:18 +0000

1""" 

2A nullary operator filling an integer list with random values. 

3 

4>>> from moptipy.utils.nputils import rand_generator 

5>>> gen = rand_generator(12) 

6 

7>>> space = IntSpace(4, -2, 2) 

8>>> op = Op0Random(space) 

9>>> xx = space.create() 

10 

11>>> op.op0(gen, xx) 

12>>> xx 

13array([-1, 2, 2, 1], dtype=int8) 

14>>> op.op0(gen, xx) 

15>>> xx 

16array([-2, -2, -1, -1], dtype=int8) 

17>>> op.op0(gen, xx) 

18>>> xx 

19array([ 1, 0, -2, 2], dtype=int8) 

20 

21>>> space = IntSpace(5, 12000, 20000) 

22>>> op = Op0Random(space) 

23>>> xx = space.create() 

24 

25>>> op.op0(gen, xx) 

26>>> xx 

27array([15207, 19574, 18014, 12515, 14406], dtype=int16) 

28>>> op.op0(gen, xx) 

29>>> xx 

30array([16080, 13596, 13434, 14148, 16655], dtype=int16) 

31""" 

32 

33 

34from typing import Final 

35 

36import numpy as np 

37from numpy.random import Generator 

38from pycommons.types import type_error 

39 

40from moptipy.api.operators import Op0 

41from moptipy.spaces.intspace import IntSpace 

42 

43 

44class Op0Random(Op0): 

45 """Fill a bit string with random values.""" 

46 

47 def __init__(self, space: IntSpace) -> None: 

48 """ 

49 Create the Nullary Integer-Space operator. 

50 

51 :param space: the integer space 

52 """ 

53 if not isinstance(space, IntSpace): 

54 raise type_error(space, "space", IntSpace) 

55 #: the inclusive lower bound 

56 self.__lb: Final[int] = space.min_value 

57 #: the exclusive upper bound 

58 self.__ub: Final[int] = space.max_value + 1 

59 

60 def op0(self, random: Generator, dest: np.ndarray) -> None: 

61 """ 

62 Fill the string `dest` with random values. 

63 

64 :param random: the random number generator 

65 :param dest: the bit string to fill. Afterward, its contents will 

66 be random. 

67 """ 

68 np.copyto(dest, random.integers( 

69 self.__lb, self.__ub, dest.shape, dest.dtype)) 

70 

71 def __str__(self) -> str: 

72 """ 

73 Get the name of this operator. 

74 

75 :return: "uniform" 

76 """ 

77 return "uniform"