code: def _check_curtailment_target(curtailment, curtailment_target,
                                curtailment_key):
      
      if not (abs(curtailment.sum(axis=1) - curtailment_target) < 1e-1).all():
          message = 'Curtailment target not met for {}.'.format(curtailment_key)
          logging.error(message)
          raise TypeError(message)
docs: Raises an error if curtailment target was not met in any time step.
  
      Parameters
      -----------
      curtailment : :pandas:`pandas:DataFrame<dataframe>`
          Dataframe containing the curtailment in kW per generator and time step.
          Index is a :pandas:`pandas.DatetimeIndex<datetimeindex>`, columns are
          the generator representatives.
      curtailment_target : :pandas:`pandas.Series<series>`
          The curtailment in kW that was to be distributed amongst the
          generators. Index of the series is a
          :pandas:`pandas.DatetimeIndex<datetimeindex>`.
      curtailment_key : :obj:`str` or :obj:`tuple` with :obj:`str`
          The technology and weather cell ID if :obj:`tuple` or only
          the technology if :obj:`str` the curtailment was specified for.