# Path: meltingpot/python/utils/scenarios/wrappers/base.py
# class Wrapper(substrate.Substrate):
#   def __init__(self, env: substrate.Substrate):
#   def reset(self, *args, **kwargs) -> ...:
#   def step(self, *args, **kwargs) -> ...:
#   def reward_spec(self, *args, **kwargs) -> ...:
#   def discount_spec(self, *args, **kwargs) -> ...:
#   def observation_spec(self, *args, **kwargs) -> ...:
#   def action_spec(self, *args, **kwargs) -> ...:
#   def close(self, *args, **kwargs) -> ...:
#   def observation(self, *args, **kwargs) -> ...:
#   def events(self, *args, **kwargs) -> ...:
#   def list_property(self, *args, **kwargs) -> ...:
#   def write_property(self, *args, **kwargs) -> ...:
#   def read_property(self, *args, **kwargs) -> ...:
#   def observables(self, *args, **kwargs) -> ...:


import copy
import dm_env
import numpy as np
from typing import Collection, Mapping, Sequence, Union
from meltingpot.python.utils.scenarios.wrappers import base
    observations['global']['actions'][<name>],
    where <name> is the name of the action in the original action spec.
    Note: if the action spec defines more than one action, then each will be
    shared under its own name.
  - observations of all players will appear at
    observations['global']['observations'][<name>]
    where <name> is the name of the observation in the original observation
    spec.
    Note: if the observation spec defines more than one observation, then each
    will be shared under its own name.

Note: shared actions, rewards and observations are provided in the same timestep
as the original, single-player versions:
- An agent's individual reward at a given timestep is included in all_rewards at
  that same timestep.
- An agent's individual observation at a given timestep is included in
  all_observations_ at that same timestep.
- The actions an agent provides to step() are included in the observations
  immediately returned from step().
"""




GLOBAL_KEY = 'global'
OBSERVATIONS_KEY = 'observations'
REWARDS_KEY = 'rewards'
ACTIONS_KEY = 'actions'



# Path: meltingpot/python/utils/scenarios/wrappers/base.py
# class Wrapper(substrate.Substrate):
#   def __init__(self, env: substrate.Substrate):
#   def reset(self, *args, **kwargs) -> ...:
#   def step(self, *args, **kwargs) -> ...:
#   def reward_spec(self, *args, **kwargs) -> ...:
#   def discount_spec(self, *args, **kwargs) -> ...:
#   def observation_spec(self, *args, **kwargs) -> ...:
#   def action_spec(self, *args, **kwargs) -> ...:
#   def close(self, *args, **kwargs) -> ...:
#   def observation(self, *args, **kwargs) -> ...:
#   def events(self, *args, **kwargs) -> ...:
#   def list_property(self, *args, **kwargs) -> ...:
#   def write_property(self, *args, **kwargs) -> ...:
#   def read_property(self, *args, **kwargs) -> ...:
#   def observables(self, *args, **kwargs) -> ...:


# Path: meltingpot/python/utils/scenarios/wrappers/all_observations_wrapper.py
import copy
import dm_env
import numpy as np
from typing import Collection, Mapping, Sequence, Union
from meltingpot.python.utils.scenarios.wrappers import base

    observations['global']['actions'][<name>],
    where <name> is the name of the action in the original action spec.
    Note: if the action spec defines more than one action, then each will be
    shared under its own name.
  - observations of all players will appear at
    observations['global']['observations'][<name>]
    where <name> is the name of the observation in the original observation
    spec.
    Note: if the observation spec defines more than one observation, then each
    will be shared under its own name.

Note: shared actions, rewards and observations are provided in the same timestep
as the original, single-player versions:
- An agent's individual reward at a given timestep is included in all_rewards at
  that same timestep.
- An agent's individual observation at a given timestep is included in
  all_observations_ at that same timestep.
- The actions an agent provides to step() are included in the observations
  immediately returned from step().
"""




GLOBAL_KEY = 'global'
OBSERVATIONS_KEY = 'observations'
REWARDS_KEY = 'rewards'
ACTIONS_KEY = 'actions'



class Wrapper(base.Wrapper):