Tails Installer's is_ISO_selected method is not a predicate
is_ISO_selected name suggests it’s a simple predicate but this method 1. checks if we need an ISO in the first place (which the name doesn’t convey); 2. has side effects (while a predicate must not). I think some refactoring is in order. From a caller’s PoV I would do:
if self.need_ISO() and not self.is_ISO_selected(): self.warn_ISO_not_selected()
… i.e. two predicates and a third method that does the side-effect.