From f6821809cb20273eeaa46af642af41dc634bc2a8 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Wed, 22 May 2024 03:17:15 +0000 Subject: [PATCH 01/17] feat: created new default humanoid environment class implementing brax and mjx --- sim/mjx_gym/__init__.py | 0 sim/mjx_gym/envs/__init__.py | 9 ++ sim/mjx_gym/envs/default_humanoid/__init__.py | 0 .../envs/default_humanoid/default_humanoid.py | 131 ++++++++++++++++++ sim/mjx_gym/envs/default_humanoid/rewards.py | 88 ++++++++++++ sim/mjx_gym/train.py | 0 sim/requirements-dev.txt | 3 + 7 files changed, 231 insertions(+) create mode 100644 sim/mjx_gym/__init__.py create mode 100644 sim/mjx_gym/envs/__init__.py create mode 100644 sim/mjx_gym/envs/default_humanoid/__init__.py create mode 100644 sim/mjx_gym/envs/default_humanoid/default_humanoid.py create mode 100644 sim/mjx_gym/envs/default_humanoid/rewards.py create mode 100644 sim/mjx_gym/train.py diff --git a/sim/mjx_gym/__init__.py b/sim/mjx_gym/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/sim/mjx_gym/envs/__init__.py b/sim/mjx_gym/envs/__init__.py new file mode 100644 index 00000000..2363654b --- /dev/null +++ b/sim/mjx_gym/envs/__init__.py @@ -0,0 +1,9 @@ + +from .default_humanoid.default_humanoid import DefaultHumanoidEnv + +envs = { + "default_humanoid": DefaultHumanoidEnv +} + +def get_env(name: str): + return envs[name] \ No newline at end of file diff --git a/sim/mjx_gym/envs/default_humanoid/__init__.py b/sim/mjx_gym/envs/default_humanoid/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/sim/mjx_gym/envs/default_humanoid/default_humanoid.py b/sim/mjx_gym/envs/default_humanoid/default_humanoid.py new file mode 100644 index 00000000..98aa90c3 --- /dev/null +++ b/sim/mjx_gym/envs/default_humanoid/default_humanoid.py @@ -0,0 +1,131 @@ + +import jax +import jax.numpy as jp +from brax.envs.base import PipelineEnv, State +from brax.mjx.base import State as mjxState +from brax.io import mjcf +import mujoco +from mujoco import mjx +from etils import epath +from rewards import get_reward_fn + +DEFAULT_REWARD_PARAMS = { + 'forward_reward': {'weight': 1.25}, + 'healthy_reward': {'weight': 5.0, 'healthy_z_lower': 1.0, 'healthy_z_upper': 2.0}, + 'ctrl_cost': {'weight': 0.1} +} + +class DefaultHumanoidEnv(PipelineEnv): + """ + An environment for humanoid body position, velocities, and angles. + """ + def __init__( + self, + reward_params=DEFAULT_REWARD_PARAMS, + terminate_when_unhealthy=True, + reset_noise_scale=1e-2, + exclude_current_positions_from_observation=True, + log_reward_breakdown=True, + **kwargs, + ): + path = epath.Path(epath.resource_path('mujoco')) / ('mjx/test_data/humanoid') + mj_model = mujoco.MjModel.from_xml_path((path / 'humanoid.xml').as_posix()) # type: ignore + mj_model.opt.solver = mujoco.mjtSolver.mjSOL_CG # type: ignore # TODO: not sure why typing is not working here + mj_model.opt.iterations = 6 + mj_model.opt.ls_iterations = 6 + + sys = mjcf.load_model(mj_model) + + physics_steps_per_control_step = 4 # Should find way to perturb this value in the future + kwargs['n_frames'] = kwargs.get('n_frames', physics_steps_per_control_step) + kwargs['backend'] = 'mjx' + + super().__init__(sys, **kwargs) + + self._reward_params = reward_params + self._terminate_when_unhealthy = terminate_when_unhealthy + self._reset_noise_scale = reset_noise_scale + self._exclude_current_positions_from_observation = (exclude_current_positions_from_observation) + self._log_reward_breakdown = log_reward_breakdown + + self.reward_fn = get_reward_fn(self._reward_params, self.dt, include_reward_breakdown=True) + + def reset(self, rng: jp.ndarray) -> State: + """Resets the environment to an initial state.""" + rng, rng1, rng2 = jax.random.split(rng, 3) + + low, hi = -self._reset_noise_scale, self._reset_noise_scale + qpos = self.sys.qpos0 + jax.random.uniform(rng1, (self.sys.nq,), minval=low, maxval=hi) + qvel = jax.random.uniform(rng2, (self.sys.nv,), minval=low, maxval=hi) + + mjx_state = self.pipeline_init(qpos, qvel) + assert type(mjx_state) == mjxState, f'mjx_state is of type {type(mjx_state)}' + + obs = self._get_obs(mjx_state, jp.zeros(self.sys.nu)) + reward, done, zero = jp.zeros(3) + metrics = { + 'x_position': zero, + 'y_position': zero, + 'distance_from_origin': zero, + 'x_velocity': zero, + 'y_velocity': zero, + } + for key in self._reward_params.keys(): + metrics[key] = zero + + return State(mjx_state, obs, reward, done, metrics) + + def step(self, state: State, action: jp.ndarray) -> State: + """Runs one timestep of the environment's dynamics.""" + mjx_state = state.pipeline_state + assert mjx_state, 'state.pipeline_state was recorded as None' + # TODO: determine whether to raise an error or reset the environment + + next_mjx_state = self.pipeline_step(mjx_state, action) + + assert type(next_mjx_state) == mjxState, f'next_mjx_state is of type {type(next_mjx_state)}' + assert type(mjx_state) == mjxState, f'mjx_state is of type {type(mjx_state)}' + # mlutz: from what I've seen, .pipeline_state and .pipeline_step(...) actually return an brax.mjx.base.State object + # however, the type hinting suggests that it should return a brax.base.State object + # brax.mjx.base.State inherits from brax.base.State but also inherits from mjx.Data, which is needed for some rewards + + obs = self._get_obs(mjx_state, action) + reward, is_healthy, reward_breakdown = self.reward_fn(mjx_state, action, next_mjx_state) + + if self._terminate_when_unhealthy: + done = jp.logical_not(is_healthy) + else: + done = jp.array(False) + + state.metrics.update( + x_position=next_mjx_state.subtree_com[1][0], + y_position=next_mjx_state.subtree_com[1][1], + distance_from_origin=jp.linalg.norm(next_mjx_state.subtree_com[1]), + x_velocity=(next_mjx_state.subtree_com[1][0] - mjx_state.subtree_com[1][0]) / self.dt, + y_velocity=(next_mjx_state.subtree_com[1][1] - mjx_state.subtree_com[1][1]) / self.dt + ) + + if self._log_reward_breakdown: + for key, val in reward_breakdown.items(): + state.metrics[key] = val + + return state.replace( # type: ignore # TODO: fix the type hinting... + pipeline_state=next_mjx_state, obs=obs, reward=reward, done=done + ) + + def _get_obs( + self, data: mjxState, action: jp.ndarray + ) -> jp.ndarray: + """Observes humanoid body position, velocities, and angles.""" + position = data.qpos + if self._exclude_current_positions_from_observation: + position = position[2:] + + # external_contact_forces are excluded + return jp.concatenate([ + position, + data.qvel, + data.cinert[1:].ravel(), + data.cvel[1:].ravel(), + data.qfrc_actuator, + ]) \ No newline at end of file diff --git a/sim/mjx_gym/envs/default_humanoid/rewards.py b/sim/mjx_gym/envs/default_humanoid/rewards.py new file mode 100644 index 00000000..ccd5cd8f --- /dev/null +++ b/sim/mjx_gym/envs/default_humanoid/rewards.py @@ -0,0 +1,88 @@ +import jax +import jax.numpy as jp +from brax import base +from brax.mjx.base import State as mjxState +from typing import Callable, Dict, Tuple + +def get_reward_fn(reward_params: Dict[str, Dict[str, float]], dt, include_reward_breakdown) -> Callable[[mjxState, jp.ndarray, mjxState], Tuple[jp.ndarray, jp.ndarray, Dict[str, jp.ndarray]]]: + """Get a combined reward function. + + Args: + reward_params: Dictionary of reward parameters. + dt: Time step. + Returns: + A reward function that takes in a state, action, and next state and returns a float wrapped in a jp.ndarray. + """ + def reward_fn(state: mjxState, action: jp.ndarray, next_state: mjxState) -> Tuple[jp.ndarray, jp.ndarray, Dict[str, jp.ndarray]]: + reward, is_healthy = jp.array(0.), jp.array(1.) + rewards = {} + for key, params in reward_params.items(): + r, h = reward_functions[key](state, action, next_state, dt, params) + is_healthy *= h + reward += r + if include_reward_breakdown: # For more detailed logging, can be disabled for performance + rewards[key] = r + return reward, is_healthy, rewards + + return reward_fn + +def forward_reward_fn(state: mjxState, action: jp.ndarray, next_state: mjxState, dt: jax.Array, params: Dict[str, float]) -> Tuple[jp.ndarray, jp.ndarray]: + """Reward function for moving forward. + + Args: + state: Current state. + action: Action taken. + next_state: Next state. + dt: Time step. + params: Reward parameters. + Returns: + A float wrapped in a jax array. + """ + xpos = state.subtree_com[1][0] # TODO: include stricter typing than mjxState to avoid this type error + next_xpos = next_state.subtree_com[1][0] + velocity = (next_xpos - xpos) / dt + forward_reward = params['weight'] * velocity + + return forward_reward, jp.array(1.) # TODO: ensure everything is initialized in a size 2 array instead... + +def healthy_reward_fn(state: mjxState, action: jp.ndarray, next_state: mjxState, dt: jax.Array, params: Dict[str, float]) -> Tuple[jp.ndarray, jp.ndarray]: + """Reward function for staying healthy. + + Args: + state: Current state. + action: Action taken. + next_state: Next state. + dt: Time step. + params: Reward parameters. + Returns: + A float wrapped in a jax array. + """ + min_z = params['healthy_z_lower'] + max_z = params['healthy_z_upper'] + is_healthy = jp.where(state.q[2] < min_z, 0.0, 1.0) + is_healthy = jp.where(state.q[2] > max_z, 0.0, is_healthy) + healthy_reward = jp.array(params['weight']) * is_healthy + + return healthy_reward, is_healthy + +def ctrl_cost_reward_fn(state: mjxState, action: jp.ndarray, next_state: mjxState, dt: jax.Array, params: Dict[str, float]) -> Tuple[jp.ndarray, jp.ndarray]: + """Reward function for control cost. + + Args: + state: Current state. + action: Action taken. + next_state: Next state. + dt: Time step. + params: Reward parameters. + Returns: + A float wrapped in a jax array. + """ + ctrl_cost = -params['weight'] * jp.sum(jp.square(action)) + + return ctrl_cost, jp.array(1.) + +reward_functions = { + 'rew_forward': forward_reward_fn, + 'rew_healthy': healthy_reward_fn, + 'rew_ctrl_cost': ctrl_cost_reward_fn +} \ No newline at end of file diff --git a/sim/mjx_gym/train.py b/sim/mjx_gym/train.py new file mode 100644 index 00000000..e69de29b diff --git a/sim/requirements-dev.txt b/sim/requirements-dev.txt index e36b6486..690e3fe8 100644 --- a/sim/requirements-dev.txt +++ b/sim/requirements-dev.txt @@ -5,3 +5,6 @@ darglint mypy pytest ruff +mujoco +mujoco_mjx +brax \ No newline at end of file From b4fe375f6df1c055e10247d60d39a09632b9d242 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Wed, 22 May 2024 04:10:53 +0000 Subject: [PATCH 02/17] feat: ran initial training with new MJX environment --- sim/mjx_gym/envs/__init__.py | 8 +- .../envs/default_humanoid/default_humanoid.py | 38 +++- sim/mjx_gym/train.ipynb | 164 ++++++++++++++++++ sim/mjx_gym/train.py | 0 4 files changed, 198 insertions(+), 12 deletions(-) create mode 100644 sim/mjx_gym/train.ipynb delete mode 100644 sim/mjx_gym/train.py diff --git a/sim/mjx_gym/envs/__init__.py b/sim/mjx_gym/envs/__init__.py index 2363654b..43150a52 100644 --- a/sim/mjx_gym/envs/__init__.py +++ b/sim/mjx_gym/envs/__init__.py @@ -1,9 +1,11 @@ +from brax import envs from .default_humanoid.default_humanoid import DefaultHumanoidEnv -envs = { +environments = { "default_humanoid": DefaultHumanoidEnv } -def get_env(name: str): - return envs[name] \ No newline at end of file +def get_env(name: str) -> envs.Env: + envs.register_environment(name, environments[name]) + return envs.get_environment(name) \ No newline at end of file diff --git a/sim/mjx_gym/envs/default_humanoid/default_humanoid.py b/sim/mjx_gym/envs/default_humanoid/default_humanoid.py index 98aa90c3..28b49836 100644 --- a/sim/mjx_gym/envs/default_humanoid/default_humanoid.py +++ b/sim/mjx_gym/envs/default_humanoid/default_humanoid.py @@ -7,12 +7,12 @@ import mujoco from mujoco import mjx from etils import epath -from rewards import get_reward_fn +from .rewards import get_reward_fn DEFAULT_REWARD_PARAMS = { - 'forward_reward': {'weight': 1.25}, - 'healthy_reward': {'weight': 5.0, 'healthy_z_lower': 1.0, 'healthy_z_upper': 2.0}, - 'ctrl_cost': {'weight': 0.1} + 'rew_forward': {'weight': 1.25}, + 'rew_healthy': {'weight': 5.0, 'healthy_z_lower': 1.0, 'healthy_z_upper': 2.0}, + 'rew_ctrl_cost': {'weight': 0.1} } class DefaultHumanoidEnv(PipelineEnv): @@ -51,7 +51,13 @@ def __init__( self.reward_fn = get_reward_fn(self._reward_params, self.dt, include_reward_breakdown=True) def reset(self, rng: jp.ndarray) -> State: - """Resets the environment to an initial state.""" + """Resets the environment to an initial state. + + Args: + rng: Random number generator seed. + Returns: + The initial state of the environment. + """ rng, rng1, rng2 = jax.random.split(rng, 3) low, hi = -self._reset_noise_scale, self._reset_noise_scale @@ -76,7 +82,14 @@ def reset(self, rng: jp.ndarray) -> State: return State(mjx_state, obs, reward, done, metrics) def step(self, state: State, action: jp.ndarray) -> State: - """Runs one timestep of the environment's dynamics.""" + """Runs one timestep of the environment's dynamics. + + Args: + state: The current state of the environment. + action: The action to take. + Returns: + A tuple of the next state, the reward, whether the episode has ended, and additional information. + """ mjx_state = state.pipeline_state assert mjx_state, 'state.pipeline_state was recorded as None' # TODO: determine whether to raise an error or reset the environment @@ -93,9 +106,9 @@ def step(self, state: State, action: jp.ndarray) -> State: reward, is_healthy, reward_breakdown = self.reward_fn(mjx_state, action, next_mjx_state) if self._terminate_when_unhealthy: - done = jp.logical_not(is_healthy) + done = 1.0 - is_healthy else: - done = jp.array(False) + done = jp.array(0) state.metrics.update( x_position=next_mjx_state.subtree_com[1][0], @@ -116,7 +129,14 @@ def step(self, state: State, action: jp.ndarray) -> State: def _get_obs( self, data: mjxState, action: jp.ndarray ) -> jp.ndarray: - """Observes humanoid body position, velocities, and angles.""" + """Observes humanoid body position, velocities, and angles. + + Args: + data: The current state of the environment. + action: The current action. + Returns: + Observations of the environment. + """ position = data.qpos if self._exclude_current_positions_from_observation: position = position[2:] diff --git a/sim/mjx_gym/train.ipynb b/sim/mjx_gym/train.ipynb new file mode 100644 index 00000000..61267e45 --- /dev/null +++ b/sim/mjx_gym/train.ipynb @@ -0,0 +1,164 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "from envs import get_env\n", + "from brax.training.agents.ppo import train as ppo\n", + "import functools\n", + "import matplotlib.pyplot as plt\n", + "from datetime import datetime\n", + "from brax import envs" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2024-05-22 03:57:14.712562: W external/xla/xla/service/gpu/nvptx_compiler.cc:760] The NVIDIA driver's CUDA version is 12.2 which is older than the ptxas CUDA version (12.5.40). Because the driver is older than the ptxas version, XLA is disabling parallel compilation, which may slow down compilation. You should update your NVIDIA driver or use the NVIDIA-provided CUDA forward compatibility packages.\n" + ] + } + ], + "source": [ + "env = get_env(\"default_humanoid\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "env" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "ename": "TypeError", + "evalue": "Scanned function carry input and carry output must have equal types (e.g. shapes and dtypes of arrays), but they differ:\n * the input carry component state.done has type float32[] but the corresponding output carry component has type bool[], so the dtypes do not match\n\nRevise the scanned function so that all output types (e.g. shapes and dtypes) match the corresponding input types.", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[5], line 32\u001b[0m\n\u001b[1;32m 28\u001b[0m plt\u001b[38;5;241m.\u001b[39merrorbar(\n\u001b[1;32m 29\u001b[0m x_data, y_data, yerr\u001b[38;5;241m=\u001b[39mydataerr)\n\u001b[1;32m 30\u001b[0m plt\u001b[38;5;241m.\u001b[39mshow()\n\u001b[0;32m---> 32\u001b[0m make_inference_fn, params, _ \u001b[38;5;241m=\u001b[39m \u001b[43mtrain_fn\u001b[49m\u001b[43m(\u001b[49m\u001b[43menvironment\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43menv\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mprogress_fn\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mprogress\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 34\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtime to jit: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mtimes[\u001b[38;5;241m1\u001b[39m]\u001b[38;5;250m \u001b[39m\u001b[38;5;241m-\u001b[39m\u001b[38;5;250m \u001b[39mtimes[\u001b[38;5;241m0\u001b[39m]\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m 35\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtime to train: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mtimes[\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m]\u001b[38;5;250m \u001b[39m\u001b[38;5;241m-\u001b[39m\u001b[38;5;250m \u001b[39mtimes[\u001b[38;5;241m1\u001b[39m]\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m)\n", + "File \u001b[0;32m~/miniconda3/envs/kscale-dev/lib/python3.9/site-packages/brax/training/agents/ppo/train.py:405\u001b[0m, in \u001b[0;36mtrain\u001b[0;34m(environment, num_timesteps, episode_length, action_repeat, num_envs, max_devices_per_host, num_eval_envs, learning_rate, entropy_cost, discounting, seed, unroll_length, batch_size, num_minibatches, num_updates_per_batch, num_evals, num_resets_per_eval, normalize_observations, reward_scaling, clipping_epsilon, gae_lambda, deterministic_eval, network_factory, progress_fn, normalize_advantage, eval_env, policy_params_fn, randomization_fn)\u001b[0m\n\u001b[1;32m 403\u001b[0m metrics \u001b[38;5;241m=\u001b[39m {}\n\u001b[1;32m 404\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m process_id \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m0\u001b[39m \u001b[38;5;129;01mand\u001b[39;00m num_evals \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m1\u001b[39m:\n\u001b[0;32m--> 405\u001b[0m metrics \u001b[38;5;241m=\u001b[39m \u001b[43mevaluator\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrun_evaluation\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 406\u001b[0m \u001b[43m \u001b[49m\u001b[43m_unpmap\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 407\u001b[0m \u001b[43m \u001b[49m\u001b[43m(\u001b[49m\u001b[43mtraining_state\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnormalizer_params\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtraining_state\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mparams\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpolicy\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 408\u001b[0m \u001b[43m \u001b[49m\u001b[43mtraining_metrics\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m{\u001b[49m\u001b[43m}\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 409\u001b[0m logging\u001b[38;5;241m.\u001b[39minfo(metrics)\n\u001b[1;32m 410\u001b[0m progress_fn(\u001b[38;5;241m0\u001b[39m, metrics)\n", + "File \u001b[0;32m~/miniconda3/envs/kscale-dev/lib/python3.9/site-packages/brax/training/acting.py:125\u001b[0m, in \u001b[0;36mEvaluator.run_evaluation\u001b[0;34m(self, policy_params, training_metrics, aggregate_episodes)\u001b[0m\n\u001b[1;32m 122\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_key, unroll_key \u001b[38;5;241m=\u001b[39m jax\u001b[38;5;241m.\u001b[39mrandom\u001b[38;5;241m.\u001b[39msplit(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_key)\n\u001b[1;32m 124\u001b[0m t \u001b[38;5;241m=\u001b[39m time\u001b[38;5;241m.\u001b[39mtime()\n\u001b[0;32m--> 125\u001b[0m eval_state \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_generate_eval_unroll\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpolicy_params\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43munroll_key\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 126\u001b[0m eval_metrics \u001b[38;5;241m=\u001b[39m eval_state\u001b[38;5;241m.\u001b[39minfo[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124meval_metrics\u001b[39m\u001b[38;5;124m'\u001b[39m]\n\u001b[1;32m 127\u001b[0m eval_metrics\u001b[38;5;241m.\u001b[39mactive_episodes\u001b[38;5;241m.\u001b[39mblock_until_ready()\n", + " \u001b[0;31m[... skipping hidden 11 frame]\u001b[0m\n", + "File \u001b[0;32m~/miniconda3/envs/kscale-dev/lib/python3.9/site-packages/brax/training/acting.py:107\u001b[0m, in \u001b[0;36mEvaluator.__init__..generate_eval_unroll\u001b[0;34m(policy_params, key)\u001b[0m\n\u001b[1;32m 105\u001b[0m reset_keys \u001b[38;5;241m=\u001b[39m jax\u001b[38;5;241m.\u001b[39mrandom\u001b[38;5;241m.\u001b[39msplit(key, num_eval_envs)\n\u001b[1;32m 106\u001b[0m eval_first_state \u001b[38;5;241m=\u001b[39m eval_env\u001b[38;5;241m.\u001b[39mreset(reset_keys)\n\u001b[0;32m--> 107\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mgenerate_unroll\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 108\u001b[0m \u001b[43m \u001b[49m\u001b[43meval_env\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 109\u001b[0m \u001b[43m \u001b[49m\u001b[43meval_first_state\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 110\u001b[0m \u001b[43m \u001b[49m\u001b[43meval_policy_fn\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpolicy_params\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 111\u001b[0m \u001b[43m \u001b[49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 112\u001b[0m \u001b[43m \u001b[49m\u001b[43munroll_length\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mepisode_length\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m/\u001b[39;49m\u001b[38;5;241;43m/\u001b[39;49m\u001b[43m \u001b[49m\u001b[43maction_repeat\u001b[49m\u001b[43m)\u001b[49m[\u001b[38;5;241m0\u001b[39m]\n", + "File \u001b[0;32m~/miniconda3/envs/kscale-dev/lib/python3.9/site-packages/brax/training/acting.py:75\u001b[0m, in \u001b[0;36mgenerate_unroll\u001b[0;34m(env, env_state, policy, key, unroll_length, extra_fields)\u001b[0m\n\u001b[1;32m 71\u001b[0m nstate, transition \u001b[38;5;241m=\u001b[39m actor_step(\n\u001b[1;32m 72\u001b[0m env, state, policy, current_key, extra_fields\u001b[38;5;241m=\u001b[39mextra_fields)\n\u001b[1;32m 73\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m (nstate, next_key), transition\n\u001b[0;32m---> 75\u001b[0m (final_state, _), data \u001b[38;5;241m=\u001b[39m \u001b[43mjax\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mlax\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mscan\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 76\u001b[0m \u001b[43m \u001b[49m\u001b[43mf\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m(\u001b[49m\u001b[43menv_state\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkey\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mlength\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43munroll_length\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 77\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m final_state, data\n", + " \u001b[0;31m[... skipping hidden 20 frame]\u001b[0m\n", + "File \u001b[0;32m~/miniconda3/envs/kscale-dev/lib/python3.9/site-packages/brax/training/acting.py:71\u001b[0m, in \u001b[0;36mgenerate_unroll..f\u001b[0;34m(carry, unused_t)\u001b[0m\n\u001b[1;32m 69\u001b[0m state, current_key \u001b[38;5;241m=\u001b[39m carry\n\u001b[1;32m 70\u001b[0m current_key, next_key \u001b[38;5;241m=\u001b[39m jax\u001b[38;5;241m.\u001b[39mrandom\u001b[38;5;241m.\u001b[39msplit(current_key)\n\u001b[0;32m---> 71\u001b[0m nstate, transition \u001b[38;5;241m=\u001b[39m \u001b[43mactor_step\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 72\u001b[0m \u001b[43m \u001b[49m\u001b[43menv\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstate\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpolicy\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcurrent_key\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mextra_fields\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mextra_fields\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 73\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m (nstate, next_key), transition\n", + "File \u001b[0;32m~/miniconda3/envs/kscale-dev/lib/python3.9/site-packages/brax/training/acting.py:43\u001b[0m, in \u001b[0;36mactor_step\u001b[0;34m(env, env_state, policy, key, extra_fields)\u001b[0m\n\u001b[1;32m 41\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"Collect data.\"\"\"\u001b[39;00m\n\u001b[1;32m 42\u001b[0m actions, policy_extras \u001b[38;5;241m=\u001b[39m policy(env_state\u001b[38;5;241m.\u001b[39mobs, key)\n\u001b[0;32m---> 43\u001b[0m nstate \u001b[38;5;241m=\u001b[39m \u001b[43menv\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mstep\u001b[49m\u001b[43m(\u001b[49m\u001b[43menv_state\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mactions\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 44\u001b[0m state_extras \u001b[38;5;241m=\u001b[39m {x: nstate\u001b[38;5;241m.\u001b[39minfo[x] \u001b[38;5;28;01mfor\u001b[39;00m x \u001b[38;5;129;01min\u001b[39;00m extra_fields}\n\u001b[1;32m 45\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m nstate, Transition( \u001b[38;5;66;03m# pytype: disable=wrong-arg-types # jax-ndarray\u001b[39;00m\n\u001b[1;32m 46\u001b[0m observation\u001b[38;5;241m=\u001b[39menv_state\u001b[38;5;241m.\u001b[39mobs,\n\u001b[1;32m 47\u001b[0m action\u001b[38;5;241m=\u001b[39mactions,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 53\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mstate_extras\u001b[39m\u001b[38;5;124m'\u001b[39m: state_extras\n\u001b[1;32m 54\u001b[0m })\n", + "File \u001b[0;32m~/miniconda3/envs/kscale-dev/lib/python3.9/site-packages/brax/envs/wrappers/training.py:176\u001b[0m, in \u001b[0;36mEvalWrapper.step\u001b[0;34m(self, state, action)\u001b[0m\n\u001b[1;32m 172\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[1;32m 173\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mIncorrect type for state_metrics: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mtype\u001b[39m(state_metrics)\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m\n\u001b[1;32m 174\u001b[0m )\n\u001b[1;32m 175\u001b[0m \u001b[38;5;28;01mdel\u001b[39;00m state\u001b[38;5;241m.\u001b[39minfo[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124meval_metrics\u001b[39m\u001b[38;5;124m'\u001b[39m]\n\u001b[0;32m--> 176\u001b[0m nstate \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43menv\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mstep\u001b[49m\u001b[43m(\u001b[49m\u001b[43mstate\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43maction\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 177\u001b[0m nstate\u001b[38;5;241m.\u001b[39mmetrics[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mreward\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m=\u001b[39m nstate\u001b[38;5;241m.\u001b[39mreward\n\u001b[1;32m 178\u001b[0m episode_steps \u001b[38;5;241m=\u001b[39m jp\u001b[38;5;241m.\u001b[39mwhere(\n\u001b[1;32m 179\u001b[0m state_metrics\u001b[38;5;241m.\u001b[39mactive_episodes,\n\u001b[1;32m 180\u001b[0m nstate\u001b[38;5;241m.\u001b[39minfo[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124msteps\u001b[39m\u001b[38;5;124m'\u001b[39m],\n\u001b[1;32m 181\u001b[0m state_metrics\u001b[38;5;241m.\u001b[39mepisode_steps,\n\u001b[1;32m 182\u001b[0m )\n", + "File \u001b[0;32m~/miniconda3/envs/kscale-dev/lib/python3.9/site-packages/brax/envs/wrappers/training.py:122\u001b[0m, in \u001b[0;36mAutoResetWrapper.step\u001b[0;34m(self, state, action)\u001b[0m\n\u001b[1;32m 120\u001b[0m state\u001b[38;5;241m.\u001b[39minfo\u001b[38;5;241m.\u001b[39mupdate(steps\u001b[38;5;241m=\u001b[39msteps)\n\u001b[1;32m 121\u001b[0m state \u001b[38;5;241m=\u001b[39m state\u001b[38;5;241m.\u001b[39mreplace(done\u001b[38;5;241m=\u001b[39mjp\u001b[38;5;241m.\u001b[39mzeros_like(state\u001b[38;5;241m.\u001b[39mdone))\n\u001b[0;32m--> 122\u001b[0m state \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43menv\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mstep\u001b[49m\u001b[43m(\u001b[49m\u001b[43mstate\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43maction\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 124\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mwhere_done\u001b[39m(x, y):\n\u001b[1;32m 125\u001b[0m done \u001b[38;5;241m=\u001b[39m state\u001b[38;5;241m.\u001b[39mdone\n", + "File \u001b[0;32m~/miniconda3/envs/kscale-dev/lib/python3.9/site-packages/brax/envs/wrappers/training.py:71\u001b[0m, in \u001b[0;36mVmapWrapper.step\u001b[0;34m(self, state, action)\u001b[0m\n\u001b[1;32m 70\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mstep\u001b[39m(\u001b[38;5;28mself\u001b[39m, state: State, action: jax\u001b[38;5;241m.\u001b[39mArray) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m State:\n\u001b[0;32m---> 71\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mjax\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mvmap\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43menv\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mstep\u001b[49m\u001b[43m)\u001b[49m\u001b[43m(\u001b[49m\u001b[43mstate\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43maction\u001b[49m\u001b[43m)\u001b[49m\n", + " \u001b[0;31m[... skipping hidden 3 frame]\u001b[0m\n", + "File \u001b[0;32m~/miniconda3/envs/kscale-dev/lib/python3.9/site-packages/brax/envs/wrappers/training.py:93\u001b[0m, in \u001b[0;36mEpisodeWrapper.step\u001b[0;34m(self, state, action)\u001b[0m\n\u001b[1;32m 90\u001b[0m nstate \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39menv\u001b[38;5;241m.\u001b[39mstep(state, action)\n\u001b[1;32m 91\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m nstate, nstate\u001b[38;5;241m.\u001b[39mreward\n\u001b[0;32m---> 93\u001b[0m state, rewards \u001b[38;5;241m=\u001b[39m \u001b[43mjax\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mlax\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mscan\u001b[49m\u001b[43m(\u001b[49m\u001b[43mf\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstate\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43maction_repeat\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 94\u001b[0m state \u001b[38;5;241m=\u001b[39m state\u001b[38;5;241m.\u001b[39mreplace(reward\u001b[38;5;241m=\u001b[39mjp\u001b[38;5;241m.\u001b[39msum(rewards, axis\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m0\u001b[39m))\n\u001b[1;32m 95\u001b[0m steps \u001b[38;5;241m=\u001b[39m state\u001b[38;5;241m.\u001b[39minfo[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124msteps\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m+\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39maction_repeat\n", + " \u001b[0;31m[... skipping hidden 2 frame]\u001b[0m\n", + "File \u001b[0;32m~/miniconda3/envs/kscale-dev/lib/python3.9/site-packages/jax/_src/lax/control_flow/loops.py:352\u001b[0m, in \u001b[0;36m_check_scan_carry_type\u001b[0;34m(body_fun, in_carry, out_carry_tree, out_avals)\u001b[0m\n\u001b[1;32m 345\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mall\u001b[39m(_map(core\u001b[38;5;241m.\u001b[39mtypematch, in_avals, out_avals)):\n\u001b[1;32m 346\u001b[0m differences \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;241m.\u001b[39mjoin(\n\u001b[1;32m 347\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m * \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mcomponent(path)\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m has type \u001b[39m\u001b[38;5;132;01m{\u001b[39;00min_aval\u001b[38;5;241m.\u001b[39mstr_short()\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m\n\u001b[1;32m 348\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124m but the corresponding output carry component has type \u001b[39m\u001b[38;5;124m'\u001b[39m\n\u001b[1;32m 349\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mout_aval\u001b[38;5;241m.\u001b[39mstr_short()\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;132;01m{\u001b[39;00m_aval_mismatch_extra(in_aval,\u001b[38;5;250m \u001b[39mout_aval)\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m'\u001b[39m\n\u001b[1;32m 350\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m path, in_aval, out_aval \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mzip\u001b[39m(paths, in_avals, out_avals)\n\u001b[1;32m 351\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m core\u001b[38;5;241m.\u001b[39mtypematch(in_aval, out_aval))\n\u001b[0;32m--> 352\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m(\n\u001b[1;32m 353\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mScanned function carry input and carry output must have equal types \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 354\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m(e.g. shapes and dtypes of arrays), \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 355\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mbut they differ:\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 356\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mdifferences\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 357\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mRevise the scanned function so that all output types (e.g. shapes \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 358\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mand dtypes) match the corresponding input types.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 359\u001b[0m )\n", + "\u001b[0;31mTypeError\u001b[0m: Scanned function carry input and carry output must have equal types (e.g. shapes and dtypes of arrays), but they differ:\n * the input carry component state.done has type float32[] but the corresponding output carry component has type bool[], so the dtypes do not match\n\nRevise the scanned function so that all output types (e.g. shapes and dtypes) match the corresponding input types." + ] + }, + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mThe Kernel crashed while executing code in the current cell or a previous cell. \n", + "\u001b[1;31mPlease review the code in the cell(s) to identify a possible cause of the failure. \n", + "\u001b[1;31mClick here for more info. \n", + "\u001b[1;31mView Jupyter log for further details." + ] + } + ], + "source": [ + "train_fn = functools.partial(\n", + " ppo.train, num_timesteps=30_000_000, num_evals=5, reward_scaling=0.1,\n", + " episode_length=1000, normalize_observations=True, action_repeat=1,\n", + " unroll_length=10, num_minibatches=32, num_updates_per_batch=8,\n", + " discounting=0.97, learning_rate=3e-4, entropy_cost=1e-3, num_envs=2048,\n", + " batch_size=1024, seed=0)\n", + "\n", + "\n", + "x_data = []\n", + "y_data = []\n", + "ydataerr = []\n", + "times = [datetime.now()]\n", + "\n", + "max_y, min_y = 13000, 0\n", + "def progress(num_steps, metrics):\n", + " times.append(datetime.now())\n", + " x_data.append(num_steps)\n", + " y_data.append(metrics['eval/episode_reward'])\n", + " ydataerr.append(metrics['eval/episode_reward_std'])\n", + "\n", + " plt.xlim([0, train_fn.keywords['num_timesteps'] * 1.25])\n", + " plt.ylim([min_y, max_y])\n", + "\n", + " plt.xlabel('# environment steps')\n", + " plt.ylabel('reward per episode')\n", + " plt.title(f'y={y_data[-1]:.3f}')\n", + "\n", + " plt.errorbar(\n", + " x_data, y_data, yerr=ydataerr)\n", + " plt.show()\n", + "\n", + "make_inference_fn, params, _ = train_fn(environment=env, progress_fn=progress)\n", + "\n", + "print(f'time to jit: {times[1] - times[0]}')\n", + "print(f'time to train: {times[-1] - times[1]}')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "kscale-dev", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.19" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/sim/mjx_gym/train.py b/sim/mjx_gym/train.py deleted file mode 100644 index e69de29b..00000000 From c708b199fc6e801a3f66b81a26accb4810d4d67d Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Wed, 22 May 2024 08:03:31 +0000 Subject: [PATCH 03/17] feat: added nicer training script --- sim/mjx_gym/envs/__init__.py | 4 +- .../experiments/default_humanoid_walk.yaml | 31 ++++ sim/mjx_gym/train.ipynb | 164 ------------------ sim/mjx_gym/train.py | 94 ++++++++++ 4 files changed, 127 insertions(+), 166 deletions(-) create mode 100644 sim/mjx_gym/experiments/default_humanoid_walk.yaml delete mode 100644 sim/mjx_gym/train.ipynb create mode 100644 sim/mjx_gym/train.py diff --git a/sim/mjx_gym/envs/__init__.py b/sim/mjx_gym/envs/__init__.py index 43150a52..173ba511 100644 --- a/sim/mjx_gym/envs/__init__.py +++ b/sim/mjx_gym/envs/__init__.py @@ -6,6 +6,6 @@ "default_humanoid": DefaultHumanoidEnv } -def get_env(name: str) -> envs.Env: +def get_env(name: str, **kwargs) -> envs.Env: envs.register_environment(name, environments[name]) - return envs.get_environment(name) \ No newline at end of file + return envs.get_environment(name, **kwargs) \ No newline at end of file diff --git a/sim/mjx_gym/experiments/default_humanoid_walk.yaml b/sim/mjx_gym/experiments/default_humanoid_walk.yaml new file mode 100644 index 00000000..1288fc18 --- /dev/null +++ b/sim/mjx_gym/experiments/default_humanoid_walk.yaml @@ -0,0 +1,31 @@ +project_name: default_humanoid_walk +experiment_name: constant_alive_reward_fixing +num_timesteps: 30000000 +num_evals: 5 +reward_scaling: 0.1 +episode_length: 1000 +normalize_observations: true +action_repeat: 1 +unroll_length: 10 +num_minibatches: 32 +num_updates_per_batch: 8 +discounting: 0.97 +learning_rate: 0.0003 +entropy_cost: 0.001 +num_envs: 2048 +batch_size: 1024 +seed: 0 +env_name: default_humanoid +reward_params: + rew_forward: + weight: 1.25 + rew_healthy: + weight: 5.0 + healthy_z_lower: 1.0 + healthy_z_upper: 2.0 + rew_ctrl_cost: + weight: 0.1 +terminate_when_unhealthy: true +reset_noise_scale: 0.01 +exclude_current_positions_from_observation: true +log_reward_breakdown: true diff --git a/sim/mjx_gym/train.ipynb b/sim/mjx_gym/train.ipynb deleted file mode 100644 index 61267e45..00000000 --- a/sim/mjx_gym/train.ipynb +++ /dev/null @@ -1,164 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "from envs import get_env\n", - "from brax.training.agents.ppo import train as ppo\n", - "import functools\n", - "import matplotlib.pyplot as plt\n", - "from datetime import datetime\n", - "from brax import envs" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2024-05-22 03:57:14.712562: W external/xla/xla/service/gpu/nvptx_compiler.cc:760] The NVIDIA driver's CUDA version is 12.2 which is older than the ptxas CUDA version (12.5.40). Because the driver is older than the ptxas version, XLA is disabling parallel compilation, which may slow down compilation. You should update your NVIDIA driver or use the NVIDIA-provided CUDA forward compatibility packages.\n" - ] - } - ], - "source": [ - "env = get_env(\"default_humanoid\")" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "env" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "ename": "TypeError", - "evalue": "Scanned function carry input and carry output must have equal types (e.g. shapes and dtypes of arrays), but they differ:\n * the input carry component state.done has type float32[] but the corresponding output carry component has type bool[], so the dtypes do not match\n\nRevise the scanned function so that all output types (e.g. shapes and dtypes) match the corresponding input types.", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[5], line 32\u001b[0m\n\u001b[1;32m 28\u001b[0m plt\u001b[38;5;241m.\u001b[39merrorbar(\n\u001b[1;32m 29\u001b[0m x_data, y_data, yerr\u001b[38;5;241m=\u001b[39mydataerr)\n\u001b[1;32m 30\u001b[0m plt\u001b[38;5;241m.\u001b[39mshow()\n\u001b[0;32m---> 32\u001b[0m make_inference_fn, params, _ \u001b[38;5;241m=\u001b[39m \u001b[43mtrain_fn\u001b[49m\u001b[43m(\u001b[49m\u001b[43menvironment\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43menv\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mprogress_fn\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mprogress\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 34\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtime to jit: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mtimes[\u001b[38;5;241m1\u001b[39m]\u001b[38;5;250m \u001b[39m\u001b[38;5;241m-\u001b[39m\u001b[38;5;250m \u001b[39mtimes[\u001b[38;5;241m0\u001b[39m]\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m 35\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtime to train: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mtimes[\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m]\u001b[38;5;250m \u001b[39m\u001b[38;5;241m-\u001b[39m\u001b[38;5;250m \u001b[39mtimes[\u001b[38;5;241m1\u001b[39m]\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m)\n", - "File \u001b[0;32m~/miniconda3/envs/kscale-dev/lib/python3.9/site-packages/brax/training/agents/ppo/train.py:405\u001b[0m, in \u001b[0;36mtrain\u001b[0;34m(environment, num_timesteps, episode_length, action_repeat, num_envs, max_devices_per_host, num_eval_envs, learning_rate, entropy_cost, discounting, seed, unroll_length, batch_size, num_minibatches, num_updates_per_batch, num_evals, num_resets_per_eval, normalize_observations, reward_scaling, clipping_epsilon, gae_lambda, deterministic_eval, network_factory, progress_fn, normalize_advantage, eval_env, policy_params_fn, randomization_fn)\u001b[0m\n\u001b[1;32m 403\u001b[0m metrics \u001b[38;5;241m=\u001b[39m {}\n\u001b[1;32m 404\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m process_id \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m0\u001b[39m \u001b[38;5;129;01mand\u001b[39;00m num_evals \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m1\u001b[39m:\n\u001b[0;32m--> 405\u001b[0m metrics \u001b[38;5;241m=\u001b[39m \u001b[43mevaluator\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrun_evaluation\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 406\u001b[0m \u001b[43m \u001b[49m\u001b[43m_unpmap\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 407\u001b[0m \u001b[43m \u001b[49m\u001b[43m(\u001b[49m\u001b[43mtraining_state\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnormalizer_params\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtraining_state\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mparams\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpolicy\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 408\u001b[0m \u001b[43m \u001b[49m\u001b[43mtraining_metrics\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m{\u001b[49m\u001b[43m}\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 409\u001b[0m logging\u001b[38;5;241m.\u001b[39minfo(metrics)\n\u001b[1;32m 410\u001b[0m progress_fn(\u001b[38;5;241m0\u001b[39m, metrics)\n", - "File \u001b[0;32m~/miniconda3/envs/kscale-dev/lib/python3.9/site-packages/brax/training/acting.py:125\u001b[0m, in \u001b[0;36mEvaluator.run_evaluation\u001b[0;34m(self, policy_params, training_metrics, aggregate_episodes)\u001b[0m\n\u001b[1;32m 122\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_key, unroll_key \u001b[38;5;241m=\u001b[39m jax\u001b[38;5;241m.\u001b[39mrandom\u001b[38;5;241m.\u001b[39msplit(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_key)\n\u001b[1;32m 124\u001b[0m t \u001b[38;5;241m=\u001b[39m time\u001b[38;5;241m.\u001b[39mtime()\n\u001b[0;32m--> 125\u001b[0m eval_state \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_generate_eval_unroll\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpolicy_params\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43munroll_key\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 126\u001b[0m eval_metrics \u001b[38;5;241m=\u001b[39m eval_state\u001b[38;5;241m.\u001b[39minfo[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124meval_metrics\u001b[39m\u001b[38;5;124m'\u001b[39m]\n\u001b[1;32m 127\u001b[0m eval_metrics\u001b[38;5;241m.\u001b[39mactive_episodes\u001b[38;5;241m.\u001b[39mblock_until_ready()\n", - " \u001b[0;31m[... skipping hidden 11 frame]\u001b[0m\n", - "File \u001b[0;32m~/miniconda3/envs/kscale-dev/lib/python3.9/site-packages/brax/training/acting.py:107\u001b[0m, in \u001b[0;36mEvaluator.__init__..generate_eval_unroll\u001b[0;34m(policy_params, key)\u001b[0m\n\u001b[1;32m 105\u001b[0m reset_keys \u001b[38;5;241m=\u001b[39m jax\u001b[38;5;241m.\u001b[39mrandom\u001b[38;5;241m.\u001b[39msplit(key, num_eval_envs)\n\u001b[1;32m 106\u001b[0m eval_first_state \u001b[38;5;241m=\u001b[39m eval_env\u001b[38;5;241m.\u001b[39mreset(reset_keys)\n\u001b[0;32m--> 107\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mgenerate_unroll\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 108\u001b[0m \u001b[43m \u001b[49m\u001b[43meval_env\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 109\u001b[0m \u001b[43m \u001b[49m\u001b[43meval_first_state\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 110\u001b[0m \u001b[43m \u001b[49m\u001b[43meval_policy_fn\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpolicy_params\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 111\u001b[0m \u001b[43m \u001b[49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 112\u001b[0m \u001b[43m \u001b[49m\u001b[43munroll_length\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mepisode_length\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m/\u001b[39;49m\u001b[38;5;241;43m/\u001b[39;49m\u001b[43m \u001b[49m\u001b[43maction_repeat\u001b[49m\u001b[43m)\u001b[49m[\u001b[38;5;241m0\u001b[39m]\n", - "File \u001b[0;32m~/miniconda3/envs/kscale-dev/lib/python3.9/site-packages/brax/training/acting.py:75\u001b[0m, in \u001b[0;36mgenerate_unroll\u001b[0;34m(env, env_state, policy, key, unroll_length, extra_fields)\u001b[0m\n\u001b[1;32m 71\u001b[0m nstate, transition \u001b[38;5;241m=\u001b[39m actor_step(\n\u001b[1;32m 72\u001b[0m env, state, policy, current_key, extra_fields\u001b[38;5;241m=\u001b[39mextra_fields)\n\u001b[1;32m 73\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m (nstate, next_key), transition\n\u001b[0;32m---> 75\u001b[0m (final_state, _), data \u001b[38;5;241m=\u001b[39m \u001b[43mjax\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mlax\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mscan\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 76\u001b[0m \u001b[43m \u001b[49m\u001b[43mf\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m(\u001b[49m\u001b[43menv_state\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkey\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mlength\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43munroll_length\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 77\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m final_state, data\n", - " \u001b[0;31m[... skipping hidden 20 frame]\u001b[0m\n", - "File \u001b[0;32m~/miniconda3/envs/kscale-dev/lib/python3.9/site-packages/brax/training/acting.py:71\u001b[0m, in \u001b[0;36mgenerate_unroll..f\u001b[0;34m(carry, unused_t)\u001b[0m\n\u001b[1;32m 69\u001b[0m state, current_key \u001b[38;5;241m=\u001b[39m carry\n\u001b[1;32m 70\u001b[0m current_key, next_key \u001b[38;5;241m=\u001b[39m jax\u001b[38;5;241m.\u001b[39mrandom\u001b[38;5;241m.\u001b[39msplit(current_key)\n\u001b[0;32m---> 71\u001b[0m nstate, transition \u001b[38;5;241m=\u001b[39m \u001b[43mactor_step\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 72\u001b[0m \u001b[43m \u001b[49m\u001b[43menv\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstate\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpolicy\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcurrent_key\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mextra_fields\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mextra_fields\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 73\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m (nstate, next_key), transition\n", - "File \u001b[0;32m~/miniconda3/envs/kscale-dev/lib/python3.9/site-packages/brax/training/acting.py:43\u001b[0m, in \u001b[0;36mactor_step\u001b[0;34m(env, env_state, policy, key, extra_fields)\u001b[0m\n\u001b[1;32m 41\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"Collect data.\"\"\"\u001b[39;00m\n\u001b[1;32m 42\u001b[0m actions, policy_extras \u001b[38;5;241m=\u001b[39m policy(env_state\u001b[38;5;241m.\u001b[39mobs, key)\n\u001b[0;32m---> 43\u001b[0m nstate \u001b[38;5;241m=\u001b[39m \u001b[43menv\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mstep\u001b[49m\u001b[43m(\u001b[49m\u001b[43menv_state\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mactions\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 44\u001b[0m state_extras \u001b[38;5;241m=\u001b[39m {x: nstate\u001b[38;5;241m.\u001b[39minfo[x] \u001b[38;5;28;01mfor\u001b[39;00m x \u001b[38;5;129;01min\u001b[39;00m extra_fields}\n\u001b[1;32m 45\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m nstate, Transition( \u001b[38;5;66;03m# pytype: disable=wrong-arg-types # jax-ndarray\u001b[39;00m\n\u001b[1;32m 46\u001b[0m observation\u001b[38;5;241m=\u001b[39menv_state\u001b[38;5;241m.\u001b[39mobs,\n\u001b[1;32m 47\u001b[0m action\u001b[38;5;241m=\u001b[39mactions,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 53\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mstate_extras\u001b[39m\u001b[38;5;124m'\u001b[39m: state_extras\n\u001b[1;32m 54\u001b[0m })\n", - "File \u001b[0;32m~/miniconda3/envs/kscale-dev/lib/python3.9/site-packages/brax/envs/wrappers/training.py:176\u001b[0m, in \u001b[0;36mEvalWrapper.step\u001b[0;34m(self, state, action)\u001b[0m\n\u001b[1;32m 172\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[1;32m 173\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mIncorrect type for state_metrics: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mtype\u001b[39m(state_metrics)\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m\n\u001b[1;32m 174\u001b[0m )\n\u001b[1;32m 175\u001b[0m \u001b[38;5;28;01mdel\u001b[39;00m state\u001b[38;5;241m.\u001b[39minfo[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124meval_metrics\u001b[39m\u001b[38;5;124m'\u001b[39m]\n\u001b[0;32m--> 176\u001b[0m nstate \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43menv\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mstep\u001b[49m\u001b[43m(\u001b[49m\u001b[43mstate\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43maction\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 177\u001b[0m nstate\u001b[38;5;241m.\u001b[39mmetrics[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mreward\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m=\u001b[39m nstate\u001b[38;5;241m.\u001b[39mreward\n\u001b[1;32m 178\u001b[0m episode_steps \u001b[38;5;241m=\u001b[39m jp\u001b[38;5;241m.\u001b[39mwhere(\n\u001b[1;32m 179\u001b[0m state_metrics\u001b[38;5;241m.\u001b[39mactive_episodes,\n\u001b[1;32m 180\u001b[0m nstate\u001b[38;5;241m.\u001b[39minfo[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124msteps\u001b[39m\u001b[38;5;124m'\u001b[39m],\n\u001b[1;32m 181\u001b[0m state_metrics\u001b[38;5;241m.\u001b[39mepisode_steps,\n\u001b[1;32m 182\u001b[0m )\n", - "File \u001b[0;32m~/miniconda3/envs/kscale-dev/lib/python3.9/site-packages/brax/envs/wrappers/training.py:122\u001b[0m, in \u001b[0;36mAutoResetWrapper.step\u001b[0;34m(self, state, action)\u001b[0m\n\u001b[1;32m 120\u001b[0m state\u001b[38;5;241m.\u001b[39minfo\u001b[38;5;241m.\u001b[39mupdate(steps\u001b[38;5;241m=\u001b[39msteps)\n\u001b[1;32m 121\u001b[0m state \u001b[38;5;241m=\u001b[39m state\u001b[38;5;241m.\u001b[39mreplace(done\u001b[38;5;241m=\u001b[39mjp\u001b[38;5;241m.\u001b[39mzeros_like(state\u001b[38;5;241m.\u001b[39mdone))\n\u001b[0;32m--> 122\u001b[0m state \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43menv\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mstep\u001b[49m\u001b[43m(\u001b[49m\u001b[43mstate\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43maction\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 124\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mwhere_done\u001b[39m(x, y):\n\u001b[1;32m 125\u001b[0m done \u001b[38;5;241m=\u001b[39m state\u001b[38;5;241m.\u001b[39mdone\n", - "File \u001b[0;32m~/miniconda3/envs/kscale-dev/lib/python3.9/site-packages/brax/envs/wrappers/training.py:71\u001b[0m, in \u001b[0;36mVmapWrapper.step\u001b[0;34m(self, state, action)\u001b[0m\n\u001b[1;32m 70\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mstep\u001b[39m(\u001b[38;5;28mself\u001b[39m, state: State, action: jax\u001b[38;5;241m.\u001b[39mArray) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m State:\n\u001b[0;32m---> 71\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mjax\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mvmap\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43menv\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mstep\u001b[49m\u001b[43m)\u001b[49m\u001b[43m(\u001b[49m\u001b[43mstate\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43maction\u001b[49m\u001b[43m)\u001b[49m\n", - " \u001b[0;31m[... skipping hidden 3 frame]\u001b[0m\n", - "File \u001b[0;32m~/miniconda3/envs/kscale-dev/lib/python3.9/site-packages/brax/envs/wrappers/training.py:93\u001b[0m, in \u001b[0;36mEpisodeWrapper.step\u001b[0;34m(self, state, action)\u001b[0m\n\u001b[1;32m 90\u001b[0m nstate \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39menv\u001b[38;5;241m.\u001b[39mstep(state, action)\n\u001b[1;32m 91\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m nstate, nstate\u001b[38;5;241m.\u001b[39mreward\n\u001b[0;32m---> 93\u001b[0m state, rewards \u001b[38;5;241m=\u001b[39m \u001b[43mjax\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mlax\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mscan\u001b[49m\u001b[43m(\u001b[49m\u001b[43mf\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstate\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43maction_repeat\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 94\u001b[0m state \u001b[38;5;241m=\u001b[39m state\u001b[38;5;241m.\u001b[39mreplace(reward\u001b[38;5;241m=\u001b[39mjp\u001b[38;5;241m.\u001b[39msum(rewards, axis\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m0\u001b[39m))\n\u001b[1;32m 95\u001b[0m steps \u001b[38;5;241m=\u001b[39m state\u001b[38;5;241m.\u001b[39minfo[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124msteps\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m+\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39maction_repeat\n", - " \u001b[0;31m[... skipping hidden 2 frame]\u001b[0m\n", - "File \u001b[0;32m~/miniconda3/envs/kscale-dev/lib/python3.9/site-packages/jax/_src/lax/control_flow/loops.py:352\u001b[0m, in \u001b[0;36m_check_scan_carry_type\u001b[0;34m(body_fun, in_carry, out_carry_tree, out_avals)\u001b[0m\n\u001b[1;32m 345\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mall\u001b[39m(_map(core\u001b[38;5;241m.\u001b[39mtypematch, in_avals, out_avals)):\n\u001b[1;32m 346\u001b[0m differences \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;241m.\u001b[39mjoin(\n\u001b[1;32m 347\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m * \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mcomponent(path)\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m has type \u001b[39m\u001b[38;5;132;01m{\u001b[39;00min_aval\u001b[38;5;241m.\u001b[39mstr_short()\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m\n\u001b[1;32m 348\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124m but the corresponding output carry component has type \u001b[39m\u001b[38;5;124m'\u001b[39m\n\u001b[1;32m 349\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mout_aval\u001b[38;5;241m.\u001b[39mstr_short()\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;132;01m{\u001b[39;00m_aval_mismatch_extra(in_aval,\u001b[38;5;250m \u001b[39mout_aval)\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m'\u001b[39m\n\u001b[1;32m 350\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m path, in_aval, out_aval \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mzip\u001b[39m(paths, in_avals, out_avals)\n\u001b[1;32m 351\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m core\u001b[38;5;241m.\u001b[39mtypematch(in_aval, out_aval))\n\u001b[0;32m--> 352\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m(\n\u001b[1;32m 353\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mScanned function carry input and carry output must have equal types \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 354\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m(e.g. shapes and dtypes of arrays), \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 355\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mbut they differ:\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 356\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mdifferences\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 357\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mRevise the scanned function so that all output types (e.g. shapes \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 358\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mand dtypes) match the corresponding input types.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 359\u001b[0m )\n", - "\u001b[0;31mTypeError\u001b[0m: Scanned function carry input and carry output must have equal types (e.g. shapes and dtypes of arrays), but they differ:\n * the input carry component state.done has type float32[] but the corresponding output carry component has type bool[], so the dtypes do not match\n\nRevise the scanned function so that all output types (e.g. shapes and dtypes) match the corresponding input types." - ] - }, - { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31mThe Kernel crashed while executing code in the current cell or a previous cell. \n", - "\u001b[1;31mPlease review the code in the cell(s) to identify a possible cause of the failure. \n", - "\u001b[1;31mClick here for more info. \n", - "\u001b[1;31mView Jupyter log for further details." - ] - } - ], - "source": [ - "train_fn = functools.partial(\n", - " ppo.train, num_timesteps=30_000_000, num_evals=5, reward_scaling=0.1,\n", - " episode_length=1000, normalize_observations=True, action_repeat=1,\n", - " unroll_length=10, num_minibatches=32, num_updates_per_batch=8,\n", - " discounting=0.97, learning_rate=3e-4, entropy_cost=1e-3, num_envs=2048,\n", - " batch_size=1024, seed=0)\n", - "\n", - "\n", - "x_data = []\n", - "y_data = []\n", - "ydataerr = []\n", - "times = [datetime.now()]\n", - "\n", - "max_y, min_y = 13000, 0\n", - "def progress(num_steps, metrics):\n", - " times.append(datetime.now())\n", - " x_data.append(num_steps)\n", - " y_data.append(metrics['eval/episode_reward'])\n", - " ydataerr.append(metrics['eval/episode_reward_std'])\n", - "\n", - " plt.xlim([0, train_fn.keywords['num_timesteps'] * 1.25])\n", - " plt.ylim([min_y, max_y])\n", - "\n", - " plt.xlabel('# environment steps')\n", - " plt.ylabel('reward per episode')\n", - " plt.title(f'y={y_data[-1]:.3f}')\n", - "\n", - " plt.errorbar(\n", - " x_data, y_data, yerr=ydataerr)\n", - " plt.show()\n", - "\n", - "make_inference_fn, params, _ = train_fn(environment=env, progress_fn=progress)\n", - "\n", - "print(f'time to jit: {times[1] - times[0]}')\n", - "print(f'time to train: {times[-1] - times[1]}')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "kscale-dev", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.19" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/sim/mjx_gym/train.py b/sim/mjx_gym/train.py new file mode 100644 index 00000000..af80091d --- /dev/null +++ b/sim/mjx_gym/train.py @@ -0,0 +1,94 @@ +import yaml +import wandb +import argparse +from envs import get_env +from brax.training.agents.ppo import train as ppo +import functools +import matplotlib.pyplot as plt +from datetime import datetime +from brax import envs + +# Parse command-line arguments +parser = argparse.ArgumentParser(description='Run PPO training with specified config file.') +parser.add_argument('--config', type=str, required=True, help='Path to the config YAML file') +args = parser.parse_args() + +# Load config from YAML file +with open(args.config, 'r') as file: + config = yaml.safe_load(file) + +# Initialize wandb +wandb.init(project="robotic-locomotion-training", name=config.get('experiment_name', 'ppo-training')) + +DEFAULT_REWARD_PARAMS = { + 'rew_forward': {'weight': 1.25}, + 'rew_healthy': {'weight': 5.0, 'healthy_z_lower': 1.0, 'healthy_z_upper': 2.0}, + 'rew_ctrl_cost': {'weight': 0.1} +} + +reward_params = config.get('reward_params', DEFAULT_REWARD_PARAMS) +terminate_when_unhealthy = config.get('terminate_when_unhealthy', True) +reset_noise_scale = config.get('reset_noise_scale', 1e-2) +exclude_current_positions_from_observation = config.get('exclude_current_positions_from_observation', True) +log_reward_breakdown = config.get('log_reward_breakdown', True) + +env = get_env( + "default_humanoid", + reward_params=reward_params, + terminate_when_unhealthy=terminate_when_unhealthy, + reset_noise_scale=reset_noise_scale, + exclude_current_positions_from_observation=exclude_current_positions_from_observation, + log_reward_breakdown=log_reward_breakdown +) + +train_fn = functools.partial( + ppo.train, + num_timesteps=config['num_timesteps'], + num_evals=config['num_evals'], + reward_scaling=config['reward_scaling'], + episode_length=config['episode_length'], + normalize_observations=config['normalize_observations'], + action_repeat=config['action_repeat'], + unroll_length=config['unroll_length'], + num_minibatches=config['num_minibatches'], + num_updates_per_batch=config['num_updates_per_batch'], + discounting=config['discounting'], + learning_rate=config['learning_rate'], + entropy_cost=config['entropy_cost'], + num_envs=config['num_envs'], + batch_size=config['batch_size'], + seed=config['seed'] +) + +x_data = [] +y_data = [] +ydataerr = [] +times = [datetime.now()] + +max_y, min_y = 13000, 0 + +def progress(num_steps, metrics): + times.append(datetime.now()) + x_data.append(num_steps) + y_data.append(metrics['eval/episode_reward']) + ydataerr.append(metrics['eval/episode_reward_std']) + + # Log metrics to wandb + print(metrics) + wandb.log({"steps": num_steps, **metrics}) + + plt.xlim([0, train_fn.keywords['num_timesteps'] * 1.25]) + plt.ylim([min_y, max_y]) + + plt.xlabel('# environment steps') + plt.ylabel('reward per episode') + plt.title(f'y={y_data[-1]:.3f}') + + plt.errorbar( + x_data, y_data, yerr=ydataerr) + plt.show() + +make_inference_fn, params, _ = train_fn(environment=env, progress_fn=progress) + +print(f'time to jit: {times[1] - times[0]}') +print(f'time to train: {times[-1] - times[1]}') From b9cc1ffd575c373871ecedceebbf00ada8dcfee7 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Wed, 22 May 2024 18:50:07 +0000 Subject: [PATCH 04/17] feat: added training config for stompy --- sim/mjx_gym/MUJOCO_LOG.TXT | 3 ++ sim/mjx_gym/envs/__init__.py | 4 ++- .../envs/default_humanoid/default_humanoid.py | 1 - sim/mjx_gym/experiments/stompy_walk.yaml | 31 +++++++++++++++++++ sim/mjx_gym/train.py | 8 +++-- 5 files changed, 43 insertions(+), 4 deletions(-) create mode 100644 sim/mjx_gym/MUJOCO_LOG.TXT create mode 100644 sim/mjx_gym/experiments/stompy_walk.yaml diff --git a/sim/mjx_gym/MUJOCO_LOG.TXT b/sim/mjx_gym/MUJOCO_LOG.TXT new file mode 100644 index 00000000..b5d0ca4f --- /dev/null +++ b/sim/mjx_gym/MUJOCO_LOG.TXT @@ -0,0 +1,3 @@ +Wed May 22 18:01:37 2024 +WARNING: File size over 2GB is not supported. File: '/home/mlutz/data/sim/sim/stompy' + diff --git a/sim/mjx_gym/envs/__init__.py b/sim/mjx_gym/envs/__init__.py index 173ba511..a29af6ca 100644 --- a/sim/mjx_gym/envs/__init__.py +++ b/sim/mjx_gym/envs/__init__.py @@ -1,9 +1,11 @@ from brax import envs from .default_humanoid.default_humanoid import DefaultHumanoidEnv +from .stompy.stompy import StompyEnv environments = { - "default_humanoid": DefaultHumanoidEnv + "default_humanoid": DefaultHumanoidEnv, + "stompy": StompyEnv } def get_env(name: str, **kwargs) -> envs.Env: diff --git a/sim/mjx_gym/envs/default_humanoid/default_humanoid.py b/sim/mjx_gym/envs/default_humanoid/default_humanoid.py index 28b49836..b554acc3 100644 --- a/sim/mjx_gym/envs/default_humanoid/default_humanoid.py +++ b/sim/mjx_gym/envs/default_humanoid/default_humanoid.py @@ -1,4 +1,3 @@ - import jax import jax.numpy as jp from brax.envs.base import PipelineEnv, State diff --git a/sim/mjx_gym/experiments/stompy_walk.yaml b/sim/mjx_gym/experiments/stompy_walk.yaml new file mode 100644 index 00000000..56228271 --- /dev/null +++ b/sim/mjx_gym/experiments/stompy_walk.yaml @@ -0,0 +1,31 @@ +project_name: stompy_walk +experiment_name: first_experiment +num_timesteps: 30000000 +num_evals: 5 +reward_scaling: 0.1 +episode_length: 1000 +normalize_observations: true +action_repeat: 1 +unroll_length: 10 +num_minibatches: 32 +num_updates_per_batch: 8 +discounting: 0.97 +learning_rate: 0.0003 +entropy_cost: 0.001 +num_envs: 2048 +batch_size: 1024 +seed: 0 +env_name: stompy +reward_params: + rew_forward: + weight: 1.25 + rew_healthy: + weight: 5.0 + healthy_z_lower: 1.0 + healthy_z_upper: 2.0 + rew_ctrl_cost: + weight: 0.1 +terminate_when_unhealthy: true +reset_noise_scale: 0.01 +exclude_current_positions_from_observation: true +log_reward_breakdown: true diff --git a/sim/mjx_gym/train.py b/sim/mjx_gym/train.py index af80091d..6ce1c0a0 100644 --- a/sim/mjx_gym/train.py +++ b/sim/mjx_gym/train.py @@ -18,7 +18,7 @@ config = yaml.safe_load(file) # Initialize wandb -wandb.init(project="robotic-locomotion-training", name=config.get('experiment_name', 'ppo-training')) +wandb.init(project=config.get('project_name', 'robotic-locomotion-training'), name=config.get('experiment_name', 'ppo-training')) DEFAULT_REWARD_PARAMS = { 'rew_forward': {'weight': 1.25}, @@ -32,8 +32,12 @@ exclude_current_positions_from_observation = config.get('exclude_current_positions_from_observation', True) log_reward_breakdown = config.get('log_reward_breakdown', True) +print(f'env_name: {config.get("env_name", "stompy")}') +print(f'reward_params: {reward_params}') +print(f'training on {config["num_envs"]} environments') + env = get_env( - "default_humanoid", + name=config.get('env_name', 'stompy'), reward_params=reward_params, terminate_when_unhealthy=terminate_when_unhealthy, reset_noise_scale=reset_noise_scale, From 2eead0c1dffb48bb500cf1f4c4308eaad1be3a80 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Wed, 22 May 2024 20:55:37 +0000 Subject: [PATCH 05/17] feat: storing weight checkpoints and added play --- sim/mjx_gym/play.py | 74 ++++++++++++++++++ sim/mjx_gym/train.py | 11 ++- sim/mjx_gym/weights/default_humanoid_walk.pkl | Bin 0 -> 66478 bytes 3 files changed, 83 insertions(+), 2 deletions(-) create mode 100644 sim/mjx_gym/play.py create mode 100644 sim/mjx_gym/weights/default_humanoid_walk.pkl diff --git a/sim/mjx_gym/play.py b/sim/mjx_gym/play.py new file mode 100644 index 00000000..b67b4591 --- /dev/null +++ b/sim/mjx_gym/play.py @@ -0,0 +1,74 @@ +import yaml +import wandb +import argparse +from envs import get_env +from brax.io import model +from brax.training.agents.ppo import networks as ppo_networks +import mediapy as media +import jax + +# Parse command-line arguments +parser = argparse.ArgumentParser(description='Run PPO training with specified config file.') +parser.add_argument('--config', type=str, required=True, help='Path to the config YAML file') +args = parser.parse_args() + +# Load config from YAML file +with open(args.config, 'r') as file: + config = yaml.safe_load(file) + +# Initialize wandb +wandb.init(project=config.get('project_name', 'robotic_locomotion_training') + "_test", name=config.get('experiment_name', 'ppo-training') + "_test") + +DEFAULT_REWARD_PARAMS = { + 'rew_forward': {'weight': 1.25}, + 'rew_healthy': {'weight': 5.0, 'healthy_z_lower': 1.0, 'healthy_z_upper': 2.0}, + 'rew_ctrl_cost': {'weight': 0.1} +} + +reward_params = config.get('reward_params', DEFAULT_REWARD_PARAMS) +terminate_when_unhealthy = config.get('terminate_when_unhealthy', True) +reset_noise_scale = config.get('reset_noise_scale', 1e-2) +exclude_current_positions_from_observation = config.get('exclude_current_positions_from_observation', True) +log_reward_breakdown = config.get('log_reward_breakdown', True) + +print(f'env_name: {config.get("env_name", "stompy")}') +print(f'reward_params: {reward_params}') +print(f'testing on {config["num_envs"]} environments') + +env = get_env( + name=config.get('env_name', 'stompy'), + reward_params=reward_params, + terminate_when_unhealthy=terminate_when_unhealthy, + reset_noise_scale=reset_noise_scale, + exclude_current_positions_from_observation=exclude_current_positions_from_observation, + log_reward_breakdown=log_reward_breakdown +) + +# Loading params +model_path = "weights/" + config.get('project_name', '') + ".pkl" +params = model.load_params(model_path) +policy_network = ppo_networks.make_ppo_networks(env.observation_size, env.action_size) +inference_fn = ppo_networks.make_inference_fn(policy_network)(params) +jit_inference_fn = jax.jit(inference_fn) +jit_reset = jax.jit(env.reset) +jit_step = jax.jit(env.step) + +# initialize the state +rng = jax.random.PRNGKey(0) +state = jit_reset(rng) +rollout = [state.pipeline_state] + +# grab a trajectory +n_steps = 100 +render_every = 2 + +for i in range(n_steps): + act_rng, rng = jax.random.split(rng) + ctrl, _ = jit_inference_fn(state.obs, act_rng) + state = jit_step(state, ctrl) + rollout.append(state.pipeline_state) + + if state.done: + break + +media.show_video(env.render(rollout[::render_every], camera='side'), fps=1.0 / env.dt / render_every) \ No newline at end of file diff --git a/sim/mjx_gym/train.py b/sim/mjx_gym/train.py index 6ce1c0a0..ed67813c 100644 --- a/sim/mjx_gym/train.py +++ b/sim/mjx_gym/train.py @@ -7,6 +7,7 @@ import matplotlib.pyplot as plt from datetime import datetime from brax import envs +from brax.io import model # Parse command-line arguments parser = argparse.ArgumentParser(description='Run PPO training with specified config file.') @@ -78,8 +79,11 @@ def progress(num_steps, metrics): ydataerr.append(metrics['eval/episode_reward_std']) # Log metrics to wandb - print(metrics) - wandb.log({"steps": num_steps, **metrics}) + wandb.log({ + "steps": num_steps, + "epoch_time": (times[-1] - times[-2]).total_seconds(), + **metrics + }) plt.xlim([0, train_fn.keywords['num_timesteps'] * 1.25]) plt.ylim([min_y, max_y]) @@ -96,3 +100,6 @@ def progress(num_steps, metrics): print(f'time to jit: {times[1] - times[0]}') print(f'time to train: {times[-1] - times[1]}') + +model_path = "/weights/" + config.get('project_name', 'model') + ".pkl" +model.save_params(model_path, params) \ No newline at end of file diff --git a/sim/mjx_gym/weights/default_humanoid_walk.pkl b/sim/mjx_gym/weights/default_humanoid_walk.pkl new file mode 100644 index 0000000000000000000000000000000000000000..8d5d359bb687de933d435bee191a0abee403c53f GIT binary patch literal 66478 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 Date: Wed, 22 May 2024 21:06:02 +0000 Subject: [PATCH 06/17] feat: added stomppy environment --- sim/mjx_gym/envs/__init__.py | 4 +- .../__init__.py | 0 .../default_humanoid.py | 0 .../rewards.py | 0 sim/mjx_gym/envs/stompy_env/__init__.py | 0 sim/mjx_gym/envs/stompy_env/rewards.py | 88 ++++++++++ sim/mjx_gym/envs/stompy_env/stompy.py | 152 ++++++++++++++++++ 7 files changed, 242 insertions(+), 2 deletions(-) rename sim/mjx_gym/envs/{default_humanoid => default_humanoid_env}/__init__.py (100%) rename sim/mjx_gym/envs/{default_humanoid => default_humanoid_env}/default_humanoid.py (100%) rename sim/mjx_gym/envs/{default_humanoid => default_humanoid_env}/rewards.py (100%) create mode 100644 sim/mjx_gym/envs/stompy_env/__init__.py create mode 100644 sim/mjx_gym/envs/stompy_env/rewards.py create mode 100644 sim/mjx_gym/envs/stompy_env/stompy.py diff --git a/sim/mjx_gym/envs/__init__.py b/sim/mjx_gym/envs/__init__.py index a29af6ca..92c53681 100644 --- a/sim/mjx_gym/envs/__init__.py +++ b/sim/mjx_gym/envs/__init__.py @@ -1,7 +1,7 @@ from brax import envs -from .default_humanoid.default_humanoid import DefaultHumanoidEnv -from .stompy.stompy import StompyEnv +from .default_humanoid_env.default_humanoid import DefaultHumanoidEnv +from .stompy_env.stompy import StompyEnv environments = { "default_humanoid": DefaultHumanoidEnv, diff --git a/sim/mjx_gym/envs/default_humanoid/__init__.py b/sim/mjx_gym/envs/default_humanoid_env/__init__.py similarity index 100% rename from sim/mjx_gym/envs/default_humanoid/__init__.py rename to sim/mjx_gym/envs/default_humanoid_env/__init__.py diff --git a/sim/mjx_gym/envs/default_humanoid/default_humanoid.py b/sim/mjx_gym/envs/default_humanoid_env/default_humanoid.py similarity index 100% rename from sim/mjx_gym/envs/default_humanoid/default_humanoid.py rename to sim/mjx_gym/envs/default_humanoid_env/default_humanoid.py diff --git a/sim/mjx_gym/envs/default_humanoid/rewards.py b/sim/mjx_gym/envs/default_humanoid_env/rewards.py similarity index 100% rename from sim/mjx_gym/envs/default_humanoid/rewards.py rename to sim/mjx_gym/envs/default_humanoid_env/rewards.py diff --git a/sim/mjx_gym/envs/stompy_env/__init__.py b/sim/mjx_gym/envs/stompy_env/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/sim/mjx_gym/envs/stompy_env/rewards.py b/sim/mjx_gym/envs/stompy_env/rewards.py new file mode 100644 index 00000000..ccd5cd8f --- /dev/null +++ b/sim/mjx_gym/envs/stompy_env/rewards.py @@ -0,0 +1,88 @@ +import jax +import jax.numpy as jp +from brax import base +from brax.mjx.base import State as mjxState +from typing import Callable, Dict, Tuple + +def get_reward_fn(reward_params: Dict[str, Dict[str, float]], dt, include_reward_breakdown) -> Callable[[mjxState, jp.ndarray, mjxState], Tuple[jp.ndarray, jp.ndarray, Dict[str, jp.ndarray]]]: + """Get a combined reward function. + + Args: + reward_params: Dictionary of reward parameters. + dt: Time step. + Returns: + A reward function that takes in a state, action, and next state and returns a float wrapped in a jp.ndarray. + """ + def reward_fn(state: mjxState, action: jp.ndarray, next_state: mjxState) -> Tuple[jp.ndarray, jp.ndarray, Dict[str, jp.ndarray]]: + reward, is_healthy = jp.array(0.), jp.array(1.) + rewards = {} + for key, params in reward_params.items(): + r, h = reward_functions[key](state, action, next_state, dt, params) + is_healthy *= h + reward += r + if include_reward_breakdown: # For more detailed logging, can be disabled for performance + rewards[key] = r + return reward, is_healthy, rewards + + return reward_fn + +def forward_reward_fn(state: mjxState, action: jp.ndarray, next_state: mjxState, dt: jax.Array, params: Dict[str, float]) -> Tuple[jp.ndarray, jp.ndarray]: + """Reward function for moving forward. + + Args: + state: Current state. + action: Action taken. + next_state: Next state. + dt: Time step. + params: Reward parameters. + Returns: + A float wrapped in a jax array. + """ + xpos = state.subtree_com[1][0] # TODO: include stricter typing than mjxState to avoid this type error + next_xpos = next_state.subtree_com[1][0] + velocity = (next_xpos - xpos) / dt + forward_reward = params['weight'] * velocity + + return forward_reward, jp.array(1.) # TODO: ensure everything is initialized in a size 2 array instead... + +def healthy_reward_fn(state: mjxState, action: jp.ndarray, next_state: mjxState, dt: jax.Array, params: Dict[str, float]) -> Tuple[jp.ndarray, jp.ndarray]: + """Reward function for staying healthy. + + Args: + state: Current state. + action: Action taken. + next_state: Next state. + dt: Time step. + params: Reward parameters. + Returns: + A float wrapped in a jax array. + """ + min_z = params['healthy_z_lower'] + max_z = params['healthy_z_upper'] + is_healthy = jp.where(state.q[2] < min_z, 0.0, 1.0) + is_healthy = jp.where(state.q[2] > max_z, 0.0, is_healthy) + healthy_reward = jp.array(params['weight']) * is_healthy + + return healthy_reward, is_healthy + +def ctrl_cost_reward_fn(state: mjxState, action: jp.ndarray, next_state: mjxState, dt: jax.Array, params: Dict[str, float]) -> Tuple[jp.ndarray, jp.ndarray]: + """Reward function for control cost. + + Args: + state: Current state. + action: Action taken. + next_state: Next state. + dt: Time step. + params: Reward parameters. + Returns: + A float wrapped in a jax array. + """ + ctrl_cost = -params['weight'] * jp.sum(jp.square(action)) + + return ctrl_cost, jp.array(1.) + +reward_functions = { + 'rew_forward': forward_reward_fn, + 'rew_healthy': healthy_reward_fn, + 'rew_ctrl_cost': ctrl_cost_reward_fn +} \ No newline at end of file diff --git a/sim/mjx_gym/envs/stompy_env/stompy.py b/sim/mjx_gym/envs/stompy_env/stompy.py new file mode 100644 index 00000000..3ad6c46e --- /dev/null +++ b/sim/mjx_gym/envs/stompy_env/stompy.py @@ -0,0 +1,152 @@ + +import jax +import jax.numpy as jp +from brax.envs.base import PipelineEnv, State +from brax.mjx.base import State as mjxState +from brax.io import mjcf +import mujoco +from mujoco import mjx +from etils import epath +import os +from .rewards import get_reward_fn + +DEFAULT_REWARD_PARAMS = { + 'rew_forward': {'weight': 1.25}, + 'rew_healthy': {'weight': 5.0, 'healthy_z_lower': 1.0, 'healthy_z_upper': 2.0}, + 'rew_ctrl_cost': {'weight': 0.1} +} + +class StompyEnv(PipelineEnv): + """ + An environment for humanoid body position, velocities, and angles. + """ + def __init__( + self, + reward_params=DEFAULT_REWARD_PARAMS, + terminate_when_unhealthy=True, + reset_noise_scale=1e-2, + exclude_current_positions_from_observation=True, + log_reward_breakdown=True, + **kwargs, + ): + path = os.getenv('MODEL_DIR', '') + "/stompy.xml" + mj_model = mujoco.MjModel.from_xml_path(path) # type: ignore + mj_model.opt.solver = mujoco.mjtSolver.mjSOL_CG # type: ignore # TODO: not sure why typing is not working here + mj_model.opt.iterations = 6 + mj_model.opt.ls_iterations = 6 + + sys = mjcf.load_model(mj_model) + + physics_steps_per_control_step = 4 # Should find way to perturb this value in the future + kwargs['n_frames'] = kwargs.get('n_frames', physics_steps_per_control_step) + kwargs['backend'] = 'mjx' + + super().__init__(sys, **kwargs) + + self._reward_params = reward_params + self._terminate_when_unhealthy = terminate_when_unhealthy + self._reset_noise_scale = reset_noise_scale + self._exclude_current_positions_from_observation = (exclude_current_positions_from_observation) + self._log_reward_breakdown = log_reward_breakdown + + self.reward_fn = get_reward_fn(self._reward_params, self.dt, include_reward_breakdown=True) + + def reset(self, rng: jp.ndarray) -> State: + """Resets the environment to an initial state. + + Args: + rng: Random number generator seed. + Returns: + The initial state of the environment. + """ + rng, rng1, rng2 = jax.random.split(rng, 3) + + low, hi = -self._reset_noise_scale, self._reset_noise_scale + qpos = self.sys.qpos0 + jax.random.uniform(rng1, (self.sys.nq,), minval=low, maxval=hi) + qvel = jax.random.uniform(rng2, (self.sys.nv,), minval=low, maxval=hi) + + mjx_state = self.pipeline_init(qpos, qvel) + assert type(mjx_state) == mjxState, f'mjx_state is of type {type(mjx_state)}' + + obs = self._get_obs(mjx_state, jp.zeros(self.sys.nu)) + reward, done, zero = jp.zeros(3) + metrics = { + 'x_position': zero, + 'y_position': zero, + 'distance_from_origin': zero, + 'x_velocity': zero, + 'y_velocity': zero, + } + for key in self._reward_params.keys(): + metrics[key] = zero + + return State(mjx_state, obs, reward, done, metrics) + + def step(self, state: State, action: jp.ndarray) -> State: + """Runs one timestep of the environment's dynamics. + + Args: + state: The current state of the environment. + action: The action to take. + Returns: + A tuple of the next state, the reward, whether the episode has ended, and additional information. + """ + mjx_state = state.pipeline_state + assert mjx_state, 'state.pipeline_state was recorded as None' + # TODO: determine whether to raise an error or reset the environment + + next_mjx_state = self.pipeline_step(mjx_state, action) + + assert type(next_mjx_state) == mjxState, f'next_mjx_state is of type {type(next_mjx_state)}' + assert type(mjx_state) == mjxState, f'mjx_state is of type {type(mjx_state)}' + # mlutz: from what I've seen, .pipeline_state and .pipeline_step(...) actually return an brax.mjx.base.State object + # however, the type hinting suggests that it should return a brax.base.State object + # brax.mjx.base.State inherits from brax.base.State but also inherits from mjx.Data, which is needed for some rewards + + obs = self._get_obs(mjx_state, action) + reward, is_healthy, reward_breakdown = self.reward_fn(mjx_state, action, next_mjx_state) + + if self._terminate_when_unhealthy: + done = 1.0 - is_healthy + else: + done = jp.array(0) + + state.metrics.update( + x_position=next_mjx_state.subtree_com[1][0], + y_position=next_mjx_state.subtree_com[1][1], + distance_from_origin=jp.linalg.norm(next_mjx_state.subtree_com[1]), + x_velocity=(next_mjx_state.subtree_com[1][0] - mjx_state.subtree_com[1][0]) / self.dt, + y_velocity=(next_mjx_state.subtree_com[1][1] - mjx_state.subtree_com[1][1]) / self.dt + ) + + if self._log_reward_breakdown: + for key, val in reward_breakdown.items(): + state.metrics[key] = val + + return state.replace( # type: ignore # TODO: fix the type hinting... + pipeline_state=next_mjx_state, obs=obs, reward=reward, done=done + ) + + def _get_obs( + self, data: mjxState, action: jp.ndarray + ) -> jp.ndarray: + """Observes humanoid body position, velocities, and angles. + + Args: + data: The current state of the environment. + action: The current action. + Returns: + Observations of the environment. + """ + position = data.qpos + if self._exclude_current_positions_from_observation: + position = position[2:] + + # external_contact_forces are excluded + return jp.concatenate([ + position, + data.qvel, + data.cinert[1:].ravel(), + data.cvel[1:].ravel(), + data.qfrc_actuator, + ]) \ No newline at end of file From f2b3db38ee7d42029322eae7a81fe286a15fc972 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Wed, 22 May 2024 22:32:50 +0000 Subject: [PATCH 07/17] feat: added model checkpointing --- sim/mjx_gym/MUJOCO_LOG.TXT | 3 - .../experiments/default_humanoid_walk.yaml | 4 +- sim/mjx_gym/train.py | 22 +- sim/mjx_gym/tutorial_replication.ipynb | 716 ++++++++++++++++++ .../weights/ default_humanoid_walk.pkl | Bin 0 -> 66478 bytes 5 files changed, 724 insertions(+), 21 deletions(-) delete mode 100644 sim/mjx_gym/MUJOCO_LOG.TXT create mode 100644 sim/mjx_gym/tutorial_replication.ipynb create mode 100644 sim/mjx_gym/weights/ default_humanoid_walk.pkl diff --git a/sim/mjx_gym/MUJOCO_LOG.TXT b/sim/mjx_gym/MUJOCO_LOG.TXT deleted file mode 100644 index b5d0ca4f..00000000 --- a/sim/mjx_gym/MUJOCO_LOG.TXT +++ /dev/null @@ -1,3 +0,0 @@ -Wed May 22 18:01:37 2024 -WARNING: File size over 2GB is not supported. File: '/home/mlutz/data/sim/sim/stompy' - diff --git a/sim/mjx_gym/experiments/default_humanoid_walk.yaml b/sim/mjx_gym/experiments/default_humanoid_walk.yaml index 1288fc18..94ae788b 100644 --- a/sim/mjx_gym/experiments/default_humanoid_walk.yaml +++ b/sim/mjx_gym/experiments/default_humanoid_walk.yaml @@ -1,7 +1,7 @@ project_name: default_humanoid_walk experiment_name: constant_alive_reward_fixing -num_timesteps: 30000000 -num_evals: 5 +num_timesteps: 100000000 +num_evals: 10 reward_scaling: 0.1 episode_length: 1000 normalize_observations: true diff --git a/sim/mjx_gym/train.py b/sim/mjx_gym/train.py index ed67813c..2264a170 100644 --- a/sim/mjx_gym/train.py +++ b/sim/mjx_gym/train.py @@ -74,32 +74,22 @@ def progress(num_steps, metrics): times.append(datetime.now()) - x_data.append(num_steps) - y_data.append(metrics['eval/episode_reward']) - ydataerr.append(metrics['eval/episode_reward_std']) - # Log metrics to wandb wandb.log({ "steps": num_steps, "epoch_time": (times[-1] - times[-2]).total_seconds(), **metrics }) - plt.xlim([0, train_fn.keywords['num_timesteps'] * 1.25]) - plt.ylim([min_y, max_y]) +def save_model(current_step, make_policy, params): + model_path = "weights/ " + config.get('project_name', 'model') + ".pkl" + model.save_params(model_path, params) + print(f"Saved model at step {current_step} to {model_path}") - plt.xlabel('# environment steps') - plt.ylabel('reward per episode') - plt.title(f'y={y_data[-1]:.3f}') - - plt.errorbar( - x_data, y_data, yerr=ydataerr) - plt.show() - -make_inference_fn, params, _ = train_fn(environment=env, progress_fn=progress) +make_inference_fn, params, _ = train_fn(environment=env, progress_fn=progress, policy_params_fn=save_model) print(f'time to jit: {times[1] - times[0]}') print(f'time to train: {times[-1] - times[1]}') -model_path = "/weights/" + config.get('project_name', 'model') + ".pkl" +model_path = config.get('project_name', 'model') + ".pkl" model.save_params(model_path, params) \ No newline at end of file diff --git a/sim/mjx_gym/tutorial_replication.ipynb b/sim/mjx_gym/tutorial_replication.ipynb new file mode 100644 index 00000000..5abff615 --- /dev/null +++ b/sim/mjx_gym/tutorial_replication.ipynb @@ -0,0 +1,716 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notes:\n", + "- Needs to run on python 3.9 ... might need to adjust the rest of the repo" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "import time\n", + "import itertools\n", + "import numpy as np\n", + "from typing import Callable, NamedTuple, Optional, Union, List\n", + "\n", + "import mediapy as media\n", + "import matplotlib.pyplot as plt\n", + "\n", + "from datetime import datetime\n", + "import functools\n", + "from IPython.display import HTML\n", + "import jax\n", + "from jax import numpy as jp\n", + "import numpy as np\n", + "from typing import Any, Dict, Sequence, Tuple, Union\n", + "\n", + "from brax import base\n", + "from brax import envs\n", + "from brax import math\n", + "from brax.base import Base, Motion, Transform\n", + "from brax.envs.base import Env, PipelineEnv, State\n", + "from brax.mjx.base import State as MjxState\n", + "from brax.training.agents.ppo import train as ppo\n", + "from brax.training.agents.ppo import networks as ppo_networks\n", + "from brax.io import html, mjcf, model\n", + "\n", + "from etils import epath\n", + "from flax import struct\n", + "from matplotlib import pyplot as plt\n", + "import mediapy as media\n", + "from ml_collections import config_dict\n", + "import mujoco\n", + "from mujoco import mjx\n", + "\n", + "np.set_printoptions(precision=3, suppress=True, linewidth=100)\n", + "#%env MUJOCO_GL=egl" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "device = jax.devices(\"gpu\")[1]" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "xml = \"\"\"\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + "\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "mj_model = mujoco.MjModel.from_xml_string(xml)\n", + "mj_data = mujoco.MjData(mj_model)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "mjx_model = mjx.put_model(mj_model, device)\n", + "mjx_data = mjx.put_data(mj_model, mj_data, device)" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0.] \n", + "[0.] {cuda(id=1)}\n" + ] + } + ], + "source": [ + "print(mj_data.qpos, type(mj_data.qpos))\n", + "print(mjx_data.qpos, type(mjx_data.qpos), mjx_data.qpos.devices())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note: skipping all things that involve rendering for now..." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[0.624]\n", + " [0.089]\n", + " [0.677]\n", + " ...\n", + " [0.031]\n", + " [0.211]\n", + " [0.808]]\n" + ] + } + ], + "source": [ + "rng = jax.random.PRNGKey(0)\n", + "rng = jax.random.split(rng, 4096)\n", + "batch = jax.vmap(lambda rng: mjx_data.replace(qpos=jax.random.uniform(rng, (1,))))(rng)\n", + "\n", + "jit_step = jax.jit(jax.vmap(mjx.step, in_axes=(None, 0)))\n", + "batch = jit_step(mjx_model, batch)\n", + "\n", + "print(batch.qpos)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[array([0.624]), array([0.089]), array([0.677]), array([0.172]), array([0.045]), array([0.254]), array([0.879]), array([0.838]), array([0.073]), array([0.696]), array([0.768]), array([0.451]), array([0.592]), array([0.961]), array([0.747]), array([0.708]), array([0.955]), array([0.997]), array([0.73]), array([0.85]), array([0.308]), array([0.068]), array([0.812]), array([0.993]), array([0.106]), array([0.153]), array([0.418]), array([0.439]), array([0.915]), array([0.178]), array([0.55]), array([0.913]), array([0.288]), array([0.971]), array([0.735]), array([0.406]), array([0.076]), array([0.571]), array([0.543]), array([0.536]), array([0.658]), array([0.969]), array([0.329]), array([0.726]), array([0.48]), array([0.211]), array([0.782]), array([0.52]), array([0.707]), array([0.694]), array([0.43]), array([0.518]), array([0.566]), array([0.893]), array([0.38]), array([0.634]), array([0.303]), array([0.327]), array([0.441]), array([0.326]), array([0.37]), array([0.814]), array([0.822]), array([0.738]), array([0.166]), array([0.652]), array([0.939]), array([0.196]), array([0.838]), array([0.35]), array([0.23]), array([0.984]), array([0.636]), array([0.227]), array([0.068]), array([0.146]), array([0.225]), array([0.835]), array([0.1]), array([0.697]), array([0.861]), array([0.753]), array([0.832]), array([0.424]), array([0.475]), array([0.349]), array([0.286]), array([0.517]), array([0.463]), array([0.757]), array([0.608]), array([0.437]), array([0.442]), array([0.545]), array([0.835]), array([0.398]), array([0.191]), array([0.777]), array([0.117]), array([0.459]), array([0.393]), array([0.659]), array([0.497]), array([0.746]), array([0.496]), array([0.387]), array([0.819]), array([0.304]), array([0.803]), array([0.335]), array([0.473]), array([0.576]), array([0.67]), array([0.544]), array([0.085]), array([0.458]), array([0.121]), array([0.732]), array([0.471]), array([0.055]), array([0.172]), array([0.064]), array([0.714]), array([0.462]), array([0.231]), array([0.8]), array([0.471]), array([0.218]), array([0.806]), array([0.066]), array([0.312]), array([0.298]), array([0.862]), array([0.742]), array([0.232]), array([0.292]), array([0.804]), array([0.455]), array([0.896]), array([0.766]), array([0.8]), array([0.323]), array([0.62]), array([0.098]), array([0.623]), array([0.712]), array([0.244]), array([0.144]), array([0.508]), array([0.938]), array([0.55]), array([0.721]), array([0.425]), array([0.143]), array([0.375]), array([0.14]), array([0.695]), array([0.732]), array([0.724]), array([0.599]), array([0.184]), array([0.95]), array([0.402]), array([0.141]), array([0.662]), array([0.951]), array([0.704]), array([0.117]), array([0.014]), array([0.754]), array([0.725]), array([0.249]), array([0.14]), array([0.265]), array([0.974]), array([0.208]), array([0.074]), array([0.836]), array([0.254]), array([0.039]), array([0.877]), array([0.95]), array([0.545]), array([0.658]), array([0.579]), array([0.68]), array([0.006]), array([0.657]), array([0.889]), array([0.426]), array([0.184]), array([0.401]), array([0.522]), array([0.805]), array([0.626]), array([0.496]), array([0.046]), array([0.417]), array([0.4]), array([0.752]), array([0.352]), array([0.928]), array([0.162]), array([0.489]), array([0.225]), array([0.206]), array([0.903]), array([0.199]), array([0.125]), array([0.061]), array([0.927]), array([0.596]), array([0.252]), array([0.042]), array([0.709]), array([0.272]), array([0.223]), array([0.596]), array([0.621]), array([0.809]), array([0.917]), array([0.782]), array([0.353]), array([0.362]), array([0.224]), array([0.544]), array([0.699]), array([0.977]), array([0.237]), array([0.184]), array([0.651]), array([0.462]), array([0.584]), array([0.564]), array([0.99]), array([0.823]), array([0.752]), array([0.042]), array([0.839]), array([0.681]), array([0.916]), array([0.774]), array([0.39]), array([0.562]), array([0.989]), array([0.846]), array([0.62]), array([0.349]), array([0.601]), array([0.358]), array([0.884]), array([0.031]), array([0.879]), array([0.572]), array([0.269]), array([0.3]), array([0.737]), array([0.223]), array([0.425]), array([0.838]), array([0.648]), array([0.505]), array([0.294]), array([0.401]), array([0.151]), array([0.817]), array([0.595]), array([0.482]), array([0.522]), array([0.653]), array([0.474]), array([0.021]), array([0.954]), array([0.244]), array([0.742]), array([0.524]), array([0.478]), array([0.269]), array([0.251]), array([0.858]), array([0.674]), array([0.808]), array([0.746]), array([0.567]), array([0.926]), array([0.83]), array([0.87]), array([0.003]), array([0.264]), array([0.712]), array([0.052]), array([0.779]), array([0.459]), array([0.954]), array([0.286]), array([0.319]), array([0.364]), array([0.816]), array([0.697]), array([0.011]), array([0.212]), array([0.901]), array([0.195]), array([0.386]), array([0.219]), array([0.939]), array([0.677]), array([0.241]), array([0.643]), array([0.752]), array([0.013]), array([0.285]), array([0.469]), array([0.988]), array([0.907]), array([0.333]), array([0.515]), array([0.311]), array([0.491]), array([0.723]), array([0.768]), array([0.426]), array([0.155]), array([0.198]), array([0.216]), array([0.117]), array([0.763]), array([0.513]), array([0.869]), array([0.079]), array([0.63]), array([0.617]), array([0.776]), array([0.295]), array([0.871]), array([0.448]), array([0.404]), array([0.201]), array([0.165]), array([0.903]), array([0.664]), array([0.601]), array([0.118]), array([0.086]), array([0.608]), array([0.274]), array([0.559]), array([0.624]), array([0.844]), array([0.4]), array([0.172]), array([0.251]), array([0.485]), array([0.229]), array([0.259]), array([0.322]), array([0.338]), array([0.947]), array([0.332]), array([0.725]), array([0.122]), array([0.868]), array([0.388]), array([0.54]), array([0.495]), array([0.431]), array([0.439]), array([0.343]), array([0.25]), array([0.864]), array([0.96]), array([0.064]), array([0.401]), array([0.888]), array([0.961]), array([0.147]), array([0.231]), array([0.609]), array([0.395]), array([0.562]), array([0.947]), array([0.531]), array([0.403]), array([0.8]), array([0.801]), array([0.457]), array([0.62]), array([0.965]), array([0.622]), array([0.521]), array([0.563]), array([0.418]), array([0.48]), array([0.643]), array([0.774]), array([0.186]), array([0.714]), array([0.192]), array([0.837]), array([0.561]), array([0.029]), array([0.443]), array([0.831]), array([0.473]), array([0.659]), array([0.211]), array([0.908]), array([0.608]), array([0.227]), array([0.599]), array([0.032]), array([0.699]), array([0.814]), array([0.947]), array([0.741]), array([0.922]), array([0.973]), array([0.361]), array([0.542]), array([0.146]), array([0.53]), array([0.526]), array([0.108]), array([0.559]), array([0.235]), array([0.905]), array([0.665]), array([0.411]), array([0.305]), array([0.52]), array([0.203]), array([0.814]), array([0.189]), array([0.601]), array([0.393]), array([0.647]), array([0.03]), array([0.218]), array([0.313]), array([0.423]), array([0.851]), array([0.178]), array([0.255]), array([0.862]), array([0.225]), array([0.165]), array([0.76]), array([0.565]), array([0.618]), array([0.549]), array([0.764]), array([0.69]), array([0.525]), array([0.785]), array([0.179]), array([0.915]), array([0.202]), array([0.709]), array([0.057]), array([0.859]), array([0.418]), array([0.256]), array([0.304]), array([0.175]), array([0.663]), array([0.224]), array([0.74]), array([0.321]), array([0.183]), array([0.321]), array([0.155]), array([0.527]), array([0.783]), array([0.54]), array([0.625]), array([0.264]), array([0.308]), array([0.388]), array([0.929]), array([0.726]), array([0.225]), array([0.081]), array([0.804]), array([0.788]), array([0.099]), array([0.967]), array([0.218]), array([0.381]), array([0.168]), array([0.037]), array([0.855]), array([0.115]), array([0.032]), array([0.992]), array([0.692]), array([0.582]), array([0.635]), array([0.935]), array([0.603]), array([0.702]), array([0.634]), array([0.736]), array([0.374]), array([0.338]), array([0.397]), array([0.769]), array([0.848]), array([0.62]), array([0.627]), array([0.851]), array([0.317]), array([0.748]), array([0.366]), array([0.596]), array([0.673]), array([0.506]), array([0.069]), array([0.754]), array([0.628]), array([0.122]), array([0.611]), array([0.832]), array([0.017]), array([0.986]), array([0.897]), array([0.454]), array([0.426]), array([0.673]), array([0.92]), array([0.57]), array([0.475]), array([0.157]), array([0.461]), array([0.696]), array([0.777]), array([0.389]), array([0.575]), array([0.183]), array([0.548]), array([0.767]), array([0.716]), array([0.323]), array([0.576]), array([0.38]), array([0.925]), array([0.758]), array([0.778]), array([0.674]), array([0.569]), array([0.148]), array([0.309]), array([0.413]), array([0.415]), array([0.025]), array([0.872]), array([0.12]), array([0.553]), array([0.73]), array([0.709]), array([0.083]), array([0.76]), array([0.199]), array([0.068]), array([0.664]), array([0.608]), array([0.182]), array([0.695]), array([0.053]), array([0.079]), array([0.458]), array([0.223]), array([0.268]), array([0.444]), array([0.186]), array([0.263]), array([0.29]), array([0.25]), array([0.352]), array([0.572]), array([0.778]), array([0.123]), array([0.825]), array([0.046]), array([0.604]), array([0.091]), array([0.252]), array([0.321]), array([0.775]), array([0.134]), array([0.302]), array([0.847]), array([0.234]), array([0.893]), array([0.049]), array([0.569]), array([0.642]), array([0.098]), array([0.638]), array([0.174]), array([0.936]), array([0.291]), array([0.122]), array([0.017]), array([0.754]), array([0.58]), array([0.302]), array([0.611]), array([0.854]), array([0.425]), array([0.221]), array([0.492]), array([0.641]), array([0.789]), array([0.526]), array([0.176]), array([0.742]), array([0.753]), array([0.122]), array([0.284]), array([0.748]), array([0.551]), array([0.486]), array([0.611]), array([0.612]), array([0.138]), array([0.612]), array([0.663]), array([0.328]), array([0.431]), array([0.841]), array([0.781]), array([0.49]), array([0.542]), array([0.453]), array([0.693]), array([0.503]), array([0.206]), array([0.36]), array([0.274]), array([0.852]), array([0.645]), array([0.76]), array([0.558]), array([0.567]), array([0.108]), array([0.364]), array([0.22]), array([0.638]), array([0.279]), array([0.627]), array([0.923]), array([0.815]), array([0.297]), array([0.953]), array([0.797]), array([0.003]), array([0.122]), array([0.069]), array([0.673]), array([0.959]), array([0.114]), array([0.454]), array([0.646]), array([0.62]), array([0.861]), array([0.284]), array([0.352]), array([0.689]), array([0.077]), array([0.372]), array([0.827]), array([0.157]), array([0.94]), array([0.111]), array([0.057]), array([0.966]), array([0.561]), array([0.049]), array([0.511]), array([0.099]), array([0.341]), array([0.536]), array([0.194]), array([0.42]), array([0.016]), array([0.786]), array([0.022]), array([0.935]), array([0.339]), array([0.766]), array([0.794]), array([0.897]), array([0.607]), array([0.383]), array([0.567]), array([0.054]), array([0.566]), array([0.867]), array([0.389]), array([0.75]), array([0.565]), array([0.847]), array([0.985]), array([0.72]), array([0.319]), array([0.205]), array([0.075]), array([0.801]), array([0.83]), array([0.539]), array([0.835]), array([0.515]), array([0.584]), array([0.336]), array([0.775]), array([0.824]), array([0.617]), array([0.567]), array([0.275]), array([0.54]), array([0.527]), array([0.609]), array([0.187]), array([0.298]), array([0.273]), array([0.307]), array([0.638]), array([0.938]), array([0.49]), array([0.224]), array([0.401]), array([0.723]), array([0.631]), array([0.05]), array([0.681]), array([0.994]), array([0.309]), array([0.55]), array([0.401]), array([0.717]), array([0.139]), array([0.496]), array([0.191]), array([0.984]), array([0.541]), array([0.198]), array([0.144]), array([0.82]), array([0.296]), array([0.086]), array([0.282]), array([0.853]), array([0.4]), array([0.47]), array([0.753]), array([0.764]), array([0.513]), array([0.818]), array([0.081]), array([0.13]), array([0.204]), array([0.255]), array([0.241]), array([0.866]), array([0.963]), array([0.616]), array([0.767]), array([0.898]), array([0.67]), array([0.306]), array([0.611]), array([0.447]), array([0.162]), array([0.391]), array([0.395]), array([0.488]), array([0.914]), array([0.925]), array([0.046]), array([0.559]), array([0.33]), array([0.032]), array([0.846]), array([0.981]), array([0.443]), array([0.294]), array([0.174]), array([0.631]), array([0.157]), array([0.062]), array([0.013]), array([0.181]), array([0.812]), array([0.899]), array([0.422]), array([0.111]), array([0.72]), array([0.042]), array([0.404]), array([0.351]), array([0.779]), array([0.258]), array([0.985]), array([0.461]), array([0.278]), array([0.657]), array([0.43]), array([0.995]), array([0.351]), array([0.392]), array([0.061]), array([0.987]), array([0.726]), array([0.974]), array([0.012]), array([0.298]), array([0.24]), array([0.899]), array([0.188]), array([0.705]), array([0.809]), array([0.876]), array([0.471]), array([0.533]), array([0.701]), array([0.042]), array([0.327]), array([0.554]), array([0.557]), array([0.275]), array([0.177]), array([0.931]), array([0.418]), array([0.411]), array([0.403]), array([0.113]), array([0.426]), array([0.535]), array([0.004]), array([0.021]), array([0.327]), array([0.524]), array([0.83]), array([0.795]), array([0.13]), array([0.246]), array([0.546]), array([0.783]), array([0.08]), array([0.523]), array([0.593]), array([0.157]), array([0.762]), array([0.53]), array([0.419]), array([0.858]), array([0.239]), array([0.41]), array([0.408]), array([0.288]), array([0.281]), array([0.087]), array([0.232]), array([0.13]), array([0.422]), array([0.964]), array([0.176]), array([0.861]), array([0.251]), array([0.582]), array([0.206]), array([0.701]), array([0.794]), array([0.244]), array([0.211]), array([0.654]), array([0.075]), array([0.838]), array([0.367]), array([0.309]), array([0.064]), array([0.973]), array([0.998]), array([0.093]), array([0.466]), array([0.333]), array([0.238]), array([0.298]), array([0.427]), array([0.711]), array([0.349]), array([0.745]), array([0.722]), array([0.303]), array([0.918]), array([0.287]), array([0.914]), array([0.559]), array([0.987]), array([0.405]), array([0.439]), array([0.741]), array([0.157]), array([0.053]), array([0.773]), array([0.475]), array([0.758]), array([0.429]), array([0.576]), array([0.115]), array([0.391]), array([0.053]), array([0.196]), array([0.216]), array([0.212]), array([0.228]), array([0.912]), array([0.971]), array([0.811]), array([0.594]), array([0.912]), array([0.915]), array([0.718]), array([0.475]), array([0.932]), array([0.287]), array([0.913]), array([0.625]), array([0.263]), array([0.248]), array([0.056]), array([0.959]), array([0.566]), array([0.739]), array([0.256]), array([0.459]), array([0.123]), array([0.623]), array([0.818]), array([0.885]), array([0.848]), array([0.286]), array([0.341]), array([0.351]), array([0.447]), array([0.071]), array([0.506]), array([0.222]), array([0.388]), array([0.85]), array([0.941]), array([0.864]), array([0.483]), array([0.419]), array([0.502]), array([0.559]), array([0.865]), array([0.84]), array([0.434]), array([0.981]), array([0.523]), array([0.988]), array([0.865]), array([0.41]), array([0.089]), array([0.451]), array([0.253]), array([0.297]), array([0.48]), array([0.497]), array([0.957]), array([0.795]), array([0.563]), array([0.186]), array([0.057]), array([0.301]), array([0.372]), array([0.157]), array([0.552]), array([0.937]), array([0.084]), array([0.794]), array([0.475]), array([0.201]), array([0.394]), array([0.184]), array([0.713]), array([0.908]), array([0.136]), array([0.485]), array([0.989]), array([0.911]), array([0.809]), array([0.886]), array([0.104]), array([0.173]), array([0.649]), array([0.247]), array([0.029]), array([0.688]), array([0.572]), array([0.84]), array([0.711]), array([0.307]), array([0.986]), array([0.43]), array([0.288]), array([0.616]), array([0.438]), array([0.993]), array([0.762]), array([0.019]), array([0.335]), array([0.095]), array([0.167]), array([0.897]), array([0.047]), array([0.747]), array([0.992]), array([0.875]), array([0.401]), array([0.688]), array([0.393]), array([0.8]), array([0.316]), array([0.905]), array([0.407]), array([0.433]), array([0.145]), array([0.163]), array([0.915]), array([0.156]), array([0.42]), array([0.777]), array([0.902]), array([0.728]), array([0.395]), array([0.19]), array([0.039]), array([0.079]), array([0.517]), array([0.499]), array([0.407]), array([0.973]), array([0.517]), array([0.16]), array([0.004]), array([0.615]), array([0.518]), array([0.662]), array([0.581]), array([0.198]), array([0.409]), array([0.853]), array([0.178]), array([0.568]), array([0.275]), array([0.179]), array([0.638]), array([0.613]), array([0.36]), array([0.994]), array([0.774]), array([0.594]), array([0.687]), array([0.163]), array([0.131]), array([0.334]), array([0.825]), array([0.334]), array([0.819]), array([0.05]), array([0.518]), array([0.043]), array([0.556]), array([0.206]), array([0.498]), array([0.08]), array([0.605]), array([0.326]), array([0.894]), array([0.342]), array([0.333]), array([0.958]), array([0.701]), array([0.566]), array([0.411]), array([0.416]), array([0.715]), array([0.669]), array([0.307]), array([0.795]), array([0.871]), array([0.071]), array([0.735]), array([0.955]), array([0.201]), array([0.3]), array([0.229]), array([0.771]), array([0.372]), array([0.492]), array([0.41]), array([0.975]), array([0.025]), array([0.306]), array([0.666]), array([0.563]), array([0.907]), array([0.482]), array([0.569]), array([0.965]), array([0.979]), array([0.303]), array([0.668]), array([0.054]), array([0.088]), array([0.393]), array([0.573]), array([0.88]), array([0.38]), array([0.293]), array([0.718]), array([0.411]), array([0.068]), array([0.078]), array([0.615]), array([0.034]), array([0.089]), array([0.811]), array([0.281]), array([0.949]), array([0.131]), array([0.783]), array([0.874]), array([0.409]), array([0.473]), array([0.709]), array([0.399]), array([0.474]), array([0.966]), array([0.446]), array([0.424]), array([0.556]), array([0.844]), array([0.519]), array([0.788]), array([0.445]), array([0.944]), array([0.534]), array([0.04]), array([0.931]), array([0.338]), array([0.596]), array([0.296]), array([0.391]), array([0.457]), array([0.9]), array([0.808]), array([0.085]), array([0.076]), array([0.333]), array([0.344]), array([0.815]), array([0.878]), array([0.56]), array([0.208]), array([0.459]), array([0.472]), array([0.858]), array([0.553]), array([0.034]), array([0.738]), array([0.558]), array([0.096]), array([0.27]), array([0.737]), array([0.258]), array([0.372]), array([0.526]), array([0.01]), array([0.09]), array([0.467]), array([0.878]), array([0.557]), array([0.865]), array([0.674]), array([0.373]), array([0.225]), array([0.271]), array([0.79]), array([0.562]), array([0.932]), array([0.039]), array([0.016]), array([0.364]), array([0.488]), array([0.677]), array([0.234]), array([0.045]), array([0.315]), array([0.503]), array([0.546]), array([0.301]), array([0.561]), array([0.261]), array([0.614]), array([0.995]), array([0.328]), array([0.505]), array([0.009]), array([0.002]), array([0.022]), array([0.446]), array([0.924]), array([0.14]), array([0.551]), array([0.155]), array([0.669]), array([0.152]), array([0.981]), array([0.488]), array([0.373]), array([0.822]), array([0.719]), array([0.048]), array([0.607]), array([0.939]), array([0.441]), array([0.13]), array([0.756]), array([0.155]), array([0.759]), array([0.629]), array([0.041]), array([0.027]), array([0.793]), array([0.086]), array([0.095]), array([0.726]), array([0.566]), array([0.412]), array([0.258]), array([0.264]), array([0.293]), array([0.135]), array([0.317]), array([0.548]), array([0.332]), array([0.679]), array([0.496]), array([0.45]), array([0.91]), array([0.631]), array([0.826]), array([0.263]), array([0.414]), array([0.174]), array([0.638]), array([0.555]), array([0.553]), array([0.061]), array([0.971]), array([0.805]), array([0.851]), array([0.791]), array([0.768]), array([0.42]), array([0.007]), array([0.638]), array([0.294]), array([0.758]), array([0.219]), array([0.053]), array([0.076]), array([0.568]), array([0.58]), array([0.066]), array([0.799]), array([0.668]), array([0.336]), array([0.968]), array([0.515]), array([0.85]), array([0.254]), array([0.678]), array([0.413]), array([0.358]), array([0.656]), array([0.568]), array([0.193]), array([0.629]), array([0.904]), array([0.145]), array([0.65]), array([0.153]), array([0.356]), array([0.584]), array([0.644]), array([0.984]), array([0.49]), array([0.538]), array([0.568]), array([0.96]), array([0.956]), array([0.499]), array([0.117]), array([0.255]), array([0.341]), array([0.818]), array([0.389]), array([0.396]), array([0.982]), array([0.078]), array([0.539]), array([0.722]), array([0.457]), array([0.308]), array([0.112]), array([0.41]), array([0.242]), array([0.403]), array([0.447]), array([0.984]), array([0.471]), array([0.168]), array([0.401]), array([0.219]), array([0.62]), array([0.68]), array([0.367]), array([0.375]), array([0.818]), array([0.26]), array([0.736]), array([0.103]), array([0.963]), array([0.81]), array([0.269]), array([0.604]), array([0.125]), array([0.062]), array([0.883]), array([0.723]), array([0.244]), array([0.41]), array([0.036]), array([0.81]), array([0.956]), array([0.739]), array([0.235]), array([0.281]), array([0.238]), array([0.113]), array([0.267]), array([0.786]), array([0.513]), array([0.261]), array([0.091]), array([0.034]), array([0.278]), array([0.215]), array([0.555]), array([0.752]), array([0.53]), array([0.514]), array([0.893]), array([0.506]), array([0.076]), array([0.569]), array([0.966]), array([0.443]), array([0.716]), array([0.106]), array([0.665]), array([0.985]), array([0.993]), array([0.449]), array([0.87]), array([0.409]), array([0.484]), array([0.021]), array([0.543]), array([0.661]), array([0.207]), array([0.164]), array([0.277]), array([0.611]), array([0.797]), array([0.676]), array([0.514]), array([0.568]), array([0.591]), array([0.022]), array([0.986]), array([0.725]), array([0.804]), array([0.428]), array([0.254]), array([0.4]), array([0.696]), array([0.372]), array([0.769]), array([0.8]), array([0.269]), array([0.565]), array([0.552]), array([0.216]), array([0.699]), array([0.262]), array([0.33]), array([0.797]), array([0.697]), array([0.033]), array([0.556]), array([0.858]), array([0.875]), array([0.744]), array([0.912]), array([0.732]), array([0.816]), array([0.256]), array([0.071]), array([0.841]), array([0.094]), array([0.271]), array([0.53]), array([0.274]), array([0.566]), array([0.29]), array([0.536]), array([0.09]), array([0.451]), array([0.239]), array([0.171]), array([0.774]), array([0.133]), array([0.867]), array([0.494]), array([0.507]), array([0.277]), array([0.772]), array([0.178]), array([0.141]), array([0.198]), array([0.902]), array([0.959]), array([0.413]), array([0.001]), array([0.664]), array([0.905]), array([0.694]), array([0.827]), array([0.737]), array([0.056]), array([0.536]), array([0.711]), array([0.32]), array([0.448]), array([0.93]), array([0.635]), array([0.875]), array([0.904]), array([0.433]), array([0.969]), array([0.81]), array([0.297]), array([0.]), array([0.026]), array([0.842]), array([0.717]), array([0.221]), array([0.088]), array([0.672]), array([0.389]), array([0.101]), array([0.282]), array([0.107]), array([0.591]), array([0.885]), array([0.438]), array([0.239]), array([0.592]), array([0.567]), array([0.646]), array([0.678]), array([0.356]), array([0.478]), array([0.471]), array([0.924]), array([0.575]), array([0.422]), array([0.977]), array([0.837]), array([0.592]), array([0.142]), array([0.07]), array([0.744]), array([0.638]), array([0.985]), array([0.439]), array([0.413]), array([0.88]), array([0.187]), array([0.357]), array([0.377]), array([0.36]), array([0.966]), array([0.299]), array([0.132]), array([0.99]), array([0.638]), array([0.915]), array([0.088]), array([0.656]), array([0.806]), array([0.552]), array([0.861]), array([0.281]), array([0.292]), array([0.681]), array([0.804]), array([0.6]), array([0.204]), array([0.865]), array([0.154]), array([0.679]), array([0.712]), array([0.751]), array([0.907]), array([0.619]), array([0.975]), array([0.944]), array([0.403]), array([0.6]), array([0.925]), array([0.136]), array([0.321]), array([0.33]), array([0.698]), array([0.696]), array([0.105]), array([0.813]), array([0.98]), array([0.921]), array([0.211]), array([0.66]), array([0.412]), array([0.168]), array([0.562]), array([0.132]), array([0.283]), array([0.779]), array([0.859]), array([0.512]), array([0.068]), array([0.915]), array([0.042]), array([0.968]), array([0.022]), array([0.813]), array([0.898]), array([0.424]), array([0.493]), array([0.378]), array([0.596]), array([0.44]), array([0.316]), array([0.865]), array([0.753]), array([0.056]), array([0.201]), array([0.829]), array([0.676]), array([0.41]), array([0.202]), array([0.256]), array([0.904]), array([0.537]), array([0.186]), array([0.414]), array([0.532]), array([0.356]), array([0.499]), array([0.712]), array([0.037]), array([0.282]), array([0.931]), array([0.921]), array([0.774]), array([0.471]), array([0.017]), array([0.897]), array([0.423]), array([0.682]), array([0.043]), array([0.159]), array([0.645]), array([0.264]), array([0.045]), array([0.362]), array([0.468]), array([0.229]), array([0.919]), array([0.033]), array([0.024]), array([0.237]), array([0.318]), array([0.624]), array([0.628]), array([0.355]), array([0.723]), array([0.773]), array([0.42]), array([0.233]), array([0.881]), array([0.915]), array([0.54]), array([0.887]), array([0.942]), array([0.67]), array([0.108]), array([0.803]), array([0.164]), array([0.81]), array([0.249]), array([0.845]), array([0.918]), array([0.321]), array([0.155]), array([0.406]), array([0.354]), array([0.989]), array([0.781]), array([0.337]), array([0.575]), array([0.45]), array([0.788]), array([0.738]), array([0.677]), array([0.717]), array([0.931]), array([0.699]), array([0.461]), array([0.333]), array([0.525]), array([0.93]), array([0.383]), array([0.141]), array([0.556]), array([0.35]), array([0.711]), array([0.876]), array([0.15]), array([0.337]), array([0.165]), array([0.063]), array([0.317]), array([0.885]), array([0.835]), array([0.262]), array([0.17]), array([0.407]), array([0.482]), array([0.114]), array([0.684]), array([0.988]), array([0.379]), array([0.212]), array([0.358]), array([0.016]), array([0.369]), array([0.618]), array([0.231]), array([0.879]), array([0.501]), array([0.022]), array([0.135]), array([0.848]), array([0.617]), array([0.422]), array([0.135]), array([0.199]), array([0.89]), array([0.518]), array([0.448]), array([0.723]), array([0.308]), array([0.718]), array([0.999]), array([0.646]), array([0.812]), array([0.727]), array([0.343]), array([0.874]), array([0.84]), array([0.049]), array([0.679]), array([0.136]), array([0.812]), array([0.906]), array([0.218]), array([0.936]), array([0.975]), array([0.369]), array([0.983]), array([0.891]), array([0.699]), array([0.474]), array([0.915]), array([0.329]), array([0.607]), array([0.445]), array([0.111]), array([0.444]), array([0.381]), array([0.185]), array([0.454]), array([0.796]), array([0.521]), array([0.256]), array([0.647]), array([0.385]), array([0.308]), array([0.245]), array([0.108]), array([0.537]), array([0.819]), array([0.902]), array([0.975]), array([0.065]), array([0.368]), array([0.589]), array([0.119]), array([0.426]), array([0.239]), array([0.122]), array([0.656]), array([0.465]), array([0.278]), array([0.831]), array([0.952]), array([0.834]), array([0.416]), array([0.048]), array([0.2]), array([0.808]), array([0.549]), array([0.393]), array([0.892]), array([0.706]), array([0.26]), array([0.615]), array([0.738]), array([0.334]), array([0.511]), array([0.139]), array([0.899]), array([0.209]), array([0.521]), array([0.978]), array([0.269]), array([0.169]), array([0.454]), array([0.47]), array([0.567]), array([0.652]), array([0.963]), array([0.543]), array([0.863]), array([0.279]), array([0.654]), array([0.826]), array([0.317]), array([0.751]), array([0.028]), array([0.445]), array([0.291]), array([0.993]), array([0.713]), array([0.432]), array([0.813]), array([0.771]), array([0.809]), array([0.014]), array([0.244]), array([0.976]), array([0.313]), array([0.314]), array([0.393]), array([0.423]), array([0.051]), array([0.614]), array([0.503]), array([0.763]), array([0.73]), array([0.076]), array([0.039]), array([0.845]), array([0.22]), array([0.56]), array([0.979]), array([0.529]), array([0.632]), array([0.246]), array([0.827]), array([0.76]), array([0.444]), array([0.519]), array([0.338]), array([0.628]), array([0.841]), array([0.125]), array([0.93]), array([0.98]), array([0.358]), array([0.025]), array([0.858]), array([0.869]), array([0.64]), array([0.367]), array([0.453]), array([0.351]), array([0.344]), array([0.368]), array([0.457]), array([0.005]), array([0.147]), array([0.879]), array([0.252]), array([0.218]), array([0.637]), array([0.313]), array([0.527]), array([0.225]), array([0.61]), array([0.349]), array([0.688]), array([0.604]), array([0.272]), array([0.717]), array([0.34]), array([0.993]), array([0.31]), array([0.252]), array([0.626]), array([0.944]), array([0.767]), array([0.184]), array([0.607]), array([0.812]), array([0.879]), array([0.661]), array([0.831]), array([0.326]), array([0.532]), array([0.38]), array([0.]), array([0.173]), array([0.429]), array([0.237]), array([0.514]), array([0.457]), array([0.488]), array([0.059]), array([0.988]), array([0.624]), array([0.884]), array([0.406]), array([0.92]), array([0.481]), array([0.197]), array([0.808]), array([0.384]), array([0.048]), array([0.313]), array([0.382]), array([0.636]), array([0.481]), array([0.175]), array([0.999]), array([0.105]), array([0.923]), array([0.856]), array([0.594]), array([0.28]), array([0.268]), array([0.203]), array([0.853]), array([0.17]), array([0.858]), array([0.938]), array([0.053]), array([0.031]), array([0.208]), array([0.7]), array([0.697]), array([0.971]), array([0.659]), array([0.537]), array([0.898]), array([0.66]), array([0.085]), array([0.543]), array([0.75]), array([0.39]), array([0.905]), array([0.639]), array([0.932]), array([0.847]), array([0.007]), array([0.177]), array([0.192]), array([0.141]), array([0.882]), array([0.137]), array([0.646]), array([0.643]), array([0.056]), array([0.111]), array([0.117]), array([0.19]), array([0.51]), array([0.202]), array([0.456]), array([0.4]), array([0.039]), array([0.834]), array([0.072]), array([0.684]), array([0.351]), array([0.241]), array([0.774]), array([0.531]), array([0.947]), array([0.3]), array([0.182]), array([0.423]), array([0.299]), array([0.912]), array([0.041]), array([0.772]), array([0.308]), array([0.979]), array([0.835]), array([0.865]), array([0.163]), array([0.853]), array([0.319]), array([0.331]), array([0.037]), array([0.691]), array([0.254]), array([0.603]), array([0.239]), array([0.183]), array([0.663]), array([0.275]), array([0.911]), array([0.74]), array([0.508]), array([0.881]), array([0.064]), array([0.774]), array([0.462]), array([0.91]), array([0.968]), array([0.225]), array([0.452]), array([0.142]), array([0.381]), array([0.681]), array([0.054]), array([0.738]), array([0.835]), array([0.011]), array([0.192]), array([0.568]), array([0.317]), array([0.597]), array([0.617]), array([0.175]), array([0.478]), array([0.505]), array([0.318]), array([0.359]), array([0.863]), array([0.439]), array([0.962]), array([0.051]), array([0.781]), array([0.98]), array([0.572]), array([0.973]), array([0.776]), array([0.211]), array([0.661]), array([0.516]), array([0.675]), array([0.207]), array([0.436]), array([0.691]), array([0.515]), array([0.286]), array([0.241]), array([0.471]), array([0.104]), array([0.108]), array([0.732]), array([0.743]), array([0.541]), array([0.374]), array([0.181]), array([0.203]), array([0.936]), array([0.254]), array([0.079]), array([0.456]), array([0.276]), array([0.373]), array([0.488]), array([0.624]), array([0.851]), array([0.1]), array([0.337]), array([0.796]), array([0.231]), array([0.448]), array([0.475]), array([0.58]), array([0.5]), array([0.522]), array([0.298]), array([0.461]), array([0.286]), array([0.24]), array([0.332]), array([0.934]), array([0.763]), array([0.038]), array([0.088]), array([0.339]), array([0.206]), array([0.212]), array([0.391]), array([0.272]), array([0.073]), array([0.843]), array([0.899]), array([0.811]), array([0.401]), array([0.571]), array([0.918]), array([0.095]), array([0.04]), array([0.288]), array([0.44]), array([0.646]), array([0.254]), array([0.56]), array([0.991]), array([0.429]), array([0.086]), array([0.815]), array([0.067]), array([0.156]), array([0.837]), array([0.305]), array([0.732]), array([0.437]), array([0.027]), array([0.766]), array([0.947]), array([0.539]), array([0.47]), array([0.338]), array([0.738]), array([0.569]), array([0.036]), array([0.573]), array([0.09]), array([0.671]), array([0.965]), array([0.746]), array([0.205]), array([0.258]), array([0.007]), array([0.41]), array([0.697]), array([0.086]), array([0.036]), array([0.965]), array([0.277]), array([0.058]), array([0.434]), array([0.604]), array([0.87]), array([0.909]), array([0.303]), array([0.707]), array([0.877]), array([0.833]), array([0.472]), array([0.627]), array([0.869]), array([0.654]), array([0.954]), array([0.391]), array([0.94]), array([0.405]), array([0.478]), array([0.474]), array([0.785]), array([0.076]), array([0.602]), array([0.598]), array([0.328]), array([0.082]), array([0.535]), array([0.178]), array([0.977]), array([0.002]), array([0.144]), array([0.34]), array([0.017]), array([0.208]), array([0.138]), array([0.665]), array([0.743]), array([0.774]), array([0.725]), array([0.495]), array([0.837]), array([0.73]), array([0.584]), array([0.255]), array([0.3]), array([0.962]), array([0.496]), array([0.371]), array([0.13]), array([0.354]), array([0.524]), array([0.778]), array([0.949]), array([0.382]), array([0.316]), array([0.751]), array([0.133]), array([0.023]), array([0.882]), array([0.741]), array([0.042]), array([0.794]), array([0.637]), array([0.283]), array([0.2]), array([0.248]), array([0.931]), array([0.616]), array([0.149]), array([0.468]), array([0.189]), array([0.578]), array([0.968]), array([0.089]), array([0.446]), array([0.635]), array([0.443]), array([0.392]), array([0.735]), array([0.838]), array([0.698]), array([0.6]), array([0.965]), array([0.766]), array([0.754]), array([0.49]), array([0.239]), array([0.119]), array([0.695]), array([0.994]), array([0.765]), array([0.795]), array([0.904]), array([0.195]), array([0.9]), array([0.298]), array([0.853]), array([0.281]), array([0.743]), array([0.659]), array([0.757]), array([0.705]), array([0.881]), array([0.069]), array([0.192]), array([0.064]), array([0.446]), array([0.842]), array([0.461]), array([0.876]), array([0.706]), array([0.5]), array([0.862]), array([0.646]), array([0.108]), array([0.419]), array([0.665]), array([0.834]), array([0.416]), array([0.454]), array([0.054]), array([0.214]), array([0.351]), array([0.636]), array([0.481]), array([0.423]), array([0.298]), array([0.289]), array([0.762]), array([0.882]), array([0.741]), array([0.918]), array([0.051]), array([0.45]), array([0.219]), array([0.691]), array([0.18]), array([0.732]), array([0.598]), array([0.33]), array([0.534]), array([0.255]), array([0.166]), array([0.001]), array([0.669]), array([0.765]), array([0.595]), array([0.412]), array([0.58]), array([0.849]), array([0.739]), array([0.965]), array([0.969]), array([0.783]), array([0.873]), array([0.885]), array([0.27]), array([0.632]), array([0.175]), array([0.487]), array([0.016]), array([0.811]), array([0.994]), array([0.447]), array([0.599]), array([0.783]), array([0.242]), array([0.607]), array([0.39]), array([0.54]), array([0.504]), array([0.266]), array([0.31]), array([0.305]), array([0.283]), array([0.806]), array([0.287]), array([0.487]), array([0.111]), array([0.189]), array([0.67]), array([0.552]), array([0.635]), array([0.94]), array([0.645]), array([0.721]), array([0.08]), array([0.515]), array([0.276]), array([0.234]), array([0.369]), array([0.514]), array([0.789]), array([0.128]), array([0.908]), array([0.698]), array([0.44]), array([0.649]), array([0.555]), array([0.343]), array([0.565]), array([0.025]), array([0.309]), array([0.413]), array([0.308]), array([0.19]), array([0.728]), array([0.443]), array([0.666]), array([0.318]), array([0.84]), array([0.053]), array([0.924]), array([0.6]), array([0.918]), array([0.617]), array([0.464]), array([0.777]), array([0.565]), array([0.496]), array([0.131]), array([0.651]), array([0.272]), array([0.019]), array([0.65]), array([0.325]), array([0.532]), array([0.082]), array([0.52]), array([0.316]), array([0.944]), array([0.538]), array([0.257]), array([0.237]), array([0.459]), array([0.007]), array([0.554]), array([0.56]), array([0.464]), array([0.253]), array([0.53]), array([0.645]), array([0.294]), array([0.725]), array([0.988]), array([0.836]), array([0.466]), array([0.863]), array([0.093]), array([0.212]), array([0.391]), array([0.039]), array([0.569]), array([0.774]), array([0.683]), array([0.404]), array([0.625]), array([0.128]), array([0.955]), array([0.768]), array([0.567]), array([0.275]), array([0.993]), array([0.455]), array([0.392]), array([0.894]), array([0.992]), array([0.774]), array([0.791]), array([0.495]), array([0.649]), array([0.125]), array([0.835]), array([0.393]), array([0.861]), array([0.029]), array([0.675]), array([0.953]), array([0.744]), array([0.252]), array([0.304]), array([0.627]), array([0.014]), array([0.999]), array([0.811]), array([0.01]), array([0.795]), array([0.868]), array([0.401]), array([0.615]), array([0.31]), array([0.107]), array([0.292]), array([0.448]), array([0.489]), array([0.222]), array([0.459]), array([0.04]), array([0.266]), array([0.201]), array([0.353]), array([0.561]), array([0.932]), array([0.886]), array([0.836]), array([0.679]), array([0.673]), array([0.487]), array([0.574]), array([0.012]), array([0.347]), array([0.952]), array([0.71]), array([0.156]), array([0.876]), array([0.905]), array([0.035]), array([0.739]), array([0.921]), array([0.069]), array([0.285]), array([0.872]), array([0.434]), array([0.046]), array([0.917]), array([0.302]), array([0.899]), array([0.332]), array([0.27]), array([0.872]), array([0.795]), array([0.878]), array([0.331]), array([0.154]), array([0.816]), array([0.245]), array([0.791]), array([0.013]), array([0.621]), array([0.491]), array([0.995]), array([0.038]), array([0.724]), array([0.558]), array([0.529]), array([0.322]), array([0.113]), array([0.195]), array([0.804]), array([0.11]), array([0.473]), array([0.593]), array([0.701]), array([0.206]), array([0.108]), array([0.297]), array([0.768]), array([0.459]), array([0.757]), array([0.306]), array([0.481]), array([0.588]), array([0.684]), array([0.495]), array([0.983]), array([0.268]), array([0.097]), array([0.133]), array([0.059]), array([0.426]), array([0.725]), array([0.326]), array([0.53]), array([0.78]), array([0.236]), array([0.213]), array([0.567]), array([0.495]), array([0.167]), array([0.107]), array([0.599]), array([0.997]), array([0.054]), array([0.623]), array([0.461]), array([0.111]), array([0.002]), array([0.975]), array([0.591]), array([0.031]), array([0.712]), array([0.279]), array([0.928]), array([0.954]), array([0.127]), array([0.284]), array([0.958]), array([0.773]), array([0.006]), array([0.462]), array([0.483]), array([0.794]), array([0.009]), array([0.84]), array([0.645]), array([0.164]), array([0.747]), array([0.348]), array([0.694]), array([0.69]), array([0.179]), array([0.709]), array([0.616]), array([0.699]), array([0.898]), array([0.187]), array([0.306]), array([0.779]), array([0.989]), array([0.842]), array([0.939]), array([0.165]), array([0.1]), array([0.571]), array([0.665]), array([0.875]), array([0.389]), array([0.095]), array([0.312]), array([0.665]), array([0.836]), array([0.928]), array([0.354]), array([0.609]), array([0.184]), array([0.009]), array([0.324]), array([0.423]), array([0.152]), array([0.399]), array([0.754]), array([0.29]), array([0.014]), array([0.94]), array([0.673]), array([0.603]), array([0.68]), array([0.559]), array([0.44]), array([0.728]), array([0.421]), array([0.388]), array([0.203]), array([0.406]), array([0.547]), array([0.721]), array([0.683]), array([0.478]), array([0.826]), array([0.446]), array([0.411]), array([0.947]), array([0.879]), array([0.359]), array([0.931]), array([0.068]), array([0.385]), array([0.023]), array([0.22]), array([0.883]), array([0.021]), array([0.28]), array([0.474]), array([0.53]), array([0.6]), array([0.126]), array([0.559]), array([0.577]), array([0.928]), array([0.459]), array([0.938]), array([0.747]), array([0.054]), array([0.297]), array([0.291]), array([0.97]), array([0.652]), array([0.513]), array([0.551]), array([0.57]), array([0.839]), array([0.055]), array([0.772]), array([0.132]), array([0.76]), array([0.084]), array([0.765]), array([0.613]), array([0.719]), array([0.085]), array([0.615]), array([0.222]), array([0.727]), array([0.22]), array([0.855]), array([0.73]), array([0.576]), array([0.793]), array([0.879]), array([0.586]), array([0.241]), array([0.998]), array([0.598]), array([0.027]), array([0.725]), array([0.709]), array([0.486]), array([0.942]), array([0.279]), array([0.399]), array([0.917]), array([0.463]), array([0.368]), array([0.296]), array([0.117]), array([0.772]), array([0.762]), array([0.2]), array([0.421]), array([0.416]), array([0.527]), array([0.484]), array([0.287]), array([0.586]), array([0.04]), array([0.275]), array([0.332]), array([0.945]), array([0.96]), array([0.088]), array([0.787]), array([0.255]), array([0.657]), array([0.301]), array([0.206]), array([0.685]), array([0.631]), array([0.441]), array([0.369]), array([0.074]), array([0.517]), array([0.414]), array([0.248]), array([0.107]), array([0.863]), array([0.624]), array([0.326]), array([0.737]), array([0.239]), array([0.43]), array([0.153]), array([0.807]), array([0.252]), array([0.82]), array([0.309]), array([0.017]), array([0.419]), array([0.302]), array([0.812]), array([0.638]), array([0.587]), array([0.693]), array([0.362]), array([0.621]), array([0.436]), array([0.768]), array([0.553]), array([0.209]), array([0.261]), array([0.934]), array([0.883]), array([0.288]), array([0.716]), array([0.382]), array([0.329]), array([0.529]), array([0.491]), array([0.92]), array([0.725]), array([0.212]), array([0.47]), array([0.221]), array([0.01]), array([0.037]), array([0.114]), array([0.938]), array([0.265]), array([0.629]), array([0.748]), array([0.05]), array([0.851]), array([0.956]), array([0.177]), array([0.825]), array([0.736]), array([0.291]), array([0.579]), array([0.738]), array([0.777]), array([0.874]), array([0.596]), array([0.317]), array([0.271]), array([0.556]), array([0.701]), array([0.776]), array([0.971]), array([0.32]), array([0.108]), array([0.003]), array([0.553]), array([0.576]), array([0.912]), array([0.446]), array([0.55]), array([0.597]), array([0.624]), array([0.584]), array([0.364]), array([0.753]), array([0.553]), array([0.96]), array([0.822]), array([0.4]), array([0.814]), array([0.23]), array([0.657]), array([0.797]), array([0.975]), array([0.643]), array([0.681]), array([0.259]), array([0.604]), array([0.587]), array([0.358]), array([0.649]), array([0.007]), array([0.865]), array([0.279]), array([0.201]), array([0.108]), array([0.748]), array([0.064]), array([0.603]), array([0.846]), array([0.126]), array([0.009]), array([0.955]), array([0.68]), array([0.678]), array([0.421]), array([0.55]), array([0.852]), array([0.915]), array([0.135]), array([0.15]), array([0.364]), array([0.388]), array([0.773]), array([0.189]), array([0.677]), array([0.817]), array([0.875]), array([0.391]), array([0.267]), array([0.257]), array([0.215]), array([0.308]), array([0.802]), array([0.933]), array([0.789]), array([0.269]), array([0.084]), array([0.846]), array([0.473]), array([0.129]), array([0.663]), array([0.121]), array([0.412]), array([0.306]), array([0.863]), array([0.468]), array([0.68]), array([0.516]), array([0.519]), array([0.207]), array([0.062]), array([0.144]), array([0.463]), array([0.178]), array([0.891]), array([0.768]), array([0.497]), array([0.89]), array([0.635]), array([0.165]), array([0.229]), array([0.544]), array([0.654]), array([0.095]), array([0.708]), array([0.809]), array([0.124]), array([0.757]), array([0.459]), array([0.675]), array([0.902]), array([0.927]), array([0.267]), array([0.885]), array([0.564]), array([0.227]), array([0.357]), array([0.018]), array([0.948]), array([0.367]), array([0.079]), array([0.39]), array([0.437]), array([0.315]), array([0.712]), array([0.802]), array([0.98]), array([0.494]), array([0.156]), array([0.358]), array([0.293]), array([0.045]), array([0.943]), array([0.35]), array([0.456]), array([0.863]), array([0.618]), array([0.575]), array([0.818]), array([0.634]), array([0.101]), array([0.832]), array([0.823]), array([0.337]), array([0.454]), array([0.115]), array([0.849]), array([0.799]), array([0.996]), array([0.847]), array([0.808]), array([0.075]), array([0.412]), array([0.287]), array([0.303]), array([0.474]), array([0.965]), array([0.507]), array([0.722]), array([0.254]), array([0.797]), array([0.631]), array([0.459]), array([0.466]), array([0.324]), array([0.52]), array([0.761]), array([0.456]), array([0.714]), array([0.481]), array([0.616]), array([0.409]), array([0.654]), array([0.85]), array([0.603]), array([0.474]), array([0.729]), array([0.816]), array([0.832]), array([0.41]), array([0.268]), array([0.024]), array([0.632]), array([0.034]), array([0.518]), array([0.352]), array([0.759]), array([0.634]), array([0.106]), array([0.814]), array([0.656]), array([0.49]), array([0.446]), array([0.162]), array([0.746]), array([0.203]), array([0.324]), array([0.645]), array([0.499]), array([0.336]), array([0.877]), array([0.912]), array([0.361]), array([0.823]), array([0.401]), array([0.264]), array([0.53]), array([0.631]), array([0.722]), array([0.298]), array([0.649]), array([0.406]), array([0.405]), array([0.14]), array([0.081]), array([0.374]), array([0.766]), array([0.047]), array([0.843]), array([0.924]), array([0.993]), array([0.009]), array([0.189]), array([0.346]), array([0.576]), array([0.544]), array([0.987]), array([0.234]), array([0.097]), array([0.355]), array([0.467]), array([0.067]), array([0.344]), array([0.307]), array([0.192]), array([0.866]), array([0.656]), array([0.398]), array([0.24]), array([0.599]), array([0.745]), array([0.501]), array([0.366]), array([0.741]), array([0.233]), array([0.705]), array([0.795]), array([0.986]), array([0.571]), array([0.924]), array([0.894]), array([0.166]), array([0.51]), array([0.72]), array([0.571]), array([0.102]), array([0.855]), array([0.151]), array([0.172]), array([0.923]), array([0.052]), array([0.91]), array([0.13]), array([0.562]), array([0.205]), array([0.398]), array([0.629]), array([0.325]), array([0.571]), array([0.547]), array([0.046]), array([0.428]), array([0.777]), array([0.499]), array([0.308]), array([0.587]), array([0.21]), array([0.924]), array([0.197]), array([0.044]), array([0.463]), array([0.027]), array([0.544]), array([0.354]), array([0.498]), array([0.916]), array([0.071]), array([0.326]), array([0.914]), array([0.259]), array([0.432]), array([0.35]), array([0.859]), array([0.525]), array([0.201]), array([0.91]), array([0.29]), array([0.842]), array([0.589]), array([0.668]), array([0.964]), array([0.234]), array([0.871]), array([0.541]), array([0.582]), array([0.914]), array([0.281]), array([0.]), array([0.09]), array([0.628]), array([0.959]), array([0.47]), array([0.788]), array([0.827]), array([0.54]), array([0.899]), array([0.154]), array([0.319]), array([0.541]), array([0.331]), array([0.893]), array([0.665]), array([0.379]), array([0.622]), array([0.906]), array([0.852]), array([0.466]), array([0.516]), array([0.704]), array([0.381]), array([0.396]), array([0.803]), array([0.033]), array([0.682]), array([0.104]), array([0.911]), array([0.876]), array([0.045]), array([0.025]), array([0.715]), array([0.327]), array([0.816]), array([0.432]), array([0.837]), array([0.164]), array([0.013]), array([0.264]), array([0.182]), array([0.873]), array([0.254]), array([0.768]), array([0.902]), array([0.312]), array([0.298]), array([0.293]), array([0.272]), array([0.695]), array([0.728]), array([0.48]), array([0.449]), array([0.277]), array([0.004]), array([0.703]), array([0.501]), array([0.312]), array([0.052]), array([0.225]), array([0.151]), array([0.298]), array([0.794]), array([0.811]), array([0.275]), array([0.466]), array([0.707]), array([0.856]), array([0.251]), array([0.976]), array([0.156]), array([0.08]), array([0.734]), array([0.769]), array([0.278]), array([0.715]), array([0.864]), array([0.266]), array([0.858]), array([0.645]), array([0.83]), array([0.503]), array([0.485]), array([0.977]), array([0.228]), array([0.921]), array([0.956]), array([0.811]), array([0.043]), array([0.945]), array([0.39]), array([0.776]), array([0.246]), array([0.515]), array([0.067]), array([0.662]), array([0.179]), array([0.361]), array([0.698]), array([0.93]), array([0.95]), array([0.317]), array([0.791]), array([0.454]), array([0.382]), array([0.852]), array([0.109]), array([0.284]), array([0.449]), array([0.869]), array([0.805]), array([0.243]), array([0.708]), array([0.21]), array([0.21]), array([0.586]), array([0.159]), array([0.341]), array([0.483]), array([0.909]), array([0.134]), array([0.547]), array([0.319]), array([0.722]), array([0.84]), array([0.662]), array([0.189]), array([0.5]), array([0.608]), array([0.493]), array([0.565]), array([0.094]), array([0.727]), array([0.912]), array([0.304]), array([0.864]), array([0.064]), array([0.231]), array([0.595]), array([0.398]), array([0.463]), array([0.169]), array([0.573]), array([0.485]), array([0.809]), array([0.449]), array([0.423]), array([0.138]), array([0.622]), array([0.475]), array([0.831]), array([0.081]), array([0.361]), array([0.825]), array([0.46]), array([0.98]), array([0.604]), array([0.305]), array([0.9]), array([0.093]), array([0.556]), array([0.547]), array([0.838]), array([0.202]), array([0.461]), array([0.8]), array([0.197]), array([0.201]), array([0.112]), array([0.841]), array([0.771]), array([0.836]), array([0.851]), array([0.867]), array([0.767]), array([0.595]), array([0.928]), array([0.589]), array([0.231]), array([0.187]), array([0.851]), array([0.209]), array([0.741]), array([0.821]), array([0.303]), array([0.177]), array([0.079]), array([0.066]), array([0.44]), array([0.728]), array([0.996]), array([0.281]), array([0.067]), array([0.102]), array([0.511]), array([0.84]), array([0.542]), array([0.031]), array([0.516]), array([0.119]), array([0.513]), array([0.599]), array([0.285]), array([0.157]), array([0.58]), array([0.74]), array([0.915]), array([0.166]), array([0.583]), array([0.113]), array([0.294]), array([0.997]), array([0.219]), array([0.01]), array([0.267]), array([0.866]), array([0.034]), array([0.284]), array([0.062]), array([0.084]), array([0.545]), array([0.897]), array([0.382]), array([0.596]), array([0.294]), array([0.76]), array([0.662]), array([0.593]), array([0.521]), array([0.636]), array([0.077]), array([0.181]), array([0.229]), array([0.92]), array([0.081]), array([0.13]), array([0.789]), array([0.513]), array([0.165]), array([0.62]), array([0.584]), array([0.07]), array([0.586]), array([0.399]), array([0.05]), array([0.344]), array([0.481]), array([0.132]), array([0.177]), array([0.198]), array([0.997]), array([0.243]), array([0.151]), array([0.563]), array([0.509]), array([0.336]), array([0.083]), array([0.354]), array([0.432]), array([0.85]), array([0.099]), array([0.502]), array([0.618]), array([0.353]), array([0.13]), array([0.285]), array([0.868]), array([0.177]), array([0.403]), array([0.218]), array([0.662]), array([0.729]), array([0.939]), array([0.195]), array([0.707]), array([0.274]), array([0.628]), array([0.545]), array([0.426]), array([0.929]), array([0.124]), array([0.354]), array([0.372]), array([0.387]), array([0.545]), array([0.438]), array([0.599]), array([0.702]), array([0.734]), array([0.926]), array([0.495]), array([0.174]), array([0.537]), array([0.704]), array([0.919]), array([0.111]), array([0.103]), array([0.879]), array([0.094]), array([0.144]), array([0.161]), array([0.064]), array([0.995]), array([0.4]), array([0.079]), array([0.973]), array([0.026]), array([0.468]), array([0.99]), array([0.173]), array([0.781]), array([0.672]), array([0.497]), array([0.919]), array([0.91]), array([0.406]), array([0.325]), array([0.274]), array([0.923]), array([0.957]), array([0.5]), array([0.393]), array([0.031]), array([0.307]), array([0.327]), array([0.628]), array([0.647]), array([0.208]), array([0.947]), array([0.782]), array([0.211]), array([0.332]), array([0.175]), array([0.518]), array([0.749]), array([0.147]), array([0.96]), array([0.465]), array([0.856]), array([0.98]), array([0.911]), array([0.757]), array([0.729]), array([0.894]), array([0.571]), array([0.381]), array([0.787]), array([0.268]), array([0.622]), array([0.572]), array([0.374]), array([0.088]), array([0.192]), array([0.907]), array([0.725]), array([0.699]), array([0.382]), array([0.071]), array([0.601]), array([0.155]), array([0.532]), array([0.647]), array([0.65]), array([0.893]), array([0.339]), array([0.973]), array([0.495]), array([0.756]), array([0.938]), array([0.375]), array([0.515]), array([0.528]), array([0.667]), array([0.06]), array([0.206]), array([0.33]), array([0.624]), array([0.981]), array([0.916]), array([0.261]), array([0.895]), array([0.478]), array([0.966]), array([0.377]), array([0.759]), array([0.312]), array([0.506]), array([0.233]), array([0.56]), array([0.269]), array([0.845]), array([0.157]), array([0.092]), array([0.238]), array([0.008]), array([0.165]), array([0.074]), array([0.305]), array([0.354]), array([0.561]), array([0.265]), array([0.181]), array([0.194]), array([0.508]), array([0.26]), array([0.811]), array([0.9]), array([0.312]), array([0.387]), array([0.422]), array([0.18]), array([0.9]), array([0.738]), array([0.504]), array([0.808]), array([0.583]), array([0.273]), array([0.477]), array([0.208]), array([0.516]), array([0.557]), array([0.162]), array([0.229]), array([0.516]), array([0.715]), array([0.563]), array([0.192]), array([0.807]), array([0.679]), array([0.523]), array([0.338]), array([0.939]), array([0.904]), array([0.51]), array([0.189]), array([0.833]), array([0.55]), array([0.754]), array([0.3]), array([0.996]), array([0.198]), array([0.068]), array([0.802]), array([0.752]), array([0.79]), array([0.466]), array([0.569]), array([0.391]), array([0.514]), array([0.886]), array([0.25]), array([0.077]), array([0.809]), array([0.876]), array([0.86]), array([0.592]), array([0.061]), array([0.906]), array([0.853]), array([0.195]), array([0.679]), array([0.522]), array([0.521]), array([0.618]), array([0.313]), array([0.692]), array([0.904]), array([0.723]), array([0.819]), array([0.066]), array([0.83]), array([0.249]), array([0.322]), array([0.913]), array([0.758]), array([0.917]), array([0.319]), array([0.213]), array([0.572]), array([0.974]), array([0.139]), array([0.04]), array([0.037]), array([0.899]), array([0.556]), array([0.184]), array([0.796]), array([0.18]), array([0.98]), array([0.749]), array([0.822]), array([0.743]), array([0.442]), array([0.938]), array([0.095]), array([0.322]), array([0.915]), array([0.922]), array([0.057]), array([0.676]), array([0.866]), array([0.618]), array([0.415]), array([0.911]), array([0.181]), array([0.893]), array([0.281]), array([0.689]), array([0.231]), array([0.724]), array([0.233]), array([0.774]), array([0.657]), array([0.73]), array([0.749]), array([0.686]), array([0.326]), array([0.034]), array([0.193]), array([0.235]), array([0.428]), array([0.779]), array([0.536]), array([0.2]), array([0.293]), array([0.306]), array([0.253]), array([0.678]), array([0.993]), array([0.064]), array([0.12]), array([0.424]), array([0.331]), array([0.693]), array([0.764]), array([0.482]), array([0.33]), array([0.447]), array([0.281]), array([0.535]), array([0.293]), array([0.701]), array([0.801]), array([0.122]), array([0.63]), array([0.537]), array([0.574]), array([0.863]), array([0.556]), array([0.115]), array([0.13]), array([0.562]), array([0.507]), array([0.046]), array([0.61]), array([0.784]), array([0.939]), array([0.489]), array([0.787]), array([0.64]), array([0.968]), array([0.083]), array([0.081]), array([0.062]), array([0.147]), array([0.95]), array([0.275]), array([0.838]), array([0.499]), array([0.593]), array([0.86]), array([0.207]), array([0.081]), array([0.045]), array([0.592]), array([0.058]), array([0.259]), array([0.618]), array([0.543]), array([0.739]), array([0.227]), array([0.617]), array([0.912]), array([0.726]), array([0.356]), array([0.647]), array([0.909]), array([0.727]), array([0.461]), array([0.777]), array([0.706]), array([0.191]), array([0.348]), array([0.052]), array([0.086]), array([0.85]), array([0.134]), array([0.909]), array([0.011]), array([0.73]), array([0.164]), array([0.158]), array([0.021]), array([0.753]), array([0.853]), array([0.164]), array([0.858]), array([0.392]), array([0.63]), array([0.681]), array([0.539]), array([0.807]), array([0.243]), array([0.426]), array([0.599]), array([0.014]), array([0.853]), array([0.779]), array([0.486]), array([0.534]), array([0.521]), array([0.231]), array([0.191]), array([0.517]), array([0.627]), array([0.605]), array([0.005]), array([0.487]), array([0.139]), array([0.877]), array([0.453]), array([0.329]), array([0.365]), array([0.029]), array([0.485]), array([0.724]), array([0.983]), array([0.675]), array([0.31]), array([0.874]), array([0.424]), array([0.973]), array([0.706]), array([0.857]), array([0.158]), array([0.723]), array([0.46]), array([0.262]), array([0.198]), array([0.432]), array([0.089]), array([0.426]), array([0.886]), array([0.333]), array([0.585]), array([0.261]), array([0.908]), array([0.852]), array([0.168]), array([0.83]), array([0.72]), array([0.608]), array([0.501]), array([0.53]), array([0.131]), array([0.65]), array([0.431]), array([0.298]), array([0.613]), array([0.535]), array([0.957]), array([0.905]), array([0.585]), array([0.539]), array([0.688]), array([0.607]), array([0.491]), array([0.321]), array([0.226]), array([0.72]), array([0.026]), array([0.322]), array([0.519]), array([0.764]), array([0.836]), array([0.155]), array([0.884]), array([0.31]), array([0.801]), array([0.373]), array([0.573]), array([0.655]), array([0.804]), array([0.262]), array([0.982]), array([0.391]), array([0.403]), array([0.905]), array([0.459]), array([0.757]), array([0.149]), array([0.763]), array([0.032]), array([0.777]), array([0.725]), array([0.683]), array([0.026]), array([0.279]), array([0.538]), array([0.754]), array([0.662]), array([0.856]), array([0.372]), array([0.619]), array([0.167]), array([0.734]), array([0.324]), array([0.824]), array([0.911]), array([0.662]), array([0.521]), array([0.74]), array([0.757]), array([0.717]), array([0.44]), array([0.263]), array([0.897]), array([0.382]), array([0.74]), array([0.009]), array([0.41]), array([0.204]), array([0.062]), array([0.573]), array([0.261]), array([0.75]), array([0.072]), array([0.806]), array([0.533]), array([0.128]), array([0.723]), array([0.888]), array([0.913]), array([0.134]), array([0.857]), array([0.014]), array([0.526]), array([0.97]), array([0.288]), array([0.215]), array([0.977]), array([0.377]), array([0.166]), array([0.436]), array([0.038]), array([0.965]), array([0.482]), array([0.535]), array([0.36]), array([0.089]), array([0.026]), array([0.974]), array([0.909]), array([0.934]), array([0.021]), array([0.792]), array([0.701]), array([0.414]), array([0.966]), array([0.483]), array([0.812]), array([0.451]), array([0.258]), array([0.34]), array([0.512]), array([0.875]), array([0.592]), array([0.191]), array([0.363]), array([0.575]), array([0.268]), array([0.69]), array([0.265]), array([0.44]), array([0.597]), array([0.491]), array([0.525]), array([0.558]), array([0.289]), array([0.528]), array([0.931]), array([0.904]), array([0.17]), array([0.776]), array([0.323]), array([0.677]), array([0.839]), array([0.523]), array([0.742]), array([0.397]), array([0.782]), array([0.346]), array([0.578]), array([0.6]), array([0.487]), array([0.08]), array([0.102]), array([0.036]), array([0.485]), array([0.721]), array([0.815]), array([0.707]), array([0.633]), array([0.748]), array([0.933]), array([0.85]), array([0.134]), array([0.021]), array([0.5]), array([0.304]), array([0.095]), array([0.69]), array([0.987]), array([0.791]), array([0.396]), array([0.108]), array([0.104]), array([0.774]), array([0.27]), array([0.015]), array([0.564]), array([0.268]), array([0.37]), array([0.345]), array([0.791]), array([0.826]), array([0.719]), array([0.978]), array([0.913]), array([0.333]), array([0.857]), array([0.762]), array([0.567]), array([0.27]), array([0.504]), array([0.437]), array([0.92]), array([0.493]), array([0.388]), array([0.171]), array([0.752]), array([0.552]), array([0.661]), array([0.208]), array([0.616]), array([0.624]), array([0.176]), array([0.894]), array([0.21]), array([0.958]), array([0.369]), array([0.088]), array([0.668]), array([0.787]), array([0.695]), array([0.349]), array([0.319]), array([0.072]), array([0.8]), array([0.986]), array([0.118]), array([0.922]), array([0.78]), array([0.343]), array([0.481]), array([0.897]), array([0.508]), array([0.795]), array([0.629]), array([0.46]), array([0.614]), array([0.67]), array([0.951]), array([0.752]), array([0.406]), array([0.928]), array([0.268]), array([0.932]), array([0.016]), array([0.851]), array([0.307]), array([0.501]), array([0.009]), array([0.266]), array([0.582]), array([0.581]), array([0.011]), array([0.517]), array([0.909]), array([0.554]), array([0.99]), array([0.125]), array([0.312]), array([0.569]), array([0.939]), array([0.117]), array([0.128]), array([0.358]), array([0.883]), array([0.12]), array([0.648]), array([0.609]), array([0.134]), array([0.214]), array([0.165]), array([0.187]), array([0.577]), array([0.525]), array([0.235]), array([0.117]), array([0.984]), array([0.952]), array([0.632]), array([0.25]), array([0.129]), array([0.472]), array([0.734]), array([0.463]), array([0.464]), array([0.798]), array([0.821]), array([0.297]), array([0.39]), array([0.597]), array([0.553]), array([0.434]), array([0.079]), array([0.202]), array([0.97]), array([0.826]), array([0.427]), array([0.749]), array([0.478]), array([0.974]), array([0.661]), array([0.621]), array([0.663]), array([0.505]), array([0.623]), array([0.766]), array([0.983]), array([0.478]), array([0.015]), array([0.14]), array([0.976]), array([0.072]), array([0.293]), array([0.918]), array([0.265]), array([0.336]), array([0.998]), array([0.184]), array([0.072]), array([0.478]), array([0.719]), array([0.664]), array([0.07]), array([0.472]), array([0.735]), array([0.475]), array([0.99]), array([0.881]), array([0.933]), array([0.728]), array([0.715]), array([0.631]), array([0.393]), array([0.305]), array([0.501]), array([0.958]), array([0.227]), array([0.671]), array([0.026]), array([0.475]), array([0.895]), array([0.507]), array([0.132]), array([0.368]), array([0.23]), array([0.464]), array([0.177]), array([0.814]), array([0.659]), array([0.655]), array([0.956]), array([0.315]), array([0.42]), array([0.157]), array([0.22]), array([0.279]), array([0.637]), array([0.96]), array([0.448]), array([0.578]), array([0.482]), array([0.274]), array([0.528]), array([0.611]), array([0.]), array([0.808]), array([0.721]), array([0.147]), array([0.657]), array([0.573]), array([0.192]), array([0.504]), array([0.697]), array([0.887]), array([0.31]), array([0.199]), array([0.554]), array([0.372]), array([0.23]), array([0.638]), array([0.304]), array([0.288]), array([0.487]), array([0.896]), array([0.703]), array([0.681]), array([0.784]), array([0.864]), array([0.707]), array([0.275]), array([0.965]), array([0.468]), array([0.091]), array([0.956]), array([0.895]), array([0.503]), array([0.401]), array([0.841]), array([0.888]), array([0.014]), array([0.89]), array([0.102]), array([0.388]), array([0.469]), array([0.249]), array([0.664]), array([0.367]), array([0.337]), array([0.269]), array([0.871]), array([0.76]), array([0.192]), array([0.859]), array([0.056]), array([0.536]), array([0.144]), array([0.663]), array([0.897]), array([0.938]), array([0.64]), array([0.524]), array([0.172]), array([0.485]), array([0.335]), array([0.708]), array([0.986]), array([0.167]), array([0.69]), array([0.764]), array([0.618]), array([0.412]), array([0.944]), array([0.199]), array([0.013]), array([0.025]), array([0.124]), array([0.417]), array([0.368]), array([0.434]), array([0.051]), array([0.981]), array([0.86]), array([0.378]), array([0.044]), array([0.031]), array([0.211]), array([0.808])]\n" + ] + } + ], + "source": [ + "batched_mj_data = mjx.get_data(mj_model, batch)\n", + "print([d.qpos for d in batched_mj_data])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Humanoid Env" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "#@title Humanoid Env\n", + "\n", + "class Humanoid(PipelineEnv):\n", + "\n", + " def __init__(\n", + " self,\n", + " forward_reward_weight=1.25,\n", + " ctrl_cost_weight=0.1,\n", + " healthy_reward=5.0,\n", + " terminate_when_unhealthy=True,\n", + " healthy_z_range=(1.0, 2.0),\n", + " reset_noise_scale=1e-2,\n", + " exclude_current_positions_from_observation=True,\n", + " **kwargs,\n", + " ):\n", + " path = epath.Path(epath.resource_path('mujoco')) / (\n", + " 'mjx/test_data/humanoid'\n", + " )\n", + " mj_model = mujoco.MjModel.from_xml_path(\n", + " (path / 'humanoid.xml').as_posix())\n", + " mj_model.opt.solver = mujoco.mjtSolver.mjSOL_CG\n", + " mj_model.opt.iterations = 6\n", + " mj_model.opt.ls_iterations = 6\n", + "\n", + " sys = mjcf.load_model(mj_model)\n", + "\n", + " physics_steps_per_control_step = 5\n", + " kwargs['n_frames'] = kwargs.get(\n", + " 'n_frames', physics_steps_per_control_step)\n", + " kwargs['backend'] = 'mjx'\n", + "\n", + " super().__init__(sys, **kwargs)\n", + "\n", + " self._forward_reward_weight = forward_reward_weight\n", + " self._ctrl_cost_weight = ctrl_cost_weight\n", + " self._healthy_reward = healthy_reward\n", + " self._terminate_when_unhealthy = terminate_when_unhealthy\n", + " self._healthy_z_range = healthy_z_range\n", + " self._reset_noise_scale = reset_noise_scale\n", + " self._exclude_current_positions_from_observation = (\n", + " exclude_current_positions_from_observation\n", + " )\n", + "\n", + " def reset(self, rng: jp.ndarray) -> State:\n", + " \"\"\"Resets the environment to an initial state.\"\"\"\n", + " rng, rng1, rng2 = jax.random.split(rng, 3)\n", + "\n", + " low, hi = -self._reset_noise_scale, self._reset_noise_scale\n", + " qpos = self.sys.qpos0 + jax.random.uniform(\n", + " rng1, (self.sys.nq,), minval=low, maxval=hi\n", + " )\n", + " qvel = jax.random.uniform(\n", + " rng2, (self.sys.nv,), minval=low, maxval=hi\n", + " )\n", + "\n", + " data = self.pipeline_init(qpos, qvel)\n", + "\n", + " obs = self._get_obs(data, jp.zeros(self.sys.nu))\n", + " reward, done, zero = jp.zeros(3)\n", + " metrics = {\n", + " 'forward_reward': zero,\n", + " 'reward_linvel': zero,\n", + " 'reward_quadctrl': zero,\n", + " 'reward_alive': zero,\n", + " 'x_position': zero,\n", + " 'y_position': zero,\n", + " 'distance_from_origin': zero,\n", + " 'x_velocity': zero,\n", + " 'y_velocity': zero,\n", + " }\n", + " return State(data, obs, reward, done, metrics)\n", + "\n", + " def step(self, state: State, action: jp.ndarray) -> State:\n", + " \"\"\"Runs one timestep of the environment's dynamics.\"\"\"\n", + " data0 = state.pipeline_state\n", + " data = self.pipeline_step(data0, action)\n", + "\n", + " com_before = data0.subtree_com[1]\n", + " com_after = data.subtree_com[1]\n", + " velocity = (com_after - com_before) / self.dt\n", + " forward_reward = self._forward_reward_weight * velocity[0]\n", + "\n", + " min_z, max_z = self._healthy_z_range\n", + " is_healthy = jp.where(data.q[2] < min_z, 0.0, 1.0)\n", + " is_healthy = jp.where(data.q[2] > max_z, 0.0, is_healthy)\n", + " if self._terminate_when_unhealthy:\n", + " healthy_reward = self._healthy_reward\n", + " else:\n", + " healthy_reward = self._healthy_reward * is_healthy\n", + "\n", + " ctrl_cost = self._ctrl_cost_weight * jp.sum(jp.square(action))\n", + "\n", + " obs = self._get_obs(data, action)\n", + " reward = forward_reward + healthy_reward - ctrl_cost\n", + " print(reward, forward_reward, healthy_reward, ctrl_cost)\n", + " print(type(reward), type(forward_reward), type(healthy_reward), type(ctrl_cost))\n", + " print(type(data))\n", + " done = 1.0 - is_healthy if self._terminate_when_unhealthy else 0.0\n", + " state.metrics.update(\n", + " forward_reward=forward_reward,\n", + " reward_linvel=forward_reward,\n", + " reward_quadctrl=-ctrl_cost,\n", + " reward_alive=healthy_reward,\n", + " x_position=com_after[0],\n", + " y_position=com_after[1],\n", + " distance_from_origin=jp.linalg.norm(com_after),\n", + " x_velocity=velocity[0],\n", + " y_velocity=velocity[1],\n", + " )\n", + "\n", + " return state.replace(\n", + " pipeline_state=data, obs=obs, reward=reward, done=done\n", + " )\n", + "\n", + " def _get_obs(\n", + " self, data: mjx.Data, action: jp.ndarray\n", + " ) -> jp.ndarray:\n", + " \"\"\"Observes humanoid body position, velocities, and angles.\"\"\"\n", + " position = data.qpos\n", + " if self._exclude_current_positions_from_observation:\n", + " position = position[2:]\n", + "\n", + " # external_contact_forces are excluded\n", + " return jp.concatenate([\n", + " position,\n", + " data.qvel,\n", + " data.cinert[1:].ravel(),\n", + " data.cvel[1:].ravel(),\n", + " data.qfrc_actuator,\n", + " ])\n", + "\n", + "\n", + "envs.register_environment('humanoid', Humanoid)" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [], + "source": [ + "# instantiate the environment\n", + "env_name = 'humanoid'\n", + "env = envs.get_environment(env_name)\n", + "\n", + "# define the jit reset/step functions - note: optimizes function (kernal fusion and constant folding), statically-typed machine code, (in other use cases, helps with automatic differentiation...)\n", + "jit_reset = jax.jit(env.reset)\n", + "jit_step = jax.jit(env.step)" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Tracedwith Tracedwith 5.0 Tracedwith\n", + " \n", + "\n", + "Tracedwith Tracedwith 5.0 Tracedwith\n", + " \n", + "\n" + ] + } + ], + "source": [ + "state = jit_reset(jax.random.PRNGKey(0))\n", + "rollout = [state.pipeline_state]\n", + "\n", + "# grab a trajectory\n", + "for i in range(10):\n", + " ctrl = -0.1 * jp.ones(env.sys.nu)\n", + " state = jit_step(state, ctrl)\n", + " rollout.append(state.pipeline_state)" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "prev position 0.026874056\n", + "next position 0.032642037\n" + ] + }, + { + "data": { + "text/plain": [ + "Array(0.288, dtype=float32)" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def forward_reward_fn(state: base.State, action: jp.ndarray, next_state: base.State, dt: jax.Array, params: Dict[str, float]) -> jp.ndarray:\n", + " \"\"\"Reward function for moving forward.\n", + "\n", + " Args:\n", + " state: Current state.\n", + " action: Action taken.\n", + " next_state: Next state.\n", + " dt: Time step.\n", + " params: Reward parameters.\n", + " Returns:\n", + " A float wrapped in a jax array. \n", + " \"\"\"\n", + " xpos = state.subtree_com[1][0] # TODO: include stricter typing than base.State to avoid this type error\n", + " next_xpos = next_state.subtree_com[1][0]\n", + " velocity = (next_xpos - xpos) / dt\n", + " forward_reward = params['weight'] * velocity\n", + "\n", + " return forward_reward\n", + "\n", + "ctrl = .1 * jp.ones(env.sys.nu)\n", + "data = state.pipeline_state\n", + "print(\"prev position\", data.subtree_com[1][0])\n", + "next_data = jit_step(state, ctrl).pipeline_state\n", + "print(\"next position\", next_data.subtree_com[1][0])\n", + "\n", + "dt = env.dt\n", + "params = {'weight': 1.25}\n", + "\n", + "forward_reward_fn(data, ctrl, next_data, dt, params)" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "brax.mjx.base.State" + ] + }, + "execution_count": 70, + "metadata": {}, + "output_type": "execute_result" + }, + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mThe Kernel crashed while executing code in the current cell or a previous cell. \n", + "\u001b[1;31mPlease review the code in the cell(s) to identify a possible cause of the failure. \n", + "\u001b[1;31mClick here for more info. \n", + "\u001b[1;31mView Jupyter log for further details." + ] + } + ], + "source": [ + "type(state.pipeline_state)" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [], + "source": [ + "#media.show_video(env.render(rollout, camera='side'), fps=1.0 / env.dt)\n", + "# Fix GL / media issues, probably the cause of this running forever" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Tracedwith Tracedwith 5.0 Tracedwith\n", + " \n", + "\n" + ] + }, + { + "data": { + "image/png": "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L2VK0aJFi4ykIlP//v3Nnj17LrhMklm0aJE1xi+//GL69OljgoKCjNPpNAMGDDAnTpxw286mTZvMbbfdZvz8/Mx1111nxo8fX6SXL774wtSrV8/4+vqaRo0amTlz5ni0L1lZWUaSycrKuqxjAQAArjxPvr+95jlNZR3PaQIAoOy5ap/TBAAAUFoITQAAADYQmgAAAGwgNAEAANhAaAIAALCB0AQAAGADoQkAAMAGQhMAAIANhCYAAAAbCE0AAAA2EJoAAABsIDQBAADYQGgCAACwgdAEAABgA6EJAADABkITAACADYQmAAAAGwhNAAAANhCaAAAAbCA0AQAA2EBoAgAAsIHQBAAAYAOhCQAAwAZCEwAAgA2EJgAAABsITQAAADYQmgAAAGwgNAEAANhAaAIAALCB0AQAAGADoQkAAMAGQhMAAIANhCYAAAAbCE0AAAA2EJoAAABsIDQBAADYQGgCAACwgdAEAABgA6EJAADABkITAACADYQmAAAAGwhNAAAANhCaAAAAbCA0AQAA2EBoAgAAsIHQBAAAYEOphqalS5eqR48eioyMlMPh0KxZs9yWG2M0atQoRUREKCAgQLGxsdq5c6dbzbFjxxQfHy+n06mQkBANHDhQ2dnZbjWbN29Wu3bt5O/vr6ioKCUmJhbp5csvv1SDBg3k7++vJk2a6Ntvvy32/QUAAGVXqYamkydPqmnTppo4ceIFlycmJuof//iHJk2apNWrVyswMFBxcXE6c+aMVRMfH6/U1FQtWLBAs2fP1tKlS/XII49Yy10ul7p06aJatWopJSVFr732msaMGaMPPvjAqlm5cqX69OmjgQMHasOGDerZs6d69uyprVu3ltzOAwCAssV4CUlm5syZ1uuCggITHh5uXnvtNWteZmam8fPzM5999pkxxpgffvjBSDJr1661aubOnWscDoc5ePCgMcaYd99914SGhpqcnByrZsSIEaZ+/frW6/vuu890797drZ/WrVubRx991Hb/WVlZRpLJysqyvQ4AAChdnnx/e+09TXv27FF6erpiY2OtecHBwWrdurWSk5MlScnJyQoJCVHLli2tmtjYWJUrV06rV6+2atq3by9fX1+rJi4uTmlpaTp+/LhVc/52CmsKt3MhOTk5crlcbhMAALh6eW1oSk9PlySFhYW5zQ8LC7OWpaenq3r16m7LK1SooMqV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wIEDNXz4cFWuXFlOp1OPPfaYYmJi1KZNG0lSly5dFB0drQceeECJiYlKT0/X//zP/2jIkCHy8/OTJP3lL3/RO++8o2eeeUYPPfSQFi5cqC+++EJz5sy5sjsMAAC8lleHJjvefPNNlStXTvfee69ycnIUFxend99911pevnx5zZ49W4MHD1ZMTIwCAwPVv39/vfDCC1ZNnTp1NGfOHD3xxBOaMGGCatSoocmTJysuLq40dgkAAHihMvGcprKA5zQBAFD2XHXPaQIAAChthCYAAAAbCE0AAAA2EJoAAABsIDQBAADYQGgCAACwgdAEAABgA6EJAADABkITAACADYQmAAAAGwhNAAAANhCaAAAAbCA0AQAA2EBoAgAAsIHQBAAAYAOhCQAAwAZCEwAAgA2EJgAAABsITQAAADYQmgAAAGwgNAEAANhAaAIAALCB0AQAAGADoQkAAMAGQhMAAIANhCYAAAAbCE0AAAA2EJoAAABsIDQBAADYQGgCAACwgdAEAABgA6EJAADABkITAACADYQmAAAAGwhNAAAANhCaAAAAbCA0AQAA2EBoAgAAsIHQBAAAYAOhCQAAwAZCEwAAgA2EJgAAABsITQAAADYQmgAAAGwgNAEAANhAaAIAALDBq0PTuHHjdMstt6hSpUqqXr26evbsqbS0NLeaM2fOaMiQIapSpYqCgoJ07733KiMjw61m37596t69uypWrKjq1avr6aefVl5enlvN4sWL1bx5c/n5+emGG27QlClTSnr3AABAGeLVoWnJkiUaMmSIVq1apQULFig3N1ddunTRyZMnrZonnnhC33zzjb788kstWbJEhw4d0j333GMtz8/PV/fu3XX27FmtXLlSH3/8saZMmaJRo0ZZNXv27FH37t11++23a+PGjRo2bJgefvhhzZ8//4ruLwAA8F4OY4wp7SbsOnr0qKpXr64lS5aoffv2ysrKUrVq1TRt2jT16tVLkrR9+3Y1bNhQycnJatOmjebOnas777xThw4dUlhYmCRp0qRJGjFihI4ePSpfX1+NGDFCc+bM0datW61t9e7dW5mZmZo3b56t3lwul4KDg5WVlSWn01n8Ow8AAIqdJ9/fXn2m6deysrIkSZUrV5YkpaSkKDc3V7GxsVZNgwYNVLNmTSUnJ0uSkpOT1aRJEyswSVJcXJxcLpdSU1OtmvPHKKwpHONC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z89XYmKiwsPDVb16db388stu/WZmZurhhx9WtWrV5HQ69Yc//EGbNm0qMu4nn3yi2rVrKzg4WL1799aJEyckSQ8++KCWLFmiCRMmWJcQfvrppwse73fffVc33nij/P39FRYWpl69ev3mGFu3btUdd9yhoKAghYWF6YEHHtDPP/9sjdmxY0clJCQoISFBwcHBqlq1qp5//nmd/4tbF9suUFoSEhKUnJys6dOna/PmzfrTn/6krl27aufOnResnzx5surVq6d27dp5tqHS/ek7AN5i7969Jjg42AQHBxsfHx/j7+9vgoODja+vr/Hz8zPBwcFm8ODBF13/008/NREREWbGjBnmxx9/NDNmzDCVK1c2U6ZMMcYYs2fPHiPJNGjQwMyePdukpaWZXr16mVq1apnc3FxjjDG9evUyffv2dRv33nvvteYVjrFhwwZjzP//YPBNN91kvvvuO7Nr1y7zyy+/mMcff9xERkaab7/91qSmppr+/fub0NBQ88svv7it17p1a7N48WKTmppq2rVrZ9q2bWttd/To0SYoKMj06tXLpKammq+//tr4+vqauLg489hjj5nt27ebDz/80Ehy+9Hq2NhY06NHD7N27VqzY8cO8+STT5oqVapY2y4c95577jFbtmwxS5cuNeHh4eZvf/ubMcaYzMxMExMTYwYNGmQOHz5sDh8+bPLy8ooc77Vr15ry5cubadOmmZ9++smsX7/eTJgw4ZJjHD9+3FSrVs08++yzZtu2bWb9+vWmc+fO5vbbb7fG7dChgwkKCjJDhw4127dvN59++qmpWLGi+eCDD35zu8CVIMnMnDnTer13715Tvnx5c/DgQbe6Tp06mWeffbbI+qdPnzahoaHm1Vdf9XzbHq8B4KqUm5tr9uzZYzZt2mR8fHzMpk2bzK5du0xQUJBZsmSJ2bNnjzl69OhF169bt66ZNm2a27wXX3zRxMTEGGP+P/BMnjzZWp6ammokmW3bthljjJk5c6YJCgoyJ0+eNMYYk5WVZfz9/c3cuXPdxvh1aJo1a5Y1ZnZ2tvHx8TFTp0615p09e9ZERkaaxMREt/W+//57q2bOnDlGkjl9+rQx5ly4qVixonG5XFZNXFycqV27tsnPz7fm1a9f34wbN84YY8yyZcuM0+k0Z86cKXJs3n///YuO+/TTT5vWrVtbrzt06GCGDh16kSN9zowZ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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Tracedwith Tracedwith 5.0 Tracedwith\n", + " \n", + "\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAk0AAAHHCAYAAACiOWx7AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAABKhklEQVR4nO3dd3QVdf7/8deFVBJSaCkSiii9SwsKgkSDoC4qq7BBEBFdBaVYgK/SbCCuhbUhomABRRZhFQTEAEEwtIQaIFQBgQQEkksoIeXz+4NfZrkm4FxMSALPxzn3kPuZ98y8Z/buvS9n5s51GGOMAAAAcEllirsBAACA0oDQBAAAYAOhCQAAwAZCEwAAgA2EJgAAABsITQAAADYQmgAAAGwgNAEAANhAaAIAALCB0AQAAGADoQnAVWfOnDmKjo5WeHi4vL29VbVqVXXv3l1btmxxqTt27JjeeOMNtW/fXpUrV1ZQUJDatGmjmTNn5lvmsmXL5HA4CnysWrXKdm8zZ85UZGSk/Pz8FBQUpLZt22rJkiUuNenp6Xr++ed14403ytfXV9WrV1e/fv20f//+fMv76aef1LFjR1WqVElBQUFq1aqVvvjiC9v9ALDPo7gbAIDCtnnzZgUHB2vQoEGqVKmSUlJS9Omnn6pVq1aKj49XkyZNJEnx8fF64YUX1KVLF7344ovy8PDQ7Nmz1aNHD23dulVjx47Nt+ynn35aLVu2dBm74YYbbPU1ZswYvfTSS+revbsefvhhZWVlacuWLTp48KBVk5ubq9tvv11bt27Vk08+qdq1a2vXrl364IMPtGjRIm3btk3ly5eXJH333Xfq1q2bIiMjNWbMGDkcDn3zzTfq3bu3fv/9dw0ZMuRydyGAghgAuAakpKQYDw8P8/jjj1tje/bsMb/++qtLXW5urrntttuMt7e3ycjIsMaXLl1qJJlZs2Zd1vrj4+ONw+Ewb7311iXrVq5caSSZ9957z2X8008/NZLMt99+a43dfvvtJjw83Jw9e9Yay8rKMrVq1TKNGze+rD4BXByn5wBccUuXLpXD4dCcOXPyTZsxY4YcDofi4+MLdZ1VqlRRuXLllJaWZo3VrFlT1atXd6lzOBzq1q2bMjMztWfPngKXdfLkSWVnZ7u1/nfeeUehoaEaNGiQjDHKyMgosM7pdEqSQkJCXMbDwsIkSb6+vi61wcHB8vb2tsY8PDxUqVIllzoAhYPQBOCK69ChgyIiIjR9+vR806ZPn65atWopMjJSmZmZ+v333209CpKWlqajR49q8+bNevTRR+V0OtWpU6c/7S8lJUWSVKlSpXzT+vbtq4CAAPn4+Khjx45at26drW2OjY1Vy5Yt9e9//1uVK1dW+fLlFRYWpvfee8+lrkWLFvLz89PIkSO1ZMkSHTx4UHFxcXr++efVsmVLRUVFWbUdOnRQUlKSRo4cqV27dmn37t16+eWXtW7dOj3//PO2+gLghuI+1AXg2jRixAjj7e1t0tLSrLEjR44YDw8PM3r0aGOMMVOnTjWSbD0KUqdOHWu6v7+/efHFF01OTs4l+zp27JipUqWKadeuncv4ypUrzf33328++eQT89///teMGzfOVKxY0fj4+JjExMRLLvP48eNGkqlYsaLx9/c3b7zxhpk5c6bp3LmzkWQmTZrkUj9v3jwTFhbmsn3R0dHm5MmTLnUZGRnmgQceMA6Hw6orV66cmTt37iX7AXB5HMYYc4VzGgBo+/btqlevnqZMmaJ+/fpJkt577z099dRT2rlzp2644QYdPnxYSUlJtpZ34RGYPPHx8XI6ndqzZ4+mTp2q9u3ba9y4cfL09CxwGbm5ueratauWLFmiNWvWWBeMX8yuXbvUuHFjtW/fXgsXLrxo3YEDB1StWjVJ0tdff60HH3zQWl+jRo3kdDp14MABq37NmjUaO3asbr75ZjVo0EAbNmzQhAkT1KVLF82aNcuqy87O1tixY5WcnKz77rtPOTk5mjx5shITE7V48WK1adPmkv0DcFNxpzYA166WLVuajh07Ws/btGlj2rRpUyTrOn78uAkJCTHPPPPMRWuefPJJI8l8/vnntpfbo0cP4+XlZbKzsy9ac/ToUSPJeHp65qsbO3askWT27dtnjDFm9+7dply5cuY///mPS920adOMJPPDDz9YY48//rhp0qSJy9Gzc+fOmRtvvNG0atXK9jYAsIdrmgAUm969eysuLk6//fabdu/erVWrVqlXr17W9DNnziglJcXW488EBwfrtttuK/A6KkkaO3asPvjgA40fP14PPfSQ7W2IiIjQuXPndOrUqYvWVKhQQT4+PqpYsaLKli3rMq1KlSqSpBMnTkiSpk2bprNnz+quu+5yqbvnnnskSStXrpQknTt3Tp988om6du2qMmX+91bu6empO++8U+vWrdO5c+dsbweAP8d9mgAUmx49emjo0KH66quvdObMGXl6elqnrqTzN4Ls27evrWUZG1canDlzRunp6fnG33//fY0ZM0aDBw/WsGHD7G+ApD179sjHx0f+/v4XrSlTpoyaNm2qtWvX6ty5c/Ly8rKmHTp0SJJUuXJlSVJqaqqMMcrJyXFZRlZWliRZ39o7duyYsrOz89Xl1ebm5hY4DcDlIzQBKDaVKlXSnXfeqS+//FJnz55V586dXb6xFh0drcWLF7u93CNHjlhHcPL8+uuvio2NVYsWLVzGZ86cqaeffloxMTF66623LrrMo0ePWsEmz8aNG/Xdd9/pzjvvdDnas3//fp0+fVp169a1xh588EGtWrVKn332mfr37y9JOnv2rKZPn6769esrPDxcklS7dm0ZY/TNN9/o4Ycftub/6quvJEnNmjWTdP4IVVBQkObMmaOXXnrJCmIZGRn6/vvvVbduXW47ABQyLgQHUKxmz56t7t27SzofYB544IG/vMyQkBB16tRJTZs2VXBwsHbu3KlPPvlEp0+fVmxsrNq2bSvp/AXX7dq1U2BgoF5//fV8F4i3bdtW119/vSTptttuk6+vr9q2basqVapo69atmjx5sjw9PRUfH6969epZ83Xo0EFxcXEuR7/OnDmjli1baseOHRo0aJCqVaumL774QomJifr+++915513Sjp/BKlhw4Y6fvy4/vnPf6pBgwZKTEzUlClTVLduXSUmJloB6dVXX9WLL76oZs2aqXfv3srJydEnn3yibdu26csvv1RMTMxf3pcALlCcF1QBQGZmpgkODjaBgYHmzJkzhbLM0aNHmxYtWpjg4GDj4eFhwsPDTY8ePcymTZtc6v7slgZTp061aidOnGhatWplKlSoYDw8PExYWJjp1auX2blzZ77133rrrQXeBiE1NdX06dPHVKhQwXh7e5vWrVubhQsX5qv77bffzCOPPGJq1qxpvLy8TFhYmOnfv785evRovtrp06ebVq1amaCgIOPr62tat26d7yJyAIWDI00AilV2drbCw8N1991365NPPinudgDgovj2HIBiNXfuXB09elS9e/cu7lYA4JI40gSgWKxevVqbNm3Syy+/rEqVKikxMbG4WwKAS+JIE4Bi8eGHH+qJJ55QlSpV9Pnnnxd3OwDwpzjSBAAAYANHmgAA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PbRt2zbVr19fa9euVYsWLSRJCxcuVJcuXfTbb78pPDxcH374oV544QWlpKRYPw8zfPhwzZ07V9u3b7fVK6fnAAAofYr0Pk1lytg7OOVwOAr8uRV31K9fX9HR0frtt98UFxen6667Tk8++aT69+8vSdqzZ49q1aql9evXq2nTptZ8t956q5o2baqJEyfq008/1TPPPKMTJ05Y07Ozs+Xj46NZs2bp3nvvVe/eveV0OjV37lyrZunSpbrtttt0/PhxlyNbeTIzM5WZmWk9dzqdioiIIDQBAFCKFOk1Tbm5ubYefzUwSedD0Ycffqgbb7xRixYt0hNPPKGnn35an332mSQpJSVFkhQSEuIyX0hIiDUtJSUl313KPTw8VKFCBZeagpZx4Tr+aNy4cQoMDLQeERERf3FrAQBASeZ2aLqScnNz1bx5c7322mtq1qyZHnvsMfXv31+TJk0q7tY0YsQIpaenW48DBw4Ud0sAAKAIlejQFBYWpvr167uM1atXT/v375ckhYaGSpJSU1NdalJTU61poaGhOnLkiMv07OxsHT9+3KWmoGVcuI4/8vb2VkBAgMsDAABcvUp0aLr55puVnJzsMrZjxw5Vr15dklSzZk2FhoYqNjbWmu50OrV69WpFRkZKkiIjI5WWlqaEhASrZsmSJcrNzVXr1q2tmuXLlysrK8uqWbx4serUqVPg9UwAAODaU6JD05AhQ7Rq1Sq99tpr2rVrl2bMmKHJkydrwIABks5fbD548GC98sor+u6777R582b17t1b4eHh6tatm6TzR6Y6d+6s/v37a82aNVq5cqUGDhyoHj16WN/0+8c//iEvLy/169dPSUlJmjlzpiZOnKihQ4cW16YDAICSxpRw33//vWnYsKHx9vY2devWNZMnT3aZnpuba0aOHGlCQkKMt7e36dSpk0lOTnapOXbsmOnZs6fx9/c3AQEBpm/fvubkyZMuNRs3bjS33HKL8fb2Ntddd50ZP368W32mp6cbSSY9Pf3yNhQAAFxx7nx+27rlgNPptB3CrtVre7hPEwAApY87n98edhYYFBQkh8Nha+WFcasBAACAksZWaFq6dKn196+//qrhw4fr4Ycfti62jo+P12effaZx48YVTZcAAADFzO07gnfq1EmPPvqoevbs6TKed5H2smXLCrO/UoPTcwAAlD5Fekfw+Ph46zfcLtSiRQutWbPG3cUBAACUCm6HpoiICH388cf5xqdMmcJPiQAAgKuWrWuaLvT222/r/vvv14IFC6ybQ65Zs0Y7d+7U7NmzC71BAACAksDtI01dunTRzp07dc899+j48eM6fvy47r77bu3YsUNdunQpih4BAACKnVtHmrKystS5c2dNmjRJr776alH1BAAAUOK4daTJ09NTmzZtKqpeAAAASiy3T8/16tVLn3zySVH0AgAAUGK5fSF4dna2Pv30U/3000+66aab5Ofn5zL9rbfeKrTmAAAASgq3Q9OWLVvUvHlzSdKOHTtcptn9qRUAAIDSxu3QdOFPqgAAAFwr3L6mCQAA4Frk9pEmSVq3bp2++eYb7d+/X+fOnXOZ9u233xZKYwAAACWJ20eavv76a7Vt21bbtm3TnDlzlJWVpaSkJC1ZskSBgYFF0SMAAECxczs0vfbaa3r77bf1/fffy8vLSxMnTtT27dv1wAMPqFq1akXRIwAAQLFzOzTt3r1bXbt2lSR5eXnp1KlTcjgcGjJkiCZPnlzoDQIAAJQEboem4OBgnTx5UpJ03XXXacuWLZKktLQ0nT59unC7AwAAKCHcvhC8ffv2Wrx4sRo1aqS///3vGjRokJYsWaLFixerU6dORdEjAABAsXM7NL333ns6e/asJOmFF16Qp6enfvnlF91///168cUXC71BAACAksBhjDHF3cTVwOl0KjAwUOnp6QoICCjudgAAgA3ufH67fU1T7969NXXqVO3evfuyGwQAACht3A5NXl5eGjdunG688UZFRESoV69emjJlinbu3FkU/QEAAJQIl3167uDBg1q+fLni4uIUFxenHTt2KCwsTL/99lth91gqcHoOAIDSp0hPz+UJDg5WxYoVFRwcrKCgIHl4eKhy5cqXuzgAAIASze3Q9H//939q27atKlasqOHDh+vs2bMaPny4UlJStH79+qLoEQAAoNi5fXquTJkyqly5soYMGaL77rtPtWvXLqreShVOzwEAUPq48/nt9n2a1q9fr7i4OC1btkxvvvmmvLy8dOutt6pDhw7q0KEDIQoAAFyV/vJ9mjZu3Ki3335b06dPV25urnJycgqrt1KFI00AAJQ+RXqkyRij9evXa9myZVq2bJlWrFghp9Opxo0b69Zbb73spgEAAEoyt0NThQoVlJGRoSZNmujWW29V//791a5dOwUFBRVBewAAACWD26Hpyy+/VLt27TgFBQAArilu33Kga9euCggI0K5du7Ro0SKdOXNG0vnTdgAAAFcrt0PTsWPH1KlTJ9WuXVtdunTR4cOHJUn9+vXTM888U+gNAgAAlARuh6YhQ4bI09NT+/fvV7ly5azxBx98UAsXLizU5gAAAEoKt69p+vHHH7Vo0SJVrVrVZfzGG2/Uvn37Cq0xAACAksTtI02nTp1yOcKU5/jx4/L29i6UpgAAAEoat0NTu3bt9Pnnn1vPHQ6HcnNzNWHCBHXs2LFQmwMAACgp3D49N2HCBHXq1Enr1q3TuXPn9PzzzyspKUnHjx/XypUri6JHAACAYuf2kaaGDRtqx44duuWWW/S3v/1Np06d0n333af169erVq1aRdEjAABAsXPrSFNWVpY6d+6sSZMm6YUXXiiqngAAAEoct440eXp6atOmTUXVCwAAQInl9um5Xr166ZNPPimKXgAAAEosty8Ez87O1qeffqqffvpJN910k/z8/Fymv/XWW4XWHAAAQEnhdmjasmWLmjdvLknasWOHyzSHw1E4XQEAAJQwbp+eW7p06UUfS5YsKYoeLePHj5fD4dDgwYOtsbNnz2rAgAGqWLGi/P39df/99ys1NdVlvv3796tr164qV66cqlSpoueee07Z2dkuNcuWLVPz5s3l7e2tG264QdOmTSvSbQEAAKWL26GpuKxdu1YfffSRGjdu7DI+ZMgQff/995o1a5bi4uJ06NAh3Xfffdb0nJwcde3aVefOndMvv/yizz77TNOmTdOoUaOsmr1796pr167q2LGjNmzYoMGDB+vRRx/VokWLrtj2AQCAks1hjDHF3cSfycjIUPPmzfXBBx/olVdeUdOmTfXOO+8oPT1dlStX1owZM9S9e3dJ0vbt21WvXj3Fx8erTZs2WrBgge666y4dOnRIISEhkqRJkyZp2LBhOnr0qLy8vDRs2DDNnz9fW7ZssdbZo0cPpaWl2f4RYqfTqcDAQKWnpysgIKDwdwIAACh07nx+l4ojTQMGDFDXrl0VFRXlMp6QkKCsrCyX8bp166patWqKj4+XJMXHx6tRo0ZWYJKk6OhoOZ1OJSUlWTV/XHZ0dLS1jIJkZmbK6XS6PAAAwNXL7QvBr7Svv/5aiYmJWrt2bb5pKSkp8vLyUlBQkMt4SEiIUlJSrJoLA1Pe9Lxpl6pxOp06c+aMfH1986173LhxGjt27GVvFwAAKF1K9JGmAwcOaNCgQZo+fbp8fHyKux0XI0aMUHp6uvU4cOBAcbcEAACKUIkOTQkJCTpy5IiaN28uDw8PeXh4KC4uTv/+97/l4eGhkJAQnTt3TmlpaS7zpaamKjQ0VJIUGhqa79t0ec//rCYgIKDAo0yS5O3trYCAAJcHAAC4epXo0NSpUydt3rxZGzZssB4tWrRQTEyM9benp6diY2OteZKTk7V//35FRkZKkiIjI7V582YdOXLEqlm8eLECAgJUv359q+bCZeTV5C0DAACgRF/TVL58eTVs2NBlzM/PTxUrVrTG+/Xrp6FDh6pChQoKCAjQU089pcjISLVp00aSdMcdd6h+/fp66KGHNGHCBKWkpOjFF1/UgAED5O3tLUn65z//qffee0/PP/+8HnnkES1ZskTffPON5s+ff2U3GAAAlFglOjTZ8fbbb6tMmTK6//77lZmZqejoaH3wwQfW9LJly2revHl64oknFBkZKT8/P/Xp00cvvfSSVVOzZk3Nnz9fQ4YM0cSJE1W1alVNmTJF0dHRxbFJAACgBCoV92kqDbhPEwAApc9Vd58mAACA4kZoAgAAsIHQBAAAYAOhCQAAwAZCEwAAgA2EJgAAABsITQAAADYQmgAAAGwgNAEAANhAaAIAALCB0AQAAGADoQkAAMAGQhMAAIANhCYAAAAbCE0AAAA2EJoAAABsIDQBAADYQGgCAACwgdAEAABgA6EJAADABkITAACADYQmAAAAGwhNAAAANhCaAAAAbCA0AQAA2EBoAgAAsIHQBAAAYAOhCQAAwAZCEwAAgA2EJgAAABsITQAAADYQmgAAAGwgNAEAANhAaAIAALCB0AQAAGADoQkAAMAGQhMAAIANhCYAAAAbCE0AAAA2EJoAAABsIDQBAADYQGgCAACwgdAEAABgA6EJAADABkITAACADYQmAAAAG0p0aBo3bpxatmyp8uXLq0qVKurWrZuSk5Ndas6ePasBAwaoYsWK8vf31/3336/U1FSXmv3796tr164qV66cqlSpoueee07Z2dkuNcuWLVPz5s3l7e2tG264QdOmTSvqzQMAAKVIiQ5NcXFxGjBggFatWqXFixcrKytLd9xxh06dOmXVDBkyRN9//71mzZqluLg4HTp0SPfdd581PScnR127dtW5c+f0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+OOPZteuXebYsWPm6aefNuHh4eaHH34wSUlJpk+fPiY4ONgcO3bMZb7WrVubZcuWmaSkJNOuXTvTtm1ba72jR482/v7+pnv37iYpKcl89913xsvLy0RHR5unnnrKbN++3Xz66adGksuPVkdFRZm7777brF271uzYscM888wzpmLFita685Z73333mc2bN5vly5eb0NBQ83//93/GGGPS0tJMZGSk6d+/vzl8+LA5fPiwyc7Ozre/165da8qWLWtmzJhhfv31V5OYmGgmTpx4yWWcOHHCVK5c2YwYMcJs27bNJCYmmttvv9107NjRWu6tt95q/P39zaBBg8z27dvNl19+acqVK2cmT578p+sFrgRJZs6cOdbzffv2mbJly5qDBw+61HXq1MmMGDEi3/xnzpwxwcHB5vXXX3d/3W7PAeCqlJWVZfbu3Ws2btxoPD09zcaNG82uXbuMv7+/iYuLM3v37jVHjx696Py1atUyM2bMcBl7+eWXTWRkpDHmf4FnypQp1vSkpCQjyWzbts0YY8ycOXOMv7+/OXXqlDHGmPT0dOPj42MWLFjgsow/hqa5c+day8zIyDCenp5m+vTp1ti5c+dMeHi4mTBhgst8P/30k1Uzf/58I8mcOXPGGHM+3JQrV844nU6rJjo62tSoUcPk5ORYY3Xq1DHjxo0zxhjz888/m4CAAHP27Nl8++ajjz666HKfe+4507p1a+v5rbfeagYNGnSRPX3e7NmzTUBAgMtyLlTQMl5++WVzxx13uIwdOHDASDLJycnWfPXq1TO5ublWzbBhw0y9evVsrRcoan8MTfPmzTOSjJ+fn8vDw8PDPPDAA/nmnzFjhvHw8DApKSlur7vgCwMAXHM8PDxUo0YNffPNN2rZsqUaN26slStXKiQkRO3bt7/kvKdOndLu3bvVr18/9e/f3xrPzs5WYGCgS23jxo2tv8PCwiRJR44cUd26ddWlSxd5enrqu+++U48ePTR79mwFBAQoKirqkutv0aKF9ffu3buVlZXlckrR09NTrVq10rZt22z1knf9Vo0aNVS+fHmrJiQkRGXLllWZMmVcxo4cOSJJ2rhxozIyMlSxYkWX9Zw5c0a7d++2nv9xuWFhYdYy7Lr99ttVvXp1XX/99ercubM6d+6se++9V+XKlbvoPBs3btTSpUvl7++fb9ru3btVu3ZtSVKbNm3kcDisaZGRkXrzzTeVk5NzWesFilJGRobKli2rhIQElS1b1mVaQa/1KVOm6K677lJISIjb6yI0AZAkNWjQQPv27VNWVpZyc3Pl7++v7OxsZWdny9/fX9WrV1dSUlKB82ZkZEiSPv74Y7Vu3dpl2h/fxDw9Pa2/8z6Yc3NzJUleXl7q3r27ZsyYoR49emjGjBl68MEHL3rhdx53vzZsp5c/Ts+rKWgsb56MjAyFhYW5XICaJygo6JLLvXC9dpQvX16JiYlatmyZfvzxR40aNUpjxozR2rVrXdZ1oYyMDN199916/fXX803LC41FsV6gKDVr1kw5OTk6cuTIn16jtHfvXi1dulTffffdZa2L0ARAkvTDDz8oKytLnTp10oQJE3TTTTepR48eevjhh9W5c+d8H/QXCgkJUXh4uPbs2aOYmJi/1EdMTIxuv/12JSUlacmSJXrllVfcmr9WrVry8vLSypUrVb16dUlSVlaW1q5dW+RfwW/evLlSUlKso3aXy8vLSzk5OX9a5+HhoaioKEVFRWn06NEKCgrSkiVLdN999xW4jObNm2v27NmqUaPGJYPo6tWrXZ6vWrVKN954oxWAL7VeoChkZGRo165d1vO9e/dqw4YNqlChgmrXrq2YmBj17t1bb775ppo1a6ajR48qNjZWjRs3VteuXa35Pv30U4WFhenOO++8rD4ITQAkSdWrV1dKSopSU1P1t7/9TQ6HQ0lJSbr//vttHYUYO3asnn76aQUGBqpz587KzMzUunXrdOLECQ0dOtR2H+3bt1doaKhiYmJUs2bNfEeu/oyfn5+eeOIJPffcc9atEiZMmKDTp0+7/fVid0VFRSkyMlLdunXThAkTVLt2bR06dEjz58/Xvffe63Ia8VJq1Kih1atX69dff5W/v78qVKjgckpQkubNm6c9e/aoffv2Cg4O1g8//KDc3FzVqVPnossYMGCAPv74Y/Xs2VPPP/+8KlSooF27dunrr7/WlClTrFC0f/9+DR06VI8//rgSExP17rvv6s0337S1XqAorFu3Th07drSe572n9OnTR9OmTdPUqVP1yiuv6JlnntHBgwdVqVIltWnTRnfddZc1T25urqZNm6aHH3443xFwuwhNACzLli1Ty5Yt5ePjo59//llVq1a1fdrm0UcfVbly5fTGG2/oueeek5+fnxo1auT20R2Hw6GePXtqwoQJGjVq1GVshTR+/Hjl5ubqoYce0smTJ9WiRQstWrRIwcHBl7U8uxwOh3744Qe98MIL6tu3r44eParQ0FC1b9/eresnnn32WfXp00f169fXmTNntHfv3nxHroKCgvTtt99qzJgxOnv2rG688UZ99dVXatCgwSWXsXLlSg0bNkx33HGHMjMzVb16dXXu3NkllPXu3VtnzpxRq1atVLZsWQ0aNEiPPfaYrfUCRaFDhw4ut734I09PT40dO1Zjx469aE2ZMmV04MCBv9SHw1yqCwDANaVDhw5q2rSp3nnnneJuBShxuLklAACADYQmAAAAGzg9BwAAYANHmgAAAGwgNAEAANhAaAIAALCB0AQAAGADoQkAAMAGQhMAAIANhCYAAAAbCE0AAAA2EJoAAABs+H9DLTEkP513igAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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AADYQGgCAACw4aJC05IlS9S9e3fFxMRo//79kqTPP/9cS5cuLdbmAAAAygq3Q9PUqVMVFxcnPz8/rVu3TllZWZKkjIwMvfbaa8XeIAAAQFngdmh65ZVXNG7cOP373/+Wl5eXNX7TTTdp7dq1xdocAABAWeF2aEpOTlbbtm0LjQcFBSk9Pb04egIAAChz3A5N4eHh+u233wqNL126VFdffXWxNAUAAFDWuB2aevfurX79+mnlypVyOBw6cOCAJk+erOeee05PPfVUSfQIAABQ6jzdnWHw4MHKz89X+/btdfLkSbVt21Y+Pj567rnn9PTTT5dEjwAAAKXOYYwxFzNjdna2fvvtN2VmZqphw4YKCAgo7t7KFafTqaCgIGVkZCgwMLC02wEAADa48/nt9pGmAt7e3mrYsOHFzg4AAFCu2ApN9913n+0Ffv/99xfdDAAAQFll60LwoKAg6xEYGKh58+ZpzZo11vTExETNmzdPQUFBJdYoAABAabJ1pGnixInW34MGDdKDDz6ocePGycPDQ5KUl5env//971zLAwAALltuXwhetWpVLV26VPXq1XMZT05OVuvWrXXkyJFibbC84EJwAADKH3c+v92+T1Nubq62bt1aaHzr1q3Kz893d3EAAADlgtvfnnv00UfVq1cv7dixQy1btpQkrVy5UqNGjdKjjz5a7A0CAACUBW6Hpn/9618KDw/XG2+8oYMHD0qSIiIi9Pzzz+vZZ58t9gYBAADKgou+uaV05jygJK7hEdc0AQBQHl2Sm1sePnxYycnJkqT69eurSpUqF7soAACAMs/tC8FPnDihxx57TBEREWrbtq3atm2riIgI9erVSydPniyJHgEAAEqd26Fp4MCBWrRokX788Uelp6crPT1d//nPf7Ro0aJiv6YpLy9PL730kmrXri0/Pz/VqVNHL7/8ss4+o2iM0dChQxURESE/Pz/FxsZq+/btLss5evSo4uPjFRgYqODgYPXq1UuZmZkuNRs3blSbNm3k6+urqKgojR49uli3BQAAlHPGTaGhoWbBggWFxufPn2+qVKni7uIu6NVXXzWhoaFmxowZJiUlxXz77bcmICDAjB071qoZNWqUCQoKMtOnTzcbNmwwd999t6ldu7Y5deqUVdOhQwfTtGlTs2LFCrNkyRJzzTXXmG7dulnTMzIyTFhYmImPjzebN282X375pfHz8zMfffSR7V4zMjKMJJORkVE8Gw8AAEqcO5/fbocmPz8/8+uvvxYa37x5s6lYsaK7i7ugTp06mccee8xl7L777jPx8fHGGGPy8/NNeHi4GTNmjDU9PT3d+Pj4mC+//NIYY8yvv/5qJJnVq1dbNbNmzTIOh8Ps37/fGGPMBx98YCpXrmyysrKsmkGDBpl69erZ7pXQBABA+ePO57fbp+diYmI0bNgwnT592ho7deqURowYoZiYmOI6ACZJat26tebNm6dt27ZJkjZs2KClS5fqzjvvlCSlpKQoNTVVsbGx1jxBQUGKjo5WQkKCJCkhIUHBwcFq0aKFVRMbG6sKFSpo5cqVVk3btm3l7e1t1cTFxSk5OVnHjh0rsresrCw5nU6XBwAAuHy5/e25sWPHKi4uTtWrV1fTpk0lnQkzvr6+mjNnTrE2N3jwYDmdTtWvX18eHh7Ky8vTq6++qvj4eElSamqqJCksLMxlvrCwMGtaamqqqlWr5jLd09NTISEhLjW1a9cutIyCaZUrVy7U28iRIzVixIhi2EoAAFAeuB2aGjVqpO3bt2vy5MnWz6l069ZN8fHx8vPzK9bmvvnmG02ePFlTpkzRddddp/Xr16t///6KjIxUz549i3Vd7hoyZIgGDhxoPXc6nYqKiirFjgAAQEm6qPs0VaxYUb179y7uXgp5/vnnNXjwYHXt2lWS1LhxY+3evVsjR45Uz549FR4eLklKS0tTRESENV9aWpqaNWsmSQoPD9ehQ4dclpubm6ujR49a84eHhystLc2lpuB5Qc25fHx85OPj8+c3EgAAlAtuX9P06aefaubMmdbzF154QcHBwWrdurV2795drM2dPHlSFSq4tujh4WH9MHDt2rUVHh6uefPmWdOdTqdWrlxpXV8VExOj9PR0JSYmWjXz589Xfn6+oqOjrZrFixcrJyfHqpk7d67q1atX5Kk5AABw5XE7NL322mvWabiEhAS99957Gj16tKpUqaIBAwYUa3N33XWXXn31Vc2cOVO7du3StGnT9Oabb+ree++VJDkcDvXv31+vvPKKfvjhB23atEk9evRQZGSkOnfuLElq0KCBOnTooN69e2vVqlVatmyZ+vbtq65duyoyMlKS9Ne//lXe3t7q1auXkpKS9PXXX2vs2LEup98AAMAVzt2v5vn5+Zndu3cbY4x54YUXzMMPP2yMOXPLgeK+T5PT6TT9+vUzNWrUML6+vubqq682L774osutAfLz881LL71kwsLCjI+Pj2nfvr1JTk52Wc6RI0dMt27dTEBAgAkMDDSPPvqoOX78uEvNhg0bzM0332x8fHzMVVddZUaNGuVWr9xyAACA8sedz2+3f7C3WrVqmjNnjq6//npdf/31GjhwoB5++GHt2LFDTZs2LXSn7SsFP9gLAED5U6I/2Hv77bfr8ccf1/XXX69t27apY8eOkqSkpCTVqlXrohoGAAAo69y+pun9999XTEyMDh8+rKlTpyo0NFSSlJiYqG7duhV7gwAAAGWB26fnUDROzwEAUP4U++m5jRs3qlGjRqpQoYI2btx4wdomTZrY7xQAAKCcsBWamjVrZv0cSbNmzeRwOHT2AaqC5w6HQ3l5eSXWLAAAQGmxFZpSUlJUtWpV628AAIArja3QVLNmzSL/BgAAuFJc1G/PJScn691339WWLVsknbnr9tNPP6169eoVa3MAAABlhdu3HJg6daoaNWqkxMRENW3aVE2bNtXatWvVqFEjTZ06tSR6BAAAKHVu33KgTp06io+P1z//+U+X8WHDhumLL77Qjh07irXB8oJbDgAAUP648/nt9pGmgwcPqkePHoXGu3fvroMHD7q7OAAAgHLB7dDUrl07LVmypND40qVL1aZNm2JpCgAAoKxx+0Lwu+++W4MGDVJiYqJatWolSVqxYoW+/fZbjRgxQj/88INLLQAAwOXA7WuaKlSwd3DqSrvRJdc0AQBQ/hT7z6icLT8//6IbAwAAKK/cvqbpbKdPny6uPgAAAMo0t0NTXl6eXn75ZV111VUKCAjQzp07JUkvvfSSPv7442JvEAAAoCxwOzS9+uqrmjRpkkaPHi1vb29rvFGjRpowYUKxNgcAAFBWuB2aPvvsM40fP17x8fHy8PCwxps2baqtW7cWa3MAAABlhduhaf/+/brmmmsKjefn5ysnJ6dYmgIAAChr3A5NDRs2LPLmlt99952uv/76YmkKAACgrHH7lgNDhw5Vz549tX//fuXn5+v7779XcnKyPvvsM82YMaMkegQAACh1bh9puueee/Tjjz/ql19+kb+/v4YOHaotW7boxx9/1O23314SPQIAAJQ6t+8IjqJxR3AAAMofdz6//9TNLQEAAK4UhCYAAAAbCE0AAAA2EJoAAABscCs05eTkqE6dOtqyZUtJ9QMAAFAmuRWavLy8dPr06ZLqBQAAoMxy+/Rcnz599Prrrys3N7ck+gEAACiT3L4j+OrVqzVv3jz9/PPPaty4sfz9/V2mf//998XWHAAAQFnhdmgKDg7W/fffXxK9AAAAlFluh6aJEyeWRB8AAABl2kXdciA3N1e//PKLPvroIx0/flySdODAAWVmZhZrcwAAAGWF20eadu/erQ4dOmjPnj3KysrS7bffrkqVKun1119XVlaWxo0bVxJ9AgAAlCq3jzT169dPLVq00LFjx+Tn52eN33vvvZo3b16xNgcAAFBWuH2kacmSJVq+fLm8vb1dxmvVqqX9+/cXW2MAAABlidtHmvLz85WXl1dofN++fapUqVKxNAUAAFDWuB2a7rjjDr399tvWc4fDoczMTA0bNkwdO3Yszt4AAADKDIcxxrgzw759+xQXFydjjLZv364WLVpo+/btqlKlihYvXqxq1aqVVK9lmtPpVFBQkDIyMhQYGFja7QAAABvc+fx2OzRJZ2458NVXX2njxo3KzMxU8+bNFR8f73Jh+JWG0AQAQPnjzue32xeCS5Knp6e6d+9+Uc0BAACURxcVmpKTk/Xuu+9qy5YtkqQGDRqob9++ql+/frE2BwAAUFa4fSH41KlT1ahRIyUmJqpp06Zq2rSp1q5dq8aNG2vq1Kkl0SMAAECpc/uapjp16ig+Pl7//Oc/XcaHDRumL774Qjt27CjWBssLrmkCAKD8cefz2+0jTQcPHlSPHj0KjXfv3l0HDx50d3F/aP/+/erevbtCQ0Pl5+enxo0ba82aNdZ0Y4yGDh2qiIgI+fn5KTY2Vtu3b3dZxtGjRxUfH6/AwEAFBwerV69ehX4nb+PGjWrTpo18fX0VFRWl0aNHF/u2AACA8svt0NSuXTstWbKk0PjSpUvVpk2bYmmqwLFjx3TTTTfJy8tLs2bN0q+//qo33nhDlStXtmpGjx6td955R+PGjdPKlSvl7++vuLg4nT592qqJj49XUlKS5s6dqxkzZmjx4sV64oknrOlOp1N33HGHatasqcTERI0ZM0bDhw/X+PHji3V7AABA+eX26blx48Zp6NChevDBB9WqVStJ0ooVK/Ttt99qxIgRioyMtGrvvvvuP9Xc4MGDtWzZsiJDmnTmKFNkZKSeffZZPffcc5KkjIwMhYWFadKkSeratau2bNmihg0bavXq1WrRooUkafbs2erYsaP27dunyMhIffjhh3rxxReVmppq/TzM4MGDNX36dG3dutVWr5yeAwCg/CnR+zRVqGDv4JTD4Sjy51bc0bBhQ8XFxWnfvn1atGiRrrrqKv39739X7969JUk7d+5UnTp1tG7dOjVr1sya75ZbblGzZs00duxYffLJJ3r22Wd17Ngxa3pubq58fX317bff6t5771WPHj3kdDo1ffp0q2bBggW67bbbdPToUZcjWwWysrKUlZVlPXc6nYqKiiI0AQBQjpToNU35+fm2Hn82MElnQtGHH36oa6+9VnPmzNFTTz2lZ555Rp9++qkkKTU1VZIUFhbmMl9YWJg1LTU1tdBdyj09PRUSEuJSU9Qyzl7HuUaOHKmgoCDrERUV9Se3FgAAlGVuh6ZLKT8/X82bN9drr72m66+/Xk888YR69+6tcePGlXZrGjJkiDIyMqzH3r17S7slAABQgsp0aIqIiFDDhg1dxho0aKA9e/ZIksLDwyVJaWlpLjVpaWnWtPDwcB06dMhlem5uro4ePepSU9Qyzl7HuXx8fBQYGOjyAAAAl68yHZpuuukmJScnu4xt27ZNNWvWlCTVrl1b4eHhmjdvnjXd6XRq5cqViomJkSTFxMQoPT1diYmJVs38+fOVn5+v6Ohoq2bx4sXKycmxaubOnat69eoVeT0TAAC48pTp0DRgwACtWLFCr732mn777TdNmTJF48ePV58+fSSdudi8f//+euWVV/TDDz9o06ZN6tGjhyIjI9W5c2dJZ45MdejQQb1799aqVau0bNky9e3bV127drW+6ffXv/5V3t7e6tWrl5KSkvT1119r7NixGjhwYGltOgAAKGtMGffjjz+aRo0aGR8fH1O/fn0zfvx4l+n5+fnmpZdeMmFhYcbHx8e0b9/eJCcnu9QcOXLEdOvWzQQEBJjAwEDz6KOPmuPHj7vUbNiwwdx8883Gx8fHXHXVVWbUqFFu9ZmRkWEkmYyMjIvbUAAAcMm58/lt65YDTqfTdgi7Uq/t4T5NAACUP+58fnvaWWBwcLAcDoetlRfHrQYAAADKGluhacGCBdbfu3bt0uDBg/XII49YF1snJCTo008/1ciRI0umSwAAgFLm9h3B27dvr8cff1zdunVzGS+4SHvhwoXF2V+5wek5AADKnxK9I3hCQoL1G25na9GihVatWuXu4gAAAMoFt0NTVFSU/v3vfxcanzBhAj8lAgAALlu2rmk621tvvaX7779fs2bNsm4OuWrVKm3fvl1Tp04t9gYBAADKArePNHXs2FHbt2/X3XffraNHj+ro0aO66667tG3bNnXs2LEkegQAACh1bh1pysnJUYcOHTRu3Di9+uqrJdUTAABAmePWkSYvLy9t3LixpHoBAAAos9w+Pde9e3d9/PHHJdELAABAmeX2heC5ubn65JNP9Msvv+iGG26Qv7+/y/Q333yz2JoDAAAoK9wOTZs3b1bz5s0lSdu2bXOZZvenVgAAAMobt0PT2T+pAgAAcKVw+5omAACAK5HbR5okac2aNfrmm2+0Z88eZWdnu0z7/vvvi6UxAACAssTtI01fffWVWrdurS1btmjatGnKyclRUlKS5s+fr6CgoJLoEQAAoNS5HZpee+01vfXWW/rxxx/l7e2tsWPHauvWrXrwwQdVo0aNkugRAACg1Lkdmnbs2KFOnTpJkry9vXXixAk5HA4NGDBA48ePL/YGAQAAygK3Q1PlypV1/PhxSdJVV12lzZs3S5LS09N18uTJ4u0OAACgjHD7QvC2bdtq7ty5aty4sR544AH169dP8+fP19y5c9W+ffuS6BEAAKDUuR2a3nvvPZ0+fVqS9OKLL8rLy0vLly/X/fffr//7v/8r9gYBAADKAocxxpR2E5cDp9OpoKAgZWRkKDAwsLTbAQAANrjz+e32NU09evTQxIkTtWPHjotuEAAAoLxxOzR5e3tr5MiRuvbaaxUVFaXu3btrwoQJ2r59e0n0BwAAUCZc9Om5/fv3a/HixVq0aJEWLVqkbdu2KSIiQvv27SvuHssFTs8BAFD+lOjpuQKVK1dWaGioKleurODgYHl6eqpq1aoXuzgAAIAyze3Q9I9//EOtW7dWaGioBg8erNOnT2vw4MFKTU3VunXrSqJHAACAUuf26bkKFSqoatWqGjBggO677z7VrVu3pHorVzg9BwBA+ePO57fb92lat26dFi1apIULF+qNN96Qt7e3brnlFrVr107t2rUjRAEAgMvSn75P04YNG/TWW29p8uTJys/PV15eXnH1Vq5wpAkAgPKnRI80GWO0bt06LVy4UAsXLtTSpUvldDrVpEkT3XLLLRfdNAAAQFnmdmgKCQlRZmammjZtqltuuUW9e/dWmzZtFBwcXALtAQAAlA1uh6YvvvhCbdq04RQUAAC4orh9y4FOnTopMDBQv/32m+bMmaNTp05JOnPaDgAA4HLldmg6cuSI2rdvr7p166pjx446ePCgJKlXr1569tlni71BAACAssDt0DRgwAB5eXlpz549qlixojX+0EMPafbs2cXaHAAAQFnh9jVNP//8s+bMmaPq1au7jF977bXavXt3sTUGAABQlrh9pOnEiRMuR5gKHD16VD4+PsXSFAAAQFnjdmhq06aNPvvsM+u5w+FQfn6+Ro8erVtvvbVYmwMAACgr3D49N3r0aLVv315r1qxRdna2XnjhBSUlJeno0aNatmxZSfQIAABQ6tw+0tSoUSNt27ZNN998s+655x6dOHFC9913n9atW6c6deqURI8AAAClzq0jTTk5OerQoYPGjRunF198saR6AgAAKHPcOtLk5eWljRs3llQvAAAAZZbbp+e6d++ujz/+uCR6AQAAKLPcvhA8NzdXn3zyiX755RfdcMMN8vf3d5n+5ptvFltzAAAAZYXboWnz5s1q3ry5JGnbtm0u0xwOR/F0BQAAUMa4fXpuwYIF533Mnz+/JHq0jBo1Sg6HQ/3797fGTp8+rT59+ig0NFQBAQG6//77lZaW5jLfnj171KlTJ1WsWFHVqlXT888/r9zcXJeahQsXqnnz5vLx8dE111yjSZMmlei2AACA8sXt0FRaVq9erY8++khNmjRxGR8wYIB+/PFHffvtt1q0aJEOHDig++67z5qel5enTp06KTs7W8uXL9enn36qSZMmaejQoVZNSkqKOnXqpFtvvVXr169X//799fjjj2vOnDmXbPsAAEDZ5jDGmNJu4o9kZmaqefPm+uCDD/TKK6+oWbNmevvtt5WRkaGqVatqypQp6tKliyRp69atatCggRISEtSqVSvNmjVLf/nLX3TgwAGFhYVJksaNG6dBgwbp8OHD8vb21qBBgzRz5kxt3rzZWmfXrl2Vnp5u+0eInU6ngoKClJGRocDAwOLfCQAAoNi58/ldLo409enTR506dVJsbKzLeGJionJyclzG69evrxo1aighIUGSlJCQoMaNG1uBSZLi4uLkdDqVlJRk1Zy77Li4OGsZRcnKypLT6XR5AACAy5fbF4Jfal999ZXWrl2r1atXF5qWmpoqb29vBQcHu4yHhYUpNTXVqjk7MBVML5h2oRqn06lTp07Jz8+v0LpHjhypESNGXPR2AQCA8qVMH2nau3ev+vXrp8mTJ8vX17e023ExZMgQZWRkWI+9e/eWdksAAKAElenQlJiYqEOHDql58+by9PSUp6enFi1apHfeeUeenp4KCwtTdna20tPTXeZLS0tTeHi4JCk8PLzQt+kKnv9RTWBgYJFHmSTJx8dHgYGBLg8AAHD5KtOhqX379tq0aZPWr19vPVq0aKH4+Hjrby8vL82bN8+aJzk5WXv27FFMTIwkKSYmRps2bdKhQ4esmrlz5yowMFANGza0as5eRkFNwTIAAADK9DVNlSpVUqNGjVzG/P39FRoaao336tVLAwcOVEhIiAIDA/X0008rJiZGrVq1kiTdcccdatiwoR5++GGNHj1aqamp+r//+z/16dNHPj4+kqS//e1veu+99/TCCy/oscce0/z58/XNN99o5syZl3aDAQBAmVWmQ5Mdb731lipUqKD7779fWVlZiouL0wcffGBN9/Dw0IwZM/TUU08pJiZG/v7+6tmzp/75z39aNbVr19bMmTM1YMAAjR07VtWrV9eECRMUFxdXGpsEAADKoHJxn6bygPs0AQBQ/lx292kCAAAobYQmAAAAGwhNAAAANhCaAAAAbCA0AQAA2EBoAgAAsIHQBAAAYAOhCQAAwAZCEwAAgA2EJgAAABsITQAAADYQmgAAAGwgNAEAANhAaAIAALCB0AQAAGADoQkAAMAGQhMAAIANhCYAAAAbCE0AAAA2EJoAAABsIDQBAADYQGgCAACwgdAEAABgA6EJAADABkITAACADYQmAAAAGwhNAAAANhCaAAAAbCA0AQAA2EBoAgAAsIHQBAAAYAOhCQAAwAZCEwAAgA2EJgAAABsITQAAADYQmgAAAGwgNAEAANhAaAIAALCB0AQAAGADoQkAAMAGQhMAAIANhCYAAAAbCE0AAAA2EJoAAABsIDQBAADYQGgCAACwoUyHppEjR+rGG29UpUqVVK1aNXXu3FnJyckuNadPn1afPn0UGhqqgIAA3X///UpLS3Op2bNnjzp16qSKFSuqWrVqev7555Wbm+tSs3DhQjVv3lw+Pj665pprNGnSpJLePAAAUI6U6dC0aNEi9enTRytWrNDcuXOVk5OjO+64QydOnLBqBgwYoB9//FHffvutFi1apAMHDui+++6zpufl5alTp07Kzs7W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AOUT1zQBAADYQGgCAACwgdAEAABgA6EJAADABkITAACADYQmAAAAGwhNAAAANhCaAJQbu3btksPh0Pr160u7FQCX0OLFi3XXXXcpMjJSDodD06dPd2v+4cOHy+FwFHr4+/u7tRxCE4BCDh8+LG9vb504cUI5OTny9/fXnj17SrstRUVF6eDBg2rUqFFpt1Ki2rVrp/79+5f6MoCy4sSJE2ratKnef//9i5r/ueee08GDB10eDRs21AMPPODWcghNAApJSEhQ06ZN5e/vr7Vr1yokJEQ1atQo7bbk4eGh8PBweXp6FjndGKPc3NxL3BWAknbnnXfqlVde0b333lvk9KysLD333HO66qqr5O/vr+joaC1cuNCaHhAQoPDwcOuRlpamX3/9Vb169XKrD0ITgEKWL1+um266SZK0dOlS6+8/MmHCBDVo0EC+vr6qX7++PvjgA2tawam177//XrfeeqsqVqyopk2bKiEhQZLkdDrl5+enWbNmuSxz2rRpqlSpkk6ePFno9NzChQvlcDg0a9Ys3XDDDfLx8dHSpUuVlZWlZ555RtWqVZOvr69uvvlmrV692lpmwXzz5s1TixYtVLFiRbVu3VrJyclWzfDhw9WsWTN98sknqlGjhgICAvT3v/9deXl5Gj16tMLDw1WtWjW9+uqrLv2mp6fr8ccfV9WqVRUYGKjbbrtNGzZsKLTczz//XLVq1VJQUJC6du2q48ePS5IeeeQRLVq0SGPHjrVOIezatavI/f3BBx/o2muvla+vr8LCwtSlS5c/XMbmzZt15513KiAgQGFhYXr44Yf1+++/W8ts166d+vbtq759+yooKEhVqlTRSy+9pLN/cet86wVKS9++fZWQkKCvvvpKGzdu1AMPPKAOHTpo+/btRdZPmDBBdevWVZs2bdxbUen+9B2AsmL37t0mKCjIBAUFGS8vL+Pr62uCgoKMt7e38fHxMUFBQeapp5467/xffPGFiYiIMFOnTjU7d+40U6dONSEhIWbSpEnGGGNSUlKMJFO/fn0zY8YMk5ycbLp06WJq1qxpcnJyjDHGdOnSxXTv3t1luffff781VrCMdevWGWP+94PBTZo0MT///LP57bffzJEjR8wzzzxjIiMjzU8//WSSkpJMz549TeXKlc2RI0dc5ouOjjYLFy40SUlJpk2bNqZ169bWeocNG2YCAgJMly5d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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAk0AAAHHCAYAAACiOWx7AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAABSMUlEQVR4nO3deVhU9f4H8PewDKszLMqmqKSJO+6I5ZYopmlulYZKRtY1KU1z+3lzadPomllZWqZWapqh3nKNcFdEBHFBxQ13wQWZYZF1vr8/iHMdQT2DM84A79fzzHOZcz7nnM+cO828PefM+SqEEAJERERE9FBW5m6AiIiIqDJgaCIiIiKSgaGJiIiISAaGJiIiIiIZGJqIiIiIZGBoIiIiIpKBoYmIiIhIBoYmIiIiIhkYmoiIiIhkYGgiIiIikoGhiYiqjJ49e0KhUCAiIuKhdXv37oVCoYBCocCtW7cqtM7Lly9j9uzZ6NChA1xdXVGzZk1069YNf//9t+x+z549iyFDhsDV1RWOjo549tlnsWPHjjJ1pb2W9+jZs6dUd+3aNQwfPhz+/v6oUaMGXFxc0KFDB/z000/giFlEj8/G3A0QERnDunXrEBsb+8g6nU6Hd955B05OTsjJyanwOv/73//is88+w4ABAxAWFoaioiL8/PPP6NmzJ5YuXYpRo0Y9dN2XL19GUFAQrK2tMWnSJDg5OWHZsmXo1asXYmJi0KVLF6n2l19+KbP8oUOHsGDBAvTq1UuaduvWLVy5cgVDhgxB3bp1UVhYiOjoaLz22mtISUnBp59++tCeiOgRBBFRJXf37l1Rv3598eGHHwoAYuzYsQ+s/e6774S7u7sYN26cACBu3rxZoXUeP368zLJ5eXmicePGok6dOo/s+e233xY2Njbi1KlT0rScnBzh6+sr2rRp88jlw8PDhUKhEJcvX35k7QsvvCCcnJxEUVHRI2uJ6MF4eo6ITGbHjh1QKBRYv359mXmrVq2CQqGQdXToUSIjI6HT6fD+++8/tC4jIwP//ve/8eGHH8LFxeWx1tmsWTPUrFlTb5qdnR369OmDK1euICsr66Hr37NnD1q3bg1/f39pmqOjI/r374/ExEScOXPmgcvm5+cjKioKXbt2RZ06dR66HQCoX78+cnNzUVBQ8MhaInownp4jIpPp1q0bfH19sXLlSgwcOFBv3sqVK9GgQQMEBQUhPz//kSGj1P1B5dKlS5g7dy6WLl0KBweHhy77wQcfwMvLC2+99RY++uijB9YZss77paWlwdHREY6Ojg+ty8/Ph6ura5nppcslJCTg6aefLnfZzZs3IzMzE6GhoeXOv3v3LnJycpCdnY1du3Zh2bJlCAoKMvi1EJE+hiYiMhmFQoHhw4fjiy++gEajgVqtBgDcvHkTf/31F6ZPnw4A+PXXXx95DVApcd8FzRMnTkTr1q0xdOjQhy539OhRLF68GJs3b4a1tfVDa+Wu835nz57FunXr8NJLLz1yG/7+/tizZw+ysrJQo0YNafrevXsBAFevXn3gsitXroSdnR2GDBlS7vwFCxZg2rRp0vMePXpg2bJlhrwUIioHQxMRmdTIkSMxZ84c/P777wgPDwcArFmzBkVFRRg+fDgAICQkBNHR0Qave8eOHYiKikJcXNwja9999108//zzehdOP+4675Wbm4uXXnoJDg4OmDt37iPrx4wZgz///BOvvPIKPvnkEzg5OeHbb7/FoUOHAJQcLSqPVqvFpk2b0KdPnweeYhw2bBjatWuHmzdvYuPGjUhPT3/g+ojIAOa+qIqIqr727duL7t27S887duwoOnbs+FjrLCwsFM2bNxcjR47Um45yLtpevXq1sLW1FSkpKdK0mTNnlrkQ3JB13quoqEj069dPKJVKERMTI/s1fP3118LJyUkAEABEw4YNRWRkpAAg5s+fX+4yS5cuFQDE77//Lns7o0ePFr6+viI3N1f2MkRUFo80EZHJjRw5EuPGjcOVK1eQn5+PAwcO4JtvvpHm3717FxqNRta6vLy8AAA///wzUlJSsHjxYly4cEGvJisrCxcuXICHhwccHR0xadIkvPTSS1AqlVJtZmYmgJKf/hcUFMDHx8egdd5r9OjR2LhxI1auXInnnntO9n6JiIjAqFGjcPToUSiVSrRq1Qo//vgjAKBRo0blLrNy5Uqo1Wq88MILsrczZMgQ/PDDD9i9ezdCQkJkL0dE9zF3aiOiqu/mzZvC1tZWREZGitmzZwtbW1u9IzzLli2TjrY86lGq9EjRwx7r168XQohH1gUEBBi8zlLvv/++ACC+/PJLo+yrl156STg4OIjMzMwy865duyasrKzE66+/btA6N2zYIACINWvWGKVHouqKR5qIyORq1qyJ559/HitWrEBeXh569+6t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iw1Nlm7atGnQaDTS4/Lly+ZuiYiIiEzIYkOTl5cXACA9PV1venp6ujTPy8sLN27c0JtfVFSEjIwMvZry1nHvNh5UUzq/PHZ2dlCpVHoPIiIiqrosNjT5+fnBy8sLMTEx0jStVou4uDgEBQUBAIKCgpCZmYmEhASpZvv27dDpdAgMDJRqdu/ejcLCQqkmOjoa/v7+cHV1lWru3U5pTel2iIiIiMwamrKzs5GUlISkpCQAJRd/JyUl4dKlS1AoFBg/fjw+/vhj/PHHHzh27BhGjhwJHx8fDBgwAADQpEkT9O7dG6NHj8bBgwexb98+REREYOjQofDx8QEAvPrqq1AqlQgPD0dycjLWrFmDBQsWYMKECVIf48aNw9atWzFv3jycOnUKs2bNwqFDhxAREfGkdwkRERFZqifwa74H2rFjhwBQ5hEWFiaEKLntwAcffCA8PT2FnZ2d6NGjh0hJSdFbx+3bt8WwYcOEs7OzUKlUYtSoUSIrK0uv5siRI+LZZ58VdnZ2onbt2mLu3Lllevntt99Eo0aNhFKpFM2aNRObNm0y6LXwlgNERESVjyHf3wohhDBjZqsytFot1Go1NBoNr28iIiKqJAz5/rbYa5qIiIiILAlDExEREZEMDE1EREREMjA0EREREcnA0EREREQkA0MTERERkQwMTUREREQyMDQRERERycDQRERERCQDQxMRERGRDAxNRERERDIwNBERERHJwNBEREREJANDExEREZEMDE1EREREMjA0EREREcnA0EREREQkA0MTERERkQwMTUREREQyMDQRERERycDQRERERCQDQxMRERGRDAxNRERERDIwNBERERHJwNBEREREJANDExEREZEMDE1EREREMlQoNO3ZswfDhw9HUFAQrl69CgD45ZdfsHfvXqM2R0RERGQpDA5NUVFRCAkJgYODAw4fPoz8/HwAgEajwaeffmr0BomIiIgsgcGh6eOPP8aiRYvwww8/wNbWVpr+zDPPIDEx0ajNEREREVkKg0NTSkoKunTpUma6Wq1GZmamMXoiIiIisjgGhyYvLy+cPXu2zPS9e/fiqaeeMkpTRERERJbG4NA0evRojBs3DnFxcVAoFLh27RpWrlyJ999/H2PGjDFFj0RERERmZ2PoAlOnToVOp0OPHj2Qm5uLLl26wM7ODu+//z7eeecdU/RIREREZHYKIYSo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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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CmtrazFo0CCRnJysNubMmTPi9ddfFyYmJqJy5cpixowZBWrZtGmTqF27tpDL5aJBgwZi165dWm0LbzlARETa4C0HSgdtfn/LhBBCj5mt3FAqlVAoFEhKSuL1TURE9FJpWTmoP3kPAODC134wlxvpuaKKSZvf36X2miYiIiKi0oShiYiIiEgDDE1EREREGmBoIiIiItIAQxMRERGRBhiaiIiIiDTA0ERERESkAYYmIiIiIg0wNBERERFpgKGJiIiISAMMTUREREQaYGgiIiIi0gBDExEREZEGGJqIiIiINMDQRERERKQBhiYiIiIiDTA0EREREWmAoYmIiIhIAwxNRERERBpgaCIiIiLSAEMTERERkQYYmoiIiIg0wNBEREREpAGGJiIiIiINMDQRERERaYChiYiIiEgDDE1EREREGihSaPrnn3/Qv39/+Pj44O7duwCANWvW4MiRIzotjoiIiKi00Do0bdmyBX5+fjAzM8Pp06eRmZkJAEhKSsL333+v8wKJiIiISgOtQ9O3336LpUuX4ueff4axsbE0/bXXXkNkZKROiyMiIiIqLbQOTTExMWjbtm2B6QqFAomJibqoiYiIiKjU0To0OTs74+rVqwWmHzlyBNWrV9dJUURERESljdahaejQoRg5ciTCw8Mhk8lw7949rFu3Dl988QWGDx9eHDUSERER6Z2RtgtMmDABKpUKHTt2RFpaGtq2bQsTExN88cUX+PTTT4ujRiIiIiK90zo0yWQyfPnllxg7diyuXr2KlJQU1K9fH5aWlsVRHxEREVGpoHVoyieXy1G/fn1d1kJERERUamkUmnr27KnxCrdu3VrkYoiIiIhKK40uBFcoFNLD2toa+/btw6lTp6T5ERER2LdvHxQKRbEVSkRERKRPGh1pWrVqlfTz+PHj0adPHyxduhSGhoYAgNzcXHzyySewtrYuniqJiIiI9EzrWw6sXLkSX3zxhRSYAMDQ0BBjxozBypUrdVocERERUWmhdWjKycnBpUuXCky/dOkSVCqVTooiIiIiKm20/vbcoEGDEBgYiGvXrsHLywsAEB4ejhkzZmDQoEE6L5CIiIioNNA6NP3www9wdnbG7Nmzcf/+fQCAi4sLxo4di88//1znBRIREZVH2bn/nZ0RQuixEtKUTLzCv5RSqQQAXgCOvH2hUCiQlJTE/UFERC+kUgl8uuE0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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "time to jit: 0:00:49.569381\n", + "time to train: 0:04:07.341922\n" + ] + } + ], + "source": [ + "train_fn = functools.partial(\n", + " ppo.train, num_timesteps=30_000_000, num_evals=5, reward_scaling=0.1,\n", + " episode_length=1000, normalize_observations=True, action_repeat=1,\n", + " unroll_length=10, num_minibatches=32, num_updates_per_batch=8,\n", + " discounting=0.97, learning_rate=3e-4, entropy_cost=1e-3, num_envs=2048,\n", + " batch_size=1024, seed=0)\n", + "\n", + "\n", + "x_data = []\n", + "y_data = []\n", + "ydataerr = []\n", + "times = [datetime.now()]\n", + "\n", + "max_y, min_y = 13000, 0\n", + "def progress(num_steps, metrics):\n", + " times.append(datetime.now())\n", + " x_data.append(num_steps)\n", + " y_data.append(metrics['eval/episode_reward'])\n", + " ydataerr.append(metrics['eval/episode_reward_std'])\n", + "\n", + " plt.xlim([0, train_fn.keywords['num_timesteps'] * 1.25])\n", + " plt.ylim([min_y, max_y])\n", + "\n", + " plt.xlabel('# environment steps')\n", + " plt.ylabel('reward per episode')\n", + " plt.title(f'y={y_data[-1]:.3f}')\n", + "\n", + " plt.errorbar(\n", + " x_data, y_data, yerr=ydataerr)\n", + " plt.show()\n", + "\n", + "make_inference_fn, params, _= train_fn(environment=env, progress_fn=progress)\n", + "\n", + "print(f'time to jit: {times[1] - times[0]}')\n", + "print(f'time to train: {times[-1] - times[1]}')" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [], + "source": [ + "model_path = '/tmp/mjx_brax_policy'\n", + "model.save_params(model_path, params)" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [], + "source": [ + "#@title Load Model and Define Inference Function\n", + "params = model.load_params(model_path)\n", + "\n", + "inference_fn = make_inference_fn(params)\n", + "jit_inference_fn = jax.jit(inference_fn)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Training With Domain Randomization" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [], + "source": [ + "def domain_randomize(sys, rng):\n", + " \"\"\"Randomizes the mjx.Model.\"\"\"\n", + " @jax.vmap\n", + " def rand(rng):\n", + " _, key = jax.random.split(rng, 2)\n", + " # friction\n", + " friction = jax.random.uniform(key, (1,), minval=0.6, maxval=1.4)\n", + " friction = sys.geom_friction.at[:, 0].set(friction)\n", + " # actuator\n", + " _, key = jax.random.split(key, 2)\n", + " gain_range = (-5, 5)\n", + " param = jax.random.uniform(\n", + " key, (1,), minval=gain_range[0], maxval=gain_range[1]\n", + " ) + sys.actuator_gainprm[:, 0]\n", + " gain = sys.actuator_gainprm.at[:, 0].set(param)\n", + " bias = sys.actuator_biasprm.at[:, 1].set(-param)\n", + " return friction, gain, bias\n", + "\n", + " friction, gain, bias = rand(rng)\n", + "\n", + " in_axes = jax.tree_util.tree_map(lambda x: None, sys)\n", + " in_axes = in_axes.tree_replace({\n", + " 'geom_friction': 0,\n", + " 'actuator_gainprm': 0,\n", + " 'actuator_biasprm': 0,\n", + " })\n", + "\n", + " sys = sys.tree_replace({\n", + " 'geom_friction': friction,\n", + " 'actuator_gainprm': gain,\n", + " 'actuator_biasprm': bias,\n", + " })\n", + "\n", + " return sys, in_axes" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Single env friction shape: (20, 3)\n", + "Batched env friction shape: (10, 20, 3)\n", + "Friction on geom 0: 1.0\n", + "Random frictions on geom 0: [0.884 0.923 0.776 1.339 1.3 0.648 0.754 1.288 0.731 0.978]\n" + ] + } + ], + "source": [ + "rng = jax.random.PRNGKey(0)\n", + "rng = jax.random.split(rng, 10)\n", + "batched_sys, _ = domain_randomize(env.sys, rng)\n", + "\n", + "print('Single env friction shape: ', env.sys.geom_friction.shape)\n", + "print('Batched env friction shape: ', batched_sys.geom_friction.shape)\n", + "\n", + "print('Friction on geom 0: ', env.sys.geom_friction[0, 0])\n", + "print('Random frictions on geom 0: ', batched_sys.geom_friction[:, 0, 0])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "kscale-sim-library", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.19" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/sim/mjx_gym/weights/ default_humanoid_walk.pkl b/sim/mjx_gym/weights/ default_humanoid_walk.pkl new file mode 100644 index 0000000000000000000000000000000000000000..0e824b8f65214dd75961e0757b1d98ffb247f4b8 GIT binary patch literal 66478 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 literal 0 HcmV?d00001 From d71aa52304dbdd51911854978de5ed44a2c7ce3b Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Wed, 22 May 2024 15:33:58 -0700 Subject: [PATCH 08/17] feat: printing when rendering --- sim/mjx_gym/play.py | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/sim/mjx_gym/play.py b/sim/mjx_gym/play.py index b67b4591..61365659 100644 --- a/sim/mjx_gym/play.py +++ b/sim/mjx_gym/play.py @@ -5,11 +5,14 @@ from brax.io import model from brax.training.agents.ppo import networks as ppo_networks import mediapy as media +import numpy as np +from tqdm import tqdm import jax # Parse command-line arguments parser = argparse.ArgumentParser(description='Run PPO training with specified config file.') parser.add_argument('--config', type=str, required=True, help='Path to the config YAML file') +parser.add_argument('--use_mujoco', type=bool, default=False, help='Use mujoco instead of mjx for rendering') args = parser.parse_args() # Load config from YAML file @@ -43,6 +46,7 @@ exclude_current_positions_from_observation=exclude_current_positions_from_observation, log_reward_breakdown=log_reward_breakdown ) +print(f'Loaded environment with env.observation_size: {env.observation_size} and env.action_size: {env.action_size}') # Loading params model_path = "weights/" + config.get('project_name', '') + ".pkl" @@ -52,6 +56,7 @@ jit_inference_fn = jax.jit(inference_fn) jit_reset = jax.jit(env.reset) jit_step = jax.jit(env.step) +print(f'Loaded params from {model_path}') # initialize the state rng = jax.random.PRNGKey(0) @@ -59,16 +64,33 @@ rollout = [state.pipeline_state] # grab a trajectory -n_steps = 100 +n_steps = 1000 render_every = 2 -for i in range(n_steps): +for i in tqdm(range(n_steps)): act_rng, rng = jax.random.split(rng) ctrl, _ = jit_inference_fn(state.obs, act_rng) state = jit_step(state, ctrl) rollout.append(state.pipeline_state) - if state.done: - break +print(f'Rolled out {len(rollout)} steps') -media.show_video(env.render(rollout[::render_every], camera='side'), fps=1.0 / env.dt / render_every) \ No newline at end of file +images = env.render(rollout[::render_every], camera='side') +print(f'Generated {len(images)} images') +try: + print(images[0].shape) +except: + print(images[0].size) + +images_thwc = np.array(images) +images_tchw = np.transpose(images_thwc, (0, 3, 1, 2)) + +try: + print(images_tchw.shape) +except: + print(images_tchw.size) + +fps = 1/env.dt +wandb.log({'training_rollouts': wandb.Video(images_tchw, fps=fps, format="mp4")}) + +media.write_video('video.mp4', images_thwc, fps=fps) \ No newline at end of file From b9e00fbae9cabd824b6593d4d9f0fd17aebc9e07 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Wed, 22 May 2024 22:40:01 +0000 Subject: [PATCH 09/17] feat: removed unnecessary model checkpointing --- sim/mjx_gym/train.py | 5 +---- .../weights/ default_humanoid_walk.pkl | Bin 66478 -> 66478 bytes 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/sim/mjx_gym/train.py b/sim/mjx_gym/train.py index 2264a170..a107f1cd 100644 --- a/sim/mjx_gym/train.py +++ b/sim/mjx_gym/train.py @@ -89,7 +89,4 @@ def save_model(current_step, make_policy, params): make_inference_fn, params, _ = train_fn(environment=env, progress_fn=progress, policy_params_fn=save_model) print(f'time to jit: {times[1] - times[0]}') -print(f'time to train: {times[-1] - times[1]}') - -model_path = config.get('project_name', 'model') + ".pkl" -model.save_params(model_path, params) \ No newline at end of file +print(f'time to train: {times[-1] - times[1]}') \ No newline at end of file diff --git a/sim/mjx_gym/weights/ default_humanoid_walk.pkl b/sim/mjx_gym/weights/ default_humanoid_walk.pkl index 0e824b8f65214dd75961e0757b1d98ffb247f4b8..c081b5f69863c5d9779fe7649d696e3f140b9a07 100644 GIT binary patch literal 66478 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

9F8+q;ar@~Ic*|5Xq&jO8@+ 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 ayP_@sQ!`CvWzhfi`tRVQzypyf>i+{T2h-;O literal 66478 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 From 12d3f8b4fd1668b2e56e56cf40378f2bd3bbae72 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Wed, 22 May 2024 18:05:39 -0700 Subject: [PATCH 10/17] chore: cleaned up play script and added CPU-only rendering --- .../default_humanoid_env/default_humanoid.py | 12 +-- .../envs/default_humanoid_env/rewards.py | 1 + sim/mjx_gym/play.py | 87 ++++++---------- sim/mjx_gym/utils/__init__.py | 0 sim/mjx_gym/utils/default.py | 5 + sim/mjx_gym/utils/rollouts.py | 95 ++++++++++++++++++ .../weights/ default_humanoid_walk.pkl | Bin 66478 -> 0 bytes sim/mjx_gym/weights/default_humanoid_walk.pkl | Bin 66478 -> 66478 bytes sim/requirements-dev.txt | 7 +- 9 files changed, 141 insertions(+), 66 deletions(-) create mode 100644 sim/mjx_gym/utils/__init__.py create mode 100644 sim/mjx_gym/utils/default.py create mode 100644 sim/mjx_gym/utils/rollouts.py delete mode 100644 sim/mjx_gym/weights/ default_humanoid_walk.pkl diff --git a/sim/mjx_gym/envs/default_humanoid_env/default_humanoid.py b/sim/mjx_gym/envs/default_humanoid_env/default_humanoid.py index b554acc3..4624792f 100644 --- a/sim/mjx_gym/envs/default_humanoid_env/default_humanoid.py +++ b/sim/mjx_gym/envs/default_humanoid_env/default_humanoid.py @@ -7,16 +7,16 @@ from mujoco import mjx from etils import epath from .rewards import get_reward_fn - -DEFAULT_REWARD_PARAMS = { - 'rew_forward': {'weight': 1.25}, - 'rew_healthy': {'weight': 5.0, 'healthy_z_lower': 1.0, 'healthy_z_upper': 2.0}, - 'rew_ctrl_cost': {'weight': 0.1} -} +from utils.default import DEFAULT_REWARD_PARAMS class DefaultHumanoidEnv(PipelineEnv): """ An environment for humanoid body position, velocities, and angles. + + Note: This environment is based on the default humanoid environment in the Brax library. + https://github.com/google/brax/blob/main/brax/envs/humanoid.py + + However, this environment is designed to work with modular reward functions, allowing for quicker experimentation. """ def __init__( self, diff --git a/sim/mjx_gym/envs/default_humanoid_env/rewards.py b/sim/mjx_gym/envs/default_humanoid_env/rewards.py index ccd5cd8f..8e462967 100644 --- a/sim/mjx_gym/envs/default_humanoid_env/rewards.py +++ b/sim/mjx_gym/envs/default_humanoid_env/rewards.py @@ -81,6 +81,7 @@ def ctrl_cost_reward_fn(state: mjxState, action: jp.ndarray, next_state: mjxStat return ctrl_cost, jp.array(1.) +# NOTE: After defining the reward functions, they must be added here to be used in the combined reward function. reward_functions = { 'rew_forward': forward_reward_fn, 'rew_healthy': healthy_reward_fn, diff --git a/sim/mjx_gym/play.py b/sim/mjx_gym/play.py index 61365659..1eb81c52 100644 --- a/sim/mjx_gym/play.py +++ b/sim/mjx_gym/play.py @@ -1,95 +1,66 @@ -import yaml import wandb +import yaml import argparse from envs import get_env from brax.io import model from brax.training.agents.ppo import networks as ppo_networks +from brax.training.acme import running_statistics import mediapy as media import numpy as np -from tqdm import tqdm -import jax +from utils.default import DEFAULT_REWARD_PARAMS +from utils.rollouts import render_mjx_rollout, render_mujoco_rollout # Parse command-line arguments parser = argparse.ArgumentParser(description='Run PPO training with specified config file.') parser.add_argument('--config', type=str, required=True, help='Path to the config YAML file') parser.add_argument('--use_mujoco', type=bool, default=False, help='Use mujoco instead of mjx for rendering') +parser.add_argument('--params_path', type=str, default=None, help='Path to the params file') args = parser.parse_args() -# Load config from YAML file +# Load config file with open(args.config, 'r') as file: config = yaml.safe_load(file) # Initialize wandb wandb.init(project=config.get('project_name', 'robotic_locomotion_training') + "_test", name=config.get('experiment_name', 'ppo-training') + "_test") -DEFAULT_REWARD_PARAMS = { - 'rew_forward': {'weight': 1.25}, - 'rew_healthy': {'weight': 5.0, 'healthy_z_lower': 1.0, 'healthy_z_upper': 2.0}, - 'rew_ctrl_cost': {'weight': 0.1} -} - -reward_params = config.get('reward_params', DEFAULT_REWARD_PARAMS) -terminate_when_unhealthy = config.get('terminate_when_unhealthy', True) -reset_noise_scale = config.get('reset_noise_scale', 1e-2) -exclude_current_positions_from_observation = config.get('exclude_current_positions_from_observation', True) -log_reward_breakdown = config.get('log_reward_breakdown', True) - -print(f'env_name: {config.get("env_name", "stompy")}') -print(f'reward_params: {reward_params}') -print(f'testing on {config["num_envs"]} environments') - +# Load environment env = get_env( name=config.get('env_name', 'stompy'), - reward_params=reward_params, - terminate_when_unhealthy=terminate_when_unhealthy, - reset_noise_scale=reset_noise_scale, - exclude_current_positions_from_observation=exclude_current_positions_from_observation, - log_reward_breakdown=log_reward_breakdown + reward_params=config.get('reward_params', DEFAULT_REWARD_PARAMS), + terminate_when_unhealthy=config.get('terminate_when_unhealthy', True), + reset_noise_scale=config.get('reset_noise_scale', 1e-2), + exclude_current_positions_from_observation=config.get('exclude_current_positions_from_observation', True), + log_reward_breakdown=config.get('log_reward_breakdown', True) ) -print(f'Loaded environment with env.observation_size: {env.observation_size} and env.action_size: {env.action_size}') +print(f'Loaded environment {config.get("env_name", "")} with env.observation_size: {env.observation_size} and env.action_size: {env.action_size}') # Loading params -model_path = "weights/" + config.get('project_name', '') + ".pkl" +if args.params_path is not None: + model_path = args.params_path +else: + model_path = "weights/" + config.get('project_name', 'model') + ".pkl" params = model.load_params(model_path) -policy_network = ppo_networks.make_ppo_networks(env.observation_size, env.action_size) +normalize = lambda x, y: x +if config.get('normalize_observations', False): + normalize = running_statistics.normalize +policy_network = ppo_networks.make_ppo_networks(env.observation_size, env.action_size, preprocess_observations_fn=normalize) inference_fn = ppo_networks.make_inference_fn(policy_network)(params) -jit_inference_fn = jax.jit(inference_fn) -jit_reset = jax.jit(env.reset) -jit_step = jax.jit(env.step) print(f'Loaded params from {model_path}') -# initialize the state -rng = jax.random.PRNGKey(0) -state = jit_reset(rng) -rollout = [state.pipeline_state] - -# grab a trajectory -n_steps = 1000 +# rolling out a trajectory render_every = 2 +n_steps = 1000 +if args.use_mujoco: + images = render_mujoco_rollout(env, inference_fn, n_steps, render_every) +else: + images = render_mjx_rollout(env, inference_fn, n_steps, render_every) +print(f'Rolled out {len(images)} steps') -for i in tqdm(range(n_steps)): - act_rng, rng = jax.random.split(rng) - ctrl, _ = jit_inference_fn(state.obs, act_rng) - state = jit_step(state, ctrl) - rollout.append(state.pipeline_state) - -print(f'Rolled out {len(rollout)} steps') - -images = env.render(rollout[::render_every], camera='side') -print(f'Generated {len(images)} images') -try: - print(images[0].shape) -except: - print(images[0].size) - +# render the trajectory images_thwc = np.array(images) images_tchw = np.transpose(images_thwc, (0, 3, 1, 2)) -try: - print(images_tchw.shape) -except: - print(images_tchw.size) - fps = 1/env.dt wandb.log({'training_rollouts': wandb.Video(images_tchw, fps=fps, format="mp4")}) diff --git a/sim/mjx_gym/utils/__init__.py b/sim/mjx_gym/utils/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/sim/mjx_gym/utils/default.py b/sim/mjx_gym/utils/default.py new file mode 100644 index 00000000..91d6e24d --- /dev/null +++ b/sim/mjx_gym/utils/default.py @@ -0,0 +1,5 @@ +DEFAULT_REWARD_PARAMS = { + 'rew_forward': {'weight': 1.25}, + 'rew_healthy': {'weight': 5.0, 'healthy_z_lower': 1.0, 'healthy_z_upper': 2.0}, + 'rew_ctrl_cost': {'weight': 0.1} +} \ No newline at end of file diff --git a/sim/mjx_gym/utils/rollouts.py b/sim/mjx_gym/utils/rollouts.py new file mode 100644 index 00000000..e07dcb96 --- /dev/null +++ b/sim/mjx_gym/utils/rollouts.py @@ -0,0 +1,95 @@ +import jax +from tqdm import tqdm +import mujoco +from mujoco import mjx +from typing import List +from brax.mjx.base import State as mjxState +import jax.numpy as jp +import numpy as np + +def mjx_rollout(env, inference_fn, n_steps=1000, render_every=2, seed=0) -> List[mjxState]: + """ + Rollout a trajectory using MJX + Args: + env: Brax environment + inference_fn: Inference function + n_steps: Number of steps to rollout + render_every: Render every nth step + seed: Random seed + Returns: + A list of pipeline states of the policy rollout + + It is worth noting that env, a Brax environment, is expected to implement MJX + in the background. See default_humanoid_env for reference. + """ + print(f'Rolling out {n_steps} steps with MJX') + reset_fn = jax.jit(env.reset) + step_fn = jax.jit(env.step) + inference_fn = jax.jit(inference_fn) + rng = jax.random.PRNGKey(seed) + + state = reset_fn(rng) + rollout = [state.pipeline_state] + for i in tqdm(range(n_steps)): + act_rng, rng = jax.random.split(rng) + ctrl, _ = inference_fn(state.obs, act_rng) + state = step_fn(state, ctrl) + rollout.append(state.pipeline_state) + + if state.done: + state = reset_fn(rng) + + return rollout + +def render_mjx_rollout(env, inference_fn, n_steps=1000, render_every=2, seed=0) -> np.ndarray: + """ + Rollout a trajectory using MuJoCo and render it + + Args: + env: Brax environment + inference_fn: Inference function + n_steps: Number of steps to rollout + render_every: Render every nth step + seed: Random seed + Returns: + A list of renderings of the policy rollout with dimensions (T, H, W, C) + """ + rollout = mjx_rollout(env, inference_fn, n_steps, render_every, seed) + images = env.render(rollout[::render_every], camera='side') + + return np.array(images) + +def render_mujoco_rollout(env, inference_fn, n_steps=1000, render_every=2, seed=0): + """ + Rollout a trajectory using MuJoCo + Args: + env: Brax environment + inference_fn: Inference function + n_steps: Number of steps to rollout + render_every: Render every nth step + seed: Random seed + Returns: + A list of images of the policy rollout (T, H, W, C) + """ + print(f'Rolling out {n_steps} steps with MuJoCo') + model = env.sys.mj_model + data = mujoco.MjData(model) + renderer = mujoco.Renderer(model) + ctrl = jp.zeros(model.nu) + + images = [] + rng = jax.random.PRNGKey(seed) + for step in tqdm(range(n_steps)): + act_rng, seed = jax.random.split(rng) + obs = env._get_obs(mjx.put_data(model, data), ctrl) + # TODO: implement methods in envs that avoid having to use mjx in a hacky way... + ctrl, _ = inference_fn(obs, act_rng) + data.ctrl = ctrl + for _ in range(env._n_frames): + mujoco.mj_step(model, data) + + if step % render_every == 0: + renderer.update_scene(data, camera='side') + images.append(renderer.render()) + + return images diff --git a/sim/mjx_gym/weights/ default_humanoid_walk.pkl b/sim/mjx_gym/weights/ default_humanoid_walk.pkl deleted file mode 100644 index c081b5f69863c5d9779fe7649d696e3f140b9a07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66478 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

9F8+q;ar@~Ic*|5Xq&jO8@+ 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 ayP_@sQ!`CvWzhfi`tRVQzypyf>i+{T2h-;O diff --git a/sim/mjx_gym/weights/default_humanoid_walk.pkl b/sim/mjx_gym/weights/default_humanoid_walk.pkl index 8d5d359bb687de933d435bee191a0abee403c53f..c081b5f69863c5d9779fe7649d696e3f140b9a07 100644 GIT binary patch literal 66478 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

9F8+q;ar@~Ic*|5Xq&jO8@+ z>3wcnLnbFTQW4*d-7k0*eo>P$fAjy)QBVAAg{ zS|D&J0~V=3Pook!rT>iHykJ2RuTCcwb<^lI@Avdn!vktDBOFHd+$49^_Ap1krsFV^ zOtjH6zrdbeC)^i0cP zmXn1aCj^;#m45eU!(Y}?t<)AW-j+h}@1v+Vq|1LgugAVN90yXuwERX^n@f{_O$H|% zVcUzF=--@iyk)x$xU}ZtM3WKxMuXG5S5`2ThEyI1_r(eJkUzYf=Oa=`yTU=uMpF|ifu z4N!Yv23r$h!dgrzq8iLi9I;-+q^jJog{0oGihx20Pk!+i3E}J(mlyrzzvHg!T zm=EoX_^NsZ{=D8vK54l?f#_e)mtXQ><7gW3RwMkyhs}Ia_6@L-v4Gc77^?TniFMH2IkdYSI z)ELH>+iiyz85L~PNqKffz9xTUrw4o0v>L{z+rxg}XjY}jpD$QcjT<(-=8U2h_@E2R zS;;egte>$r+g#j5M~+nCY3l;Ezx54wdA>OrzFd#3?<{6@_wB-wjV63*#7cg_tVA~R zt_RNa9?iN8a+qWj#||n>U~~2f*6U^vD0%7%Y2P6Xitd0lrf2z$U4-@?x8{@F{P`8W+ znjy6qdjm@DXhEm7Hq<|ifB{=YHgx$gw)$f_j;=2)TkrS}pY`nKHTQ+GSCpTDkBkek zFndIf9ui)0J-_YB6kaXMMo>)Sd8diF{Ke2E?6j3Xg;eloX8hQB zFnABxS+gTylWZt2-l@noglR(VwPIEyIE!9bvGmq)ROMuai@_U>U54h2D(k2DN^K>o|gi)?$TJHBtf#;)mm2?IP~C)%k%^-OI% zG$;lsS)XZTZZ7+Jco}M(lVoqGJb*Jl-1*V!3as%yJyuUH3O!2Z;h{Hqyq{$$z4%Uz zSzr4Xf?AH?@L!cU)iReo*r3Q~%>K=v+3UrgTNH->I>h+XCP{qNjY`ne4dNxa<^1Zy zL%8zK`?5plY}vb49bj(s=5w7G`PToeXg{fj$tbI>BpoxM4v%wH0{h2|qp{HAk@@&2a@eq_@`s@^I` zN*oFxCgeI!Fx$&7KCi~^k1@ybwZU-8sT6f|PO+Te%zEWy$WOdBjO{z6#urN16HPfy zcFE%beAL#6Z(MEInIm%q3PcQC)R1IPKh5SZjnHCuH?LwH=adt}MFLTvESeiwIh@zL zrpoV-yn!RO%;EQ{%wfOo$>0OlFJcX+dhw^+H^PbBCG_WWJ0`+l4gAzR14&<=|F(){k{n_#7CHZBpD(rr7+I(2ke=Dl7A(32Rn8Ia=~M_VPjVVy&@J( zd_wZ6;q8;`Sj8CDHA-j`J7~bZSysVbZ_(kM1B0QwtQ~G|5E{hZw!{9#$N7L(ecrR| zCv+tTk-*EYtilvMcFhJy*37X6N6IJjPyJ@F(N`XURzJh;6Via|5+bq5D2QG6?FU#M zwB^%6$FYYy2BCHM9_;gXhh;%Wu=AZUmh}kRMrVQOW}(hLm=ulXS}fZ>JPXdmO0v13 zYA{7Tl=rCiV=sS+V3Qy2WKSz6@oOz_!HN1stirKcSS&K(Pru6HBU`h%sRdiu<+3OE z6}y+Sl?9TdUugsH&KvV}fhE{^LW95jz>YuZe-oTfJ`)oBAtdB!Cn+GYZ1CZw?C)U#dvgG^jnYQxIv z7VwovJmABt1gzYx#hGR?TytDpRS2KPZK z6XEj|;Ag(O!l&3tv&pWptkmCcm^rkEEzXsr+A^c?mZad`Iy0MH|3RFOH7(@rJ_&@Q zCLjLXQxmpz?sc}Z@Dv~Ac9&h5aS?8`)C&!);b1xd?2icyJIZGkud6ki{c$S+jYq4n z^}CL-6UNMA1Ic3Ud%!;MH$Kg8dQwi;f0t$VyG`PizG$GBk`*6vESOL6DuYZu3?7Q7 zu(L<~V*Kat;77{sWH*TxGvX@gDDHe6M$a6@t|DH%!|(I_r^{QRD5%NH!X^gzI$)|2W)~|KqTZb@sT3FYau? zk6wv1czi49{1j(f-v2E7v~n09ak-3feAfdrUd!??=E$;#%CBJg!cnYgKq{|r*FaEs z2J!9Yx#ZrNI^4Z*9#3o*@)_4O*{k!{vQKx1v08F3`MQ~p;LRm<_O@p^t1*zz+FvQe zlGO)E#tSo)Etcbr%EH(sldafw>t*SSr-yO!tSP*XzC1fA@-VL>kW0GfxI*T?3^-O? z36qp}vlU0v(aPp9tLtLQ7m9PB`*tsVm#-=m21S63!7M&f%YMF9RJ;E7dy4?H-_72@y-omN<=RZ&+HB>$($#pyvf*$+bqVVtG<|L=b7fuS z#o3IPt9biEesEW>jh_3@mfvMNM`(jMi_6v@;Ws3F#?Nkf_;AzzYwWz^a*V^a-`+-| zrA0=PCR*3;tTaeNX&@t^VU$XtthBV1hIU#sG*ue+?@UIb5~7eqWQ#H~lJ|Pw_xa;_ zp7-;9-uM3J{`bB=_jO;t^E%Gs_#Vq~e~uW5T5^HRnCznRA1omL$qG8}<4cC}Nnp)Q zJ+S|Jl{S45hC){Hc|PMUXSuaB%6Kb*hH@+^T5g2~`Ml__9fOBU*8sKKPYtdY)6zc% zGeCU#QB1qDXldrEs;oF`m;wyUy zHqVHlNzYa3qSG&k?~G1nuY)n!|5*gD4C{cT^xW2R&k1^I*(tPh$e?{I0l4iRmDa;EMV&r$KA3EEY8;!1!=Dimv!VzvwOn zqitqLCyqe}}J{@RQ#8oEGXu}_A!wMTa^zRM@(@iXyHCF~+ zx2+@JQv4w|Wi<}%FJk(d18~oj6KwM+1_6H!l&>}fp?YViU{$u?W|6?N;0~R!o^_xb z&w)_k>CiM?pDgB5gMIrOF!NC;w0B5>NDXpkONrt0qN7+nrxv#yoI$s*w}ln*;@Gh{ z1_Eu{b)X-lLeKlEgJoz2MBbhYsS_SxSn9&D)SHXvc3HxZb_BGI8q{5<({><2Mc-ibB=Pf2&^MXb<%Ko%l9^WF%C zYT-P{3J=4hsUmoC&sv->z7+&YR>8q!esFDeW(n6OX#7DHbJ|16RliNRI?oV2%(y`= zYCiIRxJtaOQ&H;jT+$P>6OJn_LDArqWUiS7X*FeAqcj7+t6L8|bcCVg`W0rv${xf% z<>32k_ZcI(J&+oz3lUt)VUyWvgD_!u zgj$w|8$M4RrJc@0)UrL zO@sgR>HohK5Bs4H)I~}LC6}CoQ{Gx2w{bP5xR|1K+dMSfJr@c(XF$ub6ZmAJzJ+;E z1plP!=;Q(+aBz)+D;tf$VXY7Q{*Ssjej-bhG>Ntcz~#-3Hiq~dmm?b6JupdU9fk(!qUnKiR7g~mbJOw+ zb{z?zmP+zicszr?I+Bj+De}y6SxH>%Y6&65e>glIF*vZmvcpU7Oa~{>C74v%EdxcL4Ak%r20eW#XqCyQ zs(iV4yg3y6Y|=2>T^Hpv^x@*)lVqzyJXHJEH(DQ1N2Ua?k_WaF$(@Kb6AJijIe+zU^mj7zhjps6p3++hb& zhrDqjT@dF9i{jauWYmf8ra|kD)Aqyp^g-x$`0}L=YERDQEIwon1%p!b0QVjI?vja% zJ7mfA1u~$uwu=n-XJIMVn--r$HxlRnjUIAzp%O17AiaVYhmH9mBzTI*W~<;DuPk^h z^n_z18jVIZAIZtbl6dlI6k5nH1<^y%kfad^m8ZVqqB3rB_-i9*4OGxP*HL=I^D{nQ zb{?-=CQ+N8>GUwa7};v93R)F8)aBSE!#Sk^SQ>O2U60FS$SO5>K3s%5#X9Jfw%NEU zl0iG;OGq+K&>XLHa%HUnPKgJ=ro0ElbHPHKO3}vdg=cYokvA@iSVUJJj^M0FD#WJZ z(~R5uKpbq!N7;?(Epk`*z-Z+%^lEg2!SZFC5?*<{v%TDDhVOjn zDh+_9>$YGWV@>Uy60y$gG?r}Sg{UQeiHuGlEUVm)O}E3zbRG^>%RWPml67#YQ3sR+ z?54dR1mIVWH96|I1ncty-6=v=raM=N9w=%5w9RXXvr{YNs6Z-qL0F(-b zGs5qJ(B_^6O`mxf+U4!R>_#>b7xpuJIqNQct{e<`dJ$mpRviECbAZ|nClK?j=-;=~ zNL6+#_34QL4d+Yf@FEW;ou`xY;z8(rK>@Ubo5|}B6U^Nr5k|_jj#jl^!M|A}#OM4> z3~KR1t!gXG)H}_{^|0Kp#CK$X%?Cy$rogQ|p^%w)74_>QY3lEfoT!#8>SAyR>X@8a;o)toupJTh;dpCoN&swa#mq9BIis8mu53+We2Oae=!{0k(v1iB;7MsTt z-j7rClks*K(HFr{$1>pASq;_uqS)UmnKA9j!cOy-ZXfchM<-mpa7B2wfU%J3C zHitf6DcI=kfeX(jkWW9)qxeZ>yqd0uhn3z^Re6B22t^nxI)qZ(mpLgrPvZW*x5P2u z9477AOnA>N`YmM^_2OTS?*{-T>zhdX_eA3G)(Td?(1uf=`QZJW64D*X1H}mqWYjL( z;PkURR9x!}A0l$$7}s5tDJ-X9QXOQjP&H0@IKZt%Dj-{KiFU`$s7c*;}^_GU>cGEp*NJ81_3Cf&<4HB%|wSdoMTjn#+TsFHhnU;~eZ?AA*sa zUgDcu;_yU2fTVv|h3Y0T`bRE&I=KdQXG7UBOvg;lm=s=QE?FNa(59uMY17pNg z@k68n{#c?0{%j7?Fk2KnxR$_1Pf4uN|H26<+Q&)V+Cr0GAA+oFRfc!CzLU&!X}oab zBkA9HlQP>GP#2ws_70uYveTawojwP_uA87JX@Kp(^@p@W!x%o#fF{Ux66r6OS~@R! zlV-I)B&VB!Sq%$eR)!6p^@^ur5$rTKHxb42_(1IpH*(!8CYG$X!lI%C+y-3X&ZDzX zY?**R%S}*hzz?pPyTGQZc4qa#7i79Vz^%dwDwWfSrb$~#*1I#ra~50aU=xalS^kh` zXo>dK<(%3+F>+_%8r^4h7IHsrL&3`PWdF-K?9(MB`?~WnFHHag$GSnx*9daQxo~;! z6#nfQA$(sipc8)#X{>llF7JJW&)ys$6XU9!9knOn49jiIwf{scH^*^&Z7SeUY!x;{ z=A+ofIjudOx^&-XO_W~2gGFyAh?adU4*G>+54-nX_{NRs*gOU^p<+yNnr<}jYbZUg z{F^?Fm7?5o&oH?$htbb&#i-mJV3KwQ9UBi~Pj5f*|8@|Et;*o&tyoMxD}$E~%iy_} zlc*hzEPJmXzq!W(@7=3NzE{vVBFh<6p4Ms&5=IKW_fYqhJaoOCjYS96;VMyEm?8I; zBkNx5O zQZFOW=~6v4Qi!1?+j>dt1x=_?Y-8>`=;0hRd`AEENZ`FAU#Q9XCen527GWu8j?h{EmXP*m@*r0qj%M2z!H@^5P;}6oiGLo{Q-{5Y*fw+lOgtj#Rjq%VNHJ}U zdB=l83g%#w$IciF$Ee5N`6#_h8Qv>Kqa>FBELkJ~Ue7h~N?$4PvCOcwAr^2g_y}FL zSpyrfpDC2qM&X6Q*u_&zuG-B238#gq%`$EE9fydjs3Ytx;6^v!5Hf5W3)gG?@x#_w zU@BawfshL0AaNR2?Ka>ndTb6M%DK>EKg9UwtVQtvY3O~>LOM#^!4nGM+@COzD)K^J z_4{lOK`kjRR>fz$VRMdHJ-9W2vYUK%8RG)025A1L%z{AiJj=OLIxX(v*}=ND0-fr57Wdq zkcWCJv73h%?F2HRZjkLd+th{2#MgpB*m>Z;;f0bj=D=@O*$sQL93Ag;(ER63Y)8N? zn4Vb-j+L>P*|Z;?d<+J@W_R$|X#js}hbh+_J5;C*kHiJWc)S!X;A#_hSN z|KA+EJarOGzZcV|rTc+vZXNi1lLVKM{zi~vl&dr{YmY7c{r|{L{v7+!I`NObZBEHdIsmv&~a{3vhV?&nm^2$ z64*%hwXa68Z6Ylf=2l?GpDQF*8X$JZeG)qQ484bfXb1A(M~)L-YzqPBd3rc%Esv5* z9l-6;eOljc$q7lA2kv@bajazl*tMi%y=f2a%FIFeeUAuNT@!BV4h9Zk*+*S_F*!ho z{QXx>KP}gS_8mvj-SrYN*u?JOeYx;&%r5dU_Y3{>;2ioMJWn3&5+IvBqmie74jwX} z4-%b)#JqYsJ~%ncu1mVkB?E= zZ>xak*DyIZJRd$83=l1DMaaHZ3}L@#pj3_Oc7Mom9?YWqlEcwFkPCaa_0W4FMHnUWiRD5p2Afx}=zROj)K0Jllo!SU zb14PVKfNMFuCr(>O3{w02JARm2>a>;z#nYz_v1lM179?d>>RpQJP_B|e5BjMLIJ<8 zgHJ*lsO7i^UW{$SRd?dx*!Xt%)hq>O`i`*3MhhJ-yd*NBYpcDvCF6qYh1HIKQ@>GjLvalpgtM$84V& zMqE7lAacS2&c%e0#gp;4#yK3;@s6XfYys?iDFUs$i8v$rB8GPG<0q8}hML7_E2Gn0gC$e_pS4a_3n^-!3@)#@d^1-akn;0ZQg=c*`5eU4h= zflvv$!eSe|II^IAPnAb@_~te&Gbs99GtN8phY~T zWbJmt|Ljot|5iL6=Y6CyuT)^RTNwQNnomT2rC`aS0{Y5pX6x`17nX)^ijR8B4BeZK z;FJB-#uG;3sYq*v*&niL-Eye4bfjhDw)pY!8RnO< zFxo25M&n_5)VvqYII+9H8A(4{EcTs)TW6Nw^-Cf+-KK^*Mg`E%U3{2n(he@kiwP0D z&XKV&#n1J(aBp%w_`LYT6s_Ek$L|-@MZLC=R(1~hN1oBkHzHvxW>F`;nao}kMoCN{aRNzPTf)ELIiB=dCD1!{7E|I#KWg|3t3N&0gi4}M`I|V zo*H^&=^J*^jlYh+=lNi^{~Ww-S`Td|gS4yfBF!BBigMq}vBH(23adhurr*KbQFUwCak($Dba!D?kCtJF3BU+ydhdB|%4W z2~Ait203loqw^5qEh}rkxLu{xpGMjSpy$3FyX>WZr$dZP>713hKf;F#7F9 zNcZf)(u5ee?OccJ^hZE*Yd4PbbmGOKdsI>A8z!4XLzLcG)O@8vH|ei{$-_TT`B)Y7 zi?4&xkDDPifmNY8BZydfE_q`u(ekS~4?FKH#z6fL5OokCUjox0e$oXt+**cx4NkDb zCLIsRKc|EIsjzW#8LBAG!|@FYvCM?CDdQ12yt0%&Qg?&y z@nQ^aSVu_t6P$iG8shjOV2@igQD|02iA^cg^*{zXnCRkl*8kCg;;jKWPYoxP!f?cN zobD^F=5Y9?L#8A}g`)}}Kc77{`8!D$M-WuTE&}(uB2p^fi6RH~z!z5SnteeYKVIyi ztK&sl3#v?sL&RVDG+7a5hzi2Lo*Ml5e02^=-NBtFD>e(nyrc|--HpRC3Bun^!|bdp(YV2OQc z?l81#I|?OKeqFbMp z(}yd{2*Z+Zj;<;L-q63`ZPy1XmhH^L%0lL^UmU0%-veuT8c0&_b2>+C8t9rbke_D& zdmfyl{X2Uw>8&PSyty9orRPwe%a!P%$Dsw|*6_D4lO&6rXAjL8XeP7=XIJ>qA`fxc zbyO78yKcbav!_sFdn(-)bAcSqy^aqHe2D0mKQtru00=GzD3#Dd?w|zNeKiox>O1Mb z&`q4CipNxaSvs}Ml_9sQ{*X5gm&grcAJq30gN&YRQrkHf%RDc`8pi;9v-%PB_0-0Z zFA-EL=`?42dKL<*c4Mv$OTy;O#tp%a^uYEMjQ`vVTbF((D(csm=rm793Kq8>$Vc((Xn3=vLkW&Sj0em^jCUS-WUv>rI15#&mu@@*3L# zN2?WzUd%%+*CMLNs>gerdMUG)8ybQGNRL7au2{VrH=a!c$1;CVy&DAS3PE(I)-L?G zEC*2_ATO`s19dh%*)JzLc?bao8IFTSPRfwV|D?sKuWg4zop{4c~ z_;-(we7T!S-%l#RZgLZ|y6@7UtUR>ZVT2zhYdGKJ3s7^xS2o$zNq$St#fZN==phnpe@1ycUZ3N*NKj1-CI89KAL z@bK@!;4qSdds5F}onj>k%d~=PTXJydP99til7}?Y0ktMf=*t7fkoCn2 zt6Da~w2WEs@lzd!svvD^@gar_<(Shi-9TmbIJvQ79|{akqmGg>C|1GJ!o8NG%!)YJ zKk%FNCHTY1KRd8twI~Rf4bsD}RlrJ5gPDJ1Ho0!oN5=-6h(>7z^4)GC!VRo?~*n-@pX_`n(N})K0ipja~O68so=#(8LTr1g9AIoIkj%zN$vy}YL%~q z2f_OI`tlZ*MEI0Q*hbT&%olX)TrUupy@Mr3#TYz1NapHAveyp}-oGt`FO2J2PH1h! zdwJ5>o;eSu_c@R}CId1%)Uj-}3+6q@#=BfcVOdoI>aO8ORk?+*xrPsu$8IsVMP-p+ zQj`ATRlxXGSs01xZT?%on~Z`GaPAi1s)xJKOi2z!bHgZKrXSvFWt*4w3E?^6P<*hn z2s)k{!8!>|;Je#M580~19w`&x{$__OmzXjecvix@oyjm=%>sHRBhc?e0EoZMgM(A< zu&8=57;$mIvNTN^rNG7d(Olu&rLAC^evMd2M?#&QHYzusM=K_ZjBGBXhOUjo_R&R% z3v$Cc!+k{m?@6et<09pf`5?8%h!}Y%F*Zk751i>j_+|AEtDKZEt|Ec6w=n~Yn?kWd z>nt?i+eQtdDF$05P@&3ez&&AUw?%PF!ff#C0P0FF6K<6kpT&18sP= zT@%|^T)?@Zi7<6{4lE<3@N<|8a`t+Fn-f2dT(!jZ(*}gOm&@c;iGuxEQEGnqF6A~o z3yV+Wz?#%Nyw+a}gYsc$$(>C$mBoR-P7Arf?zcy)x8Xr4Qxx=6Aa`w}@kdBJ;kG>n zZ?0$4elKS_@}!0(Mow!ToTY`oMm=cBtWYeN;Q=PYx@2-N8d`N#V1Zc+tmm8nkD&Ri z=K(-j&4^B4_?J=nyAWot-->PD1fk_g6U@8kO_yp(!;Tfs@G9~#&D1rg?uHj&S+zcr zh-8w+pGelpm6Gd2OQEUo4%*M`1>^7c@xq@$divaJqJHfc2}&xY25e&aimfVYPMN@X zi7@Vdnn}{6t8gSeo>d(<^dz4bD6Pyx7g;YlbB8aQMMNM+v>KF;Yydf;NG}$i;-o#Q zAPYePc&db9(MI`}+3pU|KCPX;6!V0aA-oXz#T;Huu-ByBH&k>!f^I*#;oe*=!+S+_ zxT2|msIq%~Q8SFXox`&fG!HZYbBfxO#WXl>c6+El79qs*M;QCN1zF6;%Ss4pkzkQnr zvjS&B>Z1j4*t55VlTioj1Fj)Qv7P)|s6%^0ev<3fC&6DOo@1O{42hFdL~tfIz0jEe zYgcDc8}~geieLA`V-8^Q^d|D+!6%}z^)#8ic7zF+sURoH!$4xAF8J)ur>Sg<)A9=u z=-@qsYqM>jIWQ2uO30$|f)TW=X4A)kzaX-_5tH^DN2{n?bf4EgI463JzBvTyRQU-!kNz2VF{0=n)qP3xXD7 zCy!uj!`oNX?8sS2bbdfPy%mVjtw^dP<%B;E`oLt%Aeiu^(OLDKhCT;WNxnxMj8=}2 zi#8W&!Ath@txW?9oVKSMJ{?}d9GWV}Tl?m< z1{5mNJN?4gRp3&y>DmLx?dp6Er|wtRb#fT;P|`E%+AZ3=#21k;_aQo`1Ii_XK@dZeB*NtHm-a55yAgmJ-|; z!=TB!^)SDnhUkz6lC`D^`7foz_Ki|-?|C9LdhCK_R!YR(O##+-yeDVph~Q_Vo)&-c zc#!YtrPq?zgYP$ISakddSUqd)9bN+U><~qH)2cgN|f5h`d5>x z*{1JTbQ*sGQ_~*;)$6>7$#)Je3i^Ok*}PDziDqjbDdd?8t0I@ti5xZNW3ej*)c~AVvaaRI<{F}U;Vbd09As>) zx`{B=At!!(B!9*Z8;<0NL&A1pFrQ4L#$AsY-_b*uY*vYQ`!c?(E5hwt~Si?M{l`X<;=cfd3G4;jBDVTrD3?@yA*CXa~b`%Y+xC%Y52{o z;6H!M|8TPWU(zqC|B-%~!^LIZV1{K$Tfs~H9=v$2ZZz^*9aojUKug-g7|*{=&XpF! zr!#fH_+>wQzE4#_yCu>kN4S)iTK{B#_FPi-;Cnwk`$vP(s$Cn-fVJ{H~DitSNgMrwk zBoJr&LMqnc3~@*Gz+lUH5E4H~KJ9%=9zIrSv8iXsQu}Wx$SY_xI^kkC*7gQ3O?ymG z`Z)fcrUZ=E7{2M;Lq&&ALtbGW=y?v|NOvK`uDDAKw>Uu3@N9VcViheswFOdGhStR? zbEb1cJGpBe1urIaalB)#QPqgg!j3JI!oX zls2kUGlj*+UcmeFYDWE~DZUFVD4(|ftfOjptxx#`iI@7cJ9*DmOq8^Hvc8_ zQx0;r{N9WtWPtWx;h@wLwr}m?0^)op24*|AQ135K$$9nd39iIx-tO zlaukZWgRJa^O7pOtR$)Lhe@hyG}WxDghpKtaILBZzXGLJZQX=sHJg9*rQHP@ecsY& zmER&ps7L_ig>rG^p)&d}t7J-kG{LMLf*5x87t2M}X4%S?u=n6esz38Oj#h6Z`U1+J zsSrR4@~q+dhNqge^@*`zC#%@X>kH*KS;6N?3 zN#v39>OYA^XAHFuSxX-{*+b`YGw5bCInXdjPG!fTiU7aSMB7fh8X65Nzs8efXCb3R zIb{%Gl;O9lEM(8%NBs%~$Xo7;IU=v=s>Vme%nI<#tP$!X69CF$*;M0;HRdhV#IbrU z_>*^%Lo_zhfae)hpaJN(gh~d_5OLXsa;Y3>ZP(O)i6nmSD z@@pHYsz3;Swm6H67w*QERWW#zWo^`7OhSRHhltR!&$Rw$AOx>yr%S)|lf#yxuu@ta zYRmi}zT+^~6gki)Jc$}Dg=A_I18-(~6NRi*I2lsT5p-FFZW1$b-t$YyJ}_a1Nf#Dv zRmQZwYk1OnJDync3j4|vQ0ZbBo_lMKHy<9xh=6eHE(*sZ-goI~;d+d{dl4VDXk%(a zG#c&*rXvnj$mN`Z&#rA}(_T@W(V;fnzsnVC9`Rz>-(lolz8!p*5tOgtYTbD37m4gu z0^l}kvDV3k(lJT8sVTT6@|-D_?Tx~NpGRBTG`A3QQEx0avBI1)?5=$KI2Ge-Mr)r` zy!Cqp*>flhSB@0ohZECjsKsm4@F+sTqg8mNs0Me7KBZ3f=Qvh24)|T}8ddonje(6R zIJNIn%e>Nm%;p|G)F`loJzGvejN1Yufeq=0Db;~peVG=Xxlb+QsHg_ zt5ji#9Vq||iG+cGaoG9wG1`i|;`;(0{PeL8gWdc9{p(=v5L?~TT10dgxZ#vm1-Y58 z0RxrpUj(S~AP*BHiu~g`Lsqs3amwDzCPXpM5SU zqPi6IkIJI5mjD!>N^aR-_Lv@bu>#lRxtM7F4C0q?VW(>kF8#9s6C%cF|5Z(p9M#1$ z-cK>YdS2_Iw?&MW)M?O}=7cZj+%lYLD}mpluM2w_%9m1y6XXtY#!afG9b(c7ov!#6OG=po;IC(%J`~E zpvgh5R_(cKaPR9jJXoiTUzb0`x!(%#0gnsLGTDn&W{EW0T^6}{qp_Mx7k^AC!Ka`{ zEYo!s^XU9y;}de^a3)%Ggt6DIC)vCp4Ha|xK+NVhd2{Ch z=jvS%On?8F(Xv|tLvP!t;dXaWkSHY5OE+U#2irAjs{*la66rc+BP@Dy0oQx-a~fj# zIaia~$*lF}prIa!2YNa|tlw)%_|7v_yDJoz)Y+n8;|<#8`N&Y4jo&#(&&1nZ zlQd{L7jm^Z;?swzWVQKMuv1M1xqJ@3i(d~$2`%_tSBfmJb%QTb^FaOt>o3~gK$P_? z@q@-_vxkT{9SWFc^vcK>eJ%Eo%NDA1ZGtMvUj2+byvpFp^k`W2VujB>kD$%ba_*f;@TS18=f&K)ZYc z^eZ&O4COy?eVzzC1HGcbHX$aF8n=26nmv|DP;~6(46Ds^5{< z{54c1u$Hs>?l+hjeVER9R7d5%k+EnwxoItvKW;(HPZG`*I>pAxpuq?7?Mo^V;lWa8R!5v$! zF?FY3l6l-gWbuXwoPM^AgsZtegig@&l zfRRyd5)9iQoJ^5myOiEDRnMGJ);g(q@6DCqe|$4+zunn#=(RBBtWU!l)8+Wp+YS%x zV$a8YNoZ=}jc-dep4lBM=ng;@WsI!CQ7mlUiqhYdN|w6Sjk=j@ySvSHdzlCn^bh&Nv+9tx2l zE?`ZDKe~XMSSs}M$C1Ai3nAat6a@d((O#ZUbN`3m(7^u{^Cu z4lRJEgFIkkuLL~*BvB?c1gub;IxjGWh;4IQ(lblQ4tW)n%a?9Bs5^+KFU{lhmVH3W z*KoRq1YzUp+n)-PFZR%oiN1AY}-t7H&u5dakg$AH^ z_%6Kj{0Uu`v6PO_&8J=Wis4p5KU!QiAm?7}rDD@(0Qcpq)Okw6$eFNA)Sg;AQE(LV zew)FOlwN}tmE9QkgBz}m+$a9Nsx2ipl^n}c;kd6RjTW??Ar?-RBr*Rju97@Mc4#%w zfTRxm>2#V2-CTm=a`~uLc#eMIEyjNJa1wXAkXXt^qjZ29)2U!U%spLM4)-^v(~OTPC$FUSF-q;Gy3;T&*g)+v@ zctlRcIKxFwBML1q!~Ubj$akxT+^Rdt;gxzz>)V!)q)1)#oWW`7`@0`Y=o#9}dQTp) z{?40S*+}>3&^O&jaroF1d|#|gDi8Cv9^kr!3p|cvO7A0Ta?cxO?!=(hzA{7RKmeBi z(m)5k1%~HmI%B`zdffZL6L>!LV?@Uzd>0VSDSX{aN-xLJ!xf9!)J+E7_&7*%AKgKD zl}pG!>`M=P4Z^6kU+JRH)i7&84Y89wgHp5kaBBkFH^H7A-AP)+Q|LHn?IJrIsF9-~ z^E5bTuHJ3YTFwWFxdNz^Q%~Q$cf#(@d`9TkKC;4VI_`?H#o008ba>wdv_Ij4O=q%b zySpu}a&$u8X?2D-WL2Ql={vC6y+BnMDazsEljN`e)6xQ8kK*8iR z(OTICLHmcv=D*`?5_2CUPXwb%Sqco0Xe`v5Pa^7%k|nB7$i1vBBp^%>99M?J(m-W6 zF30xE{M-(s^+QDdjslD+&&LJ+f2oX53QnB=PHLZDM~c-TB+W;@b}t0`pLN)_^e=qg z`W2@idP7xLCeUS8=V+Ir6j~>_!gP-S$Ozd(Gke*dH1T;Tu}hKoW~I}j@j!Af>LADP zOFgE&pJ0mI6L4CSBQ9e-Z1E<-s1$OB20XlobKH{A$9f}%3O}M=^3r(wmmYZ@T8wXA zRMXL){G>c!)AcX5(P=Vn)FzG}ozjsuC!gem&({V?;}1+!bOuy@ z55%GB+Lm>j^}rZDQ{#jkF!WRr<~#4h?l0vWSNBYEmTN0MJFAX@MTMB#l#9^^!Z7u9 z9GZ)1A@8Pm3^#pBrTMz(Omk;EkmSOqxk^yEuNN>rheE@u4HDdZ^L-zly3!A2HFj~czn8y+mG^b-DHH!Mm8CY0JHm~EwMSfXW zvnvvt3y?kxmZsI&YzOqc6I6J-92MSHQjyFgbp2|J{tI^C4%2!vJung%*dIh2wJ7qw z;uYtWV-T@_{t&LDHRGD=Rw%pM8*e3k#sSfE6po1p0Z&zeaQmOb`nhYA2-f_cRO%L4o zCmp^9|6#n!?z7vdeyC=7cNcEju)b-2P(7E4*DALFSH~4dn^=nr*G#8jikU5k11UI~ zZN|prR20%&h3+B7=(*L$Fpp+8|FBJBN?U#!?wZctFCT3~tzvEz41CtCqGQb2))tK) zWHV4t4N>iW2sFK^L%mxb*kgJWS4e1}_c0k9xa*JokBf2Qm>i+Yf725MIz-O*1_^F| z-D0}>6ehELD67~q^yPm?^^(w+nK_o3ZVMD2`}4 zp?!0o;mz+csQ-8^m3Q61skwWEh@HO)0e>VhqpX+Y6tG^y;T^DlT^ZvRT}Y<6bitJM z893r~iFOBEC%oyQG>9vQ(=ka&(aLx-Ir<7R?|g!x#w&2{CO^!(6baSUg`jRy2j|yX zLyda`+b{l6k6b4q1ZLjk8v~C&}Jj%(JuSX^{Ld@_sTxo(Tcqc=!;VvpdK?en*H| zmcVRGW;Zq|{KS5E4PO2ugvt8ihQP8m^kehy+C{27NjUp@2)@&vDv^m9aTqqH? zIWMC5pZHMldp*_uF5Ig6>J8)ePM^m9lEl()iy%i!1+Kr-GO`ffNvp@!gX4BTlvVpl zBph?-M4%gvIaL$CLmGJ4`WrF4Ckvh5_JfY12aK#OCSQcv>)hlsdH-QCsqzcL`kfh^ zPXTFIw>k=4XFG$p3=b~JltayTZ(5Axj&ma0ywH3u`%IGbnd$ebz{j#Y_;*br^69JM ayP_@sQ!`CvWzhfi`tRVQzypyf>i+{T2h-;O literal 66478 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 Date: Wed, 22 May 2024 18:06:33 -0700 Subject: [PATCH 11/17] chore: removed brax replication --- sim/mjx_gym/tutorial_replication.ipynb | 716 ------------------------- 1 file changed, 716 deletions(-) delete mode 100644 sim/mjx_gym/tutorial_replication.ipynb diff --git a/sim/mjx_gym/tutorial_replication.ipynb b/sim/mjx_gym/tutorial_replication.ipynb deleted file mode 100644 index 5abff615..00000000 --- a/sim/mjx_gym/tutorial_replication.ipynb +++ /dev/null @@ -1,716 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Notes:\n", - "- Needs to run on python 3.9 ... might need to adjust the rest of the repo" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [], - "source": [ - "import time\n", - "import itertools\n", - "import numpy as np\n", - "from typing import Callable, NamedTuple, Optional, Union, List\n", - "\n", - "import mediapy as media\n", - "import matplotlib.pyplot as plt\n", - "\n", - "from datetime import datetime\n", - "import functools\n", - "from IPython.display import HTML\n", - "import jax\n", - "from jax import numpy as jp\n", - "import numpy as np\n", - "from typing import Any, Dict, Sequence, Tuple, Union\n", - "\n", - "from brax import base\n", - "from brax import envs\n", - "from brax import math\n", - "from brax.base import Base, Motion, Transform\n", - "from brax.envs.base import Env, PipelineEnv, State\n", - "from brax.mjx.base import State as MjxState\n", - "from brax.training.agents.ppo import train as ppo\n", - "from brax.training.agents.ppo import networks as ppo_networks\n", - "from brax.io import html, mjcf, model\n", - "\n", - "from etils import epath\n", - "from flax import struct\n", - "from matplotlib import pyplot as plt\n", - "import mediapy as media\n", - "from ml_collections import config_dict\n", - "import mujoco\n", - "from mujoco import mjx\n", - "\n", - "np.set_printoptions(precision=3, suppress=True, linewidth=100)\n", - "#%env MUJOCO_GL=egl" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [], - "source": [ - "device = jax.devices(\"gpu\")[1]" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [], - "source": [ - "xml = \"\"\"\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n", - "\"\"\"" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [], - "source": [ - "mj_model = mujoco.MjModel.from_xml_string(xml)\n", - "mj_data = mujoco.MjData(mj_model)" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [], - "source": [ - "mjx_model = mjx.put_model(mj_model, device)\n", - "mjx_data = mjx.put_data(mj_model, mj_data, device)" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[0.] \n", - "[0.] {cuda(id=1)}\n" - ] - } - ], - "source": [ - "print(mj_data.qpos, type(mj_data.qpos))\n", - "print(mjx_data.qpos, type(mjx_data.qpos), mjx_data.qpos.devices())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Note: skipping all things that involve rendering for now..." - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[[0.624]\n", - " [0.089]\n", - " [0.677]\n", - " ...\n", - " [0.031]\n", - " [0.211]\n", - " [0.808]]\n" - ] - } - ], - "source": [ - "rng = jax.random.PRNGKey(0)\n", - "rng = jax.random.split(rng, 4096)\n", - "batch = jax.vmap(lambda rng: mjx_data.replace(qpos=jax.random.uniform(rng, (1,))))(rng)\n", - "\n", - "jit_step = jax.jit(jax.vmap(mjx.step, in_axes=(None, 0)))\n", - "batch = jit_step(mjx_model, batch)\n", - "\n", - "print(batch.qpos)" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[array([0.624]), array([0.089]), array([0.677]), array([0.172]), array([0.045]), array([0.254]), array([0.879]), array([0.838]), array([0.073]), array([0.696]), array([0.768]), array([0.451]), array([0.592]), array([0.961]), array([0.747]), array([0.708]), array([0.955]), array([0.997]), array([0.73]), array([0.85]), array([0.308]), array([0.068]), array([0.812]), array([0.993]), array([0.106]), array([0.153]), array([0.418]), array([0.439]), array([0.915]), array([0.178]), array([0.55]), array([0.913]), array([0.288]), array([0.971]), array([0.735]), array([0.406]), array([0.076]), array([0.571]), array([0.543]), array([0.536]), array([0.658]), array([0.969]), array([0.329]), array([0.726]), array([0.48]), array([0.211]), array([0.782]), array([0.52]), array([0.707]), array([0.694]), array([0.43]), array([0.518]), array([0.566]), array([0.893]), array([0.38]), array([0.634]), array([0.303]), array([0.327]), array([0.441]), array([0.326]), array([0.37]), array([0.814]), array([0.822]), array([0.738]), array([0.166]), array([0.652]), array([0.939]), array([0.196]), array([0.838]), array([0.35]), array([0.23]), array([0.984]), array([0.636]), array([0.227]), array([0.068]), array([0.146]), array([0.225]), array([0.835]), array([0.1]), array([0.697]), array([0.861]), array([0.753]), array([0.832]), array([0.424]), array([0.475]), array([0.349]), array([0.286]), array([0.517]), array([0.463]), array([0.757]), array([0.608]), array([0.437]), array([0.442]), array([0.545]), array([0.835]), array([0.398]), array([0.191]), array([0.777]), array([0.117]), array([0.459]), array([0.393]), array([0.659]), array([0.497]), array([0.746]), array([0.496]), array([0.387]), array([0.819]), array([0.304]), array([0.803]), array([0.335]), array([0.473]), array([0.576]), array([0.67]), array([0.544]), array([0.085]), array([0.458]), array([0.121]), array([0.732]), array([0.471]), array([0.055]), array([0.172]), array([0.064]), array([0.714]), array([0.462]), array([0.231]), array([0.8]), array([0.471]), array([0.218]), array([0.806]), array([0.066]), array([0.312]), array([0.298]), array([0.862]), array([0.742]), array([0.232]), array([0.292]), array([0.804]), array([0.455]), array([0.896]), array([0.766]), array([0.8]), array([0.323]), array([0.62]), array([0.098]), array([0.623]), array([0.712]), array([0.244]), array([0.144]), array([0.508]), array([0.938]), array([0.55]), array([0.721]), array([0.425]), array([0.143]), array([0.375]), array([0.14]), array([0.695]), array([0.732]), array([0.724]), array([0.599]), array([0.184]), array([0.95]), array([0.402]), array([0.141]), array([0.662]), array([0.951]), array([0.704]), array([0.117]), array([0.014]), array([0.754]), array([0.725]), array([0.249]), array([0.14]), array([0.265]), array([0.974]), array([0.208]), array([0.074]), array([0.836]), array([0.254]), array([0.039]), array([0.877]), array([0.95]), array([0.545]), array([0.658]), array([0.579]), array([0.68]), array([0.006]), array([0.657]), array([0.889]), array([0.426]), array([0.184]), array([0.401]), array([0.522]), array([0.805]), array([0.626]), array([0.496]), array([0.046]), array([0.417]), array([0.4]), array([0.752]), array([0.352]), array([0.928]), array([0.162]), array([0.489]), array([0.225]), array([0.206]), array([0.903]), array([0.199]), array([0.125]), array([0.061]), array([0.927]), array([0.596]), array([0.252]), array([0.042]), array([0.709]), array([0.272]), array([0.223]), array([0.596]), array([0.621]), array([0.809]), array([0.917]), array([0.782]), array([0.353]), array([0.362]), array([0.224]), array([0.544]), array([0.699]), array([0.977]), array([0.237]), array([0.184]), array([0.651]), array([0.462]), array([0.584]), array([0.564]), array([0.99]), array([0.823]), array([0.752]), array([0.042]), array([0.839]), array([0.681]), array([0.916]), array([0.774]), array([0.39]), array([0.562]), array([0.989]), array([0.846]), array([0.62]), array([0.349]), array([0.601]), array([0.358]), array([0.884]), array([0.031]), array([0.879]), array([0.572]), array([0.269]), array([0.3]), array([0.737]), array([0.223]), array([0.425]), array([0.838]), array([0.648]), array([0.505]), array([0.294]), array([0.401]), array([0.151]), array([0.817]), array([0.595]), array([0.482]), array([0.522]), array([0.653]), array([0.474]), array([0.021]), array([0.954]), array([0.244]), array([0.742]), array([0.524]), array([0.478]), array([0.269]), array([0.251]), array([0.858]), array([0.674]), array([0.808]), array([0.746]), array([0.567]), array([0.926]), array([0.83]), array([0.87]), array([0.003]), array([0.264]), array([0.712]), array([0.052]), array([0.779]), array([0.459]), array([0.954]), array([0.286]), array([0.319]), array([0.364]), array([0.816]), array([0.697]), array([0.011]), array([0.212]), array([0.901]), array([0.195]), array([0.386]), array([0.219]), array([0.939]), array([0.677]), array([0.241]), array([0.643]), array([0.752]), array([0.013]), array([0.285]), array([0.469]), array([0.988]), array([0.907]), array([0.333]), array([0.515]), array([0.311]), array([0.491]), array([0.723]), array([0.768]), array([0.426]), array([0.155]), array([0.198]), array([0.216]), array([0.117]), array([0.763]), array([0.513]), array([0.869]), array([0.079]), array([0.63]), array([0.617]), array([0.776]), array([0.295]), array([0.871]), array([0.448]), array([0.404]), array([0.201]), array([0.165]), array([0.903]), array([0.664]), array([0.601]), array([0.118]), array([0.086]), array([0.608]), array([0.274]), array([0.559]), array([0.624]), array([0.844]), array([0.4]), array([0.172]), array([0.251]), array([0.485]), array([0.229]), array([0.259]), array([0.322]), array([0.338]), array([0.947]), array([0.332]), array([0.725]), array([0.122]), array([0.868]), array([0.388]), array([0.54]), array([0.495]), array([0.431]), array([0.439]), array([0.343]), array([0.25]), array([0.864]), array([0.96]), array([0.064]), array([0.401]), array([0.888]), array([0.961]), array([0.147]), array([0.231]), array([0.609]), array([0.395]), array([0.562]), array([0.947]), array([0.531]), array([0.403]), array([0.8]), array([0.801]), array([0.457]), array([0.62]), array([0.965]), array([0.622]), array([0.521]), array([0.563]), array([0.418]), array([0.48]), array([0.643]), array([0.774]), array([0.186]), array([0.714]), array([0.192]), array([0.837]), array([0.561]), array([0.029]), array([0.443]), array([0.831]), array([0.473]), array([0.659]), array([0.211]), array([0.908]), array([0.608]), array([0.227]), array([0.599]), array([0.032]), array([0.699]), array([0.814]), array([0.947]), array([0.741]), array([0.922]), array([0.973]), array([0.361]), array([0.542]), array([0.146]), array([0.53]), array([0.526]), array([0.108]), array([0.559]), array([0.235]), array([0.905]), array([0.665]), array([0.411]), array([0.305]), array([0.52]), array([0.203]), array([0.814]), array([0.189]), array([0.601]), array([0.393]), array([0.647]), array([0.03]), array([0.218]), array([0.313]), array([0.423]), array([0.851]), array([0.178]), array([0.255]), array([0.862]), array([0.225]), array([0.165]), array([0.76]), array([0.565]), array([0.618]), array([0.549]), array([0.764]), array([0.69]), array([0.525]), array([0.785]), array([0.179]), array([0.915]), array([0.202]), array([0.709]), array([0.057]), array([0.859]), array([0.418]), array([0.256]), array([0.304]), array([0.175]), array([0.663]), array([0.224]), array([0.74]), array([0.321]), array([0.183]), array([0.321]), array([0.155]), array([0.527]), array([0.783]), array([0.54]), array([0.625]), array([0.264]), array([0.308]), array([0.388]), array([0.929]), array([0.726]), array([0.225]), array([0.081]), array([0.804]), array([0.788]), array([0.099]), array([0.967]), array([0.218]), array([0.381]), array([0.168]), array([0.037]), array([0.855]), array([0.115]), array([0.032]), array([0.992]), array([0.692]), array([0.582]), array([0.635]), array([0.935]), array([0.603]), array([0.702]), array([0.634]), array([0.736]), array([0.374]), array([0.338]), array([0.397]), array([0.769]), array([0.848]), array([0.62]), array([0.627]), array([0.851]), array([0.317]), array([0.748]), array([0.366]), array([0.596]), array([0.673]), array([0.506]), array([0.069]), array([0.754]), array([0.628]), array([0.122]), array([0.611]), array([0.832]), array([0.017]), array([0.986]), array([0.897]), array([0.454]), array([0.426]), array([0.673]), array([0.92]), array([0.57]), array([0.475]), array([0.157]), array([0.461]), array([0.696]), array([0.777]), array([0.389]), array([0.575]), array([0.183]), array([0.548]), array([0.767]), array([0.716]), array([0.323]), array([0.576]), array([0.38]), array([0.925]), array([0.758]), array([0.778]), array([0.674]), array([0.569]), array([0.148]), array([0.309]), array([0.413]), array([0.415]), array([0.025]), array([0.872]), array([0.12]), array([0.553]), array([0.73]), array([0.709]), array([0.083]), array([0.76]), array([0.199]), array([0.068]), array([0.664]), array([0.608]), array([0.182]), array([0.695]), array([0.053]), array([0.079]), array([0.458]), array([0.223]), array([0.268]), array([0.444]), array([0.186]), array([0.263]), array([0.29]), array([0.25]), array([0.352]), array([0.572]), array([0.778]), array([0.123]), array([0.825]), array([0.046]), array([0.604]), array([0.091]), array([0.252]), array([0.321]), array([0.775]), array([0.134]), array([0.302]), array([0.847]), array([0.234]), array([0.893]), array([0.049]), array([0.569]), array([0.642]), array([0.098]), array([0.638]), array([0.174]), array([0.936]), array([0.291]), array([0.122]), array([0.017]), array([0.754]), array([0.58]), array([0.302]), array([0.611]), array([0.854]), array([0.425]), array([0.221]), array([0.492]), array([0.641]), array([0.789]), array([0.526]), array([0.176]), array([0.742]), array([0.753]), array([0.122]), array([0.284]), array([0.748]), array([0.551]), array([0.486]), array([0.611]), array([0.612]), array([0.138]), array([0.612]), array([0.663]), array([0.328]), array([0.431]), array([0.841]), array([0.781]), array([0.49]), array([0.542]), array([0.453]), array([0.693]), array([0.503]), array([0.206]), array([0.36]), array([0.274]), array([0.852]), array([0.645]), array([0.76]), array([0.558]), array([0.567]), array([0.108]), array([0.364]), array([0.22]), array([0.638]), array([0.279]), array([0.627]), array([0.923]), array([0.815]), array([0.297]), array([0.953]), array([0.797]), array([0.003]), array([0.122]), array([0.069]), array([0.673]), array([0.959]), array([0.114]), array([0.454]), array([0.646]), array([0.62]), array([0.861]), array([0.284]), array([0.352]), array([0.689]), array([0.077]), array([0.372]), array([0.827]), array([0.157]), array([0.94]), array([0.111]), array([0.057]), array([0.966]), array([0.561]), array([0.049]), array([0.511]), array([0.099]), array([0.341]), array([0.536]), array([0.194]), array([0.42]), array([0.016]), array([0.786]), array([0.022]), array([0.935]), array([0.339]), array([0.766]), array([0.794]), array([0.897]), array([0.607]), array([0.383]), array([0.567]), array([0.054]), array([0.566]), array([0.867]), array([0.389]), array([0.75]), array([0.565]), array([0.847]), array([0.985]), array([0.72]), array([0.319]), array([0.205]), array([0.075]), array([0.801]), array([0.83]), array([0.539]), array([0.835]), array([0.515]), array([0.584]), array([0.336]), array([0.775]), array([0.824]), array([0.617]), array([0.567]), array([0.275]), array([0.54]), array([0.527]), array([0.609]), array([0.187]), array([0.298]), array([0.273]), array([0.307]), array([0.638]), array([0.938]), array([0.49]), array([0.224]), array([0.401]), array([0.723]), array([0.631]), array([0.05]), array([0.681]), array([0.994]), array([0.309]), array([0.55]), array([0.401]), array([0.717]), array([0.139]), array([0.496]), array([0.191]), array([0.984]), array([0.541]), array([0.198]), array([0.144]), array([0.82]), array([0.296]), array([0.086]), array([0.282]), array([0.853]), array([0.4]), array([0.47]), array([0.753]), array([0.764]), array([0.513]), array([0.818]), array([0.081]), array([0.13]), array([0.204]), array([0.255]), array([0.241]), array([0.866]), array([0.963]), array([0.616]), array([0.767]), array([0.898]), array([0.67]), array([0.306]), array([0.611]), array([0.447]), array([0.162]), array([0.391]), array([0.395]), array([0.488]), array([0.914]), array([0.925]), array([0.046]), array([0.559]), array([0.33]), array([0.032]), array([0.846]), array([0.981]), array([0.443]), array([0.294]), array([0.174]), array([0.631]), array([0.157]), array([0.062]), array([0.013]), array([0.181]), array([0.812]), array([0.899]), array([0.422]), array([0.111]), array([0.72]), array([0.042]), array([0.404]), array([0.351]), array([0.779]), array([0.258]), array([0.985]), array([0.461]), array([0.278]), array([0.657]), array([0.43]), array([0.995]), array([0.351]), array([0.392]), array([0.061]), array([0.987]), array([0.726]), array([0.974]), array([0.012]), array([0.298]), array([0.24]), array([0.899]), array([0.188]), array([0.705]), array([0.809]), array([0.876]), array([0.471]), array([0.533]), array([0.701]), array([0.042]), array([0.327]), array([0.554]), array([0.557]), array([0.275]), array([0.177]), array([0.931]), array([0.418]), array([0.411]), array([0.403]), array([0.113]), array([0.426]), array([0.535]), array([0.004]), array([0.021]), array([0.327]), array([0.524]), array([0.83]), array([0.795]), array([0.13]), array([0.246]), array([0.546]), array([0.783]), array([0.08]), array([0.523]), array([0.593]), array([0.157]), array([0.762]), array([0.53]), array([0.419]), array([0.858]), array([0.239]), array([0.41]), array([0.408]), array([0.288]), array([0.281]), array([0.087]), array([0.232]), array([0.13]), array([0.422]), array([0.964]), array([0.176]), array([0.861]), array([0.251]), array([0.582]), array([0.206]), array([0.701]), array([0.794]), array([0.244]), array([0.211]), array([0.654]), array([0.075]), array([0.838]), array([0.367]), array([0.309]), array([0.064]), array([0.973]), array([0.998]), array([0.093]), array([0.466]), array([0.333]), array([0.238]), array([0.298]), array([0.427]), array([0.711]), array([0.349]), array([0.745]), array([0.722]), array([0.303]), array([0.918]), array([0.287]), array([0.914]), array([0.559]), array([0.987]), array([0.405]), array([0.439]), array([0.741]), array([0.157]), array([0.053]), array([0.773]), array([0.475]), array([0.758]), array([0.429]), array([0.576]), array([0.115]), array([0.391]), array([0.053]), array([0.196]), array([0.216]), array([0.212]), array([0.228]), array([0.912]), array([0.971]), array([0.811]), array([0.594]), array([0.912]), array([0.915]), array([0.718]), array([0.475]), array([0.932]), array([0.287]), array([0.913]), array([0.625]), array([0.263]), array([0.248]), array([0.056]), array([0.959]), array([0.566]), array([0.739]), array([0.256]), array([0.459]), array([0.123]), array([0.623]), array([0.818]), array([0.885]), array([0.848]), array([0.286]), array([0.341]), array([0.351]), array([0.447]), array([0.071]), array([0.506]), array([0.222]), array([0.388]), array([0.85]), array([0.941]), array([0.864]), array([0.483]), array([0.419]), array([0.502]), array([0.559]), array([0.865]), array([0.84]), array([0.434]), array([0.981]), array([0.523]), array([0.988]), array([0.865]), array([0.41]), array([0.089]), array([0.451]), array([0.253]), array([0.297]), array([0.48]), array([0.497]), array([0.957]), array([0.795]), array([0.563]), array([0.186]), array([0.057]), array([0.301]), array([0.372]), array([0.157]), array([0.552]), array([0.937]), array([0.084]), array([0.794]), array([0.475]), array([0.201]), array([0.394]), array([0.184]), array([0.713]), array([0.908]), array([0.136]), array([0.485]), array([0.989]), array([0.911]), array([0.809]), array([0.886]), array([0.104]), array([0.173]), array([0.649]), array([0.247]), array([0.029]), array([0.688]), array([0.572]), array([0.84]), array([0.711]), array([0.307]), array([0.986]), array([0.43]), array([0.288]), array([0.616]), array([0.438]), array([0.993]), array([0.762]), array([0.019]), array([0.335]), array([0.095]), array([0.167]), array([0.897]), array([0.047]), array([0.747]), array([0.992]), array([0.875]), array([0.401]), array([0.688]), array([0.393]), array([0.8]), array([0.316]), array([0.905]), array([0.407]), array([0.433]), array([0.145]), array([0.163]), array([0.915]), array([0.156]), array([0.42]), array([0.777]), array([0.902]), array([0.728]), array([0.395]), array([0.19]), array([0.039]), array([0.079]), array([0.517]), array([0.499]), array([0.407]), array([0.973]), array([0.517]), array([0.16]), array([0.004]), array([0.615]), array([0.518]), array([0.662]), array([0.581]), array([0.198]), array([0.409]), array([0.853]), array([0.178]), array([0.568]), array([0.275]), array([0.179]), array([0.638]), array([0.613]), array([0.36]), array([0.994]), array([0.774]), array([0.594]), array([0.687]), array([0.163]), array([0.131]), array([0.334]), array([0.825]), array([0.334]), array([0.819]), array([0.05]), array([0.518]), array([0.043]), array([0.556]), array([0.206]), array([0.498]), array([0.08]), array([0.605]), array([0.326]), array([0.894]), array([0.342]), array([0.333]), array([0.958]), array([0.701]), array([0.566]), array([0.411]), array([0.416]), array([0.715]), array([0.669]), array([0.307]), array([0.795]), array([0.871]), array([0.071]), array([0.735]), array([0.955]), array([0.201]), array([0.3]), array([0.229]), array([0.771]), array([0.372]), array([0.492]), array([0.41]), array([0.975]), array([0.025]), array([0.306]), array([0.666]), array([0.563]), array([0.907]), array([0.482]), array([0.569]), array([0.965]), array([0.979]), array([0.303]), array([0.668]), array([0.054]), array([0.088]), array([0.393]), array([0.573]), array([0.88]), array([0.38]), array([0.293]), array([0.718]), array([0.411]), array([0.068]), array([0.078]), array([0.615]), array([0.034]), array([0.089]), array([0.811]), array([0.281]), array([0.949]), array([0.131]), array([0.783]), array([0.874]), array([0.409]), array([0.473]), array([0.709]), array([0.399]), array([0.474]), array([0.966]), array([0.446]), array([0.424]), array([0.556]), array([0.844]), array([0.519]), array([0.788]), array([0.445]), array([0.944]), array([0.534]), array([0.04]), array([0.931]), array([0.338]), array([0.596]), array([0.296]), array([0.391]), array([0.457]), array([0.9]), array([0.808]), array([0.085]), array([0.076]), array([0.333]), array([0.344]), array([0.815]), array([0.878]), array([0.56]), array([0.208]), array([0.459]), array([0.472]), array([0.858]), array([0.553]), array([0.034]), array([0.738]), array([0.558]), array([0.096]), array([0.27]), array([0.737]), array([0.258]), array([0.372]), array([0.526]), array([0.01]), array([0.09]), array([0.467]), array([0.878]), array([0.557]), array([0.865]), array([0.674]), array([0.373]), array([0.225]), array([0.271]), array([0.79]), array([0.562]), array([0.932]), array([0.039]), array([0.016]), array([0.364]), array([0.488]), array([0.677]), array([0.234]), array([0.045]), array([0.315]), array([0.503]), array([0.546]), array([0.301]), array([0.561]), array([0.261]), array([0.614]), array([0.995]), array([0.328]), array([0.505]), array([0.009]), array([0.002]), array([0.022]), array([0.446]), array([0.924]), array([0.14]), array([0.551]), array([0.155]), array([0.669]), array([0.152]), array([0.981]), array([0.488]), array([0.373]), array([0.822]), array([0.719]), array([0.048]), array([0.607]), array([0.939]), array([0.441]), array([0.13]), array([0.756]), array([0.155]), array([0.759]), array([0.629]), array([0.041]), array([0.027]), array([0.793]), array([0.086]), array([0.095]), array([0.726]), array([0.566]), array([0.412]), array([0.258]), array([0.264]), array([0.293]), array([0.135]), array([0.317]), array([0.548]), array([0.332]), array([0.679]), array([0.496]), array([0.45]), array([0.91]), array([0.631]), array([0.826]), array([0.263]), array([0.414]), array([0.174]), array([0.638]), array([0.555]), array([0.553]), array([0.061]), array([0.971]), array([0.805]), array([0.851]), array([0.791]), array([0.768]), array([0.42]), array([0.007]), array([0.638]), array([0.294]), array([0.758]), array([0.219]), array([0.053]), array([0.076]), array([0.568]), array([0.58]), array([0.066]), array([0.799]), array([0.668]), array([0.336]), array([0.968]), array([0.515]), array([0.85]), array([0.254]), array([0.678]), array([0.413]), array([0.358]), array([0.656]), array([0.568]), array([0.193]), array([0.629]), array([0.904]), array([0.145]), array([0.65]), array([0.153]), array([0.356]), array([0.584]), array([0.644]), array([0.984]), array([0.49]), array([0.538]), array([0.568]), array([0.96]), array([0.956]), array([0.499]), array([0.117]), array([0.255]), array([0.341]), array([0.818]), array([0.389]), array([0.396]), array([0.982]), array([0.078]), array([0.539]), array([0.722]), array([0.457]), array([0.308]), array([0.112]), array([0.41]), array([0.242]), array([0.403]), array([0.447]), array([0.984]), array([0.471]), array([0.168]), array([0.401]), array([0.219]), array([0.62]), array([0.68]), array([0.367]), array([0.375]), array([0.818]), array([0.26]), array([0.736]), array([0.103]), array([0.963]), array([0.81]), array([0.269]), array([0.604]), array([0.125]), array([0.062]), array([0.883]), array([0.723]), array([0.244]), array([0.41]), array([0.036]), array([0.81]), array([0.956]), array([0.739]), array([0.235]), array([0.281]), array([0.238]), array([0.113]), array([0.267]), array([0.786]), array([0.513]), array([0.261]), array([0.091]), array([0.034]), array([0.278]), array([0.215]), array([0.555]), array([0.752]), array([0.53]), array([0.514]), array([0.893]), array([0.506]), array([0.076]), array([0.569]), array([0.966]), array([0.443]), array([0.716]), array([0.106]), array([0.665]), array([0.985]), array([0.993]), array([0.449]), array([0.87]), array([0.409]), array([0.484]), array([0.021]), array([0.543]), array([0.661]), array([0.207]), array([0.164]), array([0.277]), array([0.611]), array([0.797]), array([0.676]), array([0.514]), array([0.568]), array([0.591]), array([0.022]), array([0.986]), array([0.725]), array([0.804]), array([0.428]), array([0.254]), array([0.4]), array([0.696]), array([0.372]), array([0.769]), array([0.8]), array([0.269]), array([0.565]), array([0.552]), array([0.216]), array([0.699]), array([0.262]), array([0.33]), array([0.797]), array([0.697]), array([0.033]), array([0.556]), array([0.858]), array([0.875]), array([0.744]), array([0.912]), array([0.732]), array([0.816]), array([0.256]), array([0.071]), array([0.841]), array([0.094]), array([0.271]), array([0.53]), array([0.274]), array([0.566]), array([0.29]), array([0.536]), array([0.09]), array([0.451]), array([0.239]), array([0.171]), array([0.774]), array([0.133]), array([0.867]), array([0.494]), array([0.507]), array([0.277]), array([0.772]), array([0.178]), array([0.141]), array([0.198]), array([0.902]), array([0.959]), array([0.413]), array([0.001]), array([0.664]), array([0.905]), array([0.694]), array([0.827]), array([0.737]), array([0.056]), array([0.536]), array([0.711]), array([0.32]), array([0.448]), array([0.93]), array([0.635]), array([0.875]), array([0.904]), array([0.433]), array([0.969]), array([0.81]), array([0.297]), array([0.]), array([0.026]), array([0.842]), array([0.717]), array([0.221]), array([0.088]), array([0.672]), array([0.389]), array([0.101]), array([0.282]), array([0.107]), array([0.591]), array([0.885]), array([0.438]), array([0.239]), array([0.592]), array([0.567]), array([0.646]), array([0.678]), array([0.356]), array([0.478]), array([0.471]), array([0.924]), array([0.575]), array([0.422]), array([0.977]), array([0.837]), array([0.592]), array([0.142]), array([0.07]), array([0.744]), array([0.638]), array([0.985]), array([0.439]), array([0.413]), array([0.88]), array([0.187]), array([0.357]), array([0.377]), array([0.36]), array([0.966]), array([0.299]), array([0.132]), array([0.99]), array([0.638]), array([0.915]), array([0.088]), array([0.656]), array([0.806]), array([0.552]), array([0.861]), array([0.281]), array([0.292]), array([0.681]), array([0.804]), array([0.6]), array([0.204]), array([0.865]), array([0.154]), array([0.679]), array([0.712]), array([0.751]), array([0.907]), array([0.619]), array([0.975]), array([0.944]), array([0.403]), array([0.6]), array([0.925]), array([0.136]), array([0.321]), array([0.33]), array([0.698]), array([0.696]), array([0.105]), array([0.813]), array([0.98]), array([0.921]), array([0.211]), array([0.66]), array([0.412]), array([0.168]), array([0.562]), array([0.132]), array([0.283]), array([0.779]), array([0.859]), array([0.512]), array([0.068]), array([0.915]), array([0.042]), array([0.968]), array([0.022]), array([0.813]), array([0.898]), array([0.424]), array([0.493]), array([0.378]), array([0.596]), array([0.44]), array([0.316]), array([0.865]), array([0.753]), array([0.056]), array([0.201]), array([0.829]), array([0.676]), array([0.41]), array([0.202]), array([0.256]), array([0.904]), array([0.537]), array([0.186]), array([0.414]), array([0.532]), array([0.356]), array([0.499]), array([0.712]), array([0.037]), array([0.282]), array([0.931]), array([0.921]), array([0.774]), array([0.471]), array([0.017]), array([0.897]), array([0.423]), array([0.682]), array([0.043]), array([0.159]), array([0.645]), array([0.264]), array([0.045]), array([0.362]), array([0.468]), array([0.229]), array([0.919]), array([0.033]), array([0.024]), array([0.237]), array([0.318]), array([0.624]), array([0.628]), array([0.355]), array([0.723]), array([0.773]), array([0.42]), array([0.233]), array([0.881]), array([0.915]), array([0.54]), array([0.887]), array([0.942]), array([0.67]), array([0.108]), array([0.803]), array([0.164]), array([0.81]), array([0.249]), array([0.845]), array([0.918]), array([0.321]), array([0.155]), array([0.406]), array([0.354]), array([0.989]), array([0.781]), array([0.337]), array([0.575]), array([0.45]), array([0.788]), array([0.738]), array([0.677]), array([0.717]), array([0.931]), array([0.699]), array([0.461]), array([0.333]), array([0.525]), array([0.93]), array([0.383]), array([0.141]), array([0.556]), array([0.35]), array([0.711]), array([0.876]), array([0.15]), array([0.337]), array([0.165]), array([0.063]), array([0.317]), array([0.885]), array([0.835]), array([0.262]), array([0.17]), array([0.407]), array([0.482]), array([0.114]), array([0.684]), array([0.988]), array([0.379]), array([0.212]), array([0.358]), array([0.016]), array([0.369]), array([0.618]), array([0.231]), array([0.879]), array([0.501]), array([0.022]), array([0.135]), array([0.848]), array([0.617]), array([0.422]), array([0.135]), array([0.199]), array([0.89]), array([0.518]), array([0.448]), array([0.723]), array([0.308]), array([0.718]), array([0.999]), array([0.646]), array([0.812]), array([0.727]), array([0.343]), array([0.874]), array([0.84]), array([0.049]), array([0.679]), array([0.136]), array([0.812]), array([0.906]), array([0.218]), array([0.936]), array([0.975]), array([0.369]), array([0.983]), array([0.891]), array([0.699]), array([0.474]), array([0.915]), array([0.329]), array([0.607]), array([0.445]), array([0.111]), array([0.444]), array([0.381]), array([0.185]), array([0.454]), array([0.796]), array([0.521]), array([0.256]), array([0.647]), array([0.385]), array([0.308]), array([0.245]), array([0.108]), array([0.537]), array([0.819]), array([0.902]), array([0.975]), array([0.065]), array([0.368]), array([0.589]), array([0.119]), array([0.426]), array([0.239]), array([0.122]), array([0.656]), array([0.465]), array([0.278]), array([0.831]), array([0.952]), array([0.834]), array([0.416]), array([0.048]), array([0.2]), array([0.808]), array([0.549]), array([0.393]), array([0.892]), array([0.706]), array([0.26]), array([0.615]), array([0.738]), array([0.334]), array([0.511]), array([0.139]), array([0.899]), array([0.209]), array([0.521]), array([0.978]), array([0.269]), array([0.169]), array([0.454]), array([0.47]), array([0.567]), array([0.652]), array([0.963]), array([0.543]), array([0.863]), array([0.279]), array([0.654]), array([0.826]), array([0.317]), array([0.751]), array([0.028]), array([0.445]), array([0.291]), array([0.993]), array([0.713]), array([0.432]), array([0.813]), array([0.771]), array([0.809]), array([0.014]), array([0.244]), array([0.976]), array([0.313]), array([0.314]), array([0.393]), array([0.423]), array([0.051]), array([0.614]), array([0.503]), array([0.763]), array([0.73]), array([0.076]), array([0.039]), array([0.845]), array([0.22]), array([0.56]), array([0.979]), array([0.529]), array([0.632]), array([0.246]), array([0.827]), array([0.76]), array([0.444]), array([0.519]), array([0.338]), array([0.628]), array([0.841]), array([0.125]), array([0.93]), array([0.98]), array([0.358]), array([0.025]), array([0.858]), array([0.869]), array([0.64]), array([0.367]), array([0.453]), array([0.351]), array([0.344]), array([0.368]), array([0.457]), array([0.005]), array([0.147]), array([0.879]), array([0.252]), array([0.218]), array([0.637]), array([0.313]), array([0.527]), array([0.225]), array([0.61]), array([0.349]), array([0.688]), array([0.604]), array([0.272]), array([0.717]), array([0.34]), array([0.993]), array([0.31]), array([0.252]), array([0.626]), array([0.944]), array([0.767]), array([0.184]), array([0.607]), array([0.812]), array([0.879]), array([0.661]), array([0.831]), array([0.326]), array([0.532]), array([0.38]), array([0.]), array([0.173]), array([0.429]), array([0.237]), array([0.514]), array([0.457]), array([0.488]), array([0.059]), array([0.988]), array([0.624]), array([0.884]), array([0.406]), array([0.92]), array([0.481]), array([0.197]), array([0.808]), array([0.384]), array([0.048]), array([0.313]), array([0.382]), array([0.636]), array([0.481]), array([0.175]), array([0.999]), array([0.105]), array([0.923]), array([0.856]), array([0.594]), array([0.28]), array([0.268]), array([0.203]), array([0.853]), array([0.17]), array([0.858]), array([0.938]), array([0.053]), array([0.031]), array([0.208]), array([0.7]), array([0.697]), array([0.971]), array([0.659]), array([0.537]), array([0.898]), array([0.66]), array([0.085]), array([0.543]), array([0.75]), array([0.39]), array([0.905]), array([0.639]), array([0.932]), array([0.847]), array([0.007]), array([0.177]), array([0.192]), array([0.141]), array([0.882]), array([0.137]), array([0.646]), array([0.643]), array([0.056]), array([0.111]), array([0.117]), array([0.19]), array([0.51]), array([0.202]), array([0.456]), array([0.4]), array([0.039]), array([0.834]), array([0.072]), array([0.684]), array([0.351]), array([0.241]), array([0.774]), array([0.531]), array([0.947]), array([0.3]), array([0.182]), array([0.423]), array([0.299]), array([0.912]), array([0.041]), array([0.772]), array([0.308]), array([0.979]), array([0.835]), array([0.865]), array([0.163]), array([0.853]), array([0.319]), array([0.331]), array([0.037]), array([0.691]), array([0.254]), array([0.603]), array([0.239]), array([0.183]), array([0.663]), array([0.275]), array([0.911]), array([0.74]), array([0.508]), array([0.881]), array([0.064]), array([0.774]), array([0.462]), array([0.91]), array([0.968]), array([0.225]), array([0.452]), array([0.142]), array([0.381]), array([0.681]), array([0.054]), array([0.738]), array([0.835]), array([0.011]), array([0.192]), array([0.568]), array([0.317]), array([0.597]), array([0.617]), array([0.175]), array([0.478]), array([0.505]), array([0.318]), array([0.359]), array([0.863]), array([0.439]), array([0.962]), array([0.051]), array([0.781]), array([0.98]), array([0.572]), array([0.973]), array([0.776]), array([0.211]), array([0.661]), array([0.516]), array([0.675]), array([0.207]), array([0.436]), array([0.691]), array([0.515]), array([0.286]), array([0.241]), array([0.471]), array([0.104]), array([0.108]), array([0.732]), array([0.743]), array([0.541]), array([0.374]), array([0.181]), array([0.203]), array([0.936]), array([0.254]), array([0.079]), array([0.456]), array([0.276]), array([0.373]), array([0.488]), array([0.624]), array([0.851]), array([0.1]), array([0.337]), array([0.796]), array([0.231]), array([0.448]), array([0.475]), array([0.58]), array([0.5]), array([0.522]), array([0.298]), array([0.461]), array([0.286]), array([0.24]), array([0.332]), array([0.934]), array([0.763]), array([0.038]), array([0.088]), array([0.339]), array([0.206]), array([0.212]), array([0.391]), array([0.272]), array([0.073]), array([0.843]), array([0.899]), array([0.811]), array([0.401]), array([0.571]), array([0.918]), array([0.095]), array([0.04]), array([0.288]), array([0.44]), array([0.646]), array([0.254]), array([0.56]), array([0.991]), array([0.429]), array([0.086]), array([0.815]), array([0.067]), array([0.156]), array([0.837]), array([0.305]), array([0.732]), array([0.437]), array([0.027]), array([0.766]), array([0.947]), array([0.539]), array([0.47]), array([0.338]), array([0.738]), array([0.569]), array([0.036]), array([0.573]), array([0.09]), array([0.671]), array([0.965]), array([0.746]), array([0.205]), array([0.258]), array([0.007]), array([0.41]), array([0.697]), array([0.086]), array([0.036]), array([0.965]), array([0.277]), array([0.058]), array([0.434]), array([0.604]), array([0.87]), array([0.909]), array([0.303]), array([0.707]), array([0.877]), array([0.833]), array([0.472]), array([0.627]), array([0.869]), array([0.654]), array([0.954]), array([0.391]), array([0.94]), array([0.405]), array([0.478]), array([0.474]), array([0.785]), array([0.076]), array([0.602]), array([0.598]), array([0.328]), array([0.082]), array([0.535]), array([0.178]), array([0.977]), array([0.002]), array([0.144]), array([0.34]), array([0.017]), array([0.208]), array([0.138]), array([0.665]), array([0.743]), array([0.774]), array([0.725]), array([0.495]), array([0.837]), array([0.73]), array([0.584]), array([0.255]), array([0.3]), array([0.962]), array([0.496]), array([0.371]), array([0.13]), array([0.354]), array([0.524]), array([0.778]), array([0.949]), array([0.382]), array([0.316]), array([0.751]), array([0.133]), array([0.023]), array([0.882]), array([0.741]), array([0.042]), array([0.794]), array([0.637]), array([0.283]), array([0.2]), array([0.248]), array([0.931]), array([0.616]), array([0.149]), array([0.468]), array([0.189]), array([0.578]), array([0.968]), array([0.089]), array([0.446]), array([0.635]), array([0.443]), array([0.392]), array([0.735]), array([0.838]), array([0.698]), array([0.6]), array([0.965]), array([0.766]), array([0.754]), array([0.49]), array([0.239]), array([0.119]), array([0.695]), array([0.994]), array([0.765]), array([0.795]), array([0.904]), array([0.195]), array([0.9]), array([0.298]), array([0.853]), array([0.281]), array([0.743]), array([0.659]), array([0.757]), array([0.705]), array([0.881]), array([0.069]), array([0.192]), array([0.064]), array([0.446]), array([0.842]), array([0.461]), array([0.876]), array([0.706]), array([0.5]), array([0.862]), array([0.646]), array([0.108]), array([0.419]), array([0.665]), array([0.834]), array([0.416]), array([0.454]), array([0.054]), array([0.214]), array([0.351]), array([0.636]), array([0.481]), array([0.423]), array([0.298]), array([0.289]), array([0.762]), array([0.882]), array([0.741]), array([0.918]), array([0.051]), array([0.45]), array([0.219]), array([0.691]), array([0.18]), array([0.732]), array([0.598]), array([0.33]), array([0.534]), array([0.255]), array([0.166]), array([0.001]), array([0.669]), array([0.765]), array([0.595]), array([0.412]), array([0.58]), array([0.849]), array([0.739]), array([0.965]), array([0.969]), array([0.783]), array([0.873]), array([0.885]), array([0.27]), array([0.632]), array([0.175]), array([0.487]), array([0.016]), array([0.811]), array([0.994]), array([0.447]), array([0.599]), array([0.783]), array([0.242]), array([0.607]), array([0.39]), array([0.54]), array([0.504]), array([0.266]), array([0.31]), array([0.305]), array([0.283]), array([0.806]), array([0.287]), array([0.487]), array([0.111]), array([0.189]), array([0.67]), array([0.552]), array([0.635]), array([0.94]), array([0.645]), array([0.721]), array([0.08]), array([0.515]), array([0.276]), array([0.234]), array([0.369]), array([0.514]), array([0.789]), array([0.128]), array([0.908]), array([0.698]), array([0.44]), array([0.649]), array([0.555]), array([0.343]), array([0.565]), array([0.025]), array([0.309]), array([0.413]), array([0.308]), array([0.19]), array([0.728]), array([0.443]), array([0.666]), array([0.318]), array([0.84]), array([0.053]), array([0.924]), array([0.6]), array([0.918]), array([0.617]), array([0.464]), array([0.777]), array([0.565]), array([0.496]), array([0.131]), array([0.651]), array([0.272]), array([0.019]), array([0.65]), array([0.325]), array([0.532]), array([0.082]), array([0.52]), array([0.316]), array([0.944]), array([0.538]), array([0.257]), array([0.237]), array([0.459]), array([0.007]), array([0.554]), array([0.56]), array([0.464]), array([0.253]), array([0.53]), array([0.645]), array([0.294]), array([0.725]), array([0.988]), array([0.836]), array([0.466]), array([0.863]), array([0.093]), array([0.212]), array([0.391]), array([0.039]), array([0.569]), array([0.774]), array([0.683]), array([0.404]), array([0.625]), array([0.128]), array([0.955]), array([0.768]), array([0.567]), array([0.275]), array([0.993]), array([0.455]), array([0.392]), array([0.894]), array([0.992]), array([0.774]), array([0.791]), array([0.495]), array([0.649]), array([0.125]), array([0.835]), array([0.393]), array([0.861]), array([0.029]), array([0.675]), array([0.953]), array([0.744]), array([0.252]), array([0.304]), array([0.627]), array([0.014]), array([0.999]), array([0.811]), array([0.01]), array([0.795]), array([0.868]), array([0.401]), array([0.615]), array([0.31]), array([0.107]), array([0.292]), array([0.448]), array([0.489]), array([0.222]), array([0.459]), array([0.04]), array([0.266]), array([0.201]), array([0.353]), array([0.561]), array([0.932]), array([0.886]), array([0.836]), array([0.679]), array([0.673]), array([0.487]), array([0.574]), array([0.012]), array([0.347]), array([0.952]), array([0.71]), array([0.156]), array([0.876]), array([0.905]), array([0.035]), array([0.739]), array([0.921]), array([0.069]), array([0.285]), array([0.872]), array([0.434]), array([0.046]), array([0.917]), array([0.302]), array([0.899]), array([0.332]), array([0.27]), array([0.872]), array([0.795]), array([0.878]), array([0.331]), array([0.154]), array([0.816]), array([0.245]), array([0.791]), array([0.013]), array([0.621]), array([0.491]), array([0.995]), array([0.038]), array([0.724]), array([0.558]), array([0.529]), array([0.322]), array([0.113]), array([0.195]), array([0.804]), array([0.11]), array([0.473]), array([0.593]), array([0.701]), array([0.206]), array([0.108]), array([0.297]), array([0.768]), array([0.459]), array([0.757]), array([0.306]), array([0.481]), array([0.588]), array([0.684]), array([0.495]), array([0.983]), array([0.268]), array([0.097]), array([0.133]), array([0.059]), array([0.426]), array([0.725]), array([0.326]), array([0.53]), array([0.78]), array([0.236]), array([0.213]), array([0.567]), array([0.495]), array([0.167]), array([0.107]), array([0.599]), array([0.997]), array([0.054]), array([0.623]), array([0.461]), array([0.111]), array([0.002]), array([0.975]), array([0.591]), array([0.031]), array([0.712]), array([0.279]), array([0.928]), array([0.954]), array([0.127]), array([0.284]), array([0.958]), array([0.773]), array([0.006]), array([0.462]), array([0.483]), array([0.794]), array([0.009]), array([0.84]), array([0.645]), array([0.164]), array([0.747]), array([0.348]), array([0.694]), array([0.69]), array([0.179]), array([0.709]), array([0.616]), array([0.699]), array([0.898]), array([0.187]), array([0.306]), array([0.779]), array([0.989]), array([0.842]), array([0.939]), array([0.165]), array([0.1]), array([0.571]), array([0.665]), array([0.875]), array([0.389]), array([0.095]), array([0.312]), array([0.665]), array([0.836]), array([0.928]), array([0.354]), array([0.609]), array([0.184]), array([0.009]), array([0.324]), array([0.423]), array([0.152]), array([0.399]), array([0.754]), array([0.29]), array([0.014]), array([0.94]), array([0.673]), array([0.603]), array([0.68]), array([0.559]), array([0.44]), array([0.728]), array([0.421]), array([0.388]), array([0.203]), array([0.406]), array([0.547]), array([0.721]), array([0.683]), array([0.478]), array([0.826]), array([0.446]), array([0.411]), array([0.947]), array([0.879]), array([0.359]), array([0.931]), array([0.068]), array([0.385]), array([0.023]), array([0.22]), array([0.883]), array([0.021]), array([0.28]), array([0.474]), array([0.53]), array([0.6]), array([0.126]), array([0.559]), array([0.577]), array([0.928]), array([0.459]), array([0.938]), array([0.747]), array([0.054]), array([0.297]), array([0.291]), array([0.97]), array([0.652]), array([0.513]), array([0.551]), array([0.57]), array([0.839]), array([0.055]), array([0.772]), array([0.132]), array([0.76]), array([0.084]), array([0.765]), array([0.613]), array([0.719]), array([0.085]), array([0.615]), array([0.222]), array([0.727]), array([0.22]), array([0.855]), array([0.73]), array([0.576]), array([0.793]), array([0.879]), array([0.586]), array([0.241]), array([0.998]), array([0.598]), array([0.027]), array([0.725]), array([0.709]), array([0.486]), array([0.942]), array([0.279]), array([0.399]), array([0.917]), array([0.463]), array([0.368]), array([0.296]), array([0.117]), array([0.772]), array([0.762]), array([0.2]), array([0.421]), array([0.416]), array([0.527]), array([0.484]), array([0.287]), array([0.586]), array([0.04]), array([0.275]), array([0.332]), array([0.945]), array([0.96]), array([0.088]), array([0.787]), array([0.255]), array([0.657]), array([0.301]), array([0.206]), array([0.685]), array([0.631]), array([0.441]), array([0.369]), array([0.074]), array([0.517]), array([0.414]), array([0.248]), array([0.107]), array([0.863]), array([0.624]), array([0.326]), array([0.737]), array([0.239]), array([0.43]), array([0.153]), array([0.807]), array([0.252]), array([0.82]), array([0.309]), array([0.017]), array([0.419]), array([0.302]), array([0.812]), array([0.638]), array([0.587]), array([0.693]), array([0.362]), array([0.621]), array([0.436]), array([0.768]), array([0.553]), array([0.209]), array([0.261]), array([0.934]), array([0.883]), array([0.288]), array([0.716]), array([0.382]), array([0.329]), array([0.529]), array([0.491]), array([0.92]), array([0.725]), array([0.212]), array([0.47]), array([0.221]), array([0.01]), array([0.037]), array([0.114]), array([0.938]), array([0.265]), array([0.629]), array([0.748]), array([0.05]), array([0.851]), array([0.956]), array([0.177]), array([0.825]), array([0.736]), array([0.291]), array([0.579]), array([0.738]), array([0.777]), array([0.874]), array([0.596]), array([0.317]), array([0.271]), array([0.556]), array([0.701]), array([0.776]), array([0.971]), array([0.32]), array([0.108]), array([0.003]), array([0.553]), array([0.576]), array([0.912]), array([0.446]), array([0.55]), array([0.597]), array([0.624]), array([0.584]), array([0.364]), array([0.753]), array([0.553]), array([0.96]), array([0.822]), array([0.4]), array([0.814]), array([0.23]), array([0.657]), array([0.797]), array([0.975]), array([0.643]), array([0.681]), array([0.259]), array([0.604]), array([0.587]), array([0.358]), array([0.649]), array([0.007]), array([0.865]), array([0.279]), array([0.201]), array([0.108]), array([0.748]), array([0.064]), array([0.603]), array([0.846]), array([0.126]), array([0.009]), array([0.955]), array([0.68]), array([0.678]), array([0.421]), array([0.55]), array([0.852]), array([0.915]), array([0.135]), array([0.15]), array([0.364]), array([0.388]), array([0.773]), array([0.189]), array([0.677]), array([0.817]), array([0.875]), array([0.391]), array([0.267]), array([0.257]), array([0.215]), array([0.308]), array([0.802]), array([0.933]), array([0.789]), array([0.269]), array([0.084]), array([0.846]), array([0.473]), array([0.129]), array([0.663]), array([0.121]), array([0.412]), array([0.306]), array([0.863]), array([0.468]), array([0.68]), array([0.516]), array([0.519]), array([0.207]), array([0.062]), array([0.144]), array([0.463]), array([0.178]), array([0.891]), array([0.768]), array([0.497]), array([0.89]), array([0.635]), array([0.165]), array([0.229]), array([0.544]), array([0.654]), array([0.095]), array([0.708]), array([0.809]), array([0.124]), array([0.757]), array([0.459]), array([0.675]), array([0.902]), array([0.927]), array([0.267]), array([0.885]), array([0.564]), array([0.227]), array([0.357]), array([0.018]), array([0.948]), array([0.367]), array([0.079]), array([0.39]), array([0.437]), array([0.315]), array([0.712]), array([0.802]), array([0.98]), array([0.494]), array([0.156]), array([0.358]), array([0.293]), array([0.045]), array([0.943]), array([0.35]), array([0.456]), array([0.863]), array([0.618]), array([0.575]), array([0.818]), array([0.634]), array([0.101]), array([0.832]), array([0.823]), array([0.337]), array([0.454]), array([0.115]), array([0.849]), array([0.799]), array([0.996]), array([0.847]), array([0.808]), array([0.075]), array([0.412]), array([0.287]), array([0.303]), array([0.474]), array([0.965]), array([0.507]), array([0.722]), array([0.254]), array([0.797]), array([0.631]), array([0.459]), array([0.466]), array([0.324]), array([0.52]), array([0.761]), array([0.456]), array([0.714]), array([0.481]), array([0.616]), array([0.409]), array([0.654]), array([0.85]), array([0.603]), array([0.474]), array([0.729]), array([0.816]), array([0.832]), array([0.41]), array([0.268]), array([0.024]), array([0.632]), array([0.034]), array([0.518]), array([0.352]), array([0.759]), array([0.634]), array([0.106]), array([0.814]), array([0.656]), array([0.49]), array([0.446]), array([0.162]), array([0.746]), array([0.203]), array([0.324]), array([0.645]), array([0.499]), array([0.336]), array([0.877]), array([0.912]), array([0.361]), array([0.823]), array([0.401]), array([0.264]), array([0.53]), array([0.631]), array([0.722]), array([0.298]), array([0.649]), array([0.406]), array([0.405]), array([0.14]), array([0.081]), array([0.374]), array([0.766]), array([0.047]), array([0.843]), array([0.924]), array([0.993]), array([0.009]), array([0.189]), array([0.346]), array([0.576]), array([0.544]), array([0.987]), array([0.234]), array([0.097]), array([0.355]), array([0.467]), array([0.067]), array([0.344]), array([0.307]), array([0.192]), array([0.866]), array([0.656]), array([0.398]), array([0.24]), array([0.599]), array([0.745]), array([0.501]), array([0.366]), array([0.741]), array([0.233]), array([0.705]), array([0.795]), array([0.986]), array([0.571]), array([0.924]), array([0.894]), array([0.166]), array([0.51]), array([0.72]), array([0.571]), array([0.102]), array([0.855]), array([0.151]), array([0.172]), array([0.923]), array([0.052]), array([0.91]), array([0.13]), array([0.562]), array([0.205]), array([0.398]), array([0.629]), array([0.325]), array([0.571]), array([0.547]), array([0.046]), array([0.428]), array([0.777]), array([0.499]), array([0.308]), array([0.587]), array([0.21]), array([0.924]), array([0.197]), array([0.044]), array([0.463]), array([0.027]), array([0.544]), array([0.354]), array([0.498]), array([0.916]), array([0.071]), array([0.326]), array([0.914]), array([0.259]), array([0.432]), array([0.35]), array([0.859]), array([0.525]), array([0.201]), array([0.91]), array([0.29]), array([0.842]), array([0.589]), array([0.668]), array([0.964]), array([0.234]), array([0.871]), array([0.541]), array([0.582]), array([0.914]), array([0.281]), array([0.]), array([0.09]), array([0.628]), array([0.959]), array([0.47]), array([0.788]), array([0.827]), array([0.54]), array([0.899]), array([0.154]), array([0.319]), array([0.541]), array([0.331]), array([0.893]), array([0.665]), array([0.379]), array([0.622]), array([0.906]), array([0.852]), array([0.466]), array([0.516]), array([0.704]), array([0.381]), array([0.396]), array([0.803]), array([0.033]), array([0.682]), array([0.104]), array([0.911]), array([0.876]), array([0.045]), array([0.025]), array([0.715]), array([0.327]), array([0.816]), array([0.432]), array([0.837]), array([0.164]), array([0.013]), array([0.264]), array([0.182]), array([0.873]), array([0.254]), array([0.768]), array([0.902]), array([0.312]), array([0.298]), array([0.293]), array([0.272]), array([0.695]), array([0.728]), array([0.48]), array([0.449]), array([0.277]), array([0.004]), array([0.703]), array([0.501]), array([0.312]), array([0.052]), array([0.225]), array([0.151]), array([0.298]), array([0.794]), array([0.811]), array([0.275]), array([0.466]), array([0.707]), array([0.856]), array([0.251]), array([0.976]), array([0.156]), array([0.08]), array([0.734]), array([0.769]), array([0.278]), array([0.715]), array([0.864]), array([0.266]), array([0.858]), array([0.645]), array([0.83]), array([0.503]), array([0.485]), array([0.977]), array([0.228]), array([0.921]), array([0.956]), array([0.811]), array([0.043]), array([0.945]), array([0.39]), array([0.776]), array([0.246]), array([0.515]), array([0.067]), array([0.662]), array([0.179]), array([0.361]), array([0.698]), array([0.93]), array([0.95]), array([0.317]), array([0.791]), array([0.454]), array([0.382]), array([0.852]), array([0.109]), array([0.284]), array([0.449]), array([0.869]), array([0.805]), array([0.243]), array([0.708]), array([0.21]), array([0.21]), array([0.586]), array([0.159]), array([0.341]), array([0.483]), array([0.909]), array([0.134]), array([0.547]), array([0.319]), array([0.722]), array([0.84]), array([0.662]), array([0.189]), array([0.5]), array([0.608]), array([0.493]), array([0.565]), array([0.094]), array([0.727]), array([0.912]), array([0.304]), array([0.864]), array([0.064]), array([0.231]), array([0.595]), array([0.398]), array([0.463]), array([0.169]), array([0.573]), array([0.485]), array([0.809]), array([0.449]), array([0.423]), array([0.138]), array([0.622]), array([0.475]), array([0.831]), array([0.081]), array([0.361]), array([0.825]), array([0.46]), array([0.98]), array([0.604]), array([0.305]), array([0.9]), array([0.093]), array([0.556]), array([0.547]), array([0.838]), array([0.202]), array([0.461]), array([0.8]), array([0.197]), array([0.201]), array([0.112]), array([0.841]), array([0.771]), array([0.836]), array([0.851]), array([0.867]), array([0.767]), array([0.595]), array([0.928]), array([0.589]), array([0.231]), array([0.187]), array([0.851]), array([0.209]), array([0.741]), array([0.821]), array([0.303]), array([0.177]), array([0.079]), array([0.066]), array([0.44]), array([0.728]), array([0.996]), array([0.281]), array([0.067]), array([0.102]), array([0.511]), array([0.84]), array([0.542]), array([0.031]), array([0.516]), array([0.119]), array([0.513]), array([0.599]), array([0.285]), array([0.157]), array([0.58]), array([0.74]), array([0.915]), array([0.166]), array([0.583]), array([0.113]), array([0.294]), array([0.997]), array([0.219]), array([0.01]), array([0.267]), array([0.866]), array([0.034]), array([0.284]), array([0.062]), array([0.084]), array([0.545]), array([0.897]), array([0.382]), array([0.596]), array([0.294]), array([0.76]), array([0.662]), array([0.593]), array([0.521]), array([0.636]), array([0.077]), array([0.181]), array([0.229]), array([0.92]), array([0.081]), array([0.13]), array([0.789]), array([0.513]), array([0.165]), array([0.62]), array([0.584]), array([0.07]), array([0.586]), array([0.399]), array([0.05]), array([0.344]), array([0.481]), array([0.132]), array([0.177]), array([0.198]), array([0.997]), array([0.243]), array([0.151]), array([0.563]), array([0.509]), array([0.336]), array([0.083]), array([0.354]), array([0.432]), array([0.85]), array([0.099]), array([0.502]), array([0.618]), array([0.353]), array([0.13]), array([0.285]), array([0.868]), array([0.177]), array([0.403]), array([0.218]), array([0.662]), array([0.729]), array([0.939]), array([0.195]), array([0.707]), array([0.274]), array([0.628]), array([0.545]), array([0.426]), array([0.929]), array([0.124]), array([0.354]), array([0.372]), array([0.387]), array([0.545]), array([0.438]), array([0.599]), array([0.702]), array([0.734]), array([0.926]), array([0.495]), array([0.174]), array([0.537]), array([0.704]), array([0.919]), array([0.111]), array([0.103]), array([0.879]), array([0.094]), array([0.144]), array([0.161]), array([0.064]), array([0.995]), array([0.4]), array([0.079]), array([0.973]), array([0.026]), array([0.468]), array([0.99]), array([0.173]), array([0.781]), array([0.672]), array([0.497]), array([0.919]), array([0.91]), array([0.406]), array([0.325]), array([0.274]), array([0.923]), array([0.957]), array([0.5]), array([0.393]), array([0.031]), array([0.307]), array([0.327]), array([0.628]), array([0.647]), array([0.208]), array([0.947]), array([0.782]), array([0.211]), array([0.332]), array([0.175]), array([0.518]), array([0.749]), array([0.147]), array([0.96]), array([0.465]), array([0.856]), array([0.98]), array([0.911]), array([0.757]), array([0.729]), array([0.894]), array([0.571]), array([0.381]), array([0.787]), array([0.268]), array([0.622]), array([0.572]), array([0.374]), array([0.088]), array([0.192]), array([0.907]), array([0.725]), array([0.699]), array([0.382]), array([0.071]), array([0.601]), array([0.155]), array([0.532]), array([0.647]), array([0.65]), array([0.893]), array([0.339]), array([0.973]), array([0.495]), array([0.756]), array([0.938]), array([0.375]), array([0.515]), array([0.528]), array([0.667]), array([0.06]), array([0.206]), array([0.33]), array([0.624]), array([0.981]), array([0.916]), array([0.261]), array([0.895]), array([0.478]), array([0.966]), array([0.377]), array([0.759]), array([0.312]), array([0.506]), array([0.233]), array([0.56]), array([0.269]), array([0.845]), array([0.157]), array([0.092]), array([0.238]), array([0.008]), array([0.165]), array([0.074]), array([0.305]), array([0.354]), array([0.561]), array([0.265]), array([0.181]), array([0.194]), array([0.508]), array([0.26]), array([0.811]), array([0.9]), array([0.312]), array([0.387]), array([0.422]), array([0.18]), array([0.9]), array([0.738]), array([0.504]), array([0.808]), array([0.583]), array([0.273]), array([0.477]), array([0.208]), array([0.516]), array([0.557]), array([0.162]), array([0.229]), array([0.516]), array([0.715]), array([0.563]), array([0.192]), array([0.807]), array([0.679]), array([0.523]), array([0.338]), array([0.939]), array([0.904]), array([0.51]), array([0.189]), array([0.833]), array([0.55]), array([0.754]), array([0.3]), array([0.996]), array([0.198]), array([0.068]), array([0.802]), array([0.752]), array([0.79]), array([0.466]), array([0.569]), array([0.391]), array([0.514]), array([0.886]), array([0.25]), array([0.077]), array([0.809]), array([0.876]), array([0.86]), array([0.592]), array([0.061]), array([0.906]), array([0.853]), array([0.195]), array([0.679]), array([0.522]), array([0.521]), array([0.618]), array([0.313]), array([0.692]), array([0.904]), array([0.723]), array([0.819]), array([0.066]), array([0.83]), array([0.249]), array([0.322]), array([0.913]), array([0.758]), array([0.917]), array([0.319]), array([0.213]), array([0.572]), array([0.974]), array([0.139]), array([0.04]), array([0.037]), array([0.899]), array([0.556]), array([0.184]), array([0.796]), array([0.18]), array([0.98]), array([0.749]), array([0.822]), array([0.743]), array([0.442]), array([0.938]), array([0.095]), array([0.322]), array([0.915]), array([0.922]), array([0.057]), array([0.676]), array([0.866]), array([0.618]), array([0.415]), array([0.911]), array([0.181]), array([0.893]), array([0.281]), array([0.689]), array([0.231]), array([0.724]), array([0.233]), array([0.774]), array([0.657]), array([0.73]), array([0.749]), array([0.686]), array([0.326]), array([0.034]), array([0.193]), array([0.235]), array([0.428]), array([0.779]), array([0.536]), array([0.2]), array([0.293]), array([0.306]), array([0.253]), array([0.678]), array([0.993]), array([0.064]), array([0.12]), array([0.424]), array([0.331]), array([0.693]), array([0.764]), array([0.482]), array([0.33]), array([0.447]), array([0.281]), array([0.535]), array([0.293]), array([0.701]), array([0.801]), array([0.122]), array([0.63]), array([0.537]), array([0.574]), array([0.863]), array([0.556]), array([0.115]), array([0.13]), array([0.562]), array([0.507]), array([0.046]), array([0.61]), array([0.784]), array([0.939]), array([0.489]), array([0.787]), array([0.64]), array([0.968]), array([0.083]), array([0.081]), array([0.062]), array([0.147]), array([0.95]), array([0.275]), array([0.838]), array([0.499]), array([0.593]), array([0.86]), array([0.207]), array([0.081]), array([0.045]), array([0.592]), array([0.058]), array([0.259]), array([0.618]), array([0.543]), array([0.739]), array([0.227]), array([0.617]), array([0.912]), array([0.726]), array([0.356]), array([0.647]), array([0.909]), array([0.727]), array([0.461]), array([0.777]), array([0.706]), array([0.191]), array([0.348]), array([0.052]), array([0.086]), array([0.85]), array([0.134]), array([0.909]), array([0.011]), array([0.73]), array([0.164]), array([0.158]), array([0.021]), array([0.753]), array([0.853]), array([0.164]), array([0.858]), array([0.392]), array([0.63]), array([0.681]), array([0.539]), array([0.807]), array([0.243]), array([0.426]), array([0.599]), array([0.014]), array([0.853]), array([0.779]), array([0.486]), array([0.534]), array([0.521]), array([0.231]), array([0.191]), array([0.517]), array([0.627]), array([0.605]), array([0.005]), array([0.487]), array([0.139]), array([0.877]), array([0.453]), array([0.329]), array([0.365]), array([0.029]), array([0.485]), array([0.724]), array([0.983]), array([0.675]), array([0.31]), array([0.874]), array([0.424]), array([0.973]), array([0.706]), array([0.857]), array([0.158]), array([0.723]), array([0.46]), array([0.262]), array([0.198]), array([0.432]), array([0.089]), array([0.426]), array([0.886]), array([0.333]), array([0.585]), array([0.261]), array([0.908]), array([0.852]), array([0.168]), array([0.83]), array([0.72]), array([0.608]), array([0.501]), array([0.53]), array([0.131]), array([0.65]), array([0.431]), array([0.298]), array([0.613]), array([0.535]), array([0.957]), array([0.905]), array([0.585]), array([0.539]), array([0.688]), array([0.607]), array([0.491]), array([0.321]), array([0.226]), array([0.72]), array([0.026]), array([0.322]), array([0.519]), array([0.764]), array([0.836]), array([0.155]), array([0.884]), array([0.31]), array([0.801]), array([0.373]), array([0.573]), array([0.655]), array([0.804]), array([0.262]), array([0.982]), array([0.391]), array([0.403]), array([0.905]), array([0.459]), array([0.757]), array([0.149]), array([0.763]), array([0.032]), array([0.777]), array([0.725]), array([0.683]), array([0.026]), array([0.279]), array([0.538]), array([0.754]), array([0.662]), array([0.856]), array([0.372]), array([0.619]), array([0.167]), array([0.734]), array([0.324]), array([0.824]), array([0.911]), array([0.662]), array([0.521]), array([0.74]), array([0.757]), array([0.717]), array([0.44]), array([0.263]), array([0.897]), array([0.382]), array([0.74]), array([0.009]), array([0.41]), array([0.204]), array([0.062]), array([0.573]), array([0.261]), array([0.75]), array([0.072]), array([0.806]), array([0.533]), array([0.128]), array([0.723]), array([0.888]), array([0.913]), array([0.134]), array([0.857]), array([0.014]), array([0.526]), array([0.97]), array([0.288]), array([0.215]), array([0.977]), array([0.377]), array([0.166]), array([0.436]), array([0.038]), array([0.965]), array([0.482]), array([0.535]), array([0.36]), array([0.089]), array([0.026]), array([0.974]), array([0.909]), array([0.934]), array([0.021]), array([0.792]), array([0.701]), array([0.414]), array([0.966]), array([0.483]), array([0.812]), array([0.451]), array([0.258]), array([0.34]), array([0.512]), array([0.875]), array([0.592]), array([0.191]), array([0.363]), array([0.575]), array([0.268]), array([0.69]), array([0.265]), array([0.44]), array([0.597]), array([0.491]), array([0.525]), array([0.558]), array([0.289]), array([0.528]), array([0.931]), array([0.904]), array([0.17]), array([0.776]), array([0.323]), array([0.677]), array([0.839]), array([0.523]), array([0.742]), array([0.397]), array([0.782]), array([0.346]), array([0.578]), array([0.6]), array([0.487]), array([0.08]), array([0.102]), array([0.036]), array([0.485]), array([0.721]), array([0.815]), array([0.707]), array([0.633]), array([0.748]), array([0.933]), array([0.85]), array([0.134]), array([0.021]), array([0.5]), array([0.304]), array([0.095]), array([0.69]), array([0.987]), array([0.791]), array([0.396]), array([0.108]), array([0.104]), array([0.774]), array([0.27]), array([0.015]), array([0.564]), array([0.268]), array([0.37]), array([0.345]), array([0.791]), array([0.826]), array([0.719]), array([0.978]), array([0.913]), array([0.333]), array([0.857]), array([0.762]), array([0.567]), array([0.27]), array([0.504]), array([0.437]), array([0.92]), array([0.493]), array([0.388]), array([0.171]), array([0.752]), array([0.552]), array([0.661]), array([0.208]), array([0.616]), array([0.624]), array([0.176]), array([0.894]), array([0.21]), array([0.958]), array([0.369]), array([0.088]), array([0.668]), array([0.787]), array([0.695]), array([0.349]), array([0.319]), array([0.072]), array([0.8]), array([0.986]), array([0.118]), array([0.922]), array([0.78]), array([0.343]), array([0.481]), array([0.897]), array([0.508]), array([0.795]), array([0.629]), array([0.46]), array([0.614]), array([0.67]), array([0.951]), array([0.752]), array([0.406]), array([0.928]), array([0.268]), array([0.932]), array([0.016]), array([0.851]), array([0.307]), array([0.501]), array([0.009]), array([0.266]), array([0.582]), array([0.581]), array([0.011]), array([0.517]), array([0.909]), array([0.554]), array([0.99]), array([0.125]), array([0.312]), array([0.569]), array([0.939]), array([0.117]), array([0.128]), array([0.358]), array([0.883]), array([0.12]), array([0.648]), array([0.609]), array([0.134]), array([0.214]), array([0.165]), array([0.187]), array([0.577]), array([0.525]), array([0.235]), array([0.117]), array([0.984]), array([0.952]), array([0.632]), array([0.25]), array([0.129]), array([0.472]), array([0.734]), array([0.463]), array([0.464]), array([0.798]), array([0.821]), array([0.297]), array([0.39]), array([0.597]), array([0.553]), array([0.434]), array([0.079]), array([0.202]), array([0.97]), array([0.826]), array([0.427]), array([0.749]), array([0.478]), array([0.974]), array([0.661]), array([0.621]), array([0.663]), array([0.505]), array([0.623]), array([0.766]), array([0.983]), array([0.478]), array([0.015]), array([0.14]), array([0.976]), array([0.072]), array([0.293]), array([0.918]), array([0.265]), array([0.336]), array([0.998]), array([0.184]), array([0.072]), array([0.478]), array([0.719]), array([0.664]), array([0.07]), array([0.472]), array([0.735]), array([0.475]), array([0.99]), array([0.881]), array([0.933]), array([0.728]), array([0.715]), array([0.631]), array([0.393]), array([0.305]), array([0.501]), array([0.958]), array([0.227]), array([0.671]), array([0.026]), array([0.475]), array([0.895]), array([0.507]), array([0.132]), array([0.368]), array([0.23]), array([0.464]), array([0.177]), array([0.814]), array([0.659]), array([0.655]), array([0.956]), array([0.315]), array([0.42]), array([0.157]), array([0.22]), array([0.279]), array([0.637]), array([0.96]), array([0.448]), array([0.578]), array([0.482]), array([0.274]), array([0.528]), array([0.611]), array([0.]), array([0.808]), array([0.721]), array([0.147]), array([0.657]), array([0.573]), array([0.192]), array([0.504]), array([0.697]), array([0.887]), array([0.31]), array([0.199]), array([0.554]), array([0.372]), array([0.23]), array([0.638]), array([0.304]), array([0.288]), array([0.487]), array([0.896]), array([0.703]), array([0.681]), array([0.784]), array([0.864]), array([0.707]), array([0.275]), array([0.965]), array([0.468]), array([0.091]), array([0.956]), array([0.895]), array([0.503]), array([0.401]), array([0.841]), array([0.888]), array([0.014]), array([0.89]), array([0.102]), array([0.388]), array([0.469]), array([0.249]), array([0.664]), array([0.367]), array([0.337]), array([0.269]), array([0.871]), array([0.76]), array([0.192]), array([0.859]), array([0.056]), array([0.536]), array([0.144]), array([0.663]), array([0.897]), array([0.938]), array([0.64]), array([0.524]), array([0.172]), array([0.485]), array([0.335]), array([0.708]), array([0.986]), array([0.167]), array([0.69]), array([0.764]), array([0.618]), array([0.412]), array([0.944]), array([0.199]), array([0.013]), array([0.025]), array([0.124]), array([0.417]), array([0.368]), array([0.434]), array([0.051]), array([0.981]), array([0.86]), array([0.378]), array([0.044]), array([0.031]), array([0.211]), array([0.808])]\n" - ] - } - ], - "source": [ - "batched_mj_data = mjx.get_data(mj_model, batch)\n", - "print([d.qpos for d in batched_mj_data])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Humanoid Env" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": {}, - "outputs": [], - "source": [ - "#@title Humanoid Env\n", - "\n", - "class Humanoid(PipelineEnv):\n", - "\n", - " def __init__(\n", - " self,\n", - " forward_reward_weight=1.25,\n", - " ctrl_cost_weight=0.1,\n", - " healthy_reward=5.0,\n", - " terminate_when_unhealthy=True,\n", - " healthy_z_range=(1.0, 2.0),\n", - " reset_noise_scale=1e-2,\n", - " exclude_current_positions_from_observation=True,\n", - " **kwargs,\n", - " ):\n", - " path = epath.Path(epath.resource_path('mujoco')) / (\n", - " 'mjx/test_data/humanoid'\n", - " )\n", - " mj_model = mujoco.MjModel.from_xml_path(\n", - " (path / 'humanoid.xml').as_posix())\n", - " mj_model.opt.solver = mujoco.mjtSolver.mjSOL_CG\n", - " mj_model.opt.iterations = 6\n", - " mj_model.opt.ls_iterations = 6\n", - "\n", - " sys = mjcf.load_model(mj_model)\n", - "\n", - " physics_steps_per_control_step = 5\n", - " kwargs['n_frames'] = kwargs.get(\n", - " 'n_frames', physics_steps_per_control_step)\n", - " kwargs['backend'] = 'mjx'\n", - "\n", - " super().__init__(sys, **kwargs)\n", - "\n", - " self._forward_reward_weight = forward_reward_weight\n", - " self._ctrl_cost_weight = ctrl_cost_weight\n", - " self._healthy_reward = healthy_reward\n", - " self._terminate_when_unhealthy = terminate_when_unhealthy\n", - " self._healthy_z_range = healthy_z_range\n", - " self._reset_noise_scale = reset_noise_scale\n", - " self._exclude_current_positions_from_observation = (\n", - " exclude_current_positions_from_observation\n", - " )\n", - "\n", - " def reset(self, rng: jp.ndarray) -> State:\n", - " \"\"\"Resets the environment to an initial state.\"\"\"\n", - " rng, rng1, rng2 = jax.random.split(rng, 3)\n", - "\n", - " low, hi = -self._reset_noise_scale, self._reset_noise_scale\n", - " qpos = self.sys.qpos0 + jax.random.uniform(\n", - " rng1, (self.sys.nq,), minval=low, maxval=hi\n", - " )\n", - " qvel = jax.random.uniform(\n", - " rng2, (self.sys.nv,), minval=low, maxval=hi\n", - " )\n", - "\n", - " data = self.pipeline_init(qpos, qvel)\n", - "\n", - " obs = self._get_obs(data, jp.zeros(self.sys.nu))\n", - " reward, done, zero = jp.zeros(3)\n", - " metrics = {\n", - " 'forward_reward': zero,\n", - " 'reward_linvel': zero,\n", - " 'reward_quadctrl': zero,\n", - " 'reward_alive': zero,\n", - " 'x_position': zero,\n", - " 'y_position': zero,\n", - " 'distance_from_origin': zero,\n", - " 'x_velocity': zero,\n", - " 'y_velocity': zero,\n", - " }\n", - " return State(data, obs, reward, done, metrics)\n", - "\n", - " def step(self, state: State, action: jp.ndarray) -> State:\n", - " \"\"\"Runs one timestep of the environment's dynamics.\"\"\"\n", - " data0 = state.pipeline_state\n", - " data = self.pipeline_step(data0, action)\n", - "\n", - " com_before = data0.subtree_com[1]\n", - " com_after = data.subtree_com[1]\n", - " velocity = (com_after - com_before) / self.dt\n", - " forward_reward = self._forward_reward_weight * velocity[0]\n", - "\n", - " min_z, max_z = self._healthy_z_range\n", - " is_healthy = jp.where(data.q[2] < min_z, 0.0, 1.0)\n", - " is_healthy = jp.where(data.q[2] > max_z, 0.0, is_healthy)\n", - " if self._terminate_when_unhealthy:\n", - " healthy_reward = self._healthy_reward\n", - " else:\n", - " healthy_reward = self._healthy_reward * is_healthy\n", - "\n", - " ctrl_cost = self._ctrl_cost_weight * jp.sum(jp.square(action))\n", - "\n", - " obs = self._get_obs(data, action)\n", - " reward = forward_reward + healthy_reward - ctrl_cost\n", - " print(reward, forward_reward, healthy_reward, ctrl_cost)\n", - " print(type(reward), type(forward_reward), type(healthy_reward), type(ctrl_cost))\n", - " print(type(data))\n", - " done = 1.0 - is_healthy if self._terminate_when_unhealthy else 0.0\n", - " state.metrics.update(\n", - " forward_reward=forward_reward,\n", - " reward_linvel=forward_reward,\n", - " reward_quadctrl=-ctrl_cost,\n", - " reward_alive=healthy_reward,\n", - " x_position=com_after[0],\n", - " y_position=com_after[1],\n", - " distance_from_origin=jp.linalg.norm(com_after),\n", - " x_velocity=velocity[0],\n", - " y_velocity=velocity[1],\n", - " )\n", - "\n", - " return state.replace(\n", - " pipeline_state=data, obs=obs, reward=reward, done=done\n", - " )\n", - "\n", - " def _get_obs(\n", - " self, data: mjx.Data, action: jp.ndarray\n", - " ) -> jp.ndarray:\n", - " \"\"\"Observes humanoid body position, velocities, and angles.\"\"\"\n", - " position = data.qpos\n", - " if self._exclude_current_positions_from_observation:\n", - " position = position[2:]\n", - "\n", - " # external_contact_forces are excluded\n", - " return jp.concatenate([\n", - " position,\n", - " data.qvel,\n", - " data.cinert[1:].ravel(),\n", - " data.cvel[1:].ravel(),\n", - " data.qfrc_actuator,\n", - " ])\n", - "\n", - "\n", - "envs.register_environment('humanoid', Humanoid)" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": {}, - "outputs": [], - "source": [ - "# instantiate the environment\n", - "env_name = 'humanoid'\n", - "env = envs.get_environment(env_name)\n", - "\n", - "# define the jit reset/step functions - note: optimizes function (kernal fusion and constant folding), statically-typed machine code, (in other use cases, helps with automatic differentiation...)\n", - "jit_reset = jax.jit(env.reset)\n", - "jit_step = jax.jit(env.step)" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Tracedwith Tracedwith 5.0 Tracedwith\n", - " \n", - "\n", - "Tracedwith Tracedwith 5.0 Tracedwith\n", - " \n", - "\n" - ] - } - ], - "source": [ - "state = jit_reset(jax.random.PRNGKey(0))\n", - "rollout = [state.pipeline_state]\n", - "\n", - "# grab a trajectory\n", - "for i in range(10):\n", - " ctrl = -0.1 * jp.ones(env.sys.nu)\n", - " state = jit_step(state, ctrl)\n", - " rollout.append(state.pipeline_state)" - ] - }, - { - "cell_type": "code", - "execution_count": 64, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "prev position 0.026874056\n", - "next position 0.032642037\n" - ] - }, - { - "data": { - "text/plain": [ - "Array(0.288, dtype=float32)" - ] - }, - "execution_count": 64, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "def forward_reward_fn(state: base.State, action: jp.ndarray, next_state: base.State, dt: jax.Array, params: Dict[str, float]) -> jp.ndarray:\n", - " \"\"\"Reward function for moving forward.\n", - "\n", - " Args:\n", - " state: Current state.\n", - " action: Action taken.\n", - " next_state: Next state.\n", - " dt: Time step.\n", - " params: Reward parameters.\n", - " Returns:\n", - " A float wrapped in a jax array. \n", - " \"\"\"\n", - " xpos = state.subtree_com[1][0] # TODO: include stricter typing than base.State to avoid this type error\n", - " next_xpos = next_state.subtree_com[1][0]\n", - " velocity = (next_xpos - xpos) / dt\n", - " forward_reward = params['weight'] * velocity\n", - "\n", - " return forward_reward\n", - "\n", - "ctrl = .1 * jp.ones(env.sys.nu)\n", - "data = state.pipeline_state\n", - "print(\"prev position\", data.subtree_com[1][0])\n", - "next_data = jit_step(state, ctrl).pipeline_state\n", - "print(\"next position\", next_data.subtree_com[1][0])\n", - "\n", - "dt = env.dt\n", - "params = {'weight': 1.25}\n", - "\n", - "forward_reward_fn(data, ctrl, next_data, dt, params)" - ] - }, - { - "cell_type": "code", - "execution_count": 70, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "brax.mjx.base.State" - ] - }, - "execution_count": 70, - "metadata": {}, - "output_type": "execute_result" - }, - { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31mThe Kernel crashed while executing code in the current cell or a previous cell. \n", - "\u001b[1;31mPlease review the code in the cell(s) to identify a possible cause of the failure. \n", - "\u001b[1;31mClick here for more info. \n", - "\u001b[1;31mView Jupyter log for further details." - ] - } - ], - "source": [ - "type(state.pipeline_state)" - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "metadata": {}, - "outputs": [], - "source": [ - "#media.show_video(env.render(rollout, camera='side'), fps=1.0 / env.dt)\n", - "# Fix GL / media issues, probably the cause of this running forever" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Tracedwith Tracedwith 5.0 Tracedwith\n", - " \n", - "\n" - ] - }, - { - "data": { - "image/png": "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L2VK0aJFi4ykIlP//v3Nnj17LrhMklm0aJE1xi+//GL69OljgoKCjNPpNAMGDDAnTpxw286mTZvMbbfdZvz8/Mx1111nxo8fX6SXL774wtSrV8/4+vqaRo0amTlz5ni0L1lZWUaSycrKuqxjAQAArjxPvr+95jlNZR3PaQIAoOy5ap/TBAAAUFoITQAAADYQmgAAAGwgNAEAANhAaAIAALCB0AQAAGADoQkAAMAGQhMAAIANhCYAAAAbCE0AAAA2EJoAAABsIDQBAADYQGgCAACwgdAEAABgA6EJAADABkITAACADYQmAAAAGwhNAAAANhCaAAAAbCA0AQAA2EBoAgAAsIHQBAAAYAOhCQAAwAZCEwAAgA2EJgAAABsITQAAADYQmgAAAGwgNAEAANhAaAIAALCB0AQAAGADoQkAAMAGQhMAAIANhCYAAAAbCE0AAAA2EJoAAABsIDQBAADYQGgCAACwgdAEAABgA6EJAADABkITAACADYQmAAAAGwhNAAAANhCaAAAAbCA0AQAA2EBoAgAAsIHQBAAAYEOphqalS5eqR48eioyMlMPh0KxZs9yWG2M0atQoRUREKCAgQLGxsdq5c6dbzbFjxxQfHy+n06mQkBANHDhQ2dnZbjWbN29Wu3bt5O/vr6ioKCUmJhbp5csvv1SDBg3k7++vJk2a6Ntvvy32/QUAAGVXqYamkydPqmnTppo4ceIFlycmJuof//iHJk2apNWrVyswMFBxcXE6c+aMVRMfH6/U1FQtWLBAs2fP1tKlS/XII49Yy10ul7p06aJatWopJSVFr732msaMGaMPPvjAqlm5cqX69OmjgQMHasOGDerZs6d69uyprVu3ltzOAwCAssV4CUlm5syZ1uuCggITHh5uXnvtNWteZmam8fPzM5999pkxxpgffvjBSDJr1661aubOnWscDoc5ePCgMcaYd99914SGhpqcnByrZsSIEaZ+/frW6/vuu890797drZ/WrVubRx991Hb/WVlZRpLJysqyvQ4AAChdnnx/e+09TXv27FF6erpiY2OtecHBwWrdurWSk5MlScnJyQoJCVHLli2tmtjYWJUrV06rV6+2atq3by9fX1+rJi4uTmlpaTp+/LhVc/52CmsKt3MhOTk5crlcbhMAALh6eW1oSk9PlySFhYW5zQ8LC7OWpaenq3r16m7LK1SooMqV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wIEDNXz4cFWuXFlOp1OPPfaYYmJi1KZNG0lSly5dFB0drQceeECJiYlKT0/X//zP/2jIkCHy8/OTJP3lL3/RO++8o2eeeUYPPfSQFi5cqC+++EJz5sy5sjsMAAC8lleHJjvefPNNlStXTvfee69ycnIUFxend99911pevnx5zZ49W4MHD1ZMTIwCAwPVv39/vfDCC1ZNnTp1NGfOHD3xxBOaMGGCatSoocmTJysuLq40dgkAAHihMvGcprKA5zQBAFD2XHXPaQIAAChthCYAAAAbCE0AAAA2EJoAAABsIDQBAADYQGgCAACwgdAEAABgA6EJAADABkITAACADYQmAAAAGwhNAAAANhCaAAAAbCA0AQAA2EBoAgAAsIHQBAAAYAOhCQAAwAZCEwAAgA2EJgAAABsITQAAADYQmgAAAGwgNAEAANhAaAIAALCB0AQAAGADoQkAAMAGQhMAAIANhCYAAAAbCE0AAAA2EJoAAABsIDQBAADYQGgCAACwgdAEAABgA6EJAADABkITAACADYQmAAAAGwhNAAAANhCaAAAAbCA0AQAA2EBoAgAAsIHQBAAAYAOhCQAAwAZCEwAAgA2EJgAAABsITQAAADYQmgAAAGwgNAEAANhAaAIAALDBq0PTuHHjdMstt6hSpUqqXr26evbsqbS0NLeaM2fOaMiQIapSpYqCgoJ07733KiMjw61m37596t69uypWrKjq1avr6aefVl5enlvN4sWL1bx5c/n5+emGG27QlClTSnr3AABAGeLVoWnJkiUaMmSIVq1apQULFig3N1ddunTRyZMnrZonnnhC33zzjb788kstWbJEhw4d0j333GMtz8/PV/fu3XX27FmtXLlSH3/8saZMmaJRo0ZZNXv27FH37t11++23a+PGjRo2bJgefvhhzZ8//4ruLwAA8F4OY4wp7SbsOnr0qKpXr64lS5aoffv2ysrKUrVq1TRt2jT16tVLkrR9+3Y1bNhQycnJatOmjebOnas777xThw4dUlhYmCRp0qRJGjFihI4ePSpfX1+NGDFCc+bM0datW61t9e7dW5mZmZo3b56t3lwul4KDg5WVlSWn01n8Ow8AAIqdJ9/fXn2m6deysrIkSZUrV5YkpaSkKDc3V7GxsVZNgwYNVLNmTSUnJ0uSkpOT1aRJEyswSVJcXJxcLpdSU1OtmvPHKKwpHONC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z89XYmKiwsPDVb16db388stu/WZmZurhhx9WtWrV5HQ69Yc//EGbNm0qMu4nn3yi2rVrKzg4WL1799aJEyckSQ8++KCWLFmiCRMmWJcQfvrppwse73fffVc33nij/P39FRYWpl69ev3mGFu3btUdd9yhoKAghYWF6YEHHtDPP/9sjdmxY0clJCQoISFBwcHBqlq1qp5//nmd/4tbF9suUFoSEhKUnJys6dOna/PmzfrTn/6krl27aufOnResnzx5surVq6d27dp5tqHS/ek7AN5i7969Jjg42AQHBxsfHx/j7+9vgoODja+vr/Hz8zPBwcFm8ODBF13/008/NREREWbGjBnmxx9/NDNmzDCVK1c2U6ZMMcYYs2fPHiPJNGjQwMyePdukpaWZXr16mVq1apnc3FxjjDG9evUyffv2dRv33nvvteYVjrFhwwZjzP//YPBNN91kvvvuO7Nr1y7zyy+/mMcff9xERkaab7/91qSmppr+/fub0NBQ88svv7it17p1a7N48WKTmppq2rVrZ9q2bWttd/To0SYoKMj06tXLpKammq+//tr4+vqauLg489hjj5nt27ebDz/80Ehy+9Hq2NhY06NHD7N27VqzY8cO8+STT5oqVapY2y4c95577jFbtmwxS5cuNeHh4eZvf/ubMcaYzMxMExMTYwYNGmQOHz5sDh8+bPLy8ooc77Vr15ry5cubadOmmZ9++smsX7/eTJgw4ZJjHD9+3FSrVs08++yzZtu2bWb9+vWmc+fO5vbbb7fG7dChgwkKCjJDhw4127dvN59++qmpWLGi+eCDD35zu8CVIMnMnDnTer13715Tvnx5c/DgQbe6Tp06mWeffbbI+qdPnzahoaHm1Vdf9XzbHq8B4KqUm5tr9uzZYzZt2mR8fHzMpk2bzK5du0xQUJBZsmSJ2bNnjzl69OhF169bt66ZNm2a27wXX3zRxMTEGGP+P/BMnjzZWp6ammokmW3bthljjJk5c6YJCgoyJ0+eNMYYk5WVZfz9/c3cuXPdxvh1aJo1a5Y1ZnZ2tvHx8TFTp0615p09e9ZERkaaxMREt/W+//57q2bOnDlGkjl9+rQx5ly4qVixonG5XFZNXFycqV27tsnPz7fm1a9f34wbN84YY8yyZcuM0+k0Z86cKXJs3n///YuO+/TTT5vWrVtbrzt06GCGDh16kSN9zowZM4zT6XQb53wXGuPFF180Xbp0cZu3f/9+I8mkpaVZ6zVs2NAUFBRYNSNGjDANGza0tV2gpP06NM2ePdtIMoGBgW5ThQoVzH333Vdk/WnTppkKFSqY9PR0j7d94RsDAFxzKlSooNq1a+uLL77QLbfcoptuukkrVqxQWFiY2rdvf8l1T548qd27d2vgwIEaNGiQNT8vL0/BwcFutTfddJP174iICEnSkSNH1KBBA3Xr1k0+Pj76+uuv1bt3b82YMUNOp1OxsbGX3H7Lli2tf+/evVu5ublulxR9fHzUqlUrbdu2zVYvhfdv1a5dW5UqVbJqwsLCVL58eZUrV85t3pEjRyRJmzZtUnZ2tqpUqeK2ndOnT2v37t3W61+PGxERYY1hV+fOnVWrVi1df/316tq1q7p27aq7775bFStWvOg6mzZt0qJFixQUFFRk2e7du1WvXj1JUps2beRwOKxlMTExev3115Wfn39Z2wVKUnZ2tsqXL6+UlBSVL1/ebdmF3uuTJ0/WnXfeqbCwMI+3RWgCIElq1KiR9u7dq9zcXBUUFCgoKEh5eXnKy8tTUFCQatWqpdTU1Auum52dLUn65z//qdatW7st+/WHmI+Pj/Xvwi/mgoICSZKvr6969eqladOmqXfv3po2bZruv//+i974XcjTPxu208uvlxfWXGhe4TrZ2dmKiIhwuwG1UEhIyCXHPX+7dlSqVEnr16/X4sWL9d1332nUqFEaM2aM1q5d67at82VnZ6tHjx569dVXiywrDI0lsV2gJN18883Kz8/XkSNHfvMepT179mjRokX6+uuvL2tbhCYAkqRvv/1Wubm56tSpkxITE9WiRQv17t1bDz74oLp27Vrki/58YWFhioyM1I8//qj4+Pjf1Ud8fLw6d+6s1NRULVy4UC+99JJH69etW1e+vr5asWKFatWqJUnKzc3V2rVrS/xP8Js3b6709HTrrN3l8vX1VX5+/m/WVahQQbGxsYqNjdXo0aMVEhKihQsX6p577rngGM2bN9eMGTNUu3btSwbR1atXu71etWqVbrzxRisAX2q7QEnIzs7Wrl27rNd79uzRxo0bVblyZdWrV0/x8fHq16+fXn/9dd188806evSokpKSdNNNN6l79+7Weh9++KEiIiJ0xx13XFYfhCYAkqRatWopPT1dGRkZ+uMf/yiHw6HU1FTde++9ts5CjB07Vo8//riCg4PVtWtX5eTkaN26dTp+/LiGDx9uu4/27dsrPDxc8fHxqlOnTpEzV78lMDBQgwcP1tNPP209KiExMVGnTp3y+M+LPRUbG6uYmBj17NlTiYmJqlevng4dOqQ5c+bo7rvvdruMeCm1a9fW6tWr9dNPPykoKEiVK1d2uyQoSbNnz9aPP/6o9u3bKzQ0VN9++60KCgpUv379i44xZMgQ/fOf/1SfPn30zDPPqHLlytq1a5emT5+uyZMnW6Fo3759Gj58uB599FGtX79eb7/9tl5//XVb2wVKwrp163T77bdbrws/U/r3768pU6boo48+0ksvvaQnn3xSBw8eVNWqVdWmTRvdeeed1joFBQWaMmWKHnzwwSJnwO0iNAGwLF68WLfccov8/f21bNky1ahRw/Zlm4cfflgVK1bUa6+9pqefflqBgYFq0qSJx2d3HA6H+vTpo8TERI0aNeoy9kIaP368CgoK9MADD+jEiRNq2bKl5s+fr9DQ0Msazy6Hw6Fvv/1Wzz33nAYMGKCjR48qPDxc7du39+j+iaeeekr9+/dXdHS0Tp8+rT179hQ5cxUSEqKvvvpKY8aM0ZkzZ3TjjTfqs88+U6NGjS45xooVKzRixAh16dJFOTk5qlWrlrp27eoWyvr166fTp0+rVatWKl++vIYOHapHHnnE1naBktCxY0e3x178mo+Pj8aOHauxY8detKZcuXLav3//7+rDYS7VBQDgmtKxY0c1a9ZMb731Vmm3AngdHm4JAABgA6EJAADABi7PAQAA2MCZJgAAABsITQAAADYQmgAAAGwgNAEAANhAaAIAALCB0AQAAGADoQkAAMAGQhMAAIANhCYAAAAb/hcGPhTbjvJmVAAAAABJRU5ErkJggg==", - "text/plain": [ - "

" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Tracedwith Tracedwith 5.0 Tracedwith\n", - " \n", - "\n" - ] - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAk0AAAHHCAYAAACiOWx7AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAABKhklEQVR4nO3dd3QVdf7/8deFVBJSaCkSiii9SwsKgkSDoC4qq7BBEBFdBaVYgK/SbCCuhbUhomABRRZhFQTEAEEwtIQaIFQBgQQEkksoIeXz+4NfZrkm4FxMSALPxzn3kPuZ98y8Z/buvS9n5s51GGOMAAAAcEllirsBAACA0oDQBAAAYAOhCQAAwAZCEwAAgA2EJgAAABsITQAAADYQmgAAAGwgNAEAANhAaAIAALCB0AQAAGADoQnAVWfOnDmKjo5WeHi4vL29VbVqVXXv3l1btmxxqTt27JjeeOMNtW/fXpUrV1ZQUJDatGmjmTNn5lvmsmXL5HA4CnysWrXKdm8zZ85UZGSk/Pz8FBQUpLZt22rJkiUuNenp6Xr++ed14403ytfXV9WrV1e/fv20f//+fMv76aef1LFjR1WqVElBQUFq1aqVvvjiC9v9ALDPo7gbAIDCtnnzZgUHB2vQoEGqVKmSUlJS9Omnn6pVq1aKj49XkyZNJEnx8fF64YUX1KVLF7344ovy8PDQ7Nmz1aNHD23dulVjx47Nt+ynn35aLVu2dBm74YYbbPU1ZswYvfTSS+revbsefvhhZWVlacuWLTp48KBVk5ubq9tvv11bt27Vk08+qdq1a2vXrl364IMPtGjRIm3btk3ly5eXJH333Xfq1q2bIiMjNWbMGDkcDn3zzTfq3bu3fv/9dw0ZMuRydyGAghgAuAakpKQYDw8P8/jjj1tje/bsMb/++qtLXW5urrntttuMt7e3ycjIsMaXLl1qJJlZs2Zd1vrj4+ONw+Ewb7311iXrVq5caSSZ9957z2X8008/NZLMt99+a43dfvvtJjw83Jw9e9Yay8rKMrVq1TKNGze+rD4BXByn5wBccUuXLpXD4dCcOXPyTZsxY4YcDofi4+MLdZ1VqlRRuXLllJaWZo3VrFlT1atXd6lzOBzq1q2bMjMztWfPngKXdfLkSWVnZ7u1/nfeeUehoaEaNGiQjDHKyMgosM7pdEqSQkJCXMbDwsIkSb6+vi61wcHB8vb2tsY8PDxUqVIllzoAhYPQBOCK69ChgyIiIjR9+vR806ZPn65atWopMjJSmZmZ+v333209CpKWlqajR49q8+bNevTRR+V0OtWpU6c/7S8lJUWSVKlSpXzT+vbtq4CAAPn4+Khjx45at26drW2OjY1Vy5Yt9e9//1uVK1dW+fLlFRYWpvfee8+lrkWLFvLz89PIkSO1ZMkSHTx4UHFxcXr++efVsmVLRUVFWbUdOnRQUlKSRo4cqV27dmn37t16+eWXtW7dOj3//PO2+gLghuI+1AXg2jRixAjj7e1t0tLSrLEjR44YDw8PM3r0aGOMMVOnTjWSbD0KUqdOHWu6v7+/efHFF01OTs4l+zp27JipUqWKadeuncv4ypUrzf33328++eQT89///teMGzfOVKxY0fj4+JjExMRLLvP48eNGkqlYsaLx9/c3b7zxhpk5c6bp3LmzkWQmTZrkUj9v3jwTFhbmsn3R0dHm5MmTLnUZGRnmgQceMA6Hw6orV66cmTt37iX7AXB5HMYYc4VzGgBo+/btqlevnqZMmaJ+/fpJkt577z099dRT2rlzp2644QYdPnxYSUlJtpZ34RGYPPHx8XI6ndqzZ4+mTp2q9u3ba9y4cfL09CxwGbm5ueratauWLFmiNWvWWBeMX8yuXbvUuHFjtW/fXgsXLrxo3YEDB1StWjVJ0tdff60HH3zQWl+jRo3kdDp14MABq37NmjUaO3asbr75ZjVo0EAbNmzQhAkT1KVLF82aNcuqy87O1tixY5WcnKz77rtPOTk5mjx5shITE7V48WK1adPmkv0DcFNxpzYA166WLVuajh07Ws/btGlj2rRpUyTrOn78uAkJCTHPPPPMRWuefPJJI8l8/vnntpfbo0cP4+XlZbKzsy9ac/ToUSPJeHp65qsbO3askWT27dtnjDFm9+7dply5cuY///mPS920adOMJPPDDz9YY48//rhp0qSJy9Gzc+fOmRtvvNG0atXK9jYAsIdrmgAUm969eysuLk6//fabdu/erVWrVqlXr17W9DNnziglJcXW488EBwfrtttuK/A6KkkaO3asPvjgA40fP14PPfSQ7W2IiIjQuXPndOrUqYvWVKhQQT4+PqpYsaLKli3rMq1KlSqSpBMnTkiSpk2bprNnz+quu+5yqbvnnnskSStXrpQknTt3Tp988om6du2qMmX+91bu6empO++8U+vWrdO5c+dsbweAP8d9mgAUmx49emjo0KH66quvdObMGXl6elqnrqTzN4Ls27evrWUZG1canDlzRunp6fnG33//fY0ZM0aDBw/WsGHD7G+ApD179sjHx0f+/v4XrSlTpoyaNm2qtWvX6ty5c/Ly8rKmHTp0SJJUuXJlSVJqaqqMMcrJyXFZRlZWliRZ39o7duyYsrOz89Xl1ebm5hY4DcDlIzQBKDaVKlXSnXfeqS+//FJnz55V586dXb6xFh0drcWLF7u93CNHjlhHcPL8+uuvio2NVYsWLVzGZ86cqaeffloxMTF66623LrrMo0ePWsEmz8aNG/Xdd9/pzjvvdDnas3//fp0+fVp169a1xh588EGtWrVKn332mfr37y9JOnv2rKZPn6769esrPDxcklS7dm0ZY/TNN9/o4Ycftub/6quvJEnNmjWTdP4IVVBQkObMmaOXXnrJCmIZGRn6/vvvVbduXW47ABQyLgQHUKxmz56t7t27SzofYB544IG/vMyQkBB16tRJTZs2VXBwsHbu3KlPPvlEp0+fVmxsrNq2bSvp/AXX7dq1U2BgoF5//fV8F4i3bdtW119/vSTptttuk6+vr9q2basqVapo69atmjx5sjw9PRUfH6969epZ83Xo0EFxcXEuR7/OnDmjli1baseOHRo0aJCqVaumL774QomJifr+++915513Sjp/BKlhw4Y6fvy4/vnPf6pBgwZKTEzUlClTVLduXSUmJloB6dVXX9WLL76oZs2aqXfv3srJydEnn3yibdu26csvv1RMTMxf3pcALlCcF1QBQGZmpgkODjaBgYHmzJkzhbLM0aNHmxYtWpjg4GDj4eFhwsPDTY8ePcymTZtc6v7slgZTp061aidOnGhatWplKlSoYDw8PExYWJjp1auX2blzZ77133rrrQXeBiE1NdX06dPHVKhQwXh7e5vWrVubhQsX5qv77bffzCOPPGJq1qxpvLy8TFhYmOnfv785evRovtrp06ebVq1amaCgIOPr62tat26d7yJyAIWDI00AilV2drbCw8N1991365NPPinudgDgovj2HIBiNXfuXB09elS9e/cu7lYA4JI40gSgWKxevVqbNm3Syy+/rEqVKikxMbG4WwKAS+JIE4Bi8eGHH+qJJ55QlSpV9Pnnnxd3OwDwpzjSBAAAYANHmgAA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PbRt2zbVr19fa9euVYsWLSRJCxcuVJcuXfTbb78pPDxcH374oV544QWlpKRYPw8zfPhwzZ07V9u3b7fVK6fnAAAofYr0Pk1lytg7OOVwOAr8uRV31K9fX9HR0frtt98UFxen6667Tk8++aT69+8vSdqzZ49q1aql9evXq2nTptZ8t956q5o2baqJEyfq008/1TPPPKMTJ05Y07Ozs+Xj46NZs2bp3nvvVe/eveV0OjV37lyrZunSpbrtttt0/PhxlyNbeTIzM5WZmWk9dzqdioiIIDQBAFCKFOk1Tbm5ubYefzUwSedD0Ycffqgbb7xRixYt0hNPPKGnn35an332mSQpJSVFkhQSEuIyX0hIiDUtJSUl313KPTw8VKFCBZeagpZx4Tr+aNy4cQoMDLQeERERf3FrAQBASeZ2aLqScnNz1bx5c7322mtq1qyZHnvsMfXv31+TJk0q7tY0YsQIpaenW48DBw4Ud0sAAKAIlejQFBYWpvr167uM1atXT/v375ckhYaGSpJSU1NdalJTU61poaGhOnLkiMv07OxsHT9+3KWmoGVcuI4/8vb2VkBAgMsDAABcvUp0aLr55puVnJzsMrZjxw5Vr15dklSzZk2FhoYqNjbWmu50OrV69WpFRkZKkiIjI5WWlqaEhASrZsmSJcrNzVXr1q2tmuXLlysrK8uqWbx4serUqVPg9UwAAODaU6JD05AhQ7Rq1Sq99tpr2rVrl2bMmKHJkydrwIABks5fbD548GC98sor+u6777R582b17t1b4eHh6tatm6TzR6Y6d+6s/v37a82aNVq5cqUGDhyoHj16WN/0+8c//iEvLy/169dPSUlJmjlzpiZOnKihQ4cW16YDAICSxpRw33//vWnYsKHx9vY2devWNZMnT3aZnpuba0aOHGlCQkKMt7e36dSpk0lOTnapOXbsmOnZs6fx9/c3AQEBpm/fvubkyZMuNRs3bjS33HKL8fb2Ntddd50ZP368W32mp6cbSSY9Pf3yNhQAAFxx7nx+27rlgNPptB3CrtVre7hPEwAApY87n98edhYYFBQkh8Nha+WFcasBAACAksZWaFq6dKn196+//qrhw4fr4Ycfti62jo+P12effaZx48YVTZcAAADFzO07gnfq1EmPPvqoevbs6TKed5H2smXLCrO/UoPTcwAAlD5Fekfw+Ph46zfcLtSiRQutWbPG3cUBAACUCm6HpoiICH388cf5xqdMmcJPiQAAgKuWrWuaLvT222/r/vvv14IFC6ybQ65Zs0Y7d+7U7NmzC71BAACAksDtI01dunTRzp07dc899+j48eM6fvy47r77bu3YsUNdunQpih4BAACKnVtHmrKystS5c2dNmjRJr776alH1BAAAUOK4daTJ09NTmzZtKqpeAAAASiy3T8/16tVLn3zySVH0AgAAUGK5fSF4dna2Pv30U/3000+66aab5Ofn5zL9rbfeKrTmAAAASgq3Q9OWLVvUvHlzSdKOHTtcptn9qRUAAIDSxu3QdOFPqgAAAFwr3L6mCQAA4Frk9pEmSVq3bp2++eYb7d+/X+fOnXOZ9u233xZKYwAAACWJ20eavv76a7Vt21bbtm3TnDlzlJWVpaSkJC1ZskSBgYFF0SMAAECxczs0vfbaa3r77bf1/fffy8vLSxMnTtT27dv1wAMPqFq1akXRIwAAQLFzOzTt3r1bXbt2lSR5eXnp1KlTcjgcGjJkiCZPnlzoDQIAAJQEboem4OBgnTx5UpJ03XXXacuWLZKktLQ0nT59unC7AwAAKCHcvhC8ffv2Wrx4sRo1aqS///3vGjRokJYsWaLFixerU6dORdEjAABAsXM7NL333ns6e/asJOmFF16Qp6enfvnlF91///168cUXC71BAACAksBhjDHF3cTVwOl0KjAwUOnp6QoICCjudgAAgA3ufH67fU1T7969NXXqVO3evfuyGwQAACht3A5NXl5eGjdunG688UZFRESoV69emjJlinbu3FkU/QEAAJQIl3167uDBg1q+fLni4uIUFxenHTt2KCwsTL/99lth91gqcHoOAIDSp0hPz+UJDg5WxYoVFRwcrKCgIHl4eKhy5cqXuzgAAIASze3Q9H//939q27atKlasqOHDh+vs2bMaPny4UlJStH79+qLoEQAAoNi5fXquTJkyqly5soYMGaL77rtPtWvXLqreShVOzwEAUPq48/nt9n2a1q9fr7i4OC1btkxvvvmmvLy8dOutt6pDhw7q0KEDIQoAAFyV/vJ9mjZu3Ki3335b06dPV25urnJycgqrt1KFI00AAJQ+RXqkyRij9evXa9myZVq2bJlWrFghp9Opxo0b69Zbb73spgEAAEoyt0NThQoVlJGRoSZNmujWW29V//791a5dOwUFBRVBewAAACWD26Hpyy+/VLt27TgFBQAArilu33Kga9euCggI0K5du7Ro0SKdOXNG0vnTdgAAAFcrt0PTsWPH1KlTJ9WuXVtdunTR4cOHJUn9+vXTM888U+gNAgAAlARuh6YhQ4bI09NT+/fvV7ly5azxBx98UAsXLizU5gAAAEoKt69p+vHHH7Vo0SJVrVrVZfzGG2/Uvn37Cq0xAACAksTtI02nTp1yOcKU5/jx4/L29i6UpgAAAEoat0NTu3bt9Pnnn1vPHQ6HcnNzNWHCBHXs2LFQmwMAACgp3D49N2HCBHXq1Enr1q3TuXPn9PzzzyspKUnHjx/XypUri6JHAACAYuf2kaaGDRtqx44duuWWW/S3v/1Np06d0n333af169erVq1aRdEjAABAsXPrSFNWVpY6d+6sSZMm6YUXXiiqngAAAEoct440eXp6atOmTUXVCwAAQInl9um5Xr166ZNPPimKXgAAAEosty8Ez87O1qeffqqffvpJN910k/z8/Fymv/XWW4XWHAAAQEnhdmjasmWLmjdvLknasWOHyzSHw1E4XQEAAJQwbp+eW7p06UUfS5YsKYoeLePHj5fD4dDgwYOtsbNnz2rAgAGqWLGi/P39df/99ys1NdVlvv3796tr164qV66cqlSpoueee07Z2dkuNcuWLVPz5s3l7e2tG264QdOmTSvSbQEAAKWL26GpuKxdu1YfffSRGjdu7DI+ZMgQff/995o1a5bi4uJ06NAh3Xfffdb0nJwcde3aVefOndMvv/yizz77TNOmTdOoUaOsmr1796pr167q2LGjNmzYoMGDB+vRRx/VokWLrtj2AQCAks1hjDHF3cSfycjIUPPmzfXBBx/olVdeUdOmTfXOO+8oPT1dlStX1owZM9S9e3dJ0vbt21WvXj3Fx8erTZs2WrBgge666y4dOnRIISEhkqRJkyZp2LBhOnr0qLy8vDRs2DDNnz9fW7ZssdbZo0cPpaWl2f4RYqfTqcDAQKWnpysgIKDwdwIAACh07nx+l4ojTQMGDFDXrl0VFRXlMp6QkKCsrCyX8bp166patWqKj4+XJMXHx6tRo0ZWYJKk6OhoOZ1OJSUlWTV/XHZ0dLS1jIJkZmbK6XS6PAAAwNXL7QvBr7Svv/5aiYmJWrt2bb5pKSkp8vLyUlBQkMt4SEiIUlJSrJoLA1Pe9Lxpl6pxOp06c+aMfH1986173LhxGjt27GVvFwAAKF1K9JGmAwcOaNCgQZo+fbp8fHyKux0XI0aMUHp6uvU4cOBAcbcEAACKUIkOTQkJCTpy5IiaN28uDw8PeXh4KC4uTv/+97/l4eGhkJAQnTt3TmlpaS7zpaamKjQ0VJIUGhqa79t0ec//rCYgIKDAo0yS5O3trYCAAJcHAAC4epXo0NSpUydt3rxZGzZssB4tWrRQTEyM9benp6diY2OteZKTk7V//35FRkZKkiIjI7V582YdOXLEqlm8eLECAgJUv359q+bCZeTV5C0DAACgRF/TVL58eTVs2NBlzM/PTxUrVrTG+/Xrp6FDh6pChQoKCAjQU089pcjISLVp00aSdMcdd6h+/fp66KGHNGHCBKWkpOjFF1/UgAED5O3tLUn65z//qffee0/PP/+8HnnkES1ZskTffPON5s+ff2U3GAAAlFglOjTZ8fbbb6tMmTK6//77lZmZqejoaH3wwQfW9LJly2revHl64oknFBkZKT8/P/Xp00cvvfSSVVOzZk3Nnz9fQ4YM0cSJE1W1alVNmTJF0dHRxbFJAACgBCoV92kqDbhPEwAApc9Vd58mAACA4kZoAgAAsIHQBAAAYAOhCQAAwAZCEwAAgA2EJgAAABsITQAAADYQmgAAAGwgNAEAANhAaAIAALCB0AQAAGADoQkAAMAGQhMAAIANhCYAAAAbCE0AAAA2EJoAAABsIDQBAADYQGgCAACwgdAEAABgA6EJAADABkITAACADYQmAAAAGwhNAAAANhCaAAAAbCA0AQAA2EBoAgAAsIHQBAAAYAOhCQAAwAZCEwAAgA2EJgAAABsITQAAADYQmgAAAGwgNAEAANhAaAIAALCB0AQAAGADoQkAAMAGQhMAAIANhCYAAAAbCE0AAAA2EJoAAABsIDQBAADYQGgCAACwgdAEAABgA6EJAADABkITAACADYQmAAAAG0p0aBo3bpxatmyp8uXLq0qVKurWrZuSk5Ndas6ePasBAwaoYsWK8vf31/3336/U1FSXmv3796tr164qV66cqlSpoueee07Z2dkuNcuWLVPz5s3l7e2tG264QdOmTSvqzQMAAKVIiQ5NcXFxGjBggFatWqXFixcrKytLd9xxh06dOmXVDBkyRN9//71mzZqluLg4HTp0SPfdd581PScnR127dtW5c+f0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+OOPZteuXebYsWPm6aefNuHh4eaHH34wSUlJpk+fPiY4ONgcO3bMZb7WrVubZcuWmaSkJNOuXTvTtm1ba72jR482/v7+pnv37iYpKcl89913xsvLy0RHR5unnnrKbN++3Xz66adGksuPVkdFRZm7777brF271uzYscM888wzpmLFita685Z73333mc2bN5vly5eb0NBQ83//93/GGGPS0tJMZGSk6d+/vzl8+LA5fPiwyc7Ozre/165da8qWLWtmzJhhfv31V5OYmGgmTpx4yWWcOHHCVK5c2YwYMcJs27bNJCYmmttvv9107NjRWu6tt95q/P39zaBBg8z27dvNl19+acqVK2cmT578p+sFrgRJZs6cOdbzffv2mbJly5qDBw+61HXq1MmMGDEi3/xnzpwxwcHB5vXXX3d/3W7PAeCqlJWVZfbu3Ws2btxoPD09zcaNG82uXbuMv7+/iYuLM3v37jVHjx696Py1atUyM2bMcBl7+eWXTWRkpDHmf4FnypQp1vSkpCQjyWzbts0YY8ycOXOMv7+/OXXqlDHGmPT0dOPj42MWLFjgsow/hqa5c+day8zIyDCenp5m+vTp1ti5c+dMeHi4mTBhgst8P/30k1Uzf/58I8mcOXPGGHM+3JQrV844nU6rJjo62tSoUcPk5ORYY3Xq1DHjxo0zxhjz888/m4CAAHP27Nl8++ajjz666HKfe+4507p1a+v5rbfeagYNGnSRPX3e7NmzTUBAgMtyLlTQMl5++WVzxx13uIwdOHDASDLJycnWfPXq1TO5ublWzbBhw0y9evVsrRcoan8MTfPmzTOSjJ+fn8vDw8PDPPDAA/nmnzFjhvHw8DApKSlur7vgCwMAXHM8PDxUo0YNffPNN2rZsqUaN26slStXKiQkRO3bt7/kvKdOndLu3bvVr18/9e/f3xrPzs5WYGCgS23jxo2tv8PCwiRJR44cUd26ddWlSxd5enrqu+++U48ePTR79mwFBAQoKirqkutv0aKF9ffu3buVlZXlckrR09NTrVq10rZt22z1knf9Vo0aNVS+fHmrJiQkRGXLllWZMmVcxo4cOSJJ2rhxozIyMlSxYkWX9Zw5c0a7d++2nv9xuWFhYdYy7Lr99ttVvXp1XX/99ercubM6d+6se++9V+XKlbvoPBs3btTSpUvl7++fb9ru3btVu3ZtSVKbNm3kcDisaZGRkXrzzTeVk5NzWesFilJGRobKli2rhIQElS1b1mVaQa/1KVOm6K677lJISIjb6yI0AZAkNWjQQPv27VNWVpZyc3Pl7++v7OxsZWdny9/fX9WrV1dSUlKB82ZkZEiSPv74Y7Vu3dpl2h/fxDw9Pa2/8z6Yc3NzJUleXl7q3r27ZsyYoR49emjGjBl68MEHL3rhdx53vzZsp5c/Ts+rKWgsb56MjAyFhYW5XICaJygo6JLLvXC9dpQvX16JiYlatmyZfvzxR40aNUpjxozR2rVrXdZ1oYyMDN199916/fXX803LC41FsV6gKDVr1kw5OTk6cuTIn16jtHfvXi1dulTffffdZa2L0ARAkvTDDz8oKytLnTp10oQJE3TTTTepR48eevjhh9W5c+d8H/QXCgkJUXh4uPbs2aOYmJi/1EdMTIxuv/12JSUlacmSJXrllVfcmr9WrVry8vLSypUrVb16dUlSVlaW1q5dW+RfwW/evLlSUlKso3aXy8vLSzk5OX9a5+HhoaioKEVFRWn06NEKCgrSkiVLdN999xW4jObNm2v27NmqUaPGJYPo6tWrXZ6vWrVKN954oxWAL7VeoChkZGRo165d1vO9e/dqw4YNqlChgmrXrq2YmBj17t1bb775ppo1a6ajR48qNjZWjRs3VteuXa35Pv30U4WFhenOO++8rD4ITQAkSdWrV1dKSopSU1P1t7/9TQ6HQ0lJSbr//vttHYUYO3asnn76aQUGBqpz587KzMzUunXrdOLECQ0dOtR2H+3bt1doaKhiYmJUs2bNfEeu/oyfn5+eeOIJPffcc9atEiZMmKDTp0+7/fVid0VFRSkyMlLdunXThAkTVLt2bR06dEjz58/Xvffe63Ia8VJq1Kih1atX69dff5W/v78qVKjgckpQkubNm6c9e/aoffv2Cg4O1g8//KDc3FzVqVPnossYMGCAPv74Y/Xs2VPPP/+8KlSooF27dunrr7/WlClTrFC0f/9+DR06VI8//rgSExP17rvv6s0337S1XqAorFu3Th07drSe572n9OnTR9OmTdPUqVP1yiuv6JlnntHBgwdVqVIltWnTRnfddZc1T25urqZNm6aHH3443xFwuwhNACzLli1Ty5Yt5ePjo59//llVq1a1fdrm0UcfVbly5fTGG2/oueeek5+fnxo1auT20R2Hw6GePXtqwoQJGjVq1GVshTR+/Hjl5ubqoYce0smTJ9WiRQstWrRIwcHBl7U8uxwOh3744Qe98MIL6tu3r44eParQ0FC1b9/eresnnn32WfXp00f169fXmTNntHfv3nxHroKCgvTtt99qzJgxOnv2rG688UZ99dVXatCgwSWXsXLlSg0bNkx33HGHMjMzVb16dXXu3NkllPXu3VtnzpxRq1atVLZsWQ0aNEiPPfaYrfUCRaFDhw4ut734I09PT40dO1Zjx469aE2ZMmV04MCBv9SHw1yqCwDANaVDhw5q2rSp3nnnneJuBShxuLklAACADYQmAAAAGzg9BwAAYANHmgAAAGwgNAEAANhAaAIAALCB0AQAAGADoQkAAMAGQhMAAIANhCYAAAAbCE0AAAA2EJoAAABs+H9DLTEkP513igAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAk0AAAHHCAYAAACiOWx7AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAABNwElEQVR4nO3dd3wUdf7H8feSTkISEiBFQhGlSROREBREiQbhVFRUuCCoiJ4HSrEA50/KWUA4C1bkULCAFeEUBER6CS30CAEhdBIQSJZQUr+/P7jMsSTgLCYkgdfz8dgH2e98ZuYzc3u7b2dmZx3GGCMAAABcUIXSbgAAAKA8IDQBAADYQGgCAACwgdAEAABgA6EJAADABkITAACADYQmAAAAGwhNAAAANhCaAAAAbCA0AQAA2EBoAlBuJScna8CAAWrdurV8fX3lcDi0a9euQnVHjhzRmDFj1LZtW1WtWlXBwcFq1aqVvv766yKXm5WVpUGDBikyMlJ+fn6Kjo7W3Llzi6zNzs7Wa6+9pvr168vX11dhYWHq1KmT9u3bZ2sbPv74YzVo0EC+vr669tpr9e6775639uuvv1ZMTIz8/f0VHBys1q1ba/78+db0SZMmyeFwnPcxefJkWz0BKJpnaTcAABcrISFB77zzjho2bKgGDRpo/fr156178cUX1bFjR/3f//2fPD09NXXqVHXt2lW//vqrRowY4VL/yCOP6LvvvlP//v117bXXatKkSerYsaMWLFigm2++2arLyclRp06dtHz5cvXu3VtNmjTRsWPHtHLlSmVkZKh69eoX7P+jjz7S3/72N91///0aOHCglixZomeeeUYnT57UoEGDXGqHDx+uf/7zn+rSpYseeeQR5eTkaPPmzdq/f79V07ZtW33++eeF1vPWW29pw4YNat++/R/tUgAXYgCgnDpy5IhxOp3GGGPGjBljJJmUlJRCdTt37jS7du1yGcvPzze33Xab8fHxMZmZmdb4ypUrjSQzZswYa+zUqVOmTp06JiYmxmUZr7/+uvHy8jIrV650u/eTJ0+a0NBQ06lTJ5fx+Ph44+/vb44ePWqNJSQkGIfDYd58882LWk+lSpXM7bff7va8AFxxeg5AiVmwYIEcDoemTZtWaNqUKVPkcDiUkJBw0csPCQlRpUqV/rCudu3aqlmzpsuYw+FQ586dlZWVpZ07d1rj3333nTw8PPTEE09YY76+vurVq5cSEhK0d+9eSVJ+fr7Gjh2re++9Vy1btlRubq5Onjxpu/cFCxboyJEj+vvf/+4y3qdPH504cUIzZ860xt5++22Fh4erX79+MsYoMzPT9np+/PFHHT9+XPHx8bbnAVA0QhOAEtOuXTtFRUUVeS3N5MmTVadOHcXExCgrK0u///67rUdxSk1NlSRVqVLFGlu3bp3q1q2rwMBAl9qWLVtKknUK8Ndff9WBAwfUpEkTPfHEE/L395e/v7+aNGmiBQsW/OG6161bJ0lq0aKFy/gNN9ygChUqWNMlad68ebrxxhv1zjvvqGrVqqpUqZIiIiL03nvv/eF6Jk+eLD8/P913331/WAvgwrimCUCJcTgc6t69u958801lZGQoKChIknT48GH9/PPPevHFFyVJX375pR599FFbyzTGFEtvR48e1YQJE9SmTRtFRERY4wcPHnR5XqBg7MCBA5Kk7du3SzpzvVBISIg++ugjSdJrr72mDh06aPXq1WrSpMl513/w4EF5eHioWrVqLuPe3t4KDQ211nPs2DH9/vvvWrZsmebPn69hw4apRo0amjhxop5++ml5eXnpySefPO82zp49W507d7Z1RA7AhRGaAJSoHj16aOTIkfruu+/Uq1cvSWe+BZabm6vu3btLkuLi4s777bSSkJ+fr/j4eKWnpxf6ttqpU6fk4+NTaB5fX19ruiTrFNnx48e1bt06RUVFSZJuu+02XXPNNRo9erS++OKL8/Zw6tQpeXt7FznN19e30HqOHDmir776Sg899JAkqUuXLmrcuLFeeeWV84am7777TtnZ2ZyaA4oJoQlAiapfv75uvPFGTZ482QpNkydPVqtWrXTNNddIOnMUp6ijOyXl6aef1uzZs/XZZ5+padOmLtP8/PyUlZVVaJ7Tp09b08/+96abbrICkyTVqFFDN998s5YvX37BHvz8/JSdnV3ktNOnTxdaj5eXl7p06WLVVKhQQQ899JCGDRumPXv2qEaNGoWWM3nyZIWEhOjOO++8YC8A7CE0AShxPXr0UL9+/bRv3z5lZWVpxYoVLtfjnDp1ShkZGbaWFR4e/qd6GTFihD744AONGjVKDz/8cKHpERERLl/jL3Dw4EFJUmRkpMu/YWFhhWqrVavmck1SUSIiIpSXl6dDhw65nKLLzs7WkSNHrOWHhITI19dXwcHB8vDwKLQe6cwpvHND0549e7RkyRI98cQT8vLyumAvAOzhQnAAJa5r167y8PDQl19+qcmTJ8vLy8s6zSSdOV1XcLTpjx5/xvvvv6/hw4erf//+he6DVKBZs2batm2bnE6ny/jKlSut6ZLUuHFjeXl5FRmwDhw4oKpVq16wl4LlrFmzxmV8zZo1ys/Pt6ZXqFBBzZo10+HDhwsdmSq47qmodX355ZcyxnBqDihGHGkCUOKqVKmiO++8U1988YVOnz6tDh06uHxj7VJc0/T111/rmWeeUXx8vN58883z1nXp0kX/+te/NH78eD333HOSztwhfOLEiYqOjrZOxVWqVEkdO3bUjBkztHXrVtWvX1+StGXLFi1fvtzlOqOTJ09qz549qlKlirXdt912m0JCQvThhx+qY8eOVu2HH36oihUrqlOnTtbYQw89pBUrVujTTz9V7969JZ05hTd58mQ1bNjQOip1tilTplinCgEUD0ITgEuiR48e1jU5L7/8ssu0iz2KlJGRYV3IvWzZMknSe++9p+DgYAUHB6tv376SpFWrVqlHjx4KDQ1V+/btC90CoXXr1rr66qslSdHR0XrggQc0ZMgQHTp0SNdcc40+/fRT7dq1Sx9//LHLfK+99prmzZun2267Tc8884wk6Z133lFISIj+8Y9/WHWrVq3SrbfeqmHDhmn48OGSzlyr9PLLL6tPnz564IEHFBcXpyVLluiLL77Qq6++qpCQEGv+J598UhMmTFCfPn20bds21ahRQ59//rl2796tH3/8sdB+2bx5szZu3KjBgwfL4XC4vV8BnEcp31wTwBUiKyvLVK5c2QQFBZlTp04VyzJTUlKMpCIfNWvWtOomTpx43jpJZuLEiS7LPXXqlHnuuedMeHi48fHxMTfeeKOZPXt2kT0kJiaa2NhY4+/vbypVqmTuueces23bNpeaBQsWGElm2LBhheYfP368qVevnvH29jZ16tQxb731lsnPzy9Ul5aWZnr27GlCQkKMj4+PiY6OPm9PgwcPNpLMxo0bL7wDAbjFYUwx3fQEAC4gNzdXkZGRuuuuuwodsQGA8oALwQFcEtOnT9fhw4fVo0eP0m4FAC4KR5oAlKiVK1dq48aNevnll1WlShWtXbu2tFsCgIvCkSYAJerDDz/UU089pWrVqumzzz4r7XYA4KJxpAkAAMAGjjQBAADYQGgCAACwgZtbFpP8/HwdOHBAlSpV4mZyAACUE8YYHT9+XJGRkapQ4cLHkghNxeTAgQMuv3QOAADKj71796p69eoXrCE0FZNKlSpJOrPTAwMDS7kbAABgh9PpVFRUlPU5fiGEpmJScEouMDCQ0AQAQDlj59IaLgQHAACwgdAEAABgA6EJAADABkITAACADYQmAAAAGwhNAAAANhCaAAAAbCA0AQAA2EBoAgAAsIHQBAAAYAOhCQAAwAZCEwAAgA2EJgAAABsITQAAADYQmgAAAGwgNAEAANhAaAIAALCB0AQAAGADoQkAAMAGQhMAAIANhCYAAAAbSjU0LV68WHfddZciIyPlcDg0ffp0a1pOTo4GDRqkxo0by9/fX5GRkerRo4cOHDjgsoyjR48qPj5egYGBCg4OVq9evZSZmelSs3HjRrVp00a+vr6KiorS6NGjC/Xy7bffqn79+vL19VXjxo31008/lcg2AwCA8qlUQ9OJEyfUtGlTvf/++4WmnTx5UmvXrtVLL72ktWvX6vvvv1dycrLuvvtul7r4+HglJSVp7ty5mjFjhhYvXqwnnnjCmu50OnXHHXeoZs2aSkxM1JgxYzR8+HCNHz/eqlm+fLm6deumXr16ad26dercubM6d+6szZs3l9zGAwCAcsVhjDGl3YQkORwOTZs2TZ07dz5vzerVq9WyZUvt3r1bNWrU0JYtW9SwYUOtXr1aLVq0kCTNnj1bHTt21L59+xQZGakPP/xQL774olJTU+Xt7S1JGjx4sKZPn66tW7dKkh566CGdOHFCM2bMsNbVqlUrNWvWTOPGjbPVv9PpVFBQkDIyMhQYGHiRewEAAFxK7nx+l6trmjIyMuRwOBQcHCxJSkhIUHBwsBWYJCk2NlYVKlTQypUrrZq2bdtagUmS4uLilJycrGPHjlk1sbGxLuuKi4tTQkJCCW8RAAAoLzxLuwG7Tp8+rUGDBqlbt25WEkxNTVW1atVc6jw9PRUSEqLU1FSrpnbt2i41YWFh1rTKlSsrNTXVGju7pmAZRcnKylJWVpb13Ol0XvzGAQCAMq9cHGnKycnRgw8+KGOMPvzww9JuR5I0cuRIBQUFWY+oqKjSbgkAAJSgMh+aCgLT7t27NXfuXJfzjeHh4Tp06JBLfW5uro4eParw8HCrJi0tzaWm4Pkf1RRML8qQIUOUkZFhPfbu3XvxGwkAAMq8Mh2aCgLT9u3b9csvvyg0NNRlekxMjNLT05WYmGiNzZ8/X/n5+YqOjrZqFi9erJycHKtm7ty5qlevnipXrmzVzJs3z2XZc+fOVUxMzHl78/HxUWBgoMsDAABcvko1NGVmZmr9+vVav369JCklJUXr16/Xnj17lJOToy5dumjNmjWaPHmy8vLylJqaqtTUVGVnZ0uSGjRooA4dOqh3795atWqVli1bpr59+6pr166KjIyUJP31r3+Vt7e3evXqpaSkJH399dcaO3asBg4caPXRr18/zZ49W2+88Ya2bt2q4cOHa82aNerbt+8l3ycAAKCMMqVowYIFRlKhR8+ePU1KSkqR0ySZBQsWWMs4cuSI6datmwkICDCBgYHm0UcfNcePH3dZz4YNG8zNN99sfHx8zFVXXWVGjRpVqJdvvvnG1K1b13h7e5vrrrvOzJw5061tycjIMJJMRkbGRe0LAABw6bnz+V1m7tNU3nGfJgAAyp/L9j5NAAAApYXQBAAAYAOhCQAAwAZCEwAAgA2EJgAAABsITQAAADYQmgAAAGwgNAEAANhAaAIAALCB0AQAAGADoQkAAMAGQhMAAIANhCYAAAAbCE0AAAA2EJoAAABsIDQBAADYQGgCAACwgdAEAABgA6EJAADABkITAACADYQmAAAAGwhNAAAANhCaAAAAbCA0AQAA2EBoAgAAsIHQBAAAYAOhCQAAwAZCEwAAgA2EJgAAABsITQAAADYQmgAAAGwgNAEAANhAaAIAALCB0AQAAGADoQkAAMAGQhMAAIANhCYAAAAbCE0AAAA2EJoAAABsIDQBAADYQGgCAACwgdAEAABgA6EJAADABkITAACADYQmAAAAGwhNAAAANpRqaFq8eLHuuusuRUZGyuFwaPr06S7TjTEaOnSoIiIi5Ofnp9jYWG3fvt2l5ujRo4qPj1dgYKCCg4PVq1cvZWZmutRs3LhRbdq0ka+vr6KiojR69OhCvXz77beqX7++fH191bhxY/3000/Fvr0AAKD8KtXQdOLECTVt2lTvv/9+kdNHjx6td955R+PGjdPKlSvl7++vuLg4nT592qqJj49XUlKS5s6dqxkzZmjx4sV64oknrOlOp1N33HGHatasqcTERI0ZM0bDhw/X+PHjrZrly5erW7du6tWrl9atW6fOnTurc+fO2rx5c8ltPAAAKF9MGSHJTJs2zXqen59vwsPDzZgxY6yx9PR04+PjY7788ktjjDG//vqrkWRWr15t1cyaNcs4HA6zf/9+Y4wxH3zwgalcubLJysqyagYNGmTq1atnPX/wwQdNp06dXPqJjo42Tz75pO3+MzIyjCSTkZFhex4AAFC63Pn8LrPXNKWkpCg1NVWxsbHWWFBQkKKjo5WQkCBJSkhIUHBwsFq0aGHVxMbGqkKFClq5cqVV07ZtW3l7e1s1cXFxSk5O1rFjx6yas9dTUFOwnqJkZWXJ6XS6PAAAwOWrzIam1NRUSVJYWJjLeFhYmDUtNTVV1apVc5nu6empkJAQl5qilnH2Os5XUzC9KCNHjlRQUJD1iIqKcncTAQBAOVJmQ1NZN2TIEGVkZFiPvXv3lnZLAACgBJXZ0BQeHi5JSktLcxlPS0uzpoWHh+vQoUMu03Nzc3X06FGXmqKWcfY6zldTML0oPj4+CgwMdHkAAIDLV5kNTbVr11Z4eLjmzZtnjTmdTq1cuVIxMTGSpJiYGKWnpysxMdGqmT9/vvLz8xUdHW3VLF68WDk5OVbN3LlzVa9ePVWuXNmqOXs9BTUF6wEAACjV0JSZman169dr/fr1ks5c/L1+/Xrt2bNHDodD/fv31yuvvKIffvhBmzZtUo8ePRQZGanOnTtLkho0aKAOHTqod+/eWrVqlZYtW6a+ffuqa9euioyMlCT99a9/lbe3t3r16qWkpCR9/fXXGjt2rAYOHGj10a9fP82ePVtvvPGGtm7dquHDh2vNmjXq27fvpd4lAACgrLoE3+Y7rwULFhhJhR49e/Y0xpy57cBLL71kwsLCjI+Pj2nfvr1JTk52WcaRI0dMt27dTEBAgAkMDDSPPvqoOX78uEvNhg0bzM0332x8fHzMVVddZUaNGlWol2+++cbUrVvXeHt7m+uuu87MnDnTrW3hlgMAAJQ/7nx+O4wxphQz22XD6XQqKChIGRkZXN8EAEA54c7nd5m9pgkAAKAsITQBAADYQGgCAACwgdAEAABgA6EJAADABkITAACADYQmAAAAGwhNAAAANhCaAAAAbCA0AQAA2EBoAgAAsIHQBAAAYAOhCQAAwAZCEwAAgA2EJgAAABsITQAAADYQmgAAAGwgNAEAANhAaAIAALCB0AQAAGADoQkAAMAGQhMAAIANhCYAAAAbCE0AAAA2EJoAAABsIDQBAADYQGgCAACw4aJC05IlS9S9e3fFxMRo//79kqTPP/9cS5cuLdbmAAAAygq3Q9PUqVMVFxcnPz8/rVu3TllZWZKkjIwMvfbaa8XeIAAAQFngdmh65ZVXNG7cOP373/+Wl5eXNX7TTTdp7dq1xdocAABAWeF2aEpOTlbbtm0LjQcFBSk9Pb04egIAAChz3A5N4eHh+u233wqNL126VFdffXWxNAUAAFDWuB2aevfurX79+mnlypVyOBw6cOCAJk+erOeee05PPfVUSfQIAABQ6jzdnWHw4MHKz89X+/btdfLkSbVt21Y+Pj567rnn9PTTT5dEjwAAAKXOYYwxFzNjdna2fvvtN2VmZqphw4YKCAgo7t7KFafTqaCgIGVkZCgwMLC02wEAADa48/nt9pGmAt7e3mrYsOHFzg4AAFCu2ApN9913n+0Ffv/99xfdDAAAQFll60LwoKAg6xEYGKh58+ZpzZo11vTExETNmzdPQUFBJdYoAABAabJ1pGnixInW34MGDdKDDz6ocePGycPDQ5KUl5env//971zLAwAALltuXwhetWpVLV26VPXq1XMZT05OVuvWrXXkyJFibbC84EJwAADKH3c+v92+T1Nubq62bt1aaHzr1q3Kz893d3EAAADlgtvfnnv00UfVq1cv7dixQy1btpQkrVy5UqNGjdKjjz5a7A0CAACUBW6Hpn/9618KDw/XG2+8oYMHD0qSIiIi9Pzzz+vZZ58t9gYBAADKgou+uaV05jygJK7hEdc0AQBQHl2Sm1sePnxYycnJkqT69eurSpUqF7soAACAMs/tC8FPnDihxx57TBEREWrbtq3atm2riIgI9erVSydPniyJHgEAAEqd26Fp4MCBWrRokX788Uelp6crPT1d//nPf7Ro0aJiv6YpLy9PL730kmrXri0/Pz/VqVNHL7/8ss4+o2iM0dChQxURESE/Pz/FxsZq+/btLss5evSo4uPjFRgYqODgYPXq1UuZmZkuNRs3blSbNm3k6+urqKgojR49uli3BQAAlHPGTaGhoWbBggWFxufPn2+qVKni7uIu6NVXXzWhoaFmxowZJiUlxXz77bcmICDAjB071qoZNWqUCQoKMtOnTzcbNmwwd999t6ldu7Y5deqUVdOhQwfTtGlTs2LFCrNkyRJzzTXXmG7dulnTMzIyTFhYmImPjzebN282X375pfHz8zMfffSR7V4zMjKMJJORkVE8Gw8AAEqcO5/fbocmPz8/8+uvvxYa37x5s6lYsaK7i7ugTp06mccee8xl7L777jPx8fHGGGPy8/NNeHi4GTNmjDU9PT3d+Pj4mC+//NIYY8yvv/5qJJnVq1dbNbNmzTIOh8Ps37/fGGPMBx98YCpXrmyysrKsmkGDBpl69erZ7pXQBABA+ePO57fbp+diYmI0bNgwnT592ho7deqURowYoZiYmOI6ACZJat26tebNm6dt27ZJkjZs2KClS5fqzjvvlCSlpKQoNTVVsbGx1jxBQUGKjo5WQkKCJCkhIUHBwcFq0aKFVRMbG6sKFSpo5cqVVk3btm3l7e1t1cTFxSk5OVnHjh0rsresrCw5nU6XBwAAuHy5/e25sWPHKi4uTtWrV1fTpk0lnQkzvr6+mjNnTrE2N3jwYDmdTtWvX18eHh7Ky8vTq6++qvj4eElSamqqJCksLMxlvrCwMGtaamqqqlWr5jLd09NTISEhLjW1a9cutIyCaZUrVy7U28iRIzVixIhi2EoAAFAeuB2aGjVqpO3bt2vy5MnWz6l069ZN8fHx8vPzK9bmvvnmG02ePFlTpkzRddddp/Xr16t///6KjIxUz549i3Vd7hoyZIgGDhxoPXc6nYqKiirFjgAAQEm6qPs0VaxYUb179y7uXgp5/vnnNXjwYHXt2lWS1LhxY+3evVsjR45Uz549FR4eLklKS0tTRESENV9aWpqaNWsmSQoPD9ehQ4dclpubm6ujR49a84eHhystLc2lpuB5Qc25fHx85OPj8+c3EgAAlAtuX9P06aefaubMmdbzF154QcHBwWrdurV2795drM2dPHlSFSq4tujh4WH9MHDt2rUVHh6uefPmWdOdTqdWrlxpXV8VExOj9PR0JSYmWjXz589Xfn6+oqOjrZrFixcrJyfHqpk7d67q1atX5Kk5AABw5XE7NL322mvWabiEhAS99957Gj16tKpUqaIBAwYUa3N33XWXXn31Vc2cOVO7du3StGnT9Oabb+ree++VJDkcDvXv31+vvPKKfvjhB23atEk9evRQZGSkOnfuLElq0KCBOnTooN69e2vVqlVatmyZ+vbtq65duyoyMlKS9Ne//lXe3t7q1auXkpKS9PXXX2vs2LEup98AAMAVzt2v5vn5+Zndu3cbY4x54YUXzMMPP2yMOXPLgeK+T5PT6TT9+vUzNWrUML6+vubqq682L774osutAfLz881LL71kwsLCjI+Pj2nfvr1JTk52Wc6RI0dMt27dTEBAgAkMDDSPPvqoOX78uEvNhg0bzM0332x8fHzMVVddZUaNGuVWr9xyAACA8sedz2+3f7C3WrVqmjNnjq6//npdf/31GjhwoB5++GHt2LFDTZs2LXSn7SsFP9gLAED5U6I/2Hv77bfr8ccf1/XXX69t27apY8eOkqSkpCTVqlXrohoGAAAo69y+pun9999XTEyMDh8+rKlTpyo0NFSSlJiYqG7duhV7gwAAAGWB26fnUDROzwEAUP4U++m5jRs3qlGjRqpQoYI2btx4wdomTZrY7xQAAKCcsBWamjVrZv0cSbNmzeRwOHT2AaqC5w6HQ3l5eSXWLAAAQGmxFZpSUlJUtWpV628AAIArja3QVLNmzSL/BgAAuFJc1G/PJScn691339WWLVsknbnr9tNPP6169eoVa3MAAABlhdu3HJg6daoaNWqkxMRENW3aVE2bNtXatWvVqFEjTZ06tSR6BAAAKHVu33KgTp06io+P1z//+U+X8WHDhumLL77Qjh07irXB8oJbDgAAUP648/nt9pGmgwcPqkePHoXGu3fvroMHD7q7OAAAgHLB7dDUrl07LVmypND40qVL1aZNm2JpCgAAoKxx+0Lwu+++W4MGDVJiYqJatWolSVqxYoW+/fZbjRgxQj/88INLLQAAwOXA7WuaKlSwd3DqSrvRJdc0AQBQ/hT7z6icLT8//6IbAwAAKK/cvqbpbKdPny6uPgAAAMo0t0NTXl6eXn75ZV111VUKCAjQzp07JUkvvfSSPv7442JvEAAAoCxwOzS9+uqrmjRpkkaPHi1vb29rvFGjRpowYUKxNgcAAFBWuB2aPvvsM40fP17x8fHy8PCwxps2baqtW7cWa3MAAABlhduhaf/+/brmmmsKjefn5ysnJ6dYmgIAAChr3A5NDRs2LPLmlt99952uv/76YmkKAACgrHH7lgNDhw5Vz549tX//fuXn5+v7779XcnKyPvvsM82YMaMkegQAACh1bh9puueee/Tjjz/ql19+kb+/v4YOHaotW7boxx9/1O23314SPQIAAJQ6t+8IjqJxR3AAAMofdz6//9TNLQEAAK4UhCYAAAAbCE0AAAA2EJoAAABscCs05eTkqE6dOtqyZUtJ9QMAAFAmuRWavLy8dPr06ZLqBQAAoMxy+/Rcnz599Prrrys3N7ck+gEAACiT3L4j+OrVqzVv3jz9/PPPaty4sfz9/V2mf//998XWHAAAQFnhdmgKDg7W/fffXxK9AAAAlFluh6aJEyeWRB8AAABl2kXdciA3N1e//PKLPvroIx0/flySdODAAWVmZhZrcwAAAGWF20eadu/erQ4dOmjPnj3KysrS7bffrkqVKun1119XVlaWxo0bVxJ9AgAAlCq3jzT169dPLVq00LFjx+Tn52eN33vvvZo3b16xNgcAAFBWuH2kacmSJVq+fLm8vb1dxmvVqqX9+/cXW2MAAABlidtHmvLz85WXl1dofN++fapUqVKxNAUAAFDWuB2a7rjjDr399tvWc4fDoczMTA0bNkwdO3Yszt4AAADKDIcxxrgzw759+xQXFydjjLZv364WLVpo+/btqlKlihYvXqxq1aqVVK9lmtPpVFBQkDIyMhQYGFja7QAAABvc+fx2OzRJZ2458NVXX2njxo3KzMxU8+bNFR8f73Jh+JWG0AQAQPnjzue32xeCS5Knp6e6d+9+Uc0BAACURxcVmpKTk/Xuu+9qy5YtkqQGDRqob9++ql+/frE2BwAAUFa4fSH41KlT1ahRIyUmJqpp06Zq2rSp1q5dq8aNG2vq1Kkl0SMAAECpc/uapjp16ig+Pl7//Oc/XcaHDRumL774Qjt27CjWBssLrmkCAKD8cefz2+0jTQcPHlSPHj0KjXfv3l0HDx50d3F/aP/+/erevbtCQ0Pl5+enxo0ba82aNdZ0Y4yGDh2qiIgI+fn5KTY2Vtu3b3dZxtGjRxUfH6/AwEAFBwerV69ehX4nb+PGjWrTpo18fX0VFRWl0aNHF/u2AACA8svt0NSuXTstWbKk0PjSpUvVpk2bYmmqwLFjx3TTTTfJy8tLs2bN0q+//qo33nhDlStXtmpGjx6td955R+PGjdPKlSvl7++vuLg4nT592qqJj49XUlKS5s6dqxkzZmjx4sV64oknrOlOp1N33HGHatasqcTERI0ZM0bDhw/X+PHji3V7AABA+eX26blx48Zp6NChevDBB9WqVStJ0ooVK/Ttt99qxIgRioyMtGrvvvvuP9Xc4MGDtWzZsiJDmnTmKFNkZKSeffZZPffcc5KkjIwMhYWFadKkSeratau2bNmihg0bavXq1WrRooUkafbs2erYsaP27dunyMhIffjhh3rxxReVmppq/TzM4MGDNX36dG3dutVWr5yeAwCg/CnR+zRVqGDv4JTD4Sjy51bc0bBhQ8XFxWnfvn1atGiRrrrqKv39739X7969JUk7d+5UnTp1tG7dOjVr1sya75ZbblGzZs00duxYffLJJ3r22Wd17Ngxa3pubq58fX317bff6t5771WPHj3kdDo1ffp0q2bBggW67bbbdPToUZcjWwWysrKUlZVlPXc6nYqKiiI0AQBQjpToNU35+fm2Hn82MElnQtGHH36oa6+9VnPmzNFTTz2lZ555Rp9++qkkKTU1VZIUFhbmMl9YWJg1LTU1tdBdyj09PRUSEuJSU9Qyzl7HuUaOHKmgoCDrERUV9Se3FgAAlGVuh6ZLKT8/X82bN9drr72m66+/Xk888YR69+6tcePGlXZrGjJkiDIyMqzH3r17S7slAABQgsp0aIqIiFDDhg1dxho0aKA9e/ZIksLDwyVJaWlpLjVpaWnWtPDwcB06dMhlem5uro4ePepSU9Qyzl7HuXx8fBQYGOjyAAAAl68yHZpuuukmJScnu4xt27ZNNWvWlCTVrl1b4eHhmjdvnjXd6XRq5cqViomJkSTFxMQoPT1diYmJVs38+fOVn5+v6Ohoq2bx4sXKycmxaubOnat69eoVeT0TAAC48pTp0DRgwACtWLFCr732mn777TdNmTJF48ePV58+fSSdudi8f//+euWVV/TDDz9o06ZN6tGjhyIjI9W5c2dJZ45MdejQQb1799aqVau0bNky9e3bV127drW+6ffXv/5V3t7e6tWrl5KSkvT1119r7NixGjhwYGltOgAAKGtMGffjjz+aRo0aGR8fH1O/fn0zfvx4l+n5+fnmpZdeMmFhYcbHx8e0b9/eJCcnu9QcOXLEdOvWzQQEBJjAwEDz6KOPmuPHj7vUbNiwwdx8883Gx8fHXHXVVWbUqFFu9ZmRkWEkmYyMjIvbUAAAcMm58/lt65YDTqfTdgi7Uq/t4T5NAACUP+58fnvaWWBwcLAcDoetlRfHrQYAAADKGluhacGCBdbfu3bt0uDBg/XII49YF1snJCTo008/1ciRI0umSwAAgFLm9h3B27dvr8cff1zdunVzGS+4SHvhwoXF2V+5wek5AADKnxK9I3hCQoL1G25na9GihVatWuXu4gAAAMoFt0NTVFSU/v3vfxcanzBhAj8lAgAALlu2rmk621tvvaX7779fs2bNsm4OuWrVKm3fvl1Tp04t9gYBAADKArePNHXs2FHbt2/X3XffraNHj+ro0aO66667tG3bNnXs2LEkegQAACh1bh1pysnJUYcOHTRu3Di9+uqrJdUTAABAmePWkSYvLy9t3LixpHoBAAAos9w+Pde9e3d9/PHHJdELAABAmeX2heC5ubn65JNP9Msvv+iGG26Qv7+/y/Q333yz2JoDAAAoK9wOTZs3b1bz5s0lSdu2bXOZZvenVgAAAMobt0PT2T+pAgAAcKVw+5omAACAK5HbR5okac2aNfrmm2+0Z88eZWdnu0z7/vvvi6UxAACAssTtI01fffWVWrdurS1btmjatGnKyclRUlKS5s+fr6CgoJLoEQAAoNS5HZpee+01vfXWW/rxxx/l7e2tsWPHauvWrXrwwQdVo0aNkugRAACg1Lkdmnbs2KFOnTpJkry9vXXixAk5HA4NGDBA48ePL/YGAQAAygK3Q1PlypV1/PhxSdJVV12lzZs3S5LS09N18uTJ4u0OAACgjHD7QvC2bdtq7ty5aty4sR544AH169dP8+fP19y5c9W+ffuS6BEAAKDUuR2a3nvvPZ0+fVqS9OKLL8rLy0vLly/X/fffr//7v/8r9gYBAADKAocxxpR2E5cDp9OpoKAgZWRkKDAwsLTbAQAANrjz+e32NU09evTQxIkTtWPHjotuEAAAoLxxOzR5e3tr5MiRuvbaaxUVFaXu3btrwoQJ2r59e0n0BwAAUCZc9Om5/fv3a/HixVq0aJEWLVqkbdu2KSIiQvv27SvuHssFTs8BAFD+lOjpuQKVK1dWaGioKleurODgYHl6eqpq1aoXuzgAAIAyze3Q9I9//EOtW7dWaGioBg8erNOnT2vw4MFKTU3VunXrSqJHAACAUuf26bkKFSqoatWqGjBggO677z7VrVu3pHorVzg9BwBA+ePO57fb92lat26dFi1apIULF+qNN96Qt7e3brnlFrVr107t2rUjRAEAgMvSn75P04YNG/TWW29p8uTJys/PV15eXnH1Vq5wpAkAgPKnRI80GWO0bt06LVy4UAsXLtTSpUvldDrVpEkT3XLLLRfdNAAAQFnmdmgKCQlRZmammjZtqltuuUW9e/dWmzZtFBwcXALtAQAAlA1uh6YvvvhCbdq04RQUAAC4orh9y4FOnTopMDBQv/32m+bMmaNTp05JOnPaDgAA4HLldmg6cuSI2rdvr7p166pjx446ePCgJKlXr1569tlni71BAACAssDt0DRgwAB5eXlpz549qlixojX+0EMPafbs2cXaHAAAQFnh9jVNP//8s+bMmaPq1au7jF977bXavXt3sTUGAABQlrh9pOnEiRMuR5gKHD16VD4+PsXSFAAAQFnjdmhq06aNPvvsM+u5w+FQfn6+Ro8erVtvvbVYmwMAACgr3D49N3r0aLVv315r1qxRdna2XnjhBSUlJeno0aNatmxZSfQIAABQ6tw+0tSoUSNt27ZNN998s+655x6dOHFC9913n9atW6c6deqURI8AAAClzq0jTTk5OerQoYPGjRunF198saR6AgAAKHPcOtLk5eWljRs3llQvAAAAZZbbp+e6d++ujz/+uCR6AQAAKLPcvhA8NzdXn3zyiX755RfdcMMN8vf3d5n+5ptvFltzAAAAZYXboWnz5s1q3ry5JGnbtm0u0xwOR/F0BQAAUMa4fXpuwYIF533Mnz+/JHq0jBo1Sg6HQ/3797fGTp8+rT59+ig0NFQBAQG6//77lZaW5jLfnj171KlTJ1WsWFHVqlXT888/r9zcXJeahQsXqnnz5vLx8dE111yjSZMmlei2AACA8sXt0FRaVq9erY8++khNmjRxGR8wYIB+/PFHffvtt1q0aJEOHDig++67z5qel5enTp06KTs7W8uXL9enn36qSZMmaejQoVZNSkqKOnXqpFtvvVXr169X//799fjjj2vOnDmXbPsAAEDZ5jDGmNJu4o9kZmaqefPm+uCDD/TKK6+oWbNmevvtt5WRkaGqVatqypQp6tKliyRp69atatCggRISEtSqVSvNmjVLf/nLX3TgwAGFhYVJksaNG6dBgwbp8OHD8vb21qBBgzRz5kxt3rzZWmfXrl2Vnp5u+0eInU6ngoKClJGRocDAwOLfCQAAoNi58/ldLo409enTR506dVJsbKzLeGJionJyclzG69evrxo1aighIUGSlJCQoMaNG1uBSZLi4uLkdDqVlJRk1Zy77Li4OGsZRcnKypLT6XR5AACAy5fbF4Jfal999ZXWrl2r1atXF5qWmpoqb29vBQcHu4yHhYUpNTXVqjk7MBVML5h2oRqn06lTp07Jz8+v0LpHjhypESNGXPR2AQCA8qVMH2nau3ev+vXrp8mTJ8vX17e023ExZMgQZWRkWI+9e/eWdksAAKAElenQlJiYqEOHDql58+by9PSUp6enFi1apHfeeUeenp4KCwtTdna20tPTXeZLS0tTeHi4JCk8PLzQt+kKnv9RTWBgYJFHmSTJx8dHgYGBLg8AAHD5KtOhqX379tq0aZPWr19vPVq0aKH4+Hjrby8vL82bN8+aJzk5WXv27FFMTIwkKSYmRps2bdKhQ4esmrlz5yowMFANGza0as5eRkFNwTIAAADK9DVNlSpVUqNGjVzG/P39FRoaao336tVLAwcOVEhIiAIDA/X0008rJiZGrVq1kiTdcccdatiwoR5++GGNHj1aqamp+r//+z/16dNHPj4+kqS//e1veu+99/TCCy/oscce0/z58/XNN99o5syZl3aDAQBAmVWmQ5Mdb731lipUqKD7779fWVlZiouL0wcffGBN9/Dw0IwZM/TUU08pJiZG/v7+6tmzp/75z39aNbVr19bMmTM1YMAAjR07VtWrV9eECRMUFxdXGpsEAADKoHJxn6bygPs0AQBQ/lx292kCAAAobYQmAAAAGwhNAAAANhCaAAAAbCA0AQAA2EBoAgAAsIHQBAAAYAOhCQAAwAZCEwAAgA2EJgAAABsITQAAADYQmgAAAGwgNAEAANhAaAIAALCB0AQAAGADoQkAAMAGQhMAAIANhCYAAAAbCE0AAAA2EJoAAABsIDQBAADYQGgCAACwgdAEAABgA6EJAADABkITAACADYQmAAAAGwhNAAAANhCaAAAAbCA0AQAA2EBoAgAAsIHQBAAAYAOhCQAAwAZCEwAAgA2EJgAAABsITQAAADYQmgAAAGwgNAEAANhAaAIAALCB0AQAAGADoQkAAMAGQhMAAIANhCYAAAAbCE0AAAA2EJoAAABsIDQBAADYQGgCAACwoUyHppEjR+rGG29UpUqVVK1aNXXu3FnJyckuNadPn1afPn0UGhqqgIAA3X///UpLS3Op2bNnjzp16qSKFSuqWrVqev7555Wbm+tSs3DhQjVv3lw+Pj665pprNGnSpJLePAAAUI6U6dC0aNEi9enTRytWrNDcuXOVk5OjO+64QydOnLBqBgwYoB9//FHffvutFi1apAMHDui+++6zpufl5alTp07Kzs7W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AOUT1zQBAADYQGgCAACwgdAEAABgA6EJAADABkITAACADYQmAAAAGwhNAAAANhCaAJQbu3btksPh0Pr160u7FQCX0OLFi3XXXXcpMjJSDodD06dPd2v+4cOHy+FwFHr4+/u7tRxCE4BCDh8+LG9vb504cUI5OTny9/fXnj17SrstRUVF6eDBg2rUqFFpt1Ki2rVrp/79+5f6MoCy4sSJE2ratKnef//9i5r/ueee08GDB10eDRs21AMPPODWcghNAApJSEhQ06ZN5e/vr7Vr1yokJEQ1atQo7bbk4eGh8PBweXp6FjndGKPc3NxL3BWAknbnnXfqlVde0b333lvk9KysLD333HO66qqr5O/vr+joaC1cuNCaHhAQoPDwcOuRlpamX3/9Vb169XKrD0ITgEKWL1+um266SZK0dOlS6+8/MmHCBDVo0EC+vr6qX7++PvjgA2tawam177//XrfeeqsqVqyopk2bKiEhQZLkdDrl5+enWbNmuSxz2rRpqlSpkk6ePFno9NzChQvlcDg0a9Ys3XDDDfLx8dHSpUuVlZWlZ555RtWqVZOvr69uvvlmrV692lpmwXzz5s1TixYtVLFiRbVu3VrJyclWzfDhw9WsWTN98sknqlGjhgICAvT3v/9deXl5Gj16tMLDw1WtWjW9+uqrLv2mp6fr8ccfV9WqVRUYGKjbbrtNGzZsKLTczz//XLVq1VJQUJC6du2q48ePS5IeeeQRLVq0SGPHjrVOIezatavI/f3BBx/o2muvla+vr8LCwtSlS5c/XMbmzZt15513KiAgQGFhYXr44Yf1+++/W8ts166d+vbtq759+yooKEhVqlTRSy+9pLN/cet86wVKS9++fZWQkKCvvvpKGzdu1AMPPKAOHTpo+/btRdZPmDBBdevWVZs2bdxbUen+9B2AsmL37t0mKCjIBAUFGS8vL+Pr62uCgoKMt7e38fHxMUFBQeapp5467/xffPGFiYiIMFOnTjU7d+40U6dONSEhIWbSpEnGGGNSUlKMJFO/fn0zY8YMk5ycbLp06WJq1qxpcnJyjDHGdOnSxXTv3t1luffff781VrCMdevWGWP+94PBTZo0MT///LP57bffzJEjR8wzzzxjIiMjzU8//WSSkpJMz549TeXKlc2RI0dc5ouOjjYLFy40SUlJpk2bNqZ169bWeocNG2YCAgJMly5d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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAk0AAAHHCAYAAACiOWx7AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy80BEi2AAAACXBIWXMAAA9hAAAPYQGoP6dpAABSMUlEQVR4nO3deVhU9f4H8PewDKszLMqmqKSJO+6I5ZYopmlulYZKRtY1KU1z+3lzadPomllZWqZWapqh3nKNcFdEBHFBxQ13wQWZYZF1vr8/iHMdQT2DM84A79fzzHOZcz7nnM+cO828PefM+SqEEAJERERE9FBW5m6AiIiIqDJgaCIiIiKSgaGJiIiISAaGJiIiIiIZGJqIiIiIZGBoIiIiIpKBoYmIiIhIBoYmIiIiIhkYmoiIiIhkYGgiIiIikoGhiYiqjJ49e0KhUCAiIuKhdXv37oVCoYBCocCtW7cqtM7Lly9j9uzZ6NChA1xdXVGzZk1069YNf//9t+x+z549iyFDhsDV1RWOjo549tlnsWPHjjJ1pb2W9+jZs6dUd+3aNQwfPhz+/v6oUaMGXFxc0KFDB/z000/giFlEj8/G3A0QERnDunXrEBsb+8g6nU6Hd955B05OTsjJyanwOv/73//is88+w4ABAxAWFoaioiL8/PPP6NmzJ5YuXYpRo0Y9dN2XL19GUFAQrK2tMWnSJDg5OWHZsmXo1asXYmJi0KVLF6n2l19+KbP8oUOHsGDBAvTq1UuaduvWLVy5cgVDhgxB3bp1UVhYiOjoaLz22mtISUnBp59++tCeiOgRBBFRJXf37l1Rv3598eGHHwoAYuzYsQ+s/e6774S7u7sYN26cACBu3rxZoXUeP368zLJ5eXmicePGok6dOo/s+e233xY2Njbi1KlT0rScnBzh6+sr2rRp88jlw8PDhUKhEJcvX35k7QsvvCCcnJxEUVHRI2uJ6MF4eo6ITGbHjh1QKBRYv359mXmrVq2CQqGQdXToUSIjI6HT6fD+++8/tC4jIwP//ve/8eGHH8LFxeWx1tmsWTPUrFlTb5qdnR369OmDK1euICsr66Hr37NnD1q3bg1/f39pmqOjI/r374/ExEScOXPmgcvm5+cjKioKXbt2RZ06dR66HQCoX78+cnNzUVBQ8MhaInownp4jIpPp1q0bfH19sXLlSgwcOFBv3sqVK9GgQQMEBQUhPz//kSGj1P1B5dKlS5g7dy6WLl0KBweHhy77wQcfwMvLC2+99RY++uijB9YZss77paWlwdHREY6Ojg+ty8/Ph6ura5nppcslJCTg6aefLnfZzZs3IzMzE6GhoeXOv3v3LnJycpCdnY1du3Zh2bJlCAoKMvi1EJE+hiYiMhmFQoHhw4fjiy++gEajgVqtBgDcvHkTf/31F6ZPnw4A+PXXXx95DVApcd8FzRMnTkTr1q0xdOjQhy539OhRLF68GJs3b4a1tfVDa+Wu835nz57FunXr8NJLLz1yG/7+/tizZw+ysrJQo0YNafrevXsBAFevXn3gsitXroSdnR2GDBlS7vwFCxZg2rRp0vMePXpg2bJlhrwUIioHQxMRmdTIkSMxZ84c/P777wgPDwcArFmzBkVFRRg+fDgAICQkBNHR0Qave8eOHYiKikJcXNwja9999108//zzehdOP+4675Wbm4uXXnoJDg4OmDt37iPrx4wZgz///BOvvPIKPvnkEzg5OeHbb7/FoUOHAJQcLSqPVqvFpk2b0KdPnweeYhw2bBjatWuHmzdvYuPGjUhPT3/g+ojIAOa+qIqIqr727duL7t27S887duwoOnbs+FjrLCwsFM2bNxcjR47Um45yLtpevXq1sLW1FSkpKdK0mTNnlrkQ3JB13quoqEj069dPKJVKERMTI/s1fP3118LJyUkAEABEw4YNRWRkpAAg5s+fX+4yS5cuFQDE77//Lns7o0ePFr6+viI3N1f2MkRUFo80EZHJjRw5EuPGjcOVK1eQn5+PAwcO4JtvvpHm3717FxqNRta6vLy8AAA///wzUlJSsHjxYly4cEGvJisrCxcuXICHhwccHR0xadIkvPTSS1AqlVJtZmYmgJKf/hcUFMDHx8egdd5r9OjR2LhxI1auXInnnntO9n6JiIjAqFGjcPToUSiVSrRq1Qo//vgjAKBRo0blLrNy5Uqo1Wq88MILsrczZMgQ/PDDD9i9ezdCQkJkL0dE9zF3aiOiqu/mzZvC1tZWREZGitmzZwtbW1u9IzzLli2TjrY86lGq9EjRwx7r168XQohH1gUEBBi8zlLvv/++ACC+/PJLo+yrl156STg4OIjMzMwy865duyasrKzE66+/btA6N2zYIACINWvWGKVHouqKR5qIyORq1qyJ559/HitWrEBeXh569+6t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iw1Nlm7atGnQaDTS4/Lly+ZuiYiIiEzIYkOTl5cXACA9PV1venp6ujTPy8sLN27c0JtfVFSEjIwMvZry1nHvNh5UUzq/PHZ2dlCpVHoPIiIiqrosNjT5+fnBy8sLMTEx0jStVou4uDgEBQUBAIKCgpCZmYmEhASpZvv27dDpdAgMDJRqdu/ejcLCQqkmOjoa/v7+cHV1lWru3U5pTel2iIiIiMwamrKzs5GUlISkpCQAJRd/JyUl4dKlS1AoFBg/fjw+/vhj/PHHHzh27BhGjhwJHx8fDBgwAADQpEkT9O7dG6NHj8bBgwexb98+REREYOjQofDx8QEAvPrqq1AqlQgPD0dycjLWrFmDBQsWYMKECVIf48aNw9atWzFv3jycOnUKs2bNwqFDhxAREfGkdwkRERFZqifwa74H2rFjhwBQ5hEWFiaEKLntwAcffCA8PT2FnZ2d6NGjh0hJSdFbx+3bt8WwYcOEs7OzUKlUYtSoUSIrK0uv5siRI+LZZ58VdnZ2onbt2mLu3Lllevntt99Eo0aNhFKpFM2aNRObNm0y6LXwlgNERESVjyHf3wohhDBjZqsytFot1Go1NBoNr28iIiKqJAz5/rbYa5qIiIiILAlDExEREZEMDE1EREREMjA0EREREcnA0EREREQkA0MTERERkQwMTUREREQyMDQRERERycDQRERERCQDQxMRERGRDAxNRERERDIwNBERERHJwNBEREREJANDExEREZEMDE1EREREMjA0EREREcnA0EREREQkA0MTERERkQwMTUREREQyMDQRERERycDQRERERCQDQxMRERGRDAxNRERERDIwNBERERHJwNBEREREJANDExEREZEMDE1EREREMlQoNO3ZswfDhw9HUFAQrl69CgD45ZdfsHfvXqM2R0RERGQpDA5NUVFRCAkJgYODAw4fPoz8/HwAgEajwaeffmr0BomIiIgsgcGh6eOPP8aiRYvwww8/wNbWVpr+zDPPIDEx0ajNEREREVkKg0NTSkoKunTpUma6Wq1GZmamMXoiIiIisjgGhyYvLy+cPXu2zPS9e/fiqaeeMkpTRERERJbG4NA0evRojBs3DnFxcVAoFLh27RpWrlyJ999/H2PGjDFFj0RERERmZ2PoAlOnToVOp0OPHj2Qm5uLLl26wM7ODu+//z7eeecdU/RIREREZHYKIYSoyIIFBQU4e/YssrOz0bRpUzg7Oxu7t0pFq9VCrVZDo9FApVKZux0iIiKSwZDvb4OPNJVSKpVo2rRpRRcnIiIiqlRkhaZBgwbJXuG6desq3AwRERGRpZJ1IbharZYeKpUKMTExOHTokDQ/ISEBMTExUKvVJmuUiIiIyJxkHWlatmyZ9PeUKVPw8ssvY9GiRbC2tgYAFBcX4+233+a1PERERFRlGXwheK1atbB37174+/vrTU9JSUGnTp1w+/ZtozZYWfBCcCIiosrHkO9vg+/TVFRUhFOnTpWZfurUKeh0OkNXR0RERFQpGPzruVGjRiE8PBznzp1Dhw4dAABxcXGYO3cuRo0aZfQGiYiIiCyBwaHpP//5D7y8vDBv3jxcv34dAODt7Y1JkyZh4sSJRm+QiIiIyBJU+OaWQMl5QAC8hge8pomIiKgyeiI3t7x58yZSUlIAAI0bN0bNmjUruioiIiIii2fwheA5OTl4/fXX4e3tjS5duqBLly7w9vZGeHg4cnNzTdEjERERkdkZHJomTJiAXbt24c8//0RmZiYyMzPx3//+F7t27TL6NU3FxcX44IMP4OfnBwcHBzRo0AAfffQR7j2jKITAjBkz4O3tDQcHBwQHB+PMmTN668nIyEBoaChUKhVcXFwQHh6O7OxsvZqjR4+ic+fOsLe3h6+vLyIjI436WoiIiKiSEwZyd3cXO3bsKDN9+/btombNmoau7qE++eQT4e7uLjZu3ChSU1PF2rVrhbOzs1iwYIFUM3fuXKFWq8WGDRvEkSNHRP/+/YWfn5+4e/euVNO7d28REBAgDhw4IPbs2SMaNmwohg0bJs3XaDTC09NThIaGiuPHj4tff/1VODg4iMWLF8vuVaPRCABCo9EY58UTERGRyRny/W1waHJwcBAnTpwoM/348ePC0dHR0NU9VN++fcXrr7+uN23QoEEiNDRUCCGETqcTXl5e4vPPP5fmZ2ZmCjs7O/Hrr78KIYQ4ceKEACDi4+Olmi1btgiFQiGuXr0qhBDi22+/Fa6uriI/P1+qmTJlivD395fdK0MTERFR5WPI97fBp+eCgoIwc+ZM5OXlSdPu3r2L2bNnIygoyFgHwAAAnTp1QkxMDE6fPg0AOHLkCPbu3Yvnn38eAJCamoq0tDQEBwdLy6jVagQGBiI2NhYAEBsbCxcXF7Rr106qCQ4OhpWVFeLi4qSaLl26QKlUSjUhISFISUnBnTt3yu0tPz8fWq1W70FERERVl8G/nluwYAFCQkJQp04dBAQEACgJM/b29ti2bZtRm5s6dSq0Wi0aN24Ma2trFBcX45NPPkFoaCgAIC0tDQDg6empt5ynp6c0Ly0tDR4eHnrzbWxs4Obmplfj5+dXZh2l81xdXcv0NmfOHMyePdsIr5KIiIgqA4NDU/PmzXHmzBmsXLlSGk5l2LBhCA0NhYODg1Gb++2337By5UqsWrUKzZo1Q1JSEsaPHw8fHx+EhYUZdVuGmjZtGiZMmCA912q18PX1NWNHREREZEoVuk+To6MjRo8ebexeypg0aRKmTp2KoUOHAgBatGiBixcvYs6cOQgLC4OXlxcAID09Hd7e3tJy6enpaNWqFQDAy8sLN27c0FtvUVERMjIypOW9vLyQnp6uV1P6vLTmfnZ2drCzs3v8F0lERESVgsHXNP3000/YtGmT9Hzy5MlwcXFBp06dcPHiRaM2l5ubCysr/Ratra2lgYH9/Pzg5eWFmJgYab5Wq0VcXJx0fVVQUBAyMzORkJAg1Wzfvh06nQ6BgYFSze7du1FYWCjVREdHw9/fv9xTc0RERFT9GByaPv30U+k0XGxsLL755htERkaiZs2aeO+994zaXL9+/fDJJ59g06ZNuHDhAtavX48vvvgCAwcOBAAoFAqMHz8eH3/8Mf744w8cO3YMI0eOhI+PDwYMGAAAaNKkCXr37o3Ro0fj4MGD2LdvHyIiIjB06FD4+PgAAF599VUolUqEh4cjOTkZa9aswYIFC/ROvxEREVE1Z+hP8xwcHMTFixeFEEJMnjxZjBgxQghRcssBY9+nSavVinHjxom6desKe3t78dRTT4np06fr3RpAp9OJDz74QHh6ego7OzvRo0cPkZKSoree27dvi2HDhglnZ2ehUqnEqFGjRFZWll7NkSNHxLPPPivs7OxE7dq1xdy5cw3qlbccICIiqnwM+f42eMBeDw8PbNu2Da1bt0br1q0xYcIEjBgxAufOnUNAQECZO21XFxywl4iIqPIx6YC9PXv2xBtvvIHWrVvj9OnT6NOnDwAgOTkZ9evXr1DDRERERJbO4GuaFi5ciKCgINy8eRNRUVFwd3cHACQkJGDYsGFGb5CIiIjIEhh8eo7Kx9NzRERElY/RT88dPXoUzZs3h5WVFY4ePfrQ2pYtW8rvlIiIiKiSkBWaWrVqJQ1H0qpVKygUCtx7gKr0uUKhQHFxscmaJSIiIjIXWaEpNTUVtWrVkv4mIiIiqm5khaZ69eqV+zcRERFRdVGhsedSUlLw9ddf4+TJkwBK7rr9zjvvwN/f36jNEREREVkKg285EBUVhebNmyMhIQEBAQEICAhAYmIimjdvjqioKFP0SERERGR2Bt9yoEGDBggNDcWHH36oN33mzJlYsWIFzp07Z9QGKwvecoCIiKjyMeT72+AjTdevX8fIkSPLTB8+fDiuX79u6OqIiIiIKgWDQ1O3bt2wZ8+eMtP37t2Lzp07G6UpIiIiIktj8IXg/fv3x5QpU5CQkICOHTsCAA4cOIC1a9di9uzZ+OOPP/RqiYiIiKoCg69psrKSd3Cqut3oktc0ERERVT5GH0blXjqdrsKNEREREVVWBl/TdK+8vDxj9UFERERk0QwOTcXFxfjoo49Qu3ZtODs74/z58wCADz74AD/++KPRGyQiIiKyBAaHpk8++QTLly9HZGQklEqlNL158+ZYsmSJUZsjIiIishQGh6aff/4Z33//PUJDQ2FtbS1NDwgIwKlTp4zaHBEREZGlMDg0Xb16FQ0bNiwzXafTobCw0ChNEREREVkag0NT06ZNy7255e+//47WrVsbpSkiIiIiS2PwLQdmzJiBsLAwXL16FTqdDuvWrUNKSgp+/vlnbNy40RQ9EhEREZmdwUeaXnzxRfz555/4+++/4eTkhBkzZuDkyZP4888/0bNnT1P0SERERGR2Bt8RnMrHO4ITkaXLLShC0xnbAAAnPgyBo9Lgkw1EVY4h39+PdXNLIiIiouqCoYmIiIhIBoYmIiIiIhkYmoiIiIhkMCg0FRYWokGDBjh58qSp+iEiIiKySAaFJltbW+Tl5ZmqFyIiIiKLZfDpubFjx+Kzzz5DUVGRKfohIiIiskgG36QjPj4eMTEx+Ouvv9CiRQs4OTnpzV+3bp3RmiMiIiKyFAaHJhcXFwwePNgUvRARERFZLIND07Jly0zRBxEREZFFq9AtB4qKivD3339j8eLFyMrKAgBcu3YN2dnZRm2OiIiIyFIYfKTp4sWL6N27Ny5duoT8/Hz07NkTNWrUwGeffYb8/HwsWrTIFH0SERERmZXBR5rGjRuHdu3a4c6dO3BwcJCmDxw4EDExMUZtjoiIiMhSGHykac+ePdi/fz+USqXe9Pr16+Pq1atGa4yIiIjIkhh8pEmn06G4uLjM9CtXrqBGjRpGaYqIiIjI0hgcmnr16oUvv/xSeq5QKJCdnY2ZM2eiT58+xuyNiIiIyGIYfHpu3rx5CAkJQdOmTZGXl4dXX30VZ86cQc2aNfHrr7+aokciIiIiszM4NNWpUwdHjhzB6tWrcfToUWRnZyM8PByhoaF6F4YTERERVSUGhyYAsLGxwfDhw43dCxEREZHFqlBoSklJwddff42TJ08CAJo0aYKIiAg0btzYqM0RERERWQqDLwSPiopC8+bNkZCQgICAAAQEBCAxMREtWrRAVFSUKXokIiIiMjuDjzRNnjwZ06ZNw4cffqg3febMmZg8eTIH8yUiIqIqyeAjTdevX8fIkSPLTB8+fDiuX79ulKbudfXqVQwfPhzu7u5wcHBAixYtcOjQIWm+EAIzZsyAt7c3HBwcEBwcjDNnzuitIyMjA6GhoVCpVHBxcUF4eHiZcfKOHj2Kzp07w97eHr6+voiMjDT6ayEiIqLKy+DQ1K1bN+zZs6fM9L1796Jz585GaarUnTt38Mwzz8DW1hZbtmzBiRMnMG/ePLi6uko1kZGR+Oqrr7Bo0SLExcXByckJISEhyMvLk2pCQ0ORnJyM6OhobNy4Ebt378abb74pzddqtejVqxfq1auHhIQEfP7555g1axa+//57o74eIiIiqrwUQghhyAKLFi3CjBkz8PLLL6Njx44AgAMHDmDt2rWYPXs2fHx8pNr+/fs/VnNTp07Fvn37yg1pQMlRJh8fH0ycOBHvv/8+AECj0cDT0xPLly/H0KFDcfLkSTRt2hTx8fFo164dAGDr1q3o06cPrly5Ah8fH3z33XeYPn060tLSpOFhpk6dig0bNuDUqVOyetVqtVCr1dBoNFCpVI/1uomITCG3oAhNZ2wDAJz4MASOygr9FoioSjHk+9vg0GRlJe/glEKhKHe4FUM0bdoUISEhuHLlCnbt2oXatWvj7bffxujRowEA58+fR4MGDXD48GG0atVKWq5r165o1aoVFixYgKVLl2LixIm4c+eONL+oqAj29vZYu3YtBg4ciJEjR0Kr1WLDhg1SzY4dO/Dcc88hIyND78hWqfz8fOTn50vPtVotfH19GZqIyGIxNBGVZUhoqtDYc3IejxuYgJJQ9N133+Hpp5/Gtm3bMGbMGLz77rv46aefAABpaWkAAE9PT73lPD09pXlpaWnw8PDQm29jYwM3Nze9mvLWce827jdnzhyo1Wrp4evr+5ivloiIiCyZwaHpSdLpdGjTpg0+/fRTtG7dGm+++SZGjx6NRYsWmbs1TJs2DRqNRnpcvnzZ3C0RERGRCVl0aPL29kbTpk31pjVp0gSXLl0CAHh5eQEA0tPT9WrS09OleV5eXrhx44be/KKiImRkZOjVlLeOe7dxPzs7O6hUKr0HERERVV0WHZqeeeYZpKSk6E07ffo06tWrBwDw8/ODl5cXYmJipPlarRZxcXEICgoCAAQFBSEzMxMJCQlSzfbt26HT6RAYGCjV7N69G4WFhVJNdHQ0/P39y72eiYiIiKofiw5N7733Hg4cOIBPP/0UZ8+exapVq/D9999j7NixAEouNh8/fjw+/vhj/PHHHzh27BhGjhwJHx8fDBgwAEDJkanevXtj9OjROHjwIPbt24eIiAgMHTpU+qXfq6++CqVSifDwcCQnJ2PNmjVYsGABJkyYYK6XTkRERBbGon860b59e6xfv166A7mfnx++/PJLhIaGSjWTJ09GTk4O3nzzTWRmZuLZZ5/F1q1bYW9vL9WsXLkSERER6NGjB6ysrDB48GB89dVX0ny1Wo2//voLY8eORdu2bVGzZk3MmDFD715OREREVL3JuuWAVquVvcLqem0P79NERJaOtxwgKsuQ729Z/8W4uLhAoVDI2rgxbjVAREREZGlkhaYdO3ZIf1+4cAFTp07Fa6+9Jl1sHRsbi59++glz5swxTZdEREREZiYrNHXt2lX6+8MPP8QXX3yBYcOGSdP69++PFi1a4Pvvv0dYWJjxuyQiIiIyM4N/PRcbGyuN4Xavdu3a4eDBg0ZpioiIiMjSGByafH198cMPP5SZvmTJEg4lQkRERFWWwT+dmD9/PgYPHowtW7ZIN4c8ePAgzpw5g6ioKKM3SERERGQJDD7S1KdPH5w5cwb9+/dHRkYGMjIy0K9fP5w+fRp9+vQxRY9EREREZmfQkabCwkL07t0bixYtwieffGKqnoiIiIgsjkFHmmxtbXH06FFT9UJERERksQw+PTd8+HD8+OOPpuiFiIiIyGIZfCF4UVERli5dir///htt27aFk5OT3vwvvvjCaM0RERERWQqDQ9Px48fRpk0bAMDp06f15skdaoWIiIiosjE4NN07pAoRERFRdWHwNU1ERERE1ZHBR5oA4NChQ/jtt99w6dIlFBQU6M1bt26dURojIiIisiQGH2lavXo1OnXqhJMnT2L9+vUoLCxEcnIytm/fDrVabYoeiYiIiMzO4ND06aefYv78+fjzzz+hVCqxYMECnDp1Ci+//DLq1q1rih6JiIiIzM7g0HTu3Dn07dsXAKBUKpGTkwOFQoH33nsP33//vdEbJCIiIrIEBocmV1dXZGVlAQBq166N48ePAwAyMzORm5tr3O6IiIiILITBF4J36dIF0dHRaNGiBV566SWMGzcO27dvR3R0NHr06GGKHomIiIjMzuDQ9M033yAvLw8AMH36dNja2mL//v0YPHgw/v3vfxu9QSIiIiJLYHBocnNzk/62srLC1KlTjdoQERERkSUy+JqmkSNHYtmyZTh37pwp+iEiIiKySAaHJqVSiTlz5uDpp5+Gr68vhg8fjiVLluDMmTOm6I+IiIjIIhgcmpYsWYLTp0/j8uXLiIyMhLOzM+bNm4fGjRujTp06puiRiIiIyOwqPPacq6sr3N3d4erqChcXF9jY2KBWrVrG7I2IiIjIYhgcmv7v//4PnTp1gru7O6ZOnYq8vDxMnToVaWlpOHz4sCl6JCIiIjI7g389N3fuXNSqVQszZ87EoEGD0KhRI1P0RURERGRRDA5Nhw8fxq5du7Bz507MmzcPSqUSXbt2Rbdu3dCtWzeGKCIiIqqSDA5NAQEBCAgIwLvvvgsAOHLkCObPn4+xY8dCp9OhuLjY6E0SERERmZvBoUkIgcOHD2Pnzp3YuXMn9u7dC61Wi5YtW6Jr166m6JGIiIjI7Cp0R/Ds7GwEBASga9euGD16NDp37gwXFxcTtEdERERkGQwOTStWrEDnzp2hUqlM0Q8RERGRRTL4lgN9+/aFSqXC2bNnsW3bNty9exdAyWk7IiIioqrK4NB0+/Zt9OjRA40aNUKfPn1w/fp1AEB4eDgmTpxo9AaJiIiILIHBoem9996Dra0tLl26BEdHR2n6K6+8gq1btxq1OSIiIiJLYfA1TX/99Re2bdtWZpy5p59+GhcvXjRaY0REZDp5hcVwVBr8FUBUrRl8pCknJ0fvCFOpjIwM2NnZGaUpIiIyvp/2X5D+/j3hivkaIaqkDA5NnTt3xs8//yw9VygU0Ol0iIyMRPfu3Y3aHBERPT4hBD7fdgqfbU2Rpr3aoa4ZOyKqnAw+NhsZGYkePXrg0KFDKCgowOTJk5GcnIyMjAzs27fPFD0SEVEFFesEPvjvcayKu6Q33cpKYaaOiCovg480NW/eHKdPn8azzz6LF198ETk5ORg0aBAOHz6MBg0amKJHIiKqgIIiHd5dfRir4i5BoQBm9mtq7paIKjWDjjQVFhaid+/eWLRoEaZPn26qnoiI6DHl5BfhXysSsOfMLdhaK/DlK63RvXEtzP7zhLlbI6q0DApNtra2OHr0qKl6ISIiI7iTU4BRy+ORdDkTDrbWWDyiLbo0qoXcgiJzt0ZUqRl8em748OH48ccfTdELERE9pjRNHl5eHIuky5lwcbTFytGB6NKolrnbIqoSDL4QvKioCEuXLsXff/+Ntm3bwsnJSW/+F198YbTmiIhIvtRbORi+JA5XM+/CU2WHX8ID0cizhrnbIqoyDA5Nx48fR5s2bQAAp0+f1punUPDXGERE5nD8qgZhSw/idk4B/Go64efXO8DXrew99Yio4gw+Pbdjx44HPrZv326KHiVz586FQqHA+PHjpWl5eXkYO3Ys3N3d4ezsjMGDByM9PV1vuUuXLqFv375wdHSEh4cHJk2ahKIi/XP7O3fuRJs2bWBnZ4eGDRti+fLlJn0tRETGEnf+NoZ9fwC3cwrQzEeF394KYmAiMgGDQ5O5xMfHY/HixWjZsqXe9Pfeew9//vkn1q5di127duHatWsYNGiQNL+4uBh9+/ZFQUEB9u/fj59++gnLly/HjBkzpJrU1FT07dsX3bt3R1JSEsaPH4833ngD27Zte2Kvj4ioIv4+kY6RSw8iK78IHfzc8OubHVGrBkdnIDKFShGasrOzERoaih9++AGurq7SdI1Ggx9//BFffPEFnnvuObRt2xbLli3D/v37ceDAAQAlY+WdOHECK1asQKtWrfD888/jo48+wsKFC1FQUAAAWLRoEfz8/DBv3jw0adIEERERGDJkCObPn2+W10tEJEdUwhW8tSIB+UU6BDfxxM+vd4DK3tbcbRFVWZUiNI0dOxZ9+/ZFcHCw3vSEhAQUFhbqTW/cuDHq1q2L2NhYAEBsbCxatGgBT09PqSYkJARarRbJyclSzf3rDgkJkdZRnvz8fGi1Wr0HEdGTsmTPeUxcewTFOoFBbWpj0fA2sLe1NndbRFWaxQ9xvXr1aiQmJiI+Pr7MvLS0NCiVSri4uOhN9/T0RFpamlRzb2AqnV8672E1Wq0Wd+/ehYODQ5ltz5kzB7Nnz67w6yIiqgghBOb9dRrf7DgLAAh/1g/T+zThsChET4BFH2m6fPkyxo0bh5UrV8Le3t7c7eiZNm0aNBqN9Lh8+bK5WyKiKq5YJzB9w3EpME0K8ce/+zIwET0pFh2aEhIScOPGDbRp0wY2NjawsbHBrl278NVXX8HGxgaenp4oKChAZmam3nLp6enw8vICAHh5eZX5NV3p80fVqFSqco8yAYCdnR1UKpXeg4jIVO4fR+6Tgc0xtntD3uqF6Amy6NDUo0cPHDt2DElJSdKjXbt2CA0Nlf62tbVFTEyMtExKSgouXbqEoKAgAEBQUBCOHTuGGzduSDXR0dFQqVRo2rSpVHPvOkprStdBRGROOflFCP8pHpuOXoettQJfD2uN0MB65m6LqNqx6GuaatSogebNm+tNc3Jygru7uzQ9PDwcEyZMgJubG1QqFd555x0EBQWhY8eOAIBevXqhadOmGDFiBCIjI5GWloZ///vfGDt2LOzsSn6W+69//QvffPMNJk+ejNdffx3bt2/Hb7/9hk2bNj3ZF0xEdJ8HjSNHRE+eRYcmOebPnw8rKysMHjwY+fn5CAkJwbfffivNt7a2xsaNGzFmzBgEBQXByckJYWFh+PDDD6UaPz8/bNq0Ce+99x4WLFiAOnXqYMmSJQgJCTHHSyIiAlAyjtyIH+Nw5kY21A62WDaqPdrUdX30gkRkEgohhDB3E1WBVquFWq2GRqPh9U1E9NhMMY5cbkERms4ouWnviQ9D4Kis9P9uJnpshnx/878YIiILc/yqBq8tO4hb2RxHjsiSMDQREVmQuPO38cZPh5CVX4Sm3ir89HoHDotCZCEYmoiILMTfJ9IxdlUi8ot06ODnhiVh7TgsCpEFYWgiIrIAUQlXMDnqKIp1AsFNPPDNqxwWhcjSMDQREZnZj3tT8dHGEwCAQW1qI3JwS9hYW/Rt9IiqJYYmIiIzuX8cudef8eOwKEQWjKGJiMgMinUCM/57HCvjLgEoGUfu7W4NOCwKkQVjaCIiesIKinSY8FsSNh69DoUC+HhAcw6LQlQJMDQRET1BuQVFeOuXBOw5cwu21grMf6UVXmjpY+62iEgGhiYioickM7dkHLnDlziOHFFlxNBERPQEpGnyMHJpHE6ncxw5osqKoYmIyMRSb+VgxI9xuHLHeOPIEdGTx9BERGRC944jV9/dEb+EB3IcOaJKiqGJiMhEOI4cUdXC0EREZAIcR46o6mFoIiIyMo4jR1Q1MTQRERnR/ePIfTa4JWw5jhxRlcDQRERkBEIIfBF9Gl9v5zhyRFUVQxMR0WO6fxy593s1wtjuDTmOHFEVw9BERPQY7h9H7qMXm2N4R44jR1QVMTQREVUQx5Ejql4YmoiIKuD+ceQWjWiLrhxHjqhKY2giIjIQx5Ejqp4YmoiIDMBx5IiqL4YmIiKZOI4cUfXG0EREJAPHkSMihiYiokfgOHJEBDA0ERE91LrEK5j0O8eRIyKGJiKiB1q6NxUflo4j17o2PhvCceSIqjOGJiKi+3AcOSIqD0MTEdE9inUCM/84jhUHOI4cEeljaCIi+gfHkSOih2FoIiJC2XHkvni5FfoFcBw5IvofhiYiqvY4jhwRycHQRETVWro2DyN/PIiU9CyOI0dED8XQRETV1oVbORj+zzhyHjVKxpHz9+I4ckRUPoYmIqqWkq9pELaU48gRkXwMTURU7RxMzUD48niOI0dEBmFoIqJqJeZkOt5e+c84cvXdsOQ1jiNHRPIwNBFRtXHvOHI9GntgYSjHkSMi+RiaiKha4DhyRPS4GJqIqEoTQmB+9Gl8xXHkiOgxMTQRUZV1/zhyE3s2QsRzHEeOiCqGoYmIqqT7x5H78MXmGMFx5IjoMTA0EVGVk1tQhH+tSMTu0zc5jhwRGQ1DExFVKZm5BXh9eTwSOY4cERmZRf90ZM6cOWjfvj1q1KgBDw8PDBgwACkpKXo1eXl5GDt2LNzd3eHs7IzBgwcjPT1dr+bSpUvo27cvHB0d4eHhgUmTJqGoqEivZufOnWjTpg3s7OzQsGFDLF++3NQvj4iMLF2bh1cWH0DipUyoHWyx4o1ABiYiMhqLDk27du3C2LFjceDAAURHR6OwsBC9evVCTk6OVPPee+/hzz//xNq1a7Fr1y5cu3YNgwYNkuYXFxejb9++KCgowP79+/HTTz9h+fLlmDFjhlSTmpqKvn37onv37khKSsL48ePxxhtvYNu2bU/09RJRxV24lYPB3+1HSnoWPGrY4be3gtC2HgfeJSLjUQghhLmbkOvmzZvw8PDArl270KVLF2g0GtSqVQurVq3CkCFDAACnTp1CkyZNEBsbi44dO2LLli144YUXcO3aNXh6egIAFi1ahClTpuDmzZtQKpWYMmUKNm3ahOPHj0vbGjp0KDIzM7F161ZZvWm1WqjVamg0GqhUKuO/eCJ6oJJx5OJxKzuf48g9RG5BEZrOKPnH4IkPQ+Co5BUaRIZ8f1v0kab7aTQaAICbmxsAICEhAYWFhQgODpZqGjdujLp16yI2NhYAEBsbixYtWkiBCQBCQkKg1WqRnJws1dy7jtKa0nWUJz8/H1qtVu9BRE/ewdQMDF18ALey89HEW4W1/+rEwEREJlFpQpNOp8P48ePxzDPPoHnz5gCAtLQ0KJVKuLi46NV6enoiLS1Nqrk3MJXOL533sBqtVou7d++W28+cOXOgVqulh6+v72O/RiIyTMzJdIz4MQ5Z+UXoUN8Nq9/syIF3ichkKk1oGjt2LI4fP47Vq1ebuxUAwLRp06DRaKTH5cuXzd0SUbWy/vAVvPlLAvKLdOjR2AM/h3eA2oED7xKR6VSKE9oRERHYuHEjdu/ejTp16kjTvby8UFBQgMzMTL2jTenp6fDy8pJqDh48qLe+0l/X3Vtz/y/u0tPToVKp4ODgUG5PdnZ2sLPjv2iJzGHZvlTM/rNkHLmBrWsjkuPIyeKotMGFuX3N3QZRpWXRnzJCCERERGD9+vXYvn07/Pz89Oa3bdsWtra2iImJkaalpKTg0qVLCAoKAgAEBQXh2LFjuHHjhlQTHR0NlUqFpk2bSjX3rqO0pnQdRGQZhBD44q8UKTCNeqY+5r0UwMBERE+ERf967u2338aqVavw3//+F/7+/tJ0tVotHQEaM2YMNm/ejOXLl0OlUuGdd94BAOzfvx9AyS0HWrVqBR8fH0RGRiItLQ0jRozAG2+8gU8//RRAyS0HmjdvjrFjx+L111/H9u3b8e6772LTpk0ICQmR1St/PUdkWjqdwMw/kvHLgYsAOI4cERmHId/fFh2aHvRhuGzZMrz22msASm5uOXHiRPz666/Iz89HSEgIvv32W+nUGwBcvHgRY8aMwc6dO+Hk5ISwsDDMnTsXNjb/Ozu5c+dOvPfeezhx4gTq1KmDDz74QNqGHAxNROUzxs/cC4p0mLj2CP48co3jyBGRUVWZ0FSZMDQRle9xQ9O948jZWCnwxSut0J/jyBGRkRjy/V0pLgQnourp/nHkvhveBt38PczdFhFVUwxNRGSR0rV5GPnjQaSkZ0HtYIulr7XnsChEZFYMTURkcS7cysHwH+Nw5c5deNSwwy/hgfD3qmHutoiommNoIiKLcuKaFiOXHsSt7HzUc3fECo4jR0QWgqGJiCzGwdQMhP8Uj6y8IjTxVuHn1ztwWBQishgMTURkEbafSseYFYnIL9KhfX1XLAlrz2FRiMiiMDQRkdmtP3wF7689imKdQI/GHvjm1TZwUFqbuy0iIj0MTURkVhxHjogqC4YmIjILIQTmR5/GV9vPAigZR+6Dvk1hZcVhUYjIMjE0EdETd/84chN6NsI7HEeOiCwcQxMRPVEcR46IKiuGJiJ6YnILijDxt6PYxXHkiKgSYmgioifmjZ8SkHSZ48gRUeXE0ERET0zS5UyOI0dElRZDExGZhBAClzJysfv0TWlarRp2WMFx5IiokmJoIiKjEELgcsZdHDh/W3pc0+Tp1ax8owMaeTIwEVHlxNBERBV2OSMXsf8EpLjzGbiaeVdvvq21Ai1qq5F4KRMAUMeVA+8SUeXF0EREsl25k4vYc7dx4HwGDpy/XW5ICqjjgqAG7uj4lDva1HWFgEDTGdvM1DERkfEwNBHRA13NvIsD525LR5Ou3NEPSTZWCgT4uqDjU24Ieqom2tRzgaNS/2Mlt6DoSbZMRGQyDE1EJLmWWXJNUuy52ziQehuXM8qGpJZ11Oj4lDuCGrijbT3XMiGJiKiq4qcdUTV2XfPPhdvnMhB7/jYuZeTqzbe+JyR1fMod7eq5wsmOHxtEVD3x04+oGknT5Em/bIs9fxsXb5cNSS1ql4YkN7Sr7wZnhiQiIgAMTURVWrr2npB07jYu3BeSrBRAizol1yR1fMod7RmSiIgeiJ+ORFXIDW3ePxdtZyDu/G2cv5WjN99KgXuOJLmjXX1X1LC3NVO3RESVC0MTUSV2Q5uHA6kZ0tGk8zfLhqRmPup/bgFQcrpNxZBERFQhDE1ElciNrDzEnf9fSDp3X0hSKIBmPioESUeS3KB2YEgiIjIGhiYiC3YrO/+eYUkycPZGtt58hQJo6q0quQXAU+5o78eQRERkKgxNRBbkdna+dLftA+dv40w5IamJl0q6T1KH+m5QOzIkERE9CQxNRGZ0OzsfB1MzpDtun07PLlPTxFsl/bot0M8NLo5KM3RKREQMTURPUEZOAQ6m3pbGb0tJzypT09irhvTrtkA/N7g6MSQREVkChiYiE7qTU4C4e37ddirtYSHJDR383OHGkEREZJEYmoiMKDP3fyEp9lz5Icnfs4Z0uq2Dnxvcne3M0CkRERmKoYnoMWhyCxGXWnKqLfb8bZxK00II/ZqnPZz/uU9SSUiqyZBERFQpMTQRGUCTW4iDF/53JOlkOSGpoYezdJ+kDn5uqFWjeockR6UNLszta+42iIgeG0MT0UNo7hYivvSapNTbSL5WNiQ1qOUk3QIg0M+92ockIqKqiqGJ6B7avHtC0vkMJF/TQHdfSHqqNCQ95Y7Ap9zgUcPePM0SEdETxdBE1VpWXiHiL2RIN5Q8frWckFTTCYH/HEnq6OcGDxVDEhFRdcTQRNVKVl4hDl24I90C4Fg5IcmvppP067aOT7nDkyGJiIjA0ERVUG5BEZrO2AYAiJ/eA8evaaXTbcevalB8X0qq7+4oBaSOT7nDS82QREREZTE0UaUkhMDdwmLcyS3EnZwCZOYW4k5uATJzC3AjK1+q6zhne5mQVM/dER393NGxgRsC/dzh4+LwpNsnIqJKiKGJzK5YJ5CZW4DMu4XIzC3AnZzSAFTyv3dy/5l+37SCIp2sddd1c/zf2G1PuaM2QxIREVUAQxMZzcOO/tzJfUAQyimANq+owtu0tVbAxVEJV0db6X9r2Nvg94SrAIDoCV3wtEcNY71EIiKqxhiaqFymPPrzIDXsbeB6XwAq+V8lXJ3umeaghIujLVydlHBSWkOhUJRZ139eavUYr56IiKgshqYqzlKO/rg6Ku/7uyT0lNa4ONjCxtrKiK+ciIjIuBiaKhFLPPqjdrD9Z/6jj/4QERFVZgxN91m4cCE+//xzpKWlISAgAF9//TU6dOhg1G1UlqM/agdb2PLoDxEREQCGJj1r1qzBhAkTsGjRIgQGBuLLL79ESEgIUlJS4OHhIWsdO07dQIGVxixHf1zuDT88+kNERGRUCiHuH360+goMDET79u3xzTffAAB0Oh18fX3xzjvvYOrUqQ9dVqvVQq1Ww3f8b7Cyc5S1PR79ISIiMq/S72+NRgOVSvXQWh5p+kdBQQESEhIwbdo0aZqVlRWCg4MRGxsrez3NfFSo5e6qH3p49IeIiKjSY2j6x61bt1BcXAxPT0+96Z6enjh16lSZ+vz8fOTn/+/O0xqNBgDww7Bmj0yqQBF0+UW458bVREREZAZarRZAyfXGj8LQVEFz5szB7Nmzy0z39fU1QzdERET0OLKysqBWqx9aw9D0j5o1a8La2hrp6el609PT0+Hl5VWmftq0aZgwYYL0PDMzE/Xq1cOlS5ceudOrMq1WC19fX1y+fFnGEbeqi/vhf7gvSnA/lOB+KMH9UMIS9oMQAllZWfDx8XlkLUPTP5RKJdq2bYuYmBgMGDAAQMmF4DExMYiIiChTb2dnBzs7uzLT1Wp1tf4PoJRKpeJ+APfDvbgvSnA/lOB+KMH9UMLc+0HuwQ6GpntMmDABYWFhaNeuHTp06IAvv/wSOTk5GDVqlLlbIyIiIjNjaLrHK6+8gps3b2LGjBlIS0tDq1atsHXr1jIXhxMREVH1w9B0n4iIiHJPxz2KnZ0dZs6cWe4pu+qE+6EE98P/cF+U4H4owf1QgvuhRGXbD7y5JREREZEMvLU0ERERkQwMTUREREQyMDQRERERycDQRERERCQDQ5MBFi5ciPr168Pe3h6BgYE4ePDgQ+vXrl2Lxo0bw97eHi1atMDmzZufUKemZch+WL58ORQKhd7D3t7+CXZrGrt370a/fv3g4+MDhUKBDRs2PHKZnTt3ok2bNrCzs0PDhg2xfPlyk/dpaobuh507d5Z5PygUCqSlpT2Zhk1kzpw5aN++PWrUqAEPDw8MGDAAKSkpj1yuqn1GVGQ/VMXPiO+++w4tW7aUbtgYFBSELVu2PHSZqvZeAAzfD5XhvcDQJNOaNWswYcIEzJw5E4mJiQgICEBISAhu3LhRbv3+/fsxbNgwhIeH4/DhwxgwYAAGDBiA48ePP+HOjcvQ/QCU3On1+vXr0uPixYtPsGPTyMnJQUBAABYuXCirPjU1FX379kX37t2RlJSE8ePH44033sC2bdtM3KlpGbofSqWkpOi9Jzw8PEzU4ZOxa9cujB07FgcOHEB0dDQKCwvRq1cv5OTkPHCZqvgZUZH9AFS9z4g6depg7ty5SEhIwKFDh/Dcc8/hxRdfRHJycrn1VfG9ABi+H4BK8F4QJEuHDh3E2LFjpefFxcXCx8dHzJkzp9z6l19+WfTt21dvWmBgoHjrrbdM2qepGbofli1bJtRq9RPqzjwAiPXr1z+0ZvLkyaJZs2Z601555RUREhJiws6eLDn7YceOHQKAuHPnzhPpyVxu3LghAIhdu3Y9sKaqfkbcS85+qA6fEUII4erqKpYsWVLuvOrwXij1sP1QGd4LPNIkQ0FBARISEhAcHCxNs7KyQnBwMGJjY8tdJjY2Vq8eAEJCQh5YXxlUZD8AQHZ2NurVqwdfX99H/iujqqqK74fH0apVK3h7e6Nnz57Yt2+fudsxOo1GAwBwc3N7YE11eE/I2Q9A1f6MKC4uxurVq5GTk4OgoKBya6rDe0HOfgAs/73A0CTDrVu3UFxcXGY4FU9Pzwdei5GWlmZQfWVQkf3g7++PpUuX4r///S9WrFgBnU6HTp064cqVK0+iZYvxoPeDVqvF3bt3zdTVk+ft7Y1FixYhKioKUVFR8PX1Rbdu3ZCYmGju1oxGp9Nh/PjxeOaZZ9C8efMH1lXFz4h7yd0PVfUz4tixY3B2doadnR3+9a9/Yf369WjatGm5tVX5vWDIfqgM7wUOo0ImFRQUpPevik6dOqFJkyZYvHgxPvroIzN2Rubg7+8Pf39/6XmnTp1w7tw5zJ8/H7/88osZOzOesWPH4vjx49i7d6+5WzErufuhqn5G+Pv7IykpCRqNBr///jvCwsKwa9euBwaGqsqQ/VAZ3gsMTTLUrFkT1tbWSE9P15uenp4OLy+vcpfx8vIyqL4yqMh+uJ+trS1at26Ns2fPmqJFi/Wg94NKpYKDg4OZurIMHTp0qDIBIyIiAhs3bsTu3btRp06dh9ZWxc+IUobsh/tVlc8IpVKJhg0bAgDatm2L+Ph4LFiwAIsXLy5TW5XfC4bsh/tZ4nuBp+dkUCqVaNu2LWJiYqRpOp0OMTExDzw3GxQUpFcPANHR0Q89l2vpKrIf7ldcXIxjx47B29vbVG1apKr4fjCWpKSkSv9+EEIgIiIC69evx/bt2+Hn5/fIZarie6Ii++F+VfUzQqfTIT8/v9x5VfG98CAP2w/3s8j3grmvRK8sVq9eLezs7MTy5cvFiRMnxJtvvilcXFxEWlqaEEKIESNGiKlTp0r1+/btEzY2NuI///mPOHnypJg5c6awtbUVx44dM9dLMApD98Ps2bPFtm3bxLlz50RCQoIYOnSosLe3F8nJyeZ6CUaRlZUlDh8+LA4fPiwAiC+++EIcPnxYXLx4UQghxNSpU8WIESOk+vPnzwtHR0cxadIkcfLkSbFw4UJhbW0ttm7daq6XYBSG7of58+eLDRs2iDNnzohjx46JcePGCSsrK/H333+b6yUYxZgxY4RarRY7d+4U169flx65ublSTXX4jKjIfqiKnxFTp04Vu3btEqmpqeLo0aNi6tSpQqFQiL/++ksIUT3eC0IYvh8qw3uBockAX3/9tahbt65QKpWiQ4cO4sCBA9K8rl27irCwML363377TTRq1EgolUrRrFkzsWnTpifcsWkYsh/Gjx8v1Xp6eoo+ffqIxMREM3RtXKU/nb//Ufraw8LCRNeuXcss06pVK6FUKsVTTz0lli1b9sT7NjZD98Nnn30mGjRoIOzt7YWbm5vo1q2b2L59u3maN6Ly9gEAvf+Pq8NnREX2Q1X8jHj99ddFvXr1hFKpFLVq1RI9evSQgoIQ1eO9IITh+6EyvBcUQgjx5I5rEREREVVOvKaJiIiISAaGJiIiIiIZGJqIiIiIZGBoIiIiIpKBoYmIiIhIBoYmIiIiIhkYmoiIiIhkYGgiokrjwoULUCgUSEpKMncrRPQE7d69G/369YOPjw8UCgU2bNhg0PKzZs2CQqEo83BycjJoPQxNRFTGzZs3oVQqkZOTg8LCQjg5OeHSpUvmbgu+vr64fv06mjdvbu5WTKpbt24YP3682ddBZClycnIQEBCAhQsXVmj5999/H9evX9d7NG3aFC+99JJB62FoIqIyYmNjERAQACcnJyQmJsLNzQ1169Y1d1uwtraGl5cXbGxsyp0vhEBRUdET7oqITO3555/Hxx9/jIEDB5Y7Pz8/H++//z5q164NJycnBAYGYufOndJ8Z2dneHl5SY/09HScOHEC4eHhBvXB0EREZezfvx/PPPMMAGDv3r3S34+yZMkSNGnSBPb29mjcuDG+/fZbaV7pqbV169ahe/fucHR0REBAAGJjYwEAWq0WDg4O2LJli946169fjxo1aiA3N7fM6bmdO3dCoVBgy5YtaNu2Lezs7LB3717k5+fj3XffhYeHB+zt7fHss88iPj5eWmfpcjExMWjXrh0cHR3RqVMnpKSkSDWzZs1Cq1atsHTpUtStWxfOzs54++23UVxcjMjISHh5ecHDwwOffPKJXr+ZmZl44403UKtWLahUKjz33HM4cuRImfX+8ssvqF+/PtRqNYYOHYqsrCwAwGuvvYZdu3ZhwYIF0imECxculLu/v/32Wzz99NOwt7eHp6cnhgwZ8sh1HD9+HM8//zycnZ3h6emJESNG4NatW9I6u3XrhoiICERERECtVqNmzZr44IMPcO+IWw/aLpG5REREIDY2FqtXr8bRo0fx0ksvoXfv3jhz5ky59UuWLEGjRo3QuXNnwzZk3qHviMhSXLx4UajVaqFWq4Wtra2wt7cXarVaKJVKYWdnJ9RqtRgzZswDl1+xYoXw9vYWUVFR4vz58yIqKkq4ubmJ5cuXCyGESE1NFQBE48aNxcaNG0VKSooYMmSIqFevnigsLBRCCDFkyBAxfPhwvfUOHjxYmla6jsOHDwsh/jdgcMuWLcVff/0lzp49K27fvi3effdd4ePjIzZv3iySk5NFWFiYcHV1Fbdv39ZbLjAwUOzcuVMkJyeLzp07i06dOknbnTlzpnB2dhZDhgwRycnJ4o8//hBKpVKEhISId955R5w6dUosXbpUANAbtDo4OFj069dPxMfHi9OnT4uJEycKd3d3adul6x00aJA4duyY2L17t/Dy8hL/93//J4QQIjMzUwQFBYnRo0eL69evi+vXr4uioqIy+zs+Pl5YW1uLVatWiQsXLojExESxYMGCh67jzp07olatWmLatGni5MmTIjExUfTs2VN0795dWm/Xrl2Fs7OzGDdunDh16pRYsWKFcHR0FN9///0jt0v0JAAQ69evl55fvHhRWFtbi6tXr+rV9ejRQ0ybNq3M8nfv3hWurq7is88+M3zbBi9BRFVSYWGhSE1NFUeOHBG2trbiyJEj4uzZs8LZ2Vns2rVLpKamips3bz5w+QYNGohVq1bpTfvoo49EUFCQEOJ/gWfJkiXS/OTkZAFAnDx5UgghxPr164Wzs7PIyckRQgih0WiEvb292LJli9467g9NGzZskNaZnZ0tbG1txcqVK6VpBQUFwsfHR0RGRuot9/fff0s1mzZtEgDE3bt3hRAl4cbR0VFotVqpJiQkRNSvX18UFxdL0/z9/cWcOXOEEELs2bNHqFQqkZeXV2bfLF68+IHrnTRpkggMDJSed+3aVYwbN+4Be7pEVFSUUKlUeuu5V3nr+Oijj0SvXr30pl2+fFkAECkpKdJyTZo0ETqdTqqZMmWKaNKkiaztEpna/aFp48aNAoBwcnLSe9jY2IiXX365zPKrVq0SNjY2Ii0tzeBtl39hABFVOzY2Nqhfvz5+++03tG/fHi1btsS+ffvg6emJLl26PHTZnJwcnDt3DuHh4Rg9erQ0vaioCGq1Wq+2ZcuW0t/e3t4AgBs3bqBx48bo06cPbG1t8ccff2Do0KGIioqCSqVCcHDwQ7ffrl076e9z586hsLBQ75Sira0tOnTogJMnT8rqpfT6rfr166NGjRpSjaenJ6ytrWFlZaU37caNGwCAI0eOIDs7G+7u7nrbuXv3Ls6dOyc9v3+93t7e0jrk6tmzJ+rVq4ennnoKvXv3Ru/evTFw4EA4Ojo+cJkjR45gx44dcHZ2LjPv3LlzaNSoEQCgY8eOUCgU0rygoCDMmzcPxcXFFdoukSllZ2fD2toaCQkJsLa21ptX3nt9yZIleOGFF+Dp6WnwthiaiAgA0KxZM1y8eBGFhYXQ6XRwdnZGUVERioqK4OzsjHr16iE5ObncZbOzswEAP/zwAwIDA/Xm3f8hZmtrK/1d+sWs0+kAAEqlEkOGDMGqVaswdOhQrFq1Cq+88soDL/wuZejPhuX0cv/80pryppUuk52dDW9vb70LUEu5uLg8dL33bleOGjVqIDExETt37sRff/2FGTNmYNasWYiPj9fb1r2ys7PRr18/fPbZZ2XmlYZGU2yXyJRat26N4uJi3Lhx45HXKKWmpmLHjh34448/KrQthiYiAgBs3rwZhYWF6NGjByIjI9G2bVsMHToUr732Gnr37l3mi/5enp6e8PHxwfnz5xEaGvpYfYSGhqJnz55ITk7G9u3b8fHHHxu0fIMGDaBUKrFv3z7Uq1cPAFBYWIj4+HiT/wS/TZs2SEtLk47aVZRSqURxcfEj62xsbBAcHIzg4GDMnDkTLi4u2L59OwYNGlTuOtq0aYOoqCjUr1//oUE0Li5O7/mBAwfw9NNPSwH4YdslMoXs7GycPXtWep6amoqkpCS4ubmhUaNGCA0NxciRIzFv3jy0bt0aN2/eRExMDFq2bIm+fftKyy1duhTe3t54/vnnK9QHQxMRAQDq1auHtLQ0pKen48UXX4RCoUBycjIGDx4s6yjE7Nmz8e6770KtVqN3797Iz8/HoUOHcOfOHUyYMEF2H126dIGXlxdCQ0Ph5+dX5sjVozg5OWHMmDGYNGmSdKuEyMhI5ObmGvzzYkMFBwcjKCgIAwYMQGRkJBo1aoRr165h06ZNGDhwoN5pxIepX78+4uLicOHCBTg7O8PNzU3vlCAAbNy4EefPn0eXLl3g6uqKzZs3Q6fTwd/f/4HrGDt2LH744QcMGzYMkydPhpubG86ePYvVq1djyZIlUii6dOkSJkyYgLfeeguJiYn4+uuvMW/ePFnbJTKFQ4cOoXv37tLz0s+UsLAwLF++HMuWLcPHH3+MiRMn4urVq6hZsyY6duyIF154QVpGp9Nh+fLleO2118ocAZeLoYmIJDt37kT79u1hb2+PPXv2oE6dOrJP27zxxhtwdHTE559/jkmTJsHJyQktWrQw+OiOQqHAsGHDEBkZiRkzZlTgVQBz586FTqfDiBEjkJWVhXbt2mHbtm1wdXWt0PrkUigU2Lx5M6ZPn45Ro0bh5s2b8PLyQpcuXQy6fuL9999HWFgYmjZtirt37yI1NbXMkSsXFxesW7cOs2bNQl5eHp5++mn8+uuvaNas2UPXsW/fPkyZMgW9evVCfn4+6tWrh969e+uFspEjR+Lu3bvo0KEDrK2tMW7cOLz55puytktkCt26ddO77cX9bG1tMXv2bMyePfuBNVZWVrh8+fJj9aEQD+uCiIiqlW7duqFVq1b48ssvzd0KkcXhzS2JiIiIZGBoIiIiIpKBp+eIiIiIZOCRJiIiIiIZGJqIiIiIZGBoIiIiIpKBoYmIiIhIBoYmIiIiIhkYmoiIiIhkYGgiIiIikoGhiYiIiEgGhiYiIiIiGf4fb+taBFLJUlAAAAAASUVORK5CYII=", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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CmtrazFo0CCRnJysNubMmTPi9ddfFyYmJqJy5cpixowZBWrZtGmTqF27tpDL5aJBgwZi165dWm0LbzlARETa4C0HSgdtfn/LhBBCj5mt3FAqlVAoFEhKSuL1TURE9FJpWTmoP3kPAODC134wlxvpuaKKSZvf36X2miYiIiKi0oShiYiIiEgDDE1EREREGmBoIiIiItIAQxMRERGRBhiaiIiIiDTA0ERERESkAYYmIiIiIg0wNBERERFpgKGJiIiISAMMTUREREQaYGgiIiIi0gBDExEREZEGGJqIiIiINMDQRERERKQBhiYiIiIiDTA0EREREWmAoYmIiIhIAwxNRERERBpgaCIiIiLSAEMTERERkQYYmoiIiIg0wNBEREREpAGGJiIiIiINMDQRERERaYChiYiIiEgDDE1EREREGihSaPrnn3/Qv39/+Pj44O7duwCANWvW4MiRIzotjoiIiKi00Do0bdmyBX5+fjAzM8Pp06eRmZkJAEhKSsL333+v8wKJiIiISgOtQ9O3336LpUuX4ueff4axsbE0/bXXXkNkZKROiyMiIiIqLbQOTTExMWjbtm2B6QqFAomJibqoiYiIiKjU0To0OTs74+rVqwWmHzlyBNWrV9dJUURERESljdahaejQoRg5ciTCw8Mhk8lw7949rFu3Dl988QWGDx9eHDUSERER6Z2RtgtMmDABKpUKHTt2RFpaGtq2bQsTExN88cUX+PTTT4ujRiIiIiK90zo0yWQyfPnllxg7diyuXr2KlJQU1K9fH5aWlsVRHxEREVGpoHVoyieXy1G/fn1d1kJERERUamkUmnr27KnxCrdu3VrkYoiIiIhKK40uBFcoFNLD2toa+/btw6lTp6T5ERER2LdvHxQKRbEVSkRERKRPGh1pWrVqlfTz+PHj0adPHyxduhSGhoYAgNzcXHzyySewtrYuniqJiIiI9EzrWw6sXLkSX3zxhRSYAMDQ0BBjxozBypUrdVocERERUWmhdWjKycnBpUuXCky/dOkSVCqVTooiIiIiKm20/vbcoEGDEBgYiGvXrsHLywsAEB4ejhkzZmDQoEE6L5CIiIioNNA6NP3www9wdnbG7Nmzcf/+fQCAi4sLxo4di88//1znBRIREZVH2bn/nZ0RQuixEtKUTLzCv5RSqQQAXgCOvH2hUCiQlJTE/UFERC+kUgl8uuE0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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "time to jit: 0:00:49.569381\n", - "time to train: 0:04:07.341922\n" - ] - } - ], - "source": [ - "train_fn = functools.partial(\n", - " ppo.train, num_timesteps=30_000_000, num_evals=5, reward_scaling=0.1,\n", - " episode_length=1000, normalize_observations=True, action_repeat=1,\n", - " unroll_length=10, num_minibatches=32, num_updates_per_batch=8,\n", - " discounting=0.97, learning_rate=3e-4, entropy_cost=1e-3, num_envs=2048,\n", - " batch_size=1024, seed=0)\n", - "\n", - "\n", - "x_data = []\n", - "y_data = []\n", - "ydataerr = []\n", - "times = [datetime.now()]\n", - "\n", - "max_y, min_y = 13000, 0\n", - "def progress(num_steps, metrics):\n", - " times.append(datetime.now())\n", - " x_data.append(num_steps)\n", - " y_data.append(metrics['eval/episode_reward'])\n", - " ydataerr.append(metrics['eval/episode_reward_std'])\n", - "\n", - " plt.xlim([0, train_fn.keywords['num_timesteps'] * 1.25])\n", - " plt.ylim([min_y, max_y])\n", - "\n", - " plt.xlabel('# environment steps')\n", - " plt.ylabel('reward per episode')\n", - " plt.title(f'y={y_data[-1]:.3f}')\n", - "\n", - " plt.errorbar(\n", - " x_data, y_data, yerr=ydataerr)\n", - " plt.show()\n", - "\n", - "make_inference_fn, params, _= train_fn(environment=env, progress_fn=progress)\n", - "\n", - "print(f'time to jit: {times[1] - times[0]}')\n", - "print(f'time to train: {times[-1] - times[1]}')" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "metadata": {}, - "outputs": [], - "source": [ - "model_path = '/tmp/mjx_brax_policy'\n", - "model.save_params(model_path, params)" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": {}, - "outputs": [], - "source": [ - "#@title Load Model and Define Inference Function\n", - "params = model.load_params(model_path)\n", - "\n", - "inference_fn = make_inference_fn(params)\n", - "jit_inference_fn = jax.jit(inference_fn)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Training With Domain Randomization" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": {}, - "outputs": [], - "source": [ - "def domain_randomize(sys, rng):\n", - " \"\"\"Randomizes the mjx.Model.\"\"\"\n", - " @jax.vmap\n", - " def rand(rng):\n", - " _, key = jax.random.split(rng, 2)\n", - " # friction\n", - " friction = jax.random.uniform(key, (1,), minval=0.6, maxval=1.4)\n", - " friction = sys.geom_friction.at[:, 0].set(friction)\n", - " # actuator\n", - " _, key = jax.random.split(key, 2)\n", - " gain_range = (-5, 5)\n", - " param = jax.random.uniform(\n", - " key, (1,), minval=gain_range[0], maxval=gain_range[1]\n", - " ) + sys.actuator_gainprm[:, 0]\n", - " gain = sys.actuator_gainprm.at[:, 0].set(param)\n", - " bias = sys.actuator_biasprm.at[:, 1].set(-param)\n", - " return friction, gain, bias\n", - "\n", - " friction, gain, bias = rand(rng)\n", - "\n", - " in_axes = jax.tree_util.tree_map(lambda x: None, sys)\n", - " in_axes = in_axes.tree_replace({\n", - " 'geom_friction': 0,\n", - " 'actuator_gainprm': 0,\n", - " 'actuator_biasprm': 0,\n", - " })\n", - "\n", - " sys = sys.tree_replace({\n", - " 'geom_friction': friction,\n", - " 'actuator_gainprm': gain,\n", - " 'actuator_biasprm': bias,\n", - " })\n", - "\n", - " return sys, in_axes" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Single env friction shape: (20, 3)\n", - "Batched env friction shape: (10, 20, 3)\n", - "Friction on geom 0: 1.0\n", - "Random frictions on geom 0: [0.884 0.923 0.776 1.339 1.3 0.648 0.754 1.288 0.731 0.978]\n" - ] - } - ], - "source": [ - "rng = jax.random.PRNGKey(0)\n", - "rng = jax.random.split(rng, 10)\n", - "batched_sys, _ = domain_randomize(env.sys, rng)\n", - "\n", - "print('Single env friction shape: ', env.sys.geom_friction.shape)\n", - "print('Batched env friction shape: ', batched_sys.geom_friction.shape)\n", - "\n", - "print('Friction on geom 0: ', env.sys.geom_friction[0, 0])\n", - "print('Random frictions on geom 0: ', batched_sys.geom_friction[:, 0, 0])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "kscale-sim-library", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.19" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} From da03b17a088a52e5df0b01d926c9e4815ddc4e81 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Thu, 23 May 2024 16:25:19 +0000 Subject: [PATCH 12/17] fix: fixing stompy environment import issues and created simplified mesh --- sim/mjx_gym/envs/stompy_env/stompy.py | 2 +- sim/mjx_gym/experiments/stompy_walk.yaml | 6 +++--- sim/mjx_gym/train.py | 10 ++-------- sim/mjx_gym/weights/stompy_walk.pkl | Bin 0 -> 68222 bytes 4 files changed, 6 insertions(+), 12 deletions(-) create mode 100644 sim/mjx_gym/weights/stompy_walk.pkl diff --git a/sim/mjx_gym/envs/stompy_env/stompy.py b/sim/mjx_gym/envs/stompy_env/stompy.py index 3ad6c46e..56790571 100644 --- a/sim/mjx_gym/envs/stompy_env/stompy.py +++ b/sim/mjx_gym/envs/stompy_env/stompy.py @@ -29,7 +29,7 @@ def __init__( log_reward_breakdown=True, **kwargs, ): - path = os.getenv('MODEL_DIR', '') + "/stompy.xml" + path = os.getenv('MODEL_DIR', '') + "/robot_simplified.xml" mj_model = mujoco.MjModel.from_xml_path(path) # type: ignore mj_model.opt.solver = mujoco.mjtSolver.mjSOL_CG # type: ignore # TODO: not sure why typing is not working here mj_model.opt.iterations = 6 diff --git a/sim/mjx_gym/experiments/stompy_walk.yaml b/sim/mjx_gym/experiments/stompy_walk.yaml index 56228271..32772a39 100644 --- a/sim/mjx_gym/experiments/stompy_walk.yaml +++ b/sim/mjx_gym/experiments/stompy_walk.yaml @@ -12,8 +12,8 @@ num_updates_per_batch: 8 discounting: 0.97 learning_rate: 0.0003 entropy_cost: 0.001 -num_envs: 2048 -batch_size: 1024 +num_envs: 512 +batch_size: 256 seed: 0 env_name: stompy reward_params: @@ -21,7 +21,7 @@ reward_params: weight: 1.25 rew_healthy: weight: 5.0 - healthy_z_lower: 1.0 + healthy_z_lower: 5.0 healthy_z_upper: 2.0 rew_ctrl_cost: weight: 0.1 diff --git a/sim/mjx_gym/train.py b/sim/mjx_gym/train.py index a107f1cd..5ab1e806 100644 --- a/sim/mjx_gym/train.py +++ b/sim/mjx_gym/train.py @@ -33,7 +33,6 @@ exclude_current_positions_from_observation = config.get('exclude_current_positions_from_observation', True) log_reward_breakdown = config.get('log_reward_breakdown', True) -print(f'env_name: {config.get("env_name", "stompy")}') print(f'reward_params: {reward_params}') print(f'training on {config["num_envs"]} environments') @@ -45,6 +44,7 @@ exclude_current_positions_from_observation=exclude_current_positions_from_observation, log_reward_breakdown=log_reward_breakdown ) +print(f'Env loaded: {config.get("env_name", "could not find environment")}') train_fn = functools.partial( ppo.train, @@ -65,13 +65,7 @@ seed=config['seed'] ) -x_data = [] -y_data = [] -ydataerr = [] times = [datetime.now()] - -max_y, min_y = 13000, 0 - def progress(num_steps, metrics): times.append(datetime.now()) @@ -82,7 +76,7 @@ def progress(num_steps, metrics): }) def save_model(current_step, make_policy, params): - model_path = "weights/ " + config.get('project_name', 'model') + ".pkl" + model_path = "weights/" + config.get('project_name', 'model') + ".pkl" model.save_params(model_path, params) print(f"Saved model at step {current_step} to {model_path}") diff --git a/sim/mjx_gym/weights/stompy_walk.pkl b/sim/mjx_gym/weights/stompy_walk.pkl new file mode 100644 index 0000000000000000000000000000000000000000..f479daa414ed2d2d3b6b5fbdb311d2b69959e2da GIT binary patch literal 68222 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 literal 0 HcmV?d00001 From f2b8f18d9d257fb3fe00a1d565967bdc7fe98fa7 Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Thu, 23 May 2024 18:52:57 +0000 Subject: [PATCH 13/17] chore: sorting libraries, typing, etc --- pyproject.toml | 2 +- sim/mjx_gym/envs/__init__.py | 11 +- .../default_humanoid_env/default_humanoid.py | 286 +++++++++--------- .../envs/default_humanoid_env/rewards.py | 67 ++-- sim/mjx_gym/envs/stompy_env/rewards.py | 67 ++-- sim/mjx_gym/envs/stompy_env/stompy.py | 283 ++++++++--------- sim/mjx_gym/play.py | 60 ++-- sim/mjx_gym/train.py | 90 +++--- sim/mjx_gym/utils/default.py | 8 +- sim/mjx_gym/utils/rollouts.py | 26 +- 10 files changed, 476 insertions(+), 424 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index e46f5a3e..a208dc5d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -30,7 +30,7 @@ warn_redundant_casts = true incremental = true namespace_packages = false -exclude = ["sim/humanoid_gym/", "sim/deploy", "sim/scripts/create_mjcf.py"] +exclude = ["sim/humanoid_gym/", "sim/deploy", "sim/scripts/create_mjcf.py", "sim/mjx_gym/"] diff --git a/sim/mjx_gym/envs/__init__.py b/sim/mjx_gym/envs/__init__.py index 92c53681..de025ce3 100644 --- a/sim/mjx_gym/envs/__init__.py +++ b/sim/mjx_gym/envs/__init__.py @@ -1,13 +1,10 @@ from brax import envs +from default_humanoid_env.default_humanoid import DefaultHumanoidEnv +from stompy_env.stompy import StompyEnv -from .default_humanoid_env.default_humanoid import DefaultHumanoidEnv -from .stompy_env.stompy import StompyEnv +environments = {"default_humanoid": DefaultHumanoidEnv, "stompy": StompyEnv} -environments = { - "default_humanoid": DefaultHumanoidEnv, - "stompy": StompyEnv -} def get_env(name: str, **kwargs) -> envs.Env: envs.register_environment(name, environments[name]) - return envs.get_environment(name, **kwargs) \ No newline at end of file + return envs.get_environment(name, **kwargs) diff --git a/sim/mjx_gym/envs/default_humanoid_env/default_humanoid.py b/sim/mjx_gym/envs/default_humanoid_env/default_humanoid.py index 4624792f..9e36aa56 100644 --- a/sim/mjx_gym/envs/default_humanoid_env/default_humanoid.py +++ b/sim/mjx_gym/envs/default_humanoid_env/default_humanoid.py @@ -1,150 +1,152 @@ import jax import jax.numpy as jp +import mujoco from brax.envs.base import PipelineEnv, State -from brax.mjx.base import State as mjxState from brax.io import mjcf -import mujoco -from mujoco import mjx +from brax.mjx.base import State as mjxState from etils import epath -from .rewards import get_reward_fn from utils.default import DEFAULT_REWARD_PARAMS +from .rewards import get_reward_fn + + class DefaultHumanoidEnv(PipelineEnv): - """ - An environment for humanoid body position, velocities, and angles. - - Note: This environment is based on the default humanoid environment in the Brax library. - https://github.com/google/brax/blob/main/brax/envs/humanoid.py - - However, this environment is designed to work with modular reward functions, allowing for quicker experimentation. - """ - def __init__( - self, - reward_params=DEFAULT_REWARD_PARAMS, - terminate_when_unhealthy=True, - reset_noise_scale=1e-2, - exclude_current_positions_from_observation=True, - log_reward_breakdown=True, - **kwargs, - ): - path = epath.Path(epath.resource_path('mujoco')) / ('mjx/test_data/humanoid') - mj_model = mujoco.MjModel.from_xml_path((path / 'humanoid.xml').as_posix()) # type: ignore - mj_model.opt.solver = mujoco.mjtSolver.mjSOL_CG # type: ignore # TODO: not sure why typing is not working here - mj_model.opt.iterations = 6 - mj_model.opt.ls_iterations = 6 - - sys = mjcf.load_model(mj_model) - - physics_steps_per_control_step = 4 # Should find way to perturb this value in the future - kwargs['n_frames'] = kwargs.get('n_frames', physics_steps_per_control_step) - kwargs['backend'] = 'mjx' - - super().__init__(sys, **kwargs) - - self._reward_params = reward_params - self._terminate_when_unhealthy = terminate_when_unhealthy - self._reset_noise_scale = reset_noise_scale - self._exclude_current_positions_from_observation = (exclude_current_positions_from_observation) - self._log_reward_breakdown = log_reward_breakdown - - self.reward_fn = get_reward_fn(self._reward_params, self.dt, include_reward_breakdown=True) - - def reset(self, rng: jp.ndarray) -> State: - """Resets the environment to an initial state. - - Args: - rng: Random number generator seed. - Returns: - The initial state of the environment. - """ - rng, rng1, rng2 = jax.random.split(rng, 3) - - low, hi = -self._reset_noise_scale, self._reset_noise_scale - qpos = self.sys.qpos0 + jax.random.uniform(rng1, (self.sys.nq,), minval=low, maxval=hi) - qvel = jax.random.uniform(rng2, (self.sys.nv,), minval=low, maxval=hi) - - mjx_state = self.pipeline_init(qpos, qvel) - assert type(mjx_state) == mjxState, f'mjx_state is of type {type(mjx_state)}' - - obs = self._get_obs(mjx_state, jp.zeros(self.sys.nu)) - reward, done, zero = jp.zeros(3) - metrics = { - 'x_position': zero, - 'y_position': zero, - 'distance_from_origin': zero, - 'x_velocity': zero, - 'y_velocity': zero, - } - for key in self._reward_params.keys(): - metrics[key] = zero - - return State(mjx_state, obs, reward, done, metrics) - - def step(self, state: State, action: jp.ndarray) -> State: - """Runs one timestep of the environment's dynamics. - - Args: - state: The current state of the environment. - action: The action to take. - Returns: - A tuple of the next state, the reward, whether the episode has ended, and additional information. - """ - mjx_state = state.pipeline_state - assert mjx_state, 'state.pipeline_state was recorded as None' - # TODO: determine whether to raise an error or reset the environment - - next_mjx_state = self.pipeline_step(mjx_state, action) - - assert type(next_mjx_state) == mjxState, f'next_mjx_state is of type {type(next_mjx_state)}' - assert type(mjx_state) == mjxState, f'mjx_state is of type {type(mjx_state)}' - # mlutz: from what I've seen, .pipeline_state and .pipeline_step(...) actually return an brax.mjx.base.State object - # however, the type hinting suggests that it should return a brax.base.State object - # brax.mjx.base.State inherits from brax.base.State but also inherits from mjx.Data, which is needed for some rewards - - obs = self._get_obs(mjx_state, action) - reward, is_healthy, reward_breakdown = self.reward_fn(mjx_state, action, next_mjx_state) - - if self._terminate_when_unhealthy: - done = 1.0 - is_healthy - else: - done = jp.array(0) - - state.metrics.update( - x_position=next_mjx_state.subtree_com[1][0], - y_position=next_mjx_state.subtree_com[1][1], - distance_from_origin=jp.linalg.norm(next_mjx_state.subtree_com[1]), - x_velocity=(next_mjx_state.subtree_com[1][0] - mjx_state.subtree_com[1][0]) / self.dt, - y_velocity=(next_mjx_state.subtree_com[1][1] - mjx_state.subtree_com[1][1]) / self.dt - ) - - if self._log_reward_breakdown: - for key, val in reward_breakdown.items(): - state.metrics[key] = val - - return state.replace( # type: ignore # TODO: fix the type hinting... - pipeline_state=next_mjx_state, obs=obs, reward=reward, done=done - ) - - def _get_obs( - self, data: mjxState, action: jp.ndarray - ) -> jp.ndarray: - """Observes humanoid body position, velocities, and angles. - - Args: - data: The current state of the environment. - action: The current action. - Returns: - Observations of the environment. - """ - position = data.qpos - if self._exclude_current_positions_from_observation: - position = position[2:] - - # external_contact_forces are excluded - return jp.concatenate([ - position, - data.qvel, - data.cinert[1:].ravel(), - data.cvel[1:].ravel(), - data.qfrc_actuator, - ]) \ No newline at end of file + """ + An environment for humanoid body position, velocities, and angles. + + Note: This environment is based on the default humanoid environment in the Brax library. + https://github.com/google/brax/blob/main/brax/envs/humanoid.py + + However, this environment is designed to work with modular reward functions, allowing for quicker experimentation. + """ + + def __init__( + self, + reward_params=DEFAULT_REWARD_PARAMS, + terminate_when_unhealthy=True, + reset_noise_scale=1e-2, + exclude_current_positions_from_observation=True, + log_reward_breakdown=True, + **kwargs, + ): + path = epath.Path(epath.resource_path("mujoco")) / ("mjx/test_data/humanoid") + mj_model = mujoco.MjModel.from_xml_path((path / "humanoid.xml").as_posix()) # type: ignore + mj_model.opt.solver = mujoco.mjtSolver.mjSOL_CG # type: ignore # TODO: not sure why typing is not working here + mj_model.opt.iterations = 6 + mj_model.opt.ls_iterations = 6 + + sys = mjcf.load_model(mj_model) + + physics_steps_per_control_step = 4 # Should find way to perturb this value in the future + kwargs["n_frames"] = kwargs.get("n_frames", physics_steps_per_control_step) + kwargs["backend"] = "mjx" + + super().__init__(sys, **kwargs) + + self._reward_params = reward_params + self._terminate_when_unhealthy = terminate_when_unhealthy + self._reset_noise_scale = reset_noise_scale + self._exclude_current_positions_from_observation = exclude_current_positions_from_observation + self._log_reward_breakdown = log_reward_breakdown + + self.reward_fn = get_reward_fn(self._reward_params, self.dt, include_reward_breakdown=True) + + def reset(self, rng: jp.ndarray) -> State: + """Resets the environment to an initial state. + + Args: + rng: Random number generator seed. + Returns: + The initial state of the environment. + """ + rng, rng1, rng2 = jax.random.split(rng, 3) + + low, hi = -self._reset_noise_scale, self._reset_noise_scale + qpos = self.sys.qpos0 + jax.random.uniform(rng1, (self.sys.nq,), minval=low, maxval=hi) + qvel = jax.random.uniform(rng2, (self.sys.nv,), minval=low, maxval=hi) + + mjx_state = self.pipeline_init(qpos, qvel) + assert type(mjx_state) == mjxState, f"mjx_state is of type {type(mjx_state)}" + + obs = self._get_obs(mjx_state, jp.zeros(self.sys.nu)) + reward, done, zero = jp.zeros(3) + metrics = { + "x_position": zero, + "y_position": zero, + "distance_from_origin": zero, + "x_velocity": zero, + "y_velocity": zero, + } + for key in self._reward_params.keys(): + metrics[key] = zero + + return State(mjx_state, obs, reward, done, metrics) + + def step(self, state: State, action: jp.ndarray) -> State: + """Runs one timestep of the environment's dynamics. + + Args: + state: The current state of the environment. + action: The action to take. + Returns: + A tuple of the next state, the reward, whether the episode has ended, and additional information. + """ + mjx_state = state.pipeline_state + assert mjx_state, "state.pipeline_state was recorded as None" + # TODO: determine whether to raise an error or reset the environment + + next_mjx_state = self.pipeline_step(mjx_state, action) + + assert type(next_mjx_state) == mjxState, f"next_mjx_state is of type {type(next_mjx_state)}" + assert type(mjx_state) == mjxState, f"mjx_state is of type {type(mjx_state)}" + # mlutz: from what I've seen, .pipeline_state and .pipeline_step(...) actually return an brax.mjx.base.State object + # however, the type hinting suggests that it should return a brax.base.State object + # brax.mjx.base.State inherits from brax.base.State but also inherits from mjx.Data, which is needed for some rewards + + obs = self._get_obs(mjx_state, action) + reward, is_healthy, reward_breakdown = self.reward_fn(mjx_state, action, next_mjx_state) + + if self._terminate_when_unhealthy: + done = 1.0 - is_healthy + else: + done = jp.array(0) + + state.metrics.update( + x_position=next_mjx_state.subtree_com[1][0], + y_position=next_mjx_state.subtree_com[1][1], + distance_from_origin=jp.linalg.norm(next_mjx_state.subtree_com[1]), + x_velocity=(next_mjx_state.subtree_com[1][0] - mjx_state.subtree_com[1][0]) / self.dt, + y_velocity=(next_mjx_state.subtree_com[1][1] - mjx_state.subtree_com[1][1]) / self.dt, + ) + + if self._log_reward_breakdown: + for key, val in reward_breakdown.items(): + state.metrics[key] = val + + return state.replace( # type: ignore # TODO: fix the type hinting... + pipeline_state=next_mjx_state, obs=obs, reward=reward, done=done + ) + + def _get_obs(self, data: mjxState, action: jp.ndarray) -> jp.ndarray: + """Observes humanoid body position, velocities, and angles. + + Args: + data: The current state of the environment. + action: The current action. + Returns: + Observations of the environment. + """ + position = data.qpos + if self._exclude_current_positions_from_observation: + position = position[2:] + + # external_contact_forces are excluded + return jp.concatenate( + [ + position, + data.qvel, + data.cinert[1:].ravel(), + data.cvel[1:].ravel(), + data.qfrc_actuator, + ] + ) diff --git a/sim/mjx_gym/envs/default_humanoid_env/rewards.py b/sim/mjx_gym/envs/default_humanoid_env/rewards.py index 8e462967..c3a5067e 100644 --- a/sim/mjx_gym/envs/default_humanoid_env/rewards.py +++ b/sim/mjx_gym/envs/default_humanoid_env/rewards.py @@ -1,32 +1,42 @@ +from typing import Callable, Dict, Tuple + import jax import jax.numpy as jp from brax import base from brax.mjx.base import State as mjxState -from typing import Callable, Dict, Tuple -def get_reward_fn(reward_params: Dict[str, Dict[str, float]], dt, include_reward_breakdown) -> Callable[[mjxState, jp.ndarray, mjxState], Tuple[jp.ndarray, jp.ndarray, Dict[str, jp.ndarray]]]: + +def get_reward_fn( + reward_params: Dict[str, Dict[str, float]], dt, include_reward_breakdown +) -> Callable[[mjxState, jp.ndarray, mjxState], Tuple[jp.ndarray, jp.ndarray, Dict[str, jp.ndarray]]]: """Get a combined reward function. - + Args: reward_params: Dictionary of reward parameters. dt: Time step. Returns: A reward function that takes in a state, action, and next state and returns a float wrapped in a jp.ndarray. """ - def reward_fn(state: mjxState, action: jp.ndarray, next_state: mjxState) -> Tuple[jp.ndarray, jp.ndarray, Dict[str, jp.ndarray]]: - reward, is_healthy = jp.array(0.), jp.array(1.) + + def reward_fn( + state: mjxState, action: jp.ndarray, next_state: mjxState + ) -> Tuple[jp.ndarray, jp.ndarray, Dict[str, jp.ndarray]]: + reward, is_healthy = jp.array(0.0), jp.array(1.0) rewards = {} for key, params in reward_params.items(): r, h = reward_functions[key](state, action, next_state, dt, params) is_healthy *= h reward += r - if include_reward_breakdown: # For more detailed logging, can be disabled for performance + if include_reward_breakdown: # For more detailed logging, can be disabled for performance rewards[key] = r return reward, is_healthy, rewards return reward_fn -def forward_reward_fn(state: mjxState, action: jp.ndarray, next_state: mjxState, dt: jax.Array, params: Dict[str, float]) -> Tuple[jp.ndarray, jp.ndarray]: + +def forward_reward_fn( + state: mjxState, action: jp.ndarray, next_state: mjxState, dt: jax.Array, params: Dict[str, float] +) -> Tuple[jp.ndarray, jp.ndarray]: """Reward function for moving forward. Args: @@ -36,16 +46,19 @@ def forward_reward_fn(state: mjxState, action: jp.ndarray, next_state: mjxState, dt: Time step. params: Reward parameters. Returns: - A float wrapped in a jax array. + A float wrapped in a jax array. """ - xpos = state.subtree_com[1][0] # TODO: include stricter typing than mjxState to avoid this type error + xpos = state.subtree_com[1][0] # TODO: include stricter typing than mjxState to avoid this type error next_xpos = next_state.subtree_com[1][0] velocity = (next_xpos - xpos) / dt - forward_reward = params['weight'] * velocity - - return forward_reward, jp.array(1.) # TODO: ensure everything is initialized in a size 2 array instead... + forward_reward = params["weight"] * velocity + + return forward_reward, jp.array(1.0) # TODO: ensure everything is initialized in a size 2 array instead... + -def healthy_reward_fn(state: mjxState, action: jp.ndarray, next_state: mjxState, dt: jax.Array, params: Dict[str, float]) -> Tuple[jp.ndarray, jp.ndarray]: +def healthy_reward_fn( + state: mjxState, action: jp.ndarray, next_state: mjxState, dt: jax.Array, params: Dict[str, float] +) -> Tuple[jp.ndarray, jp.ndarray]: """Reward function for staying healthy. Args: @@ -55,17 +68,20 @@ def healthy_reward_fn(state: mjxState, action: jp.ndarray, next_state: mjxState, dt: Time step. params: Reward parameters. Returns: - A float wrapped in a jax array. + A float wrapped in a jax array. """ - min_z = params['healthy_z_lower'] - max_z = params['healthy_z_upper'] + min_z = params["healthy_z_lower"] + max_z = params["healthy_z_upper"] is_healthy = jp.where(state.q[2] < min_z, 0.0, 1.0) is_healthy = jp.where(state.q[2] > max_z, 0.0, is_healthy) - healthy_reward = jp.array(params['weight']) * is_healthy + healthy_reward = jp.array(params["weight"]) * is_healthy return healthy_reward, is_healthy -def ctrl_cost_reward_fn(state: mjxState, action: jp.ndarray, next_state: mjxState, dt: jax.Array, params: Dict[str, float]) -> Tuple[jp.ndarray, jp.ndarray]: + +def ctrl_cost_reward_fn( + state: mjxState, action: jp.ndarray, next_state: mjxState, dt: jax.Array, params: Dict[str, float] +) -> Tuple[jp.ndarray, jp.ndarray]: """Reward function for control cost. Args: @@ -75,15 +91,16 @@ def ctrl_cost_reward_fn(state: mjxState, action: jp.ndarray, next_state: mjxStat dt: Time step. params: Reward parameters. Returns: - A float wrapped in a jax array. + A float wrapped in a jax array. """ - ctrl_cost = -params['weight'] * jp.sum(jp.square(action)) + ctrl_cost = -params["weight"] * jp.sum(jp.square(action)) + + return ctrl_cost, jp.array(1.0) - return ctrl_cost, jp.array(1.) # NOTE: After defining the reward functions, they must be added here to be used in the combined reward function. reward_functions = { - 'rew_forward': forward_reward_fn, - 'rew_healthy': healthy_reward_fn, - 'rew_ctrl_cost': ctrl_cost_reward_fn -} \ No newline at end of file + "rew_forward": forward_reward_fn, + "rew_healthy": healthy_reward_fn, + "rew_ctrl_cost": ctrl_cost_reward_fn, +} diff --git a/sim/mjx_gym/envs/stompy_env/rewards.py b/sim/mjx_gym/envs/stompy_env/rewards.py index ccd5cd8f..c3b6fee7 100644 --- a/sim/mjx_gym/envs/stompy_env/rewards.py +++ b/sim/mjx_gym/envs/stompy_env/rewards.py @@ -1,32 +1,42 @@ +from typing import Callable, Dict, Tuple + import jax import jax.numpy as jp from brax import base from brax.mjx.base import State as mjxState -from typing import Callable, Dict, Tuple -def get_reward_fn(reward_params: Dict[str, Dict[str, float]], dt, include_reward_breakdown) -> Callable[[mjxState, jp.ndarray, mjxState], Tuple[jp.ndarray, jp.ndarray, Dict[str, jp.ndarray]]]: + +def get_reward_fn( + reward_params: Dict[str, Dict[str, float]], dt, include_reward_breakdown +) -> Callable[[mjxState, jp.ndarray, mjxState], Tuple[jp.ndarray, jp.ndarray, Dict[str, jp.ndarray]]]: """Get a combined reward function. - + Args: reward_params: Dictionary of reward parameters. dt: Time step. Returns: A reward function that takes in a state, action, and next state and returns a float wrapped in a jp.ndarray. """ - def reward_fn(state: mjxState, action: jp.ndarray, next_state: mjxState) -> Tuple[jp.ndarray, jp.ndarray, Dict[str, jp.ndarray]]: - reward, is_healthy = jp.array(0.), jp.array(1.) + + def reward_fn( + state: mjxState, action: jp.ndarray, next_state: mjxState + ) -> Tuple[jp.ndarray, jp.ndarray, Dict[str, jp.ndarray]]: + reward, is_healthy = jp.array(0.0), jp.array(1.0) rewards = {} for key, params in reward_params.items(): r, h = reward_functions[key](state, action, next_state, dt, params) is_healthy *= h reward += r - if include_reward_breakdown: # For more detailed logging, can be disabled for performance + if include_reward_breakdown: # For more detailed logging, can be disabled for performance rewards[key] = r return reward, is_healthy, rewards return reward_fn -def forward_reward_fn(state: mjxState, action: jp.ndarray, next_state: mjxState, dt: jax.Array, params: Dict[str, float]) -> Tuple[jp.ndarray, jp.ndarray]: + +def forward_reward_fn( + state: mjxState, action: jp.ndarray, next_state: mjxState, dt: jax.Array, params: Dict[str, float] +) -> Tuple[jp.ndarray, jp.ndarray]: """Reward function for moving forward. Args: @@ -36,16 +46,19 @@ def forward_reward_fn(state: mjxState, action: jp.ndarray, next_state: mjxState, dt: Time step. params: Reward parameters. Returns: - A float wrapped in a jax array. + A float wrapped in a jax array. """ - xpos = state.subtree_com[1][0] # TODO: include stricter typing than mjxState to avoid this type error + xpos = state.subtree_com[1][0] # TODO: include stricter typing than mjxState to avoid this type error next_xpos = next_state.subtree_com[1][0] velocity = (next_xpos - xpos) / dt - forward_reward = params['weight'] * velocity - - return forward_reward, jp.array(1.) # TODO: ensure everything is initialized in a size 2 array instead... + forward_reward = params["weight"] * velocity + + return forward_reward, jp.array(1.0) # TODO: ensure everything is initialized in a size 2 array instead... + -def healthy_reward_fn(state: mjxState, action: jp.ndarray, next_state: mjxState, dt: jax.Array, params: Dict[str, float]) -> Tuple[jp.ndarray, jp.ndarray]: +def healthy_reward_fn( + state: mjxState, action: jp.ndarray, next_state: mjxState, dt: jax.Array, params: Dict[str, float] +) -> Tuple[jp.ndarray, jp.ndarray]: """Reward function for staying healthy. Args: @@ -55,17 +68,20 @@ def healthy_reward_fn(state: mjxState, action: jp.ndarray, next_state: mjxState, dt: Time step. params: Reward parameters. Returns: - A float wrapped in a jax array. + A float wrapped in a jax array. """ - min_z = params['healthy_z_lower'] - max_z = params['healthy_z_upper'] + min_z = params["healthy_z_lower"] + max_z = params["healthy_z_upper"] is_healthy = jp.where(state.q[2] < min_z, 0.0, 1.0) is_healthy = jp.where(state.q[2] > max_z, 0.0, is_healthy) - healthy_reward = jp.array(params['weight']) * is_healthy + healthy_reward = jp.array(params["weight"]) * is_healthy return healthy_reward, is_healthy -def ctrl_cost_reward_fn(state: mjxState, action: jp.ndarray, next_state: mjxState, dt: jax.Array, params: Dict[str, float]) -> Tuple[jp.ndarray, jp.ndarray]: + +def ctrl_cost_reward_fn( + state: mjxState, action: jp.ndarray, next_state: mjxState, dt: jax.Array, params: Dict[str, float] +) -> Tuple[jp.ndarray, jp.ndarray]: """Reward function for control cost. Args: @@ -75,14 +91,15 @@ def ctrl_cost_reward_fn(state: mjxState, action: jp.ndarray, next_state: mjxStat dt: Time step. params: Reward parameters. Returns: - A float wrapped in a jax array. + A float wrapped in a jax array. """ - ctrl_cost = -params['weight'] * jp.sum(jp.square(action)) + ctrl_cost = -params["weight"] * jp.sum(jp.square(action)) + + return ctrl_cost, jp.array(1.0) - return ctrl_cost, jp.array(1.) reward_functions = { - 'rew_forward': forward_reward_fn, - 'rew_healthy': healthy_reward_fn, - 'rew_ctrl_cost': ctrl_cost_reward_fn -} \ No newline at end of file + "rew_forward": forward_reward_fn, + "rew_healthy": healthy_reward_fn, + "rew_ctrl_cost": ctrl_cost_reward_fn, +} diff --git a/sim/mjx_gym/envs/stompy_env/stompy.py b/sim/mjx_gym/envs/stompy_env/stompy.py index 56790571..1112e541 100644 --- a/sim/mjx_gym/envs/stompy_env/stompy.py +++ b/sim/mjx_gym/envs/stompy_env/stompy.py @@ -1,152 +1,155 @@ +import os import jax import jax.numpy as jp +import mujoco from brax.envs.base import PipelineEnv, State -from brax.mjx.base import State as mjxState from brax.io import mjcf -import mujoco -from mujoco import mjx +from brax.mjx.base import State as mjxState from etils import epath -import os +from mujoco import mjx + from .rewards import get_reward_fn DEFAULT_REWARD_PARAMS = { - 'rew_forward': {'weight': 1.25}, - 'rew_healthy': {'weight': 5.0, 'healthy_z_lower': 1.0, 'healthy_z_upper': 2.0}, - 'rew_ctrl_cost': {'weight': 0.1} + "rew_forward": {"weight": 1.25}, + "rew_healthy": {"weight": 5.0, "healthy_z_lower": 1.0, "healthy_z_upper": 2.0}, + "rew_ctrl_cost": {"weight": 0.1}, } + class StompyEnv(PipelineEnv): - """ - An environment for humanoid body position, velocities, and angles. - """ - def __init__( - self, - reward_params=DEFAULT_REWARD_PARAMS, - terminate_when_unhealthy=True, - reset_noise_scale=1e-2, - exclude_current_positions_from_observation=True, - log_reward_breakdown=True, - **kwargs, - ): - path = os.getenv('MODEL_DIR', '') + "/robot_simplified.xml" - mj_model = mujoco.MjModel.from_xml_path(path) # type: ignore - mj_model.opt.solver = mujoco.mjtSolver.mjSOL_CG # type: ignore # TODO: not sure why typing is not working here - mj_model.opt.iterations = 6 - mj_model.opt.ls_iterations = 6 - - sys = mjcf.load_model(mj_model) - - physics_steps_per_control_step = 4 # Should find way to perturb this value in the future - kwargs['n_frames'] = kwargs.get('n_frames', physics_steps_per_control_step) - kwargs['backend'] = 'mjx' - - super().__init__(sys, **kwargs) - - self._reward_params = reward_params - self._terminate_when_unhealthy = terminate_when_unhealthy - self._reset_noise_scale = reset_noise_scale - self._exclude_current_positions_from_observation = (exclude_current_positions_from_observation) - self._log_reward_breakdown = log_reward_breakdown - - self.reward_fn = get_reward_fn(self._reward_params, self.dt, include_reward_breakdown=True) - - def reset(self, rng: jp.ndarray) -> State: - """Resets the environment to an initial state. - - Args: - rng: Random number generator seed. - Returns: - The initial state of the environment. - """ - rng, rng1, rng2 = jax.random.split(rng, 3) - - low, hi = -self._reset_noise_scale, self._reset_noise_scale - qpos = self.sys.qpos0 + jax.random.uniform(rng1, (self.sys.nq,), minval=low, maxval=hi) - qvel = jax.random.uniform(rng2, (self.sys.nv,), minval=low, maxval=hi) - - mjx_state = self.pipeline_init(qpos, qvel) - assert type(mjx_state) == mjxState, f'mjx_state is of type {type(mjx_state)}' - - obs = self._get_obs(mjx_state, jp.zeros(self.sys.nu)) - reward, done, zero = jp.zeros(3) - metrics = { - 'x_position': zero, - 'y_position': zero, - 'distance_from_origin': zero, - 'x_velocity': zero, - 'y_velocity': zero, - } - for key in self._reward_params.keys(): - metrics[key] = zero - - return State(mjx_state, obs, reward, done, metrics) - - def step(self, state: State, action: jp.ndarray) -> State: - """Runs one timestep of the environment's dynamics. - - Args: - state: The current state of the environment. - action: The action to take. - Returns: - A tuple of the next state, the reward, whether the episode has ended, and additional information. - """ - mjx_state = state.pipeline_state - assert mjx_state, 'state.pipeline_state was recorded as None' - # TODO: determine whether to raise an error or reset the environment - - next_mjx_state = self.pipeline_step(mjx_state, action) - - assert type(next_mjx_state) == mjxState, f'next_mjx_state is of type {type(next_mjx_state)}' - assert type(mjx_state) == mjxState, f'mjx_state is of type {type(mjx_state)}' - # mlutz: from what I've seen, .pipeline_state and .pipeline_step(...) actually return an brax.mjx.base.State object - # however, the type hinting suggests that it should return a brax.base.State object - # brax.mjx.base.State inherits from brax.base.State but also inherits from mjx.Data, which is needed for some rewards - - obs = self._get_obs(mjx_state, action) - reward, is_healthy, reward_breakdown = self.reward_fn(mjx_state, action, next_mjx_state) - - if self._terminate_when_unhealthy: - done = 1.0 - is_healthy - else: - done = jp.array(0) - - state.metrics.update( - x_position=next_mjx_state.subtree_com[1][0], - y_position=next_mjx_state.subtree_com[1][1], - distance_from_origin=jp.linalg.norm(next_mjx_state.subtree_com[1]), - x_velocity=(next_mjx_state.subtree_com[1][0] - mjx_state.subtree_com[1][0]) / self.dt, - y_velocity=(next_mjx_state.subtree_com[1][1] - mjx_state.subtree_com[1][1]) / self.dt - ) - - if self._log_reward_breakdown: - for key, val in reward_breakdown.items(): - state.metrics[key] = val - - return state.replace( # type: ignore # TODO: fix the type hinting... - pipeline_state=next_mjx_state, obs=obs, reward=reward, done=done - ) - - def _get_obs( - self, data: mjxState, action: jp.ndarray - ) -> jp.ndarray: - """Observes humanoid body position, velocities, and angles. - - Args: - data: The current state of the environment. - action: The current action. - Returns: - Observations of the environment. - """ - position = data.qpos - if self._exclude_current_positions_from_observation: - position = position[2:] - - # external_contact_forces are excluded - return jp.concatenate([ - position, - data.qvel, - data.cinert[1:].ravel(), - data.cvel[1:].ravel(), - data.qfrc_actuator, - ]) \ No newline at end of file + """ + An environment for humanoid body position, velocities, and angles. + """ + + def __init__( + self, + reward_params=DEFAULT_REWARD_PARAMS, + terminate_when_unhealthy=True, + reset_noise_scale=1e-2, + exclude_current_positions_from_observation=True, + log_reward_breakdown=True, + **kwargs, + ): + path = os.getenv("MODEL_DIR", "") + "/robot_simplified.xml" + mj_model = mujoco.MjModel.from_xml_path(path) # type: ignore + mj_model.opt.solver = mujoco.mjtSolver.mjSOL_CG # type: ignore # TODO: not sure why typing is not working here + mj_model.opt.iterations = 6 + mj_model.opt.ls_iterations = 6 + + sys = mjcf.load_model(mj_model) + + physics_steps_per_control_step = 4 # Should find way to perturb this value in the future + kwargs["n_frames"] = kwargs.get("n_frames", physics_steps_per_control_step) + kwargs["backend"] = "mjx" + + super().__init__(sys, **kwargs) + + self._reward_params = reward_params + self._terminate_when_unhealthy = terminate_when_unhealthy + self._reset_noise_scale = reset_noise_scale + self._exclude_current_positions_from_observation = exclude_current_positions_from_observation + self._log_reward_breakdown = log_reward_breakdown + + self.reward_fn = get_reward_fn(self._reward_params, self.dt, include_reward_breakdown=True) + + def reset(self, rng: jp.ndarray) -> State: + """Resets the environment to an initial state. + + Args: + rng: Random number generator seed. + Returns: + The initial state of the environment. + """ + rng, rng1, rng2 = jax.random.split(rng, 3) + + low, hi = -self._reset_noise_scale, self._reset_noise_scale + qpos = self.sys.qpos0 + jax.random.uniform(rng1, (self.sys.nq,), minval=low, maxval=hi) + qvel = jax.random.uniform(rng2, (self.sys.nv,), minval=low, maxval=hi) + + mjx_state = self.pipeline_init(qpos, qvel) + assert type(mjx_state) == mjxState, f"mjx_state is of type {type(mjx_state)}" + + obs = self._get_obs(mjx_state, jp.zeros(self.sys.nu)) + reward, done, zero = jp.zeros(3) + metrics = { + "x_position": zero, + "y_position": zero, + "distance_from_origin": zero, + "x_velocity": zero, + "y_velocity": zero, + } + for key in self._reward_params.keys(): + metrics[key] = zero + + return State(mjx_state, obs, reward, done, metrics) + + def step(self, state: State, action: jp.ndarray) -> State: + """Runs one timestep of the environment's dynamics. + + Args: + state: The current state of the environment. + action: The action to take. + Returns: + A tuple of the next state, the reward, whether the episode has ended, and additional information. + """ + mjx_state = state.pipeline_state + assert mjx_state, "state.pipeline_state was recorded as None" + # TODO: determine whether to raise an error or reset the environment + + next_mjx_state = self.pipeline_step(mjx_state, action) + + assert type(next_mjx_state) == mjxState, f"next_mjx_state is of type {type(next_mjx_state)}" + assert type(mjx_state) == mjxState, f"mjx_state is of type {type(mjx_state)}" + # mlutz: from what I've seen, .pipeline_state and .pipeline_step(...) actually return an brax.mjx.base.State object + # however, the type hinting suggests that it should return a brax.base.State object + # brax.mjx.base.State inherits from brax.base.State but also inherits from mjx.Data, which is needed for some rewards + + obs = self._get_obs(mjx_state, action) + reward, is_healthy, reward_breakdown = self.reward_fn(mjx_state, action, next_mjx_state) + + if self._terminate_when_unhealthy: + done = 1.0 - is_healthy + else: + done = jp.array(0) + + state.metrics.update( + x_position=next_mjx_state.subtree_com[1][0], + y_position=next_mjx_state.subtree_com[1][1], + distance_from_origin=jp.linalg.norm(next_mjx_state.subtree_com[1]), + x_velocity=(next_mjx_state.subtree_com[1][0] - mjx_state.subtree_com[1][0]) / self.dt, + y_velocity=(next_mjx_state.subtree_com[1][1] - mjx_state.subtree_com[1][1]) / self.dt, + ) + + if self._log_reward_breakdown: + for key, val in reward_breakdown.items(): + state.metrics[key] = val + + return state.replace( # type: ignore # TODO: fix the type hinting... + pipeline_state=next_mjx_state, obs=obs, reward=reward, done=done + ) + + def _get_obs(self, data: mjxState, action: jp.ndarray) -> jp.ndarray: + """Observes humanoid body position, velocities, and angles. + + Args: + data: The current state of the environment. + action: The current action. + Returns: + Observations of the environment. + """ + position = data.qpos + if self._exclude_current_positions_from_observation: + position = position[2:] + + # external_contact_forces are excluded + return jp.concatenate( + [ + position, + data.qvel, + data.cinert[1:].ravel(), + data.cvel[1:].ravel(), + data.qfrc_actuator, + ] + ) diff --git a/sim/mjx_gym/play.py b/sim/mjx_gym/play.py index 1eb81c52..4883b2bf 100644 --- a/sim/mjx_gym/play.py +++ b/sim/mjx_gym/play.py @@ -1,52 +1,60 @@ +import argparse + +import mediapy as media +import numpy as np import wandb import yaml -import argparse -from envs import get_env from brax.io import model -from brax.training.agents.ppo import networks as ppo_networks from brax.training.acme import running_statistics -import mediapy as media -import numpy as np +from brax.training.agents.ppo import networks as ppo_networks +from envs import get_env from utils.default import DEFAULT_REWARD_PARAMS from utils.rollouts import render_mjx_rollout, render_mujoco_rollout # Parse command-line arguments -parser = argparse.ArgumentParser(description='Run PPO training with specified config file.') -parser.add_argument('--config', type=str, required=True, help='Path to the config YAML file') -parser.add_argument('--use_mujoco', type=bool, default=False, help='Use mujoco instead of mjx for rendering') -parser.add_argument('--params_path', type=str, default=None, help='Path to the params file') +parser = argparse.ArgumentParser(description="Run PPO training with specified config file.") +parser.add_argument("--config", type=str, required=True, help="Path to the config YAML file") +parser.add_argument("--use_mujoco", type=bool, default=False, help="Use mujoco instead of mjx for rendering") +parser.add_argument("--params_path", type=str, default=None, help="Path to the params file") args = parser.parse_args() # Load config file -with open(args.config, 'r') as file: +with open(args.config, "r") as file: config = yaml.safe_load(file) # Initialize wandb -wandb.init(project=config.get('project_name', 'robotic_locomotion_training') + "_test", name=config.get('experiment_name', 'ppo-training') + "_test") +wandb.init( + project=config.get("project_name", "robotic_locomotion_training") + "_test", + name=config.get("experiment_name", "ppo-training") + "_test", +) # Load environment env = get_env( - name=config.get('env_name', 'stompy'), - reward_params=config.get('reward_params', DEFAULT_REWARD_PARAMS), - terminate_when_unhealthy=config.get('terminate_when_unhealthy', True), - reset_noise_scale=config.get('reset_noise_scale', 1e-2), - exclude_current_positions_from_observation=config.get('exclude_current_positions_from_observation', True), - log_reward_breakdown=config.get('log_reward_breakdown', True) + name=config.get("env_name", "stompy"), + reward_params=config.get("reward_params", DEFAULT_REWARD_PARAMS), + terminate_when_unhealthy=config.get("terminate_when_unhealthy", True), + reset_noise_scale=config.get("reset_noise_scale", 1e-2), + exclude_current_positions_from_observation=config.get("exclude_current_positions_from_observation", True), + log_reward_breakdown=config.get("log_reward_breakdown", True), +) +print( + f'Loaded environment {config.get("env_name", "")} with env.observation_size: {env.observation_size} and env.action_size: {env.action_size}' ) -print(f'Loaded environment {config.get("env_name", "")} with env.observation_size: {env.observation_size} and env.action_size: {env.action_size}') # Loading params if args.params_path is not None: model_path = args.params_path else: - model_path = "weights/" + config.get('project_name', 'model') + ".pkl" + model_path = "weights/" + config.get("project_name", "model") + ".pkl" params = model.load_params(model_path) normalize = lambda x, y: x -if config.get('normalize_observations', False): +if config.get("normalize_observations", False): normalize = running_statistics.normalize -policy_network = ppo_networks.make_ppo_networks(env.observation_size, env.action_size, preprocess_observations_fn=normalize) +policy_network = ppo_networks.make_ppo_networks( + env.observation_size, env.action_size, preprocess_observations_fn=normalize +) inference_fn = ppo_networks.make_inference_fn(policy_network)(params) -print(f'Loaded params from {model_path}') +print(f"Loaded params from {model_path}") # rolling out a trajectory render_every = 2 @@ -55,13 +63,13 @@ images = render_mujoco_rollout(env, inference_fn, n_steps, render_every) else: images = render_mjx_rollout(env, inference_fn, n_steps, render_every) -print(f'Rolled out {len(images)} steps') +print(f"Rolled out {len(images)} steps") # render the trajectory images_thwc = np.array(images) images_tchw = np.transpose(images_thwc, (0, 3, 1, 2)) -fps = 1/env.dt -wandb.log({'training_rollouts': wandb.Video(images_tchw, fps=fps, format="mp4")}) +fps = 1 / env.dt +wandb.log({"training_rollouts": wandb.Video(images_tchw, fps=fps, format="mp4")}) -media.write_video('video.mp4', images_thwc, fps=fps) \ No newline at end of file +media.write_video("video.mp4", images_thwc, fps=fps) diff --git a/sim/mjx_gym/train.py b/sim/mjx_gym/train.py index 5ab1e806..b72eb23d 100644 --- a/sim/mjx_gym/train.py +++ b/sim/mjx_gym/train.py @@ -1,86 +1,90 @@ -import yaml -import wandb import argparse -from envs import get_env -from brax.training.agents.ppo import train as ppo import functools -import matplotlib.pyplot as plt from datetime import datetime + +import matplotlib.pyplot as plt +import wandb +import yaml from brax import envs from brax.io import model +from brax.training.agents.ppo import train as ppo +from envs import get_env # Parse command-line arguments -parser = argparse.ArgumentParser(description='Run PPO training with specified config file.') -parser.add_argument('--config', type=str, required=True, help='Path to the config YAML file') +parser = argparse.ArgumentParser(description="Run PPO training with specified config file.") +parser.add_argument("--config", type=str, required=True, help="Path to the config YAML file") args = parser.parse_args() # Load config from YAML file -with open(args.config, 'r') as file: +with open(args.config, "r") as file: config = yaml.safe_load(file) # Initialize wandb -wandb.init(project=config.get('project_name', 'robotic-locomotion-training'), name=config.get('experiment_name', 'ppo-training')) +wandb.init( + project=config.get("project_name", "robotic-locomotion-training"), + name=config.get("experiment_name", "ppo-training"), +) DEFAULT_REWARD_PARAMS = { - 'rew_forward': {'weight': 1.25}, - 'rew_healthy': {'weight': 5.0, 'healthy_z_lower': 1.0, 'healthy_z_upper': 2.0}, - 'rew_ctrl_cost': {'weight': 0.1} + "rew_forward": {"weight": 1.25}, + "rew_healthy": {"weight": 5.0, "healthy_z_lower": 1.0, "healthy_z_upper": 2.0}, + "rew_ctrl_cost": {"weight": 0.1}, } -reward_params = config.get('reward_params', DEFAULT_REWARD_PARAMS) -terminate_when_unhealthy = config.get('terminate_when_unhealthy', True) -reset_noise_scale = config.get('reset_noise_scale', 1e-2) -exclude_current_positions_from_observation = config.get('exclude_current_positions_from_observation', True) -log_reward_breakdown = config.get('log_reward_breakdown', True) +reward_params = config.get("reward_params", DEFAULT_REWARD_PARAMS) +terminate_when_unhealthy = config.get("terminate_when_unhealthy", True) +reset_noise_scale = config.get("reset_noise_scale", 1e-2) +exclude_current_positions_from_observation = config.get("exclude_current_positions_from_observation", True) +log_reward_breakdown = config.get("log_reward_breakdown", True) -print(f'reward_params: {reward_params}') +print(f"reward_params: {reward_params}") print(f'training on {config["num_envs"]} environments') env = get_env( - name=config.get('env_name', 'stompy'), + name=config.get("env_name", "stompy"), reward_params=reward_params, terminate_when_unhealthy=terminate_when_unhealthy, reset_noise_scale=reset_noise_scale, exclude_current_positions_from_observation=exclude_current_positions_from_observation, - log_reward_breakdown=log_reward_breakdown + log_reward_breakdown=log_reward_breakdown, ) print(f'Env loaded: {config.get("env_name", "could not find environment")}') train_fn = functools.partial( ppo.train, - num_timesteps=config['num_timesteps'], - num_evals=config['num_evals'], - reward_scaling=config['reward_scaling'], - episode_length=config['episode_length'], - normalize_observations=config['normalize_observations'], - action_repeat=config['action_repeat'], - unroll_length=config['unroll_length'], - num_minibatches=config['num_minibatches'], - num_updates_per_batch=config['num_updates_per_batch'], - discounting=config['discounting'], - learning_rate=config['learning_rate'], - entropy_cost=config['entropy_cost'], - num_envs=config['num_envs'], - batch_size=config['batch_size'], - seed=config['seed'] + num_timesteps=config["num_timesteps"], + num_evals=config["num_evals"], + reward_scaling=config["reward_scaling"], + episode_length=config["episode_length"], + normalize_observations=config["normalize_observations"], + action_repeat=config["action_repeat"], + unroll_length=config["unroll_length"], + num_minibatches=config["num_minibatches"], + num_updates_per_batch=config["num_updates_per_batch"], + discounting=config["discounting"], + learning_rate=config["learning_rate"], + entropy_cost=config["entropy_cost"], + num_envs=config["num_envs"], + batch_size=config["batch_size"], + seed=config["seed"], ) times = [datetime.now()] + + def progress(num_steps, metrics): times.append(datetime.now()) - wandb.log({ - "steps": num_steps, - "epoch_time": (times[-1] - times[-2]).total_seconds(), - **metrics - }) + wandb.log({"steps": num_steps, "epoch_time": (times[-1] - times[-2]).total_seconds(), **metrics}) + def save_model(current_step, make_policy, params): - model_path = "weights/" + config.get('project_name', 'model') + ".pkl" + model_path = "weights/" + config.get("project_name", "model") + ".pkl" model.save_params(model_path, params) print(f"Saved model at step {current_step} to {model_path}") + make_inference_fn, params, _ = train_fn(environment=env, progress_fn=progress, policy_params_fn=save_model) -print(f'time to jit: {times[1] - times[0]}') -print(f'time to train: {times[-1] - times[1]}') \ No newline at end of file +print(f"time to jit: {times[1] - times[0]}") +print(f"time to train: {times[-1] - times[1]}") diff --git a/sim/mjx_gym/utils/default.py b/sim/mjx_gym/utils/default.py index 91d6e24d..a717d961 100644 --- a/sim/mjx_gym/utils/default.py +++ b/sim/mjx_gym/utils/default.py @@ -1,5 +1,5 @@ DEFAULT_REWARD_PARAMS = { - 'rew_forward': {'weight': 1.25}, - 'rew_healthy': {'weight': 5.0, 'healthy_z_lower': 1.0, 'healthy_z_upper': 2.0}, - 'rew_ctrl_cost': {'weight': 0.1} -} \ No newline at end of file + "rew_forward": {"weight": 1.25}, + "rew_healthy": {"weight": 5.0, "healthy_z_lower": 1.0, "healthy_z_upper": 2.0}, + "rew_ctrl_cost": {"weight": 0.1}, +} diff --git a/sim/mjx_gym/utils/rollouts.py b/sim/mjx_gym/utils/rollouts.py index e07dcb96..463d8f95 100644 --- a/sim/mjx_gym/utils/rollouts.py +++ b/sim/mjx_gym/utils/rollouts.py @@ -1,11 +1,13 @@ -import jax -from tqdm import tqdm -import mujoco -from mujoco import mjx from typing import List -from brax.mjx.base import State as mjxState + +import jax import jax.numpy as jp +import mujoco import numpy as np +from brax.mjx.base import State as mjxState +from mujoco import mjx +from tqdm import tqdm + def mjx_rollout(env, inference_fn, n_steps=1000, render_every=2, seed=0) -> List[mjxState]: """ @@ -22,7 +24,7 @@ def mjx_rollout(env, inference_fn, n_steps=1000, render_every=2, seed=0) -> List It is worth noting that env, a Brax environment, is expected to implement MJX in the background. See default_humanoid_env for reference. """ - print(f'Rolling out {n_steps} steps with MJX') + print(f"Rolling out {n_steps} steps with MJX") reset_fn = jax.jit(env.reset) step_fn = jax.jit(env.step) inference_fn = jax.jit(inference_fn) @@ -41,6 +43,7 @@ def mjx_rollout(env, inference_fn, n_steps=1000, render_every=2, seed=0) -> List return rollout + def render_mjx_rollout(env, inference_fn, n_steps=1000, render_every=2, seed=0) -> np.ndarray: """ Rollout a trajectory using MuJoCo and render it @@ -55,10 +58,11 @@ def render_mjx_rollout(env, inference_fn, n_steps=1000, render_every=2, seed=0) A list of renderings of the policy rollout with dimensions (T, H, W, C) """ rollout = mjx_rollout(env, inference_fn, n_steps, render_every, seed) - images = env.render(rollout[::render_every], camera='side') + images = env.render(rollout[::render_every], camera="side") return np.array(images) + def render_mujoco_rollout(env, inference_fn, n_steps=1000, render_every=2, seed=0): """ Rollout a trajectory using MuJoCo @@ -71,7 +75,7 @@ def render_mujoco_rollout(env, inference_fn, n_steps=1000, render_every=2, seed= Returns: A list of images of the policy rollout (T, H, W, C) """ - print(f'Rolling out {n_steps} steps with MuJoCo') + print(f"Rolling out {n_steps} steps with MuJoCo") model = env.sys.mj_model data = mujoco.MjData(model) renderer = mujoco.Renderer(model) @@ -81,15 +85,15 @@ def render_mujoco_rollout(env, inference_fn, n_steps=1000, render_every=2, seed= rng = jax.random.PRNGKey(seed) for step in tqdm(range(n_steps)): act_rng, seed = jax.random.split(rng) - obs = env._get_obs(mjx.put_data(model, data), ctrl) + obs = env._get_obs(mjx.put_data(model, data), ctrl) # TODO: implement methods in envs that avoid having to use mjx in a hacky way... ctrl, _ = inference_fn(obs, act_rng) data.ctrl = ctrl for _ in range(env._n_frames): mujoco.mj_step(model, data) - + if step % render_every == 0: - renderer.update_scene(data, camera='side') + renderer.update_scene(data, camera="side") images.append(renderer.render()) return images From 9346d4e178e866120aacbfe95cc8aeea3789ade1 Mon Sep 17 00:00:00 2001 From: michael-lutz Date: Thu, 23 May 2024 19:37:12 +0000 Subject: [PATCH 14/17] chore: cleaned up training scripts and file organization --- sim/mjx_gym/envs/__init__.py | 4 +- .../default_humanoid_env/default_humanoid.py | 4 +- .../envs/default_humanoid_env/rewards.py | 5 + sim/mjx_gym/envs/stompy_env/rewards.py | 5 + sim/mjx_gym/envs/stompy_env/stompy.py | 35 ++--- sim/mjx_gym/play.py | 112 ++++++------- sim/mjx_gym/train.py | 148 ++++++++---------- sim/mjx_gym/utils/default.py | 5 - 8 files changed, 155 insertions(+), 163 deletions(-) delete mode 100644 sim/mjx_gym/utils/default.py diff --git a/sim/mjx_gym/envs/__init__.py b/sim/mjx_gym/envs/__init__.py index de025ce3..38281a3e 100644 --- a/sim/mjx_gym/envs/__init__.py +++ b/sim/mjx_gym/envs/__init__.py @@ -1,6 +1,6 @@ from brax import envs -from default_humanoid_env.default_humanoid import DefaultHumanoidEnv -from stompy_env.stompy import StompyEnv +from envs.default_humanoid_env.default_humanoid import DefaultHumanoidEnv +from envs.stompy_env.stompy import StompyEnv environments = {"default_humanoid": DefaultHumanoidEnv, "stompy": StompyEnv} diff --git a/sim/mjx_gym/envs/default_humanoid_env/default_humanoid.py b/sim/mjx_gym/envs/default_humanoid_env/default_humanoid.py index 9e36aa56..814e51cb 100644 --- a/sim/mjx_gym/envs/default_humanoid_env/default_humanoid.py +++ b/sim/mjx_gym/envs/default_humanoid_env/default_humanoid.py @@ -5,9 +5,9 @@ from brax.io import mjcf from brax.mjx.base import State as mjxState from etils import epath -from utils.default import DEFAULT_REWARD_PARAMS -from .rewards import get_reward_fn +from envs.default_humanoid_env.rewards import DEFAULT_REWARD_PARAMS +from envs.default_humanoid_env.rewards import get_reward_fn class DefaultHumanoidEnv(PipelineEnv): diff --git a/sim/mjx_gym/envs/default_humanoid_env/rewards.py b/sim/mjx_gym/envs/default_humanoid_env/rewards.py index c3a5067e..d45104f5 100644 --- a/sim/mjx_gym/envs/default_humanoid_env/rewards.py +++ b/sim/mjx_gym/envs/default_humanoid_env/rewards.py @@ -5,6 +5,11 @@ from brax import base from brax.mjx.base import State as mjxState +DEFAULT_REWARD_PARAMS = { + "rew_forward": {"weight": 1.25}, + "rew_healthy": {"weight": 5.0, "healthy_z_lower": 1.0, "healthy_z_upper": 2.0}, + "rew_ctrl_cost": {"weight": 0.1}, +} def get_reward_fn( reward_params: Dict[str, Dict[str, float]], dt, include_reward_breakdown diff --git a/sim/mjx_gym/envs/stompy_env/rewards.py b/sim/mjx_gym/envs/stompy_env/rewards.py index c3b6fee7..4bf7c57a 100644 --- a/sim/mjx_gym/envs/stompy_env/rewards.py +++ b/sim/mjx_gym/envs/stompy_env/rewards.py @@ -5,6 +5,11 @@ from brax import base from brax.mjx.base import State as mjxState +DEFAULT_REWARD_PARAMS = { + "rew_forward": {"weight": 1.25}, + "rew_healthy": {"weight": 5.0, "healthy_z_lower": 1.0, "healthy_z_upper": 2.0}, + "rew_ctrl_cost": {"weight": 0.1}, +} def get_reward_fn( reward_params: Dict[str, Dict[str, float]], dt, include_reward_breakdown diff --git a/sim/mjx_gym/envs/stompy_env/stompy.py b/sim/mjx_gym/envs/stompy_env/stompy.py index 1112e541..cce4c452 100644 --- a/sim/mjx_gym/envs/stompy_env/stompy.py +++ b/sim/mjx_gym/envs/stompy_env/stompy.py @@ -9,14 +9,8 @@ from etils import epath from mujoco import mjx -from .rewards import get_reward_fn - -DEFAULT_REWARD_PARAMS = { - "rew_forward": {"weight": 1.25}, - "rew_healthy": {"weight": 5.0, "healthy_z_lower": 1.0, "healthy_z_upper": 2.0}, - "rew_ctrl_cost": {"weight": 0.1}, -} - +from envs.stompy_env.rewards import DEFAULT_REWARD_PARAMS +from envs.stompy_env.rewards import get_reward_fn class StompyEnv(PipelineEnv): """ @@ -55,12 +49,13 @@ def __init__( self.reward_fn = get_reward_fn(self._reward_params, self.dt, include_reward_breakdown=True) def reset(self, rng: jp.ndarray) -> State: - """Resets the environment to an initial state. + """ + Resets the environment to an initial state. Args: - rng: Random number generator seed. + rng: Random number generator seed. Returns: - The initial state of the environment. + The initial state of the environment. """ rng, rng1, rng2 = jax.random.split(rng, 3) @@ -86,13 +81,14 @@ def reset(self, rng: jp.ndarray) -> State: return State(mjx_state, obs, reward, done, metrics) def step(self, state: State, action: jp.ndarray) -> State: - """Runs one timestep of the environment's dynamics. + """ + Runs one timestep of the environment's dynamics. Args: - state: The current state of the environment. - action: The action to take. + state: The current state of the environment. + action: The action to take. Returns: - A tuple of the next state, the reward, whether the episode has ended, and additional information. + A tuple of the next state, the reward, whether the episode has ended, and additional information. """ mjx_state = state.pipeline_state assert mjx_state, "state.pipeline_state was recorded as None" @@ -131,13 +127,14 @@ def step(self, state: State, action: jp.ndarray) -> State: ) def _get_obs(self, data: mjxState, action: jp.ndarray) -> jp.ndarray: - """Observes humanoid body position, velocities, and angles. + """ + Observes humanoid body position, velocities, and angles. Args: - data: The current state of the environment. - action: The current action. + data: The current state of the environment. + action: The current action. Returns: - Observations of the environment. + Observations of the environment. """ position = data.qpos if self._exclude_current_positions_from_observation: diff --git a/sim/mjx_gym/play.py b/sim/mjx_gym/play.py index 4883b2bf..4d27a5f3 100644 --- a/sim/mjx_gym/play.py +++ b/sim/mjx_gym/play.py @@ -8,68 +8,70 @@ from brax.training.acme import running_statistics from brax.training.agents.ppo import networks as ppo_networks from envs import get_env -from utils.default import DEFAULT_REWARD_PARAMS +from envs.default_humanoid_env.default_humanoid import DEFAULT_REWARD_PARAMS from utils.rollouts import render_mjx_rollout, render_mujoco_rollout -# Parse command-line arguments -parser = argparse.ArgumentParser(description="Run PPO training with specified config file.") -parser.add_argument("--config", type=str, required=True, help="Path to the config YAML file") -parser.add_argument("--use_mujoco", type=bool, default=False, help="Use mujoco instead of mjx for rendering") -parser.add_argument("--params_path", type=str, default=None, help="Path to the params file") -args = parser.parse_args() +def train(config, n_steps, render_every): + wandb.init( + project=config.get("project_name", "robotic_locomotion_training") + "_test", + name=config.get("experiment_name", "ppo-training") + "_test", + ) -# Load config file -with open(args.config, "r") as file: - config = yaml.safe_load(file) + # Load environment + env = get_env( + name=config.get("env_name", "default_humanoid"), + reward_params=config.get("reward_params", DEFAULT_REWARD_PARAMS), + terminate_when_unhealthy=config.get("terminate_when_unhealthy", True), + reset_noise_scale=config.get("reset_noise_scale", 1e-2), + exclude_current_positions_from_observation=config.get("exclude_current_positions_from_observation", True), + log_reward_breakdown=config.get("log_reward_breakdown", True), + ) + print( + f'Loaded environment {config.get("env_name", "")} with env.observation_size: {env.observation_size} and env.action_size: {env.action_size}' + ) -# Initialize wandb -wandb.init( - project=config.get("project_name", "robotic_locomotion_training") + "_test", - name=config.get("experiment_name", "ppo-training") + "_test", -) + # Loading params + if args.params_path is not None: + model_path = args.params_path + else: + model_path = "weights/" + config.get("project_name", "model") + ".pkl" + params = model.load_params(model_path) + normalize = lambda x, y: x + if config.get("normalize_observations", False): + normalize = running_statistics.normalize # NOTE: very important to keep training & test normalization consistent + policy_network = ppo_networks.make_ppo_networks( + env.observation_size, env.action_size, preprocess_observations_fn=normalize + ) + inference_fn = ppo_networks.make_inference_fn(policy_network)(params) + print(f"Loaded params from {model_path}") -# Load environment -env = get_env( - name=config.get("env_name", "stompy"), - reward_params=config.get("reward_params", DEFAULT_REWARD_PARAMS), - terminate_when_unhealthy=config.get("terminate_when_unhealthy", True), - reset_noise_scale=config.get("reset_noise_scale", 1e-2), - exclude_current_positions_from_observation=config.get("exclude_current_positions_from_observation", True), - log_reward_breakdown=config.get("log_reward_breakdown", True), -) -print( - f'Loaded environment {config.get("env_name", "")} with env.observation_size: {env.observation_size} and env.action_size: {env.action_size}' -) + # rolling out a trajectory + if args.use_mujoco: + images = render_mujoco_rollout(env, inference_fn, n_steps, render_every) + else: + images = render_mjx_rollout(env, inference_fn, n_steps, render_every) + print(f"Rolled out {len(images)} steps") -# Loading params -if args.params_path is not None: - model_path = args.params_path -else: - model_path = "weights/" + config.get("project_name", "model") + ".pkl" -params = model.load_params(model_path) -normalize = lambda x, y: x -if config.get("normalize_observations", False): - normalize = running_statistics.normalize -policy_network = ppo_networks.make_ppo_networks( - env.observation_size, env.action_size, preprocess_observations_fn=normalize -) -inference_fn = ppo_networks.make_inference_fn(policy_network)(params) -print(f"Loaded params from {model_path}") + # render the trajectory + images_thwc = np.array(images) + images_tchw = np.transpose(images_thwc, (0, 3, 1, 2)) -# rolling out a trajectory -render_every = 2 -n_steps = 1000 -if args.use_mujoco: - images = render_mujoco_rollout(env, inference_fn, n_steps, render_every) -else: - images = render_mjx_rollout(env, inference_fn, n_steps, render_every) -print(f"Rolled out {len(images)} steps") + fps = 1 / env.dt + wandb.log({"training_rollouts": wandb.Video(images_tchw, fps=fps, format="mp4")}) + media.write_video("video.mp4", images_thwc, fps=fps) -# render the trajectory -images_thwc = np.array(images) -images_tchw = np.transpose(images_thwc, (0, 3, 1, 2)) +if __name__ == "__main__": + # Parse command-line arguments + parser = argparse.ArgumentParser(description="Run PPO training with specified config file.") + parser.add_argument("--config", type=str, required=True, help="Path to the config YAML file") + parser.add_argument("--use_mujoco", type=bool, default=False, help="Use mujoco instead of mjx for rendering") + parser.add_argument("--params_path", type=str, default=None, help="Path to the params file") + parser.add_argument("--n_steps", type=int, default=1000, help="Number of steps to rollout") + parser.add_argument("--render_every", type=int, default=2, help="Render every nth step") + args = parser.parse_args() -fps = 1 / env.dt -wandb.log({"training_rollouts": wandb.Video(images_tchw, fps=fps, format="mp4")}) + # Load config file + with open(args.config, "r") as file: + config = yaml.safe_load(file) -media.write_video("video.mp4", images_thwc, fps=fps) + train(config, args.n_steps, args.render_every) \ No newline at end of file diff --git a/sim/mjx_gym/train.py b/sim/mjx_gym/train.py index b72eb23d..ecaccf87 100644 --- a/sim/mjx_gym/train.py +++ b/sim/mjx_gym/train.py @@ -5,86 +5,74 @@ import matplotlib.pyplot as plt import wandb import yaml -from brax import envs from brax.io import model from brax.training.agents.ppo import train as ppo -from envs import get_env - -# Parse command-line arguments -parser = argparse.ArgumentParser(description="Run PPO training with specified config file.") -parser.add_argument("--config", type=str, required=True, help="Path to the config YAML file") -args = parser.parse_args() - -# Load config from YAML file -with open(args.config, "r") as file: - config = yaml.safe_load(file) - -# Initialize wandb -wandb.init( - project=config.get("project_name", "robotic-locomotion-training"), - name=config.get("experiment_name", "ppo-training"), -) - -DEFAULT_REWARD_PARAMS = { - "rew_forward": {"weight": 1.25}, - "rew_healthy": {"weight": 5.0, "healthy_z_lower": 1.0, "healthy_z_upper": 2.0}, - "rew_ctrl_cost": {"weight": 0.1}, -} - -reward_params = config.get("reward_params", DEFAULT_REWARD_PARAMS) -terminate_when_unhealthy = config.get("terminate_when_unhealthy", True) -reset_noise_scale = config.get("reset_noise_scale", 1e-2) -exclude_current_positions_from_observation = config.get("exclude_current_positions_from_observation", True) -log_reward_breakdown = config.get("log_reward_breakdown", True) - -print(f"reward_params: {reward_params}") -print(f'training on {config["num_envs"]} environments') - -env = get_env( - name=config.get("env_name", "stompy"), - reward_params=reward_params, - terminate_when_unhealthy=terminate_when_unhealthy, - reset_noise_scale=reset_noise_scale, - exclude_current_positions_from_observation=exclude_current_positions_from_observation, - log_reward_breakdown=log_reward_breakdown, -) -print(f'Env loaded: {config.get("env_name", "could not find environment")}') - -train_fn = functools.partial( - ppo.train, - num_timesteps=config["num_timesteps"], - num_evals=config["num_evals"], - reward_scaling=config["reward_scaling"], - episode_length=config["episode_length"], - normalize_observations=config["normalize_observations"], - action_repeat=config["action_repeat"], - unroll_length=config["unroll_length"], - num_minibatches=config["num_minibatches"], - num_updates_per_batch=config["num_updates_per_batch"], - discounting=config["discounting"], - learning_rate=config["learning_rate"], - entropy_cost=config["entropy_cost"], - num_envs=config["num_envs"], - batch_size=config["batch_size"], - seed=config["seed"], -) -times = [datetime.now()] - - -def progress(num_steps, metrics): - times.append(datetime.now()) - - wandb.log({"steps": num_steps, "epoch_time": (times[-1] - times[-2]).total_seconds(), **metrics}) - - -def save_model(current_step, make_policy, params): - model_path = "weights/" + config.get("project_name", "model") + ".pkl" - model.save_params(model_path, params) - print(f"Saved model at step {current_step} to {model_path}") - - -make_inference_fn, params, _ = train_fn(environment=env, progress_fn=progress, policy_params_fn=save_model) - -print(f"time to jit: {times[1] - times[0]}") -print(f"time to train: {times[-1] - times[1]}") +from envs import get_env +from envs.default_humanoid_env.default_humanoid import DEFAULT_REWARD_PARAMS + +def train(config): + wandb.init( + project=config.get("project_name", "robotic-locomotion-training"), + name=config.get("experiment_name", "ppo-training"), + ) + + print(f"reward_params: {config.get('reward_params', DEFAULT_REWARD_PARAMS)}") + print(f'training on {config["num_envs"]} environments') + + env = get_env( + name=config.get("env_name", "default_humanoid"), + reward_params=config.get("reward_params", DEFAULT_REWARD_PARAMS), + terminate_when_unhealthy=config.get("terminate_when_unhealthy", True), + reset_noise_scale=config.get("reset_noise_scale", 1e-2), + exclude_current_positions_from_observation=config.get("exclude_current_positions_from_observation", True), + log_reward_breakdown=config.get("log_reward_breakdown", True), + ) + print(f'Env loaded: {config.get("env_name", "could not find environment")}') + + train_fn = functools.partial( + ppo.train, + num_timesteps=config["num_timesteps"], + num_evals=config["num_evals"], + reward_scaling=config["reward_scaling"], + episode_length=config["episode_length"], + normalize_observations=config["normalize_observations"], + action_repeat=config["action_repeat"], + unroll_length=config["unroll_length"], + num_minibatches=config["num_minibatches"], + num_updates_per_batch=config["num_updates_per_batch"], + discounting=config["discounting"], + learning_rate=config["learning_rate"], + entropy_cost=config["entropy_cost"], + num_envs=config["num_envs"], + batch_size=config["batch_size"], + seed=config["seed"], + ) + + times = [datetime.now()] + def progress(num_steps, metrics): + times.append(datetime.now()) + + wandb.log({"steps": num_steps, "epoch_time": (times[-1] - times[-2]).total_seconds(), **metrics}) + + def save_model(current_step, make_policy, params): + model_path = "weights/" + config.get("project_name", "model") + ".pkl" + model.save_params(model_path, params) + print(f"Saved model at step {current_step} to {model_path}") + + make_inference_fn, params, _ = train_fn(environment=env, progress_fn=progress, policy_params_fn=save_model) + + print(f"time to jit: {times[1] - times[0]}") + print(f"time to train: {times[-1] - times[1]}") + +if __name__ == "__main__": + # Parse command-line arguments + parser = argparse.ArgumentParser(description="Run PPO training with specified config file.") + parser.add_argument("--config", type=str, required=True, help="Path to the config YAML file") + args = parser.parse_args() + + # Load config from YAML file + with open(args.config, "r") as file: + config = yaml.safe_load(file) + + train(config) \ No newline at end of file diff --git a/sim/mjx_gym/utils/default.py b/sim/mjx_gym/utils/default.py deleted file mode 100644 index a717d961..00000000 --- a/sim/mjx_gym/utils/default.py +++ /dev/null @@ -1,5 +0,0 @@ -DEFAULT_REWARD_PARAMS = { - "rew_forward": {"weight": 1.25}, - "rew_healthy": {"weight": 5.0, "healthy_z_lower": 1.0, "healthy_z_upper": 2.0}, - "rew_ctrl_cost": {"weight": 0.1}, -} From e2a9be477448b19468ed4c06dc699c0a550d0a61 Mon Sep 17 00:00:00 2001 From: michael-lutz Date: Thu, 23 May 2024 19:43:58 +0000 Subject: [PATCH 15/17] chore: removed unused imports --- .../envs/default_humanoid_env/rewards.py | 2 +- sim/mjx_gym/envs/stompy_env/rewards.py | 2 +- sim/mjx_gym/envs/stompy_env/stompy.py | 19 +++++++++---------- sim/mjx_gym/play.py | 8 ++++++-- sim/mjx_gym/train.py | 8 +++++--- 5 files changed, 22 insertions(+), 17 deletions(-) diff --git a/sim/mjx_gym/envs/default_humanoid_env/rewards.py b/sim/mjx_gym/envs/default_humanoid_env/rewards.py index d45104f5..ee86ad7d 100644 --- a/sim/mjx_gym/envs/default_humanoid_env/rewards.py +++ b/sim/mjx_gym/envs/default_humanoid_env/rewards.py @@ -2,7 +2,6 @@ import jax import jax.numpy as jp -from brax import base from brax.mjx.base import State as mjxState DEFAULT_REWARD_PARAMS = { @@ -11,6 +10,7 @@ "rew_ctrl_cost": {"weight": 0.1}, } + def get_reward_fn( reward_params: Dict[str, Dict[str, float]], dt, include_reward_breakdown ) -> Callable[[mjxState, jp.ndarray, mjxState], Tuple[jp.ndarray, jp.ndarray, Dict[str, jp.ndarray]]]: diff --git a/sim/mjx_gym/envs/stompy_env/rewards.py b/sim/mjx_gym/envs/stompy_env/rewards.py index 4bf7c57a..6e025e85 100644 --- a/sim/mjx_gym/envs/stompy_env/rewards.py +++ b/sim/mjx_gym/envs/stompy_env/rewards.py @@ -2,7 +2,6 @@ import jax import jax.numpy as jp -from brax import base from brax.mjx.base import State as mjxState DEFAULT_REWARD_PARAMS = { @@ -11,6 +10,7 @@ "rew_ctrl_cost": {"weight": 0.1}, } + def get_reward_fn( reward_params: Dict[str, Dict[str, float]], dt, include_reward_breakdown ) -> Callable[[mjxState, jp.ndarray, mjxState], Tuple[jp.ndarray, jp.ndarray, Dict[str, jp.ndarray]]]: diff --git a/sim/mjx_gym/envs/stompy_env/stompy.py b/sim/mjx_gym/envs/stompy_env/stompy.py index cce4c452..a25652c4 100644 --- a/sim/mjx_gym/envs/stompy_env/stompy.py +++ b/sim/mjx_gym/envs/stompy_env/stompy.py @@ -6,12 +6,11 @@ from brax.envs.base import PipelineEnv, State from brax.io import mjcf from brax.mjx.base import State as mjxState -from etils import epath -from mujoco import mjx from envs.stompy_env.rewards import DEFAULT_REWARD_PARAMS from envs.stompy_env.rewards import get_reward_fn + class StompyEnv(PipelineEnv): """ An environment for humanoid body position, velocities, and angles. @@ -53,9 +52,9 @@ def reset(self, rng: jp.ndarray) -> State: Resets the environment to an initial state. Args: - rng: Random number generator seed. + rng: Random number generator seed. Returns: - The initial state of the environment. + The initial state of the environment. """ rng, rng1, rng2 = jax.random.split(rng, 3) @@ -85,10 +84,10 @@ def step(self, state: State, action: jp.ndarray) -> State: Runs one timestep of the environment's dynamics. Args: - state: The current state of the environment. - action: The action to take. + state: The current state of the environment. + action: The action to take. Returns: - A tuple of the next state, the reward, whether the episode has ended, and additional information. + A tuple of the next state, the reward, whether the episode has ended, and additional information. """ mjx_state = state.pipeline_state assert mjx_state, "state.pipeline_state was recorded as None" @@ -131,10 +130,10 @@ def _get_obs(self, data: mjxState, action: jp.ndarray) -> jp.ndarray: Observes humanoid body position, velocities, and angles. Args: - data: The current state of the environment. - action: The current action. + data: The current state of the environment. + action: The current action. Returns: - Observations of the environment. + Observations of the environment. """ position = data.qpos if self._exclude_current_positions_from_observation: diff --git a/sim/mjx_gym/play.py b/sim/mjx_gym/play.py index 4d27a5f3..c50d3861 100644 --- a/sim/mjx_gym/play.py +++ b/sim/mjx_gym/play.py @@ -11,6 +11,7 @@ from envs.default_humanoid_env.default_humanoid import DEFAULT_REWARD_PARAMS from utils.rollouts import render_mjx_rollout, render_mujoco_rollout + def train(config, n_steps, render_every): wandb.init( project=config.get("project_name", "robotic_locomotion_training") + "_test", @@ -38,7 +39,9 @@ def train(config, n_steps, render_every): params = model.load_params(model_path) normalize = lambda x, y: x if config.get("normalize_observations", False): - normalize = running_statistics.normalize # NOTE: very important to keep training & test normalization consistent + normalize = ( + running_statistics.normalize + ) # NOTE: very important to keep training & test normalization consistent policy_network = ppo_networks.make_ppo_networks( env.observation_size, env.action_size, preprocess_observations_fn=normalize ) @@ -60,6 +63,7 @@ def train(config, n_steps, render_every): wandb.log({"training_rollouts": wandb.Video(images_tchw, fps=fps, format="mp4")}) media.write_video("video.mp4", images_thwc, fps=fps) + if __name__ == "__main__": # Parse command-line arguments parser = argparse.ArgumentParser(description="Run PPO training with specified config file.") @@ -74,4 +78,4 @@ def train(config, n_steps, render_every): with open(args.config, "r") as file: config = yaml.safe_load(file) - train(config, args.n_steps, args.render_every) \ No newline at end of file + train(config, args.n_steps, args.render_every) diff --git a/sim/mjx_gym/train.py b/sim/mjx_gym/train.py index ecaccf87..8536aecf 100644 --- a/sim/mjx_gym/train.py +++ b/sim/mjx_gym/train.py @@ -2,7 +2,6 @@ import functools from datetime import datetime -import matplotlib.pyplot as plt import wandb import yaml from brax.io import model @@ -11,6 +10,7 @@ from envs import get_env from envs.default_humanoid_env.default_humanoid import DEFAULT_REWARD_PARAMS + def train(config): wandb.init( project=config.get("project_name", "robotic-locomotion-training"), @@ -50,6 +50,7 @@ def train(config): ) times = [datetime.now()] + def progress(num_steps, metrics): times.append(datetime.now()) @@ -65,6 +66,7 @@ def save_model(current_step, make_policy, params): print(f"time to jit: {times[1] - times[0]}") print(f"time to train: {times[-1] - times[1]}") + if __name__ == "__main__": # Parse command-line arguments parser = argparse.ArgumentParser(description="Run PPO training with specified config file.") @@ -74,5 +76,5 @@ def save_model(current_step, make_policy, params): # Load config from YAML file with open(args.config, "r") as file: config = yaml.safe_load(file) - - train(config) \ No newline at end of file + + train(config) From f570c55ecd7e5501c6711d9a664d354ddfb3b6a9 Mon Sep 17 00:00:00 2001 From: michael-lutz Date: Thu, 23 May 2024 19:47:30 +0000 Subject: [PATCH 16/17] fix: removing duplicate exclude definition in pyproject --- pyproject.toml | 2 -- sim/mjx_gym/weights/ stompy_walk.pkl | Bin 0 -> 68222 bytes 2 files changed, 2 deletions(-) create mode 100644 sim/mjx_gym/weights/ stompy_walk.pkl diff --git a/pyproject.toml b/pyproject.toml index a208dc5d..30f45cb7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -54,8 +54,6 @@ profile = "black" line-length = 120 target-version = "py310" -exclude = ["sim/humanoid_gym", "sim/deploy/"] - [tool.ruff.lint] select = ["ANN", "D", "E", "F", "I", "N", "PGH", "PLC", "PLE", "PLR", "PLW", "W"] diff --git a/sim/mjx_gym/weights/ stompy_walk.pkl b/sim/mjx_gym/weights/ stompy_walk.pkl new file mode 100644 index 0000000000000000000000000000000000000000..a4fc999c15ff7dec8aa67589cd03699ee5d960ac GIT binary patch literal 68222 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 literal 0 HcmV?d00001 From 487e81645160c435354dbd74f938398532d97f01 Mon Sep 17 00:00:00 2001 From: michael-lutz Date: Thu, 23 May 2024 20:15:25 +0000 Subject: [PATCH 17/17] fix: fixing pyproject static checks --- pyproject.toml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pyproject.toml b/pyproject.toml index 30f45cb7..8221932f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -54,6 +54,8 @@ profile = "black" line-length = 120 target-version = "py310" +exclude = ["sim/humanoid_gym/", "sim/deploy", "sim/scripts/create_mjcf.py", "sim/mjx_gym/"] + [tool.ruff.lint] select = ["ANN", "D", "E", "F", "I", "N", "PGH", "PLC", "PLE", "PLR", "PLW", "W"]