class_docstr: Artificial function object. This allows the creation of functions with different
  dimension and structure to be used for benchmarking in many different settings.
  
  Parameters
  ----------
  name: str
      name of the underlying function to use (like "sphere" for instance). If a wrong
      name is provided, an error is raised with all existing names.
  block_dimension: int
      the dimension on which the underlying function will be applied.
  num_blocks: int
      the number of blocks of size "block_dimension" on which the underlying function
      will be applied. The number of useful dimension is therefore num_blocks * core_dimension
  useless_variables: int
      the number of additional variables which have no impact on the core function.
      The full dimension of the function is therefore useless_variables + num_blocks * core_dimension
  noise_level: float
      noise level for the additive noise: noise_level * N(0, 1, size=1) * [f(x + N(0, 1, size=dim)) - f(x)]
  noise_dissymmetry: bool
      True if we dissymmetrize the model of noise
  rotation: bool
      whether the block space should be rotated (random rotation)
  hashing: bool
      whether the input data should be hashed. In this case, the function expects an array of size 1 with
      string as element.
  aggregator: str
      how to aggregate the multiple block outputs
  bounded: bool
      bound the search domain to [-5,5]
  
  Example
  -------
  >>> func = ArtificialFunction("sphere", 5, noise_level=.1)
  >>> x = [1, 2, 1, 0, .5]
  >>> func(x)  # returns a float
  >>> func(x)  # returns a different float since the function is noisy
  >>> func.oracle_call(x)   # returns a float
  >>> func.oracle_call(x)   # returns the same float (no noise for oracles + sphere function is deterministic)
  >>> func2 = ArtificialFunction("sphere", 5, noise_level=.1)
  >>> func2.oracle_call(x)   # returns a different float than before, because a random translation is applied
  
  Note
  ----
  - The full dimension of the function is available through the dimension attribute.
    Its value is useless_variables + num_blocks * block_dimension
  - The blocks are chosen with random sorted indices (blocks do not overlap)
  - A random translation is always applied to the function at initialization, so that
    instantiating twice the functions will give 2 different functions (unless you use
    seeding)
  - the noise formula is: noise_level * N(0, 1) * (f(x + N(0, 1)) - f(x))
class_docstr_tok: ["Artificial","function","object",".","This","allows","the","creation","of","functions","with","different","dimension","and","structure","to","be","used","for","benchmarking","in","many","different","settings",".","Parameters","--","--","--","--","--","name",":","str","name","of","the","underlying","function","to","use","(","like","``","sphere","''","for","instance",")",".","If","a","wrong","name","is","provided",",","an","error","is","raised","with","all","existing","names",".","block_dimension",":","int","the","dimension","on","which","the","underlying","function","will","be","applied",".","num_blocks",":","int","the","number","of","blocks","of","size","``","block_dimension","''","on","which","the","underlying","function","will","be","applied",".","The","number","of","useful","dimension","is","therefore","num_blocks","*","core_dimension","useless_variables",":","int","the","number","of","additional","variables","which","have","no","impact","on","the","core","function",".","The","full","dimension","of","the","function","is","therefore","useless_variables","+","num_blocks","*","core_dimension","noise_level",":","float","noise","level","for","the","additive","noise",":","noise_level","*","N","(","0",",","1",",","size=1",")","*","[","f","(","x","+","N","(","0",",","1",",","size=dim",")",")","-","f","(","x",")","]","noise_dissymmetry",":","bool","True","if","we","dissymmetrize","the","model","of","noise","rotation",":","bool","whether","the","block","space","should","be","rotated","(","random","rotation",")","hashing",":","bool","whether","the","input","data","should","be","hashed",".","In","this","case",",","the","function","expects","an","array","of","size","1","with","string","as","element",".","aggregator",":","str","how","to","aggregate","the","multiple","block","outputs","bounded",":","bool","bound","the","search","domain","to","[","-5,5","]","Example","--","--","--","-",">",">",">","func","=","ArtificialFunction","(","``","sphere","''",",","5",",","noise_level=.1",")",">",">",">","x","=","[","1",",","2",",","1",",","0",",",".5","]",">",">",">","func","(","x",")","#","returns","a","float",">",">",">","func","(","x",")","#","returns","a","different","float","since","the","function","is","noisy",">",">",">","func.oracle_call","(","x",")","#","returns","a","float",">",">",">","func.oracle_call","(","x",")","#","returns","the","same","float","(","no","noise","for","oracles","+","sphere","function","is","deterministic",")",">",">",">","func2","=","ArtificialFunction","(","``","sphere","''",",","5",",","noise_level=.1",")",">",">",">","func2.oracle_call","(","x",")","#","returns","a","different","float","than","before",",","because","a","random","translation","is","applied","Note","--","--","-","The","full","dimension","of","the","function","is","available","through","the","dimension","attribute",".","Its","value","is","useless_variables","+","num_blocks","*","block_dimension","-","The","blocks","are","chosen","with","random","sorted","indices","(","blocks","do","not","overlap",")","-","A","random","translation","is","always","applied","to","the","function","at","initialization",",","so","that","instantiating","twice","the","functions","will","give","2","different","functions","(","unless","you","use","seeding",")","-","the","noise","formula","is",":","noise_level","*","N","(","0",",","1",")","*","(","f","(","x","+","N","(","0",",","1",")",")","-","f","(","x",")",")"]
code: def _transform(self, x: tp.ArrayLike) -> np.ndarray:
      data = self.transform_var.process(x)
      return np.array(data)
  
imports: import hashlib
  import itertools
  import numpy
  import nevergrad
  from nevergrad.common import tools
  import nevergrad.common.typing
  from .base import ExperimentFunction
  from .pbt import PBT
  from .None import utils
  from .None import corefuncs
label_desc: Use image node_id 4 for calling the ArtificialFunction obj's underlying member method code with example usage: obj._transform(x) and returns: np