<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def reduce_permits(self, reduction):
 """ Shrinks the number of available permits by the indicated reduction. This method differs from acquire in that it does not block waiting for permits to become available. :param reduction: (int), the number of permits to remove. """

        check_not_negative(reduction, "Reduction cannot be negative!")
        return self._encode_invoke(semaphore_reduce_permits_codec, reduction=reduction)