code: def c_to_n(self, c_interval):
          
  
          if self.cds_start_i is None:    # cds_start_i defined iff cds_end_i defined; see assertion above
              raise HGVSUsageError(
                  "CDS is undefined for {self.tx_ac}; cannot map from c. coordinate (non-coding transcript?)"
                  .format(self=self))
  
          # start
          if c_interval.start.datum == Datum.CDS_START and c_interval.start.base < 0:
              rs = c_interval.start.base + self.cds_start_i + 1
          elif c_interval.start.datum == Datum.CDS_START and c_interval.start.base > 0:
              rs = c_interval.start.base + self.cds_start_i
          elif c_interval.start.datum == Datum.CDS_END:
              rs = c_interval.start.base + self.cds_end_i
          # end
          if c_interval.end.datum == Datum.CDS_START and c_interval.end.base < 0:
              re = c_interval.end.base + self.cds_start_i + 1
          elif c_interval.end.datum == Datum.CDS_START and c_interval.end.base > 0:
              re = c_interval.end.base + self.cds_start_i
          elif c_interval.end.datum == Datum.CDS_END:
              re = c_interval.end.base + self.cds_end_i
  
          if rs <= 0 or re > self.tgt_len:
              raise HGVSError("The given coordinate is outside the bounds of the reference sequence.")
  
          n_interval = hgvs.location.BaseOffsetInterval(
              start=hgvs.location.BaseOffsetPosition(
                  base=rs, offset=c_interval.start.offset, datum=Datum.SEQ_START),
              end=hgvs.location.BaseOffsetPosition(
                  base=re, offset=c_interval.end.offset, datum=Datum.SEQ_START),
              uncertain=c_interval.uncertain)
          return n_interval
docs: convert a transcript CDS (c.) interval to a transcript cDNA (n.) interval