docs: def find_gene_by_name(self, gene_name: str) -> Gene:
          """ 
          Find and return a gene in the influence graph with the given name.
          Raise an AttributeError if there is no gene in the graph with the given name.
          """
          for gene in self.genes:
              if gene.name == gene_name:
                  return gene
          raise AttributeError(f'gene "{gene_name}" does not exist')