def extend(self, slot): from MeterPosition import MeterPosition self.totalScore = None self.numSlots += 1 extendedParses = [self] # positions containing just the slot sPos = MeterPosition(self.meter, 's') sPos.append(slot) wPos = MeterPosition(self.meter, 'w') wPos.append(slot) if len(self.positions) == 0: wParse = copy(self) self.positions.append(sPos) wParse.positions.append(wPos) extendedParses.append(wParse) else: lastPos = self.positions[-1] if lastPos.meterVal == 's': if len(lastPos.slots) < self.meter.maxS() and not slot.issplit: sParse = copy(self) # parse with extended final 's' position sParse.positions[-1].append(slot) extendedParses.append(sParse) self.positions.append(wPos) else: if len(lastPos.slots) < self.meter.maxW() and not slot.issplit: wParse = copy(self) # parse with extended final 'w' position wParse.positions[-1].append(slot) extendedParses.append(wParse) self.positions.append(sPos) # assign violation scores for the (completed) penultimate position ## EXTRAMETRICAL? pos_i=len(self.positions)-2 for constraint in self.constraints: vScore = constraint.violationScore(self.positions[-2], pos_i=pos_i,slot_i=self.numSlots-1,num_slots=self.totalSlots,all_positions=self.positions,parse=self) if vScore == "*": self.constraintScores[constraint] = "*" else: self.constraintScores[constraint] += vScore if self.numSlots == self.totalSlots: # assign violation scores for the (completed) ultimate position for parse in extendedParses: for constraint in self.constraints: vScore = constraint.violationScore(parse.positions[-1], pos_i=len(parse.positions)-1,slot_i=self.numSlots-1,num_slots=self.totalSlots,all_positions=parse.positions,parse=parse) if vScore == "*": parse.constraintScores[constraint] = "*" else: parse.constraintScores[constraint] += vScore return extendedParses
def extend(self, slot): from MeterPosition import MeterPosition self.totalScore = None self.numSlots += 1 extendedParses = [self] # positions containing just the slot sPos = MeterPosition(self.meter, 's') sPos.append(slot) wPos = MeterPosition(self.meter, 'w') wPos.append(slot) if len(self.positions) == 0: wParse = copy(self) self.positions.append(sPos) wParse.positions.append(wPos) extendedParses.append(wParse) else: lastPos = self.positions[-1] if lastPos.meterVal == 's': if len(lastPos.slots) < self.meter.maxS() and not slot.issplit: sParse = copy( self) # parse with extended final 's' position sParse.positions[-1].append(slot) extendedParses.append(sParse) self.positions.append(wPos) else: if len(lastPos.slots) < self.meter.maxW() and not slot.issplit: wParse = copy( self) # parse with extended final 'w' position wParse.positions[-1].append(slot) extendedParses.append(wParse) self.positions.append(sPos) # assign violation scores for the (completed) penultimate position for constraint in self.constraints: vScore = constraint.violationScore(self.positions[-2]) if vScore == "*": self.constraintScores[constraint] = "*" else: self.constraintScores[constraint] += vScore if self.numSlots == self.totalSlots: # assign violation scores for the (completed) ultimate position for parse in extendedParses: for constraint in self.constraints: vScore = constraint.violationScore(parse.positions[-1]) if vScore == "*": parse.constraintScores[constraint] = "*" else: parse.constraintScores[constraint] += vScore return extendedParses
def extend(self, slot): #logging.debug('>> extending self (%s) with slot (%s)',self,slot) from MeterPosition import MeterPosition self.totalScore = None self.numSlots += 1 extendedParses = [self] # positions containing just the slot sPos = MeterPosition(self.meter, 's') sPos.append(slot) wPos = MeterPosition(self.meter, 'w') wPos.append(slot) if len(self.positions) == 0: wParse = copy(self) self.positions.append(sPos) wParse.positions.append(wPos) extendedParses.append(wParse) else: lastPos = self.positions[-1] if lastPos.meterVal == 's': if len(lastPos.slots) < self.meter.maxS() and not slot.issplit: sParse = copy( self) # parse with extended final 's' position sParse.positions[-1].append(slot) extendedParses.append(sParse) self.positions.append(wPos) else: if len(lastPos.slots) < self.meter.maxW() and not slot.issplit: wParse = copy( self) # parse with extended final 'w' position wParse.positions[-1].append(slot) extendedParses.append(wParse) self.positions.append(sPos) # assign violation scores for the (completed) penultimate position ## EXTRAMETRICAL? pos_i = len(self.positions) - 2 for constraint in self.constraints: vScore = constraint.violationScore( self.positions[-2], pos_i=pos_i, slot_i=self.numSlots - 1, num_slots=self.totalSlots, all_positions=self.positions, parse=self) if vScore == "*": self.constraintScores[constraint] = "*" else: self.constraintScores[constraint] += vScore if self.numSlots == self.totalSlots: # assign violation scores for the (completed) ultimate position for parse in extendedParses: for constraint in self.constraints: vScore = constraint.violationScore( parse.positions[-1], pos_i=len(parse.positions) - 1, slot_i=self.numSlots - 1, num_slots=self.totalSlots, all_positions=parse.positions, parse=parse) if vScore == "*": parse.constraintScores[constraint] = "*" else: parse.constraintScores[constraint] += vScore #logging.debug('>> self extended to be (%s) with extendedParses (%s)',self,extendedParses) return extendedParses