Ejemplo n.º 1
0
    def add_element(self, elt_match):
        number, name, info, base_value, bonus, goe, goes, extra, points = elt_match.groups(
        )
        number = int(number)
        base_value = float_of(base_value)
        bonus = bonus != ''
        goe = float_of(goe)

        # Split out individual judges' GOEs
        goe_re = re.compile('(-?\d|-)')
        goe_match = goe_re.findall(goes)
        if not goe_match:
            raise Exception(goes)

        if self._is_zeroed_element(base_value):
            goes = [0.00 for _ in xrange(len(goe_match))]
            parsed_goes = goes
        else:
            goes, parsed_goes = self._parse_goes(goe_match)

        if not self.pre10 and extra and self._is_first_elt_of_segment():
            self.mistakes.append('Extra Judges: ' + extra)

        points = float_of(points)
        self.elements.append(
            Element(number, name, info, base_value, bonus, goe, goes,
                    parsed_goes, points))
Ejemplo n.º 2
0
    def __init__(self, url, season, event, discipline, segment, skater, rank,
                 starting_number, total_score, tes, pcs, deductions):
        self.url = url
        self.season = season
        self.event = event
        self.discipline = discipline
        self.segment = segment
        self.skater = skater
        self.rank = int(rank)
        try:
            self.starting_number = int(starting_number)
        except:
            self.starting_number = 0
        self.tes = float_of(tes)
        self.pcs = float_of(pcs)
        self.total_deductions = float_of(deductions)
        self.total_score = float_of(total_score)
        self.base_value = 0.00

        self.elements = []
        self.components = []
        self.deductions = {}

        self.extra_judges = 0
        self.mistakes = []
        self.pre10 = int(self.season.champ_year) <= 2010
Ejemplo n.º 3
0
    def add_component(self, component_match):
        name, factor, scores, points = component_match.groups()
        factor = float_of(factor)
        comp_mark_re = re.compile('(\d?\d.\d\d|-)\s*')
        comp_match = comp_mark_re.findall(scores)
        if not comp_match:
            raise Exception(scores)
        scores, parsed_scores = self._parse_components(comp_match)

        points = float_of(points)
        self.components.append(
            ProgramComponent(name.strip(), factor, scores, parsed_scores,
                             points))
Ejemplo n.º 4
0
    def add_deduction(self, deductions):
        for deduction in deductions:
            if ':' in deduction:
                reason, value = deduction.split(':')
            else:
                reason, value = deduction.split()
            fall_re = re.compile('(-\d.\d\d)\s*(\(\d\))')
            if fall_re.match(value):
                value, num_falls = fall_re.match(value).groups()
                reason += num_falls
            value = float_of(value)
            if value > 0.:  # Sometimes deductions are captured as positive.
                value = -value

            # Ignore deductions of zero value.
            if not self._is_close(0.00, value):
                self.deductions[reason.strip()] = value
Ejemplo n.º 5
0
 def _parse_components(self, comp_match):
     """When a judge is removed, the component mark becomes 0.00 or -."""
     scores = []
     parsed_scores = []
     extra_judges = 0
     for score_str in comp_match:
         try:
             score = float_of(score_str)
             if self._is_close(0.00, score):
                 extra_judges += 1
                 scores.append('-')
             else:
                 scores.append(score)
                 parsed_scores.append(score)
         except:
             extra_judges += 1
             scores.append('-')
     self._check(self.extra_judges, extra_judges,
                 'pcs extra judges = tes extra judges')
     return scores, parsed_scores
Ejemplo n.º 6
0
 def aggregate_pcs(self, pcs):
     self._check(float_of(pcs), self.pcs, 'two summary pcs match')
     self._check_pcs()
Ejemplo n.º 7
0
    def read_from_csv(self):
        if not os.path.isdir(self.directory):
            self.write_to_csv()
            return

        for fname in os.listdir(self.directory):
            with open(self.directory + '/' + fname) as csvfile:
                reader = csv.reader(csvfile)

                num_judges = int(reader.next()[0])

                reader.next()  # Skip labels row

                rank, name, nation, starting_number, total_score, tes, pcs, total_deductions = reader.next(
                )
                skater = Skater(name.strip(), nation, self.discipline)
                scorecard = Scorecard(self.url, self.season, self.event,
                                      self.discipline, self, skater, rank,
                                      starting_number, total_score, tes, pcs,
                                      total_deductions)

                reader.next()  # Skip elements label row
                elt_row = reader.next()
                while elt_row[0].isdigit():
                    number = int(elt_row[0])
                    name = elt_row[1]
                    info = elt_row[2]
                    base_value = float_of(elt_row[3])
                    if elt_row[4].lower() == 'true':
                        bonus = True
                    elif elt_row[4].lower() == 'false':
                        bonus = False
                    else:
                        print skater, number, self, elt_row[4]
                    goe = float_of(elt_row[5])
                    goes = []
                    parsed_goes = []
                    for mark in elt_row[6:6 + self.num_judges]:
                        if mark == '-':
                            goes.append(mark)
                        else:
                            goes.append(float_of(mark))
                            parsed_goes.append(float_of(mark))
                    points = float_of(elt_row[-1])
                    scorecard.elements.append(
                        Element(number, name, info, base_value, bonus, goe,
                                goes, parsed_goes, points))
                    elt_row = reader.next()
                scorecard.base_value = float_of(elt_row[3])
                scorecard.tes = float_of(elt_row[-1])

                reader.next()  # Skip PCS label row
                comp_row = reader.next()
                while comp_row[1]:
                    name = comp_row[1]
                    factor = float_of(comp_row[5])
                    scores = []
                    parsed_scores = []
                    for score in comp_row[6:6 + self.num_judges]:
                        if score == '-':
                            scores.append(score)
                        else:
                            scores.append(float_of(score))
                            parsed_scores.append(float_of(score))
                    points = float_of(comp_row[-1])
                    scorecard.components.append(
                        ProgramComponent(name.strip(), factor, scores,
                                         parsed_scores, points))
                    comp_row = reader.next()
                scorecard.pcs = float_of(comp_row[-1])

                for deduction_row in reader:
                    _, reason, value = deduction_row
                    scorecard.deductions[reason] = float_of(value)

                self.scorecards.append(scorecard)
        self.scorecards.sort(key=lambda scorecard: scorecard.rank)