class_docstr: Parameters
  ----------
  nbslab: int
      number of pixel layers
  d_ar: int
      depth of the structure in nm
  
  Notes
  -----
  - This is the minimization of reflexion, i.e. this is an anti-reflexive coating problem in normale incidence.
  - Typical parameters (nbslab, d_ar) = (10, 400) or (35, 700) for instance
   d_ar / nbslab must be at least 10
  - the function domain is R^nbslab. The values are then transformed to [epmin, epmax]^nbslab
  
  Credit
  ------
  This function is based on a code and ideas by Emmanuel Centeno and Antoine Moreau,
  University Clermont Auvergne, CNRS, SIGMA Clermont, Institut Pascal
code: def __init__(
      self,
      nbslab: int = 10,
      d_ar: int = 400,
      bounding_method: str = "bouncing",
  ) -> None:
      # Wave length range
      self.lambdas = np.arange(
          400, 900, 5
      )  # lambda values from min to max, in nm
      # AR parameters
      self.dpix = d_ar / nbslab  # width in pixels
      assert self.dpix >= 10  # dpix < 10 is physically pointless
      # input and ouptut permittivities
      self.ep0 = 1
      self.epf = 9
      self.epmin = 1
      init = (self.epmin + self.epf) / 2.0 * np.ones((nbslab,))
      sigma = (self.epf - self.ep0) / 6
      array = ng.p.Array(
          init=init,
          mutable_sigma=True,
      )
      array.set_mutation(sigma=sigma)
      array.set_bounds(
          self.epmin,
          self.epf,
          method=bounding_method,
          full_range_sampling=True,
      )
      array = ng.ops.mutations.Crossover(0)(array).set_name("")
      super().__init__(self._get_minimum_average_reflexion, array)
  
file_path: nevergrad/nevergrad/functions/arcoating/core.py
imports: from math import sqrt, tan, pi
  import numpy
  import nevergrad.common.typing
  import nevergrad
  from ..None import base
label_desc: Use image node_id 1 to create a new ARCoating object from inherited base classes: base with example: obj = ARCoating(nbslab, d_ar, bounding_method)