docs: def cluster_seqs(seqs,
                   neighbor_join=False,
                   params={},
                   add_seq_names=True,
                   WorkingDir=tempfile.gettempdir(),
                   SuppressStderr=None,
                   SuppressStdout=None,
                   max_chars=1000000,
                   max_hours=1.0,
                   constructor=PhyloNode,
                   clean_up=True
                   ):
      """Muscle cluster list of sequences.
  
      seqs: either file name or list of sequence objects or list of strings or
          single multiline string containing sequences.
  
      Addl docs coming soon
      """
      num_seqs = len(seqs)
      if num_seqs < 2:
          raise ValueError, "Muscle requres 2 or more sequences to cluster."
  
  
      num_chars = sum(map(len, seqs))
      if num_chars > max_chars:
          params["-maxiters"] = 2
          params["-diags1"] = True
          params["-sv"] = True
          #params["-distance1"] = "kmer6_6"
          #params["-distance1"] = "kmer20_3"
          #params["-distance1"] = "kbit20_3"
          print "lots of chars, using fast align", num_chars
  
  
      params["-maxhours"] = max_hours
      #params["-maxiters"] = 10
  
      #cluster_type = "upgmb"
      #if neighbor_join:
      #    cluster_type = "neighborjoining"
  
      params["-clusteronly"] = True
      params["-tree1"] = get_tmp_filename(WorkingDir)
  
      muscle_res = muscle_seqs(seqs,
                   params=params,
                   add_seq_names=add_seq_names,
                   WorkingDir=WorkingDir,
                   SuppressStderr=SuppressStderr,
                   SuppressStdout=SuppressStdout)
  
      tree = DndParser(muscle_res["Tree1Out"], constructor=constructor)
  
      if clean_up:
          muscle_res.cleanUp()
      return tree