openscvx 0.5.3.dev44__py3-none-any.whl → 0.5.3.dev45__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.
openscvx/_version.py CHANGED
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '0.5.3.dev44'
22
- __version_tuple__ = version_tuple = (0, 5, 3, 'dev44')
21
+ __version__ = version = '0.5.3.dev45'
22
+ __version_tuple__ = version_tuple = (0, 5, 3, 'dev45')
23
23
 
24
- __commit_id__ = commit_id = 'gfbfcd124c'
24
+ __commit_id__ = commit_id = 'g7ded3ab51'
@@ -1135,23 +1135,40 @@ _CINTERP_METHODS = {
1135
1135
 
1136
1136
 
1137
1137
  class Cinterp(Expr):
1138
- """1D cubic spline interpolation for symbolic expressions.
1139
-
1140
- Computes a cubic spline through data points (xp, fp) and evaluates it at
1141
- query point x. Spline coefficients are precomputed at construction time
1142
- via scipy so that JAX evaluation reduces to a segment lookup and
1143
- polynomial eval.
1138
+ """1D piecewise-cubic interpolation for symbolic expressions.
1139
+
1140
+ Evaluates a piecewise-cubic polynomial at query point ``x`` by a segment
1141
+ lookup on the fixed breakpoints ``xp`` followed by Horner evaluation. The
1142
+ polynomial table is held as ``coeffs`` of shape ``(4, n_segments)`` where
1143
+ ``n_segments = len(xp) - 1``; row ``k`` holds the degree-``k`` coefficients,
1144
+ so the value in segment ``i`` at local coordinate ``t = x - xp[i]`` is
1145
+ ``coeffs[0, i] + coeffs[1, i]*t + coeffs[2, i]*t**2 + coeffs[3, i]*t**3``.
1146
+
1147
+ The table can be supplied two ways, and exactly one must be chosen:
1148
+
1149
+ - **Fit from data (default).** Pass ``fp`` (values at the breakpoints) and
1150
+ an optional ``method``; scipy fits the spline once at construction and the
1151
+ coefficients are baked into the compiled function as constants.
1152
+ - **Coefficient override.** Pass ``coeffs`` directly — either a numeric
1153
+ ``(4, n_segments)`` array or a symbolic :class:`~openscvx.Parameter` of
1154
+ that shape. A symbolic override is *not* baked in: the compiled function
1155
+ gathers the current parameter value at run time, so the interpolated
1156
+ function can be swapped **between solves** — with any host-side fitting
1157
+ method you like — without recompiling. ``method`` is meaningless with an
1158
+ override and passing it is an error.
1144
1159
 
1145
1160
  Attributes:
1146
1161
  x: Query point at which to evaluate the spline (symbolic expression).
1147
- xp: 1D array of breakpoints (must be strictly increasing).
1148
- fp: 1D array of values at the breakpoints (same length as xp).
1149
- method: Spline method used — ``"cubic"`` (not-a-knot, C2),
1162
+ xp: 1D array of breakpoints (must be strictly increasing). Fixed at
1163
+ construction; it drives the segment lookup and cannot be symbolic.
1164
+ fp: 1D array of values at the breakpoints (fit path only; ``None`` for a
1165
+ coefficient override).
1166
+ method: Spline method used to fit ``fp`` — ``"cubic"`` (not-a-knot, C2),
1150
1167
  ``"pchip"`` (monotonicity-preserving, C1), or ``"akima"`` (C1).
1151
- coeffs: Precomputed polynomial coefficients, shape (4, n_segments).
1152
- Row k contains the degree-k coefficients, so the value in segment i
1153
- at local coordinate t = x - xp[i] is
1154
- ``coeffs[0, i] + coeffs[1, i]*t + coeffs[2, i]*t**2 + coeffs[3, i]*t**3``.
1168
+ ``None`` for a coefficient override.
1169
+ coeffs: The polynomial table. A numeric ``(4, n_segments)`` array for
1170
+ the fit and numeric-override paths, or the coefficient ``Expr`` for a
1171
+ symbolic override.
1155
1172
 
1156
1173
  Example:
1157
1174
  Interpolate a discrete reference path::
@@ -1173,34 +1190,101 @@ class Cinterp(Expr):
1173
1190
  altitude = ox.State("altitude", shape=(1,))
1174
1191
  rho = ox.Cinterp(altitude[0], alt_data, rho_data, method="pchip")
1175
1192
 
1193
+ Drive the table with a :class:`~openscvx.Parameter` so the interpolated
1194
+ function can be retuned between solves without recompiling. Fit the
1195
+ spline host-side with any scipy method and push its coefficients (scipy
1196
+ stores them highest-degree-first, so reverse to this class's
1197
+ ascending-degree layout)::
1198
+
1199
+ from scipy.interpolate import PchipInterpolator
1200
+
1201
+ xp = np.linspace(0, 1, 11)
1202
+ n_seg = len(xp) - 1
1203
+
1204
+ cs = PchipInterpolator(xp, fp_data)
1205
+ coeffs = ox.Parameter("spline_coeffs", shape=(4, n_seg),
1206
+ value=cs.c[::-1])
1207
+
1208
+ progress = ox.State("progress", shape=(1,))
1209
+ ref = ox.Cinterp(progress[0], xp, coeffs=coeffs)
1210
+
1211
+ # ... build and solve the problem, then before the next solve:
1212
+ cs = PchipInterpolator(xp, new_fp_data)
1213
+ problem.parameters["spline_coeffs"] = cs.c[::-1]
1214
+
1176
1215
  !!! note
1177
1216
  `xp` must be strictly increasing.
1178
1217
 
1179
1218
  !!! warning "Extrapolation behavior"
1180
1219
  For query points outside `[xp[0], xp[-1]]`, boundary segment
1181
1220
  polynomials are extrapolated (consistent with scipy defaults).
1221
+
1222
+ !!! warning "Continuity is the caller's responsibility"
1223
+ With a coefficient override the library no longer guarantees that the
1224
+ table describes a continuous function — that is now the caller's job.
1225
+ A table whose segment polynomials disagree at a breakpoint yields a
1226
+ discontinuous dynamics function, which the discretizer will linearize
1227
+ and integrate without complaint, silently degrading accuracy.
1182
1228
  """
1183
1229
 
1184
1230
  def __init__(
1185
1231
  self,
1186
1232
  x: Union[Expr, float, int, np.ndarray],
1187
1233
  xp: Union[np.ndarray, list],
1188
- fp: Union[np.ndarray, list],
1234
+ fp: Union[np.ndarray, list, None] = None,
1189
1235
  *,
1190
- method: str = "cubic",
1236
+ coeffs: Union[Expr, np.ndarray, list, None] = None,
1237
+ method: Union[str, None] = None,
1191
1238
  _coeffs: Union[np.ndarray, None] = None,
1192
1239
  ):
1193
1240
  self.x = to_expr(x)
1194
1241
  xp = np.asarray(xp, dtype=float)
1195
- fp = np.asarray(fp, dtype=float)
1242
+ if xp.ndim != 1:
1243
+ raise ValueError(f"Cinterp xp must be 1D, got shape {xp.shape}")
1244
+ self.xp_np = xp
1245
+ n_seg = xp.shape[0] - 1
1246
+
1247
+ if (fp is None) == (coeffs is None):
1248
+ raise ValueError(
1249
+ "Cinterp requires exactly one of fp or coeffs: pass fp to fit a "
1250
+ "spline through breakpoint values, or coeffs to supply the "
1251
+ "polynomial table directly."
1252
+ )
1196
1253
 
1254
+ if coeffs is not None:
1255
+ # --- Coefficient-override path (numeric array or symbolic Expr). ---
1256
+ if method is not None:
1257
+ raise ValueError(
1258
+ "Cinterp method is meaningless with a coeffs override "
1259
+ "(the table is supplied, not fit); drop the method argument."
1260
+ )
1261
+ expected = (4, n_seg)
1262
+ if isinstance(coeffs, Expr):
1263
+ got = coeffs.check_shape()
1264
+ if got != expected:
1265
+ raise ValueError(
1266
+ f"Cinterp coeffs must have shape {expected} (4 by len(xp) - 1), got {got}"
1267
+ )
1268
+ self.coeffs = coeffs
1269
+ else:
1270
+ arr = np.asarray(coeffs, dtype=float)
1271
+ if arr.shape != expected:
1272
+ raise ValueError(
1273
+ f"Cinterp coeffs must have shape {expected} "
1274
+ f"(4 by len(xp) - 1), got {arr.shape}"
1275
+ )
1276
+ self.coeffs = arr
1277
+ self.fp_np = None
1278
+ self.method = None
1279
+ return
1280
+
1281
+ # --- Fit path: precompute spline coefficients via scipy. ---
1282
+ method = "cubic" if method is None else method
1197
1283
  if method not in _CINTERP_METHODS:
1198
1284
  raise ValueError(
1199
1285
  f"Cinterp method must be one of {set(_CINTERP_METHODS)}, got {method!r}"
1200
1286
  )
1201
-
1202
- if xp.ndim != 1:
1203
- raise ValueError(f"Cinterp xp must be 1D, got shape {xp.shape}")
1287
+ fp = np.asarray(fp, dtype=float)
1204
1288
  if fp.ndim != 1:
1205
1289
  raise ValueError(f"Cinterp fp must be 1D, got shape {fp.shape}")
1206
1290
  if xp.shape != fp.shape:
@@ -1208,38 +1292,53 @@ class Cinterp(Expr):
1208
1292
  f"Cinterp xp and fp must have same length, got {xp.shape} vs {fp.shape}"
1209
1293
  )
1210
1294
 
1211
- self.xp_np = xp
1212
1295
  self.fp_np = fp
1213
1296
  self.method = method
1214
1297
 
1215
1298
  if _coeffs is not None:
1216
1299
  self.coeffs = _coeffs
1217
1300
  else:
1218
- # Precompute spline coefficients via scipy.
1219
1301
  # scipy returns shape (4, n_seg) with c[0]=cubic, c[1]=quadratic, ...
1220
1302
  # We reorder to ascending-degree layout for Horner evaluation.
1221
1303
  cs = _CINTERP_METHODS[method](xp, fp)
1222
1304
  self.coeffs = cs.c[::-1].copy() # row 0 = const, row 3 = cubic
1223
1305
 
1224
1306
  def children(self):
1307
+ if isinstance(self.coeffs, Expr):
1308
+ return [self.x, self.coeffs]
1225
1309
  return [self.x]
1226
1310
 
1227
1311
  def canonicalize(self) -> "Expr":
1228
1312
  x = self.x.canonicalize()
1229
- return Cinterp(x, self.xp_np, self.fp_np, method=self.method, _coeffs=self.coeffs)
1313
+ if isinstance(self.coeffs, Expr):
1314
+ return Cinterp(x, self.xp_np, coeffs=self.coeffs.canonicalize())
1315
+ if self.fp_np is not None:
1316
+ return Cinterp(x, self.xp_np, self.fp_np, method=self.method, _coeffs=self.coeffs)
1317
+ return Cinterp(x, self.xp_np, coeffs=self.coeffs)
1230
1318
 
1231
1319
  def check_shape(self) -> Tuple[int, ...]:
1232
1320
  return self.x.check_shape()
1233
1321
 
1234
1322
  def _hash_into(self, hasher: "hashlib._Hash") -> None:
1235
1323
  hasher.update(b"Cinterp")
1236
- hasher.update(self.method.encode())
1237
- hasher.update(self.xp_np.tobytes())
1238
- hasher.update(self.fp_np.tobytes())
1324
+ if isinstance(self.coeffs, Expr):
1325
+ hasher.update(b"coeffs_expr")
1326
+ hasher.update(self.xp_np.tobytes())
1327
+ self.coeffs._hash_into(hasher)
1328
+ elif self.fp_np is not None:
1329
+ hasher.update(self.method.encode())
1330
+ hasher.update(self.xp_np.tobytes())
1331
+ hasher.update(self.fp_np.tobytes())
1332
+ else:
1333
+ hasher.update(b"coeffs_num")
1334
+ hasher.update(self.xp_np.tobytes())
1335
+ hasher.update(np.asarray(self.coeffs).tobytes())
1239
1336
  self.x._hash_into(hasher)
1240
1337
 
1241
1338
  def __repr__(self) -> str:
1242
- if self.method == "cubic":
1339
+ if isinstance(self.coeffs, Expr):
1340
+ return f"cinterp({self.x!r}, coeffs={self.coeffs!r})"
1341
+ if self.method == "cubic" or self.method is None:
1243
1342
  return f"cinterp({self.x!r})"
1244
1343
  return f"cinterp({self.x!r}, method={self.method!r})"
1245
1344
 
@@ -17,6 +17,8 @@ import jax
17
17
  import jax.numpy as jnp
18
18
  from jax.scipy.special import logsumexp
19
19
 
20
+ from openscvx.symbolic.expr.expr import Expr
21
+
20
22
  # Expression types to handle — uncomment as you paste visitors:
21
23
  from openscvx.symbolic.expr.math import (
22
24
  Abs,
@@ -285,33 +287,46 @@ def _visit_linterp(lowerer, node: Linterp):
285
287
 
286
288
  @visitor(Cinterp)
287
289
  def _visit_cinterp(lowerer, node: Cinterp):
288
- """Lower 1D cubic spline interpolation to JAX function.
290
+ """Lower 1D piecewise-cubic interpolation to a JAX function.
289
291
 
290
- Evaluates a precomputed cubic spline via segment lookup and Horner's
291
- method. Coefficients are baked in as constants; only the query point
292
- is symbolic. For queries outside the data range the boundary segment
293
- polynomial is extrapolated.
292
+ Evaluates the polynomial table via segment lookup on the fixed breakpoints
293
+ and Horner's method. When ``node.coeffs`` is a numeric array it is baked in
294
+ as a constant; when it is a symbolic ``Expr`` (e.g. a ``Parameter``) it is
295
+ lowered too and gathered at run time, so the table can change between solves
296
+ without recompiling. Either way only ``xp`` is fixed. For queries outside
297
+ the data range the boundary segment polynomial is extrapolated.
294
298
 
295
299
  Args:
296
- node: Cinterp expression node with precomputed coeffs and xp_np.
300
+ node: Cinterp expression node with xp_np and numeric-or-symbolic coeffs.
297
301
 
298
302
  Returns:
299
303
  Function (x, u, node_idx, params) -> interpolated value(s)
300
304
  """
301
305
  f_x = lowerer.lower(node.x)
302
306
  xp = jnp.asarray(node.xp_np)
303
- coeffs = jnp.asarray(node.coeffs) # (4, n_seg)
304
307
 
305
- def cinterp_fn(x, u, node_idx, params):
306
- x_val = f_x(x, u, node_idx, params)
307
- # Segment index (clamp to valid range)
308
+ def evaluate(x_val, coeffs):
309
+ # Segment index (clamp to valid range), then Horner: c0 + t*(c1 + t*(c2 + t*c3)).
308
310
  idx = jnp.searchsorted(xp, x_val, side="right") - 1
309
311
  idx = jnp.clip(idx, 0, xp.shape[0] - 2)
310
312
  t = x_val - xp[idx]
311
- # Horner evaluation: c0 + t*(c1 + t*(c2 + t*c3))
312
313
  c = coeffs[:, idx]
313
314
  return c[0] + t * (c[1] + t * (c[2] + t * c[3]))
314
315
 
316
+ if isinstance(node.coeffs, Expr):
317
+ f_coeffs = lowerer.lower(node.coeffs)
318
+
319
+ def cinterp_fn(x, u, node_idx, params):
320
+ coeffs = f_coeffs(x, u, node_idx, params) # (4, n_seg)
321
+ return evaluate(f_x(x, u, node_idx, params), coeffs)
322
+
323
+ return cinterp_fn
324
+
325
+ coeffs = jnp.asarray(node.coeffs) # (4, n_seg)
326
+
327
+ def cinterp_fn(x, u, node_idx, params):
328
+ return evaluate(f_x(x, u, node_idx, params), coeffs)
329
+
315
330
  return cinterp_fn
316
331
 
317
332
 
@@ -171,14 +171,13 @@ def _visit_linterp(lowerer, node: Linterp):
171
171
 
172
172
  @visitor(Cinterp)
173
173
  def _visit_cinterp(lowerer, node: Cinterp):
174
- """Render 1-D cubic-spline interpolation as ``\\operatorname{cinterp}(x)``.
174
+ """Render 1-D piecewise-cubic interpolation as ``\\operatorname{cinterp}(x)``.
175
175
 
176
- Only the query point is a symbolic operand — the breakpoints and spline
177
- coefficients are baked in at construction — so it is the only rendered
178
- argument.
176
+ Only the query point is rendered; the breakpoints and the polynomial table
177
+ (whether baked-in coefficients or a symbolic override) are structural and
178
+ stay implicit.
179
179
  """
180
- args = ", ".join(lowerer.lower(c) for c in node.children())
181
- return _call(r"\operatorname{cinterp}", args)
180
+ return _call(r"\operatorname{cinterp}", lowerer.lower(node.x))
182
181
 
183
182
 
184
183
  @visitor(Bilerp)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openscvx
3
- Version: 0.5.3.dev44
3
+ Version: 0.5.3.dev45
4
4
  Summary: A general Python-based successive convexification implementation which uses a JAX backend.
5
5
  Author-email: Chris Hayner and Griffin Norris <haynec@uw.edu>
6
6
  License: Apache Software License
@@ -1,6 +1,6 @@
1
1
  openscvx/__init__.py,sha256=89L6wZLhDvqWM9SC-ryulEfwgIOGy0S7UxDn9izvQP8,4539
2
2
  openscvx/__main__.py,sha256=Hwm7mtVg3tLdvoUPkpcQv8KF3wxl72PNLBp9axFu8GY,2991
3
- openscvx/_version.py,sha256=z4dEwf_d3KZM4hD2xCnVtEzt70tWZziULPY4Sgy5J5I,543
3
+ openscvx/_version.py,sha256=qA0aqGRY1KfrBAA8_Njo5J5OiOWGYH5z5IzbS-LP_bU,543
4
4
  openscvx/config.py,sha256=qfDDYoCe6WqJglKsx5b2W48YOglXenKr-PVRRdCFhYE,9898
5
5
  openscvx/loader.py,sha256=5WDLVA6CQxnyi1pRBfP8jQQc0r8RiAM2O_ItKgMXxAk,7660
6
6
  openscvx/problem.py,sha256=N0p0zlC6JUi_CEwiUC5XWxWU4Bkzm_IDp-4EgnGpSs4,104744
@@ -97,7 +97,7 @@ openscvx/symbolic/expr/control.py,sha256=xnuZDM-er755i-H8UW2RCaikeQ82x35rf8SCkvv
97
97
  openscvx/symbolic/expr/expr.py,sha256=KiknvnuMvw5O6zHMkfKfdpC8OFu9DDxHa92AU0MNKJk,25834
98
98
  openscvx/symbolic/expr/linalg.py,sha256=uJn82IyUqPUCYwmLLQcAg-DuPQP1WwrsfDZsd7lS3SQ,12618
99
99
  openscvx/symbolic/expr/logic.py,sha256=K994Ml2GorIze_xJYI40SYkEqc8cNFVA_wKvKSmQ8gw,17023
100
- openscvx/symbolic/expr/math.py,sha256=RDTGvv9Ai3NHftJqGfbEaD1cJFo6F99Asu6h-Qw1xVk,44304
100
+ openscvx/symbolic/expr/math.py,sha256=9D5-hORwAkK-1pJx-p_6BeSTZx9CVwLTQszJ5aVGIvQ,49266
101
101
  openscvx/symbolic/expr/parameter.py,sha256=s29blJN68EO8zaMVm6wmtdkG0vNUYKM9na-NdrRyV0c,2335
102
102
  openscvx/symbolic/expr/spatial.py,sha256=xKChjjYGawJ2x-d3-b16BEonh6zL96qHnzvVq3Gyvsk,6768
103
103
  openscvx/symbolic/expr/state.py,sha256=CtSWq8dfPhDvtGqhGJMF2bGHbQ2oPBQ4f2q9e0DWpB8,25802
@@ -134,7 +134,7 @@ openscvx/symbolic/lowerers/jax/expr.py,sha256=bKaw6OXGufxBB4T26M2eHgaMRLctNhfe-R
134
134
  openscvx/symbolic/lowerers/jax/lie.py,sha256=l4rTWjaTeqinSs6-CQGIV9z6ru2h4DB3NxFo-lKFLho,9092
135
135
  openscvx/symbolic/lowerers/jax/linalg.py,sha256=uHLQXz4pI1GSM0gn1chqZeU8X9C61NzIj0dvDYjoafk,2671
136
136
  openscvx/symbolic/lowerers/jax/logic.py,sha256=SkBv_Jzmln_nCo4NzY-jV4NDYEDPpJqT2oGqCO_MxQg,8080
137
- openscvx/symbolic/lowerers/jax/math.py,sha256=L4j6Jnyad5teqPPmAevZ3uC5S-l095F0uqAflJ5mIjU,11282
137
+ openscvx/symbolic/lowerers/jax/math.py,sha256=q-24lFIQUmh-anGPbD0j51ZVZTt-dHHYgFLBolWx_2I,11888
138
138
  openscvx/symbolic/lowerers/jax/spatial.py,sha256=f0P9HdPQKKT3-ckBAnsfapWVrzON0WEXTC2S3Zw2rSs,3911
139
139
  openscvx/symbolic/lowerers/jax/state.py,sha256=7hF-b6mj9lu5LzJXMUCRja05y7808Ek-B3Sg0z7aQrY,1245
140
140
  openscvx/symbolic/lowerers/jax/stl.py,sha256=li_USuDolYEq016ppbwgDfGFSIj7Dr5lSXXGNTZcIcc,9246
@@ -152,7 +152,7 @@ openscvx/symbolic/lowerers/latex/formulation.py,sha256=G57JLmKPYuVGRwxHrH83t9pRb
152
152
  openscvx/symbolic/lowerers/latex/lie.py,sha256=fhVHAFvDRFnQOVNarpJjISS17g_YjKL-kc5Q1EGKSEo,3929
153
153
  openscvx/symbolic/lowerers/latex/linalg.py,sha256=M0InHJvbhlU8ls8cvAvFGw_CboXb1an81T-MXTOUfgE,2094
154
154
  openscvx/symbolic/lowerers/latex/logic.py,sha256=9-okeonGJhdmecCKFv7Zz2IeD2E2MI47-2docOMp4V4,3356
155
- openscvx/symbolic/lowerers/latex/math.py,sha256=vKpBqNiVZGBLeUQ-hVmOh-sYFcK-4fHvGO3NsQCYslo,5805
155
+ openscvx/symbolic/lowerers/latex/math.py,sha256=1QoqRZS43LTYoVR2DuKq8lGxKzhoxnG83tfZmU9y8-w,5768
156
156
  openscvx/symbolic/lowerers/latex/spatial.py,sha256=ok_cyVfy7Vy2EIj-zsbsh5BW1DQ5VogJk0S8vzFvkD0,1434
157
157
  openscvx/symbolic/lowerers/latex/state.py,sha256=bzbOPNY4dqiUp9otRgpNhF5CQ-jL07lSytCZx7Qfjw0,972
158
158
  openscvx/symbolic/lowerers/latex/stl.py,sha256=E1UzrCutC7E2MiuXX_P7FSfaOtt8HIJgKC6Gyqkk10Y,4414
@@ -176,11 +176,9 @@ openscvx/utils/caching.py,sha256=Uw2e0G1UNn_vmMDqUZGszIH-O9LJhR4wdVKSPToHiy0,169
176
176
  openscvx/utils/printing.py,sha256=dsccZ9sXc3TBWShQvBg1Al4UFGMP77ApblfxteEJHLQ,16515
177
177
  openscvx/utils/profiling.py,sha256=k2x-i0CpG_kRe6dNcNBGu-ylrOtQw4B4C1UaOTjUMfU,1678
178
178
  openscvx/utils/utils.py,sha256=M25RHE_7DSr3Reaca0xCXnDSY9KHuqYvXdh5m1ZotEc,3047
179
- openscvx-0.5.3.dev44.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
180
- openscvx-0.5.3.dev44.dist-info/METADATA,sha256=7L3E7XyZfPoESk-w7XR8ThuivcssfkEK5BK_w19sF_I,12993
181
- openscvx-0.5.3.dev44.dist-info/WHEEL,sha256=K260EYznzXsJYBQGqmI8VTxEdiZYNvDZwW9cBh9-_MA,91
182
- openscvx-0.5.3.dev44.dist-info/entry_points.txt,sha256=1Oqek8Sy28hmAZFgZXDxFXYVf56YLYWlHjhh9RYJ7wE,52
183
- openscvx-0.5.3.dev44.dist-info/scm_file_list.json,sha256=flkvjMuThTDb6rDv5UuEbYr0Uocj4iGA9maGW10oJ3I,19634
184
- openscvx-0.5.3.dev44.dist-info/scm_version.json,sha256=C0xTY6JtOG6y24U89exZXTpJyiCup2d3wj0ShHZbqbY,161
185
- openscvx-0.5.3.dev44.dist-info/top_level.txt,sha256=nUT4Ybefzh40H8tVXqc1RzKESy_MAowElb-CIvAbd4Q,9
186
- openscvx-0.5.3.dev44.dist-info/RECORD,,
179
+ openscvx-0.5.3.dev45.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
180
+ openscvx-0.5.3.dev45.dist-info/METADATA,sha256=dR-An270m0vhNtgphQthQTJMi_ybCLQ-C2ogFv2ZiQE,12993
181
+ openscvx-0.5.3.dev45.dist-info/WHEEL,sha256=K260EYznzXsJYBQGqmI8VTxEdiZYNvDZwW9cBh9-_MA,91
182
+ openscvx-0.5.3.dev45.dist-info/entry_points.txt,sha256=1Oqek8Sy28hmAZFgZXDxFXYVf56YLYWlHjhh9RYJ7wE,52
183
+ openscvx-0.5.3.dev45.dist-info/top_level.txt,sha256=nUT4Ybefzh40H8tVXqc1RzKESy_MAowElb-CIvAbd4Q,9
184
+ openscvx-0.5.3.dev45.dist-info/RECORD,,
@@ -1,460 +0,0 @@
1
- {
2
- "files": [
3
- ".gitignore",
4
- "README.md",
5
- "CONTRIBUTING.md",
6
- ".gitmodules",
7
- "CITATION.cff",
8
- "pyproject.toml",
9
- "LICENSE",
10
- "mkdocs.yml",
11
- "figures/video_preview.png",
12
- "figures/openscvx_logo_square.png",
13
- "figures/dtlos_dr.gif",
14
- "figures/dtlos_cine.gif",
15
- "figures/ctlos_cine.gif",
16
- "figures/openscvx_logo.svg",
17
- "figures/ctlos_dr.gif",
18
- "figures/oscvx_structure_full_dark.svg",
19
- "material/__init__.py",
20
- "material/overrides/home.html",
21
- "material/overrides/main.html",
22
- "material/overrides/sitemap.xml",
23
- "material/overrides/partials/home-viser-strip.html",
24
- "material/overrides/partials/home-pipeline.html",
25
- "material/overrides/partials/home-diagram.html",
26
- "material/overrides/partials/home-dropin-banner.html",
27
- "material/overrides/partials/home-hero.html",
28
- "material/overrides/assets/stylesheets/home-hero.css",
29
- "material/overrides/assets/stylesheets/home-viser.css",
30
- "material/overrides/assets/stylesheets/home-dropin.css",
31
- "material/overrides/assets/stylesheets/custom.css",
32
- ".github/release-drafter.yml",
33
- ".github/workflows/tests-qpax.yml",
34
- ".github/workflows/nightly.yml",
35
- ".github/workflows/_extra.yml",
36
- ".github/workflows/branch-name.yml",
37
- ".github/workflows/tests-examples.yml",
38
- ".github/workflows/tests.yml",
39
- ".github/workflows/release-drafter.yml",
40
- ".github/workflows/docs.yml",
41
- ".github/workflows/release.yml",
42
- ".github/workflows/tests-cvxpygen.yml",
43
- ".github/workflows/lint.yml",
44
- ".github/workflows/_docs.yml",
45
- ".github/workflows/tests-mjx.yml",
46
- ".github/workflows/tests-lie.yml",
47
- ".github/assets/logo.svg",
48
- "openscvx/config.py",
49
- "openscvx/problem.py",
50
- "openscvx/__main__.py",
51
- "openscvx/loader.py",
52
- "openscvx/__init__.py",
53
- "openscvx/plotting/scp_iteration.py",
54
- "openscvx/plotting/plotting.py",
55
- "openscvx/plotting/publication.py",
56
- "openscvx/plotting/__init__.py",
57
- "openscvx/plotting/viser/orbits.py",
58
- "openscvx/plotting/viser/server.py",
59
- "openscvx/plotting/viser/plotly_integration.py",
60
- "openscvx/plotting/viser/scp.py",
61
- "openscvx/plotting/viser/coordinates.py",
62
- "openscvx/plotting/viser/animated.py",
63
- "openscvx/plotting/viser/primitives.py",
64
- "openscvx/plotting/viser/__init__.py",
65
- "openscvx/utils/printing.py",
66
- "openscvx/utils/utils.py",
67
- "openscvx/utils/profiling.py",
68
- "openscvx/utils/caching.py",
69
- "openscvx/utils/cache.py",
70
- "openscvx/utils/__init__.py",
71
- "openscvx/init/interpolation.py",
72
- "openscvx/init/inverse_kinematics.py",
73
- "openscvx/init/__init__.py",
74
- "openscvx/solvers/base.py",
75
- "openscvx/solvers/ptr_solver.py",
76
- "openscvx/solvers/qpax_ptr_solver.py",
77
- "openscvx/solvers/cvxpy_ptr_solver.py",
78
- "openscvx/solvers/moreau_ptr_solver.py",
79
- "openscvx/solvers/cones.py",
80
- "openscvx/solvers/__init__.py",
81
- "openscvx/lowered/parameters.py",
82
- "openscvx/lowered/cvxpy_variables.py",
83
- "openscvx/lowered/cvxpy_constraints.py",
84
- "openscvx/lowered/dynamics.py",
85
- "openscvx/lowered/unified.py",
86
- "openscvx/lowered/problem.py",
87
- "openscvx/lowered/jax_constraints.py",
88
- "openscvx/lowered/__init__.py",
89
- "openscvx/symbolic/affine.py",
90
- "openscvx/symbolic/constraint_set.py",
91
- "openscvx/symbolic/augmentation.py",
92
- "openscvx/symbolic/builder.py",
93
- "openscvx/symbolic/unified.py",
94
- "openscvx/symbolic/lower.py",
95
- "openscvx/symbolic/sparsity.py",
96
- "openscvx/symbolic/problem.py",
97
- "openscvx/symbolic/hashing.py",
98
- "openscvx/symbolic/preprocessing.py",
99
- "openscvx/symbolic/canonicalize.py",
100
- "openscvx/symbolic/__init__.py",
101
- "openscvx/symbolic/parser/parser.py",
102
- "openscvx/symbolic/parser/lie.py",
103
- "openscvx/symbolic/parser/stljax.py",
104
- "openscvx/symbolic/parser/_registry.py",
105
- "openscvx/symbolic/parser/logic.py",
106
- "openscvx/symbolic/parser/math.py",
107
- "openscvx/symbolic/parser/array.py",
108
- "openscvx/symbolic/parser/stl.py",
109
- "openscvx/symbolic/parser/tokenizer.py",
110
- "openscvx/symbolic/parser/constraint.py",
111
- "openscvx/symbolic/parser/spatial.py",
112
- "openscvx/symbolic/parser/linalg.py",
113
- "openscvx/symbolic/parser/__init__.py",
114
- "openscvx/symbolic/expr/vmap.py",
115
- "openscvx/symbolic/expr/parameter.py",
116
- "openscvx/symbolic/expr/expr.py",
117
- "openscvx/symbolic/expr/stljax.py",
118
- "openscvx/symbolic/expr/logic.py",
119
- "openscvx/symbolic/expr/state.py",
120
- "openscvx/symbolic/expr/control.py",
121
- "openscvx/symbolic/expr/math.py",
122
- "openscvx/symbolic/expr/array.py",
123
- "openscvx/symbolic/expr/variable.py",
124
- "openscvx/symbolic/expr/stl.py",
125
- "openscvx/symbolic/expr/constraint.py",
126
- "openscvx/symbolic/expr/spatial.py",
127
- "openscvx/symbolic/expr/linalg.py",
128
- "openscvx/symbolic/expr/arithmetic.py",
129
- "openscvx/symbolic/expr/time.py",
130
- "openscvx/symbolic/expr/__init__.py",
131
- "openscvx/symbolic/expr/lie/adjoint.py",
132
- "openscvx/symbolic/expr/lie/so3.py",
133
- "openscvx/symbolic/expr/lie/se3.py",
134
- "openscvx/symbolic/expr/lie/__init__.py",
135
- "openscvx/symbolic/lowerers/__init__.py",
136
- "openscvx/symbolic/lowerers/cvxpy/expr.py",
137
- "openscvx/symbolic/lowerers/cvxpy/_registry.py",
138
- "openscvx/symbolic/lowerers/cvxpy/logic.py",
139
- "openscvx/symbolic/lowerers/cvxpy/state.py",
140
- "openscvx/symbolic/lowerers/cvxpy/control.py",
141
- "openscvx/symbolic/lowerers/cvxpy/math.py",
142
- "openscvx/symbolic/lowerers/cvxpy/array.py",
143
- "openscvx/symbolic/lowerers/cvxpy/_lowerer.py",
144
- "openscvx/symbolic/lowerers/cvxpy/constraint.py",
145
- "openscvx/symbolic/lowerers/cvxpy/linalg.py",
146
- "openscvx/symbolic/lowerers/cvxpy/arithmetic.py",
147
- "openscvx/symbolic/lowerers/cvxpy/__init__.py",
148
- "openscvx/symbolic/lowerers/jax/vmap.py",
149
- "openscvx/symbolic/lowerers/jax/lie.py",
150
- "openscvx/symbolic/lowerers/jax/expr.py",
151
- "openscvx/symbolic/lowerers/jax/stljax.py",
152
- "openscvx/symbolic/lowerers/jax/_registry.py",
153
- "openscvx/symbolic/lowerers/jax/logic.py",
154
- "openscvx/symbolic/lowerers/jax/state.py",
155
- "openscvx/symbolic/lowerers/jax/control.py",
156
- "openscvx/symbolic/lowerers/jax/math.py",
157
- "openscvx/symbolic/lowerers/jax/array.py",
158
- "openscvx/symbolic/lowerers/jax/stl.py",
159
- "openscvx/symbolic/lowerers/jax/_lowerer.py",
160
- "openscvx/symbolic/lowerers/jax/constraint.py",
161
- "openscvx/symbolic/lowerers/jax/spatial.py",
162
- "openscvx/symbolic/lowerers/jax/linalg.py",
163
- "openscvx/symbolic/lowerers/jax/arithmetic.py",
164
- "openscvx/symbolic/lowerers/jax/__init__.py",
165
- "openscvx/symbolic/lowerers/latex/vmap.py",
166
- "openscvx/symbolic/lowerers/latex/lie.py",
167
- "openscvx/symbolic/lowerers/latex/expr.py",
168
- "openscvx/symbolic/lowerers/latex/_registry.py",
169
- "openscvx/symbolic/lowerers/latex/logic.py",
170
- "openscvx/symbolic/lowerers/latex/state.py",
171
- "openscvx/symbolic/lowerers/latex/control.py",
172
- "openscvx/symbolic/lowerers/latex/math.py",
173
- "openscvx/symbolic/lowerers/latex/array.py",
174
- "openscvx/symbolic/lowerers/latex/stl.py",
175
- "openscvx/symbolic/lowerers/latex/_lowerer.py",
176
- "openscvx/symbolic/lowerers/latex/formulation.py",
177
- "openscvx/symbolic/lowerers/latex/constraint.py",
178
- "openscvx/symbolic/lowerers/latex/spatial.py",
179
- "openscvx/symbolic/lowerers/latex/linalg.py",
180
- "openscvx/symbolic/lowerers/latex/arithmetic.py",
181
- "openscvx/symbolic/lowerers/latex/__init__.py",
182
- "openscvx/algorithms/base.py",
183
- "openscvx/algorithms/history.py",
184
- "openscvx/algorithms/optimization_results.py",
185
- "openscvx/algorithms/state.py",
186
- "openscvx/algorithms/loop.py",
187
- "openscvx/algorithms/weights.py",
188
- "openscvx/algorithms/penalty.py",
189
- "openscvx/algorithms/hyperparams.py",
190
- "openscvx/algorithms/__init__.py",
191
- "openscvx/algorithms/autotuner/base.py",
192
- "openscvx/algorithms/autotuner/constant_proximal_weight.py",
193
- "openscvx/algorithms/autotuner/ramp_proximal_weight.py",
194
- "openscvx/algorithms/autotuner/acceptance_ratio.py",
195
- "openscvx/algorithms/autotuner/adaptive_proximal_weight.py",
196
- "openscvx/algorithms/autotuner/augmented_lagrangian.py",
197
- "openscvx/algorithms/autotuner/__init__.py",
198
- "openscvx/algorithms/scvx/penalized_trust_region.py",
199
- "openscvx/algorithms/scvx/iteration.py",
200
- "openscvx/algorithms/scvx/__init__.py",
201
- "openscvx/propagation/post_processing.py",
202
- "openscvx/propagation/propagation.py",
203
- "openscvx/propagation/__init__.py",
204
- "openscvx/integrators/diffrax.py",
205
- "openscvx/integrators/__init__.py",
206
- "openscvx/integrators/runge_kutta.py",
207
- "openscvx/integrations/base.py",
208
- "openscvx/integrations/mjx.py",
209
- "openscvx/integrations/frax.py",
210
- "openscvx/integrations/menagerie.py",
211
- "openscvx/integrations/_utils.py",
212
- "openscvx/integrations/__init__.py",
213
- "openscvx/expert/validation.py",
214
- "openscvx/expert/byof.py",
215
- "openscvx/expert/lowering.py",
216
- "openscvx/expert/__init__.py",
217
- "openscvx/discretization/base.py",
218
- "openscvx/discretization/linearize_discretize.py",
219
- "openscvx/discretization/linearize_discretize_sparse.py",
220
- "openscvx/discretization/__init__.py",
221
- "openscvx/discretization/discretize_linearize.py",
222
- "openscvx/discretization/sparse_utils/bcoo_helpers.py",
223
- "openscvx/discretization/sparse_utils/sparse_jacobian.py",
224
- "openscvx/discretization/sparse_utils/__init__.py",
225
- "scripts/gen_ref_pages.py",
226
- "scripts/gen_example_pages.py",
227
- "scripts/mkdocs_seo_hook.py",
228
- "scripts/mkdocs_copy_viser_client_hook.py",
229
- "examples/plotting.py",
230
- "examples/_viser_embed_export.py",
231
- "examples/plotting_viser.py",
232
- "examples/drone/cinema_vp.py",
233
- "examples/drone/obstacle_avoidance_vmap_2d.py",
234
- "examples/drone/dr_double_integrator.py",
235
- "examples/drone/obstacle_avoidance.py",
236
- "examples/drone/cinema_vp_nodal.py",
237
- "examples/drone/dr_vp.py",
238
- "examples/drone/dr_vp_polytope.py",
239
- "examples/drone/obstacle_avoidance_vmap.py",
240
- "examples/drone/boresight_trace_mpcc.py",
241
- "examples/drone/2d_obstacle_avoidance_batched_ic.py",
242
- "examples/drone/dr_vp_nodal.py",
243
- "examples/drone/obstacle_avoidance_nodal.py",
244
- "examples/drone/openscvx_logo.py",
245
- "examples/drone/drone_racing.py",
246
- "examples/drone/multi_agent_circle_swap.py",
247
- "examples/drone/drone_racing_batched_gates.py",
248
- "examples/drone/logo.py",
249
- "examples/drone/logo_utils/circle.svg",
250
- "examples/drone/logo_utils/svg_path_utils.py",
251
- "examples/drone/logo_utils/acl_logo.svg",
252
- "examples/drone/logo_utils/openscvx_logo_single.svg",
253
- "examples/drone/logo_utils/quadrotor_mesh.py",
254
- "examples/arm/franka_fr3v2_viewplanning_nodal.py",
255
- "examples/arm/7_dof_arm.py",
256
- "examples/arm/7_dof_arm_vp.py",
257
- "examples/arm/7_dof_arm_collision.py",
258
- "examples/arm/3_dof_arm.py",
259
- "examples/arm/franka_fr3v2_viewplanning.py",
260
- "examples/arm/franka_fr3v2_pick_place.py",
261
- "examples/spacecraft/let_transfer.py",
262
- "examples/spacecraft/proxops_cw.py",
263
- "examples/spacecraft/relative_loitering.py",
264
- "examples/spacecraft/halo_orbit.py",
265
- "examples/spacecraft/hohmann_transfer.py",
266
- "examples/abstract/brachistochrone.py",
267
- "examples/abstract/flappy_bird.py",
268
- "examples/abstract/brachistochrone_batched.py",
269
- "examples/abstract/impulsive.py",
270
- "examples/abstract/stl_integer_variable.py",
271
- "examples/abstract/stl_or.py",
272
- "examples/abstract/hypersensitive.py",
273
- "examples/animations/7_dof_arm.py",
274
- "examples/animations/dr_vp_polytope.py",
275
- "examples/animations/obstacle_avoidance_vmap.py",
276
- "examples/animations/_render.py",
277
- "examples/animations/_camera.py",
278
- "examples/animations/_sensor_view.py",
279
- "examples/animations/franka_fr3v2_pick_place.py",
280
- "examples/animations/logo.py",
281
- "examples/mpc/double_integrator_discrete.py",
282
- "examples/mpc/dubins_car_circle_analytical.py",
283
- "examples/mpc/double_integrator_drone_racing.py",
284
- "examples/mpc/dubins_car_circle_discrete.py",
285
- "examples/mpc/realtime_double_integrator_drone_racing.py",
286
- "examples/rocket/ascent_launch_vehicle.py",
287
- "examples/rocket/6DoF_pdg_batched_ic.py",
288
- "examples/rocket/3DoF_pdg.py",
289
- "examples/rocket/6DoF_pdg.py",
290
- "examples/frax/ur5e_pen_trace.py",
291
- "examples/frax/panda_frax_viewplanning.py",
292
- "examples/frax/panda_frax.py",
293
- "examples/frax/panda_frax_pick_place.py",
294
- "examples/frax/panda_frax_waypoint.py",
295
- "examples/frax/ur5e_assets/ur5e.urdf",
296
- "examples/realtime/obstacle_avoidance_realtime.py",
297
- "examples/realtime/dubins_car_realtime.py",
298
- "examples/realtime/3DoF_pdg_realtime.py",
299
- "examples/realtime/6DoF_pdg_realtime.py",
300
- "examples/realtime/drone_racing_realtime.py",
301
- "examples/realtime/cinema_vp_realtime.py",
302
- "examples/realtime/base_problems/6DoF_pdg_realtime_base.py",
303
- "examples/realtime/base_problems/cinema_vp_realtime_base.py",
304
- "examples/realtime/base_problems/obstacle_avoidance_realtime_base.py",
305
- "examples/realtime/base_problems/3DoF_pdg_realtime_base.py",
306
- "examples/realtime/base_problems/dubins_car_realtime_base.py",
307
- "examples/realtime/base_problems/drone_racing_realtime_base.py",
308
- "examples/car/dubins_car_waypoint_stl.py",
309
- "examples/car/dubins_car_obstacle_stl.py",
310
- "examples/car/dubins_car.py",
311
- "examples/car/dubins_car_obstacle_conditional.py",
312
- "examples/car/dubins_car_disjoint.py",
313
- "examples/car/dubins_car_stl_or.py",
314
- "examples/mjx/skydio_x2_mjx.py",
315
- "examples/mjx/double_cartpole_mjx.py",
316
- "examples/mjx/triple_cartpole_game.py",
317
- "examples/mjx/triple_cartpole_mjx.py",
318
- "examples/mjx/cartpole_mjx.py",
319
- "examples/mjx/triple_cartpole_3d_mjx.py",
320
- "examples/aircraft/dynamic_soaring.py",
321
- "examples/aircraft/supersonic_time_to_climb.py",
322
- "examples/double_integrator/moving_safe_zones.py",
323
- "examples/double_integrator/_plotting.py",
324
- "tests/test_optimization_results.py",
325
- "tests/conftest.py",
326
- "tests/test_plotting.py",
327
- "tests/test_discretization.py",
328
- "tests/test_results_parameters.py",
329
- "tests/hohmann_analytical.py",
330
- "tests/test_post_process_batched_tau_clamp.py",
331
- "tests/test_propagation.py",
332
- "tests/test_integrators.py",
333
- "tests/test_init.py",
334
- "tests/test_solve_batched_inference.py",
335
- "tests/test_autotuning.py",
336
- "tests/test_initialize_syncs_guesses.py",
337
- "tests/test_cvxpygen_optional.py",
338
- "tests/test_loader.py",
339
- "tests/test_examples.py",
340
- "tests/test_expert.py",
341
- "tests/brachistochrone_analytical.py",
342
- "tests/__init__.py",
343
- "tests/e2e/test_multishot_propagation.py",
344
- "tests/e2e/test_solve_jax_vmap_brachistochrone.py",
345
- "tests/e2e/test_impulsive.py",
346
- "tests/e2e/test_brachistochrone.py",
347
- "tests/e2e/test_solve_batched_brachistochrone.py",
348
- "tests/e2e/test_solve_jax_bare_brachistochrone.py",
349
- "tests/e2e/test_solve_jax_jit_brachistochrone.py",
350
- "tests/e2e/test_solve_jax_vmap_converged_no_drift.py",
351
- "tests/e2e/test_solve_batched_export_roundtrip.py",
352
- "tests/e2e/__init__.py",
353
- "tests/e2e/test_solve_batched_cvxpy_export_errors.py",
354
- "tests/fixtures/brachistochrone.yaml",
355
- "tests/fixtures/brachistochrone.json",
356
- "tests/solvers/test_iteration_callback_moreau.py",
357
- "tests/solvers/test_subproblem_pytree.py",
358
- "tests/solvers/test_iteration_callback_qpax.py",
359
- "tests/solvers/test_iteration_callback_vmap.py",
360
- "tests/solvers/test_moreau_ptr_solver.py",
361
- "tests/solvers/_iteration_callback_helpers.py",
362
- "tests/solvers/test_cvxpy_callback_jit_spike.py",
363
- "tests/solvers/test_iteration_callback_cvxpy.py",
364
- "tests/solvers/test_qpax_ptr_solver.py",
365
- "tests/solvers/__init__.py",
366
- "tests/symbolic/test_augmentation.py",
367
- "tests/symbolic/test_lower_latex.py",
368
- "tests/symbolic/test_lower_jax.py",
369
- "tests/symbolic/test_unified.py",
370
- "tests/symbolic/test_lower_cvxpy.py",
371
- "tests/symbolic/test_hashing.py",
372
- "tests/symbolic/test_latex_formulation.py",
373
- "tests/symbolic/test_preprocessing.py",
374
- "tests/symbolic/test_gmsr.py",
375
- "tests/symbolic/__init__.py",
376
- "tests/symbolic/test_sparsity.py",
377
- "tests/symbolic/parser/test_load.py",
378
- "tests/symbolic/parser/test_spatial.py",
379
- "tests/symbolic/parser/test_parser.py",
380
- "tests/symbolic/parser/test_lie.py",
381
- "tests/symbolic/parser/test_math.py",
382
- "tests/symbolic/parser/test_vmap.py",
383
- "tests/symbolic/parser/test_linalg.py",
384
- "tests/symbolic/parser/test_constraint.py",
385
- "tests/symbolic/parser/test_logic.py",
386
- "tests/symbolic/parser/test_stl.py",
387
- "tests/symbolic/parser/test_tokenizer.py",
388
- "tests/symbolic/parser/test_array.py",
389
- "tests/symbolic/parser/__init__.py",
390
- "tests/symbolic/expr/test_node_reference.py",
391
- "tests/symbolic/expr/test_spatial.py",
392
- "tests/symbolic/expr/test_lie.py",
393
- "tests/symbolic/expr/test_math.py",
394
- "tests/symbolic/expr/test_vmap.py",
395
- "tests/symbolic/expr/test_linalg.py",
396
- "tests/symbolic/expr/test_variable.py",
397
- "tests/symbolic/expr/test_constraint.py",
398
- "tests/symbolic/expr/test_parameters.py",
399
- "tests/symbolic/expr/test_logic.py",
400
- "tests/symbolic/expr/test_stl.py",
401
- "tests/symbolic/expr/test_scaling.py",
402
- "tests/symbolic/expr/test_array.py",
403
- "tests/symbolic/expr/test_arithmetic.py",
404
- "tests/symbolic/expr/test_expr.py",
405
- "tests/symbolic/expr/__init__.py",
406
- "tests/algorithms/test_algorithm_state_pytree.py",
407
- "tests/algorithms/test_make_solve_loop.py",
408
- "tests/algorithms/_iteration_helpers.py",
409
- "tests/algorithms/test_iteration_fn_jit.py",
410
- "tests/algorithms/test_iteration_fn_parity.py",
411
- "tests/algorithms/__init__.py",
412
- "tests/algorithms/autotuner/test_update_weights_jit.py",
413
- "tests/algorithms/autotuner/test_defaults_agreement.py",
414
- "tests/algorithms/autotuner/test_hyper_overrides.py",
415
- "tests/algorithms/autotuner/__init__.py",
416
- "tests/integrations/test_mjx.py",
417
- "tests/integrations/test_mjx_dynamics.py",
418
- "tests/integrations/__init__.py",
419
- "docs/llms.txt",
420
- "docs/changelog.md",
421
- "docs/versions.json",
422
- "docs/index.md",
423
- "docs/examples.md",
424
- "docs/installation.md",
425
- "docs/citation.md",
426
- "docs/javascripts/mathjax.js",
427
- "docs/Foundations/discretization.md",
428
- "docs/Foundations/constraint_reformulation.md",
429
- "docs/Foundations/ocp.md",
430
- "docs/Foundations/control_parameterization.md",
431
- "docs/Foundations/time_dilation.md",
432
- "docs/Foundations/scvx.md",
433
- "docs/assets/openscvx_logo_square.png",
434
- "docs/assets/favicon.png",
435
- "docs/assets/logo.svg",
436
- "docs/assets/viser-recordings/franka_fr3v2_pick_place.viser",
437
- "docs/assets/viser-recordings/drone_racing.viser",
438
- "docs/assets/images/ctcs_light.png",
439
- "docs/assets/images/ct-scvx_dark.png",
440
- "docs/assets/images/problem_class_dark.png",
441
- "docs/assets/images/ct-scvx_light.png",
442
- "docs/assets/images/ctcs_dark.png",
443
- "docs/assets/images/problem_class_light.png",
444
- "docs/assets/viser-client/index.html",
445
- "docs/UnderTheHood/lowering_architecture.md",
446
- "docs/UnderTheHood/vectorization_and_vmapping.md",
447
- "docs/UnderTheHood/batching_jit_grad.md",
448
- "docs/UnderTheHood/custom_algorithms_autotuners.md",
449
- "docs/UsersGuide/08_mpcc.md",
450
- "docs/UsersGuide/02_drone_racing_constraints.md",
451
- "docs/UsersGuide/04_viewpoint_constraints.md",
452
- "docs/UsersGuide/06_logic.md",
453
- "docs/UsersGuide/01_hello_world_brachistochrone.md",
454
- "docs/UsersGuide/03_obstacle_avoidance_vmap.md",
455
- "docs/UsersGuide/05_visualization.md",
456
- "docs/UsersGuide/00_introduction.md",
457
- "docs/UsersGuide/09_mjx_dynamics.md",
458
- "docs/UsersGuide/07_lie.md"
459
- ]
460
- }
@@ -1,8 +0,0 @@
1
- {
2
- "tag": "0.5.2",
3
- "distance": 44,
4
- "node": "gfbfcd124c4077336db63e483a3a192d8351bb7aa",
5
- "dirty": false,
6
- "branch": "main",
7
- "node_date": "2026-07-21"
8
- }