imt-ring 1.3.4__tar.gz → 1.3.5__tar.gz

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.
Files changed (109) hide show
  1. {imt_ring-1.3.4 → imt_ring-1.3.5}/PKG-INFO +1 -1
  2. {imt_ring-1.3.4 → imt_ring-1.3.5}/pyproject.toml +1 -1
  3. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/imt_ring.egg-info/PKG-INFO +1 -1
  4. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/algorithms/_random.py +34 -19
  5. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/algorithms/custom_joints/suntay.py +19 -7
  6. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/algorithms/generator/batch.py +3 -1
  7. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/algorithms/jcalc.py +2 -2
  8. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/base.py +9 -1
  9. {imt_ring-1.3.4 → imt_ring-1.3.5}/readme.md +0 -0
  10. {imt_ring-1.3.4 → imt_ring-1.3.5}/setup.cfg +0 -0
  11. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/imt_ring.egg-info/SOURCES.txt +0 -0
  12. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/imt_ring.egg-info/dependency_links.txt +0 -0
  13. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/imt_ring.egg-info/requires.txt +0 -0
  14. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/imt_ring.egg-info/top_level.txt +0 -0
  15. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/__init__.py +0 -0
  16. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/algebra.py +0 -0
  17. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/algorithms/__init__.py +0 -0
  18. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/algorithms/custom_joints/__init__.py +0 -0
  19. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/algorithms/custom_joints/rr_imp_joint.py +0 -0
  20. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/algorithms/custom_joints/rr_joint.py +0 -0
  21. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/algorithms/dynamics.py +0 -0
  22. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/algorithms/generator/__init__.py +0 -0
  23. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/algorithms/generator/base.py +0 -0
  24. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/algorithms/generator/motion_artifacts.py +0 -0
  25. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/algorithms/generator/pd_control.py +0 -0
  26. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/algorithms/generator/randomize.py +0 -0
  27. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/algorithms/generator/transforms.py +0 -0
  28. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/algorithms/generator/types.py +0 -0
  29. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/algorithms/kinematics.py +0 -0
  30. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/algorithms/sensors.py +0 -0
  31. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/io/__init__.py +0 -0
  32. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/io/examples/branched.xml +0 -0
  33. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/io/examples/exclude/knee_trans_dof.xml +0 -0
  34. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/io/examples/exclude/standard_sys.xml +0 -0
  35. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/io/examples/exclude/standard_sys_rr_imp.xml +0 -0
  36. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/io/examples/inv_pendulum.xml +0 -0
  37. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/io/examples/knee_flexible_imus.xml +0 -0
  38. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/io/examples/spherical_stiff.xml +0 -0
  39. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/io/examples/symmetric.xml +0 -0
  40. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/io/examples/test_all_1.xml +0 -0
  41. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/io/examples/test_all_2.xml +0 -0
  42. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/io/examples/test_ang0_pos0.xml +0 -0
  43. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/io/examples/test_control.xml +0 -0
  44. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/io/examples/test_double_pendulum.xml +0 -0
  45. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/io/examples/test_free.xml +0 -0
  46. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/io/examples/test_kinematics.xml +0 -0
  47. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/io/examples/test_morph_system/four_seg_seg1.xml +0 -0
  48. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/io/examples/test_morph_system/four_seg_seg3.xml +0 -0
  49. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/io/examples/test_randomize_position.xml +0 -0
  50. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/io/examples/test_sensors.xml +0 -0
  51. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/io/examples/test_three_seg_seg2.xml +0 -0
  52. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/io/examples.py +0 -0
  53. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/io/test_examples.py +0 -0
  54. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/io/xml/__init__.py +0 -0
  55. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/io/xml/abstract.py +0 -0
  56. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/io/xml/from_xml.py +0 -0
  57. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/io/xml/test_from_xml.py +0 -0
  58. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/io/xml/test_to_xml.py +0 -0
  59. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/io/xml/to_xml.py +0 -0
  60. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/maths.py +0 -0
  61. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/ml/__init__.py +0 -0
  62. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/ml/base.py +0 -0
  63. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/ml/callbacks.py +0 -0
  64. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/ml/ml_utils.py +0 -0
  65. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/ml/optimizer.py +0 -0
  66. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/ml/params/0x13e3518065c21cd8.pickle +0 -0
  67. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/ml/ringnet.py +0 -0
  68. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/ml/train.py +0 -0
  69. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/ml/training_loop.py +0 -0
  70. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/rendering/__init__.py +0 -0
  71. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/rendering/base_render.py +0 -0
  72. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/rendering/mujoco_render.py +0 -0
  73. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/rendering/vispy_render.py +0 -0
  74. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/rendering/vispy_visuals.py +0 -0
  75. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/sim2real/__init__.py +0 -0
  76. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/sim2real/sim2real.py +0 -0
  77. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/spatial.py +0 -0
  78. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/sys_composer/__init__.py +0 -0
  79. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/sys_composer/delete_sys.py +0 -0
  80. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/sys_composer/inject_sys.py +0 -0
  81. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/sys_composer/morph_sys.py +0 -0
  82. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/utils/__init__.py +0 -0
  83. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/utils/batchsize.py +0 -0
  84. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/utils/colab.py +0 -0
  85. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/utils/hdf5.py +0 -0
  86. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/utils/normalizer.py +0 -0
  87. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/utils/path.py +0 -0
  88. {imt_ring-1.3.4 → imt_ring-1.3.5}/src/ring/utils/utils.py +0 -0
  89. {imt_ring-1.3.4 → imt_ring-1.3.5}/tests/test_algebra.py +0 -0
  90. {imt_ring-1.3.4 → imt_ring-1.3.5}/tests/test_base.py +0 -0
  91. {imt_ring-1.3.4 → imt_ring-1.3.5}/tests/test_custom_joints.py +0 -0
  92. {imt_ring-1.3.4 → imt_ring-1.3.5}/tests/test_dynamics.py +0 -0
  93. {imt_ring-1.3.4 → imt_ring-1.3.5}/tests/test_generator.py +0 -0
  94. {imt_ring-1.3.4 → imt_ring-1.3.5}/tests/test_jcalc.py +0 -0
  95. {imt_ring-1.3.4 → imt_ring-1.3.5}/tests/test_jit.py +0 -0
  96. {imt_ring-1.3.4 → imt_ring-1.3.5}/tests/test_kinematics.py +0 -0
  97. {imt_ring-1.3.4 → imt_ring-1.3.5}/tests/test_maths.py +0 -0
  98. {imt_ring-1.3.4 → imt_ring-1.3.5}/tests/test_ml_utils.py +0 -0
  99. {imt_ring-1.3.4 → imt_ring-1.3.5}/tests/test_motion_artifacts.py +0 -0
  100. {imt_ring-1.3.4 → imt_ring-1.3.5}/tests/test_pd_control.py +0 -0
  101. {imt_ring-1.3.4 → imt_ring-1.3.5}/tests/test_random.py +0 -0
  102. {imt_ring-1.3.4 → imt_ring-1.3.5}/tests/test_randomize.py +0 -0
  103. {imt_ring-1.3.4 → imt_ring-1.3.5}/tests/test_rcmg.py +0 -0
  104. {imt_ring-1.3.4 → imt_ring-1.3.5}/tests/test_render.py +0 -0
  105. {imt_ring-1.3.4 → imt_ring-1.3.5}/tests/test_sensors.py +0 -0
  106. {imt_ring-1.3.4 → imt_ring-1.3.5}/tests/test_sim2real.py +0 -0
  107. {imt_ring-1.3.4 → imt_ring-1.3.5}/tests/test_sys_composer.py +0 -0
  108. {imt_ring-1.3.4 → imt_ring-1.3.5}/tests/test_train.py +0 -0
  109. {imt_ring-1.3.4 → imt_ring-1.3.5}/tests/test_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: imt-ring
3
- Version: 1.3.4
3
+ Version: 1.3.5
4
4
  Summary: RING: Recurrent Inertial Graph-based Estimator
5
5
  Author-email: Simon Bachhuber <simon.bachhuber@fau.de>
6
6
  Project-URL: Homepage, https://github.com/SimiPixel/ring
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "imt-ring"
7
- version = "1.3.4"
7
+ version = "1.3.5"
8
8
  authors = [
9
9
  { name="Simon Bachhuber", email="simon.bachhuber@fau.de" },
10
10
  ]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: imt-ring
3
- Version: 1.3.4
3
+ Version: 1.3.5
4
4
  Summary: RING: Recurrent Inertial Graph-based Estimator
5
5
  Author-email: Simon Bachhuber <simon.bachhuber@fau.de>
6
6
  Project-URL: Homepage, https://github.com/SimiPixel/ring
@@ -4,6 +4,7 @@ import warnings
4
4
  import jax
5
5
  from jax import random
6
6
  import jax.numpy as jnp
7
+
7
8
  from ring import maths
8
9
 
9
10
  Float = jax.Array
@@ -40,20 +41,20 @@ def random_angle_over_time(
40
41
  def body_fn_outer(val):
41
42
  i, t, phi, key_t, key_ang, ANG = val
42
43
 
43
- key_t, consume = random.split(key_t)
44
- dt = random.uniform(consume, minval=t_min, maxval=_to_float(t_max, t))
45
-
46
- key_ang, consume = random.split(key_ang)
47
- phi = _resolve_range_of_motion(
44
+ key_t, consume_t = random.split(key_t)
45
+ key_ang, consume_ang = random.split(key_ang)
46
+ dt, phi = _resolve_range_of_motion(
48
47
  range_of_motion,
49
48
  range_of_motion_method,
50
49
  _to_float(dang_min, t),
51
50
  _to_float(dang_max, t),
52
51
  _to_float(delta_ang_min, t),
53
52
  _to_float(delta_ang_max, t),
54
- dt,
53
+ t_min,
54
+ _to_float(t_max, t),
55
55
  phi,
56
- consume,
56
+ consume_t,
57
+ consume_ang,
57
58
  max_iter,
58
59
  )
59
60
  t += dt
@@ -246,12 +247,14 @@ def _resolve_range_of_motion(
246
247
  dang_max,
247
248
  delta_ang_min,
248
249
  delta_ang_max,
249
- dt,
250
+ t_min,
251
+ t_max,
250
252
  prev_phi,
251
- key,
253
+ key_t,
254
+ key_ang,
252
255
  max_iter,
253
256
  ):
254
- def _next_phi(key):
257
+ def _next_phi(key, dt):
255
258
  key, consume = random.split(key)
256
259
 
257
260
  if range_of_motion:
@@ -294,21 +297,33 @@ def _resolve_range_of_motion(
294
297
  return prev_phi + sign * dphi
295
298
 
296
299
  def body_fn(val):
297
- key, _, i = val
298
- key, consume = jax.random.split(key)
299
- next_phi = _next_phi(consume)
300
- return key, next_phi, i + 1
300
+ key_t, key_ang, _, _, i = val
301
+
302
+ key_t, consume_t = jax.random.split(key_t)
303
+ dt = jax.random.uniform(consume_t, minval=t_min, maxval=t_max)
304
+
305
+ key_ang, consume_ang = jax.random.split(key_ang)
306
+ next_phi = _next_phi(consume_ang, dt)
307
+
308
+ return key_t, key_ang, dt, next_phi, i + 1
301
309
 
302
310
  def cond_fn(val):
303
- _, next_phi, i = val
311
+ *_, dt, next_phi, i = val
304
312
  delta_phi = jnp.abs(next_phi - prev_phi)
305
- # delta is in bounds
306
- break_if_true1 = (delta_phi >= delta_ang_min) & (delta_phi <= delta_ang_max)
313
+ # delta_ang is in bounds
314
+ cond_delta_ang = (delta_phi >= delta_ang_min) & (delta_phi <= delta_ang_max)
315
+ # dang is in bounds
316
+ dang = delta_phi / dt
317
+ cond_dang = (dang >= dang_min) & (dang <= dang_max)
318
+
319
+ break_if_true1 = jnp.logical_and(cond_delta_ang, cond_dang)
320
+ # break out of loop
307
321
  break_if_true2 = i > max_iter
308
322
  return (i == 0) | (jnp.logical_not(break_if_true1 | break_if_true2))
309
323
 
310
- # the `prev_phi` here is unused
311
- return jax.lax.while_loop(cond_fn, body_fn, (key, prev_phi, 0))[1]
324
+ init_val = (key_t, key_ang, 1.0, prev_phi, 0)
325
+ *_, dt, next_phi, _ = jax.lax.while_loop(cond_fn, body_fn, init_val)
326
+ return dt, next_phi
312
327
 
313
328
 
314
329
  def cosInterpolate(x, xp, fp):
@@ -296,11 +296,17 @@ def register_suntay(sconfig: SuntayConfig, name: str = "suntay"):
296
296
  def Polynomial_DrawnFnPair(
297
297
  order: int = 2,
298
298
  center: bool = False,
299
- flexion_center: Optional[float] = None,
299
+ flexion_center_deg: Optional[float] = None,
300
300
  include_bias: bool = True,
301
+ enable_scale_delta: bool = True,
301
302
  ) -> DrawnFnPairFactory:
302
303
  assert not (order == 0 and not include_bias)
303
304
 
305
+ flexion_center = (
306
+ jnp.deg2rad(flexion_center_deg) if flexion_center_deg is not None else None
307
+ )
308
+ del flexion_center_deg
309
+
304
310
  # because 0-th order is also counted
305
311
  order += 1
306
312
  powers = jnp.arange(order) if include_bias else jnp.arange(1, order)
@@ -316,13 +322,18 @@ def Polynomial_DrawnFnPair(
316
322
 
317
323
  if flexion_center is None:
318
324
  flexion_center = (flexion_mn + flexion_mx) / 2
325
+
326
+ if (order - 1) == 0:
327
+ method = "clip"
328
+ minval, maxval = mn, mx
319
329
  else:
320
- flexion_center = jnp.array(flexion_center)
330
+ method = "minmax"
331
+ minval, maxval = -1.0, 1.0
321
332
 
322
333
  def init(key):
323
334
  c1, c2, c3 = jax.random.split(key, 3)
324
335
  poly_factors = jax.random.uniform(
325
- c1, shape=(len(powers),), minval=-1.0, maxval=1.0
336
+ c1, shape=(len(powers),), minval=minval, maxval=maxval
326
337
  )
327
338
  q0 = jax.random.uniform(c2, minval=flexion_mn, maxval=flexion_mx)
328
339
  values = jax.vmap(_apply_poly_factors, in_axes=(None, 0))(
@@ -330,16 +341,17 @@ def Polynomial_DrawnFnPair(
330
341
  )
331
342
  eps = 1e-6
332
343
  amin, amax = jnp.min(values), jnp.max(values) + eps
333
- delta = amax - amin
334
- scale_delta = jnp.clip(jax.random.normal(c3) + 0.5, 1.0)
335
- amax = amin + delta * scale_delta
344
+ if enable_scale_delta:
345
+ delta = amax - amin
346
+ scale_delta = jnp.clip(jax.random.normal(c3) + 0.5, 1.0)
347
+ amax = amin + delta * scale_delta
336
348
  return amin, amax, poly_factors, q0
337
349
 
338
350
  def _apply(params, q):
339
351
  amin, amax, poly_factors, q0 = params
340
352
  q = q - q0
341
353
  value = _apply_poly_factors(poly_factors, q)
342
- return restrict(value, mn, mx, amin, amax)
354
+ return restrict(value, mn, mx, amin, amax, method=method)
343
355
 
344
356
  if center:
345
357
 
@@ -97,8 +97,10 @@ def batch_generators_eager_to_list(
97
97
  for _ in range(n_calls):
98
98
  key, consume = jax.random.split(key)
99
99
  sample = gen_jit(consume)
100
- # converts also to numpy
100
+ # converts also to numpy; but with np.array.flags.writeable = False
101
101
  sample = jax.device_get(sample)
102
+ # this then sets this flag to True
103
+ sample = jax.tree_map(np.array, sample)
102
104
  data.extend([jax.tree_map(lambda a: a[i], sample) for i in range(size)])
103
105
 
104
106
  return data
@@ -424,14 +424,14 @@ def _draw_rxyz(
424
424
  # TODO, delete these args and pass a modifified `config` with `replace` instead
425
425
  enable_range_of_motion: bool = True,
426
426
  free_spherical: bool = False,
427
+ # how often it should try to fullfill the dang_min/max and delta_ang_min/max conds
428
+ max_iter: int = 5,
427
429
  ) -> jax.Array:
428
430
  key_value, consume = jax.random.split(key_value)
429
431
  ANG_0 = jax.random.uniform(consume, minval=config.ang0_min, maxval=config.ang0_max)
430
432
  # `random_angle_over_time` always returns wrapped angles, thus it would be
431
433
  # inconsistent to allow an initial value that is not wrapped
432
434
  ANG_0 = maths.wrap_to_pi(ANG_0)
433
- # only used for `delta_ang_min_max` logic
434
- max_iter = 5
435
435
  return _random.random_angle_over_time(
436
436
  key_t,
437
437
  key_value,
@@ -573,6 +573,8 @@ class System(_Base):
573
573
  new_zero: Optional[jax.Array] = None,
574
574
  ):
575
575
  "By default damping, stiffness are set to zero."
576
+ from ring.algorithms import get_joint_model
577
+
576
578
  q_size, qd_size = Q_WIDTHS[new_joint_type], QD_WIDTHS[new_joint_type]
577
579
 
578
580
  def logic_unfreeze_to_spherical(link_name, olt, ola, old, ols, olz):
@@ -594,7 +596,13 @@ class System(_Base):
594
596
 
595
597
  return nlt, nla, nld, nls, nlz
596
598
 
597
- return _update_sys_if_replace_joint_type(self, logic_unfreeze_to_spherical)
599
+ sys = _update_sys_if_replace_joint_type(self, logic_unfreeze_to_spherical)
600
+
601
+ jm = get_joint_model(new_joint_type)
602
+ if jm.init_joint_params is not None:
603
+ sys = sys.from_str(sys.to_str())
604
+
605
+ return sys
598
606
 
599
607
  def findall_imus(self) -> list[str]:
600
608
  return [name for name in self.link_names if name[:3] == "imu"]
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes