code: def initialize_allowed_states(tree, feature, states):
      
      allowed_states_feature = get_personalized_feature_name(feature, ALLOWED_STATES)
      state2index = dict(zip(states, range(len(states))))
  
      for node in tree.traverse():
          node_states = getattr(node, feature, set())
          if not node_states:
              allowed_states = np.ones(len(state2index), dtype=np.int)
          else:
              allowed_states = np.zeros(len(state2index), dtype=np.int)
              for state in node_states:
                  allowed_states[state2index[state]] = 1
          node.add_feature(allowed_states_feature, allowed_states)
docs: Initializes the allowed state arrays for tips based on their states given by the feature.
  
      :param tree: tree for which the tip likelihoods are to be initialized
      :type tree: ete3.Tree
      :param feature: feature in which the tip states are stored
          (the value could be None for a missing state or list if multiple stated are possible)
      :type feature: str
      :param states: ordered array of states.
      :type states: numpy.array
      :return: void, adds the get_personalised_feature_name(feature, ALLOWED_STATES) feature to tree tips.