// Compute the accrued interest sensitivity on a given period by approximation
        private static PointSensitivityBuilder approximatedInterestSensitivity(OvernightIndexObservation observation, LocalDate endDate, OvernightIndexRates rates)
        {
            DayCount dayCount = observation.Index.DayCount;
            double   remainingFixingAccrualFactor = dayCount.yearFraction(observation.EffectiveDate, endDate);
            double   forwardRate = rates.periodRate(observation, endDate);
            PointSensitivityBuilder forwardRateSensitivity = rates.periodRatePointSensitivity(observation, endDate);
            double rateExp = 1.0 + forwardRate * remainingFixingAccrualFactor;

            forwardRateSensitivity = forwardRateSensitivity.multipliedBy(remainingFixingAccrualFactor / rateExp);
            return(forwardRateSensitivity);
        }
 // Composition - forward part in non-cutoff period; past/valuation date case dealt with in previous methods
 internal ObjDoublePair <PointSensitivityBuilder> compositionFactorAndSensitivityNonCutoff()
 {
     if (!nextFixing.isAfter(lastFixingNonCutoff))
     {
         OvernightIndexObservation obs = computation.observeOn(nextFixing);
         LocalDate startDate           = obs.EffectiveDate;
         LocalDate endDate             = computation.calculateMaturityFromFixing(lastFixingNonCutoff);
         double    accrualFactor       = dayCount.yearFraction(startDate, endDate);
         double    rate = rates.periodRate(obs, endDate);
         PointSensitivityBuilder rateSensitivity = rates.periodRatePointSensitivity(obs, endDate);
         rateSensitivity = rateSensitivity.multipliedBy(accrualFactor);
         return(ObjDoublePair.of(rateSensitivity, 1.0d + accrualFactor * rate));
     }
     return(ObjDoublePair.of(PointSensitivityBuilder.none(), 1.0d));
 }