Skip to content

Commit

Permalink
fixed python 2/3 incompatibility with xrange
Browse files Browse the repository at this point in the history
  • Loading branch information
claesenm committed May 17, 2015
1 parent 8ce84b3 commit bb17928
Showing 1 changed file with 24 additions and 18 deletions.
42 changes: 24 additions & 18 deletions optunity/solvers/Sobol.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,12 @@
from .util import Solver, _copydoc, uniform_in_bounds
from . import util

try:
# Python 2
irange = irange
except NameError:
#Python 3
irange = range

# Parts of this implementation were obtained from here:
# obtained from http://people.sc.fsu.edu/~jburkardt/py_src/sobol/sobol.html
Expand Down Expand Up @@ -270,7 +276,7 @@ def i4_sobol_generate ( m, n, skip ):
"""

r = [Sobol.i4_sobol(m, seed)[0] for seed in xrange(skip, skip + n)]
r = [Sobol.i4_sobol(m, seed)[0] for seed in irange(skip, skip + n)]
return r

@staticmethod
Expand Down Expand Up @@ -321,7 +327,7 @@ def i4_sobol ( dim_num, seed ):
#
# Initialize (part of) V.
#
v = [[0] * dim_max for _ in xrange(log_max)]
v = [[0] * dim_max for _ in irange(log_max)]
v[0][0:40] = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
Expand Down Expand Up @@ -374,7 +380,7 @@ def i4_sobol ( dim_num, seed ):
# Initialize row 1 of V.
#
# v[0,0:maxcol] = 1
for i in xrange(maxcol):
for i in irange(maxcol):
v[i][0] = 1

#
Expand All @@ -391,7 +397,7 @@ def i4_sobol ( dim_num, seed ):
#
# Initialize the remaining rows of V.
#
for i in xrange(2 , dim_num+1):
for i in irange(2 , dim_num+1):
#
# The bits of the integer POLY(I) gives the form of polynomial I.
#
Expand All @@ -408,19 +414,19 @@ def i4_sobol ( dim_num, seed ):
# Expand this bit pattern to separate components of the logical array INCLUD.
#
j = poly[i-1]
includ = [0 for _ in xrange(m)]
for k in xrange(m, 0, -1):
includ = [0 for _ in irange(m)]
for k in irange(m, 0, -1):
j2 = math.floor ( j / 2. )
includ[k-1] = (j != 2 * j2 )
j = j2
#
# Calculate the remaining elements of row I as explained
# in Bratley and Fox, section 2.
#
for j in xrange( m+1, maxcol+1 ):
for j in irange( m+1, maxcol+1 ):
newv = v[j-m-1][i-1]
l = 1
for k in xrange(1, m+1):
for k in irange(1, m+1):
l = 2 * l
if ( includ[k-1] ):
newv = Sobol.bitwise_xor ( int(newv), int(l * v[j-k-1][i-1]) )
Expand All @@ -429,14 +435,14 @@ def i4_sobol ( dim_num, seed ):
# Multiply columns of V by appropriate power of 2.
#
l = 1
for j in xrange( maxcol-1, 0, -1):
for j in irange( maxcol-1, 0, -1):
l = 2 * l
v[j-1][0:dim_num] = map(lambda x: x * l, v[j-1][0:dim_num])
#
# RECIPD is 1/(common denominator of the elements in V).
#
recipd = 1.0 / ( 2 * l )
lastq = [0 for _ in xrange(dim_num)]
lastq = [0 for _ in irange(dim_num)]

seed = int(math.floor ( seed ))

Expand All @@ -445,7 +451,7 @@ def i4_sobol ( dim_num, seed ):

if ( seed == 0 ):
l = 1
lastq = [0 for _ in xrange(dim_num)]
lastq = [0 for _ in irange(dim_num)]

elif ( seed == seed_save + 1 ):
#
Expand All @@ -457,20 +463,20 @@ def i4_sobol ( dim_num, seed ):

seed_save = 0
l = 1
lastq = [0 for _ in xrange(dim_num)]
lastq = [0 for _ in irange(dim_num)]

for seed_temp in xrange( int(seed_save), int(seed)):
for seed_temp in irange( int(seed_save), int(seed)):
l = Sobol.i4_bit_lo0 ( seed_temp )
for i in xrange(1 , dim_num+1):
for i in irange(1 , dim_num+1):
lastq[i-1] = Sobol.bitwise_xor ( int(lastq[i-1]), int(v[l-1][i-1]) )

l = Sobol.i4_bit_lo0 ( seed )

elif ( seed_save + 1 < seed ):

for seed_temp in xrange( int(seed_save + 1), int(seed) ):
for seed_temp in irange( int(seed_save + 1), int(seed) ):
l = Sobol.i4_bit_lo0 ( seed_temp )
for i in xrange(1, dim_num+1):
for i in irange(1, dim_num+1):
lastq[i-1] = Sobol.bitwise_xor ( int(lastq[i-1]), int(v[l-1][i-1]) )

l = Sobol.i4_bit_lo0 ( seed )
Expand All @@ -482,8 +488,8 @@ def i4_sobol ( dim_num, seed ):
#
# Calculate the new components of QUASI.
#
quasi = [0 for _ in xrange(dim_num)]
for i in xrange( 1, dim_num+1):
quasi = [0 for _ in irange(dim_num)]
for i in irange( 1, dim_num+1):
quasi[i-1] = lastq[i-1] * recipd
lastq[i-1] = Sobol.bitwise_xor ( int(lastq[i-1]), int(v[l-1][i-1]) )

Expand Down

0 comments on commit bb17928

Please sign in to comment.