iwopy 0.1.5__py3-none-any.whl → 0.1.8__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of iwopy might be problematic. Click here for more details.

@@ -0,0 +1,232 @@
1
+ import numpy as np
2
+ from scipy.optimize import minimize
3
+
4
+ from iwopy.core import Optimizer
5
+ from iwopy.core import SingleObjOptResults
6
+
7
+
8
+ class Optimizer_scipy(Optimizer):
9
+ """
10
+ Interface to the scipy optimizers.
11
+
12
+ Note that these solvers do not support
13
+ vectorized evaluation.
14
+
15
+ Parameters
16
+ ----------
17
+ problem : iwopy.Problem
18
+ The problem to optimize
19
+ scipy_pars : dict
20
+ Additional parameters for
21
+ scipy.optimze.minimize()
22
+ mem_size : int
23
+ The memory size, number of
24
+ stored obj, cons evaluations
25
+ kwargs : dict, optional
26
+ Additional parameters for base class
27
+
28
+ Attributes
29
+ ----------
30
+ scipy_pars : dict
31
+ Additional parameters for
32
+ scipy.optimze.minimize()
33
+ mem_size : int
34
+ The memory size, number of
35
+ stored obj, cons evaluations
36
+
37
+ """
38
+
39
+ def __init__(self, problem, scipy_pars={}, mem_size=100, **kwargs):
40
+ super().__init__(problem, **kwargs)
41
+ self.scipy_pars = scipy_pars
42
+ self.mem_size = mem_size
43
+ self._mem = None
44
+
45
+ def print_info(self):
46
+ """
47
+ Print solver info, called before solving
48
+ """
49
+ super().print_info()
50
+
51
+ if len(self.scipy_pars):
52
+ print("\nScipy parameters:")
53
+ print("-----------------")
54
+ for k, v in self.scipy_pars.items():
55
+ if isinstance(v, int) or isinstance(v, float) or isinstance(v, str):
56
+ print(f" {k}: {v}")
57
+
58
+ print()
59
+
60
+ def initialize(self, verbosity=1):
61
+ """
62
+ Initialize the object.
63
+
64
+ Parameters
65
+ ----------
66
+ verbosity : int
67
+ The verbosity level, 0 = silent
68
+
69
+ """
70
+
71
+ # Check objectives:
72
+ if self.problem.n_objectives > 1:
73
+ raise RuntimeError(
74
+ "Scipy minimize does not support multi-objective optimization."
75
+ )
76
+
77
+ # Define constraints:
78
+ cons = list()
79
+ for i in range(self.problem.n_constraints):
80
+ cons.append({"type": "ineq", "fun": self._constraints, "args": (i,)})
81
+ self.scipy_pars["constraints"] = cons
82
+
83
+ if verbosity:
84
+ print(f"Using optimizer memory, size: {self.mem_size}")
85
+ self._mem = {}
86
+
87
+ super().initialize(verbosity)
88
+
89
+ def _get_results(self, x):
90
+ """
91
+ Evaluate obj and cons
92
+
93
+ Parameters
94
+ ----------
95
+ x: numpy array
96
+ Array containing design variables
97
+
98
+ Returns
99
+ -------
100
+ objs : np.array
101
+ The objective function values, shape: (n_objectives,)
102
+ cons : np.array
103
+ The constraints values, shape: (n_constraints,)
104
+ prob_results : object
105
+ The problem results
106
+
107
+ """
108
+ key = tuple(x)
109
+ if key not in self._mem:
110
+
111
+ i0 = self.problem.n_vars_int
112
+ vars_int = x[:i0].astype(np.int32)
113
+ vars_float = x[i0:]
114
+
115
+ data = self.problem.evaluate_individual(
116
+ vars_int, vars_float, ret_prob_res=True
117
+ )
118
+
119
+ if len(self._mem) > self.mem_size:
120
+ key0 = next(iter(self._mem.keys()))
121
+ del self._mem[key0]
122
+
123
+ self._mem[key] = data
124
+
125
+ return self._mem[key]
126
+
127
+ def _objective(self, x):
128
+ """
129
+ Function which converts array from scipy
130
+ to readable variables for the problem and
131
+ evaluates the objective function.
132
+
133
+ Parameters
134
+ ----------
135
+ x: numpy array
136
+ Array containing design variables
137
+
138
+ Returns
139
+ -------
140
+ float:
141
+ Current objective function value
142
+
143
+
144
+ """
145
+ objs, __, __ = self._get_results(x)
146
+ return objs[0]
147
+
148
+ def _constraints(self, x, ci):
149
+ """
150
+ Function which converts array from scipy
151
+ to readable variables for the problem and
152
+ evaluates the constraints.
153
+
154
+ Parameters
155
+ ----------
156
+ x: numpy array
157
+ Array containing design variables
158
+ ci: int
159
+ Index for constraint component
160
+
161
+ Returns
162
+ -------
163
+ float:
164
+ Value of constraint component
165
+
166
+ """
167
+ __, cons, __ = self._get_results(x)
168
+ return cons[ci]
169
+
170
+ def solve(self, verbosity=1):
171
+ """
172
+ Run the optimization solver.
173
+
174
+ Parameters
175
+ ----------
176
+ verbosity : int
177
+ The verbosity level, 0 = silent
178
+
179
+ Returns
180
+ -------
181
+ results: iwopy.SingleObjOptResults
182
+ The optimization results object
183
+
184
+ """
185
+
186
+ # check problem initialization:
187
+ super().solve()
188
+
189
+ # Initial values:
190
+ x0 = np.array(self.problem.initial_values_int(), dtype=np.float64)
191
+ x0 = np.append(
192
+ x0, np.array(self.problem.initial_values_float(), dtype=np.float64)
193
+ )
194
+
195
+ # Find bounds:
196
+ mini = [
197
+ x if x != -self.problem.INT_INF else None
198
+ for x in self.problem.min_values_int()
199
+ ]
200
+ maxi = [
201
+ x if x != self.problem.INT_INF else None
202
+ for x in self.problem.max_values_int()
203
+ ]
204
+ bounds = [(mini[i], maxi[i]) for i in range(len(mini))]
205
+ minf = [x if x != -np.inf else None for x in self.problem.min_values_float()]
206
+ maxf = [x if x != np.inf else None for x in self.problem.max_values_float()]
207
+ bounds = [(minf[i], maxf[i]) for i in range(len(minf))]
208
+
209
+ # Run minimization:
210
+ results = minimize(self._objective, x0, bounds=bounds, **self.scipy_pars)
211
+
212
+ # final evaluation:
213
+ if results.success:
214
+
215
+ x = results.x
216
+ i0 = self.problem.n_vars_int
217
+ vars_int = x[:i0].astype(np.int32)
218
+ vars_float = x[i0:]
219
+ prob_res, objs, cons = self.problem.finalize_individual(
220
+ vars_int, vars_float, verbosity=verbosity
221
+ )
222
+
223
+ else:
224
+ prob_res = None
225
+ vars_int = None
226
+ vars_float = None
227
+ objs = None
228
+ cons = None
229
+
230
+ return SingleObjOptResults(
231
+ self.problem, results.success, vars_int, vars_float, objs, cons, prob_res
232
+ )
iwopy/utils/__init__.py CHANGED
@@ -1,2 +1,3 @@
1
1
  from .discretization import RegularDiscretizationGrid
2
2
  from .stdout import suppress_stdout
3
+ from .load import import_module
iwopy/utils/load.py ADDED
@@ -0,0 +1,31 @@
1
+ import importlib
2
+
3
+
4
+ def import_module(name, package=None, hint=None):
5
+ """
6
+ Imports a module dynamically.
7
+
8
+ Parameters
9
+ ----------
10
+ name: str
11
+ The module name
12
+ package: str, optional
13
+ The explicit package name, deduced from name
14
+ if not given
15
+ hint: str, optional
16
+ Installation advice, in case the import fails
17
+
18
+ Returns
19
+ -------
20
+ mdl: module
21
+ The imnported package
22
+
23
+ :group: utils
24
+
25
+ """
26
+ try:
27
+ return importlib.import_module(name, package)
28
+ except ModuleNotFoundError:
29
+ mdl = name if package is None else f"{package}.{name}"
30
+ hint = hint if hint is not None else f"pip install {name}"
31
+ raise ModuleNotFoundError(f"Module '{mdl}' not found, maybe try '{hint}'")
@@ -186,7 +186,7 @@ class DiscretizeRegGrid(LocalFD):
186
186
  f"Problem '{self.name}' cannot apply non-grid points to problem"
187
187
  )
188
188
 
189
- def evaluate_individual(self, vars_int, vars_float):
189
+ def evaluate_individual(self, vars_int, vars_float, ret_prob_res=False):
190
190
  """
191
191
  Evaluate a single individual of the problem.
192
192
 
@@ -196,6 +196,8 @@ class DiscretizeRegGrid(LocalFD):
196
196
  The integer variable values, shape: (n_vars_int,)
197
197
  vars_float : np.array
198
198
  The float variable values, shape: (n_vars_float,)
199
+ ret_prob_res : bool
200
+ Flag for additionally returning of problem results
199
201
 
200
202
  Returns
201
203
  -------
@@ -203,11 +205,13 @@ class DiscretizeRegGrid(LocalFD):
203
205
  The objective function values, shape: (n_objectives,)
204
206
  con : np.array
205
207
  The constraints values, shape: (n_constraints,)
208
+ prob_res : object, optional
209
+ The problem results
206
210
 
207
211
  """
208
212
  varsf = vars_float[self._vinds]
209
213
  if self.grid.is_gridpoint(varsf):
210
- return super().evaluate_individual(vars_int, vars_float)
214
+ return super().evaluate_individual(vars_int, vars_float, ret_prob_res)
211
215
 
212
216
  else:
213
217
  gpts, coeffs = self.grid.interpolation_coeffs_point(varsf)
@@ -216,16 +220,32 @@ class DiscretizeRegGrid(LocalFD):
216
220
  objs = np.zeros((n_gpts, self.n_objectives), dtype=np.float64)
217
221
  cons = np.zeros((n_gpts, self.n_constraints), dtype=np.float64)
218
222
 
223
+ res = [None for __ in range(n_gpts)]
219
224
  for gi, gp in enumerate(gpts):
220
225
  varsf = vars_float.copy()
221
226
  varsf[self._vinds] = gp
222
- objs[gi], cons[gi] = super().evaluate_individual(vars_int, varsf)
223
-
224
- return np.einsum("go,g->o", objs, coeffs), np.einsum(
225
- "gc,g->c", cons, coeffs
226
- )
227
+ if ret_prob_res:
228
+ objs[gi], cons[gi], res[gi] = super().evaluate_individual(
229
+ vars_int, varsf, ret_prob_res
230
+ )
231
+ else:
232
+ objs[gi], cons[gi] = super().evaluate_individual(
233
+ vars_int, varsf, ret_prob_res
234
+ )
235
+
236
+ if ret_prob_res:
237
+ return (
238
+ np.einsum("go,g->o", objs, coeffs),
239
+ np.einsum("gc,g->c", cons, coeffs),
240
+ self.prob_res_einsum_individual(res, coeffs),
241
+ )
242
+ else:
243
+ return (
244
+ np.einsum("go,g->o", objs, coeffs),
245
+ np.einsum("gc,g->c", cons, coeffs),
246
+ )
227
247
 
228
- def evaluate_population(self, vars_int, vars_float):
248
+ def evaluate_population(self, vars_int, vars_float, ret_prob_res=False):
229
249
  """
230
250
  Evaluate all individuals of a population.
231
251
 
@@ -235,6 +255,8 @@ class DiscretizeRegGrid(LocalFD):
235
255
  The integer variable values, shape: (n_pop, n_vars_int)
236
256
  vars_float : np.array
237
257
  The float variable values, shape: (n_pop, n_vars_float)
258
+ ret_prob_res : bool
259
+ Flag for additionally returning of problem results
238
260
 
239
261
  Returns
240
262
  -------
@@ -242,13 +264,15 @@ class DiscretizeRegGrid(LocalFD):
242
264
  The objective function values, shape: (n_pop, n_objectives)
243
265
  cons : np.array
244
266
  The constraints values, shape: (n_pop, n_constraints)
267
+ prob_res : object, optional
268
+ The problem results
245
269
 
246
270
  """
247
271
  varsf = vars_float[:, self._vinds]
248
272
 
249
273
  # case all points on grid:
250
274
  if self.grid.all_gridpoints(varsf):
251
- return super().evaluate_population(vars_int, vars_float)
275
+ return super().evaluate_population(vars_int, vars_float, ret_prob_res)
252
276
 
253
277
  # case all vars are grid vars:
254
278
  elif self.n_vars_int == 0 and len(self._vinds) == self.n_vars_float:
@@ -262,11 +286,24 @@ class DiscretizeRegGrid(LocalFD):
262
286
  varsf[:] = vars_float[0, None, :]
263
287
  varsf[:, self._vinds] = gpts
264
288
 
265
- objs, cons = self.evaluate_population(varsi, varsf)
289
+ if ret_prob_res:
266
290
 
267
- return np.einsum("go,pg->po", objs, coeffs), np.einsum(
268
- "gc,pg->pc", cons, coeffs
269
- )
291
+ objs, cons, res = self.evaluate_population(varsi, varsf, ret_prob_res)
292
+
293
+ return (
294
+ np.einsum("go,pg->po", objs, coeffs),
295
+ np.einsum("gc,pg->pc", cons, coeffs),
296
+ self.prob_res_einsum_population(res, coeffs),
297
+ )
298
+
299
+ else:
300
+
301
+ objs, cons = self.evaluate_population(varsi, varsf, ret_prob_res)
302
+
303
+ return (
304
+ np.einsum("go,pg->po", objs, coeffs),
305
+ np.einsum("gc,pg->pc", cons, coeffs),
306
+ )
270
307
 
271
308
  # mixed case:
272
309
  else:
@@ -297,7 +334,10 @@ class DiscretizeRegGrid(LocalFD):
297
334
  del apts, upts
298
335
 
299
336
  # calculate results for pop3:
300
- objs, cons = self.evaluate_population(varsi, varsf)
337
+ if ret_prob_res:
338
+ objs, cons, res = self.evaluate_population(varsi, varsf, ret_prob_res)
339
+ else:
340
+ objs, cons = self.evaluate_population(varsi, varsf, ret_prob_res)
301
341
  del varsi, varsf
302
342
 
303
343
  # reconstruct results for pop2:
@@ -308,10 +348,18 @@ class DiscretizeRegGrid(LocalFD):
308
348
  objs = objs.reshape(n_pop, n_gp, self.n_objectives)
309
349
  cons = cons.reshape(n_pop, n_gp, self.n_objectives)
310
350
  coeffs = np.take_along_axis(coeffs, gmap, axis=1)
311
- return (
312
- np.einsum("pgo,pg->po", objs, coeffs),
313
- np.einsum("pgc,pg->pc", cons, coeffs),
314
- )
351
+
352
+ if ret_prob_res:
353
+ return (
354
+ np.einsum("pgo,pg->po", objs, coeffs),
355
+ np.einsum("pgc,pg->pc", cons, coeffs),
356
+ self.prob_res_einsum_population(res, coeffs),
357
+ )
358
+ else:
359
+ return (
360
+ np.einsum("pgo,pg->po", objs, coeffs),
361
+ np.einsum("pgc,pg->pc", cons, coeffs),
362
+ )
315
363
 
316
364
  def finalize_individual(self, vars_int, vars_float, verbosity=1):
317
365
  """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: iwopy
3
- Version: 0.1.5
3
+ Version: 0.1.8
4
4
  Summary: Fraunhofer IWES optimization tools in Python
5
5
  Home-page: https://github.com/FraunhoferIWES/iwopy
6
6
  Author: Fraunhofer IWES
@@ -13,7 +13,7 @@ Keywords: Optimization,Interface
13
13
  Classifier: Programming Language :: Python :: 3
14
14
  Classifier: License :: OSI Approved :: MIT License
15
15
  Classifier: Operating System :: OS Independent
16
- Classifier: Development Status :: 3 - Alpha
16
+ Classifier: Development Status :: 4 - Beta
17
17
  Requires-Python: >=3.7
18
18
  Description-Content-Type: text/markdown
19
19
  License-File: LICENSE
@@ -22,7 +22,7 @@ Requires-Dist: scipy
22
22
  Requires-Dist: matplotlib
23
23
  Provides-Extra: all
24
24
  Requires-Dist: pygmo ; extra == 'all'
25
- Requires-Dist: pymoo ; extra == 'all'
25
+ Requires-Dist: pymoo >=0.6 ; extra == 'all'
26
26
  Provides-Extra: doc
27
27
  Requires-Dist: sphinx ; extra == 'doc'
28
28
  Requires-Dist: sphinx-rtd-theme ; extra == 'doc'
@@ -34,6 +34,8 @@ Provides-Extra: scripts
34
34
  Provides-Extra: test
35
35
  Requires-Dist: flake8 ; extra == 'test'
36
36
  Requires-Dist: pytest ; extra == 'test'
37
+ Requires-Dist: pymoo >=0.6 ; extra == 'test'
38
+ Requires-Dist: pygmo ; extra == 'test'
37
39
 
38
40
  # iwopy
39
41
 
@@ -75,6 +77,7 @@ The supported Python versions are:
75
77
  - `Python 3.8`
76
78
  - `Python 3.9`
77
79
  - `Python 3.10`
80
+ - `Python 3.11`
78
81
 
79
82
  ## Installation via conda
80
83
 
@@ -1,7 +1,7 @@
1
- iwopy/VERSION,sha256=gAzxwDkrJN58ChxupneOy0M97HHEmhULzpaphHdSey8,6
1
+ iwopy/VERSION,sha256=dvgfZOzijQvP453TX20U88h_4AC3eu4RVh4Y0ZGfYH4,6
2
2
  iwopy/__init__.py,sha256=6bQcJJYYOA_DMXkGw3spJnQVutirE13L_HM5Q1RMrYY,389
3
3
  iwopy/benchmarks/__init__.py,sha256=WQii3TCGi4Q30p_X86mCOQ3RsYpPFegsMHedbQX4QC4,46
4
- iwopy/benchmarks/branin.py,sha256=UEhAkwPDoYblW2N7KamAe6jLVTrictJmAdny7pGzyb8,2607
4
+ iwopy/benchmarks/branin.py,sha256=5cDSbKf8zW-6zYtHz73JuGfeqiQ56CeI7jprcsvIyRg,2608
5
5
  iwopy/benchmarks/rosenbrock.py,sha256=CYuiYKN1XcolHDW012Pa2-A8wgSX3Qy6H7GXsFH35Qw,2469
6
6
  iwopy/core/__init__.py,sha256=IxD4Rzv_JukRMd8fo5e1SZ-QPHZNScOskzdLJCliMNA,389
7
7
  iwopy/core/base.py,sha256=aeXjHWSTe84MDnCMdBewFYVQ8tZgw8C-gKot4VWcc-o,1337
@@ -12,34 +12,37 @@ iwopy/core/function_subset.py,sha256=aJNUZnC4QJE3B7RWtwoO2WKTPc_WNW6Vc367hh4CzSI
12
12
  iwopy/core/memory.py,sha256=YqY64a-y1wcwXJfD3NGcqH6cWUgH_MFKZMWYQInlbmo,6451
13
13
  iwopy/core/objective.py,sha256=knqy7AVaaa7yso1qAL5tKzQh6NOw8lQRKWq-4kn0urM,447
14
14
  iwopy/core/opt_results.py,sha256=2MYmtPRdbA4bsvS0ccX92NezHmdSpxpYL6Tn8AZ7vD0,9883
15
- iwopy/core/optimizer.py,sha256=YmkpDBpQj1Qu3oAdEBy4pFBAKOh8Lp4PBvqBbxiBGLg,3968
16
- iwopy/core/problem.py,sha256=INqEg30wz9xqRXMWpmSjCoVlctjBAaL14R1qYDBAnCo,28796
17
- iwopy/interfaces/__init__.py,sha256=9UdXwTeU101_R-fTjAIT-QRSd4IlOcTG46ICXgQdPZM,40
15
+ iwopy/core/optimizer.py,sha256=bpNVryWLG_Wp88orSEbj84UPXvz5mFQxqNPFhRh_abg,4069
16
+ iwopy/core/problem.py,sha256=ThYFshzwU6Ta3Pp4iBraGzBpw0eZ-Us74oDA9mZJuZA,30591
17
+ iwopy/interfaces/__init__.py,sha256=HdZPhQxuaPEpTSEwP4tFOxw55Km0NqqCvl8t1Otzu88,60
18
18
  iwopy/interfaces/pygmo/__init__.py,sha256=qDtUhcYG6OVggiuk88uAEFtO5M0RFoMwwxoe1o3Sx9Q,39
19
- iwopy/interfaces/pygmo/algos.py,sha256=RsR3k13novgZ3cOCLpRAmEfKcg0W72kOh52MlU0bszc,10560
20
- iwopy/interfaces/pygmo/imports.py,sha256=Wpuzw7aRbVbh2S2VCm5m6AfDUZ-A-b5QDdnYgNB2Jek,487
21
- iwopy/interfaces/pygmo/optimizer.py,sha256=4AtG7OoZhtd-cPMNRqIdNaIBXeaSR6CnlKojCQgvWJQ,3610
19
+ iwopy/interfaces/pygmo/algos.py,sha256=BALObK2-88v4tXkxZoILwDoGbynKvL0pvuWsv6pucik,10717
20
+ iwopy/interfaces/pygmo/imports.py,sha256=iBjISncQckQSFyHak5iEdk_E5bNAfXzOH0d4_QfF2lQ,355
21
+ iwopy/interfaces/pygmo/optimizer.py,sha256=iEb65tBu_s7iBhtkwBGE-HktItuw0mPg5VcsZzDO4iU,3615
22
22
  iwopy/interfaces/pygmo/problem.py,sha256=aWaarJhBoHSTsN8uIVrjoB48l_e1vUDoGROV5rBvaB0,6807
23
- iwopy/interfaces/pymoo/__init__.py,sha256=f1DixOsYvxBFIBMMeCAigJf_QlY3If-7vlWdt0SEnxM,56
24
- iwopy/interfaces/pymoo/factory.py,sha256=NjsWIxLO1KATwjQSAClIm_9mLH9ix145u3-PsoRAKhE,7698
25
- iwopy/interfaces/pymoo/imports.py,sha256=mo9JQPk4RFbmT76KKkllsHeouQ4FLmQmXNwMi0CDWH0,695
26
- iwopy/interfaces/pymoo/optimizer.py,sha256=HFZ_Kg9M2rGZzkZqSwIueT26S7ckFhAYM67bJqtFQ_4,7159
27
- iwopy/interfaces/pymoo/problem.py,sha256=RHaCFom5cSo0nqlSqQhODK-XYWhOW31qO7A8Hv3f_s4,11225
23
+ iwopy/interfaces/pymoo/__init__.py,sha256=6U0FRJ1Lgtfu3nf-iXMLeiShoLhLAa_bkS9cebOUmqQ,39
24
+ iwopy/interfaces/pymoo/factory.py,sha256=EtlwxZfYOscidqlJUF_UwfB_qw3bQVwAPhQSj7ImirA,7120
25
+ iwopy/interfaces/pymoo/imports.py,sha256=9-FyOaziO-O9gFKdHZvgCiAM43wPkvx1wC2nYkUzVNw,2806
26
+ iwopy/interfaces/pymoo/optimizer.py,sha256=mxqD0b_ZPEoBfocolT5vCrLUCuiw4eJXz52Bq-PzkAM,7437
27
+ iwopy/interfaces/pymoo/problem.py,sha256=Isi-PDhT3zHKPVllO92-R8WLnzqqVeJjXa4HFO24Ukk,13530
28
+ iwopy/interfaces/scipy/__init__.py,sha256=3xnztLlcSgsjT4wwYAZsNGLyoc-T5sN5mlVjtuw7dQY,39
29
+ iwopy/interfaces/scipy/optimizer.py,sha256=OHLTUwEhU5MqHADJBaSgLs4EsNun0mpy-raYUJH-7UI,6164
28
30
  iwopy/optimizers/__init__.py,sha256=qfKVpw4PtH61umx3GulWSN21jjiJuUf5oUTfUGxU1pk,19
29
31
  iwopy/optimizers/gg.py,sha256=hg-cUHP6oasvbnLJ4AJ5a3M-ugJdmNUz5JPJbeVQrGU,14479
30
- iwopy/utils/__init__.py,sha256=C_TYn7VvWjHkmw2tOJiP1Bj-njvx1TlAxi2_vwNe2J8,90
32
+ iwopy/utils/__init__.py,sha256=qPtdU7hcWPuwEeqd9G-SXqGrakvM9_zfwOiDJdPc8pk,122
31
33
  iwopy/utils/discretization.py,sha256=XBUm2zbIUAo7v8HFoeM0DaKiNJDVDbkdvpOPLO4Ffq8,36635
34
+ iwopy/utils/load.py,sha256=HBX55VV4H2azK1m3sGrD-led31KErBOS8EI0VGYuBG0,766
32
35
  iwopy/utils/stdout.py,sha256=ZVyt8rT8GxQE6mpbFh8V5kf5i_UnP3AP8r9gCGhd1hg,689
33
36
  iwopy/wrappers/__init__.py,sha256=dBQebvXOf0g-67Lof3rmscDzF20EO688Lm2ywIT_uEE,261
34
- iwopy/wrappers/discretize_reg_grid.py,sha256=lioXts3GwOunZbhT6zF6bHVAhuAa7_PQ2yOhYaDWLuE,12298
37
+ iwopy/wrappers/discretize_reg_grid.py,sha256=xVcDONdkmBlywNtxqiTATiTCQ0eFU5eMFUmUwaxl81k,14169
35
38
  iwopy/wrappers/local_fd.py,sha256=hYbcbpnrCu5CajF9jcL-UDgYQLVZJsy5EJNQRyFByXA,11795
36
39
  iwopy/wrappers/problem_wrapper.py,sha256=txebURNkFXpoAmxu14GZt5chmQTsrHNRCxOPp-3NPfc,6656
37
40
  iwopy/wrappers/simple_constraint.py,sha256=Fq16EhV8Dr8zDEyHUvznIWsci-0DVEX4lNJYn2GeHt4,6632
38
41
  iwopy/wrappers/simple_objective.py,sha256=M0QgPNy1aXeFZDXZpJ3FdJt4ifDSP3bCGaU9lbLsSew,6520
39
42
  iwopy/wrappers/simple_problem.py,sha256=jlFikZw_wIcWezJoIeC0lYLRRh4WcTVDXUMEEqRyWmE,7365
40
- iwopy-0.1.5.dist-info/LICENSE,sha256=bBCH6mYTPzSepk2s2UUZ3II_ZYXrn1bnSqB85-aZHxU,1071
41
- iwopy-0.1.5.dist-info/METADATA,sha256=uOf98AnZ1c0UummvVQprJPj9FeZE_My1Vy7JtktcVUM,5356
42
- iwopy-0.1.5.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
43
- iwopy-0.1.5.dist-info/top_level.txt,sha256=51KNQr27ur_u9xKpuDl7GQiBINPKGOqMaMM63kFNzQE,6
44
- iwopy-0.1.5.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
45
- iwopy-0.1.5.dist-info/RECORD,,
43
+ iwopy-0.1.8.dist-info/LICENSE,sha256=bBCH6mYTPzSepk2s2UUZ3II_ZYXrn1bnSqB85-aZHxU,1071
44
+ iwopy-0.1.8.dist-info/METADATA,sha256=ePvr5iU2q1gF3Dk_VfNjgXlW8SfvMFBtKtuYQPK1tgw,5461
45
+ iwopy-0.1.8.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
46
+ iwopy-0.1.8.dist-info/top_level.txt,sha256=51KNQr27ur_u9xKpuDl7GQiBINPKGOqMaMM63kFNzQE,6
47
+ iwopy-0.1.8.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
48
+ iwopy-0.1.8.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.38.4)
2
+ Generator: bdist_wheel (0.42.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
File without changes