code: def _cartesian_product_of_every_states_of_each_genes(self) -> Tuple[Tuple[int, ...]]:
          
          if not self.genes:
              return () 
          return tuple(product(*[gene.states for gene in self.genes]))
docs: Private method which return the cartesian product of the states
          of the genes in the model. It represents all the possible state for a given model.
  
          Examples
          --------
  
          The model contains 2 genes: operon = {0, 1, 2}
                                      mucuB = {0, 1}
          Then this method returns ((0, 0), (0, 1), (1, 0), (1, 1), (2, 0), (2, 1))
          For reach tuple, the first element is the state of the operon gene, and the
          second element stands for the state of the mucuB gene.