docs: def _satisfies_conditions( self, tree_node, **kwargs ):
          ''' Check whether given *tree_node* satisfies the conditions given
              as arguments in *kwargs*.
              
              By default (if no conditions are given in *kwargs*), returns 
              True.
              
              If there are multiple conditions listed  (e.g.  'label_regexp'
              and 'word_template'),  *True*  is returned only when the node 
              satisfies all the conditions.
              
              Following conditions are supported:
              -----------------------------------
              label : str
                  Syntactic label (e.g. '@SUBJ', '@OBJ' etc.) that the node 
                  must have within its analysis; If the node does not have the
                  label, the node will be discarded;
                  
              label_regexp : str
                  A regular expression pattern (as string) describing the 
                  syntactic label (e.g. '@SUBJ', '@OBJ' etc.) that the node 
                  must have within its analysis; 
                  If none of the node's labels matches the pattern, the node
                  will be discarded;
              
              word_template : estnltk.mw_verbs.utils.WordTemplate
                  A WordTemplate describing morphological constraints imposed
                  to the word of the node;
                  If the word's morphological features do not match the template, 
                  the node will be discarded;
              
          '''
          matches = []
          # A) Check syntactic label by matching a string
          syntactic_label = kwargs.get('label', None)
          if syntactic_label:
              matches.append( bool(tree_node.labels and syntactic_label in tree_node.labels) )
  
          # B) Check syntactic label by matching a regular expression
          synt_label_regexp = kwargs.get('label_regexp', None)
          if synt_label_regexp:
              if isinstance(synt_label_regexp, basestring):
                  # Compile the regexp (if it hasn't been compiled yet)
                  synt_label_regexp = re.compile(synt_label_regexp)
                  kwargs['label_regexp'] = synt_label_regexp
              if isinstance(synt_label_regexp, RE_TYPE):
                  # Apply the pre-compiled regexp
                  if tree_node.labels:
                      matches.append( any([synt_label_regexp.match(label) != None for label in tree_node.labels]) )
                  else:
                      matches.append( False )
  
          # C) Check whether the word token of the node matches a word template
          word_template = kwargs.get('word_template', None)
          if word_template:
              if isinstance(word_template, WordTemplate):
                  matches.append( word_template.matches( tree_node.token ) )
              else:
                  raise Exception('(!) Unexpected word_template. Should be from class WordTemplate.')
          return len(matches) == 0 or all(matches)