Returns the number of exact anniversaries if start and finish represent an anniversary.
    
    ie.. 
    
    exact_anniversaries(DATE_FREQUENCY_MONTHLY, 10, date(2012, 2, 10), date(2012, 3, 9)) returns 1
    exact_anniversaries(DATE_FREQUENCY_MONTHLY, 10, date(2012, 2, 10), date(2012, 4, 9)) returns 2

def exact_anniversaries(frequency, anniversary, start, finish):
    """
    Returns the number of exact anniversaries if start and finish represent an anniversary.
    
    ie.. 
    
    exact_anniversaries(DATE_FREQUENCY_MONTHLY, 10, date(2012, 2, 10), date(2012, 3, 9)) returns 1
    exact_anniversaries(DATE_FREQUENCY_MONTHLY, 10, date(2012, 2, 10), date(2012, 4, 9)) returns 2
    """
    if frequency != DATE_FREQUENCY_MONTHLY:
        raise DateFrequencyError("Only monthly date frequency is supported - not '%s'" % (frequency))
    
    if start.day != anniversary:
        return False

    periods = 0
    current = start
    while current <= finish:
        period_end = current + relativedelta(months=+1, days=-1)
        if period_end <= finish:
            periods += 1
        else:
            return False
        current = current + relativedelta(months=+1)
    return periods