nodes: 0, module; 1, function_definition; 2, function_name:describe_features; 3, parameters; 4, block; 5, identifier:self; 6, identifier:traj; 7, expression_statement; 8, expression_statement; 9, expression_statement; 10, return_statement; 11, comment:"""Generic method for describing features.
  
          Parameters
          ----------
          traj : mdtraj.Trajectory
              Trajectory to use
  
          Returns
          -------
          feature_descs : list of dict
              Dictionary describing each feature with the following information
              about the atoms participating in each feature
                  - resnames: unique names of residues
                  - atominds: the four atom indicies
                  - resseqs: unique residue sequence ids (not necessarily
                    0-indexed)
                  - resids: unique residue ids (0-indexed)
                  - featurizer: Featurizer name
                  - featuregroup: Other information
  
          Notes
          -------
          Method resorts to returning N/A for everything if describe_features in not
          implemented in the sub_class
          """; 12, assignment; 13, assignment; 14, call; 15, identifier:n_f; 16, subscript; 17, identifier:zippy; 18, call; 19, identifier:dict_maker; 20, argument_list; 21, attribute; 22, integer:1; 23, identifier:zip; 24, argument_list; 25, identifier:zippy; 26, call; 27, identifier:shape; 28, call; 29, call; 30, call; 31, call; 32, attribute; 33, argument_list; 34, attribute; 35, argument_list; 36, attribute; 37, argument_list; 38, attribute; 39, argument_list; 40, attribute; 41, argument_list; 42, identifier:self; 43, identifier:partial_transform; 44, identifier:traj; 45, identifier:itertools; 46, identifier:repeat; 47, string:"N/A"; 48, identifier:n_f; 49, identifier:itertools; 50, identifier:repeat; 51, string:"N/A"; 52, identifier:n_f; 53, identifier:itertools; 54, identifier:repeat; 55, string:"N/A"; 56, identifier:n_f; 57, identifier:itertools; 58, identifier:repeat; 59, tuple; 60, identifier:n_f; 61, string:"N/A"; 62, string:"N/A"; 63, string:"N/A"; 64, string:"N/A"
code: def describe_features(self, traj):
          """Generic method for describing features.
  
          Parameters
          ----------
          traj : mdtraj.Trajectory
              Trajectory to use
  
          Returns
          -------
          feature_descs : list of dict
              Dictionary describing each feature with the following information
              about the atoms participating in each feature
                  - resnames: unique names of residues
                  - atominds: the four atom indicies
                  - resseqs: unique residue sequence ids (not necessarily
                    0-indexed)
                  - resids: unique residue ids (0-indexed)
                  - featurizer: Featurizer name
                  - featuregroup: Other information
  
          Notes
          -------
          Method resorts to returning N/A for everything if describe_features in not
          implemented in the sub_class
          """
          n_f = self.partial_transform(traj).shape[1]
          zippy=zip(itertools.repeat("N/A", n_f),
                    itertools.repeat("N/A", n_f),
                    itertools.repeat("N/A", n_f),
                    itertools.repeat(("N/A","N/A","N/A","N/A"), n_f))
  
          return dict_maker(zippy)