docs: def _expandSaamaWithTud( clauseTokens, clauseID, foundChains ):
      ''' 
           Meetod, mis määrab spetsiifilised rektsiooniseosed: täiendab 'saama'-verbiga lõppevaid 
          verbijadasid, lisades (v6imalusel) nende l6ppu 'tud'-infiniitverbi 
          (nt. sai tehtud, sai käidud ujumas);
           Vastavalt leitud laiendustele t2iendab andmeid sisendlistis foundChains;
      '''
      verbTud   = WordTemplate({POSTAG:'V', FORM:'^(tud|dud)$'})
      verb      = WordTemplate({POSTAG:'V'})
      verbOlema = WordTemplate({POSTAG:'V', ROOT:'^(ole)$'})
      for verbObj in foundChains:
          # Leiame, kas fraas kuulub antud osalausesse ning on laiendatav
          if _isVerbExpansible(verbObj, clauseTokens, clauseID):
              lastVerbWID = verbObj[PHRASE][-1]
              lastToken = [token for token in clauseTokens if token[WORD_ID] == lastVerbWID]
              lastIndex = [i for i in range(len(clauseTokens)) if clauseTokens[i][WORD_ID] == lastVerbWID]
              lastToken = lastToken[0]
              lastIndex = lastIndex[0]
              mainVerb  = [analysis[ROOT] for analysis in verb.matchingAnalyses(lastToken)]
              mainVerbLemma = mainVerb[0]
              # Leiame, kas tegemist on 'saama' verbiga
              if mainVerbLemma == 'saa':
                  #
                  #    Saama + 'tud', lubame eraldada verbiahelana vaid siis, kui:
                  #     *) 'tud' on osalause l6pus ning vahel pole punktuatsioonim2rke, nt:
                  #          Kord sai_0 laadalt isegi aprikoosipuu koduaeda viidud_0 .
                  #     *) 'saama' on osalause l6pus ning vahetult eelneb 'tud', nt:
                  #          Ja et see vajaduse korral avalikustatud_1 saaks_1 .
                  #
                  expansion = None
                  if not _isClauseFinal(lastVerbWID, clauseTokens ):
                      for i in range(lastIndex + 1, len(clauseTokens)):
                          token = clauseTokens[i]
                          tokenWID = token[WORD_ID]
                          if verbTud.matches(token) and _isClauseFinal(tokenWID, clauseTokens ) and \
                             not _isSeparatedByPossibleClauseBreakers( clauseTokens, verbObj[PHRASE][-1], tokenWID, True, True, False):
                              expansion = token
                              break
                  elif lastIndex-1 > -1:
                      if verbTud.matches(clauseTokens[lastIndex-1]):
                          expansion = clauseTokens[lastIndex-1]
                  if expansion:
                      tokenWID = expansion[WORD_ID]
                      verbObj[PHRASE].append( tokenWID )
                      verbObj[ANALYSIS_IDS].append( _getMatchingAnalysisIDs( expansion, verbTud ) )
                      if verbOlema.matches(expansion):
                          verbObj[PATTERN].append('ole')
                      else:
                          verbObj[PATTERN].append('verb')