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 evaluation_function(
      self, *recommendations: ng.p.Parameter
  ) -> float:
      assert (
          len(recommendations) == 1
      ), "Should not be a pareto set for a singleobjective function"
      x = recommendations[0].value
      loss = self.function(x)
      assert isinstance(loss, float)
      base.update_leaderboard(
          f'arcoating,{self.parametrization.dimension},{self._descriptors["d_ar"]}',
          loss,
          x,
          verbose=True,
      )
      return loss
  
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 3 for calling the ARCoating obj's underlying member method code with example usage: obj.evaluation_function() and returns: loss