'In addition to the fields in ScoreBase, arguments include:
:param raw_earned: Raw points earned on this problem
:type raw_earned: int|float|None
:param raw_possible: Raw points possible to earn on this problem
:type raw_possible: int|float|None
:param weighted_earned: Weighted value of the points earned
:type weighted_earned: int|float|None
:param weighted_possible: Weighted possible points on this problem
:type weighted_possible: int|float|None
:param weight: Weight of this problem
:type weight: int|float|None'

@contract
def __init__(self, raw_earned, raw_possible, weighted_earned, weighted_possible, weight, *args, **kwargs):

    super(ProblemScore, self).__init__(*args, **kwargs)
    self.raw_earned = (float(raw_earned) if (raw_earned is not None) else None)
    self.raw_possible = (float(raw_possible) if (raw_possible is not None) else None)
    self.earned = (float(weighted_earned) if (weighted_earned is not None) else None)
    self.possible = (float(weighted_possible) if (weighted_possible is not None) else None)
    self.weight = weight
