Coverage for docs/source/examples/issue_1513.py: 100%
56 statements
« prev ^ index » next coverage.py v7.4.0, created at 2024-01-07 22:13 -0500
« prev ^ index » next coverage.py v7.4.0, created at 2024-01-07 22:13 -0500
1"Tests non-array linked functions & subs in a vectorization environment"
2import numpy as np
3from gpkit import Variable, Model, ConstraintSet, Vectorize
4# pylint: disable=unnecessary-lambda-assignment
6class Vehicle(Model):
7 "Vehicle model"
8 def setup(self):
9 self.a = a = Variable("a")
10 constraints = [a >= 1]
11 return constraints
13class System(Model):
14 "System model"
15 def setup(self):
16 with Vectorize(1):
17 self.Fleet2 = Fleet2()
18 constraints = [self.Fleet2]
19 self.cost = sum(self.Fleet2.z)
20 return constraints
22class Fleet2(Model):
23 "Fleet model (composed of multiple Vehicles)"
24 def setup(self):
25 x = Variable("x")
26 lambdafun = lambda c: [c[x]-1, np.ones(x.shape)]
27 with Vectorize(2):
28 y = Variable("y", lambdafun)
29 self.Vehicle = Vehicle()
31 self.z = z = Variable("z")
32 substitutions = {"x": 4}
33 constraints = [
34 z >= sum(y/x*self.Vehicle.a),
35 self.Vehicle,
36 ]
37 return constraints, substitutions
39m = System()
40sol = m.solve(verbosity=0)
41print(sol.table())
43# now with more fleets per system
44class System2(Model):
45 "System model"
46 def setup(self):
47 with Vectorize(3):
48 self.Fleet2 = Fleet2()
49 constraints = [self.Fleet2]
50 self.cost = sum(self.Fleet2.z)
51 return constraints
53m = System2()
54sol = m.solve(verbosity=0)
55print(sol.table())
58# now testing substitutions
60class Simple(Model):
61 "Simple model"
62 def setup(self):
63 self.x = x = Variable("x")
64 y = Variable("y", 1)
65 z = Variable("z", 2)
66 constraints = [
67 x >= y + z,
68 ]
69 return constraints
71class Cake(Model):
72 "Cake model"
73 def setup(self):
74 with Vectorize(3):
75 s = Simple()
76 c = ConstraintSet([s])
77 self.cost = sum(s.x)
78 return c
80m = Cake()
81m.substitutions.update({
82 "y": ("sweep", [1, 2, 3]),
83 "z": lambda v: v("y")**2,
84})
85sol = m.solve(verbosity=0)
86print(sol.table())