<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def synsets(lemma,pos=None):
 """Returns all synset objects which have lemma as one of the variant literals and fixed pos, if provided. Notes ----- Uses lazy initialization - parses only those synsets which are not yet initialized, others are fetched from a dictionary. Parameters lemma : str Lemma of the synset. pos : str, optional Part-of-speech specification of the searched synsets, defaults to None. Returns ------- list of Synsets Synsets which contain `lemma` and of which part-of-speech is `pos`, if specified. Empty list, if no match was found. """


    def _get_synset_idxes(lemma,pos):
        line_prefix_regexp = "%s:%s:(.*)"%(lemma,pos if pos else "\w+") 
        line_prefix = re.compile(line_prefix_regexp)

        idxes = []

        with codecs.open(_LIT_POS_FILE,'rb', 'utf-8') as fin:
            for line in fin:
                result = line_prefix.match(line)
                if result:
                    res_indices = [int(x) for x in result.group(1).split(' ')]
                    idxes.extend(res_indices)
                    
        LEM_POS_2_SS_IDX[lemma][pos].extend(idxes)
        return sorted(idxes)

    synset_idxes = None

    if lemma in LEM_POS_2_SS_IDX:
        if pos in LEM_POS_2_SS_IDX[lemma]:
            synset_idxes = LEM_POS_2_SS_IDX[lemma][pos]
        else:
            synset_idxes = [idx for pos in LEM_POS_2_SS_IDX[lemma] for idx in LEM_POS_2_SS_IDX[lemma][pos]]
    if not synset_idxes:
        synset_idxes = _get_synset_idxes(lemma,pos)

    if len(synset_idxes) == 0:
        return []

    stored_synsets = [SYNSETS_DICT[synset_idxes[i]] for i in range(len(synset_idxes)) if synset_idxes[i] in SYNSETS_DICT]
    unstored_synset_idxes = [synset_idxes[i] for i in range(len(synset_idxes)) if synset_idxes[i] not in SYNSETS_DICT]

    synset_offsets = _get_synset_offsets(unstored_synset_idxes)
    synsets = _get_synsets(synset_offsets)
    
    return stored_synsets + synsets