code: def apply_boundary_conditions(self, **kwargs):
          
          polarval = kwargs[self._polar_angle]
          azval = kwargs[self._azimuthal_angle]
          # constrain each angle to its domain
          polarval = self._polardist._domain.apply_conditions(polarval)
          azval = self._azimuthaldist._domain.apply_conditions(azval)
          # apply any other boundary conditions
          polarval = self._bounds[self._polar_angle].apply_conditions(polarval)
          azval = self._bounds[self._azimuthal_angle].apply_conditions(azval)
          return {self._polar_angle: polarval, self._azimuthal_angle: azval}
docs: Maps the given values to be within the domain of the azimuthal and
          polar angles, before applying any other boundary conditions.
  
          Parameters
          ----------
          \**kwargs :
              The keyword args must include values for both the azimuthal and
              polar angle, using the names they were initilialized with. For
              example, if `polar_angle='theta'` and `azimuthal_angle=`phi`, then
              the keyword args must be `theta={val1}, phi={val2}`.
  
          Returns
          -------
          dict
              A dictionary of the parameter names and the conditioned values.