From bba47e960b64a06714f04b105650b22eed91b7de Mon Sep 17 00:00:00 2001 From: Benny Malengier Date: Wed, 7 Nov 2012 20:18:16 +0000 Subject: [PATCH] python 3.2 support: calendar computation with new division svn: r20635 --- gramps/gen/lib/calendar.py | 94 ++++++++++++++++++------------------ gramps/gen/lib/date.py | 14 +++--- gramps/gen/updatecallback.py | 4 +- 3 files changed, 56 insertions(+), 56 deletions(-) diff --git a/gramps/gen/lib/calendar.py b/gramps/gen/lib/calendar.py index 7cabaa45f..7d963fa2d 100644 --- a/gramps/gen/lib/calendar.py +++ b/gramps/gen/lib/calendar.py @@ -23,7 +23,7 @@ """ Provide calendar to sdn (serial date number) conversion. """ - +from __future__ import division #------------------------------------------------------------------------- # # Python modules @@ -110,9 +110,9 @@ def _tishri_molad(input_day): loop below will correct for any error in this estimate. """ - metonic_cycle = (input_day + 310) / 6940 + metonic_cycle = (input_day + 310) // 6940 - # Calculate the time of the starting molad for this metonic cycle. */ + # Calculate the time of the starting molad for this metonic cycle. (molad_day, molad_halakim) = _molad_of_metonic_cycle(metonic_cycle) @@ -124,7 +124,7 @@ def _tishri_molad(input_day): while molad_day < (input_day - 6940 + 310): metonic_cycle = metonic_cycle + 1 molad_halakim = molad_halakim + _HBR_HALAKIM_PER_METONIC_CYCLE - molad_day = molad_day + ( molad_halakim / _HBR_HALAKIM_PER_DAY) + molad_day = molad_day + ( molad_halakim // _HBR_HALAKIM_PER_DAY) molad_halakim = molad_halakim % _HBR_HALAKIM_PER_DAY # Find the molad of Tishri closest to this date. @@ -135,7 +135,7 @@ def _tishri_molad(input_day): molad_halakim = molad_halakim + (_HBR_HALAKIM_PER_LUNAR_CYCLE * _HBR_MONTHS_PER_YEAR[metonic_year]) - molad_day = molad_day + (molad_halakim / _HBR_HALAKIM_PER_DAY) + molad_day = molad_day + (molad_halakim // _HBR_HALAKIM_PER_DAY) molad_halakim = molad_halakim % _HBR_HALAKIM_PER_DAY else: metonic_year += 1 @@ -160,10 +160,10 @@ def _molad_of_metonic_cycle(metonic_cycle): # upper 16 bits of the quotient will be in d2 and the lower 16 bits # will be in d1. - d2 = r2 / _HBR_HALAKIM_PER_DAY + d2 = r2 // _HBR_HALAKIM_PER_DAY r2 = r2 - (d2 * _HBR_HALAKIM_PER_DAY) r1 = (r2 << 16) | (r1 & 0xFFFF) - d1 = r1 / _HBR_HALAKIM_PER_DAY + d1 = r1 // _HBR_HALAKIM_PER_DAY r1 = r1 - ( d1 * _HBR_HALAKIM_PER_DAY) molad_day = (d2 << 16) | d1 @@ -175,13 +175,13 @@ def _start_of_year(year): """ Calculate the start of the year. """ - metonic_cycle = (year - 1) / 19 + metonic_cycle = (year - 1) // 19 metonic_year = (year - 1) % 19 (molad_day, molad_halakim) = _molad_of_metonic_cycle(metonic_cycle) molad_halakim = molad_halakim + (_HBR_HALAKIM_PER_LUNAR_CYCLE * _HBR_YEAR_OFFSET[metonic_year]) - molad_day = molad_day + (molad_halakim / _HBR_HALAKIM_PER_DAY) + molad_day = molad_day + (molad_halakim // _HBR_HALAKIM_PER_DAY) molad_halakim = molad_halakim % _HBR_HALAKIM_PER_DAY pTishri1 = _tishri1(metonic_year, molad_day, molad_halakim) @@ -209,7 +209,7 @@ def hebrew_sdn(year, month, day): # Find the end of the year. molad_halakim = molad_halakim + (_HBR_HALAKIM_PER_LUNAR_CYCLE *_HBR_MONTHS_PER_YEAR[metonic_year]) - molad_day = molad_day + (molad_halakim / _HBR_HALAKIM_PER_DAY) + molad_day = molad_day + (molad_halakim // _HBR_HALAKIM_PER_DAY) molad_halakim = molad_halakim % _HBR_HALAKIM_PER_DAY tishri1_after = _tishri1((metonic_year + 1) % 19, molad_day, molad_halakim) @@ -282,11 +282,11 @@ def hebrew_ymd(sdn): return (year, month, day) # We need the length of the year to figure this out, so find - # Tishri 1 of the next year. */ + # Tishri 1 of the next year. halakim = halakim + (_HBR_HALAKIM_PER_LUNAR_CYCLE * _HBR_MONTHS_PER_YEAR[metonic_year]) - day = day + (halakim / _HBR_HALAKIM_PER_DAY) + day = day + (halakim // _HBR_HALAKIM_PER_DAY) halakim = halakim % _HBR_HALAKIM_PER_DAY tishri1_after = _tishri1((metonic_year + 1) % 19, day, halakim) else: @@ -383,8 +383,8 @@ def julian_sdn(year, month, day): month += 9 year -= 1 - return (year * _JLN_DAYS_PER_4_YEARS)/4 \ - + (month * _JLN_DAYS_PER_5_MONTHS+2)/5 \ + return (year * _JLN_DAYS_PER_4_YEARS) // 4 \ + + (month * _JLN_DAYS_PER_5_MONTHS + 2) // 5 \ + day - _JLN_SDN_OFFSET def julian_ymd(sdn): @@ -392,13 +392,13 @@ def julian_ymd(sdn): temp = (sdn + _JLN_SDN_OFFSET) * 4 - 1 # Calculate the year and day of year (1 <= day_of_year <= 366) - year = temp / _JLN_DAYS_PER_4_YEARS - day_of_year = (temp % _JLN_DAYS_PER_4_YEARS) / 4 + 1 + year = temp // _JLN_DAYS_PER_4_YEARS + day_of_year = (temp % _JLN_DAYS_PER_4_YEARS) // 4 + 1 # Calculate the month and day of month temp = day_of_year * 5 - 3 - month = temp / _JLN_DAYS_PER_5_MONTHS - day = (temp % _JLN_DAYS_PER_5_MONTHS) / 5 + 1 + month = temp // _JLN_DAYS_PER_5_MONTHS + day = (temp % _JLN_DAYS_PER_5_MONTHS) // 5 + 1 # Convert to the normal beginning of the year if month < 10: @@ -428,9 +428,9 @@ def gregorian_sdn(year, month, day): month += 9 year -= 1 - return(((year / 100) * _GRG_DAYS_PER_400_YEARS) / 4 - + ((year % 100) * _GRG_DAYS_PER_4_YEARS) / 4 - + (month * _GRG_DAYS_PER_5_MONTHS + 2) / 5 + return(((year // 100) * _GRG_DAYS_PER_400_YEARS) // 4 + + ((year % 100) * _GRG_DAYS_PER_4_YEARS) // 4 + + (month * _GRG_DAYS_PER_5_MONTHS + 2) // 5 + day - _GRG_SDN_OFFSET ) @@ -439,17 +439,17 @@ def gregorian_ymd(sdn): temp = (_GRG_SDN_OFFSET + sdn) * 4 - 1 # Calculate the century (year/100) - century = temp / _GRG_DAYS_PER_400_YEARS + century = temp // _GRG_DAYS_PER_400_YEARS # Calculate the year and day of year (1 <= day_of_year <= 366) - temp = ((temp % _GRG_DAYS_PER_400_YEARS) / 4) * 4 + 3 - year = (century * 100) + (temp / _GRG_DAYS_PER_4_YEARS) - day_of_year = (temp % _GRG_DAYS_PER_4_YEARS) / 4 + 1 + temp = ((temp % _GRG_DAYS_PER_400_YEARS) // 4) * 4 + 3 + year = (century * 100) + (temp // _GRG_DAYS_PER_4_YEARS) + day_of_year = (temp % _GRG_DAYS_PER_4_YEARS) // 4 + 1 # Calculate the month and day of month temp = day_of_year * 5 - 3 - month = temp / _GRG_DAYS_PER_5_MONTHS - day = (temp % _GRG_DAYS_PER_5_MONTHS) / 5 + 1 + month = temp // _GRG_DAYS_PER_5_MONTHS + day = (temp % _GRG_DAYS_PER_5_MONTHS) // 5 + 1 # Convert to the normal beginning of the year if month < 10 : @@ -466,7 +466,7 @@ def gregorian_ymd(sdn): def french_sdn(year, month, day): """Convert a French Republican Calendar date to an SDN number.""" - sdn = (year*_FR_DAYS_PER_4_YEARS)/4 + \ + sdn = (year*_FR_DAYS_PER_4_YEARS) // 4 + \ (month-1)*_FR_DAYS_PER_MONTH + \ day + _FR_SDN_OFFSET # do not convert dates before 22.9.1792 or after 1.1.1806 @@ -480,10 +480,10 @@ def french_ymd(sdn): # only between 22.9.1792 and 1.1.1806 if sdn >= 2375840 and sdn <= 2380688: temp = (sdn-_FR_SDN_OFFSET)*4 - 1 - year = temp/_FR_DAYS_PER_4_YEARS - day_of_year = (temp%_FR_DAYS_PER_4_YEARS)/4 - month = (day_of_year/_FR_DAYS_PER_MONTH)+1 - day = (day_of_year%_FR_DAYS_PER_MONTH)+1 + year = temp // _FR_DAYS_PER_4_YEARS + day_of_year = (temp % _FR_DAYS_PER_4_YEARS) // 4 + month = (day_of_year // _FR_DAYS_PER_MONTH) + 1 + day = (day_of_year % _FR_DAYS_PER_MONTH) + 1 return (year, month, day) else: return gregorian_ymd(sdn) @@ -501,31 +501,31 @@ def persian_sdn(year, month, day): v1 = (month - 1) * 31 else: v1 = ((month - 1) * 30) + 6 - v2 = math.floor(((epyear * 682) - 110) / 2816) + v2 = ((epyear * 682) - 110) // 2816 v3 = (epyear - 1) * 365 + day - v4 = math.floor(epbase / 2820) * 1029983 + v4 = (epbase // 2820) * 1029983 return int(math.ceil(v1 + v2 + v3 + v4 + _PRS_EPOCH - 1)) def persian_ymd(sdn): """Convert an SDN number to a Persian calendar date.""" - sdn = math.floor(sdn) + 0.5 + sdn = math.floor(sdn) + 0.5 #float - depoch = sdn - 2121446 - cycle = math.floor(depoch / 1029983) - cyear = depoch % 1029983 + depoch = sdn - 2121446 #float + cycle = math.floor(depoch / 1029983) #int + cyear = depoch % 1029983 #int if cyear == 1029982: ycycle = 2820 else: - aux1 = math.floor(cyear / 366) - aux2 = cyear % 366 - ycycle = math.floor(((2134*aux1)+(2816*aux2)+2815)/1028522) + aux1 + 1 + aux1 = cyear // 366 #int + aux2 = cyear % 366 #int + ycycle = (((2134*aux1)+(2816*aux2)+2815) // 1028522) + aux1 + 1 year = ycycle + (2820 * cycle) + 474 if year <= 0: year = year - 1 - yday = sdn - persian_sdn(year, 1, 1) + 1 + yday = sdn - persian_sdn(year, 1, 1) + 1 #float ! if yday < 186: month = math.ceil(yday / 31) else: @@ -537,15 +537,15 @@ def islamic_sdn(year, month, day): """Convert an Islamic date to an SDN number.""" v1 = math.ceil(29.5 * (month - 1)) v2 = (year - 1) * 354 - v3 = math.floor((3 + (11 *year)) / 30) + v3 = math.floor((3 + (11 *year)) // 30) return int(math.ceil((day + v1 + v2 + v3 + _ISM_EPOCH) - 1)) def islamic_ymd(sdn): """Convert an SDN number to an Islamic calendar date.""" sdn = math.floor(sdn) + 0.5 - year = int(math.floor(((30*(sdn-_ISM_EPOCH))+10646)/10631)) - month = int(min(12, math.ceil((sdn-(29+islamic_sdn(year, 1, 1)))/29.5) + 1)) + year = int(math.floor(((30*(sdn-_ISM_EPOCH))+10646) / 10631)) + month = int(min(12, math.ceil((sdn-(29+islamic_sdn(year, 1, 1))) / 29.5) + 1)) day = int((sdn - islamic_sdn(year, month, 1)) + 1) return (year, month, day) @@ -553,7 +553,7 @@ def swedish_sdn(year, month, day): """Convert a Swedish date to an SDN number.""" datum = (year, month, day) # Swedish Calendar - if (1700,3,1) <= datum <= (1712,2,30): + if (1700, 3, 1) <= datum <= (1712, 2, 30): return julian_sdn(year, month, day) -1 # Gregorian Calendar (1753-03-01) elif (1753, 3, 1) <= datum: @@ -564,7 +564,7 @@ def swedish_sdn(year, month, day): def swedish_ymd(sdn): """Convert an SDN number to a Swedish calendar date.""" if sdn == 2346425: - return (1712,2,30) + return (1712, 2, 30) # Swedish Calendar elif 2342042 <= sdn < 2346425: return julian_ymd(sdn+1) diff --git a/gramps/gen/lib/date.py b/gramps/gen/lib/date.py index 4d2e60763..f1074c073 100644 --- a/gramps/gen/lib/date.py +++ b/gramps/gen/lib/date.py @@ -28,7 +28,7 @@ # Python modules # #------------------------------------------------------------------------ -from __future__ import unicode_literals +from __future__ import unicode_literals, division from ..ggettext import sgettext as _ from ..ggettext import ngettext @@ -432,8 +432,8 @@ class Span(object): # Date1 - tuple -> Date2 if date1.get_new_year() or date2.get_new_year(): days = date1.sortval - date2.sortval - years = days/365 - months = (days - years * 365) / 30 + years = days // 365 + months = (days - years * 365) // 30 days = (days - years * 365) - months * 30 if self.negative: return (-years, -months, -days) @@ -458,10 +458,10 @@ class Span(object): months = d1[1] - d2[1] years = d1[0] - d2[0] if days > 31: - months += days / 31 + months += days // 31 days = days % 31 if months > 12: - years += months / 12 + years += months // 12 months = months % 12 # estimate: (years, months, days) # Check transitivity: @@ -1249,10 +1249,10 @@ class Date(object): dv[Date._POS_MON] = 12 dv[Date._POS_YR] -= 1 elif dv[Date._POS_MON] < 0: # subtraction - dv[Date._POS_YR] -= int((-dv[Date._POS_MON]) / 12) + 1 + dv[Date._POS_YR] -= int((-dv[Date._POS_MON]) // 12) + 1 dv[Date._POS_MON] = (dv[Date._POS_MON] % 12) elif dv[Date._POS_MON] > 12 or dv[Date._POS_MON] < 1: - dv[Date._POS_YR] += int(dv[Date._POS_MON] / 12) + dv[Date._POS_YR] += int(dv[Date._POS_MON] // 12) dv[Date._POS_MON] = dv[Date._POS_MON] % 12 self.dateval = tuple(dv) self._calc_sort_value() diff --git a/gramps/gen/updatecallback.py b/gramps/gen/updatecallback.py index 6c77b56a3..b53b353fa 100644 --- a/gramps/gen/updatecallback.py +++ b/gramps/gen/updatecallback.py @@ -27,7 +27,7 @@ The goal is to have this module not depend on any other gramps module. That way, e.g. database classes can safely depend on that without other GRAMPS baggage. """ - +from __future__ import division #------------------------------------------------------------------------- # # Python modules @@ -79,7 +79,7 @@ class UpdateCallback(object): self.count += 1 if not count: count = self.count - newval = int(100 * count/float(self.total)) + newval = int(100 * count/self.total) newtime = time.time() time_has_come = self.interval and (newtime-self.oldtime>self.interval) value_changed = newval!=self.oldval