code: def fail(self):
          
          if self.failed is True:
              raise AttributeError("Cannot fail {} - it has already failed.".format(self))
          else:
              self.failed = True
              self.time_of_death = timenow()
              self.network.calculate_full()
  
              for v in self.vectors():
                  v.fail()
              for i in self.infos():
                  i.fail()
              for t in self.transmissions(direction="all"):
                  t.fail()
              for t in self.transformations():
                  t.fail()
docs: Fail a node, setting its status to "failed".
  
          Also fails all vectors that connect to or from the node.
          You cannot fail a node that has already failed, but you
          can fail a dead node.
  
          Set node.failed to True and :attr:`~dallinger.models.Node.time_of_death`
          to now. Instruct all not-failed vectors connected to this node, infos
          made by this node, transmissions to or from this node and
          transformations made by this node to fail.