Releases the reservation of *reserver* against *pins*.  This is
        typically called during :meth:`~gpiozero.Device.close` to clean up
        reservations taken during construction. Releasing a reservation that is
        not currently held will be silently ignored (to permit clean-up after
        failed / partial construction).

def release_pins(self, reserver, *pins):
        """
        Releases the reservation of *reserver* against *pins*.  This is
        typically called during :meth:`~gpiozero.Device.close` to clean up
        reservations taken during construction. Releasing a reservation that is
        not currently held will be silently ignored (to permit clean-up after
        failed / partial construction).
        """
        with self._res_lock:
            for pin in pins:
                self._reservations[pin] = [
                    ref for ref in self._reservations[pin]
                    if ref() not in (reserver, None) # may as well clean up dead refs
                    ]