<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def peptide_mutation_interval( peptide_start_in_protein, peptide_length, mutation_start_in_protein, mutation_end_in_protein):
 """ Half-open interval of mutated residues in the peptide, determined from the mutation interval in the original protein sequence. Parameters peptide_start_in_protein : int Position of the first peptide residue within the protein (starting from 0) peptide_length : int mutation_start_in_protein : int Position of the first mutated residue starting from 0. In the case of a deletion, the position where the first residue had been. mutation_end_in_protein : int Position of the last mutated residue in the mutant protein. In the case of a deletion, this is equal to the mutation_start_in_protein. ) """

    if peptide_start_in_protein > mutation_end_in_protein:
        raise ValueError("Peptide starts after mutation")
    elif peptide_start_in_protein + peptide_length < mutation_start_in_protein:
        raise ValueError("Peptide ends before mutation")

    # need a half-open start/end interval
    peptide_mutation_start_offset = min(
        peptide_length,
        max(0, mutation_start_in_protein - peptide_start_in_protein))
    peptide_mutation_end_offset = min(
        peptide_length,
        max(0, mutation_end_in_protein - peptide_start_in_protein))
    return (peptide_mutation_start_offset, peptide_mutation_end_offset)