imt-ring 1.6.14__py3-none-any.whl → 1.6.16__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: imt-ring
3
- Version: 1.6.14
3
+ Version: 1.6.16
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
@@ -32,11 +32,11 @@ Requires-Dist: pytest-xdist ; extra == 'dev'
32
32
  Requires-Dist: nbmake ; extra == 'dev'
33
33
 
34
34
  <p align="center">
35
- <img src="https://raw.githubusercontent.com/SimiPixel/ring/main/docs/img/icon.svg" height="200" />
35
+ <img src="https://raw.githubusercontent.com/simon-bachhuber/ring/main/docs/img/icon.svg" height="200" />
36
36
  </p>
37
37
 
38
38
  # Recurrent Inertial Graph-based Estimator (RING)
39
- <img src="https://raw.githubusercontent.com/SimiPixel/ring/main/docs/img/coverage_badge.svg" height="20" />
39
+ <img src="https://raw.githubusercontent.com/simon-bachhuber/ring/main/docs/img/coverage_badge.svg" height="20" />
40
40
 
41
41
  ## Installation
42
42
 
@@ -6,7 +6,7 @@ ring/spatial.py,sha256=nmZ-UhRanhyM34bez8uCS4wMwaKqLkuEbgKGP5XNH60,2351
6
6
  ring/algorithms/__init__.py,sha256=IiK9EN5Xgs3dB075-A-H-Yad0Z7vzvKIJF2g6X_-C_8,1224
7
7
  ring/algorithms/_random.py,sha256=fc26yEQjSjtf0NluZ41CyeGIRci0ldrRlThueHR9H7U,14007
8
8
  ring/algorithms/dynamics.py,sha256=GOedL1STj6oXcXgMA7dB4PabvCQxPBbirJQhXBRuKqE,10929
9
- ring/algorithms/jcalc.py,sha256=bwfVH3qKEnUs6RFgEEeUBnecpBt-nf8cesJbNGDrE7g,28974
9
+ ring/algorithms/jcalc.py,sha256=Gi2fjZojwptEGT0ChVsZ_ktIfj_j9-3EjPKND7tuHxg,29020
10
10
  ring/algorithms/kinematics.py,sha256=DOboHI517Vx0pRJUFZtZPmK_qFaiKiQe-37B-M0aC-c,7422
11
11
  ring/algorithms/sensors.py,sha256=0xOzdQIc1kBF0CkoPXWWCx3MmV4SG3wj7knVnnMWq9M,18124
12
12
  ring/algorithms/custom_joints/__init__.py,sha256=fzeE7TdUhmGgbbFAyis1tKcyQ4Fo8LigDwD3hUVnH_w,316
@@ -16,7 +16,7 @@ ring/algorithms/custom_joints/suntay.py,sha256=tOEGM304XciHO4pmvxr4faA4xXVO4N2Hl
16
16
  ring/algorithms/generator/__init__.py,sha256=bF-CW3x2x-o6KWESKy-DuxzZPh3UNSjJb_MaAcSHGsQ,277
17
17
  ring/algorithms/generator/base.py,sha256=vxUdA0ZeSNH3SOanL51qVRvCiJrmsWQyQX0g2fdm3Rg,15825
18
18
  ring/algorithms/generator/batch.py,sha256=9yFxVv11hij-fJXGPxA3zEh1bE2_jrZk0R7kyGaiM5c,2551
19
- ring/algorithms/generator/finalize_fns.py,sha256=559sGXs06n46p-eme0SE8hn0lXwGT0P2r3-52ElTldo,9861
19
+ ring/algorithms/generator/finalize_fns.py,sha256=_Ao5ASfY53sNRw2hEBlvpvr55xmcA6BqAoQBR04BWEE,9987
20
20
  ring/algorithms/generator/motion_artifacts.py,sha256=2VJbldVDbI3PSyboshIbtYvSAKzBBwGV7cQfYjqvluM,9167
21
21
  ring/algorithms/generator/pd_control.py,sha256=XJ_Gd5AkIRh-jBrMfQyMXjVwhx2gCNHznjzFbmAwhZs,5767
22
22
  ring/algorithms/generator/setup_fns.py,sha256=MFz3czHBeWs1Zk1A8O02CyQpQ-NCyW9PMpbqmKit6es,1455
@@ -55,8 +55,8 @@ ring/ml/base.py,sha256=lfwEZLBDglOSRWChUHoH1kezefhttPV9TMEpNIqsMNw,9972
55
55
  ring/ml/callbacks.py,sha256=W19QF6_uvaNCjs8ObsjNXD7mv9gFgJBixdRSbB_BynE,13301
56
56
  ring/ml/ml_utils.py,sha256=1GXJfeoXbwCbRdYA2np3CbJpSupaw4eyf3quh9y4BO0,6462
57
57
  ring/ml/optimizer.py,sha256=fWyF__ezUltrA16SLfOC1jvS3zBh9NJsMYa6-V0frhs,4709
58
- ring/ml/ringnet.py,sha256=Tb2WJ_cc5L3mk1lo0NOfkpXIzJZXf4PJ5aLPtHQyUmY,8650
59
- ring/ml/rnno_v1.py,sha256=pciltx7dR_yhFv2g8BvfV0VPgKm0HxXDxL2YjBPBaKQ,1400
58
+ ring/ml/ringnet.py,sha256=mef7jyN2QcApJmQGH3HYZyTV-00q8YpsYOKhW0-ku1k,8973
59
+ ring/ml/rnno_v1.py,sha256=2qE08OIvTJ5PvSxKpYGzGSrvEImWrdAT_qslZ7jP5tA,1372
60
60
  ring/ml/train.py,sha256=huUfMK6eotS6BRrQKoZ-AUG0um3jlqpfQFZNJT8LKiE,10854
61
61
  ring/ml/training_loop.py,sha256=CEokvPQuuk_WCd-J60ZDodJYcPVvyxLfgXDr_DnbzRI,3359
62
62
  ring/ml/params/0x13e3518065c21cd8.pickle,sha256=Zh2k1zK-TNxJl5F7nyTeQ9001qqRE_dfvaq1HWV287A,9355838
@@ -84,7 +84,7 @@ ring/utils/randomize_sys.py,sha256=G_vBIo0OwQkXL2u0djwbaoaeb02C4LQCTNNloOYIU2M,3
84
84
  ring/utils/utils.py,sha256=tJaWXLGOTwkxJQj2l23dX97wO3aZYhM2qd7eNuMRs84,6907
85
85
  ring/utils/register_gym_envs/__init__.py,sha256=PtPIRBQJ16339xZ9G9VpvqrvcGbQ_Pk_SUz4tQPa9nQ,94
86
86
  ring/utils/register_gym_envs/saddle.py,sha256=tA5CyW_akSXyDm0xJ83CtOrUMVElH0f9vZtEDDJQalI,4422
87
- imt_ring-1.6.14.dist-info/METADATA,sha256=ZWWkJ_qO8O2KkW1m_HnXoz22H7ivmg7Qk4j7hEIgy9k,3821
88
- imt_ring-1.6.14.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
89
- imt_ring-1.6.14.dist-info/top_level.txt,sha256=EiT790-lAyi8iwTzJArH3f2k77rwhDn00q-4PlmvDQo,5
90
- imt_ring-1.6.14.dist-info/RECORD,,
87
+ imt_ring-1.6.16.dist-info/METADATA,sha256=uD0Ot4vDRqXVKrs0Chy9uHk2omhEk8FowBtjfLJGnXg,3833
88
+ imt_ring-1.6.16.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
89
+ imt_ring-1.6.16.dist-info/top_level.txt,sha256=EiT790-lAyi8iwTzJArH3f2k77rwhDn00q-4PlmvDQo,5
90
+ imt_ring-1.6.16.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.1.0)
2
+ Generator: setuptools (75.3.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -182,13 +182,16 @@ class DynamicalSimulation:
182
182
 
183
183
  @staticmethod
184
184
  def assert_test_system(sys: base.System) -> None:
185
- "test that system has no zero mass bodies and no joints without damping"
185
+ "test that system has no zero mass leaf bodies and no joints without damping"
186
186
 
187
187
  def f(_, __, n, m, d):
188
- assert d.size == 0 or m > 0, (
189
- "Dynamic simulation is set to `True` which requires masses >= 0, "
190
- f"but found body `{n}` with mass={float(m[0])}. This can lead to NaNs."
191
- )
188
+ is_leaf_body = len(sys.children(n)) == 0
189
+ if is_leaf_body:
190
+ assert d.size == 0 or m > 0, (
191
+ "Dynamic simulation is set to `True` which requires masses >= 0, "
192
+ f"but found body `{n}` with mass={float(m[0])}. This can lead to "
193
+ "NaNs."
194
+ )
192
195
 
193
196
  assert d.size == 0 or all(d > 0.0), (
194
197
  "Dynamic simulation is set to `True` which requires dampings > 0, "
ring/algorithms/jcalc.py CHANGED
@@ -222,7 +222,9 @@ def _is_feasible_config1(c: MotionConfig) -> bool:
222
222
  def inside_box_checks(x_min, x_max, x0_min, x0_max) -> bool:
223
223
  return (x0_min >= x_min) and (x0_max <= x_max)
224
224
 
225
- cond2 = inside_box_checks(c.pos_min, c.pos_max, c.pos0_min, c.pos0_max)
225
+ cond2 = inside_box_checks(
226
+ _to_float(c.pos_min, 0.0), _to_float(c.pos_max, 0.0), c.pos0_min, c.pos0_max
227
+ )
226
228
 
227
229
  return cond1 and cond2
228
230
 
ring/ml/ringnet.py CHANGED
@@ -87,6 +87,7 @@ def make_ring(
87
87
  link_output_normalize: bool = True,
88
88
  link_output_transform: Optional[Callable] = None,
89
89
  layernorm: bool = True,
90
+ layernorm_trainable: bool = True,
90
91
  ) -> SimpleNamespace:
91
92
 
92
93
  if link_output_normalize:
@@ -104,7 +105,11 @@ def make_ring(
104
105
  )
105
106
 
106
107
  inner_cell = StackedRNNCell(
107
- celltype, hidden_state_dim, stack_rnn_cells, layernorm=layernorm
108
+ celltype,
109
+ hidden_state_dim,
110
+ stack_rnn_cells,
111
+ layernorm=layernorm,
112
+ layernorm_trainable=layernorm_trainable,
108
113
  )
109
114
  send_output = hk.nets.MLP([hidden_state_dim, link_output_dim])
110
115
  state = hk.get_state(
@@ -143,6 +148,7 @@ class StackedRNNCell(hk.Module):
143
148
  hidden_state_dim,
144
149
  stacks: int,
145
150
  layernorm: bool = False,
151
+ layernorm_trainable: bool = True,
146
152
  name: str | None = None,
147
153
  ):
148
154
  super().__init__(name)
@@ -150,6 +156,7 @@ class StackedRNNCell(hk.Module):
150
156
 
151
157
  self.cells = [cell(hidden_state_dim) for _ in range(stacks)]
152
158
  self.layernorm = layernorm
159
+ self.layernorm_trainable = layernorm_trainable
153
160
 
154
161
  def __call__(self, x, state):
155
162
  output = x
@@ -159,7 +166,9 @@ class StackedRNNCell(hk.Module):
159
166
  next_state.append(next_state_i)
160
167
 
161
168
  if self.layernorm:
162
- output = hk.LayerNorm(-1, True, True)(output)
169
+ output = hk.LayerNorm(
170
+ -1, self.layernorm_trainable, self.layernorm_trainable
171
+ )(output)
163
172
 
164
173
  return output, jnp.stack(next_state)
165
174
 
@@ -175,7 +184,7 @@ class LSTM(hk.RNNCore):
175
184
  prev_state: jax.Array,
176
185
  ):
177
186
  if len(inputs.shape) > 2 or not inputs.shape:
178
- raise ValueError("LSTM input must be rank-1 or rank-2.")
187
+ raise ValueError(f"LSTM input must be rank-1 or rank-2; not {inputs.shape}")
179
188
  prev_state_h = prev_state[: self.hidden_size]
180
189
  prev_state_c = prev_state[self.hidden_size :]
181
190
  x_and_h = jnp.concatenate([inputs, prev_state_h], axis=-1)
ring/ml/rnno_v1.py CHANGED
@@ -33,13 +33,12 @@ def rnno_v1_forward_factory(
33
33
  @hk.transform_with_state
34
34
  def forward_fn(X):
35
35
  assert X.shape[-2] == 1
36
+ X = X[..., 0, :]
36
37
 
37
38
  for i, n_units in enumerate(rnn_layers):
38
- state = hk.get_state(
39
- f"rnn_{i}", shape=[1, n_units * _factor], init=jnp.zeros
40
- )
41
- X, state = hk.dynamic_unroll(_cell(n_units), X[..., 0, :], state[0])
42
- hk.set_state(f"rnn_{i}", state[None])
39
+ state = hk.get_state(f"rnn_{i}", shape=[n_units * _factor], init=jnp.zeros)
40
+ X, state = hk.dynamic_unroll(_cell(n_units), X, state)
41
+ hk.set_state(f"rnn_{i}", state)
43
42
 
44
43
  if layernorm:
45
44
  X = hk.LayerNorm(axis=-1, create_scale=False, create_offset=False)(X)