Skip to content

Instantly share code, notes, and snippets.

@5j9
Last active June 26, 2017 08:02
Show Gist options
  • Save 5j9/4fe0dbe7e6b3dac03871a7d53b5249d9 to your computer and use it in GitHub Desktop.
Save 5j9/4fe0dbe7e6b3dac03871a7d53b5249d9 to your computer and use it in GitHub Desktop.
Python's khayyam vs jdatetime performance comparison
from jdatetime import date as jd, GregorianToJalali, JalaliToGregorian
import khayyam, jdatetime
from khayyam import JalaliDate
from datetime import date
from timeit import timeit
print('khayyam.__version__:', khayyam.__version__)
print('jdatetime.__VERSION__:', jdatetime.__VERSION__)
print('Jalali to Gregorian:')
k = JalaliDate(1378, 4, 18).todate()
j = jd(1378, 4, 18).togregorian()
assert j == k
j = JalaliToGregorian(1378, 4, 18)
assert (j.gyear, j.gmonth, j.gday) == (k.year, k.month, k.day)
print(
'khayyam.JalaliDate:\t',
timeit(
'k=JalaliDate(1365, 3, 28).todate();k.year, k.month, k.day',
globals=globals(),
number=10**5
)
)
print(
'jdatetime.JalaliToGregorian:\t',
timeit(
'j=JalaliToGregorian(1378, 4, 18);j.gyear, j.gmonth, j.gday',
globals=globals(),
number=10**5
)
)
print('Gregorian to Jalali:')
g = date(1999, 7, 9)
k = JalaliDate(g)
j = GregorianToJalali(1999, 7, 9)
assert (j.jyear, j.jmonth, j.jday) == (k.year, k.month, k.day)
print(
'khayyam.JalaliDate:\t',
timeit(
'k=JalaliDate(g);k.year, k.month, k.day',
globals=globals(),
number=10**5
)
)
print(
'jdatetime.JalaliToGregorian:\t',
timeit(
'j=GregorianToJalali(1999, 7, 9);j.jyear, j.jmonth, j.jday',
globals=globals(),
number=10**5
)
)
@5j9
Copy link
Author

5j9 commented Jun 26, 2017

Running on windows 10:

UserWarning: The C extension is not available. Switching to fallback python pure algorithms,so it's about 1000X slower than C implementation of the algorithms.
  "The C extension is not available. Switching to fallback python pure algorithms,"
khayyam.__version__: 3.0.17
jdatetime.__VERSION__: 1.8.2
Jalali to Gregorian:
khayyam.JalaliDate:	 0.5471591733963693
jdatetime.JalaliToGregorian:	 0.3917446026621805
Gregorian to Jalali:
khayyam.JalaliDate:	 0.755406203627667
jdatetime.JalaliToGregorian:	 0.29677489602069285

@5j9
Copy link
Author

5j9 commented Jun 26, 2017

Running on linux (the C extension of khayyam is installed):

khayyam.__version__: 3.0.17
jdatetime.__VERSION__: 1.8.2
Jalali to Gregorian:
khayyam.JalaliDate:      0.7837266639689915
jdatetime.JalaliToGregorian:     1.0818211230216548
Gregorian to Jalali:
khayyam.JalaliDate:      0.5886695209774189
jdatetime.JalaliToGregorian:     0.9146455099689774

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment