From e976d743202f6866b4f7797863f22f889a81670d Mon Sep 17 00:00:00 2001 From: youkaichao Date: Sat, 11 Jul 2020 09:44:47 +0800 Subject: [PATCH 01/22] Improve Batch (#126) * make sure the key type of Batch is string, and add unit tests * add is_empty() function and unit tests * enable cat of mixing dict and Batch, just like stack --- test/base/test_batch.py | 4 ++++ tianshou/data/batch.py | 20 +++++++++++++++++--- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/test/base/test_batch.py b/test/base/test_batch.py index e2390dec7..a9f2cdd20 100644 --- a/test/base/test_batch.py +++ b/test/base/test_batch.py @@ -9,6 +9,10 @@ def test_batch(): assert list(Batch()) == [] + assert Batch().is_empty() + assert not Batch(a=[1, 2, 3]).is_empty() + with pytest.raises(AssertionError): + Batch({1: 2}) batch = Batch(a=[torch.ones(3), torch.ones(3)]) assert torch.allclose(batch.a, torch.ones(2, 3)) batch = Batch(obs=[0], np=np.zeros([3, 4])) diff --git a/tianshou/data/batch.py b/tianshou/data/batch.py index e14b98f50..6b1051788 100644 --- a/tianshou/data/batch.py +++ b/tianshou/data/batch.py @@ -50,6 +50,12 @@ def _create_value(inst: Any, size: int) -> Union[ return np.array([None for _ in range(size)]) +def _assert_type_keys(keys): + keys = list(keys) + assert all(isinstance(e, str) for e in keys), \ + f"keys should all be string, but got {keys}" + + class Batch: """Tianshou provides :class:`~tianshou.data.Batch` as the internal data structure to pass any kind of data to other methods, for example, a @@ -247,6 +253,7 @@ def __init__(self, batch_dict = deepcopy(batch_dict) if batch_dict is not None: if isinstance(batch_dict, (dict, Batch)): + _assert_type_keys(batch_dict.keys()) for k, v in batch_dict.items(): if isinstance(v, (list, tuple, np.ndarray)): v_ = None @@ -511,12 +518,14 @@ def cat_(self, batch: 'Batch') -> None: raise TypeError(s) @staticmethod - def cat(batches: List['Batch']) -> 'Batch': - """Concatenate a :class:`~tianshou.data.Batch` object into a single + def cat(batches: List[Union[dict, 'Batch']]) -> 'Batch': + """Concatenate a list of :class:`~tianshou.data.Batch` object into a single new batch. """ batch = Batch() for batch_ in batches: + if isinstance(batch_, dict): + batch_ = Batch(batch_) batch.cat_(batch_) return batch @@ -531,6 +540,7 @@ def stack_(self, keys_shared = set.intersection(*keys_map) values_shared = [ [e[k] for e in batches] for k in keys_shared] + _assert_type_keys(keys_shared) for k, v in zip(keys_shared, values_shared): if all(isinstance(e, (dict, Batch)) for e in v): self.__dict__[k] = Batch.stack(v, axis) @@ -542,6 +552,7 @@ def stack_(self, v = v.astype(np.object) self.__dict__[k] = v keys_partial = reduce(set.symmetric_difference, keys_map) + _assert_type_keys(keys_partial) for k in keys_partial: for i, e in enumerate(batches): val = e.get(k, None) @@ -554,7 +565,7 @@ def stack_(self, self.__dict__[k][i] = val @staticmethod - def stack(batches: List['Batch'], axis: int = 0) -> 'Batch': + def stack(batches: List[Union[dict, 'Batch']], axis: int = 0) -> 'Batch': """Stack a :class:`~tianshou.data.Batch` object into a single new batch. """ @@ -615,6 +626,9 @@ def __len__(self) -> int: raise TypeError("Object of type 'Batch' has no len()") return min(r) + def is_empty(self): + return len(self.__dict__.keys()) == 0 + @property def shape(self) -> List[int]: """Return self.shape.""" From d1a2037c6346c4607d7b69f2bb9f5c241a256233 Mon Sep 17 00:00:00 2001 From: youkaichao Date: Sat, 11 Jul 2020 21:46:01 +0800 Subject: [PATCH 02/22] Improve Batch (#128) * minor polish * improve and implement Batch.cat_ * bugfix for buffer.sample with field impt_weight * restore the usage of a.cat_(b) * fix 2 bugs in batch and add corresponding unittest * code fix for update * update is_empty to recognize empty over empty; bugfix for len * bugfix for update and add testcase * add testcase of update * fix docs * fix docs * fix docs [ci skip] * fix docs [ci skip] Co-authored-by: Trinkle23897 <463003665@qq.com> --- .github/workflows/pytest.yml | 1 + test/base/test_batch.py | 43 ++++++++- tianshou/data/batch.py | 167 +++++++++++++++++++++++------------ tianshou/data/buffer.py | 21 ++--- 4 files changed, 162 insertions(+), 70 deletions(-) diff --git a/.github/workflows/pytest.yml b/.github/workflows/pytest.yml index eb14a875e..c1e3604ed 100644 --- a/.github/workflows/pytest.yml +++ b/.github/workflows/pytest.yml @@ -5,6 +5,7 @@ on: [push, pull_request] jobs: build: runs-on: ubuntu-latest + if: "!contains(github.event.head_commit.message, 'ci skip')" strategy: matrix: python-version: [3.6, 3.7, 3.8] diff --git a/test/base/test_batch.py b/test/base/test_batch.py index a9f2cdd20..03031ff2e 100644 --- a/test/base/test_batch.py +++ b/test/base/test_batch.py @@ -10,7 +10,17 @@ def test_batch(): assert list(Batch()) == [] assert Batch().is_empty() + assert Batch(b={'c': {}}).is_empty() + assert len(Batch(a=[1, 2, 3], b={'c': {}})) == 3 assert not Batch(a=[1, 2, 3]).is_empty() + b = Batch() + b.update() + assert b.is_empty() + b.update(c=[3, 5]) + assert np.allclose(b.c, [3, 5]) + # mimic the behavior of dict.update, where kwargs can overwrite keys + b.update({'a': 2}, a=3) + assert b.a == 3 with pytest.raises(AssertionError): Batch({1: 2}) batch = Batch(a=[torch.ones(3), torch.ones(3)]) @@ -86,6 +96,18 @@ def test_batch(): assert batch3.a.d.f[0] == 5.0 with pytest.raises(KeyError): batch3.a.d[0] = Batch(f=5.0, g=0.0) + # auto convert + batch4 = Batch(a=np.array(['a', 'b'])) + assert batch4.a.dtype == np.object # auto convert to np.object + batch4.update(a=np.array(['c', 'd'])) + assert list(batch4.a) == ['c', 'd'] + assert batch4.a.dtype == np.object # auto convert to np.object + batch5 = Batch(a=np.array([{'index': 0}])) + assert isinstance(batch5.a, Batch) + assert np.allclose(batch5.a.index, [0]) + batch5.b = np.array([{'index': 1}]) + assert isinstance(batch5.b, Batch) + assert np.allclose(batch5.b.index, [1]) def test_batch_over_batch(): @@ -100,6 +122,11 @@ def test_batch_over_batch(): assert np.allclose(batch2.c, [6, 7, 8, 6, 7, 8]) assert np.allclose(batch2.b.a, [3, 4, 5, 3, 4, 5]) assert np.allclose(batch2.b.b, [4, 5, 0, 4, 5, 0]) + batch2.update(batch2.b, six=[6, 6, 6]) + assert np.allclose(batch2.c, [6, 7, 8, 6, 7, 8]) + assert np.allclose(batch2.a, [3, 4, 5, 3, 4, 5]) + assert np.allclose(batch2.b, [4, 5, 0, 4, 5, 0]) + assert np.allclose(batch2.six, [6, 6, 6]) d = {'a': [3, 4, 5], 'b': [4, 5, 6]} batch3 = Batch(c=[6, 7, 8], b=d) batch3.cat_(Batch(c=[6, 7, 8], b=d)) @@ -124,18 +151,32 @@ def test_batch_over_batch(): def test_batch_cat_and_stack(): + # test cat with compatible keys b1 = Batch(a=[{'b': np.float64(1.0), 'd': Batch(e=np.array(3.0))}]) b2 = Batch(a=[{'b': np.float64(4.0), 'd': {'e': np.array(6.0)}}]) - b12_cat_out = Batch.cat((b1, b2)) + b12_cat_out = Batch.cat([b1, b2]) b12_cat_in = copy.deepcopy(b1) b12_cat_in.cat_(b2) assert np.all(b12_cat_in.a.d.e == b12_cat_out.a.d.e) assert np.all(b12_cat_in.a.d.e == b12_cat_out.a.d.e) assert isinstance(b12_cat_in.a.d.e, np.ndarray) assert b12_cat_in.a.d.e.ndim == 1 + b12_stack = Batch.stack((b1, b2)) assert isinstance(b12_stack.a.d.e, np.ndarray) assert b12_stack.a.d.e.ndim == 2 + + # test batch with incompatible keys + b1 = Batch(a=np.random.rand(3, 4), common=Batch(c=np.random.rand(3, 5))) + b2 = Batch(b=torch.rand(4, 3), common=Batch(c=np.random.rand(4, 5))) + test = Batch.cat([b1, b2]) + ans = Batch(a=np.concatenate([b1.a, np.zeros((4, 4))]), + b=torch.cat([torch.zeros(3, 3), b2.b]), + common=Batch(c=np.concatenate([b1.common.c, b2.common.c]))) + assert np.allclose(test.a, ans.a) + assert torch.allclose(test.b, ans.b) + assert np.allclose(test.common.c, ans.common.c) + b3 = Batch(a=np.zeros((3, 4)), b=torch.ones((2, 5)), c=Batch(d=[[1], [2]])) diff --git a/tianshou/data/batch.py b/tianshou/data/batch.py index 6b1051788..1240cfe50 100644 --- a/tianshou/data/batch.py +++ b/tianshou/data/batch.py @@ -259,8 +259,7 @@ def __init__(self, v_ = None if not isinstance(v, np.ndarray) and \ all(isinstance(e, torch.Tensor) for e in v): - v_ = torch.stack(v) - self.__dict__[k] = v_ + self.__dict__[k] = torch.stack(v) continue else: v_ = np.asanyarray(v) @@ -294,7 +293,8 @@ def __setattr__(self, key: str, value: Any): value = np.array(value) if not issubclass(value.dtype.type, (np.bool_, np.number)): value = value.astype(np.object) - elif isinstance(value, dict): + elif isinstance(value, dict) or isinstance(value, np.ndarray) \ + and value.dtype == np.object and _is_batch_set(value): value = Batch(value) self.__dict__[key] = value @@ -333,9 +333,8 @@ def __getitem__(self, index: Union[ else: raise IndexError("Cannot access item from empty Batch object.") - def __setitem__( - self, - index: Union[str, slice, int, np.integer, np.ndarray, List[int]], + def __setitem__(self, index: Union[ + str, slice, int, np.integer, np.ndarray, List[int]], value: Any) -> None: """Assign value to self[index].""" if isinstance(value, np.ndarray): @@ -454,10 +453,8 @@ def to_numpy(self) -> None: elif isinstance(v, Batch): v.to_numpy() - def to_torch(self, - dtype: Optional[torch.dtype] = None, - device: Union[str, int, torch.device] = 'cpu' - ) -> None: + def to_torch(self, dtype: Optional[torch.dtype] = None, + device: Union[str, int, torch.device] = 'cpu') -> None: """Change all numpy.ndarray to torch.Tensor. This is an in-place operation. """ @@ -473,66 +470,111 @@ def to_torch(self, v = v.type(dtype) self.__dict__[k] = v elif isinstance(v, torch.Tensor): - if dtype is not None and v.dtype != dtype: - must_update_tensor = True - elif v.device.type != device.type: - must_update_tensor = True - elif device.index is not None and \ + if dtype is not None and v.dtype != dtype or \ + v.device.type != device.type or \ + device.index is not None and \ device.index != v.device.index: - must_update_tensor = True - else: - must_update_tensor = False - if must_update_tensor: if dtype is not None: v = v.type(dtype) self.__dict__[k] = v.to(device) elif isinstance(v, Batch): v.to_torch(dtype, device) - def append(self, batch: 'Batch') -> None: - warnings.warn('Method :meth:`~tianshou.data.Batch.append` will be ' - 'removed soon, please use ' - ':meth:`~tianshou.data.Batch.cat`') - return self.cat_(batch) - - def cat_(self, batch: 'Batch') -> None: - """Concatenate a :class:`~tianshou.data.Batch` object into current - batch. + def cat_(self, + batches: Union['Batch', List[Union[dict, 'Batch']]]) -> None: + """Concatenate a list of (or one) :class:`~tianshou.data.Batch` objects + into current batch. """ - assert isinstance(batch, Batch), \ - 'Only Batch is allowed to be concatenated in-place!' - for k, v in batch.items(): - if v is None: - continue - if not hasattr(self, k) or self.__dict__[k] is None: - self.__dict__[k] = deepcopy(v) - elif isinstance(v, np.ndarray) and v.ndim > 0: - self.__dict__[k] = np.concatenate([self.__dict__[k], v]) - elif isinstance(v, torch.Tensor): - self.__dict__[k] = torch.cat([self.__dict__[k], v]) - elif isinstance(v, Batch): - self.__dict__[k].cat_(v) + if isinstance(batches, Batch): + batches = [batches] + if len(batches) == 0: + return + batches = [x if isinstance(x, Batch) else Batch(x) for x in batches] + if len(self.__dict__) > 0: + batches = [self] + list(batches) + # partial keys will be padded by zeros + # with the shape of [len, rest_shape] + lens = [len(x) for x in batches] + keys_map = list(map(lambda e: set(e.keys()), batches)) + keys_shared = set.intersection(*keys_map) + values_shared = [ + [e[k] for e in batches] for k in keys_shared] + _assert_type_keys(keys_shared) + for k, v in zip(keys_shared, values_shared): + if all(isinstance(e, (dict, Batch)) for e in v): + self.__dict__[k] = Batch.cat(v) + elif all(isinstance(e, torch.Tensor) for e in v): + self.__dict__[k] = torch.cat(v) + else: + v = np.concatenate(v) + if not issubclass(v.dtype.type, (np.bool_, np.number)): + v = v.astype(np.object) + self.__dict__[k] = v + keys_partial = set.union(*keys_map) - keys_shared + _assert_type_keys(keys_partial) + for k in keys_partial: + is_dict = False + value = None + for i, e in enumerate(batches): + val = e.get(k, None) + if val is not None: + if isinstance(val, (dict, Batch)): + is_dict = True + else: # np.ndarray or torch.Tensor + value = val + break + if is_dict: + self.__dict__[k] = Batch.cat( + [e.get(k, Batch()) for e in batches]) else: - s = 'No support for method "cat" with type '\ - f'{type(v)} in class Batch.' - raise TypeError(s) + if isinstance(value, np.ndarray): + arrs = [] + for i, e in enumerate(batches): + shape = [lens[i]] + list(value.shape[1:]) + pad = np.zeros(shape, dtype=value.dtype) + arrs.append(e.get(k, pad)) + self.__dict__[k] = np.concatenate(arrs) + elif isinstance(value, torch.Tensor): + arrs = [] + for i, e in enumerate(batches): + shape = [lens[i]] + list(value.shape[1:]) + pad = torch.zeros(shape, + dtype=value.dtype, + device=value.device) + arrs.append(e.get(k, pad)) + self.__dict__[k] = torch.cat(arrs) + else: + raise TypeError( + f"cannot cat value with type {type(value)}, we only " + "support dict, Batch, np.ndarray, and torch.Tensor") @staticmethod def cat(batches: List[Union[dict, 'Batch']]) -> 'Batch': - """Concatenate a list of :class:`~tianshou.data.Batch` object into a single - new batch. + """Concatenate a list of :class:`~tianshou.data.Batch` object into a + single new batch. For keys that are not shared across all batches, + batches that do not have these keys will be padded by zeros with + appropriate shapes. E.g. + :: + + >>> a = Batch(a=np.zeros([3, 4]), common=Batch(c=np.zeros([3, 5]))) + >>> b = Batch(b=np.zeros([4, 3]), common=Batch(c=np.zeros([4, 5]))) + >>> c = Batch.cat([a, b]) + >>> c.a.shape + (7, 4) + >>> c.b.shape + (7, 3) + >>> c.common.c.shape + (7, 5) """ batch = Batch() - for batch_ in batches: - if isinstance(batch_, dict): - batch_ = Batch(batch_) - batch.cat_(batch_) + batch.cat_(batches) return batch def stack_(self, batches: List[Union[dict, 'Batch']], axis: int = 0) -> None: - """Stack a :class:`~tianshou.data.Batch` object i into current batch. + """Stack a list of :class:`~tianshou.data.Batch` object into current + batch. """ if len(self.__dict__) > 0: batches = [self] + list(batches) @@ -566,8 +608,8 @@ def stack_(self, @staticmethod def stack(batches: List[Union[dict, 'Batch']], axis: int = 0) -> 'Batch': - """Stack a :class:`~tianshou.data.Batch` object into a single new - batch. + """Stack a list of :class:`~tianshou.data.Batch` object into a single + new batch. """ batch = Batch() batch.stack_(batches, axis) @@ -611,11 +653,24 @@ def empty(batch: 'Batch', index: Union[ """ return deepcopy(batch).empty_(index) + def update(self, batch: Optional[Union[dict, 'Batch']] = None, + **kwargs) -> None: + """Update this batch from another dict/Batch.""" + if batch is None: + self.update(kwargs) + return + if isinstance(batch, dict): + batch = Batch(batch) + for k, v in batch.items(): + self.__dict__[k] = v + if kwargs: + self.update(kwargs) + def __len__(self) -> int: """Return len(self).""" r = [] for v in self.__dict__.values(): - if isinstance(v, Batch) and len(v.__dict__) == 0: + if isinstance(v, Batch) and v.is_empty(): continue elif hasattr(v, '__len__') and (not isinstance( v, (np.ndarray, torch.Tensor)) or v.ndim > 0): @@ -627,7 +682,9 @@ def __len__(self) -> int: return min(r) def is_empty(self): - return len(self.__dict__.keys()) == 0 + return not any( + not x.is_empty() if isinstance(x, Batch) + else hasattr(x, '__len__') and len(x) > 0 for x in self.values()) @property def shape(self) -> List[int]: diff --git a/tianshou/data/buffer.py b/tianshou/data/buffer.py index 33d31789d..f593d2a74 100644 --- a/tianshou/data/buffer.py +++ b/tianshou/data/buffer.py @@ -108,8 +108,7 @@ def __init__(self, size: int, stack_num: Optional[int] = 0, super().__init__() self._maxsize = size self._stack = stack_num - assert stack_num != 1, \ - 'stack_num should greater than 1' + assert stack_num != 1, 'stack_num should greater than 1' self._avail = sample_avail and stack_num > 1 self._avail_index = [] self._save_s_ = not ignore_obs_next @@ -136,12 +135,11 @@ def _add_to_buffer(self, name: str, inst: Any) -> None: except KeyError: self._meta.__dict__[name] = _create_value(inst, self._maxsize) value = self._meta.__dict__[name] - if isinstance(inst, np.ndarray) and \ - value.shape[1:] != inst.shape: + if isinstance(inst, np.ndarray) and value.shape[1:] != inst.shape: raise ValueError( "Cannot add data to a buffer with different shape, key: " - f"{name}, expect shape: {value.shape[1:]}" - f", given shape: {inst.shape}.") + f"{name}, expect shape: {value.shape[1:]}, " + f"given shape: {inst.shape}.") try: value[self._index] = inst except KeyError: @@ -357,7 +355,7 @@ def __init__(self, size: int, alpha: float, beta: float, self._weight_sum = 0.0 self._amortization_freq = 50 self._replace = replace - self._meta.__dict__['weight'] = np.zeros(size, dtype=np.float64) + self._meta.weight = np.zeros(size, dtype=np.float64) def add(self, obs: Union[dict, np.ndarray], @@ -372,7 +370,7 @@ def add(self, """Add a batch of data into replay buffer.""" # we have to sacrifice some convenience for speed self._weight_sum += np.abs(weight) ** self._alpha - \ - self._meta.__dict__['weight'][self._index] + self._meta.weight[self._index] self._add_to_buffer('weight', np.abs(weight) ** self._alpha) super().add(obs, act, rew, done, obs_next, info, policy) @@ -410,14 +408,9 @@ def sample(self, batch_size: int) -> Tuple[Batch, np.ndarray]: f"batch_size should be less than {len(self)}, \ or set replace=True") batch = self[indice] - impt_weight = Batch( - impt_weight=(self._size * p) ** (-self._beta)) - batch.cat_(impt_weight) + batch["impt_weight"] = (self._size * p) ** (-self._beta) return batch, indice - def reset(self) -> None: - super().reset() - def update_weight(self, indice: Union[slice, np.ndarray], new_weight: np.ndarray) -> None: """Update priority weight by indice in this buffer. From a55ad33155d17a530e5f83a5f0436c30af87047d Mon Sep 17 00:00:00 2001 From: youkaichao Date: Sun, 12 Jul 2020 23:45:42 +0800 Subject: [PATCH 03/22] Fix padding of inconsistent keys with Batch.stack and Batch.cat (#130) * re-implement Batch.stack and add testcases * add doc for Batch.stack * reuse _create_values and refactor stack_ & cat_ * fix pep8 * fix docs * raise exception for stacking with partial keys and axis!=0 * minor fix * minor fix Co-authored-by: Trinkle23897 <463003665@qq.com> --- test/base/test_batch.py | 23 ++++++++- tianshou/data/batch.py | 104 +++++++++++++++++++++++----------------- 2 files changed, 82 insertions(+), 45 deletions(-) diff --git a/test/base/test_batch.py b/test/base/test_batch.py index 03031ff2e..7e287e269 100644 --- a/test/base/test_batch.py +++ b/test/base/test_batch.py @@ -166,7 +166,7 @@ def test_batch_cat_and_stack(): assert isinstance(b12_stack.a.d.e, np.ndarray) assert b12_stack.a.d.e.ndim == 2 - # test batch with incompatible keys + # test cat with incompatible keys b1 = Batch(a=np.random.rand(3, 4), common=Batch(c=np.random.rand(3, 5))) b2 = Batch(b=torch.rand(4, 3), common=Batch(c=np.random.rand(4, 5))) test = Batch.cat([b1, b2]) @@ -177,6 +177,7 @@ def test_batch_cat_and_stack(): assert torch.allclose(test.b, ans.b) assert np.allclose(test.common.c, ans.common.c) + # test stack with compatible keys b3 = Batch(a=np.zeros((3, 4)), b=torch.ones((2, 5)), c=Batch(d=[[1], [2]])) @@ -194,6 +195,26 @@ def test_batch_cat_and_stack(): assert b5.b.d[0] == b5_dict[0]['b']['d'] assert b5.b.d[1] == 0.0 + # test stack with incompatible keys + a = Batch(a=1, b=2, c=3) + b = Batch(a=4, b=5, d=6) + c = Batch(c=7, b=6, d=9) + d = Batch.stack([a, b, c]) + assert np.allclose(d.a, [1, 4, 0]) + assert np.allclose(d.b, [2, 5, 6]) + assert np.allclose(d.c, [3, 0, 7]) + assert np.allclose(d.d, [0, 6, 9]) + + b1 = Batch(a=np.random.rand(4, 4), common=Batch(c=np.random.rand(4, 5))) + b2 = Batch(b=torch.rand(4, 6), common=Batch(c=np.random.rand(4, 5))) + test = Batch.stack([b1, b2]) + ans = Batch(a=np.stack([b1.a, np.zeros((4, 4))]), + b=torch.stack([torch.zeros(4, 6), b2.b]), + common=Batch(c=np.stack([b1.common.c, b2.common.c]))) + assert np.allclose(test.a, ans.a) + assert torch.allclose(test.b, ans.b) + assert np.allclose(test.common.c, ans.common.c) + def test_batch_over_batch_to_torch(): batch = Batch( diff --git a/tianshou/data/batch.py b/tianshou/data/batch.py index 1240cfe50..415c8f38a 100644 --- a/tianshou/data/batch.py +++ b/tianshou/data/batch.py @@ -3,7 +3,6 @@ import warnings import numpy as np from copy import deepcopy -from functools import reduce from numbers import Number from typing import Any, List, Tuple, Union, Iterator, Optional @@ -24,28 +23,45 @@ def _is_batch_set(data: Any) -> bool: return False -def _create_value(inst: Any, size: int) -> Union[ +def _create_value(inst: Any, size: int, stack=True) -> Union[ 'Batch', np.ndarray, torch.Tensor]: + """ + :param bool stack: whether to stack or to concatenate. E.g. if inst has + shape of (3, 5), size = 10, stack=True returns an np.ndarry with shape + of (10, 3, 5), otherwise (10, 5) + """ + has_shape = isinstance(inst, (np.ndarray, torch.Tensor)) + is_scalar = \ + isinstance(inst, Number) or \ + issubclass(inst.__class__, np.generic) or \ + (has_shape and not inst.shape) + if not stack and is_scalar: + # here we do not consider scalar types, following the + # behavior of numpy which does not support concatenation + # of zero-dimensional arrays (scalars) + raise TypeError(f"cannot cat {inst} with which is scalar") + if has_shape: + shape = (size, *inst.shape) if stack else (size, *inst.shape[1:]) if isinstance(inst, np.ndarray): if issubclass(inst.dtype.type, (np.bool_, np.number)): target_type = inst.dtype.type else: target_type = np.object - return np.full((size, *inst.shape), + return np.full(shape, fill_value=None if target_type == np.object else 0, dtype=target_type) elif isinstance(inst, torch.Tensor): - return torch.full((size, *inst.shape), + return torch.full(shape, fill_value=0, device=inst.device, dtype=inst.dtype) elif isinstance(inst, (dict, Batch)): zero_batch = Batch() for key, val in inst.items(): - zero_batch.__dict__[key] = _create_value(val, size) + zero_batch.__dict__[key] = _create_value(val, size, stack=stack) return zero_batch - elif isinstance(inst, (np.generic, Number)): - return _create_value(np.asarray(inst), size) + elif is_scalar: + return _create_value(np.asarray(inst), size, stack=stack) else: # fall back to np.object return np.array([None for _ in range(size)]) @@ -495,10 +511,12 @@ def cat_(self, # partial keys will be padded by zeros # with the shape of [len, rest_shape] lens = [len(x) for x in batches] + sum_lens = [0] + for x in lens: + sum_lens.append(sum_lens[-1] + x) keys_map = list(map(lambda e: set(e.keys()), batches)) keys_shared = set.intersection(*keys_map) - values_shared = [ - [e[k] for e in batches] for k in keys_shared] + values_shared = [[e[k] for e in batches] for k in keys_shared] _assert_type_keys(keys_shared) for k, v in zip(keys_shared, values_shared): if all(isinstance(e, (dict, Batch)) for e in v): @@ -513,40 +531,15 @@ def cat_(self, keys_partial = set.union(*keys_map) - keys_shared _assert_type_keys(keys_partial) for k in keys_partial: - is_dict = False - value = None for i, e in enumerate(batches): val = e.get(k, None) if val is not None: - if isinstance(val, (dict, Batch)): - is_dict = True - else: # np.ndarray or torch.Tensor - value = val - break - if is_dict: - self.__dict__[k] = Batch.cat( - [e.get(k, Batch()) for e in batches]) - else: - if isinstance(value, np.ndarray): - arrs = [] - for i, e in enumerate(batches): - shape = [lens[i]] + list(value.shape[1:]) - pad = np.zeros(shape, dtype=value.dtype) - arrs.append(e.get(k, pad)) - self.__dict__[k] = np.concatenate(arrs) - elif isinstance(value, torch.Tensor): - arrs = [] - for i, e in enumerate(batches): - shape = [lens[i]] + list(value.shape[1:]) - pad = torch.zeros(shape, - dtype=value.dtype, - device=value.device) - arrs.append(e.get(k, pad)) - self.__dict__[k] = torch.cat(arrs) - else: - raise TypeError( - f"cannot cat value with type {type(value)}, we only " - "support dict, Batch, np.ndarray, and torch.Tensor") + try: + self.__dict__[k][sum_lens[i]:sum_lens[i + 1]] = val + except KeyError: + self.__dict__[k] = \ + _create_value(val, sum_lens[-1], stack=False) + self.__dict__[k][sum_lens[i]:sum_lens[i + 1]] = val @staticmethod def cat(batches: List[Union[dict, 'Batch']]) -> 'Batch': @@ -576,12 +569,14 @@ def stack_(self, """Stack a list of :class:`~tianshou.data.Batch` object into current batch. """ + if len(batches) == 0: + return + batches = [x if isinstance(x, Batch) else Batch(x) for x in batches] if len(self.__dict__) > 0: batches = [self] + list(batches) keys_map = list(map(lambda e: set(e.keys()), batches)) keys_shared = set.intersection(*keys_map) - values_shared = [ - [e[k] for e in batches] for k in keys_shared] + values_shared = [[e[k] for e in batches] for k in keys_shared] _assert_type_keys(keys_shared) for k, v in zip(keys_shared, values_shared): if all(isinstance(e, (dict, Batch)) for e in v): @@ -593,7 +588,11 @@ def stack_(self, if not issubclass(v.dtype.type, (np.bool_, np.number)): v = v.astype(np.object) self.__dict__[k] = v - keys_partial = reduce(set.symmetric_difference, keys_map) + keys_partial = set.difference(set.union(*keys_map), keys_shared) + if keys_partial and axis != 0: + raise ValueError( + f"Stack of Batch with non-shared keys {keys_partial} " + f"is only supported with axis=0, but got axis={axis}!") _assert_type_keys(keys_partial) for k in keys_partial: for i, e in enumerate(batches): @@ -609,7 +608,24 @@ def stack_(self, @staticmethod def stack(batches: List[Union[dict, 'Batch']], axis: int = 0) -> 'Batch': """Stack a list of :class:`~tianshou.data.Batch` object into a single - new batch. + new batch. For keys that are not shared across all batches, + batches that do not have these keys will be padded by zeros. E.g. + :: + + >>> a = Batch(a=np.zeros([4, 4]), common=Batch(c=np.zeros([4, 5]))) + >>> b = Batch(b=np.zeros([4, 6]), common=Batch(c=np.zeros([4, 5]))) + >>> c = Batch.stack([a, b]) + >>> c.a.shape + (2, 4, 4) + >>> c.b.shape + (2, 4, 6) + >>> c.common.c.shape + (2, 4, 5) + + .. note:: + + If there are keys that are not shared across all batches, ``stack`` + with ``axis != 0`` is undefined, and will cause an exception. """ batch = Batch() batch.stack_(batches, axis) From 885fbc1c0bb27334e7a24ac205e625a4526b81bb Mon Sep 17 00:00:00 2001 From: youkaichao Date: Mon, 13 Jul 2020 00:24:31 +0800 Subject: [PATCH 04/22] Improve collector (#125) * remove multibuf * reward_metric * make fileds with empty Batch rather than None after reset * many fixes and refactor Co-authored-by: Trinkle23897 <463003665@qq.com> --- test/base/env.py | 38 ++--- test/base/test_collector.py | 50 ++++++- tianshou/data/collector.py | 272 +++++++++++++++--------------------- 3 files changed, 183 insertions(+), 177 deletions(-) diff --git a/test/base/env.py b/test/base/env.py index 1aa409fca..b0962154f 100644 --- a/test/base/env.py +++ b/test/base/env.py @@ -1,19 +1,34 @@ -import time import gym +import time from gym.spaces.discrete import Discrete class MyTestEnv(gym.Env): - def __init__(self, size, sleep=0, dict_state=False): + """This is a "going right" task. The task is to go right ``size`` steps. + """ + + def __init__(self, size, sleep=0, dict_state=False, ma_rew=0): self.size = size self.sleep = sleep self.dict_state = dict_state + self.ma_rew = ma_rew self.action_space = Discrete(2) self.reset() def reset(self, state=0): self.done = False self.index = state + return self._get_dict_state() + + def _get_reward(self): + """Generate a non-scalar reward if ma_rew is True.""" + x = int(self.done) + if self.ma_rew > 0: + return [x] * self.ma_rew + return x + + def _get_dict_state(self): + """Generate a dict_state if dict_state is True.""" return {'index': self.index} if self.dict_state else self.index def step(self, action): @@ -23,22 +38,13 @@ def step(self, action): time.sleep(self.sleep) if self.index == self.size: self.done = True - if self.dict_state: - return {'index': self.index}, 0, True, {} - else: - return self.index, 0, True, {} + return self._get_dict_state(), self._get_reward(), self.done, {} if action == 0: self.index = max(self.index - 1, 0) - if self.dict_state: - return {'index': self.index}, 0, False, {'key': 1, 'env': self} - else: - return self.index, 0, False, {} + return self._get_dict_state(), self._get_reward(), self.done, \ + {'key': 1, 'env': self} if self.dict_state else {} elif action == 1: self.index += 1 self.done = self.index == self.size - if self.dict_state: - return {'index': self.index}, int(self.done), self.done, \ - {'key': 1, 'env': self} - else: - return self.index, int(self.done), self.done, \ - {'key': 1, 'env': self} + return self._get_dict_state(), self._get_reward(), \ + self.done, {'key': 1, 'env': self} diff --git a/test/base/test_collector.py b/test/base/test_collector.py index 16fbdda8d..ead017a01 100644 --- a/test/base/test_collector.py +++ b/test/base/test_collector.py @@ -27,16 +27,16 @@ def learn(self): def preprocess_fn(**kwargs): # modify info before adding into the buffer - if kwargs.get('info', None) is not None: + # if info is not provided from env, it will be a ``Batch()``. + if not kwargs.get('info', Batch()).is_empty(): n = len(kwargs['obs']) info = kwargs['info'] for i in range(n): info[i].update(rew=kwargs['rew'][i]) return {'info': info} - # or - # return Batch(info=info) + # or: return Batch(info=info) else: - return {} + return Batch() class Logger(object): @@ -119,6 +119,48 @@ def test_collector_with_dict_state(): print(batch['obs_next']['index']) +def test_collector_with_ma(): + def reward_metric(x): + return x.sum() + env = MyTestEnv(size=5, sleep=0, ma_rew=4) + policy = MyPolicy() + c0 = Collector(policy, env, ReplayBuffer(size=100), + preprocess_fn, reward_metric=reward_metric) + r = c0.collect(n_step=3)['rew'] + assert np.asanyarray(r).size == 1 and r == 0. + r = c0.collect(n_episode=3)['rew'] + assert np.asanyarray(r).size == 1 and r == 4. + env_fns = [lambda x=i: MyTestEnv(size=x, sleep=0, ma_rew=4) + for i in [2, 3, 4, 5]] + envs = VectorEnv(env_fns) + c1 = Collector(policy, envs, ReplayBuffer(size=100), + preprocess_fn, reward_metric=reward_metric) + r = c1.collect(n_step=10)['rew'] + assert np.asanyarray(r).size == 1 and r == 4. + r = c1.collect(n_episode=[2, 1, 1, 2])['rew'] + assert np.asanyarray(r).size == 1 and r == 4. + batch = c1.sample(10) + print(batch) + c0.buffer.update(c1.buffer) + obs = [ + 0., 1., 2., 3., 4., 0., 1., 2., 3., 4., 0., 1., 2., 3., 4., 0., 1., + 0., 1., 2., 0., 1., 0., 1., 2., 3., 0., 1., 2., 3., 4., 0., 1., 0., + 1., 2., 0., 1., 0., 1., 2., 3., 0., 1., 2., 3., 4.] + assert np.allclose(c0.buffer[:len(c0.buffer)].obs, obs) + rew = [0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, + 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1] + assert np.allclose(c0.buffer[:len(c0.buffer)].rew, + [[x] * 4 for x in rew]) + c2 = Collector(policy, envs, ReplayBuffer(size=100, stack_num=4), + preprocess_fn, reward_metric=reward_metric) + r = c2.collect(n_episode=[0, 0, 0, 10])['rew'] + assert np.asanyarray(r).size == 1 and r == 4. + batch = c2.sample(10) + print(batch['obs_next']) + + if __name__ == '__main__': test_collector() test_collector_with_dict_state() + test_collector_with_ma() diff --git a/tianshou/data/collector.py b/tianshou/data/collector.py index 3a7ad7821..40cd7390c 100644 --- a/tianshou/data/collector.py +++ b/tianshou/data/collector.py @@ -8,8 +8,8 @@ from tianshou.utils import MovAvg from tianshou.env import BaseVectorEnv from tianshou.policy import BasePolicy -from tianshou.data import Batch, ReplayBuffer, ListReplayBuffer, to_numpy from tianshou.exploration import BaseNoise +from tianshou.data import Batch, ReplayBuffer, ListReplayBuffer, to_numpy class Collector(object): @@ -25,12 +25,18 @@ class Collector(object): ``None``, it will automatically assign a small-size :class:`~tianshou.data.ReplayBuffer`. :param function preprocess_fn: a function called before the data has been - added to the buffer, see issue #42, defaults to ``None``. + added to the buffer, see issue #42 and :ref:`preprocess_fn`, defaults + to ``None``. :param int stat_size: for the moving average of recording speed, defaults to 100. :param BaseNoise action_noise: add a noise to continuous action. Normally a policy already has a noise param for exploration in training phase, so this is recommended to use in test collector for some purpose. + :param function reward_metric: to be used in multi-agent RL. The reward to + report is of shape [agent_num], but we need to return a single scalar + to monitor training. This function specifies what is the desired + metric, e.g., the reward of agent 1 or the average reward over all + agents. By default, the behavior is to select the reward of agent 1. The ``preprocess_fn`` is a function called before the data has been added to the buffer with batch format, which receives up to 7 keys as listed in @@ -87,68 +93,58 @@ class Collector(object): def __init__(self, policy: BasePolicy, env: Union[gym.Env, BaseVectorEnv], - buffer: Optional[Union[ReplayBuffer, List[ReplayBuffer]]] - = None, + buffer: Optional[ReplayBuffer] = None, preprocess_fn: Callable[[Any], Union[dict, Batch]] = None, stat_size: Optional[int] = 100, action_noise: Optional[BaseNoise] = None, + reward_metric: Optional[Callable[[np.ndarray], float]] = None, **kwargs) -> None: super().__init__() self.env = env self.env_num = 1 - self.collect_time = 0 - self.collect_step = 0 - self.collect_episode = 0 + self.collect_time, self.collect_step, self.collect_episode = 0., 0, 0 self.buffer = buffer self.policy = policy self.preprocess_fn = preprocess_fn - # if preprocess_fn is None: - # def _prep(**kwargs): - # return kwargs - # self.preprocess_fn = _prep self.process_fn = policy.process_fn self._multi_env = isinstance(env, BaseVectorEnv) - self._multi_buf = False # True if buf is a list # need multiple cache buffers only if storing in one buffer self._cached_buf = [] if self._multi_env: self.env_num = len(env) - if isinstance(self.buffer, list): - assert len(self.buffer) == self.env_num, \ - 'The number of data buffer does not match the number of ' \ - 'input env.' - self._multi_buf = True - elif isinstance(self.buffer, ReplayBuffer) or self.buffer is None: - self._cached_buf = [ - ListReplayBuffer() for _ in range(self.env_num)] - else: - raise TypeError('The buffer in data collector is invalid!') + self._cached_buf = [ListReplayBuffer() + for _ in range(self.env_num)] self.stat_size = stat_size self._action_noise = action_noise + + self._rew_metric = reward_metric or Collector._default_rew_metric self.reset() + @staticmethod + def _default_rew_metric(x): + # this internal function is designed for single-agent RL + # for multi-agent RL, a reward_metric must be provided + assert np.asanyarray(x).size == 1, \ + 'Please specify the reward_metric ' \ + 'since the reward is not a scalar.' + return x + def reset(self) -> None: """Reset all related variables in the collector.""" + self.data = Batch(state={}, obs={}, act={}, rew={}, done={}, info={}, + obs_next={}, policy={}) self.reset_env() self.reset_buffer() - # state over batch is either a list, an np.ndarray, or a torch.Tensor - self.state = None self.step_speed = MovAvg(self.stat_size) self.episode_speed = MovAvg(self.stat_size) - self.collect_step = 0 - self.collect_episode = 0 - self.collect_time = 0 + self.collect_time, self.collect_step, self.collect_episode = 0., 0, 0 if self._action_noise is not None: self._action_noise.reset() def reset_buffer(self) -> None: """Reset the main data buffer.""" - if self._multi_buf: - for b in self.buffer: - b.reset() - else: - if self.buffer is not None: - self.buffer.reset() + if self.buffer is not None: + self.buffer.reset() def get_env_num(self) -> int: """Return the number of environments the collector have.""" @@ -158,34 +154,28 @@ def reset_env(self) -> None: """Reset all of the environment(s)' states and reset all of the cache buffers (if need). """ - self._obs = self.env.reset() + obs = self.env.reset() if not self._multi_env: - self._obs = self._make_batch(self._obs) + obs = self._make_batch(obs) if self.preprocess_fn: - self._obs = self.preprocess_fn(obs=self._obs).get('obs', self._obs) - self._act = self._rew = self._done = self._info = None - if self._multi_env: - self.reward = np.zeros(self.env_num) - self.length = np.zeros(self.env_num) - else: - self.reward, self.length = 0, 0 + obs = self.preprocess_fn(obs=obs).get('obs', obs) + self.data.obs = obs + self.reward = 0. # will be specified when the first data is ready + self.length = np.zeros(self.env_num) for b in self._cached_buf: b.reset() def seed(self, seed: Optional[Union[int, List[int]]] = None) -> None: """Reset all the seed(s) of the given environment(s).""" - if hasattr(self.env, 'seed'): - return self.env.seed(seed) + return self.env.seed(seed) def render(self, **kwargs) -> None: """Render all the environment(s).""" - if hasattr(self.env, 'render'): - return self.env.render(**kwargs) + return self.env.render(**kwargs) def close(self) -> None: """Close the environment(s).""" - if hasattr(self.env, 'close'): - self.env.close() + self.env.close() def _make_batch(self, data: Any) -> np.ndarray: """Return [data].""" @@ -195,20 +185,14 @@ def _make_batch(self, data: Any) -> np.ndarray: return np.array([data]) def _reset_state(self, id: Union[int, List[int]]) -> None: - """Reset self.state[id].""" - if self.state is None: - return - if isinstance(self.state, list): - self.state[id] = None - elif isinstance(self.state, torch.Tensor): - self.state[id].zero_() - elif isinstance(self.state, np.ndarray): - if isinstance(self.state.dtype == np.object): - self.state[id] = None - else: - self.state[id] = 0 - elif isinstance(self.state, Batch): - self.state.empty_(id) + """Reset self.data.state[id].""" + state = self.data.state # it is a reference + if isinstance(state, torch.Tensor): + state[id].zero_() + elif isinstance(state, np.ndarray): + state[id] = None if state.dtype == np.object else 0 + elif isinstance(state, Batch): + state.empty_(id) def collect(self, n_step: int = 0, @@ -244,26 +228,27 @@ def collect(self, * ``rew`` the mean reward over collected episodes. * ``len`` the mean length over collected episodes. """ - warning_count = 0 if not self._multi_env: n_episode = np.sum(n_episode) start_time = time.time() assert sum([(n_step != 0), (n_episode != 0)]) == 1, \ "One and only one collection number specification is permitted!" - cur_step = 0 - cur_episode = np.zeros(self.env_num) if self._multi_env else 0 - reward_sum = 0 - length_sum = 0 + cur_step, cur_episode = 0, np.zeros(self.env_num) + reward_sum, length_sum = 0., 0 while True: - if warning_count >= 100000: + if cur_step >= 100000 and cur_episode.sum() == 0: warnings.warn( 'There are already many steps in an episode. ' 'You should add a time limitation to your environment!', Warning) - batch = Batch( - obs=self._obs, act=self._act, rew=self._rew, - done=self._done, obs_next=None, info=self._info, - policy=None) + + # restore the state and the input data + last_state = self.data.state + if last_state.is_empty(): + last_state = None + self.data.update(state=Batch(), obs_next=Batch(), policy=Batch()) + + # calculate the next action if random: action_space = self.env.action_space if isinstance(action_space, list): @@ -272,69 +257,54 @@ def collect(self, result = Batch(act=self._make_batch(action_space.sample())) else: with torch.no_grad(): - result = self.policy(batch, self.state) + result = self.policy(self.data, last_state) - # save hidden state to policy._state, in order to save into buffer - self.state = result.get('state', None) + # convert None to Batch(), since None is reserved for 0-init + state = result.get('state', Batch()) + if state is None: + state = Batch() + self.data.state = state if hasattr(result, 'policy'): - self._policy = to_numpy(result.policy) - if self.state is not None: - self._policy._state = self.state - elif self.state is not None: - self._policy = Batch(_state=self.state) - else: - self._policy = [{}] * self.env_num + self.data.policy = to_numpy(result.policy) + # save hidden state to policy._state, in order to save into buffer + self.data.policy._state = self.data.state - self._act = to_numpy(result.act) + self.data.act = to_numpy(result.act) if self._action_noise is not None: - self._act += self._action_noise(self._act.shape) - obs_next, self._rew, self._done, self._info = self.env.step( - self._act if self._multi_env else self._act[0]) + self.data.act += self._action_noise(self.data.act.shape) + + # step in env + obs_next, rew, done, info = self.env.step( + self.data.act if self._multi_env else self.data.act[0]) + + # move data to self.data if not self._multi_env: obs_next = self._make_batch(obs_next) - self._rew = self._make_batch(self._rew) - self._done = self._make_batch(self._done) - self._info = self._make_batch(self._info) + rew = self._make_batch(rew) + done = self._make_batch(done) + info = self._make_batch(info) + self.data.obs_next = obs_next + self.data.rew = rew + self.data.done = done + self.data.info = info + if log_fn: - log_fn(self._info if self._multi_env else self._info[0]) + log_fn(info if self._multi_env else info[0]) if render: - self.env.render() + self.render() if render > 0: time.sleep(render) + + # add data into the buffer self.length += 1 - self.reward += self._rew + self.reward += self.data.rew if self.preprocess_fn: - result = self.preprocess_fn( - obs=self._obs, act=self._act, rew=self._rew, - done=self._done, obs_next=obs_next, info=self._info, - policy=self._policy) - self._obs = result.get('obs', self._obs) - self._act = result.get('act', self._act) - self._rew = result.get('rew', self._rew) - self._done = result.get('done', self._done) - obs_next = result.get('obs_next', obs_next) - self._info = result.get('info', self._info) - self._policy = result.get('policy', self._policy) - if self._multi_env: + result = self.preprocess_fn(**self.data) + self.data.update(result) + if self._multi_env: # cache_buffer branch for i in range(self.env_num): - data = { - 'obs': self._obs[i], 'act': self._act[i], - 'rew': self._rew[i], 'done': self._done[i], - 'obs_next': obs_next[i], 'info': self._info[i], - 'policy': self._policy[i]} - if self._cached_buf: - warning_count += 1 - self._cached_buf[i].add(**data) - elif self._multi_buf: - warning_count += 1 - self.buffer[i].add(**data) - cur_step += 1 - else: - warning_count += 1 - if self.buffer is not None: - self.buffer.add(**data) - cur_step += 1 - if self._done[i]: + self._cached_buf[i].add(**self.data[i]) + if self.data.done[i]: if n_step != 0 or np.isscalar(n_episode) or \ cur_episode[i] < n_episode[i]: cur_episode[i] += 1 @@ -344,46 +314,47 @@ def collect(self, cur_step += len(self._cached_buf[i]) if self.buffer is not None: self.buffer.update(self._cached_buf[i]) - self.reward[i], self.length[i] = 0, 0 + self.reward[i], self.length[i] = 0., 0 if self._cached_buf: self._cached_buf[i].reset() self._reset_state(i) - if sum(self._done): - obs_next = self.env.reset(np.where(self._done)[0]) + obs_next = self.data.obs_next + if sum(self.data.done): + obs_next = self.env.reset(np.where(self.data.done)[0]) if self.preprocess_fn: obs_next = self.preprocess_fn(obs=obs_next).get( 'obs', obs_next) + self.data.obs_next = obs_next if n_episode != 0: if isinstance(n_episode, list) and \ (cur_episode >= np.array(n_episode)).all() or \ np.isscalar(n_episode) and \ cur_episode.sum() >= n_episode: break - else: + else: # single buffer, without cache_buffer if self.buffer is not None: - self.buffer.add( - self._obs[0], self._act[0], self._rew[0], - self._done[0], obs_next[0], self._info[0], - self._policy[0]) + self.buffer.add(**self.data[0]) cur_step += 1 - if self._done: + if self.data.done[0]: cur_episode += 1 reward_sum += self.reward[0] - length_sum += self.length - self.reward, self.length = 0, 0 - self.state = None + length_sum += self.length[0] + self.reward, self.length = 0., np.zeros(self.env_num) + self.data.state = Batch() obs_next = self._make_batch(self.env.reset()) if self.preprocess_fn: obs_next = self.preprocess_fn(obs=obs_next).get( 'obs', obs_next) + self.data.obs_next = obs_next if n_episode != 0 and cur_episode >= n_episode: break if n_step != 0 and cur_step >= n_step: break - self._obs = obs_next - self._obs = obs_next - if self._multi_env: - cur_episode = sum(cur_episode) + self.data.obs = self.data.obs_next + self.data.obs = self.data.obs_next + + # generate the statistics + cur_episode = sum(cur_episode) duration = max(time.time() - start_time, 1e-9) self.step_speed.add(cur_step / duration) self.episode_speed.add(cur_episode / duration) @@ -394,12 +365,15 @@ def collect(self, n_episode = np.sum(n_episode) else: n_episode = max(cur_episode, 1) + reward_sum /= n_episode + if np.asanyarray(reward_sum).size > 1: # non-scalar reward_sum + reward_sum = self._rew_metric(reward_sum) return { 'n/ep': cur_episode, 'n/st': cur_step, 'v/st': self.step_speed.get(), 'v/ep': self.episode_speed.get(), - 'rew': reward_sum / n_episode, + 'rew': reward_sum, 'len': length_sum / n_episode, } @@ -412,22 +386,6 @@ def sample(self, batch_size: int) -> Batch: the buffer, otherwise it will extract the data with the given batch_size. """ - if self._multi_buf: - if batch_size > 0: - lens = [len(b) for b in self.buffer] - total = sum(lens) - batch_index = np.random.choice( - len(self.buffer), batch_size, p=np.array(lens) / total) - else: - batch_index = np.array([]) - batch_data = Batch() - for i, b in enumerate(self.buffer): - cur_batch = (batch_index == i).sum() - if batch_size and cur_batch or batch_size <= 0: - batch, indice = b.sample(cur_batch) - batch = self.process_fn(batch, b, indice) - batch_data.cat_(batch) - else: - batch_data, indice = self.buffer.sample(batch_size) - batch_data = self.process_fn(batch_data, self.buffer, indice) + batch_data, indice = self.buffer.sample(batch_size) + batch_data = self.process_fn(batch_data, self.buffer, indice) return batch_data From cee808880538e7a3f7b6c6e79d5d0e79d62ff918 Mon Sep 17 00:00:00 2001 From: Alexis DUBURCQ Date: Mon, 13 Jul 2020 16:38:42 +0200 Subject: [PATCH 05/22] Vector env enable select worker (#132) * Enable selecting worker for vector env step method. * Update collector to match new vecenv selective worker behavior. * Bug fix. * Fix rebase Co-authored-by: Alexis Duburcq --- tianshou/data/batch.py | 9 ++- tianshou/data/collector.py | 9 ++- tianshou/env/vecenv.py | 136 ++++++++++++++++++------------------- 3 files changed, 78 insertions(+), 76 deletions(-) diff --git a/tianshou/data/batch.py b/tianshou/data/batch.py index 415c8f38a..23d859999 100644 --- a/tianshou/data/batch.py +++ b/tianshou/data/batch.py @@ -353,6 +353,8 @@ def __setitem__(self, index: Union[ str, slice, int, np.integer, np.ndarray, List[int]], value: Any) -> None: """Assign value to self[index].""" + if isinstance(value, (list, tuple)): + value = np.asanyarray(value) if isinstance(value, np.ndarray): if not issubclass(value.dtype.type, (np.bool_, np.number)): value = value.astype(np.object) @@ -360,8 +362,11 @@ def __setitem__(self, index: Union[ self.__dict__[index] = value return if not isinstance(value, (dict, Batch)): - raise TypeError("Batch does not supported value type " - f"{type(value)} for item assignment.") + if _is_batch_set(value): + value = Batch(value) + else: + raise TypeError("Batch does not supported value type " + f"{type(value)} for item assignment.") if not set(value.keys()).issubset(self.__dict__.keys()): raise KeyError( "Creating keys is not supported by item assignment.") diff --git a/tianshou/data/collector.py b/tianshou/data/collector.py index 40cd7390c..2bacf14f0 100644 --- a/tianshou/data/collector.py +++ b/tianshou/data/collector.py @@ -320,10 +320,13 @@ def collect(self, self._reset_state(i) obs_next = self.data.obs_next if sum(self.data.done): - obs_next = self.env.reset(np.where(self.data.done)[0]) + env_ind = np.where(self.data.done)[0] + obs_reset = self.env.reset(env_ind) if self.preprocess_fn: - obs_next = self.preprocess_fn(obs=obs_next).get( - 'obs', obs_next) + obs_next[env_ind] = self.preprocess_fn( + obs=obs_reset).get('obs', obs_reset) + else: + obs_next[env_ind] = obs_reset self.data.obs_next = obs_next if n_episode != 0: if isinstance(n_episode, list) and \ diff --git a/tianshou/env/vecenv.py b/tianshou/env/vecenv.py index 26e983560..93c388209 100644 --- a/tianshou/env/vecenv.py +++ b/tianshou/env/vecenv.py @@ -40,16 +40,12 @@ class BaseVectorEnv(ABC, gym.Env): def __init__(self, env_fns: List[Callable[[], gym.Env]]) -> None: self._env_fns = env_fns self.env_num = len(env_fns) - self._obs = None - self._rew = None - self._done = None - self._info = None def __len__(self) -> int: """Return len(self), which is the number of environments.""" return self.env_num - def __getattribute__(self, key): + def __getattribute__(self, key: str): """Switch between the default attribute getter or one looking at wrapped environment level depending on the key.""" if key not in ('observation_space', 'action_space'): @@ -58,7 +54,7 @@ def __getattribute__(self, key): return self.__getattr__(key) @abstractmethod - def __getattr__(self, key): + def __getattr__(self, key: str): """Try to retrieve an attribute from each individual wrapped environment, if it does not belong to the wrapping vector environment class.""" @@ -73,11 +69,15 @@ def reset(self, id: Optional[Union[int, List[int]]] = None): pass @abstractmethod - def step(self, action: np.ndarray + def step(self, + action: np.ndarray, + id: Optional[Union[int, List[int]]] = None ) -> Tuple[np.ndarray, np.ndarray, np.ndarray, np.ndarray]: - """Run one timestep of all the environments’ dynamics. When the end of - episode is reached, you are responsible for calling reset(id) to reset - this environment’s state. + """Run one timestep of all the environments’ dynamics if id is + ``None``, otherwise run one timestep for some environments + with given id, either an int or a list. When the end of + episode is reached, you are responsible for calling reset(id) + to reset this environment’s state. Accept a batch of action and return a tuple (obs, rew, done, info). @@ -143,24 +143,24 @@ def __getattr__(self, key): def reset(self, id: Optional[Union[int, List[int]]] = None) -> np.ndarray: if id is None: - self._obs = np.stack([e.reset() for e in self.envs]) - else: - if np.isscalar(id): - id = [id] - for i in id: - self._obs[i] = self.envs[i].reset() - return self._obs - - def step(self, action: np.ndarray + id = range(self.env_num) + elif np.isscalar(id): + id = [id] + obs = np.stack([self.envs[i].reset() for i in id]) + return obs + + def step(self, + action: np.ndarray, + id: Optional[Union[int, List[int]]] = None ) -> Tuple[np.ndarray, np.ndarray, np.ndarray, np.ndarray]: - assert len(action) == self.env_num - result = [e.step(a) for e, a in zip(self.envs, action)] - self._obs, self._rew, self._done, self._info = zip(*result) - self._obs = np.stack(self._obs) - self._rew = np.stack(self._rew) - self._done = np.stack(self._done) - self._info = np.stack(self._info) - return self._obs, self._rew, self._done, self._info + if id is None: + id = range(self.env_num) + elif np.isscalar(id): + id = [id] + assert len(action) == len(id) + result = [self.envs[i].step(action[i]) for i in id] + obs, rew, done, info = map(np.stack, zip(*result)) + return obs, rew, done, info def seed(self, seed: Optional[Union[int, List[int]]] = None) -> List[int]: if np.isscalar(seed): @@ -241,33 +241,30 @@ def __getattr__(self, key): p.send(['getattr', key]) return [p.recv() for p in self.parent_remote] - def step(self, action: np.ndarray + def step(self, + action: np.ndarray, + id: Optional[Union[int, List[int]]] = None ) -> Tuple[np.ndarray, np.ndarray, np.ndarray, np.ndarray]: - assert len(action) == self.env_num - for p, a in zip(self.parent_remote, action): - p.send(['step', a]) - result = [p.recv() for p in self.parent_remote] - self._obs, self._rew, self._done, self._info = zip(*result) - self._obs = np.stack(self._obs) - self._rew = np.stack(self._rew) - self._done = np.stack(self._done) - self._info = np.stack(self._info) - return self._obs, self._rew, self._done, self._info + if id is None: + id = range(self.env_num) + elif np.isscalar(id): + id = [id] + assert len(action) == len(id) + for i, j in enumerate(id): + self.parent_remote[j].send(['step', action[i]]) + result = [self.parent_remote[i].recv() for i in id] + obs, rew, done, info = map(np.stack, zip(*result)) + return obs, rew, done, info def reset(self, id: Optional[Union[int, List[int]]] = None) -> np.ndarray: if id is None: - for p in self.parent_remote: - p.send(['reset', None]) - self._obs = np.stack([p.recv() for p in self.parent_remote]) - return self._obs - else: - if np.isscalar(id): - id = [id] - for i in id: - self.parent_remote[i].send(['reset', None]) - for i in id: - self._obs[i] = self.parent_remote[i].recv() - return self._obs + id = range(self.env_num) + elif np.isscalar(id): + id = [id] + for i in id: + self.parent_remote[i].send(['reset', None]) + obs = np.stack([self.parent_remote[i].recv() for i in id]) + return obs def seed(self, seed: Optional[Union[int, List[int]]] = None) -> List[int]: if np.isscalar(seed): @@ -320,32 +317,29 @@ def __init__(self, env_fns: List[Callable[[], gym.Env]]) -> None: for e in env_fns] def __getattr__(self, key): - return ray.get([e.getattr.remote(key) for e in self.envs]) + return ray.get([e.__getattr__.remote(key) for e in self.envs]) - def step(self, action: np.ndarray + def step(self, + action: np.ndarray, + id: Optional[Union[int, List[int]]] = None ) -> Tuple[np.ndarray, np.ndarray, np.ndarray, np.ndarray]: - assert len(action) == self.env_num - result = ray.get([e.step.remote(a) for e, a in zip(self.envs, action)]) - self._obs, self._rew, self._done, self._info = zip(*result) - self._obs = np.stack(self._obs) - self._rew = np.stack(self._rew) - self._done = np.stack(self._done) - self._info = np.stack(self._info) - return self._obs, self._rew, self._done, self._info + if id is None: + id = range(self.env_num) + elif np.isscalar(id): + id = [id] + assert len(action) == len(id) + result = ray.get([self.envs[j].step.remote(action[i]) + for i, j in enumerate(id)]) + obs, rew, done, info = map(np.stack, zip(*result)) + return obs, rew, done, info def reset(self, id: Optional[Union[int, List[int]]] = None) -> np.ndarray: if id is None: - result_obj = [e.reset.remote() for e in self.envs] - self._obs = np.stack(ray.get(result_obj)) - else: - result_obj = [] - if np.isscalar(id): - id = [id] - for i in id: - result_obj.append(self.envs[i].reset.remote()) - for _, i in enumerate(id): - self._obs[i] = ray.get(result_obj[_]) - return self._obs + id = range(self.env_num) + elif np.isscalar(id): + id = [id] + obs = np.stack(ray.get([self.envs[i].reset.remote() for i in id])) + return obs def seed(self, seed: Optional[Union[int, List[int]]] = None) -> List[int]: if not hasattr(self.envs[0], 'seed'): From f8ad6df29052c6f480d25da456dcdca7f52e4c6a Mon Sep 17 00:00:00 2001 From: youkaichao Date: Thu, 16 Jul 2020 19:36:32 +0800 Subject: [PATCH 06/22] Standardized behavior of Batch.cat and misc code refactor (#137) * code refactor; remove unused kwargs; add reward_normalization for dqn * bugfix for __setitem__ with torch.Tensor; add Batch.condense * minor fix * support cat with empty Batch * remove the dependency of is_empty on len; specify the semantic of empty Batch by test cases * support stack with empty Batch * remove condense * refactor code to reflect the shared / partial / reserved categories of keys * add is_empty(recursive=False) * doc fix * docfix and bugfix for _is_batch_set * add doc for key reservation * bugfix for algebra operators * fix cat with lens hint * code refactor * bugfix for storing None * use ValueError instead of exception * hide lens away from users * add comment for __cat * move the computation of the initial value of lens in cat_ itself. * change the place of doc string * doc fix for Batch doc string * change recursive to recurse * doc string fix * minor fix for batch doc --- test/base/test_batch.py | 71 +++++++- tianshou/data/batch.py | 261 +++++++++++++++++++++++------- tianshou/data/collector.py | 2 +- tianshou/policy/base.py | 19 ++- tianshou/policy/imitation/base.py | 2 +- tianshou/policy/modelfree/dqn.py | 7 +- tianshou/trainer/offpolicy.py | 1 - tianshou/trainer/onpolicy.py | 1 - 8 files changed, 290 insertions(+), 74 deletions(-) diff --git a/test/base/test_batch.py b/test/base/test_batch.py index 7e287e269..4ba5d8d5a 100644 --- a/test/base/test_batch.py +++ b/test/base/test_batch.py @@ -10,7 +10,12 @@ def test_batch(): assert list(Batch()) == [] assert Batch().is_empty() - assert Batch(b={'c': {}}).is_empty() + assert not Batch(b={'c': {}}).is_empty() + assert Batch(b={'c': {}}).is_empty(recurse=True) + assert not Batch(a=Batch(), b=Batch(c=Batch())).is_empty() + assert Batch(a=Batch(), b=Batch(c=Batch())).is_empty(recurse=True) + assert not Batch(d=1).is_empty() + assert not Batch(a=np.float64(1.0)).is_empty() assert len(Batch(a=[1, 2, 3], b={'c': {}})) == 3 assert not Batch(a=[1, 2, 3]).is_empty() b = Batch() @@ -109,6 +114,11 @@ def test_batch(): assert isinstance(batch5.b, Batch) assert np.allclose(batch5.b.index, [1]) + # None is a valid object and can be stored in Batch + a = Batch.stack([Batch(a=None), Batch(b=None)]) + assert a.a[0] is None and a.a[1] is None + assert a.b[0] is None and a.b[1] is None + def test_batch_over_batch(): batch = Batch(a=[3, 4, 5], b=[4, 5, 6]) @@ -162,6 +172,20 @@ def test_batch_cat_and_stack(): assert isinstance(b12_cat_in.a.d.e, np.ndarray) assert b12_cat_in.a.d.e.ndim == 1 + a = Batch(a=Batch(a=np.random.randn(3, 4))) + assert np.allclose( + np.concatenate([a.a.a, a.a.a]), + Batch.cat([a, Batch(a=Batch(a=Batch())), a]).a.a) + + # test cat with lens infer + a = Batch(a=Batch(a=np.random.randn(3, 4)), b=np.random.randn(3, 4)) + b = Batch(a=Batch(a=Batch(), t=Batch()), b=np.random.randn(3, 4)) + ans = Batch.cat([a, b, a]) + assert np.allclose(ans.a.a, + np.concatenate([a.a.a, np.zeros((3, 4)), a.a.a])) + assert np.allclose(ans.b, np.concatenate([a.b, b.b, a.b])) + assert ans.a.t.is_empty() + b12_stack = Batch.stack((b1, b2)) assert isinstance(b12_stack.a.d.e, np.ndarray) assert b12_stack.a.d.e.ndim == 2 @@ -177,6 +201,32 @@ def test_batch_cat_and_stack(): assert torch.allclose(test.b, ans.b) assert np.allclose(test.common.c, ans.common.c) + # test cat with reserved keys (values are Batch()) + b1 = Batch(a=np.random.rand(3, 4), common=Batch(c=np.random.rand(3, 5))) + b2 = Batch(a=Batch(), + b=torch.rand(4, 3), + common=Batch(c=np.random.rand(4, 5))) + test = Batch.cat([b1, b2]) + ans = Batch(a=np.concatenate([b1.a, np.zeros((4, 4))]), + b=torch.cat([torch.zeros(3, 3), b2.b]), + common=Batch(c=np.concatenate([b1.common.c, b2.common.c]))) + assert np.allclose(test.a, ans.a) + assert torch.allclose(test.b, ans.b) + assert np.allclose(test.common.c, ans.common.c) + + # test cat with all reserved keys (values are Batch()) + b1 = Batch(a=Batch(), common=Batch(c=np.random.rand(3, 5))) + b2 = Batch(a=Batch(), + b=torch.rand(4, 3), + common=Batch(c=np.random.rand(4, 5))) + test = Batch.cat([b1, b2]) + ans = Batch(a=Batch(), + b=torch.cat([torch.zeros(3, 3), b2.b]), + common=Batch(c=np.concatenate([b1.common.c, b2.common.c]))) + assert ans.a.is_empty() + assert torch.allclose(test.b, ans.b) + assert np.allclose(test.common.c, ans.common.c) + # test stack with compatible keys b3 = Batch(a=np.zeros((3, 4)), b=torch.ones((2, 5)), @@ -205,6 +255,25 @@ def test_batch_cat_and_stack(): assert np.allclose(d.c, [3, 0, 7]) assert np.allclose(d.d, [0, 6, 9]) + # test stack with empty Batch() + assert Batch.stack([Batch(), Batch(), Batch()]).is_empty() + a = Batch(a=1, b=2, c=3, d=Batch(), e=Batch()) + b = Batch(a=4, b=5, d=6, e=Batch()) + c = Batch(c=7, b=6, d=9, e=Batch()) + d = Batch.stack([a, b, c]) + assert np.allclose(d.a, [1, 4, 0]) + assert np.allclose(d.b, [2, 5, 6]) + assert np.allclose(d.c, [3, 0, 7]) + assert np.allclose(d.d, [0, 6, 9]) + assert d.e.is_empty() + b1 = Batch(a=Batch(), common=Batch(c=np.random.rand(4, 5))) + b2 = Batch(b=Batch(), common=Batch(c=np.random.rand(4, 5))) + test = Batch.stack([b1, b2], axis=-1) + assert test.a.is_empty() + assert test.b.is_empty() + assert np.allclose(test.common.c, + np.stack([b1.common.c, b2.common.c], axis=-1)) + b1 = Batch(a=np.random.rand(4, 4), common=Batch(c=np.random.rand(4, 5))) b2 = Batch(b=torch.rand(4, 6), common=Batch(c=np.random.rand(4, 5))) test = Batch.stack([b1, b2]) diff --git a/tianshou/data/batch.py b/tianshou/data/batch.py index 23d859999..7eaca1144 100644 --- a/tianshou/data/batch.py +++ b/tianshou/data/batch.py @@ -14,11 +14,17 @@ def _is_batch_set(data: Any) -> bool: + # Batch set is a list/tuple of dict/Batch objects, + # or 1-D np.ndarray with np.object type, + # where each element is a dict/Batch object if isinstance(data, (list, tuple)): if len(data) > 0 and all(isinstance(e, (dict, Batch)) for e in data): return True elif isinstance(data, np.ndarray) and data.dtype == np.object: - if all(isinstance(e, (dict, Batch)) for e in data.tolist()): + # ``for e in data`` will just unpack the first dimension, + # but data.tolist() will flatten ndarray of objects + # so do not use data.tolist() + if all(isinstance(e, (dict, Batch)) for e in data): return True return False @@ -39,7 +45,7 @@ def _create_value(inst: Any, size: int, stack=True) -> Union[ # here we do not consider scalar types, following the # behavior of numpy which does not support concatenation # of zero-dimensional arrays (scalars) - raise TypeError(f"cannot cat {inst} with which is scalar") + raise TypeError(f"cannot concatenate with {inst} which is scalar") if has_shape: shape = (size, *inst.shape) if stack else (size, *inst.shape[1:]) if isinstance(inst, np.ndarray): @@ -95,9 +101,9 @@ class Batch: In short, you can define a :class:`Batch` with any key-value pair. - For Numpy arrays, only data types with ``np.object``, bool, and number - are supported. For strings or other data types, however, they can be - held in ``np.object`` arrays. + For Numpy arrays, only data types with ``np.object``, bool, and number are + supported. For strings or other data types, however, they can be held in + ``np.object`` arrays. The current implementation of Tianshou typically use 7 reserved keys in :class:`~tianshou.data.Batch`: @@ -108,9 +114,39 @@ class Batch: * ``done`` the done flag of step :math:`t` ; * ``obs_next`` the observation of step :math:`t+1` ; * ``info`` the info of step :math:`t` (in ``gym.Env``, the ``env.step()``\ - function returns 4 arguments, and the last one is ``info``); + function returns 4 arguments, and the last one is ``info``); * ``policy`` the data computed by policy in step :math:`t`; + For convenience, :class:`~tianshou.data.Batch` supports the mechanism of + key reservation: one can specify a key without any value, which serves as + a placeholder for the Batch object. For example, you know there will be a + key named ``obs``, but do not know the value until the simulator runs. Then + you can reserve the key ``obs``. This is done by setting the value to + ``Batch()``. + + For a Batch object, we call it "incomplete" if: (i) it is ``Batch()``; (ii) + it has reserved keys; (iii) any of its sub-Batch is incomplete. Otherwise, + the Batch object is finalized. + + Key reservation mechanism is convenient, but also causes some problem in + aggregation operators like ``stack`` or ``cat`` of Batch objects. We say + that Batch objects are compatible for aggregation with three cases: + + 1. finalized Batch objects are compatible if and only if their exists a \ + way to extend keys so that their structures are exactly the same. + + 2. incomplete Batch objects and other finalized objects are compatible if \ + their exists a way to extend keys so that incomplete Batch objects can \ + have the same structure as finalized objects. + + 3. incomplete Batch objects themselevs are compatible if their exists a \ + way to extend keys so that their structure can be the same. + + In a word, incomplete Batch objects have a set of possible structures + in the future, but finalized Batch object only have a finalized structure. + Batch objects are compatible if and only if they share at least one + commonly possible structure by extending keys. + :class:`~tianshou.data.Batch` object can be initialized by a wide variety of arguments, ranging from the key/value pairs or dictionary, to list and Numpy arrays of :class:`dict` or Batch instances where each element is @@ -126,8 +162,8 @@ class Batch: ) :class:`~tianshou.data.Batch` has the same API as a native Python - :class:`dict`. In this regard, one can access stored data using string - key, or iterate over stored data: + :class:`dict`. In this regard, one can access stored data using string key, + or iterate over stored data: :: >>> data = Batch(a=4, b=[5, 5]) @@ -153,7 +189,7 @@ class Batch: ) >>> for sample in data: >>> print(sample.a) - [0., 2.] + [0. 2.] >>> print(data.shape) [1, 2] @@ -341,7 +377,7 @@ def __getitem__(self, index: Union[ if len(batch_items) > 0: b = Batch() for k, v in batch_items: - if isinstance(v, Batch) and len(v.__dict__) == 0: + if isinstance(v, Batch) and v.is_empty(): b.__dict__[k] = Batch() else: b.__dict__[k] = v[index] @@ -376,8 +412,9 @@ def __setitem__(self, index: Union[ except KeyError: if isinstance(val, Batch): self.__dict__[key][index] = Batch() - elif isinstance(val, np.ndarray) and \ - issubclass(val.dtype.type, (np.bool_, np.number)): + elif isinstance(val, torch.Tensor) or \ + (isinstance(val, np.ndarray) and + issubclass(val.dtype.type, (np.bool_, np.number))): self.__dict__[key][index] = 0 else: self.__dict__[key][index] = None @@ -389,14 +426,14 @@ def __iadd__(self, other: Union['Batch', Number, np.number]): for (k, r), v in zip(self.__dict__.items(), other.__dict__.values()): # TODO are keys consistent? - if r is None: + if isinstance(r, Batch) and r.is_empty(): continue else: self.__dict__[k] += v return self elif isinstance(other, (Number, np.number)): for k, r in self.items(): - if r is None: + if isinstance(r, Batch) and r.is_empty(): continue else: self.__dict__[k] += other @@ -413,7 +450,9 @@ def __imul__(self, val: Union[Number, np.number]): """Algebraic multiplication with a scalar value in-place.""" assert isinstance(val, (Number, np.number)), \ "Only multiplication by a number is supported." - for k in self.__dict__.keys(): + for k, r in self.__dict__.items(): + if isinstance(r, Batch) and r.is_empty(): + continue self.__dict__[k] *= val return self @@ -425,7 +464,9 @@ def __itruediv__(self, val: Union[Number, np.number]): """Algebraic division with a scalar value in-place.""" assert isinstance(val, (Number, np.number)), \ "Only division by a number is supported." - for k in self.__dict__.keys(): + for k, r in self.__dict__.items(): + if isinstance(r, Batch) and r.is_empty(): + continue self.__dict__[k] /= val return self @@ -501,50 +542,106 @@ def to_torch(self, dtype: Optional[torch.dtype] = None, elif isinstance(v, Batch): v.to_torch(dtype, device) - def cat_(self, - batches: Union['Batch', List[Union[dict, 'Batch']]]) -> None: - """Concatenate a list of (or one) :class:`~tianshou.data.Batch` objects - into current batch. + def __cat(self, + batches: Union['Batch', List[Union[dict, 'Batch']]], + lens: List[int]) -> None: + """:: + + >>> a = Batch(a=np.random.randn(3, 4)) + >>> x = Batch(a=a, b=np.random.randn(4, 4)) + >>> y = Batch(a=Batch(a=Batch()), b=np.random.randn(4, 4)) + + If we want to concatenate x and y, we want to pad y.a.a with zeros. + Without ``lens`` as a hint, when we concatenate x.a and y.a, we would + not be able to know how to pad y.a. So ``Batch.cat_`` should compute + the ``lens`` to give ``Batch.__cat`` a hint. + :: + + >>> ans = Batch.cat([x, y]) + >>> # this is equivalent to the following line + >>> ans = Batch(); ans.__cat([x, y], lens=[3, 4]) + >>> # this lens is equal to [len(a), len(b)] """ - if isinstance(batches, Batch): - batches = [batches] - if len(batches) == 0: - return - batches = [x if isinstance(x, Batch) else Batch(x) for x in batches] - if len(self.__dict__) > 0: - batches = [self] + list(batches) # partial keys will be padded by zeros # with the shape of [len, rest_shape] - lens = [len(x) for x in batches] sum_lens = [0] for x in lens: sum_lens.append(sum_lens[-1] + x) - keys_map = list(map(lambda e: set(e.keys()), batches)) + # collect non-empty keys + keys_map = [ + set(k for k, v in batch.items() + if not (isinstance(v, Batch) and v.is_empty())) + for batch in batches] keys_shared = set.intersection(*keys_map) values_shared = [[e[k] for e in batches] for k in keys_shared] _assert_type_keys(keys_shared) for k, v in zip(keys_shared, values_shared): if all(isinstance(e, (dict, Batch)) for e in v): - self.__dict__[k] = Batch.cat(v) + batch_holder = Batch() + batch_holder.__cat(v, lens=lens) + self.__dict__[k] = batch_holder elif all(isinstance(e, torch.Tensor) for e in v): self.__dict__[k] = torch.cat(v) else: + # cat Batch(a=np.zeros((3, 4))) and Batch(a=Batch(b=Batch())) + # will fail here v = np.concatenate(v) if not issubclass(v.dtype.type, (np.bool_, np.number)): v = v.astype(np.object) self.__dict__[k] = v - keys_partial = set.union(*keys_map) - keys_shared - _assert_type_keys(keys_partial) + keys_total = set.union(*[set(b.keys()) for b in batches]) + keys_reserve_or_partial = set.difference(keys_total, keys_shared) + _assert_type_keys(keys_reserve_or_partial) + # keys that are reserved in all batches + keys_reserve = set.difference(keys_total, set.union(*keys_map)) + # keys that occur only in some batches, but not all + keys_partial = keys_reserve_or_partial.difference(keys_reserve) + for k in keys_reserve: + # reserved keys + self.__dict__[k] = Batch() for k in keys_partial: for i, e in enumerate(batches): - val = e.get(k, None) - if val is not None: - try: - self.__dict__[k][sum_lens[i]:sum_lens[i + 1]] = val - except KeyError: - self.__dict__[k] = \ - _create_value(val, sum_lens[-1], stack=False) - self.__dict__[k][sum_lens[i]:sum_lens[i + 1]] = val + if k not in e.__dict__: + continue + val = e.get(k) + if isinstance(val, Batch) and val.is_empty(): + continue + try: + self.__dict__[k][sum_lens[i]:sum_lens[i + 1]] = val + except KeyError: + self.__dict__[k] = \ + _create_value(val, sum_lens[-1], stack=False) + self.__dict__[k][sum_lens[i]:sum_lens[i + 1]] = val + + def cat_(self, + batches: Union['Batch', List[Union[dict, 'Batch']]]) -> None: + """Concatenate a list of (or one) :class:`~tianshou.data.Batch` objects + into current batch. + """ + if isinstance(batches, Batch): + batches = [batches] + if len(batches) == 0: + return + batches = [x if isinstance(x, Batch) else Batch(x) for x in batches] + + # x.is_empty() means that x is Batch() and should be ignored + batches = [x for x in batches if not x.is_empty()] + try: + # x.is_empty(recurse=True) here means x is a nested empty batch + # like Batch(a=Batch), and we have to treat it as length zero and + # keep it. + lens = [0 if x.is_empty(recurse=True) else len(x) + for x in batches] + except TypeError as e: + e2 = ValueError( + f'Batch.cat_ meets an exception. Maybe because there is ' + f'any scalar in {batches} but Batch.cat_ does not support' + f'the concatenation of scalar.') + raise Exception([e, e2]) + if not self.is_empty(): + batches = [self] + list(batches) + lens = [0 if self.is_empty(recurse=True) else len(self)] + lens + return self.__cat(batches, lens) @staticmethod def cat(batches: List[Union[dict, 'Batch']]) -> 'Batch': @@ -577,9 +674,13 @@ def stack_(self, if len(batches) == 0: return batches = [x if isinstance(x, Batch) else Batch(x) for x in batches] - if len(self.__dict__) > 0: + if not self.is_empty(): batches = [self] + list(batches) - keys_map = list(map(lambda e: set(e.keys()), batches)) + # collect non-empty keys + keys_map = [ + set(k for k, v in batch.items() + if not (isinstance(v, Batch) and v.is_empty())) + for batch in batches] keys_shared = set.intersection(*keys_map) values_shared = [[e[k] for e in batches] for k in keys_shared] _assert_type_keys(keys_shared) @@ -593,22 +694,35 @@ def stack_(self, if not issubclass(v.dtype.type, (np.bool_, np.number)): v = v.astype(np.object) self.__dict__[k] = v - keys_partial = set.difference(set.union(*keys_map), keys_shared) + # all the keys + keys_total = set.union(*[set(b.keys()) for b in batches]) + # keys that are reserved in all batches + keys_reserve = set.difference(keys_total, set.union(*keys_map)) + # keys that are either partial or reserved + keys_reserve_or_partial = set.difference(keys_total, keys_shared) + # keys that occur only in some batches, but not all + keys_partial = keys_reserve_or_partial.difference(keys_reserve) if keys_partial and axis != 0: raise ValueError( f"Stack of Batch with non-shared keys {keys_partial} " f"is only supported with axis=0, but got axis={axis}!") - _assert_type_keys(keys_partial) + _assert_type_keys(keys_reserve_or_partial) + for k in keys_reserve: + # reserved keys + self.__dict__[k] = Batch() for k in keys_partial: for i, e in enumerate(batches): - val = e.get(k, None) - if val is not None: - try: - self.__dict__[k][i] = val - except KeyError: - self.__dict__[k] = \ - _create_value(val, len(batches)) - self.__dict__[k][i] = val + if k not in e.__dict__: + continue + val = e.get(k) + if isinstance(val, Batch) and val.is_empty(): + continue + try: + self.__dict__[k][i] = val + except KeyError: + self.__dict__[k] = \ + _create_value(val, len(batches)) + self.__dict__[k][i] = val @staticmethod def stack(batches: List[Union[dict, 'Batch']], axis: int = 0) -> 'Batch': @@ -691,26 +805,53 @@ def __len__(self) -> int: """Return len(self).""" r = [] for v in self.__dict__.values(): - if isinstance(v, Batch) and v.is_empty(): + if isinstance(v, Batch) and v.is_empty(recurse=True): continue elif hasattr(v, '__len__') and (not isinstance( v, (np.ndarray, torch.Tensor)) or v.ndim > 0): r.append(len(v)) else: - raise TypeError("Object of type 'Batch' has no len()") + raise TypeError(f"Object {v} in {self} has no len()") if len(r) == 0: - raise TypeError("Object of type 'Batch' has no len()") + raise TypeError(f"Object {self} has no len()") return min(r) - def is_empty(self): - return not any( - not x.is_empty() if isinstance(x, Batch) - else hasattr(x, '__len__') and len(x) > 0 for x in self.values()) + def is_empty(self, recurse: bool = False): + """ + Test if a Batch is empty. If ``recurse=True``, it further tests the + values of the object; else it only tests the existence of any key. + + ``b.is_empty(recurse=True)`` is mainly used to distinguish + ``Batch(a=Batch(a=Batch()))`` and ``Batch(a=1)``. They both raise + exceptions when applied to ``len()``, but the former can be used in + ``cat``, while the latter is a scalar and cannot be used in ``cat``. + + Another usage is in ``__len__``, where we have to skip checking the + length of recursely empty Batch. + :: + + >>> Batch().is_empty() + True + >>> Batch(a=Batch(), b=Batch(c=Batch())).is_empty() + False + >>> Batch(a=Batch(), b=Batch(c=Batch())).is_empty(recurse=True) + True + >>> Batch(d=1).is_empty() + False + >>> Batch(a=np.float64(1.0)).is_empty() + False + """ + if len(self.__dict__) == 0: + return True + if not recurse: + return False + return all(False if not isinstance(x, Batch) + else x.is_empty(recurse=True) for x in self.values()) @property def shape(self) -> List[int]: """Return self.shape.""" - if len(self.__dict__.keys()) == 0: + if self.is_empty(): return [] else: data_shape = [] diff --git a/tianshou/data/collector.py b/tianshou/data/collector.py index 2bacf14f0..98c62daa2 100644 --- a/tianshou/data/collector.py +++ b/tianshou/data/collector.py @@ -98,7 +98,7 @@ def __init__(self, stat_size: Optional[int] = 100, action_noise: Optional[BaseNoise] = None, reward_metric: Optional[Callable[[np.ndarray], float]] = None, - **kwargs) -> None: + ) -> None: super().__init__() self.env = env self.env_num = 1 diff --git a/tianshou/policy/base.py b/tianshou/policy/base.py index 335d7e86a..e75374228 100644 --- a/tianshou/policy/base.py +++ b/tianshou/policy/base.py @@ -108,7 +108,8 @@ def compute_episodic_return( batch: Batch, v_s_: Optional[Union[np.ndarray, torch.Tensor]] = None, gamma: float = 0.99, - gae_lambda: float = 0.95) -> Batch: + gae_lambda: float = 0.95, + ) -> Batch: """Compute returns over given full-length episodes, including the implementation of Generalized Advantage Estimator (arXiv:1506.02438). @@ -124,18 +125,19 @@ def compute_episodic_return( :return: a Batch. The result will be stored in batch.returns. """ + rew = batch.rew if v_s_ is None: - v_s_ = batch.rew * 0. + v_s_ = rew * 0. else: if not isinstance(v_s_, np.ndarray): v_s_ = np.array(v_s_, np.float) - v_s_ = v_s_.reshape(batch.rew.shape) + v_s_ = v_s_.reshape(rew.shape) returns = np.roll(v_s_, 1, axis=0) m = (1. - batch.done) * gamma - delta = batch.rew + v_s_ * m - returns + delta = rew + v_s_ * m - returns m *= gae_lambda gae = 0. - for i in range(len(batch.rew) - 1, -1, -1): + for i in range(len(rew) - 1, -1, -1): gae = delta[i] + m[i] * gae returns[i] += gae batch.returns = returns @@ -149,7 +151,7 @@ def compute_nstep_return( target_q_fn: Callable[[ReplayBuffer, np.ndarray], torch.Tensor], gamma: float = 0.99, n_step: int = 1, - rew_norm: bool = False + rew_norm: bool = False, ) -> np.ndarray: r"""Compute n-step return for Q-learning targets: @@ -180,8 +182,9 @@ def compute_nstep_return( :return: a Batch. The result will be stored in batch.returns as a torch.Tensor with shape (bsz, ). """ + rew = buffer.rew if rew_norm: - bfr = buffer.rew[:min(len(buffer), 1000)] # avoid large buffer + bfr = rew[:min(len(buffer), 1000)] # avoid large buffer mean, std = bfr.mean(), bfr.std() if np.isclose(std, 0): mean, std = 0, 1 @@ -189,7 +192,7 @@ def compute_nstep_return( mean, std = 0, 1 returns = np.zeros_like(indice) gammas = np.zeros_like(indice) + n_step - done, rew, buf_len = buffer.done, buffer.rew, len(buffer) + done, buf_len = buffer.done, len(buffer) for n in range(n_step - 1, -1, -1): now = (indice + n) % buf_len gammas[done[now] > 0] = n diff --git a/tianshou/policy/imitation/base.py b/tianshou/policy/imitation/base.py index 57bdba933..c01e45fd0 100644 --- a/tianshou/policy/imitation/base.py +++ b/tianshou/policy/imitation/base.py @@ -23,7 +23,7 @@ class ImitationPolicy(BasePolicy): """ def __init__(self, model: torch.nn.Module, optim: torch.optim.Optimizer, - mode: str = 'continuous', **kwargs) -> None: + mode: str = 'continuous') -> None: super().__init__() self.model = model self.optim = optim diff --git a/tianshou/policy/modelfree/dqn.py b/tianshou/policy/modelfree/dqn.py index c34ba4e04..eb6f29878 100644 --- a/tianshou/policy/modelfree/dqn.py +++ b/tianshou/policy/modelfree/dqn.py @@ -21,6 +21,8 @@ class DQNPolicy(BasePolicy): ahead. :param int target_update_freq: the target network update frequency (``0`` if you do not use the target network). + :param bool reward_normalization: normalize the reward to Normal(0, 1), + defaults to ``False``. .. seealso:: @@ -34,6 +36,7 @@ def __init__(self, discount_factor: float = 0.99, estimation_step: int = 1, target_update_freq: Optional[int] = 0, + reward_normalization: bool = False, **kwargs) -> None: super().__init__(**kwargs) self.model = model @@ -49,6 +52,7 @@ def __init__(self, if self._target: self.model_old = deepcopy(self.model) self.model_old.eval() + self._rew_norm = reward_normalization def set_eps(self, eps: float) -> None: """Set the eps for epsilon-greedy exploration.""" @@ -94,7 +98,8 @@ def process_fn(self, batch: Batch, buffer: ReplayBuffer, to :math:`Q_{new}`. """ batch = self.compute_nstep_return( - batch, buffer, indice, self._target_q, self._gamma, self._n_step) + batch, buffer, indice, self._target_q, + self._gamma, self._n_step, self._rew_norm) if isinstance(buffer, PrioritizedReplayBuffer): batch.update_weight = buffer.update_weight batch.indice = indice diff --git a/tianshou/trainer/offpolicy.py b/tianshou/trainer/offpolicy.py index 1e1272157..5cecd0570 100644 --- a/tianshou/trainer/offpolicy.py +++ b/tianshou/trainer/offpolicy.py @@ -27,7 +27,6 @@ def offpolicy_trainer( writer: Optional[SummaryWriter] = None, log_interval: int = 1, verbose: bool = True, - **kwargs ) -> Dict[str, Union[float, str]]: """A wrapper for off-policy trainer procedure. diff --git a/tianshou/trainer/onpolicy.py b/tianshou/trainer/onpolicy.py index e3849fe88..5f7ae7694 100644 --- a/tianshou/trainer/onpolicy.py +++ b/tianshou/trainer/onpolicy.py @@ -27,7 +27,6 @@ def onpolicy_trainer( writer: Optional[SummaryWriter] = None, log_interval: int = 1, verbose: bool = True, - **kwargs ) -> Dict[str, Union[float, str]]: """A wrapper for on-policy trainer procedure. From fa542f818f3e8676a88f009da82232e62698ba7d Mon Sep 17 00:00:00 2001 From: youkaichao Date: Sun, 19 Jul 2020 15:20:35 +0800 Subject: [PATCH 07/22] write tutorials to specify the standard of Batch (#142) * add doc for len exceptions * doc move; unify is_scalar_value function * remove some issubclass check * bugfix for shape of Batch(a=1) * keep moving doc * keep writing batch tutorial * draft version of Batch tutorial done * improving doc * keep improving doc * batch tutorial done * rename _is_number * rename _is_scalar * shape property do not raise exception * restore some doc string * grammarly [ci skip] * grammarly + fix warning of building docs * polish docs * trim and re-arrange batch tutorial * go straight to the point * minor fix for batch doc * add shape / len in basic usage * keep improving tutorial * unify _to_array_with_correct_type to remove duplicate code * delegate type convertion to Batch.__init__ * further delegate type convertion to Batch.__init__ * bugfix for setattr * add a _parse_value function * remove dummy function call * polish docs Co-authored-by: Trinkle23897 <463003665@qq.com> --- docs/_static/images/aggregation.png | Bin 0 -> 213239 bytes docs/_static/images/batch_reserve.png | Bin 0 -> 75769 bytes docs/_static/images/batch_tree.png | Bin 0 -> 78857 bytes docs/index.rst | 1 + docs/tutorials/batch.rst | 491 ++++++++++++++++++++++++++ docs/tutorials/concepts.rst | 42 ++- test/base/test_batch.py | 1 + tianshou/data/batch.py | 402 ++++++--------------- tianshou/data/buffer.py | 22 +- 9 files changed, 657 insertions(+), 302 deletions(-) create mode 100644 docs/_static/images/aggregation.png create mode 100644 docs/_static/images/batch_reserve.png create mode 100644 docs/_static/images/batch_tree.png create mode 100644 docs/tutorials/batch.rst diff --git a/docs/_static/images/aggregation.png b/docs/_static/images/aggregation.png new file mode 100644 index 0000000000000000000000000000000000000000..dbcd9b33d5b619308bbc079005e8a5574d5c0577 GIT binary patch literal 213239 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 z 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

XehC{w_zRw}ZOcs=IVK7;$z2pS$8 zc4S7d7_^=DU5s6eRT&Mr9oz6BQuwkft0NLW0naQyEGy2DSH)ZB#jJ`mQaYm9LDEkJ9$k;8PCteM z3N2b#JS`N%sP{c$l&=HDze$boVD~n`QT9(g=kNgZf?AI+BE|{o`Klyv=pls4*vGA% zjNDeRQF-6?@`30YI08W`$CUp=g!vNY$<|hXS)%fK*rjHF*d{aB=LsrymefRdcB6@pOccFqh{+PmOuPO6p`kYVmHYkp+l4L zzW@c9#s~l%TvMQA(@wscXucfECd5=2q9j3_E2TUe%b_2w+~+@UHEBd`Eustc|Er8; z8@Pa;-EInnVjX@z7D9G#W!~_cf9bUepde{GSxamDORI#^B1f zuH8;Lwr$(#*d06R*iJgOZ9CbqZQHihQOEAsy1U=E?yc{B=lon%d#_q^&N0V$#xry@ z1SYfa2K7~^t-Iql&JMU^lY!Kg@lh36lCXEG_O^~45H3^IBuHh}cJpwwYsVFv4Zp#MC44$U*6T+8--qcgfAJe+<%YBIscnw-4I8J0M=!wM~B3)~7 z1ZCvmh%FoqZ;kA&j$Men-r-Y4ed)9r$Z;gNIIkx2=HKF%#C|k5RCCgGxyH+3gu~2T zgF^FSJK-pb>NykET0Dv{)B2_**2!nk!4CG$S2^}!*tZM)dH-yjdB};F11YTO>ZQUQ^~GuiQ?W5zabLx z9#1#E@&3_IiZykq@_&O>QsxR(7RR?+mwlf*#|k~$SuNX2AT(3Un77JJguMA|U$D3C zSXtqeJj>(iNM{u~!{PM70Zoh}B{#43uKANA<3@bjiXbjEfr$^v-qOw_k#`kXbyLgv zbmrQxs-n6OsTD)2>4KqX-JWOc^8RNPe|U!Qfe;^S+pbMRuSQL&>C*Y2abXjb;|s|} z+MA3e_2TnzUV{AB+*W>_!JBbD+H0`L3wskW${Yp>R?1ZtX!GhGOI*Cm<=sZw}YpRG?x zce@_>iWhHxlsolibC$?HD>U(;V!yC<eC@3gr~qA#QjjyYKtzIKQ@3Lm z+qy1*K8u31TTyM;t9g&w_GJH}_=oFRx(RahU|B`3|C6t_)G*)i%BAaXj{8SJx*ma4 z?1*E;Bx*fiTX9eMyPk$a33*=zkM{`(1{Z#*PO;8Y!Z>da9{qDihgyEK z`C4(;U59RVmJcLL@%${FA&l6cXL0JG<4Y&m$V$}RnGfTtH>K1+r}FtSJ`rO-##+MR zY1&Eu6<|{H80G`}t6HaR&7u*4q@x(sj^If!y;?Mm_Gfsr-o5X%FTEpw@5c_#$ew-X zm+;WWst;SE`{g=!be_iMqK3%9KI=I5xb%0k2Q$KHo=kWib~BBHG-;SiV5sPdaWq+u z($&znX~ABn!+6@|C%pV3zopt<=DXcO|Eq7yiD*dMiAM6pmPYx0ePE%X`~ z7n#%m=y>}+P7HG+QeAtAd9jJsQ-vUoYE|AmH5_?2n){?#FDPIGWH^xbf`NOJn*odN z`P}$WdMPX04lfGs@0c|^u<lsWe^!trbW zDjXrHWSkKG<7ThZhm87qD}b|u(EfL)oC#fwh3dI!SOJ4F)?F69bE;A7a-0{w@Jv$; zF(i=EZj{F!TwZe?07+|gb}1}<8$AJ=8ZW$hCC(966?75#6U2!}t)Wa*_+%C436q^= z=GNSIZ4a4>PA5~-KlxiLC_(x646oM}rQ*#~oEYArU#o zqNw7K2+JS18j?PVih&zQGS#`A?Jnx!B4-A=0eVx4EVg$Ko=N#CcrzRI$Vx(w_Y}AF z*0ZvFN~=Mi8+Q|6Ad3c3&7Ug+)_Ub@yT4D(**hn1Gk#uXCB#=+l8CHLMz)v;w5~J4 zjs=r|!Vr$H7_n>db(^s9x4RXN#Q$XeH67TBM7Zm;&-?j;>W@D`@uq0;1D@1GC})4t z^S#VUmRkBUUOoq{uvFyxJM1Bio{f|?UJCT0*zZ)66O&;fCqr0wIc+71=m4=E>)+f; znlQ3*OmM960&HIk2nJ&&JDC_vOg;3In*S*E2fdzl_E)(sUL<-y(SYE@DOzFZL^R)v zUXP{C>;9LALH9&lNqn5%&;1K0yoK}cN`LNa zuD6BpfGJ7t_!8J*XFn=<8eY!LR+rgUq#BrQ{Wl=FFb(~I$Eix_f~PP2E?;4CJ&=mn19WXi^6$QaX$rZOX>n2Eu|#y20? zaH69@8fmEX3HkG$bt{>9T2=?lN_Z!IY>aoJl|gCbgV0k_jJC1vPZbMoG5#wep*t(c z0#i=2K*cJIVITu)6@2W`pseuP&*q+=(IZFbsXxj)D;p)T$RD;9q-QDl#3pkUO+n6> zzV6z#qcEn2w9@&mfgR1cf=mq7z{Vh&tUu&i=BB}pK;HRsBaTAdp4}`fa?Ca_XIx!I>@zGq9$WappkR3tHN_lAu`QHYNs zGx_f!mdcy6dAuI*7u`=8>n;Tm~> zJ@4G-EZv&#tw(*hx1N^L%BOZDVo@}&qC*e$d6!!)|7lo`ToH*ts^yHVXe}pd#Ref9 z6DvRV)~iQJY&DkNiGFcF?h%RA45~8og1T}L1?@I`ctkI$r8PrzJ|zu>W*j{us>*L| z6z;JhUB8dIRvQ$F?S|1ajT-B<>wrIH{4o!0d4)3(dFC-(SU~AsA_to1F$;UeM#^YO zqLE*^Ft%fHR@&#ZNI!!mQ3aXfg!TLhSX_iJUcy5Tlj3nA;D=F0<1qNK0`-&Vd0%v2 zh9l;Sm|HK~>4drnakW&0qCe+Z;G_`*ZQXat^(FnTNMRAQF9h3)}L+ zhg8Ei^`-uJmrogR@~pAFE9ibD%K2j*+}j=|2T5LAL={XPUaD2LI)AcJ;Qr5kl+yi zA?(-9)&AgxJRZ_OQ~C2pF7IQwNRA@5cOgT49q;e6=QWGMAGbe`DBpPtz0M#`;E5aR zOps2oC{6T5AY^8L>qd}b37bCo1jOAetZCQ@T4X_-z^nmNI^Mo;70i=>He=g~oR)(U z`S~a^+0)nq0y^%JZq(>EAp3wx#$YkrB)q^f+t`UtxRB$vF6toe^Opf5Cb@5$<;>Bx zVNV8mVUD?VpTG?l^S-iUqvT>JBKYiXfZ%nHWPd2(H z2W7kIarR`Emt5N_t<_b&nk(G)qW+W}qg{UP#5XF>VX->p)?KKlCgZX)f*vHF=_EX~ zF8=+|Az*8N`WhWQg4ushzL)keqoDm{6ptG-SLqelgEGzSjGbY_Pn1I{=o z^XLoKpNp*YYv7kqIP9!F8qhPo-rz{WY9Z&j;3H&|(^*S3x7>_vUPd!0f7OrhRn!6L z-0>Aq)b{u))iX0d-BK7ThAG|?(Y)dOLp>eYg5&7aKLNK{O0m(lgsJjjExV^cp4R<# z_eZ+usai~m<9w2rFkW+3&g0r3>QwH1g#$+^6BZV#ufvQ=u>x#NCGA%3?D<+Gls%V+J!)i~J2RATS`bp0xOftr-)(xM`=0J!dM5 zkp&qyAJQ8fHjny&UHB}GxJOxAsjcqM%`y^9rHj#7#c7wGVN928bv=bWBNxSKvFbuv9F^w48q7tBGs#N}caoZe-< zTy6ca*F0|pysq>MNN?x;>PWNC%C!RYLd(Q08dNuxfWC5Gs_8xBn&HraUffkUH`L(Y z=%sFU?<6ud&Kj`Tn;*NSqA}K4)^uN!Ej)OPj{hHjGA?Ki6hF~H89?e~6trl;CLjt?oKJIvMJ*@S zy$-_K@*DZZfLcO5LgG=4k!lw`qvhM@vzy{Zg1082?j>>;j(3x7LHCS>1c{~y?`y<% z=g?kHd85WFsDx9+gM*0Gc$A|T`Q`l-rOqAy7r(i1f|SshvG7GXTM0bfGt94p zObh2AvWeTfTe=yZxnTmsT@Qxt{6<>TmGIweA5{?gnGq$B6tyGDzR0OI7s)Ak%S`hQH#F0vxI#x zxs)Nem6so`Fy17z{=3fu5{4*NK~qk2{e>xsQyyHQ?!CE`>E4qA;^mHS9^+x%@LRk7 z3-%mio^@S8o|LrIETfq=cjEV=J~ZdF@af`%W~p_N4}JbP?#iM?GX=2vh9H4 zX>B(FCSc8ex_czW0c-0Lrdq_!NV5swT}e%9<|K7cSnUWi3fs_+)4aFy>szlbnM~gm z)LiG0d@V5n|90O*h10dpu65m;&?d&cgp$XU{sezHaIdut*EvD_m4!X5G{FU^)fJG1 zLAt?tP<%FvXAO&r3=E^&pkfdfj7Wh0BF~NnON{Ij+l=#7(GO1wK2NDIxU3N5!*`hs zchA3u9jI|XCoJ2SDY*_cWg|we5H|Cyp0?D#U5|Xe&v?rGRtNPKn>?ltY)pGPZ( z3h(C0WzspzLUYEiT;YvI7|N6?I28hje;lmNzYHVKwBALZ?MJsoNssZuKHezpS0&m& z*U_Ti6KNJNyjSP%yDHus5s(F86!xaqBRAvTU_8ZIsJwcZr(881kGNr6?5%9dFTN`K z4Ryu?_Fn_atf2jyOi%=>T{n@ z_MAta(X6gGMAzz*wWNn>n8Hd$R%E{!Jfn5+VKa)(tlfZuc2#G(cqk|!Q4>t}p5KMu z)=Sqj!A{-;)3A90GaHxAo_V9=Zy|Hv+z?=w zeZz#;Jo7u-?7S075aWb%qWo>&nU{X2b)MH8-e{(5c@1?k+BQBE<(2IQR9?4jrFNhm zg`p{=i)sZmFY^y5#9C>vd`zH*{`O7l{e&8fO}7u9XM;;`>^O1PIKzDDzfFYb9BPc} z2EX^=HGMz#KNzQm*YG{^1?x16MNi#wr1xT`d>5NOF;};ezPhmgHWe0SP)oy@oPyG$|n@M~lGo~_-xM3LEKE3X zjjsNAzAcQ^;BC-scv%<~$-L{%qG?UJZiZljX=I#o>DGqxmpzwCsfjWU^a62xXUfF)y+9<1FeX zV)NF!uk+hfEt*nJ5D0DRE&(92>1)Y#DX(5tFi3_i^uhzF{pH-3dWk#XF5{#L*RBhZ z=tI2AieQmWd2(~vU9%h8+5P$JU#}a8qRV{r~M%byd5k;^G48R0Z(Cq zWnN{@;Tepyc(Bn>Q6QKtuC#vdaa1jfa<{)H)}c{wnAOsf!E{rd;xbRBL6zT)LrE_E zFO#0WUouKt`SyA%JfMt^$HyB$s-WbyVYtASnIVv$wSm86clfZ}nJLQen zq_D_Q5(o9b2{C3eQK1X!jT^YlR7+*D>F{za#W|O5+Y>KpDI!R^WRc_q85Q|-AaxJ8 zYDMPfW_@G8OVE8%&fmOCEiJ=@I?mry<{OVe8dn<4f#i;`4)fA{$&hlP(5-=Ari4+` zTk$V*Xzf1_ey{O=_SW3o<}8;acaU~*?+w0q*Uc#gvgveyL@X&{EjFk^-`;l)krTSD z@YGEw)Iu^+&hCvz$?@<@yr$J-b2yx0E45_CV2_rXZSCmyQ;x7LMSrjr4DpOQFzkv? zpHn(rxHOuH?R9)x>2(z^qk7hNb$Q7<%t!spvw75JM}b)1Wz9k3f3c-D@f_NgL95@b zZ~F=OEQ-9>B^-Ibp-QHsE6>vL4>xMTOfuER`0SSck&IbzLPdLp*G6xvc*SWz5gO;nG9}?RNoGX6hf-M8(orLd6gYerRff+NNyesT6EjwT0>l;&U)FCczMh*I@vZN++i z#Z4*?)aNGAO8=?5mC)D}!+Vpu~ZatB9V89%65IAd954oTT9KeJCEC(W)h=zC)B1Xngl zVwPYlG0l*lQqjY=zF_?O%UGqKS`SvQL~%IxQ+?SBcf9_j#XanmLe)BUmZWTQ1`fU9=VBtH*wjE&O3wg&bA|5xJ4i(o3v0nFHI#7dX7nZ$JOQejR zZzMFn8>J^l*ix`7w3D{!F9vFQ*~dY{aOO>fmz^u8z<4{ee=$;6v@GJXTx_Sd)P+Z* zV~7D?!-cu8Hx1jZvXSSQnCrAn35bC;9rKa2g>HZoqoQ#02+waLlXP2;?cY%`7wv@1fxnS&JZHMBT@HLN6&DF-v|W zm&TxWcShr<6O^??HPaeZd>^7;uP1m}NS#nt+bZi!0R~j|)?ba2IM%i&v@l}@Uvnnw z#ap6;)|H)u$V1LL=THJGYM{M6$C2(Ce(`P};?oh(I?P*F%LVS;%7H!{c~%^^%sn*f zr(DST&#uh!xc_971?vg*eB0}+H1x9l<{j`ukd`5;Ighvm`IIumwYSTxD$yrOAcs!S;fa9QFb_x;K7yK2>f-S@W?<>-7 zS^fafld3}{q9wVonHOe|HDLHh=n1I@g0+ufNDxED2`z`l#K#6}`4fXKL+LoCew}A7 zAb;1c2VVFsb$9D5Hm0#g;WJf3^x5}`bQ*t=OU{cvw~SC;?3;& zuP+TB83u+2kQJu%8_ka+IcGJ4@+%(N*qg*;qsI}RFK7VVST&{lk@sc9%QVAIM+ab6 z10zM1rcB6TH=`=3O5S_9boW38_Q~%UW_j5@vENpGui=Fo5Y36EVm2yK03$V@;)L*U z3dHr1^G(%QxsJtXn!MeHFZntx1eUOyB2HuV6ES)&XiJ~j`3mO%KcIu!?5Qnt_a$#k zT3=xxcqGcrPZK2+1Yjsdg_O_cSeEJwIuctjI36`dPx@n8qHsh()8;YKmMRtQv*_*h|EJW4Kp)*y-!ygnY< zAH6x`yU}P6| zY)EkO{VXEJ$cd!DvHhjH|HI=h)7#}YM_v2cq{%k`3Zy>hA5uXnOwz@9wG~;a+a|Zh z)LgegPl>S@3G`y{CE^WntX1*}Ha@JWx^V|8$^msAC z#{89kY!#Nvqbp0Dwwv|<84`X;TvdjOkf*oU=qiR!imVM|*b}!fEjnT_ zBY#q(;h_=F9w3t9eG8H*RuIRBG)VxRjE}pEx*M?T$L}Uk@mdP4?>wqMP^evW#lKt> ztukyH(JKkS9umFg=`6y}yj7P@=+q*9MZ0lzI!@hj*A01R0p^0hYZVQ45W|h!ZNv(C z!f&7T!w7iR(Fc8I6@sCEGZOizSAqjA?YY@Ldtze|scf|(<3w-~2By-@xTf?sqg^oJ z_{FBBZh}ws-UU_AFb15gUe?V=`-=y!5>=(dXQafu520FklEByZeo?-GO)BGOq_6Tg z4n0tg;Ek{DSm0#Q=Qu z;ah!{Dx#T9%lX|C`63a+w5XH%b6}D16f?p5nHGeq?%JDj>pQNqchMB!T;6;8ft@dq z?lWkKvtXm##@VZ-{ZtcZ{RzlEIarkjB)siux)bDvC1$Iim`)=wl;LP{(D6-8JS19| zR8>L{*u1_=`XjI*LkK`L_v9;AA>l)MA|Yg%|D@er{au}wc~6DnX#jdpA=qG`>8xQ*!##or==^{nR+6LZG84bN7Z0es)dpMlOBnuECV!k;03~;Uy}93s2MAzkw~1> z%_!v1q^Q~nZv+8-r<33Y8RzYc5UgDJs4>2;*$$2Xc0pgY&16KkgC z6``JYI0#f9)1+`}XSug4nPyIOTVg+dX?vX+K#52?nztl`q9%(?)={jiowxi@i~On z;UBx#Z|94?d#8C5i%mdP&G1{&(glxSCn)Ea$=#Gt%mdfu;j9H1|juUWE|X& z3+9rX>4lH4&gj)LZ;)$UQ{(2@Kj+cPcA;qmY6@juV=c+`+Y}D zWosoN<-?L2sJAjpju7HOAexB!og_)U3g)>%SV=~f#jo$zA3FV-io(>%q=+1SFTJle za?1sC3rhT0SQ*gSSw$=aGgCBE4@KRgmEjRZwSz_q5-Qlm_x=Irk{Nt3aj3V{pa8l> z=I@9e5MKvE0sUUZoraHZI)pQIv2s_z0keKzk^M~w$4NQ*YGy zNL_KVW8Z7PFDbhRuWw(IgHyoMz#&F=!`i<7kWupJXly-|bk&5?A1Z>ie7st8R<_Eh zWOZ;rv0{iyDKG@p70-QLjTLS`jps1rtN-)OjFslW)-8R@rYHG<$92XL!odJ&nS+mgvLn3w^}DSaxM2 zR#+*=P%$mh-RfWWbgena)g(4WzBq(S#P9YOYC-i46bYC0g1_hW&-&n zMsnRNLAL(&eFNsT=0c?i(DODV#H6DXsl_?m+YfHLm*WbQBJ5;9yA2N9xKFp?L+^~` z^;F4!WJ$&k_zH^N{|eTB9tcUknCt{}tIfRWrfFg<=UTa5tz3Sel;jJtfws4$p0&gQ zmNXbZ!=M*I))qD($=}INpF2|(A2)B_daW!P%bG78{#JV+NV9J?MOMBeV3vR6@;>w& zPr7ZPlf8vGQ#Fej4Qo;#oN6Uo$rIs0JcHzm%Smo-H`RCoKrf2sdYJxU?@BDrDz*^X zGx~8i-I^3NlZ&Pum)b<&9S&P(<;lteXt`KuIyxx5W9E>3do z?R!UkfpGB(rlY)<%l;*eDTLaTGACfz{1S>)$|As6K{bMFy5`ygoQ~?I-hzxJ=!p7f zz%hAImo>V+m0p@~>xg=zvh@zl0_ey-G5P21sW#0P9k{&kBZatGKc5Q)-_yltGFviD zriYyylvOYiWH*~~6S$nEm?0F$yJCfn#Qg95{O{&oiGpTq6MmZXBw-(=E9r%>Q@!H7 zfsaqPY>FzFC#^@KVr=Rj3mLd9)T!UT{Q~R)Z0ZV1$kFLCgYKu_M^tF3Yht>*G(Dwj z4?Kz@S9TLwohD_ptQyATVN!g;5$xoto#&fYlSV%<^7P7+q!N_G`o@>N22`De`s%6g zFDP$vA_vIrx%^Kxv>)}SMkO^PODouA#NY$Vfr0O7Z<$MvS0piwDlVhkRWfXcN{$Ct zuFoOZC^>Me&mPiEm>WkaXF%azabGp_=v6_Clu!hg*H>w{?=_{FG2D95scyK zwdA6|zyD9~C>QnQxLV2#!Pc=NIxTCc7leKed6bqTv8leCD5>khc#f~PyuM5EcHllJ z%l|L2z#V>z6V#SE)JR7fV5VtemB|KwHb8EZa7JP}@m-i4x{p;UmgTuycR^k{G)Bf* zYmSMN{mhVAY(BQ5NJ`}iHmKm8F$D8o;GlNgKRjPFN^P+4P?{nT=@WMeK9?~zHU(A? zx#@({GOyeJ)V=}d3&xB4+7PIq9}zuNZeCC!V`cc>SBiwasCHZ~uq%LgjhHC)hdKE< z{Kp|*n>2;b=D9xSS0Bk-O)f6P;EWZ|#Yu*A2Ju{kt-O|qY|Na@v{3F=45`8BVuST# zsUr6rT9%G6Bzuf`K4}Lew?_3|#a3Kgkg2!nBF1tObDromx+!ov6S{LFD+dF&ZM<(U~YzO(LFo?C2Ad60IQ z%x$8Sh^*D0drb}dlYH8#IVKQa5~eqQXC2wHQ8FtH(O@t4&51yS_Hy71LmeMxuk%x% z0UlR3%_yyoy%peDH0bXDXw-`OuK$<%_$%&yuRvOL`k2h>hP}}4T2YxBD}9DR5L&KlhyGyBDSlJ@DbmTS3AVpE9gxgj^ zB^-y)kZREx_Iuh+`rgjKWbC)RbR^!=0E+BT$u+ylk4^ukAXuOgz20C%OMmDn=%&p}h3@os zmPJJWu^o(ULxmk9WQxzk2z{?JciTm~dkk{$$tYn)nte%T1X~}WAHs`Y19xc$)L=1Z zy>0rSx)HsS$hOG;k4a_^Oh`FCF!Cp$~wJVddSoj>#;`8Sl4rP`5A zG_Y04hkvRFWmosY5?f??X`!qDmYelL`$UXnF5-vUq$Kp4_I~jw3X>AfG!HY0?Qn<) z7IO@2`Oa#V2Rl-mC}a~6kDq>NI|}EPCIHbkL{^$dDA_7@nF0koy7dD|)<$uMnI4(n zPhjO!4Gf`(C>>{xLk;xF1P375=ma=Rc_Jn!mw+_M8CN*< zzCkjoW8c8~TTd!(wKXQdL2i}X5#z*sS36=hdTLC?v=#+YFBr=Faza{sk3q@-V({{O ziOW=5=e#l}5E`zAG!hJRrWtv|s@{_@H5{a?9NYkpL0GsvZ^YKxTy9TM{(9G)x zDaMw$w%fKD{`#O(H~x4=J&XO*{e4<0!Bt(pgG-v<=;xJCeMDGVyh~X!6yIJ?ns333 zz@CP^#@WF^q6`re6j{s!wqMO8Syb<6i#5wfd}5-X5a!gLgDLsB*mx{FPD`;!A;EiZ zZDW&)Y1ze6W*f9Gn|utX%Kryd{`*iG+^gcmP<~Hc*;omVkn>X)bcY%Lyn$ER=aV22 zb}EBTY|`RgOdzMzV&}bw!*-g}8Th{qS^d@4r2&1=2NLBnTUBEO53m#bCWDV5Sj&YS6-va_J7d2Ys|qM+@KEXKcx%RdBFf5>DY%^r&4_bpgRNi{yg0yXA< z&%Ig&3xu4Ie@ypiMu(lH8T<#jdo2f9<7gZY5P!i|*CuyqZuXl0Ik$iL2kP<{q@4Bt zq8?xnABB&4B@9ZuLm#x2mrC`kM;Xvu4l6tGM8V+x5Y|}<+3aTE!X*uS0b8^mUP}9e zluSE8SRV{65P*1GeV?mxv*(;7i#(dfeN}WawnMw;5u>s^cuQuasJGZh_22sh_=Q5( z?#>VNa&b}2MuCw{*2WBSlYNC3q1R*goGmn+l+Kb=;~*>6bz4s;tp%jGk^xgAWcev&83klj~@M z8H7TC5wu`?0hK4)iGA7b!VKqd9(@KeO}oZ!DZ4zibQ~-0MOWQTA#{EAa&?-mVoR6Z zbM+x)aKI<+3#uI=h^lsbDDB8NSZC-L-TeV>XDrg9b4r;yr{{Bj)GkU#=cE0|6)}T3 zt9VKHaHypZ3^p=u*o^1p2(G}M3Ldsspg-^rxC@j8(D*M^Jva*=aKM~U8%6i087kua zgw_gEox~RNjeNoVJ`+>W4?!ZAJI_8!=bye=Xqt%1%9qvSSa&wc<4ydIGF<&V64%W@ zzhrpF!qS#4NIlHWF$0A$)C5!}*8)u4evQosFCE&A9%KX-vjI&$H2-oFsD3;5n$oJo zhs$wM7$19X^@Ny_&9=Tcws2rW;GoPP=7YDc0r%^FBJ=7*fy41ocF+N5^3-Y0Vv6ZHxk^p3<9d23hIAG6J% ziDA^8ct<5?%!`ku-QbUos+(sP4oY~|dh9UVq~(5mTH)C#a%R`RD5$@FD{ux0>89@h|2ZD-es$pqd-BjA_bVBrB*?3MbZYgEPU_(DN_xU_tH<;_RY zf{jcS>Y7ly&J~qFozKwiSNaLSKfH+t()YAOE#7hZe|SCrZ*Tp8@hd?Eb24g%x`-I= zHT-MGOrX%T#`NaaS^k1J+f^kG7R5oYsRr1k|KC@WBrk?PaRlavhRow|9X4!#|x5$*fuv%yMrD?l2-Q_Db=UtnK)|72pvNbM0fJN>Bo8zFu`J zMQ0ij^~wSih;&XSM$!UM-6U$*Gn;q!Wu3f?&TU>|U0@jnj!e~4}G3>1|~1h9D!T5>2N6m_A2l>KXn3F^mH zgQ0^xz;6Zx%j2_r3t-?L9anDG(zL&(Ba8{>D#?@1v7Vkf6O^dlb+0gl69pn<(t_LiZ$@DAa5`@U+^I8RJcvX^K%E&$Ft zTyP0OHXGT{T7W7d9BxZ>zIIA?Gym=USAHF)XiVo8|}{zB?Z;n(M8DssUk=4@PF^Xx*a0v!$c=nqF-Zir;@f+=)~> zCLNkB;J@ZxmZo#`0NBa%Di+exkM0+fw!}X>F$g( z*g+4_ZvHQ;=P##^{3VJW2+YGQT-#^was`k24jxHBO+$(mL^Tzbq;d7k6S5fz#IO*zFnpl7i!fh*@k%^y?K0K6X7k1QkZldijN9y z*l5k8l0%!&c3i~H9PLyLAYNa{6kTyQLntareFB?Hg1p-|6{%d}PG&C`^dGwcY=5FB zL{DN^6NtRZS~#WN>NOqr7;}w81i56XGmY~XhyI(&u7|#6j9tcn>)G}QNz8y#P^;766_jk5-8u#R+0wPziKn>Q%M}opD!U zi6nQ4y=SZ=Nd;7liNYKdyOX#m$}5}3RA<7Iy&LD0qWgwSAgMq^TQm{x5G0dp1Nwfc zjj=_NKSX~=(n7O0#oiFosq0Ghuww(tb&En1H!N@gAASX#CnT@qSs=T*H8Upjw7hBI z`1a2==@G|uFh!@VwURNA-_pSi;#UV9M`5R0u`a7Isyi`yLMt4!|!5Qd#N6yg!1a`J<` zMry~lepzXfv^v_$g zB}N3yw-(zE57O~NInGFOkC-1)GKXg`)2RJp;ff4~T9<97ViNlO`f?k#NJdGsn!}pK zePZ7Jl{fxdNgwc5A&FdSFNq#KvD-n9%3+!O;1;#;};L$ zyv{Tzol)Zxz$*ER2L*xa7`yj_cJl+G9eQLTSExL?WT~$9Z;rDy1QIEU<}ChBjzi~n zuEEN3KlO6(*Z zCNA|u_br2puXZJVS#wiVx#2lhTN- zjO;xz8uT-GonYkJpa%z6gN;qfvIB31OXtKBb_lU*E;2-RK!m|!SHqXO5eyarw9B9_ zV~9&p4(g{7a!O#EF>10y28!INdi(6q&(qiAlR}H;>ffw3P7Mls2S3y%SRojP9{?eP zy&Wsf+K)H6f!)e1)71aa6u^c0hadxMyPXqJPPd`Z@$fK6^VhQ}3X3`D5{92b=*JTT zTq7gq1&}mpsFwtQoRfDuv!Xo~P|f3reHm}EsfCF4)Wc(~yI7- zcUt^Q`h`ofc%$+-dnrY0H58OuooOviXo9ohGI;4D107&}9b1MfT&V9F`MM+N$z4v! zZ0^VJ6{csJv(D-S z6iB+GC#B-%b?!ImcJ6!FfBP5O3Ftx@iuYiZWvJNp|Cyyy`XScDuMs5HWDU&DfwNYh z5S{DJ>aSg^>iZxoWM*-_ev-Y1o8I~hS-?PK<~g<0gs7#;st!%p_h>61FE~hO5atCz zYtLJ-g}zbp*4{(`!dMCMQ`!%Y9In@K|7uDOCYpz7Fs}rlqW8Y3w=eDr{(_;94OL_U zb0ALRTv2_(6Fs#oj^A+ENuHC5_=v2|>}f|}I3wNZYK@4UU$1~V`YnbbSep%Kl0U2n zR=v-;O#cBMzMx*g`F|9cxi(>|NXKjPrUgY?tmuFRi+Pe=m*0@Q%18s`3h%mw%uMG) zME88}C3Z8RP@x1tq01~oj)iq$f)7H_8&U*FzPG<0!V02I>F%pEgj$PJd@!GHp;Lx} zI|Gsc?GFlNRr~ifN7}j@=V^OzOduR6Ks}GUjYM=!^)T3mLal?na=|CS!wGwK{=$L} z1kX-9CeSD4*d9@fQ+AbF*f!8GHr7<@#>X@hObbc_bUf;iO|%TQgiZsL$}8RO)Uj`{ zNjOS6a*@@sB|1@JfnyM&q;o{40kD^o>3T1(h!tp6J;W+$ER8HrTx8#$xBfaCmVniS18XN$rt^luKuu#!RU;u3HD{%V!#(5G7IpjlFM8bAFl80`P2e0jQ>&Rv% zjra^0Xq;es3a5=a%nSR>H~8Cvg9b=hXhA4`<^9Z56dw`OoRH)eRph>%7DU{ZZ>uzm zmOvKiu-iPREh2O71?V=IcvIEo2oe!_>Tp$gD#R5Dz<6RzdOe7CJpDL#4amPCVw3i) zvpE3CYjmI!(=lBwAOF~Bu)tnSRxmENdn1ftiicXjHt3F(pZ<=e5=Kr4W7nyOH5{^= zKhW0U==Oui?WvK+#N5N&N#=X!th1+%|1V_Nq>1VtOrLcWaN6(Q&(JH~KVU#ai|CY# zX+-$AO}l4<*y8_Q7Ao3=8ei36h^W_L<1*eDp8wtv)RZ5jL^JYuH`S(52D_O_2i(KA zgx=Y_3OX*X3g*@ib;p|b%QrQJiBZ-XmEv=Y^q+I(N042YsbAh26_%uxWqYog$rbaM zt84;68-l5=Z1t@tH`yaMywAmnI}WvN^oUvyeZ3~ZI+KByz3YD5u6si+_pvlhC--~% z57Zl$$q-zag=}9zB1xa=lHYmma>n zmr&$F{ujA~as##Jkc*8Ay$8qA&yb0bQc_RYokyLnRSnDc<_Y>gY<*==n_bs+LU1pX z5}ZPdI}|BioKk2h?#10&+=4@~VgZV_MT)yyaEiN2aCg^y>GRz0_v3x64K%q`>Ju8ux+zcAi=&sD{HfUHz0Q8)L9d6YTcJWzf(`wVprj2 zF`cT2xT*sjaOy0Ko6>4>HJg<1;p)xK`HA@4<2n;ACa4|4Mf<-VsPX>iMF?cYuxAc4 z@}R8^+L$U^pyQ`ht+b0TxW3SBdTij<`}Is4JreryvoE&X0#PUzVFWH^=GlssBAE$y zjhg37vVet~!nP-HO3AG>-%0#xMXJY+5F5HfLH@mF61YjR zcgym9bG?u)-Jr#I&VcWF-dzt~{m$ZQHRfFu#WT0nQOsDB3pTi{u*HChfhOF%ADlZ2 zKRQ&wxdz2G1-WdT-^*AW<(=^OK|XRz^Q;PP;0X0Z3uDqW%>@@1?YHKUf$2g#oi?Tj zy^B^hM!PGqJj;$c22mTBXrG9;Vi!$nW~@V=Y&YUX{=cjatqz&Icrn~ISs+|au zuJRgxgb$(y3);DC!+@#m6dJ7L9D7|2dxbkfwbHCHarU2RiNNyWSH(jivB$3?q522s za9(Y%p;kZm>pPw3@*zNrl{IB3U6%0O`WKX%IQ?sbHdu<7y)z50^b63ZZGUOgmX{y6 z2VqQdbG<-Ka-GGX$D1(56ev>sRJ2C};`(cGBcwrN>VvtV&l;rjtl4 z5I4n2G)KsH_^+AiKFa^GgL-dW`L{PdXg==@9S=$s@AjCQ`Ch-yrf?$nVws5=3B|l) zTovaR`zlf-ncF1jKU4fCBuhAk?Dg@>*nWu*e0!+Qx%)YEJ~6io;U0OVC^SVj*FM!3 zt>`^m;XK~3v8*+x^NVc}>oehNW92s%O1LvJtPj?n=Dv8Y6uQOi)s()^v|XlF$u}NP z_sG@+0?_2*sq8>zP)v%Hyb-uoE+-oM$qG88;!F3PEUM2nX)%9bYc=ccIH z_hCDb?-2zzQl%$!>=sda3Rq+&_?eymS^ipa0cz*$V61v(WydjBrkr$NM;p34^7ILM zdp88k(IHzc{ZtWMRi*Ffa6g;64J5G0H%JL~F%RWwdB1l_K5GAt%5^zDIw%{d0v*<8 zFNZaqB|Y8pCEBes(HD0YXHU9IANGSSbO$C8?w0ub1rYgLrm-PQ9ymn4H{%5vg&s<=y%n{OO0vc9?6G>`2&LjemiY_vEk~RoNUKPeV3xW z9W^W~E(2;*9}D}|2<5#D_2XA9{vvYqgR?nZy5c{0rgZxLhX+!!)oLIkibV{@i zFf$qr2j-1@YgvEv9Ir30%3icl6ONE&9{BFTPS1)+iNhnQE%YcsN?jDfqgmrgqoOzb zrrU48wVY9|Yc&X(j{EG~hNZ6k-@=sXMWydKISf<}Qo8Frw&m)Q zny3%j<6Fcj&eq2`zxaZQ!+a0jfG!L9fy>u;nKbemK0})b^@VAJgPFo#P?L@1cbuVr zs(82ouZfVjm@?xges=V=+Bx6nlnl!ot4d5xtkj=L)lT#{DbUPRrV?WA$WNCd{By7) zdbOA5wK>fH?mQV}xzMn?@!q7;@u+zR@X< zwnO@Rdv`rKHHM>yE1vsEpDo_gk0WvwC{-0Xsiap`RDg_#X}-ST?6HzkKQ&xP7D_DMC8jIp|p(tpA)35@!dJ zMIdU{75*q9{^hRS*H54SId$QUEnYfRr>hc$Tm}l|LSE8#LXG*D5$UIduFeZT4JcaeoG%YptT_*F!Ekzp+`L>JuXhp zs-xkRDC-8Z*#^R}y7BUpEn_2pq*dH+n8b4I)ukd|TuIv{%)+E_I>)}>b7;oe0KBAP zP(Ltc+*RBZKJSIp`Fn<_gfq;*x2@N*&OBomMP7xTYOa3qbQDVH?W4R{=AJT1$S?vd zL-vba3mXPJFX(^{zQU+6w+XWRHD+Vmuh>5@eE2QvS+)g9WM^by*C;f`F^^P)D#%&Y zl%+7Mh%1kF;iOj1JEu$N?CSMn3#ifcoj1EEZ_azW^!uY@SIas2X`;OU!vz0gj|ndP z;hNw3?2x}`Vw9@k@OOjjGAN?HjLax3Shro{{c~y~yT;j(_8)6CdO%ICl;%W7q$z^_Q~BzRA!WYT41uUXwINe7ecU4|S>k z6>ku75Mo&M#m+Z7o0q6Aj;|^MxL?Lhhbv7Ax-%o$FK7_lG-(XVROHu4BO;J}yX+U% zEwC@;M?$URkZZAlch$_edN30GTZ!Ln+9tT}JD!Kbtg%)aO{X}#8vQ#0z^%s;TEm}?O+%44sXX*!YV zKM~J(5C_#hPKY)234475dS-gg%sx>6Ts0E46~l~bRX}a!>StV%DFn%eCKJ6Hu-`++zqkwLaX}BAP(74He6{AP=0<% zXH_hkfZ%JvR=$Lbj-$N^F)sNn!OY`(FI z(DX(vwDL1CzolB=4NyP1`i(B=jPW=%8ir`5&zUf9Kq=u-`9DX+mqap70ng#%#Ef8cU`)N!?EJWz_iFX`b`OK1Si&2^;_Bj`5DF>FGZ`{ zus@+Uckz3hyx%gk9n&hkPKm%lAFYcDd~;-k2&DInsmSZz=59s1>AHZ*K}%RW+90u` zBq68P&C2Iu!Tz4;osP^epR<7B`{~k)pYX|>^38(liGR_Jev*F?<(zAV-!af-ksbeD zr7jfXSkj==@<#KyY4fLtPoir7hewnR*O(6>Cf2v|-coMg`e#)|Pxf1{Mz|Gbp1FPnIf zT9U}2y!3)++O=xzuGXW0TJKUV>XBuWzc`s77cT-luKIvyL01#HNQ&M$QmPMYtovJe z-+4h_^;MKyTYC=i`Y|Xf2l)#c(;g&vHSTm~TWQ&rscXADyp1sV+*Fe7zOOs8xCfK| z)nT%;sJc{2&i^ugKBRlpaIv5$*W%s2|B>X-h+>l3{_#Qol#fPIg4l(oOD}SKtG5};zV7rz%;x&+}(43~9SyrXosS$Z6MBq%#cbyfZ zRAlS<+5Qo>HUHZnAkaT@;GUJu%*^&$n~FII)f^z(Fq>R|8uTN*)Yx?#YqTL<0>1ES zoTRd$%DKh*`xNo|uaqCFL-Qe-#jFiS1!CsS0ng7y>*#5F$*8>_Fn)1YI)W#SkJ(%t zhvf2;)%0}prwnSc;E}(t@g=`8KXGZ7kS9yNgMBEB8BQ^bB6m~uk#0b)oJOf`<>T5n zS+>4^()e5y@G5BvrN_S@Z_2auR(jhYdE$0yA>dc1<*Ys8t28AZZgNO$h;N+YZk@hX zB=oSsTK%M7prB;xjQpH}A=NBVxj%&lPfvk7*x!iv+iQ{5TGwrDFpWFea&VLA%q{)9 zOt(b%4j4H%z$Bm?pc{y9h&)-Oot?w0I@VDf$jxliP*dbpF3-5xvk85=Rq~|R&6CKQ4r8+or|g7$EhV|_Jl!rj8!-=^8~C5eZ43=#*sW5Nd=4@-JROp&U#!l& zb&ns{;Q1!zz1jj*t({Ju)E;fP@?x!AS~W705ppx3fEMp8Hbgr(!NHjCGaYPfL@IANAuAh zWc79#guJ`sfC}9|Y1t26S9)M0RFeTbkoSJdi>lur!BAw~46VbmvMW?i>Tvh9YmJS+ zj84^~|8;RQIX$&Sb2ckYZU+09`My--qVPkeb0stSCJALD5oJ`sM~rH6gLf(y3*)b${k`kq^Uld6?`!VJ&Z*by(Q2Ro)S65&Tk9w?&srUc*Ud zjOK+^xIFs8(D&NdvhTZn;%Y7%-QRM`t@|BzV+^4k8XrQFoc0Fssi@=6?ARL-&Gc%>}It}iN^?H`^lu1#%!9~eKauey|$wm9ZOP1fDV!A=ItSZMdDX50<=VvOP zJESYcH{);EQ(AUbEQjQ-#}9e5TeXI@mfLCk_B$<08xkg=zQY^`FB z=M=%J@Z&!OyUiGOUvY>Amdp4y32if0JMRR6UItIAbe1U90;ZsNeq?0x-`)E8CXsT+ z@4k0jA=c^<+~xg>c@`Eb>7F5?KPrnq$h&`{Eda}ldW>;|ba40c4ZbZ0tS$al^bRA! zS)1_2-Oku^Ecoe5f9gu`f$zf)C@T)t+=*(sYYbaT?46m~i`Sju>wS9rX1>2VUb+!6*>9s?DcIXQB)H(WL5^W%K*S1?n2S|B`)T{YRqvN4V!R*ns%lYeOb?n3!VDvU`fIW~cBIo3!W@fbeDYgj_93oNb^QdT>HXy@&_{WrE-*u*vO&)DPgyTv(~WNQ!csX z!%?Azm*RmkM-E8jY?(U@4~L;9JhMlZ-n=(>39*O-rD5psQT3@fl6pC0jp6&we_yp) zI~iEk(6>1dMzsC%D|U-6S>6UqjPBB^TTm12O#I}MjuAYsm$!|PS8|lyT#-8Q2y)5k zS`&-vJeQICUUoauH$2_v#6Ct*8S-{>Sj{}6sK(YO-&C}t=)$GQ?Pc&si)w?9m~X5v zIN4|nER%Or2rUU3`hI(&3*x10ke(9}N?~*374Ao2QJ65v9b}Lwb;7qZ!v2#6p8SF2 zRO!w=z!9&&ka%@aTb?>!jXw~~NqQA}0!WXeD{2rqkE!M|IIKd7Y%@(%w*@u#CH%-) zcw1gjE#kA9ac!6GpZNmz)>3gVEWu>%rAEgpfu)%Up3V8W5c)_gU5D_|3Om0yw_)C3 zoHAA02;pYC@5aLCxp=81N{7%>^|`QswSJ@!)9q@H=+o~GYvSepV-gd$lbLprRG9XV z4)pFT;PI=ftW^KbPuGfcaw2Zr?7#bUsW9UX-E8wlzN0?C+vsFjmiskn`A0-LbcKk9 zJMJMf)$o1l8gYLa#;?E%pU?Lp%Q0e_tb4P^Jrug!_Dgza&PgQ-SNp==#?z%1k;}+F z%*U@c?H!2hVv<){iHu{<(0BJzEqJ6%$v9$}i&_kHdFV0j0>V+_f#46OwCu@2UpfAl zI!TKS*5VWO(l5o)>#?n6-mrR`V&QPRK{1(gcUWL@$`O_8yVp%~BHHg_AU-AKlO|e{ zbfnF%s4czJSu1}e+0KDlx2rnIe6ac16t?pSS)om~#J4ztEOqp)DP z_m8GgW@wKWo^#IG>nYxr>65D*Eqs%&^F>|He#cgKXlFYaK57i1gV`NMLVR(pgo(a! z7iv5xxNs!jEt$NpdON@H>M*=mmH4@TB&I^>3n}n1*SGJxik*?m!~@^Izxk1EhwCjs z%1cvy@ga`)B)i7y>%d5c_jA7tZ&`DqUkvI+4n=N7ejnm36@LG#P!mC>bx~BfTiCwu zXF_+(4yiWl_zR^+ii+ZPP%~qjnZ%mWilMRHg18+alTOPWIkg16As_hfNvM_R$4tGV zngMYZmKG<<{B!g3{ZyPiMdlU@5k}QaxDxW=d5i`w8w zH2Wg#uUXWbI^ztAs=TpqSo!nJHuZ_#-e6l8EDh3}i_K*dkmc13^lUyH&180v`IW5^ zb(ocrk@(n|7#)=)tAApTE&e(u`-@6PclX_~P-jbY@vm2%s#6r@iFucQ-ud`cLYY(^ zY%=-ei~gm~#00IFWSQPxfYoZ1dydV`CZWp{-I+=G-|bT2L7ctseriH90 zXux6toe=J9WMe?CJ?Tw2^HW@RP5r4}>;9VZRNvM0A+B}9t&&2rW&U?3Bn>4EhYV&r zto7vF(9hBOtF9eiYk64;`TGSZbdTjybIEO())-#(l2A1U)zCVuoat<>TK6|F8QLkd zWD^FJPRJ__8o_q>qT7dHXQ?Z%=9Qh9Qz~9_>TRk#F)VY77u}|S5iOpzF_}bk5>8_k~7SX^D6h>QHKOg?-kS@ z*6$>d_!DWBD7k4^eX@t8`lECf>Mjp>)wpReS-qlEI^^oc;Ca-uc%)y(G@louod-BQfC)AhU5N1d$-P4aFE|smQb8%8q{7KKP zX|s2Nl#@xgQ`!j4zAo2xZXGC&H@=MFP~WX5lo@BK=93kU3ZgE?rtFpw_p5bhox2tu z?Y@$xSmurVP|H$ar)%9}Zz&+dtyl9^73(PvI@_Maz@e9z=`Fn!_a(n(J&YT+^+QS3 z<7CDRsk}5gF=(+J)DGVpz1*=MFl4&1u~^)qe{6)P09urA(OuE((E>PryJgy#rICK= z`uYA}l^A0(CJ)i8{)rC+dBTIcHbyYY;Gj#iviUTY+Nujxndz@RbgdalsrRi7b zyvHx;M5yR}E8a|0ohatG9;U%g9QMICDo;8##D$(Dxtapz+4e)p-oBmZ###yUWT3l2 z(V__H9Wk6@RU_SM3A1qmui~gY&A8Vxq~~c->iU^QP!s}c_E*fJD8sI!#0*~<8}Ve` zqdAZG*JfJh6VS%T(xrg?r7aoC4Uuc@F4`_O@3Z3yxJ|Tp6q)voo2+pOZ-Yx0W6F8$ zOWy9!dWzY>xPQCE*oC_-yE8vXdzy1=xR3*9R7U?;e5yN5C*kdRe0CBZ1w(}@59^1? z2)aDTu2Yp~3noPf(J5p|-}$P%c**pAJT4eVkuZxAI5HgF1lb22XCTT6#Mrar9rSaeE)FDMm&p*QP@9afChRbz%_tp)8;NU(o*7 z9Mtv+Hg;>fuXCZ}Sk;yH?5+04@;y>q?{Y?PoiGj#DBHVgrL;?c+_2;8UNRevUDnIP zfLr{!9{tUi9kE>!F~A$Dl%F)D>!|a;(UVa{aNcJwUgoadQyDqHmjO}bp&)fwEu{2IH`*Fb_{>GgG_7XnH)&eMe^to; zBNc~Pqst0$#Xd@p7k#ImoV7gaoK_=cw!>3==Q2xtJufUH8J;=cX}t4BXQM{l0Zryp z8Vh&T#drSme5da|e`=C|UdMWvPtfPm{S!pKNNZY}r8P~KavI|HUceBSTSoFT5B zVBN&BI9KU=Zu*NGECua)%ojcc`}n3PJ^*rhIY2@nBoIhmNCSF?(gRE=1d`Xgp%0;G z@h<`DnpyiNo&)-UF$ff<7(fgN4Q2`12zz`8Hj6bol0{HRHp@Qjr6nvd|9&l#@^3Kx zU%L%AOrra^W4!#k{bU@O0D=fKYgNmZ(9Hdbz9qj=?dq_PyCyl-l+}awQZbb#V)+nv zD^pE1xiR46!0j|aw4JQ9lSCWWvFlqH7a;+ztt3PJ*8?gC^ZuqDDyIe1G=MFV(Hw|C z#;PB)z|eLQ_k_6HKsi!d%M1r~RScI8b=6FGsWol!_IzK*z?bZt?d<4cM&Lt1DY8sP z@fiVH>2|~&E8L>=(V5Z;mhFvyj^T@854;7o0&8r$|HMG3pk`*Y$J`RyI)29qB+y!V zK(|}+bTg*h?q$*+M=(LrW$W|le+`v?KKx+;@Z47$*&J2QU<+5{Zfj zRVd-ax8hjpl%J;iPe1L<{23O0$$5-M*h2U+NjB<>tg6YM=rT!y>xEsU52Qr9hJNEmpP~W^_kbLk0L@pZ&ZbLVYnEwBoNsQxe`+}dd z*vuJD+=9as{Ln>E_o@5z>fWiFv(UdvaH|2Y2Ao6&;4K(vEY-?Vf6rklED zU;%%5W)B5@34;0{kN0K@@$ms;|~9xwT@11?}{lwFi&q!x-jQVB9SAA1$xpZfuib!!-X@m8~?M=amZpq2f{kqiXIIN zV2+U>v%tPv130`$b<)F3+iivh{x`5B9KrIT-&KH@UbZ{I@w2dJa14muu?YY#s*Uh4 zyF*{)ccxs+d^6TLn(fN^o0iOGOj`@#zW>Nkf17%ialqos3N~KT!h!FR;^)*~pLEIm zh(YH~!mTC(m3jr!mvD8LYwD-h^F*Em^A@}%oUMjsz^GwFv=o?suGv~%HjYX71p3Ab zngI@^7O)K?PXR4Oj^75JwTw6(?=r%1-~>kKWuk;^LYQBt&?J5c1RObf)4==H^svZt zGG8+?USUe+T0xWn`#cWAO=d#d_+QX3fiuSy&vQ)ydYW{xF1|0X#&P{->EZ zHw2UTeN71mY+o3-c*hviSaOv;Ed#WW>Z2>6%&{;^wdn%xs%#OBKt_}uSSVyMskBY# z?r0LgSiO%H_Wy~^JD#k>r7o^Pmv^4F^%&8@M>s}c6{m${;*19~aY0J#WBqPTLD{bI zchMFnH~rko*bjIBlxE!npj)))vHqauwe8aO9`dH~ITjl#y7^aXxARh*k4^ef?1=~J zVp<{SKsFrYOs3PelftCtuYTPp%tu0+#_0M=Z-01iC$rEope#)XY`Er**{c?R(EiG5F;B zsg!LHv=&g#LJJU|geW#8P9z2sW!8Gc9xH4EW&x9fP=G-rjuIfEjVEwIBRWo60e~Ff zOWp|!j*+&@AJq_41R|)D<13mw>)&q*?uMch1)z}DP4_!a#X3{JQpvEqv zr#A!ebM;X4(9=-&@fJ{(&{{B-(Dh)tupxkOG#h6=>;vo-%nFHY2Yn{66^K4Qc=!;2 zKm@~X04|?L)}4$nk8xpb&@G52#KJ$qKM9hBvq!aOI6@+q(SB)-u=4gLLB3JHVZ`^1 z9A4OI=VwJK*y(%h1fUfJ30McX3*oqB`evDXUJmB2?I)6OwJgRFkP(HP0ziu(;5ouS zP6Z&g=Ho!BOw?Mc5&UH62O`uwTHpsdKmD(D(^3fJUiPK9WSKo{ z!=D1bZEHjYb^z#kA&%+`KnEoFKoViC{&$cge|?~s+%nqr00oXW_5j)x0Jjm-9V4p* z1pEqe$7TYQplAR)fQBo)JnO3y)g(H)`fsQ|2-1%fe7+HxhSJK-s@)iUp>*&hg8Thx znIe-Y>+iuB*J-(O>ndWxZs}fr}z8`GShg{pd7Z} zOiTD>J=?}_!cD^*!F0kyQXIS3FQ}W?ATi3BZ`X?D!)P?GNr4VPUVk!){RsZnPPxcG zeq3j7e*rLLe1c_P7z$C4YJ%?l-oeozoaIkXk60OR4B%;?pDmniP3brbSmyw(T&)aS z?a27?{fPI}O>?n}m{7+UG;X%iB z&%~c0R`Zt9TnUJ;-@kMr89MXNhq=P+VQvyOFP`{Y;^y2N_+6j5m0v|3nYXlC43of6 z;6!kwo%?_4NXukkG0{S`{W5n;$OAuO$n3c9Dp$(C4UlP4=sya`{6NVHuRME33%bUJ z3*#>v+M|krJW;$uS00A_6=1ZG_Hu^Z)#TwWSS#c?z>NBshBkSv?EQ3AvTmVGR5rf1 zZv@|v#K(<5gfL#>9jG7j5g0ApiXK$qord!#IV&@H`7&00;0MFyQk=o+2!=5d%?x`oEc_BRR={!reZLT~`e1MAWh zii!^_!*=?Hov(UmNP+6GQ~+KUYUXEQP(m#15cbi)w)4b-mJGA7uJI+q^R>xOQG64z z+TRf`mn8$4-z5@26XSu8F(wcy$onLM=u+e*9fxn|a(Uvoc%JEQ(7#aXDj9R<(_7kq z5YEIrt{s!;C8aj}w2^llY#p^#bRnLP*+)h|Nw{V-Cn@pqlt|y#avutpUM)CB7JjEz(V4~HE<8vn`E?SCY61nF(I>MrH(+xWMGMBhRy_?i3R zy!12eZiM8&ZD&J>Q#r|LZqk}4vf4&9!9$wA15F598m`l-T@Iqpjvx`uy`4^i5++t! zT`Pwpc=`AAMX@0wJT@Qan6E+_y^j$~Amkn)U<24<$=qyXY^(v5YY0*-Lw}`?d4BAr z!)#tX3|lq)5yL=dyd9>7>a!3>b>klQ>)R{{fS=_vGZ0DO->OIpPCR+Gy%HD@Xyt|y z0k9|Nw_~J;tFQZjp@)9_oMybjIs>ONpy*1NF()!?Co<&u=lnoD{o}!QNfHe-!%h?B zWX{c)o5=csU?HiCi$TxUmd9YB(_@+GrGwUHl54Ww(=`AdpB#X4;qED>X51kStWsZ z8)Lt=MJD0&ipbM${!FGv4{N5+0;U0lm&USO%JoxrFAkn<;+E@);Nqfb^;i|z+WF%3`Gm$b*IBRfS-Nf{d;;mx#PP?eu=Jt7z<;I{AAPPzV zi1!a3#2rtrduwu1hW;om}Q{BZoP1uUVsd^DUp35>n5FFDZ+x_WGAXN7_7x8!AP)o|FMD z^Xx&`OR`RY!)|EzzT~EkwcuWC{f2 zTClwb^1X0vYz2wT43~u5e{K9vS!8Esf_RUh}U7kwcJ_(6ua~8!N0N1{Zb?z zv^~AD;v^GRRU5Cfmx`JE1{`3vvC()*Eu$Dc8=-**tzk)s5qe9C zc5nnNqZ&H(z7h)p&n!JqXst%s2~*BqMuG5wmjGqd40Hp~91Evpn;+n^E8hzf=9D-N zsp&&V0>|sYy(oHses^ZarxGj43}>Iw-s8^LVJho#vQ3=4!0_aqpLzSVxh&2P;Aqak zDrlH(58xYlR!`wyii!`q1StagkWxK>hRxr!c{(wfXE#*tEHU#>P<_{FSsu7cLhZo2BNj-s1 z>%7Us!Gi|15*UpSTW<%R_=|+4auNPO(%-|4ce*AQ(Zuy)7zQX)?hl_Oyr5Si;81d= z`X_L}pCiDytMJITnTu#n^S>VYzh|@tEsRu3HESAMUlHwVF03_P;=)h_xo!nvz?vHD zJ5BGJvLhJ<^cjTWmJG zk%ev(_p?+dNG=61*S^svfSbaV;IHBD;qq{AxE~->MI49)SS~F=u?9vnzpns>Jn!)? z$-u)!yQc26fR`g{h>J~n03NtuEOcM4eQPwACv3(1eK{L8Z#^+k{f>=o$qls7_lX-VNpX|Nu ztnr~eu2)ftcO1IRT%ZCv+8UEd`~Y6R8P?wO1uq{Wg+T=I{Hh@UPY+Zjqx=T$2kHXM z$8iE5uh=ZYA*GA{P8pb7er_ms&wdS(|C9qFiVT+4D}FdAX{<2N?0SEzB$f`Y@wxdPeEsGH*N!N!D(}O9~EP8j@ zU+pm1wQ}-0b09Zdn>qX?(*j0akIIR>UJ`(hs2RY9&H$(dJ*_dk^BU55lTAzG~o%t^}T@quLU@7YKof zAjC7H@&PWzsJ1sKjFcw7l*!+00-iqs=R~X7KPbp2)W)l_m0e5QybJuym6Ly3jvae| zwvSrI+2z@bNJ99O^35pDU6R7pnL zCBCY>(Vj}B-@mRfG`(t6wp7k~cAEl36hek17-_%Vuec~-fBCrZk19iM3bVgUoj?5e zWI6Z%cu!0*vCu^E5pKr`=YjbAK9S&;n0;co{m|=sIFecQU@G~yTzb<6b9(>!={4ZG zn=`;#?=$Y$!Ip39@GHD0#ZOus#P&%Yc}v948k+aqN^_FDX#a`{&Vcm5^C$&8d*^{f zlOhZLO>Uwi_EeV+0dT2OU+=&k@#eWYtr+=BCS8aQGJgFmjkK_@lj^5zY$baqK3!c@ zRn65G30f%N1jsZ^v-{ZwOUltCyY@Bn@q~W77M~+7S4wlRHd#N=5gX%Sq>1*t96xPO zO^&vFa%n*fVSFGOs5l02jSr`Lc(v_K&0VIqaiSmrY{$HI?`Wmz<%4s`MPg<%sqI?4 zkA2zVRxMJ(1(rNxBB z;>R%V9_b$0p6<4Z%`}+q$3rGA`n6Fj3Our)5%Ly*P4gHpVu85-n-;9bL5R$PE*UT; zGpL1XD_w_>Sh$YH>){THc=p?JY>(i$9A#z=C!PJ>M1e;MOL370%kx+tqF4y=fVq}}U$RfJ{xw3*4COPr9V|Y6rnM7Bb%FrHlB&+l>>k+zmxK;Dwpv`W?zLaWvlg z^SDJev*s{6<>9b(K3VTMSZ3ppu~4K?IUAIK%B3)zeme$6j^py$*Whaw->bv~n69SCRccWj7Ol4j3|pz3lzj1X>X#6T#&e*&#US+p%l9o38B zhR1M9T}mYobVI`yg)qASMDec!Ab!urPJ>tP(o6Ns&sCW|86he#tbgq)U5*SD+Dowi7h* zfwDq~6NZKN-TTL$k?<|0&wPu!7y9)GZQh4InB3AA0lrUc?^7&jqSE1-{)tP+m;NAD z0hC3%P}%4Q#~5Oi`wekNBgEA+1clhNYxCVy&pYLR+MVCcVMwgxeLtTGaFYYP+G>k> zcuo%X2?jmXq6GR-Q3x6W-N@P8&|FW>I^1Ws9#D)#9+9N%OH$2pCRP12q$Add%TX|4 z=3sg58I#E1-c|IoAgf**B6~fIGWP5bW)3j4vMAf)GP?~J-&v2?EgD2LU6+06tcC0s3S)#Uyb{i@#BrJ$N@pJn_{Gd*Uh_qhVzy7&)Iu9+b?$AaPC zd@LKP)$KzAFq#!FJ7R}p^x&^bb+bBNm#(!5qI)u8KHa3TKQXN{-8>-855Y~M6m)$I z%(=xV#ky*II867q!G|2cx2U%(=qW=%jdzRdnOi8Q0G)DB_yb)v&&Z&bYlp#>*__(P zILh#G)sOo3e$wPd0IFQuoQuOllGK3FA9l3RUYE;tikqur!umh9R|)0RhM2KU@wnlADDfKysJW{2*SGFL5{;H+zCxZNZ==~(82`v|)On0w}y-r~D%zdg< zWPe^!5_84+(h+r7d>&Bns4qk>M5B=)Y2@DIAq~ORo=b+;D79S4MU?$N_P+8V%C75| zZi%5A=}yTZMWjJOq`P70lokZ(E=i?Sx`swXy1Ryw?hffQco)xm`@H85IOhuvjI(F& z6~9$`t&44URdHvAfcDb-=PEUF)GLG>_7{YNc2g!H>FKS9Ng@H@Fp+%gZBGP-^%+9g zD7PymyGw-H1y%;Ptz}sfQt?WI+^Ntm5XU(i;+o=w>XjA z__bOXtjL)N0|*;u_~K1>uq1#hsjb9d;kF7dSrsLUuAAX<`<|Qf^g-}SG4xhlAVyxN z#<*s|A?!4P-Y`khh52na{KdNo?;xSMBIzl6zemt#%`As;-t11_Rw~US9S9y0wZJ}+ zWAKN!Qd&f!ikX5YAyLJCHx1#@Lk3Qv|G2>3~S zkjR{cju}k3;!M7g;KPQQ>9DvW;Xj$+Vpy`ydVn?h{aYfy(ASV->CXoAAsBeOTFAaF z!^OpPm<{-pOr03nA+86jg{cJx23h>Ny=Hg)%2};dVyM^OBmf^;Lg8p}Z0T+hrizI; z5jwh0^V}mdBhl1oVHMrJ3nI#QzMV!YI!p8u1=y*~JuGje7Zv`7QCO8Xt0|k%Wcmgc zLfomobX3#xj08N6^kDw$rprfz>sP@tJj61jv01_6F31VR7nkkkNTG7}u72u^#}=0> z_r6d>4@Q;RN1o>jhbNTDcu_tD8F54JE#04IN6q{9gO&x^xsbXLMNfl4+eQ?4L%yys z4!kXgNzV+4piwX&zyQ$>K?(6Es}baul@kqx*6nJ*tJrQi@WK!+p-aa3N{n`c&>t&t z_XZ$6!Vg3CVgTu9wjLt%`4(`{($>-ypc>hZY|V?O#q;s(&jMFCb|if`c4+=l)8E=( z+zExu9X<(eAL$4i%g&XQUoU8j?}f(b&GEv#pQi5@NuYs?j%&`Vz8)((_zPtzuEo~t zc;q7qePb$liT*bQx7ifqpdv$3Jo}N%U9q|~bZXB6iQvKH3z#favZ7@kLriQL=*3WM zmL&oroR^}BFZm+JPG2RwFLev1$E$3v51G3#TMNjB z7M@QIXogaBx0)^%I)uAL{t3( z^P#0uTy0mh(PIVm+6~^asF83AYXiRV5kj24gD{0AVjsdEK}wk&Z^!f}Xl7p^6=Q6{f$_9@hkVWR zTX*uLTN0yHy4J(X)x{bBMA+W-IU=^uthxXY)5foKAj!6Mr!nuoo8W&frz} zT=QttILNz^x9Ew26HMgA8KpP`iNASlXsMr&DKp*!(}NA^dX-1O0cIDW1)&}$vYUB! z2iAf9Zde?xCF+}rxQQ`Vc6m%&aoM-h@vUc)+bq!L)zUB>>TB-I`yM4!)Gan|jFTBU zspYkcxu{AKf3l{#_2AjU+L=}QkihqlYc_G_GX551 zKdNc+s2#(hA#RZvWJg@2kNyF#VmpYT2#xBysTZ=1*wX25-#IY|$x0@h+C#lY^FA!F z`Oc7T`uv84^z5hx*j+1xn}R5e{#U)YDjgQ{nLfghW|xGc!4JcM)@(=GD=4n`wLnZt^sMdok^arA@EQiW8cNzm6XyxSU!#ypAkX8 zG9Be7nn6VmOtZ}4kGZjMJmjHUM2E7-;J*BzOG3EgfHfjaON`ZC3WJGEm?iBb#X5UvUa7b( zqj-B*`mXBJOyx~Y-J&>2B;zrRUG&71I0^F2#+|M|IouxwApq(=?CfkXM%m!|M^lB# zHDHNX+1Wc0$L(<$Th1^OB7fI;xmvpE5cPLPgzz(8Jn{8KVTFInMRQ}g(L}PiVy^TN z=U1YXN*!Zr{|Ar?Zcc_az4nr|<(qL7`K6q)uEP*8<%l$4941`>U^`8S#t%;hd_>#e zN&Xefg-3g~$hy59zosiGJMzxtzDYccu)d*K=s2vyr(C_`)}X!nzdd5sB8sKr&k6eHN;oZ(vIn&g&2B);OTH^jxFnkd}_(EeC^lKz;S2R14`q4gv4S4S1hm-Y{L; z9|fGYX!+Y4b(neg#4XM8@|vF-KDnHNBr; zM9ji6;2COHY$cpD|6 zDV#f)n}*@BE{OvXXJMic30hJRY5G(QW;&WJv|jW_!~0A}OC-uI%E99@WtNw7Zyh*b zZPNtHC=`e>%$)sYTTH&Gv)2FmuP7}o4Ei+)WTf1N7~h+$TIl?nRFMiYL1)2BU5L0$ zF8&TU?YuAyhEJr)V1*rHuCW(=vuDxuAP}9Lq|ou$-O`nnzH?j6U4J`|$5*vffx9<|Fcpl2yu+6aI);|` zT3r3vXdIkyS{xK*CC{2FabnJx&pLhb=<1U_;G<4nE{fDdR(tbZK;g0S?l$MHe@&l1 zp?obkTElNU<{$@_AfZ7gHS{q`=QkeAHhi$EwB$E{Beaj+VG+-ehHA;o&~rHGCBAt( zjJy_dfdzpA1e8)Jm?&WWQ=T%_uUry%0B4{1_<3)~-Nb9(KAtW@Pn%hH+c~p82M`!F zg%*>6h4^FVZ+T3-MVsJ-QLYKGagdAyVBI{h5QX4(#B0>eX<&eREZQVx#JBeTS%a`= z+Zue|zk2*tMtBda)YwEWfMp5tTf+#tp)|ybSbV}*0bfZ=`~!71nA8!r8|iyt|rD*;AQ&Qw{xj8BV{;}c%VakV5dENAZ!O0 zb_yb=o;zIg2w-lKdQsQk=R|lB!4RV*VCN1#69EpjGshji7Jhh4oZ@45aS`K{WA8{F zIdG@lBIz9^Jh8|*OAF6YQbkeOlAD=T246)X3p@90g~Ar*K->B-ppP{p zvpvm=cQ&_8Rji_^{B?2lfC?T#$ef&a%(+Y9?hTD9xL_2-yyC zs$?Yctb`{Z9OkMnV3c4p{|?R&zNN}J;4NFA!&ArBX z7{>wDkHg^{YHawJ*%|PxAgdPhpX)ngW-Z^ub^D)LA@NgiKx;yN33f%|h~*ReiwYOi zB87|DYr&Bke$a|-+$hg+R{O|>ZOu#mvRsE9>EZXu4*6-qu^dOwZ@WwcmhGc!H7PYY zG{rQPH4SEH$Z^OlXlw2uf&7@+hi{_;eW0^PSh-pTJTVXCg3Q7KdC%coagx|&qka_t z%3E5Vnl7!N^mf_HU@?R_sz&~i*7;$WjT9@q64|vd)FrX@Dga^MhuysF$3gv}A(r*= zY|X-J0&)@@u;*-X#D0o%02@qXSTvjhdg;BOhvUQq9?Zd>9b3R!z$e4Lf_sEIIs&^G zG*?P`gr~Td#&1_o61ZbUoO(evihs!MFNH8^WV`ig!J36V(m+)=|D_u53}-~;2+y&$ zN#HxJElwria79r`-dl9~XP)#~QkQiHw%9FakXL&h?OdXmZdZHT(YsU(-Y>i%i?Frx z-IX9cWu54)FZpf1JYy%(NzL z=);mXz)E{a%n6@UvWAQ>zfwj@@^h+bk<86yv z8p6e}Gn4BP7xEHP8;ECVsdCDNfEbFv`1XV*>0l^BQ^0MD4V&J_o2rb>Ii zj}?5I$V5*o;(Vm!ku4I1d=sAkxrC9Wrzt7pLrRx!3XjBm7o{g{)=J`aupsf{@Tk?y z)vRA+r#6iZU3$UYLMY9Xfb-7o510H8qx7e33JNIWX(>;ahatfV0dt-8qujxAqIket z%1yL>XMlP2?bVYXb$RtR*-$P#bM7c~3l=Ns@Idl<{W1zij7HPQXt$dM%U4pW2JG#JK$tVgY^pU~o2O}wCKh}&Fef)3JNYrdY?LJ+p z@h$GqWMiP1mQ{%y2}%cUA%Z1sqM-v7*qj0EABi;iM7+o~k{`7*S9-C6ghPtC4P?pP z33%!jnX7pB!0%^~~pf^P#A?@2;^JoXP7 z7~}y`h#cRG`j4%V&+E79XTEVN>G|V_Tui;-nD3Z()i%Fv(k|q(t8twT(-NGmS8eMR zzlcaroZ(h>Allli>T5i7lvcRw1-#(M4A$EBaL;pHa(A|$#WNw(4Zc2sul;Ue^Oog6 zuLWUI*gv@2P?ph^C$bZc5LUrmaELy%rlV5PRCck;!oRSOxyI+Km|Fv*D?RNGNb-ep zK2}z({YpWj=-d0N7~I^)PGmlDub4sPcH8=j}7&Y1aK{_ zT@~eXP!jE;Y8>90adX01+O}ibNtYTTPHR`Ui(o@K_A)Y4bsP5&LiKX^`TLbG?7r(} zlnEG;B)unpp;f)vMb}bSbiESYCM*lWxs;+5AK{md9_m6znE00%S5SwnrCNwv3;R`>?%Nj zL^Et$i-8pWkp?PD_f5(pn}X-IC7@}9~e(L#s4H4KHLnAjkL2PLMAVbWv~^`7Qkk>o=CDG&dJz;G)jAFtVo zkygc2Z5?@_04_m+nGywdFR@bpd#5hUfrNI(I2$>1!t{D4aN%dRP?OXs`eU&1+SCHr z?#j2Ug0**=VRiH-WVL{gm@!NwHYlsrPMqpWZhDpHt+8)R zG-c27awH58-MMLXaA7cc==#T^^g_063pFie4cl2^?Phn9 z=)9LltoI3`|2cyd8yCT*11i|4&J- z$B%WVFLi{8;`d`_*)Bwh4wSjr&Zo`ZE-&TvFE7P`Z3(aVDRLH#aYqEWr#A8a=+?yP z^q;IfMgW{Wn<-=RNgNe00OBrmWX`dwCA3K;4aX?njAxT`qHfc@w8>N#a^5)tcT$o3H!-}Q zO!c&1T+8unb}aq~%f&?%tKfXL^x0|OAav$dD(;qtWU-i!DMjMw5&j3PK9?H{?~0L;HM z6nSi=$@HZ)g+$424H-q}R6AifGH=t_j@I);gihT)WeetVj{Q>E!*^?bJ*54e|J>ug z>yr;-TO4GSfbWCdV?>!3F<6Gbv!h+pqb8{# zL$g*LdKYDo9}+}^eSs1Ufe>|zWWrTn0xNI%*B=7|K5^uYU|2v6Rho6;QqO ztjguX+dQ$uk_&u6Ar@r2Gm1#r#>f+Zt6 zYbSmr4R6S7ABd9jvtYWd*Tb8wKG!=fJ3+V0^j31xRG^ zrkx5DbN<#;3v}D8@_I8mj2rxEw=CI4nj~A*ZQ9GUonxUH8Gf9kS3S|g@RfD%tg-dE zc6EPU{dMuqBR}TY_!Q$78*lKVRKK-H5MP&9-AXTHllpkzqWX#x>*!pV!RQ_doM3t$7e=TQKltHo ziFaH48dUzFLvEBJ3dE$2NCYuFBIOpSq}sB$e_lqrv9pnht|}u7hI%12LVSk|ZxT6( z8Cf99%QNR!_1&JwM2u_$saRP-|4Zv?`S%v673n4TY!UlmedPJdqxO|^bfZtqQ=*lI z^aRq4>h){eSdey^@wT8+UQ9UBn)QiedONUbCTpQRsNwlMb%a3ST z`8?3kU)wRW^?33(GR00AXWT1&$7L4P1@0f!@ZU_6{xy*H-t~9~L@KISn&pq(<{wq6 zt4ULm5k}7{s~7Z%ZZ7?tiAc%Rn{HB9eBNtrr-eiP{X>U4%Q+VtypE5yWZBWNB~eaN z3lVSeb5I&pR+IJm(YraW9>WjMnDg^9g{=rJJ~~%@|G;2jin)<9=6`M|o0(&Mf^24Q z>PPrKA<8M&f}%c4wZpLmo2VQs@Y|7dLht04+3HumA|}^sLv1YD%NfuqRUKZaG1q@q z5PxIo|DL^G#R6|;uQ2rvLHKDdrjx6q%RZV(EX9|M%btk7ggLfEEYc+HqAGpk_Y>B; ze6Q|Gz(sZgXBAVgt41;Fm-q6&2Mm%Ci&SfThK~6bYaWP4G8xk*ViW5)Y9h4WwjLlf zQEwm!M55vFI}XlrQp|-<*ML zii?}8ixX)*&c{8fPN`5Qz+mgbYVb?T_Cg9>Rg|z(%xn*JCKP>?rvgqpqQ|!kJHZyo zbEfd!=Ftn@qIbfBJcGQ)bI28`o@<`AQ%ZKYT^xs2uJzq&uez@|-IE7LL=pF1dPOLrzpWUknU(U77fjxYc1|x?I{W9G#CB|$RPjkO=7=Rs8nAKFyG&jxr#p+jE_bnM zeOdt*fCKN&$z6!q=CPK#R7cc5`Ybli?^C;SW3gvlwoWxoit=Tk?SlzIuE{la9p_!j zhNX)xecWS8SOjcwn1BC}d1@H{#p{dvr^S9+KC}2-ga~Vgx#;+rC&+x48|@XvluXr{ zU#w|_y1kgNw!B_MU%$Dg@Il77eD8EhK`Q3wr5|qt<`dAVDblPqcTR5P;Hghwb^R#r zk+Abr@NMKLbxqCKnhWf4nuXnYlR**WXdBzvqr)}jSM08e4!sl4-M5jyUG~dS$dXp$ zqN~7ZhwO1ZURWNfli%Wm%^^{Akox$2*fCWm*!%ap7pFoEz>j|E&6GAx^*Ba5;MKlW z93h!qOuQYD-sQEmw4jbb?Rn2#E*LwVO%E}Ntq1;ny2)qLX=@(0yQjy)cTJnzm=Yc5+(i=R)`&Uqzvxgg#AxqtI~;gntjO? z#QK*oK3onesPT^IRz> zsIln`-;>zI;<$X+!gyot>6B(*J^5ZrIt& zPRIamY#CP0{SvM_6*)1}8qN-HrX03?g+^W*C#`JX@0Se`Dh8VH#6A}_bzg}u?AX0t zxc?WRhVFF+ut=T^LM^8VAc6&MsUjXVv(2eQfFsI{92@+}T?O-9Boc+G&*;ZL5rOJ5 zf(3uGQUE3%k(!2cq{bG4XYsh*OiJTY#e2%$N2l`Z8qu{S@XFsmaI0t6+I}OK6AbA& zEw3>dqpuU)imqz!v*2^{qF zwgs$vz}qycqeI29g83-9X)xr;n`fab4xYhEKehde)9H>h`&Tyy%Jy=!b=t0~7n1j+ zUTUW{B^ca1MbpkWd#hOCuY`4~CoMSHQ+*^G*Wl7^t{AB^Mo8K8c||C7m=4i$U3OKQ znDq|xyf{N}xzcT~XYF?;PLGz;en$4VBVmFyL9{ovUy9SZd)6xFc37(YN0k*lr~PTC z9~(vO`JHUR8CXK{dH;JL=p@`qLm@0sJRG`dHoU&v5dYgEH}lPy6GnNr1mlgMFObR{ z`r+yrY0_Da$)3dFI@aB=mNL}wLU%L2GpYZOPbzE$1HivahP zVR0a~SLd+jbsmXq4wzS&p*0G&m!NVkIZa+qk^VQepz1{ojz|;I6jY+hDAY2j*;Afb z-{x8A`$98Xmkzcqagyw%$U4%fPv)6E3iW&~CRKJwGyY=X%9nqtmV39CdE?uQvfJH) z5^oMIKX5NQ)OD!bKF;O)9SeT_jhrF z|Mz|aB5&Ji)nT@sdftw%6 z-wEZ&$VB`3&0ZUNWXirq$?dHM6n?9Q&K&0cZ+jKjfbui-B_%_mEY%Cz3wxQ9cUpeM ztbUJGSPtzxeB%^=LWnE=VhKNMf8PnHW?v>Xgm8z|N&={He__)L!P<$T<_yZ9 znAZC@fp=x3fni5`DLv4~$S%ZvI$XI^TO$lf1}+g6D@UEiw84a00kCAMlFYk%r0INF zREB1Pi?$u^_ti|zEBI^)4;2!7o6zR1yhC%GMw=OXKwpAiigf&NXG7H31&Rz``U}h? z&3~~P_{~0=gZw-5r*C zuuO~_-uJi42*s1rG0gPP{#!WyOveA<0_uD zuxW4C4}3zSBCBgn3N;Kt9YPnU9JIkY4DyZNWr9|Il`LvUY^ja#ZIT6`|?xYFgQY# z&9Zjf8iGK*b>d4zp*nQBs6f@DQh;b^hT@sG+saxfK!mQD?eKF@($COm(z$ahR2(u> zuZ-sCjUX>TKGYdW+z{^pH8UaICG#|i83`^R36Lmz%nMqU1T7B@CPa+Ge6-b>NR z=ZV?@4KeK3YeI7lc3^#hAR?Tded+~uV;4ez0-k_6nh3q_L05)i@pw*JQPuZxWSJ@H zt{D!@hPWLLN64n>=nGVcpc#;T*Ks#F37sxUzAgVzoY8S~0ujey62fO^#QIBZS@nj{ zijPW5(+H#v#kBs9A6VP~U4k-@kOW5yn2*vP^AFk2py7OqX#=#km5!{L8=OzS&2QTT zJVs5kEf~-UC8fhm5O``F+BT3&J>4BuQnee+cO%sbcGu%@Yz#``1T@6?asVMXAFS7h+hB5-T9+)_v8^2VkLjQX$4(Uq&V-bzDsj5FIFL%*cM(+zyrF_2g*-s&4r zWvO08sL~#w3r2%%8adXygdYmIx#9AV3+%%(lR?%N&&Z4Vuq%Z~fg-sxW z?$x75PX#+@L*40oX@@l`$P3)E6I{zEazSv@Zaz~IKnt0+?J8l-qg`B7=u7&NXic1? zWi$b&-gfPMl4Sw59FC@oKAIQ_xHBcXv>h646F*1(Qj|LfGi&Lp8|~KHqw4P40&8d! zlWoPF)js9?g+{7Ab-DP`AixbTPZ1FyW}gW;l+JBL-mMKwSHj-tv7u9O9Z0}G3!giA zMjCWnr!fO#%=^HM)zM=^@^K++@ir7=gis?R6WhWmI4Bc(PP-=WF=}u6gWUeP$GqDf zuiVsG_p4Szx#TBCYKcK?&N@ttqAR*mpDUk`3Pn(X;VzGdJKjg3XfD}? zE|bdh;d#pL&*Ru1Mz)r{1^v4?Gr~?wsKgIkI*6lHR+Zb^pxvKd+>QGsO0RoicNF*B za?=#gLY=_mN8$}-xJ*=6Qzla<@}Z-2z8r@pp@np|LWk1k|7BD_0ULbe z%a*s`zFqV;Gc^9<>*!NTU3))9i0wy6NX&ciZO;9*Aq zF#aqq!?qwzao;Yj>bg;RZRZdqWCEexvdA^*F`rppaq5}arWv-dhVU)K%Z#0Y&X+IC z&~h~p(+y>A7|g?IjFYsUQH>&43nMC>3`}HZf~YIq5Fq@tJ0?QO&$+*k%5vYNw)v-A zdxU?D=_>{l$W47XoX7Kg(xMK1_Lk@fF@7Der!s6B3M3mgW`0a2Z-bhai<+$Xr$1=6 z>ib2??(|j1App|;NmfzCn82xkgl1Bv__D~Bv+M7wjBIIaqJ_*< zfnBjZ=zE5)1rX1V<#7Gr)-88sfY!^zC)e4@qz~4%ZUJq*-D@emMqkAEtiQV5wn=o! zC(2EHwj40JTzsT8EMjO@cDTiid1>qmo>d_3`n2U+xSQi_I0YoXOFh5V77z-?iPvKYC+7CqMzKl&J%P`+Q#o1pL=1&)-nU_yDWl|ijfC=?WWO{9mXfk|r} z5dTI@!i_$g)ke3ZiCd={cd~vZW3iG%+L$SXe`2x#UBJ81q)OJ=wRm}qG5mW|QteMJ zjDwNoa;~9dCoL*UWdsQ)knh`;$IfCMkK#;fAqSh@>rLpoSOAP zj1;pB2dr9ct2$i~z#5mn_Y~z@!1(N#l(XQQc6qm;)df0Vszc>LBoWhjFwHc$Q#8~2 zO1&hUb_d#64nDgfuer=O1tru1&0l&&fgpXh1x33tGlS0Q{(TU)5v0(mWk^3YxmqMQ zB~ZMrWH2wGe=_9UnT!^_Q?`nCW@PXCsS&3W%I8%YD}H0mI4grarJSN33}*N~m!AYPY0K-a@oO&5Yj2nH{*k~JS2iH$}n z>9UZs^&CD74k!XXfzt&*BGYPW)^DI5Ms9Koyeb)R%BbpD<}=!9r8a3=xE~k|?0{y6 z%#10_ewhmL_pvS?`^d1h-to*)dxDRh-JzbchWu1i&oXT@^C1?hz4c%@&D9(=4;VBa zHKt2vbcM51*UVxBkz39?{GpJ^T=NJTA)7)K|MpXw^eTJuTe{c?jeK3o;>9xSG;!z7 z)!ENED=Ou$1Ch;IQjQR%J(5zTsMHWk;@{joHx6j~0MrT{HT$|u_gtoLw%deurr%fV zBCQP-V31t)wM|BkW(a4p2c+ua6**;--y8@{bBuh;Cc}KdWm_DSnjcfI5`*IB%ZiH` zD*Ev5-^|8E6pb}WmY-5dWbhm?L1vm#k_R$=tS$ou##X&Bk4pOaT;RK?CyPpj@~x02 zG*(h;JqAmjsE6LkwB?_X0V_&(chaei{5sQVjDW1WFtNyVOL>putRR90v1Q5)G)#&8 zlhP~4H*fpASt^El61H>j$uvNOmV33cV9T9303`l!I@lcmm&$G^%`wy9-%N7|$ta5O z30kkAo1f{v(Sht*Yh8fb$^pGPkQmnt_WN_zsrCTr-V1%G(q+l;?|J+nIoyR7KtAJO zJmXREF;4xyj3{FhaFyp$dGC#8Bs9e7CubnbPYras&j`fqYI-X!d7?Hn`4kx2d=}|E zqga>M@{m~au{Te@pp==X4@F-t>Rm0e{VJLngEgri0-`I41_x;_u$DC~t8QB~(MNH+ z=)RUn8FUF~R}ENtQWSKEYg9z!vvUefrp0b@;5<1ojv8 zD-qaZ;VGF^>d_g>Xr8dpmc&8>9ybLy^{qY=2zMr{V{8!HIX9|m70e{^r1S~?H`S*B zNm24yg}a|Bl1vjwcrT>~YxwY*%yj<9Up$cV`a@2n2Mw`rxI&#)j_7qM>#jG|&T|p9 zh1hF$KivJ88ztiHZs-$!Xqx~0YVk`HqMX5Sc10J6(uq*gFB+&)4NVs>kgrezwlkN;CAz*CY z!Uy)Oy4VZ4*+LFW%pSt$3BkLq+H`)1)=D0fR7>l$^Ym~??o-K&7J@dP@|nM~+|wOIkV7(Z5Hn)+2RYtbdv zs4*eGTbtPDl;ew`&?!lXz3}up?d2Am|`u25; zb%fXx`PQ>kFI#z!zl4-3ePw>}(H7@ZMxE#G4~z3@WvdLfmvU*Z5%>`K^A(MRvZ-D> zZ)E1{--ZAeUyxBhUj$va6UDbvKUf|mH`Tvtc&D(6)Rm?H)GJ$QtV;HP$1`l$HOo#K zr(F!;y*Bf)vHT%#qlpeShm_53zqn-ukYmeeXSe!Xshm2Fq*WRXpp6aG8&|5&BccAq zwqHc;5`^t^Dklq&HL<*6hQm)vyi3d29E%H4^oa^##uKTj6( z>%8uXCyvCGF#1iZJNJe7j5(4_!D`-cK@~`V_I}d=0|Z@@a}>$12oZr-!h#Oo3|Cv9 zj#p+YK>P3+6A=I~v$Xxr}sgbqqyINAN*|c{!V?(>1Q> ze-aFTzZ&v{1G9C2yFCV}_WkOo!E+wRe<0@{OWtp5x3&r&0$P3VWmYk!CR<$f1BaFZ z`wy7=4+stzz~hX%Oe9;l>dDHx(I~Df` zQsV1Zhud8S@0D(oUkv?6B!9ii4n%lvQ0I{?Mx;w0!ZPJ6b3B#)B^LL-#Qirp{Kef+ zssxv~Rr|BW98&x2BUpQ@sD|(wJ1hHGA1c~kAcu?=1ko4HNRqRowYSUJY^ii$d~lW# zNvcg~N}*ze$T_lR>Um*#dmgXY;qMtywhagFZwEJdM4Lj)JuVYp1^q*n09$~}rAm3M zTr^YRMe@!QX6PWB%NUhTQ3H`yQE*VuKimKNRarP3L-GXPWz}mb%uzNc#+Mm9hcDqgCs%{JDij*J2{*qI>S>Ka;yZtL;ua;8DLw+o1a$-0MSBLE z0s?UZ9mU=LL;VqE<{Sk}D>lArHzaqA**lzP*Nf3dOFbaW-%NIc(oYk~%e@lB1y<}x z>wIYPrs;?FqU6yz8=O`a68Or=6W0?GCUw(5;$z7FsbTlrl}Qw@1+AukI+i6>aMn@y zAHtH=qU5Tp9c;M27`?(pSL!JXeQHn_kaO_(_q-Sa`-9ZVK`g^MTa)1GZ_m~%9*|g^ z4{by5^BB`=IHrT{@t2V=U)Kd5&A4{bBC7`I1H+?m{S`!7?ml0Q)GgHb40Ku4Fk!? zzJvhTpsfJ%Y3LbAjx7&LAzj)5dRw(s%$0@GH}WhuH$)%iB23IPv~Qn|g|C=^jd1== z$Sx~bh?_Cw1%eSjM-a%S9K=2^y!JqeyW9fw_G+udD+|LY;?DJMS&?kqCu^NI8zWSH zw;VPs#M~I7Wa@TqiG5QE0oem81DP5p z&lN<&AL#pE3a5l->m_V^EYq8!B+u)rH2#jo3Gi0#p9puQQ9Q&=S6gwj@w!-nJu>!2 zwPBCnT$!|*5!yHUZwaI-K#-&7U_|>m%Dr`1_Qs*cMf;Yqfb-Ks(WeN&^i(fe_h7z8 zyt1>;?CS+`WYn4TSPz7ETl|iI#IO)PV~9*{EA-w?UxAX;Kg5f}-#Cbp_gZpTUmZ(% zy3%_v@HG)C(xmZ&|6#@dIBU!)99Xdp94RApoWoo=P99Me0WkXIN&iAKDrrQaYn5{S z&ZP>eNhUM9!?m~Tcje=y%{3cmIIfNpv2Xvzg1^aa8Yw=U$lKI_Jbt74!P%`S;dVOx z%g3z!6lKf@;8w>l^qD+4sWR7gxF(X@FJ`)tXnyr^&VWzz>$Zv%Z-Rf$^S2roVGGn% zJ-Lm2pqAuyVy4e`vymu-ktHG=R z6MON6?C%-gfj-5D1vz_+AG%kSzz2Y6JS{Nm@M}~5XW8sPL?NFxv)sl4Wnae^LymWk zqoYKG;s{f%b23qx)|WiTzrT_`O8Lzlk5onnxlQz|%LK2|Ve6f!)ydL2?F^B7w#4>Y>Yr{SL)Nwlh!U;vTMs zI)oV!iSU^sEUY6`{f-*;ss|NGPsGNfks35be0 z3=_;|yiM``NuyCkBD(#2nz2<8#iaL>ruekjX@1^upy}n2FYcIPO@FDdCn){Y^nup@ zC6G*nM0&T^Fkex1=@@RypPdUJe&XrS6{&f>V!vEOgZ>blmQY+gp`P>T1`8q933A$A z94YQ#nA-ESYFUcMSCE*)8*Ba3gK<>w!-C*npWjdqP?Iy5nsl7)U5zbE?g@R}E|%)a zx`Cz3cXx&>8um3)_aQR8V~8OjPmX5ny!|TbJc&w*Yu`!oaBF`!W!X1yCLB7t*nQ}?(Oj3td40ph zWJc8!TS;>oC3Wr{5wagNz$W+)G#aIfI>rrpq>88#k7k|hfxE9qo!@xlYAk5Q2C5`( zJv^S@il@w1@%~)7UdU`@8sPgKvp{GOx5LLxaC0}yE5Tc`M{;T96_UOzKp$rQmvS(Hlb&43yYIV}!=vw}DhGd1kCoJ?MD#E22}tlZ#)NFCuSkmf!`*Uig%DRiCoKklN>7Vj{p0U^?IrV%4>i#Dt{VOzJ zB_#5ielr&c%R4sSY*NJ~r8@Tm03Y`W%mNYKCOU4=8mGxpF!thm;PSu(xS^Sv_qp6WKo;oVUK{@nc;J(cZI z!+yE+azt2b2W@n>`GbS}VFiYy;BZ-zR()=#Ej&f%XvDA`yh24uP5V zjpK+B3wd8JAXigJ7>~VOx*Bf<^#Iz#y9Iwn0gn*EdI>aSI+q@i>n5C6b4Lg39(Ofb z<>+rOnm7wQPQ;^8NL zeZ>YfY?H(cHUU#{)@j{k>iUcI|16sQV? z*iAs+{XC|`MEAhk^h)V_It_!O$X7mFEG1llRTIe8Afz4>b7aPx%U=2$vl%t3M2=%m zIl+!S=?7K#KX5<51;5O%A?-PnUe2}R0+rvWebNPo>E&DDJ=bEcOB$2Dkf;fkH;?}h zdtdz(SF=P5WC#*0NC*yL@F2lmgS!VONPyt(Zb|UL9fG?CcYbThzWzvn@LQnF-3lp{mSq48LR&Gx^p`jD!Ye2_A|~gbsXuZ)*{h&2UzI&T%UM{6 z5C0F0@(5HM1kDwJxVxU7t`2(_i2|F2^p~Z;3H+UonxRx0 zPPwO2GhMYQ`aU1y_Ohb*nEzX3+qoez>w~MPa+2NuAY|d|VPG-d?HI`e zKl?ZGX(>i9Fu-1nBWfPgaWt*t&-d^~%HqyX2J9H#RA)M#JaKm0MRaEF4`jSk;#v<% zbC{^JSPj?@nO{qOxr3WhyMuJ&f%Fff{PcyHWi3;EDKTB&&-)e=s#%7tkFPI7xLRuJ znuBxaBx!iW?$3!bD>=mSt^6R>HsDAV%kECpgzFYxTTj~tcSrJn2q2u|#2K7)va~wP zy_6RUSHAi_PHz_=O@>1nss(9dL|a~itmEj}uI|2_Sn@4rOgQKg{D(I(C~0}jW03&9 zLRm#i>?SmnAng7m;%|G&Z$t3Fog4A$9F9Zzuhql9pPM~u_WyF|dzfN3p?#k*a&9Id zpD(Xf7^YIF)}PJQ5xd`X>Urr*;Xg98fBqw3(x^WU^P@h|e^$ryhayfn1k%IppD5!b zJJ(HoEVMHwq{nPxW!H{D8S3>Yn7B=L2xQItM=>H7V5DkwkR3&7Bk71vwzPHzLGXPh9DL~l1D~mSb#2631dnTMVgK9?Nbr2@0l+KF?gkG2>#3c zR_|oAm$p|cJkfloT6_6K-CT^Q;!f~I3-ZNv9x`X2wh*e{!~SJO_)4m96@pl@ES4_Z zqHOWJAoM8Bl|$|JET0NwqEjLDfSjeEL|SRxnrhhPF5FHj}?TSud zT)1UErk>laPh6J|r_&Kc|C{X8k)`{4)^7oInXBcQc0ck&65%q@TtyMl<0ZUfaP-NC z9(fZ`*U!R@U$6b+G{ua(S4R9h)OSo6VJaA8IQS++blB_bj8&5C|G``Eza!2fh{d3g zxhPt+Tukk&e_axF(v?y#&@}gO+b2D5;eM8)pLpr_w7Ki4QIo|Z!xCrz`fozf3;w$Up#yGjm1z4q&+FtE{gotxvW(<|fqeWX z?m^D~OsSzDSAW>Q-TJo{TOY*2q?YQZpUtINaHooP?NbW<&Bn@5!^_ZUu=iWSlyq!W zBHdB82dWZ0I56w zPoy(VsXNPWrt!%f<8xl>VpZ}KYt%n!YX~bKzWUl1^=34)T%Ik`G{YiJi>Iv#Bl2%mXb{oPsmsturmx86>xq$Sh|?>htUUI= zZ2sHN5yOxfvaE(Ep!S(L(!(dmY9s%puGq+@2|?~ZWJp&sM!yM9jMDEMi08EN`0vcP z3?ini8oPS!wRoNzJ-wHFotuTSeDpunR2yN)w-xC2`oQf6m8UcARL}G`ltSL^4jBAZ z)bZzBLGF=2R2Yo!OE{nB8(ydv1R1G@)(rhqldB~jCLxH`m%vUbwm;GG@j#s+kEc%` z9U*P|TQT`P)urd~j@pAUuMfKW(%yWSo7;{Ua$z<6OPcjA#GYCU?HlcVf%1&1Q7+TP zwXzD*L~&^8sFd*ee^Z#*VV1i(d1(t84jKwisF;px^CK)fr~P05#paYN=*Du=iN^Br zwLp%{=Y9`D0#y{w_YUKqD7c*=7d`o}pBb~%wW-!tr!YhB_~bz-|FUNH!YJ!o#NNRh^+u9W4TBrn znK+%kdiADo^P$MSrZJ06S&^Nz;0fOEEc+A!T^FDV3!(Y)tB*knSQgi|@`8Uxs%r$G z#=k1oM;uCVDb!DLuVi$u8k^*qsBmo^+H<743RRw*8dJi72N0Uy4`!Vv9!rGQgLlRi zJi4%D#DxnixO8?a^BdLdpDw02gESEouduf^fwX?RMZv9qHi zmtVGgXGFcdyU(TgFFJgkV@n;h|E2e_u4_bOshf%BBC_5gjDgqPY0q=qA)y;vk5PQ4@ zPZ4v4uEL`{)dPfH-i3e?^M`7D+s~ed_r8d?79OaIC2Ttu**U?TgoVMQlP?|f7JtC? zEP`|J%+D2ynd>-QK=>P6=mlCBb^Lf6lqODnqn%n7RS5|*YN}>2|7Hh?_h3=*JZE{K zQ%i>BuMb1A_gi6dh7Q2bMt&TJm@E$Y;yDnZZIT{TGNnoitC&q+FWb-8qt?ky6xj+5 zCIn=oYHvM%$u4#^zD}!AZ80~|!!FOs_`z>QNt5PkP?=rV%2H=2n-Fgva{oV|4vSsp zKE2oa=4qm!<>m3M=yepQa8u!4kzhJk)Q}E!b$m$Vfop+K_K}qNaVJOU46e-p*Lq{f zNi3w}NU$v-ByteLLUNKIx=1c`4=i_Tp6Y}A@tlFUH&hD`&_5FYp-cxn+qLU56rXOJ z1s5;SG@iwVhH-7EU`wC>l)1IYh#gNPb5@3*py1IsPWB-`y*9=`(%QXD=F0lf8yf6U z&pT!(#FlCqH@m4(VQ>-<{n5jJ&ue$auAj_1{RW>=jwN?UN_GQjs{x-bG2u|=KWUhPFtXsVxY$G(m zW)QWiy7sgXvFk_+xY&FySL`xtUp@En_UeWUxru&coojLv@nLv@=VBIJvo_o4ULX?O zH}*r}ycIb;TYTQlxo?eY()Ac?XKf}vsDzO7e#+N0wPsuEO806o+EkV84AO}6O;%8L z&p=kJXsYHSYfk>=_9pkQg1KK2znj-PdAsH{m6lz8aCkZWr^Tjb`4eCF1c`Okq`5N! zqUj3`c~Za(CgtnGZri787k0-m6nJZzuOGO>*vNs%ADVb79qPqZ*LLvO%-oziZogc! zqQ+$7;d57gO%v5_Wmr=bGB9W(a@Zz?Un%=J6_%qc08gt^_lQKg`xYAh-0=Z59f-JL4j{O+uGtmi3^O8agfWC`7N7Y zHtz0`y{AW37-uTdncFuE?=lm^sc*#Iz%{5x@Wo% zzNyH5;r^mWA0l2RLnFMKe~j_yqTH<lZVA_-}{wEbFzWlXnxXmJ#5WAR>*lVOVsb*dZ%|GhOuLp zq4l(&vwQ<@AL;XvV%L#J6y$syCk*8+gU)U@HwHa_dre(*>U33onLV3ZJmH}@rJJzc zeDYn{KG|+2n4_>kHotmxyV1?#!JD_plU|nDlv!QJ2zPr!LUcb?;W?po%$rnl*k9FN zY0qFGqVCO$x!iA@irSy$oAZj_OATq?N3vNW@;c271QJ~<`=ayFA0??#9q%l<2;GDzgF z=cEggG$rrJkRUvI^|Ht!L4#xEsU;!ghU9P=jA&@He(unLnfDAwizA8WCP zUeBtbBca?neZ6dI?_~sBhy-tJa zDx$VXDOMRiQ%YCLc_3sacPB%}c+A;0UsNjWXOQ`W(7j(j7pq%6t{lO>?iuc_&RlSH z*=}NgH_QyWPXy9(&AKx=!;n|}2BK`)G{1q)N7zK3~^ODK*vK5yl+;Q)NrQDC5 zI-9M0rv`P1&pY4LE}uzNzi~>XU*ywTfW8*p`ko|1u|AksZnTfc+y4;4Xyh8HirNigzdK%&iBufk?|Y(_f+_m2O3Gx zhiK~$F%s2g^vQ9PLq)jOwpILcsDL{4G%Gjzh#{lm7|#zof~^4$rV9782fQ4H=BlwY zJ45sbCDe08OUBI^gwY~>lOfhLG2E``bhV^}|A$zNM#36;>r zJ9h+expJTXCI-Au(M!YVSw8F-g_hhrIY#Ns;j^4Mgd@~SxE{)N&MYWddIjOORzoxT zq7mm+xlX=h<jJ0Ug?w6hOdrVmaWgA}ddiUm8Y_l^|` ztym{C+k5vAwN)(nv7)oXjLEp~PcHxnc>^XoA(a*kPmehs-!R}V;7tlo6A zh<+X;I>8nnx!|5}W?zre(wR)ou-o5z5-j^5h|_2%c?TD{;JIELAj5?N_gk9xmce2_ z#Z$g<7#gh>8x{WCuy}pTW+YR_W(ca&)ctC?IZbh2ax36cWPKJq(=c@1~0bV0GU1^G_o#rJCE z;V8V+6Wdzr4gD^ABmX4bA{A#*8Vq#`f>233tqPW*AM?_U3k|!q*ld(6q+{yidpCQo zd&-OLlS`;(3*~ElJ|2x>jKy0t1SuLm(yc7sUXZB`m&PjW>$&2Ka#Z(`qHJenC^i)& zaC28aOUl@N|wORST)pT}qP$6}HMX=6sgkdAP7@uMY zNs7`4VEi*^T&}K9Un}u0zOmT}Yj#-Uax73iczG}H`MOP**fvs#i<&PRaDpW9hS`Z zJD#REP(Rj)aA3P(yj8d$bjF06YJdXYQl63Aji6|M(`x3$uapl2BbuUhXP?U09Kq#y zuYO~^^-X-g^Me*819+!-x8UU1GVEK6^a&W*A234yBCJD|)T2GATHiRUDAHF~vK zc7Mzx$6>znWc>DvE?#|UT@Y+Qiu)|TIZQJs=MH}+*RE$aEXHH5LwMyBJ~NB|Q409( z=VmFsd>aAN8xn&(SVVY~^Dpl?BCu3?RDCuPI?Fc%MwJh365)J>5<3ZSTU4H*(8oCm z{^(}D)n9Z#sl1#mn~<&AV} zC+q>YwXzoEb{!!+xQf3mv~T@K%+20O@gY7Y2`J=&q5k7{)W@q0{KOp4H$gLtXz-UV zo37EO+2g$0RSdN})6`l3#4c6rtJ{zVWoj$$8O*xK=XhJkJ#r|&d_Ff!2F#jwcA=*iWytB0XjX{FCsTZAZ#FWjW_JE*-QsBbk?FXSJAhns1 z(WtHt7Ixow?X(RenCBuPX_T6GI>vrDm-(${?4o#cVY1qJj=_a~{VB#Hz&{~Sx5{aV zJq3r`3~8`d+zy=5kdgg@ro?QpRgHZLJg*LNJyr+ev-o@R#azHl z{DVh*k)usEmn)6(HLNFz>|L<4}X;USW>mrZ4pF(7GXs#VJE<(Y2Ph79>*JdD~};TdUTFl%l~hvhV{^a^npIWZLdfvt`~l zPUpGuXlautzb%^vIz#iE?ryVzBd}3>#Adiaiy^eXC5bdrSn$PBt$O_XR!7!_21wx6 z7bQ&8w{PTMuF<%-xH$n6tnSM$Byp_$D5if-#!t)x=!~M}R-!TII@Or5Hvo2tS5ODN z$P`7O`l%%FS0PO0=v}(TJi;nhI5yig=?vQ#fCqn7yP#1;iGqL#MythhRyZ0*^@hv1ltw#rNj@L(g8Mob)p zqfvo{py?)MR`!A1C6mYQqJ`rjYVl<-vm#?pQzGciJoA#(I9c>*1Y3Viv0KjjJq9&B z<4i3HCSnK#2}V^jR^npTBYTr}Dq~$gx!#hKyBjK}kih;{#!>LR8wc810piD}k0KEJ z^fw4ov^b6vBMg6M4t9QC4b{iGH^z#oL(a-GE%(Jzht(qswUwly18*Qxe_qH-K`g7l zAgL@?gua0#Nl35Zg9=ki4Y}R4_EWsuV4D_&++q#qNLSbNH=NE_ z(Rlrxj3Vmf2E7SbaA8H1n?D*|y-}`$7Tg+=9D5B0C?th{V*U{=-KEdU^EU@sbZo7| zq(7luU2N>}UP4RyYBmbIu@PIBQB$44hpS*ME?igAZ~~YP#TTI}#U2ZaiBCt-rX2Sz zLm%4yg}u4R=$&q)tX2GN;RfOz zR4L{@VX0BbvDbZ#EwOBUb}Y5$8pEw}zEfC0jP={03;+UBlsQB=t|w+h`$8ovzRD-b zV6q<<&Ni=%dc)elT|0tJuunLTl<;vOGC{bbRuj!Z9d~9{i+c1x9)4@RhXy}ni$Hi= zrd@Ww_ulAATSCX@Z6Ht*C@6P|!O_oL}O1vTEc(?cr#{mWb9M^x^f4hC+ z9M79yuyCV7k(Z}>CPDpUAZkU)B>xzcWr~eZHf3zW(Y^Qr2IF*U?0qbJ`%&ZYo-E?% zrG8I&yy>jMs}xvh&sS+IUm?9OCZotxZ27w0z>0s}w^%msK+i4Q6|<^g9!$3{R^mq!2S&|>P70XYX z*p@0!g%xR8CCW!tV;W9cMDp)A@@BPhxIG4wUy-!0KQou3fOksd_r;1mORV=?&Gt)2 zn$4>{@i@ttWx@A>f@c=gJ*??>-SWIPB9r{!Hqvdbi3kJJAYKdacs{{$X4?aTa{zev zFg*V`5GX){H2(-N{bhRPJ(;A@?d)uH2Cpd^yX{!i@ZqorTjC<&yLT!v@}|f|X|V8@ z0sP06vN92MCvf>%jwWe-+o_2-T~Ct5h@oH}A1gtax#}F{WT@r@z?Haf$2zTL5 ziqZD7Xw7#D7y0-~oQvjI_JtBEwYQfl!dS@k@RW4BL>TU@i4%s=p8@-|guk&J41(vo zlT3K&R3~3RM5z^X&zTe>diZW5jkvw%`66|G0lAHau-}Eo2ZFUU1bC;E7Wq&~Yh_>R zsLadp$EkOb^1Hs)6293@Qmk{^tM2LxbZr$#v)kI{5d5MTkU2<5g#V&l0u2iK@i|2C zZdElni&RK_9d%UY`0*{R3b~w`GK>FtOtbCMTE)#fHQCLlFxn(myO8mg5tLAROZ?hz zw?Qp{!T{Mr+O0MFQFIkhac+{g~!4dO()rB-5jRBgK@c@ z42MF<(6>}%I774d1xaE0Q7UsI)e%MHC%ePut?aQDW7JOgG?gm;7ZuY;- z=;SbIABl%WK3IAkhj8oY>=Iwx$M++@Z%lU`YF6O)@l*sjSqaB~MD<@w-N|E=4}HLR zmwMOZNRT1OmgH_oj?a9*m{gjE3~<^F=(3s%Vs{Ddx+4tz_1`|R{EOB&$$JUzkS=SB zWRfE#3$@%Cj7}z()oU6tA9i!bV^wh^=GZ9f^jDUwD*~^pg@*|N_o5I>D`4b%uPRWL zt$0pb0bq!SUqaVQ8*GzYcZAGWOnrkV+Qg8tF9#SYtiuUzI>P20mE!(BirkXKZz~o> z-s{mHndR*%Bot{$@OY%-KeEyoS- z%~M| z^JMyz73CYxcu15|M*|F>mYhu36v6oa-lx%C)oEi#I@}K-XBc(6B1y(un1pv!YX~agwUOT#r6&G(pGmFDjVn#t6Gf;ZI&Y2F3duMNsdWS!MYqJMP}L z+55<%L3!&V__6QFGm9O^mX`<5=pU$W_p**azEEVEkUpOK0n8!)V*eI1(vDNU)1hWD ztQXvD#4DSq(qF=n)=M9}OTu-di9`9zwL!sn$h2T?_mq=exPP!_avGU11!fHlGnL^u z%S3eu;IKv{*?bM&vuZ|-c6Q;4nq7G%8M{y|gAg%KzxG_`lt-hGo)F6W{FNMEfbDS6 zZRAdu%N*S@+Rv3Ieu;o2lg!fpJ^@d9G(xT%xObv!fQH0c;%U^0O*XxSp$CBzxJ(~H zDVi(+Pgtjn5@^{;BB=00&~+K^I^fKUN~|sm`%+&t;c~8HN%ZbO~CxLUVLdY-6K>+GzCKA4Q8b z;(^zN#iltU91kfcP}4YP7fwW(G~zN8I5HrGhpSiaDR0|`j$gZ|;zZc>FUx3cBy~l* z47W-H@l*QUW9qkhhrb)?bJmoLjJA%S*?iggI%}kVG2QtunAwiK~*2_s2X_Xp&BZ?hSqaez; z#QREg&iJ(;V5jrFOY$CC;GLMBSYdcmgu?YTK^Y9(CK?zJO4!HYQb^H# z)Z+HIa`1vMIN%B-H3LLj7q#=?GXZ#FO6heTdMdpE9!%DWJ6CbYr`LbnOM1cGm}qKs z)Ftvid6HU}y805ppY{f3+hAFVkJX_oXi_k**j0QYd`_s%S3HT1L`|$sra>8a5OJuB zm0CisCIb=%NtT0v-roh<9)?9gR-2o6;x%)&;+K}NIvcixEi0!K=pGB=$JiiQv0WgA zg!ER6uN8OcIT5;pj12j*@>k6g8W#IzdPCi0j%3-kCw@(``3@Bf9S(~$Fv!1++~SE~ zENHJRal5Pk%;^>Og?kh5eOGe9kS#4ivv}K}$iD4bgjH(L=m~Hxwug8*TvJjkJAx8) z51foB6|zP|i0yNyql=}`JL2HtXoPj_qxfXF>|@&(AMSQfD*2JhN8V8 zp#TxaUdPEqWkL7Ch=5h&^9{#ivye1gUE^mmL0>ay}|>>XI^KheS46R zxRX_|s%{D;OV*Q}{|aYcTk+63@(^nIFg#S?kZff%DWd)Wf&IKkCr;QQ`*g}g>y zl_%rAUPF+u7h`++E^G+P?>9KnCPhn3aE>4QK8oit^@SHSnX6IoN`KW`x$^tkq)_MJ z`T-Q=29PSCvM;-2OA=SK&ZMzqscdoA>R%w}rAhVp0LXH;n60EtF#@jK$?9{mYdWw8 zcmT5Ew7XpG9_qa&bvQg)n%X9H#3c+LDiYwlPJ&xpk2qYKkUry>e~1~=`FNV~h5$rq zgo#kXU`0lVwjlqxn=+p{4`agzINFk_HD__{o?&~*1lN`Li@s7_UxYX=_6LrK@W&tf*Cxj>nV`zx;Ex=^XRKnRBEde$1 zF3D?sIHV%9JbgFUHt8|f5aIt!M5W?ntMZcdyfUYRM;LZSj66b9xZLminlX4BYQM*R z|Jts35~QC}G$b<=DbAksP7+jLF-gJaD&r2#ZM-hAI7wus_0vd$gNWqTt@=x2cAi~{JaC9Vw82fHa-_hoErlcsyRcE8S;{~CWdk3(exWa#k zRplY=nsM%?EODo#Oepfev4qdj{qPP2=r9RO<9>W2aO@jx=R-%lBn0zdUouOTZ1l?w zLJ%V{JUsBbm{9Kx+v{XCG{8jL_f@ndM}F#)#wlxCr-*0h@R!KY($v${-c=HH_^`-y zs{n}mB!R}or^4*bM39OR}2OkR(MsRdzgT>VwyCRvm{@7;35uV+xY48{z?IDvf`LYpv$1^wufWyV$|3X1=fb44gm30v1gm#-da+?X zWexH|uM#8q7MKu?6VKoB3ScY{{&Dzo*1&A_ySHq)&@eINhZXYog(eaU8{O2Og+3iY zjS`|?D0|R#WtcMbuOWezgZDothdmK{3c5`&pg_ox2WoaMUizVzd@@*8yJ*m>N9`d1 zCIy5eky($gU4vcs^WG4Ap=u8UHn_C1B=W_FPQSk*==r=~|MXaol0J}eHN2KrI^o0H z=tQ`M^E~ui{NHxEO=`K`#lg!8cWI6i4c)K5>}A}yJ#wVnr@7nB23*8K%;8xxWNY_M zb-&`20!Pe-q=yb&CPVCU8VOyd;T6a~IrdJhX2_liA?HNAW^pZl^sMJ%F0x=~tyt)} z;nMK8xec574PNZPhIxVVIKR=eK)&s3Lu*g^i^yN~UrX$0&Q=!(BI2-pBF9M3%N6 z!-5ph34{B{<7LVN!OzfTNX4B>_oYEx;!d!DhgCMQ?C@REE694~0rxAeu5h_j@kYJx z@jsUVb3j(kG~(}w2+>yUzTV&y2HU&E`6b7)0C^>OM2+6Ur}Ghg3}C|kH;iOOlM@Wt zM8k10#QSmx&e&a=m9nu*?Q48s^4ot%Hh@C7Nd5q-8L78xxy#rPYXVLSlm~-((f4iL zW!gUP?Fk>h=s6H`>R81^-^Z{{HRbE!6JwVq#ZhrQZ6<2mVyL)36}Xlv-I6=z?IJZzD9+A|AG1vN;Ohx?5>pikUD+JKgP`EK-i@tOS;!Y&hm+#C3J zpP}v==SKL6)T({zTFL&PR61xa>}G{FFfYD+#OuTwzTURG8H}t7*{F1!i=j+zap2s> z*@tbBX#2Ad{?Zd`N_ihW*TSS1x{%RIUqUBh`gnSW0*{+kVR;3gz!48Kds{9zFD-?S z^}GELXil(c9J7-tnO{ahKn*sxE{O0GvRjbKlYbCLjyw8AUO*z~3mYv}iT;GAqe`Fo1BNnp~kST@LN@zajB*vd93LCMg! zkYkqd4RxUlr}CEvFoPG_cJlzgbr-4mAPrM`P{Jw{%pk^aqxEQRj(BRg6xc`q`ELF zc7*0|jG+3_YftQ@s--&j1gUwX(Tt1_5$KLLO3#&0UF#qj{kpZl`v^p|jC)nn=zSVCbFQonX!lv{mDU_WRLs~MDlRW#D zRjR2w#yMF9G7f1L#MTf2YG3W^5Ee${^H<3BI$QTb2X&b36z~8pXy@HHnQC1ln48D2 zOB@I9=QmZ}fg|7OZd?(vy$>ee^<3g@*hxqZ6l-CV#%Mx1&%l#8~qb6vdJE4PJDCb3l$hU>8C6LC0AST4;!sz1rCiT1!&k#a1Kw|tmpB9sq`eSq6 zF)(w!D+hw8v1^1Mf#WWcCVzPXFceG*!R1atlqj%?l5IgR?*)!|dN@IO5R^1EeU904 z2E_mI=*8N_CqTPk42fN4&9}$sJ>P)04~HK?>zO%J7_ldm2s<5Tr749Mfk00(=U~4( z@;qR%9U+06xD6A+>>-CZBsb|@5NT_QwS%NCIeB#-Zct#pqr3y69X^A(?ZenA&NG=H zwE9U8w;Un7Bp>(`%UED3C^B_qyJEqBwsgTCsaG{B*U_p=Z}!_D(3a0BY56MEC9FT} zPWAs-$j3N)7Yo%4$9y?r)V}b9=$)#h@l%)u3b~B&L;f+Z`Ai4vd%+Y(p8@5IYA+k&8o4 z_qqnqD7;iLx_VVF2P_5h1~xq0Bmxt~_DPpd(GV6dOlBY)?EvA1x1xJKfEv#G1=^C% z=~Kxhg1W|R*dbCHcmR)gx#I`0BHFm@D=yJvGr~+_3N#!776q!>y8T9Yn->g3zr!`R zgqO;Ad~e)aj7}#8XsT`mxp((*br;YDw7$2}URR|Tg&Rb$QhLL6XhDWR`uWvo5-M_eU~_m4dTKrSJhx0&gEWMXQb{Tf+~%7nsKh@r zLqg!q*0JhzlY}#}n6nWgQ+&aTWJyLlcVSH@Xf6DT3t*eu}W-&wDJz z249uE>m9C}&hRLYQ;>rLBmi4HzYESCh$u(bKeW{^wmoVD7y#=0=4PRUL6$fA>p<2B z*jQh$mNe`5*pVtFzGwrYrBEF7$Ibotcm*O@#d!ph6XJmq&H&Q66Fi#SUrwIEVAvtz zGz`lPcHHt_`uEDA0~*BABHkoF)#ue#f>rkZ`OlX=Q05Qax^Yp}b-Vj2dKaelH((Z+FLWp4C6+4T^$|EuPjZII{$Xe`4CNb$x zmQ}hpHadMYxDbh{yFak@Pj1KpqeIJaNE$+Uip%IRrCFl<<;!cKC9C?rO=L-$=IUSt z$d9~!3z-f9J00y9uN>^->d&Nl%@JqrRi2k@_^}jb;B)uvYJ+yfv`I}&SE3_CMbUL1 zo>DBh9_s*OBVUs)Hx#?tO|4XVrz|m)Vb}9q+1?#_ZdT;pUvAzsC`7jRt5b6%b8;#2 zRYfVtJq3gcd3idoS?{mDfGiIagzBt4P`oz(>e*T4Ki~$KhWX?*Pq%J+W9dY3R{_QN zEc?&mz#bOPQi#W&HecL=#@BH&F&W2!RUrkZ$bVJ!^h;!U`NNIv*DBBHN2m zUg7YUCuXYNS@T^tK=_~)tnj2TcY=m(#?N4GbQEl^1V4;P`-UEF*17|2z7j+&3C3W* z9Wb+x0bCCp&>6TpmBhbtt&_;#RT8N*{>=STh4@t7c5nM+LyFnR@@v&KN7qI@C3u)3 zU`uoVqZUE<>XAP*SJrSB-@WX2)$8K>=szt@SdP@eEbKMQ;c%N2%oBP{Q+t=#8@Tg( zNg?b$soe2$|Ch6Alg}h|dtX}fYzYrFdnkMI0RfpG?zIE_<`m0;?ow(3og@X@2#vp~ znnwvN7VxU=S_}WfMfbLdY+UQALA_Xt9Zm3szgzA-cQWrZ&ZY6))x!^pgXdck2R~ZH zK(9g4K+A~Iiqc>|0>6XE(#Y`C4ds|wFS574Y7B!RgI_!1I;Jz zNA`y77)aycAXytMbUdgjzm;BEX5A{)<>Af;Hwxg5f%cM{?nE0Ak5dTeTWmB$X=9`4 z4xROoAa>}_xXU6eA5r=!vo&%`aXW^T`v*RGNO}pLroPT>0wHyi22My_n;p(~S|aL-Ka`V#fNv($BPxD zLzADA9W-Xs03`|BOXu7rrC>%j(4mB+1Mxn^@^>1x`tV(nWmpY);Nx-F9!pL!$T8A) zu;OW$v8Ct{K)?8Y@k-2%bIamUHuCe^E|@&v8WzPgIFwKTqLp$(->(Tk_Uj=7w1Xa% zAvdMn4UZ2e5+NO7hng4vqF*pW`fM?)^qD9-E$uL|9Q02oO-zYUicwIW&n-YL?{OX- z&!dmd$oZ7)6BJ9rtnE^CSaOzBng1+~OdpiFaon%81~R!N4j6D8W7ZYhJYla44^3ug zk~{5>zIl_LA?3)!SI<*QyHO+@yMPC#J(KM5!2OGDx~gNiz+CfQl;XfMjv134cI`Fz3S7b)WqI)&n4NBh;tn(Tj4%aIw^d|elyrI0 z2N|r50W+sCm0Qp0*njD3P|&I9FF~9XTH+kyIC^?p<);d%)V{s5Qo4sz{jCa-LD32& zBfzre>RNtGC>VjaP&9PDxn=LEAN@760I`GHM7tozhTe)QhL;ccIPJ{?yKsg7gYVbT zx#vLg_I@Z5FRWPTk#L6gI>1MyF6qjX4%!5%PS`f!A;NQ`y1HN>$K!!!WS`^T{t68r0A3p7a1=}D0ZMI5fee`@p9W6fe>4nWrDSPnCKo*3QBnIa;}&Y2)&rTMACpAwxI524NTmNUB! z^u-}A)w>BNtx=+|@k9Fjs*Qcxj1 zY+Ian-`t6r=gvHZ8Jmc#9gvL4of8=(4v*Y`}2GJuIQh{yEl!4 zLhDq;-+bPVuW*cYdVbSbNpTclXj@aBODA9bV;o1~v#|2`qLG>Uo968IbV-oISs4u( zK~*$y3f$v{<|kzkAYxvhvq&K19iMu4Klvyd@>igp!^>CCk59{2KjS|Wb^ZQl1!#q-J~ zQ`YgLPjw>3OZ+=XT%W-+EViyPK8(HTT@a__NV-a$yYUITL5g!a=%}U*G82&R{fy*1yL8UF76g?Q#hlZkuq8k{GyLnUz-5?xwWfEjsRY^E0 zkKw_an1mQE=L4^le#kULG;dy}#q#;S@5LHft&0|bQ^Y)roCPU@@ej@_W`h6+HfVOb zyZXDd##D5%B=xAmEt@EYHMrW70MD@+9Gsc7qht{i31Mooj7%kL`L2~SWXVaeUY_Ub z_fXI1HoaiHm_l)D9^_E-udRJUQdE#XqZFdOYB$@RCfx&uT-Y#S9OL!*n*IxfO#m5Q zo69@ZYvLW)p&XeuaGhYWA%COpxeJp2V)3hxEkv z{OscuPI#}D&j>Bn&Uzx<(2s7aRmv;ly>WWJn4FHe`+2aVZ@ho=EHBW0Fj~-fh&_7s zOL^9X=hneFzbBg2bFbAAVVG3nC0LjSP*__;D7mPC#lqY&n88$=({`+#Lf9`*I&Be`V%ll5fuZ!|df5!L_(h<0`k+VdG;77cCXd%j0wWbCqHd>=os;Jlk_AcgFIqqMV}$Z8&H31pEG*>`d!?o=#qi#z+mD-K1dL`4}%T; zg?@1#C7o}UwfG&=lKm`&w^}VzAe0# ztgn~Pg8HM7#?H6v6Cnj7)EsdwW)3No{9>%pwmm&w4!p&@{5LSCUEi8AEP&jb&d<4f{PT4jW9 z0r)Y~15TO3YEG+b<-S~|0jGrQscqI|qfoMjwa&V4DRAs*k&BC{`gq^rPCfaEqb~Ik ztecoNjy7^stVB|R7B~thGUjnAUH6{(5JNnQHneZTc?QX%@{DySX<@RQ+>?1 z`%ldi@sd2u{~_usqvF`QWda0ucXxMpcXxs%!QI`01%d^4cXziyaCdjt!5!uex%Yl= zE&j3A^h}>VwX15^J}pKi^c8^4asgQ~6o6Rt_<3rFtn=3VlWlNc)L4X?s(!8vL(~)Q z4zFa$OPXy}LZME*?~)Huvk5|RFQ{!4YjLHCdZyulf)Mk$D0DeXW%#qwf};h~UC$jW zr?2If4oRykUf<1zd-ir$Ri&Q2S=^TCiX2ot9N3%mhbTEeYmUReU#63++ee_p0+?Ho zfEoX-XzVV7viMOP0x~+wsfe;3XP6zpsKXoBh$aRW&`thfz{IGLuKbE6VAtXk7PNj> zs;0JYViL|hXNg$oS=JXxQ&)#Y33vA&4?@S*@OijgGuhK(qQ~`Bd5^)S$wW!?S&u%? zR?~tUeGdbiwjHp9dLl9|$j)qUa;{YS0M zKk(hBLTE6LQpu$XpG0XJ>T_F7J$^8persuYS*fjsAF0BQ2pfV{dCeVnq^%M9tkp|% zbAnKxd&OTe+NMA;k&w!aP^3%N$@fsxbQYFnz|Aaf$u;8(F!2yN_0*@&ly0K}5_ z)Yr5-sv5!cLOq%gl+*4(n0e&0U(DhUL$1KYn`QcJD3+$@_bV--Y4E;`fa(yuKVySV zJtX2FfJ&F7I_hqLTqrADeC#5DCZgylYh8(*7~>3moWT%KwL}8Tn%-%Z+xv8EI(XEo zpq>&kNj*mF1367>#Mx&9Ox0937zY3De5SuFoUWzr-bb^_9tY20;dzDd$2nVhKdt3@ zTP}6{C*S{Shz%vP@vlrr-3hB8_6fH5MrI)^cb&A68|9B?hAAGF&H5QqajEd(<3_X! zX%zW~Me>(FD93=bph;_qnqbP$9aR>ktM=4mIgRJ*@6pUqb@STfcX`qu_i3HYkc8E~x735Blipf7N6{ni3@{;>r%q z4`3C;0Zy~OdX)au3@&w(H)*E|=G4aCKAFzI>q0xh)aK&HM#{}x-Z8y`%OXkNw`#fG z0iFQuIO+crwsa_ild(k_?$k2Ws+6sBp-JDeiiBGPH`8CTeod? zg;n|2@^jH-F6jb&#n-HB^B8lcGyP0SFV`a2oDBK6M%qYOmH|u>%4s%&_`-EUpnNRNe=2y#_z3d07YedtJjK=^5 z3{|f{K`P}pfPzJ(K((IjYE5B!dJztK!rT*$iR_lgaG{};4?w8{XYJ3^w`>wG*BgekkcFKyQZS-M!CJQ=aGFQiwT%ZxUM&pn19W_;<*{_LO8G+(~pUu=xT$m$X5ohYO>4)vtQ zTETgy1BDn!=a=_QxwcsqQQ&qY&z>W?m$K(^4tTF?l!r+F3PC|i;SHVeel@=n(j#WW zu@s^2WK0mcvFvRfQpF7UZOmhbVxjn1EzBFSFLTom} z@6HF?oJkUIt-pM19rH!&^WNBfnSOK>5y?gBEo)3mVPNF;cq$b-7$JiJEXr(G}S!9eG&{=-LN2|@?|89ogGQ<{7r7Gy>H>kMKIghvYe>u-@ZPBV!uTl z`)OIR)8W1#rx>PQUlaxOd$aHypRnF_U|C0YMG_48D`QhMe8UE#{9|6t#-sP|oi)X#xT5gpa>L?F&(gi*Pz|zxwGipX&vsvvP2R8CFRi8U@{iLNvaQdDk11{ z*LB-);490GdZB_^*VvRr7>1HOYSg;Jj_q1wUqe0zh=ABix4D$|Uv+jS<4=}uuG)te z;?3u0u)5qh-={cwF)1jcYWY>Z_aUk9#E%$ijnHv&FVVEhL+eMMq~6Iz(*a2BMq$WO z%#;p01v#&h#=l0_=iX+NrdD_`xM*^kKL0vHrCyc>DK|RYcP+YE1=>6}3yFd2XR^d^ znLP$1#>;2*>%Mjc%eSYg(R%>ZtXu!bC*g>OEdLeZw9kc zf$Wa&58^w&GD4P4H5d%UOZsZ^d1M*Qr!w)9mzCKp_N%w;%K(EHZi`4a5VV{}em0Pi zf0t7a0(AzCX~9DdvS@hR%lpsqU8&o};SzX|g3^2tk30;UKD0on=C{fmA6y~rE}I?4 zno24jRyOKxed2uhvr(0<#onIhfow~7&BO|R1 z#jOE5b)Jg}*yhwO(puZ-Ibl#Gems-Ra~-NOYBTEC665-HB+nmR)jeI1hIenii#r;r z{z3U_Vrweu`x9Qw^gY1>YS_&aD-Uo%pq>u_Dnl2kU`l8saSzzgJFjEx*e?OPEI;O- z?(h;DYvrJ(wg``BX1NnCt$(lnd97eVQ2KY-{W)MRtT$UPR2HKP6cB<0wbCwz{?u!r zndfdR&(L7*2@y6`DimxPBUcl@UvQCH`ET07Tb!7pf;;$5wOu^*i^RL%(Mo%@XW! zA$oeKQ-n7?ua;CQ7wL!|RMy;7|KC{vha@;ItXtc_yP~>Y-HJn878EAGs#kL9 z$~coeNN>uDMvGS%MZ(2%BHVm7^Y7wusHp})5RbFVBwU?F#8q%e-o{8JmxCV~A*NK7 z;pgE|&1UiQ6)P#FpQ>MeR{nxXRLe|aax!u)iIkCj)9a;nyJr0r_u?hg;1K1)ARS0o59a*0TyLOq z*FKHM@VsFPI$vPuyaufuDxv5qGI5Opg$rTW>a(rdaI4NW`SP0^bxm&}RQJjY61qQ}H z!Q)~nW+!B4z|Y`kTU>Dr>&eyjE@}(v0Ek>dS;qhwicT|HfOQ~){(V|Jf5n4r&QETO z!9AYqkg6-Zz8q?3WYFSX;zCda>~8EiW8@ge@$eU^@nrTNb568FVvAqHOEDJMV%QhI z+8+NnE70hk_=-_|u$cRAgbaWpElc;rF(yk`75_xSNUIF97h;)@% zEv|1G=uycY=h!)sO;u)@CT%N=tczQizMrwtyo3 zsvWh~aF|Tx4tj~CUYE}(XlXp56(uL$)&DMWwPHzhC!hH?O8+@TA|L@@rJeheEwc`E5q@uq#FgNED1s6YFyAAd2bUzy@S+p)(5*G;(Xr%b`6#B z)rb4#F3FPx<$<7C@#fiHn}k>cXAICOuULgn7U%6jN);R5Cz+FB7QZjKFB0-Ys8agP z$~Z&sF@MY%7aK2v!z6#h=b!IY^`neQN_YW30v^O$lzFW5_&2+V6^BrWoJ;@rdlxI`*-moYGfw(jF*TGwSj=9 z{Cup9L-q0CPdZ^~y1aV8u#2SwP0l)==#`h5Z~iHoHCn8zw$LV?AWmxI+EbRDZB);VW=rckl1GVpFf9u z!5#3&q7TbbHL8GRLdmIi`)%_QR@o>URk`I_QdvAbqOW~}Phq}I7ROTMy!|0om;>AO zkqWe$uXStLw=mF?Z~g=g%+Ca=${AMjxAG2}FO_Kg-&cq?u^_@Tu`dN^o{U~*d+I#X z=XdOi@-h6J-d(17q}s<|1W@GU-Nq!g2ia>hyi$wxc=9=%d#@itO*ZT4>6h4nSGc;C zk5xf>SH1P-&jjprujEpZm!GH9$QlC?|AN`y8vhV3EUNofRx`M^FflR=x`5!eUhT>K$&^*hDC^a%C*zMiHq?#*p$&CXs8av?2Tx^ z!e*|XPFi0jXVmpZnehF71Bv7~km4_i1D-BklrHWg#tC?pWK#`RTl#fwPY0Afx6TC4 zWmEtE0&p`1N#M2g7jqae zxszU=m?i~85Kkh$7jCFx>gi_)cglJ~n>GcQDY4|MrPa~a>eO{D2#)XmNigVR1eX{Z zj~_x0>oTfZiXFAOnD4E_~ z`5N2bhq67)(PV8w!9hxjGIUYOrek%B;b2Tq|J{91%S&3Gi7=OjM}?+=gp2NA0vlkV zv@G(OlZW{_$eo3RWTP;nY(sQPveF5=zw8!{>N_^P{5{4yK1vYYdIo&}2+XX^Uux3S z8z4dj+w$T|&XAepAtPT{*TVf?bZZx{$34;R|2rRDEURBs|1&wD51Wu+ZY0Q8@1MKqiXpjWSn%8Z60%`l2 z@b4dng+A(B&(aj?c=@2a4?i7p?^gF1eL&OExqNz53+S(0`kFk`+v*Yve31IAqn5_OY&J;&S4tI)#A_qD6%G z157!nrt_q5SUs%uO&JrMx)tVEpki!Ke&^6hIzte4GXDP-dJ^;n;ng%_Rnal$zV*f} zmI&QeyE;ed#{e=25Neb&pl#zAu+I))dhppK*~i+?GLCw&dYt@{=LWr<=iRC0>yens zq+)iyV!J#1;be=hnr?y}73^^xn|bTaK#cR`Y(PT4fe>PE^THZhXJ7D7BmFE5{RZuut|iS3H$F@t&BJ6D_QlA zt0>+&p1(X`E$85(!+?F1A_iQdlnoWn$;`m+#LWx_(1h8Pu zU1S@@6hV}`o>UUj8fWw{`4%h%D@j6(yb0l$CI1*K@BNV5CdkdhpW8dTd(?+9x964h z`Vd?L1-|N>4E67mMLY=!cBuw8QM`%>A3l%J!2UY~>n#d$BgbiEL)J-x%2_N4bZ(y? z9>uZLVZq+yjc#Yi{77Gk!qW_9$=FNfcyHV80FNzKJn~={2b#g>|89>>4=@=u$BCH6 z$+UcBp;Nw_jnK{N8~(5HhaO-jm=Trvst0}R4d}~Of8rTb|l`Uf_N7|Kh$5T-xc_2w|e2DVu#v{ z61{)wKbOxWM+WiSeB`ubaTSJijQ-z`x6gMTwXpG@z(i!S-EChOSzoGTELw^(XDfPN zWh~0>)Wb3+$W9%VI}w@xn`n+g{?XNRaT9}lW~x@Q)&?5Pg#u8x?@}TPcPl~9Dh-dc zKQx;B%2Cnx=yKDGobm2-_kAH0V)N`>{de zbbmuOcLVcq3a!eP)g)J>!&hqpQ!6=rX}Kh7^6D!F)wOqT02RVrNDv2=Gc3V@c0lcu z6WYC=C=2yRu#b|&pmsA9>k-pC0H6_0@BDrzD;XfNa?)$_DY=39FHw5`jBFaPRV?JY z7(H{OM*%&2DBzG66lVg~f=IU^^sL=aWFI$f;i?n}oiWa`5$zW+i^|PW2{u0NICxI#u8>VpPX|=p*YB%UdT7CZ;Qu zgs0Q|eDQ(SE1j+3sdt~@qRP6M-=O7H2tF3){^c*m~_!!Vv0kW7)%BHq{ zH==F|+~une6)KNd1Y_YR+I$K>5XnA+P(N=+v4i9jgz;>@ z8lM{{$`_;{BWvhVYzkzWSO`tDaeAaCzIfN04>s03aB)QytwE-Ek?aUg66-tm+Paki z*~rj8;Mv@4`>nq8kP1B3XLeCQ?Yj(@7z||)0S&wVF%vJ4z+moo-DbsXn&>Ea@fya> zU^8V`&xlgR-k~dOznU9H~fb}8xXNY zd+DV0F)P8bbF;uqsaJs5n+-}mR6rvdbtX|)sO%%3kI)(6JPmK;o!7?w43h>^cg}`u zV}Jn|ep0}C4`wYBPY1CI^(*WQyU_3etQ=eey!uB_igq#r_?g5&79?Db4wmc+1(@xS z8;%QBsdhLyFCiHJNj^O!cmIzk=FcmHrGD~oiu1duku4?!J&HIGj4{fAXjBD9CU85GD@#oIqv-$r4IjV+NxSKWMNgLrhS8&7%^uOL4h#*>$uyK1ptTc) zU&WWZ9H95&l){r`NWR^x59>1-O=yj9rc7W2?o1yjAV0v8E6_zGrE*H9(h8X|-c`fD zV1@<gfPtm~sxn@Db40Z<0U2DRcxW*k7`>@#gUbzLB(w+WY2tSIyxsIS?hqTyS zFPq4g?8B0+mDf4ULj+Lfg4pcs2h-piQ*05&=a^W7n`C24kg7qPD73OSg1r9u@!!)d z=%xJcFVu2!+|0v2Cx(`04(o$<@dyn}uyFSmh`*&PUsdu&Ah?56)ay-%aJg0)PsB5(tO1^%o$6Vrje@yuX(k%?>3^972?@Ds)Iz&1?_{H zr%RU(ZABIO@niaE^H{)F0(#JD*`o}C^m|Cuf;~E(qtQ640t1uX`2|Mh^TYqtC+Gl| zcNdVuxJyjdxC%WqQzy=2$pA1Lp$qzCm|3Qf2Pauwhpx`ML7{sYz1!Ef@Y*D8Gig{XY{*IUF!6=p|xdqL(py{Gp>)BFN1E@-Lh z6NJ~>Q6$tQRkmkycX#WzmsEcwpwCejRqSp5FCY@IgVt<6{H#Jia~vN-J6dc{PpuvE zaDAE8tq)2{C8B2gGAR9dReP6^htIZ>(>J+xV@#1+CyiB>7RG}_$PnLTpGqOe3(`lo zZU~@ZAX1fxSvuT*Q2x199lGVw;jvRqw!G3O{R9{A;034Dv~v54(kAs!y#fCOT=q-AP* z(0Z_&(|$jOd!c$fDm4W2I2ttr3?JxO@RrH8jmUFaSg}AFiNfBwFp;b8Jm0PV&g~15 zBRS2t1)DO4$kNSRe*U&~8|3WQT`enaT_l)F?A|$0$2SD;QfgowV5OLxDl}NQ;%h~# zl6c=+xo`>f2ar~;0r|It)63hUsEQNN2!~xATh6)7b!{Ub0HNbId5Yn(a+l8IMJ;m+ zJw?vrXu2SxZ>!PY$qT={5eU|gW(gOpRR3U$cE)CLq&MP8!fJvI9hJdaBwD-%)wEtv zO0=Z(N89nC??-r`fUM-yUk;TWD;1ON*WH?|8H3Covk(KgH;D0WIjVtWsavw(ElR*K>nf z9)eZ)fZpff60Fi`boMebQjv>y^Vfqt z0d?U~XH+W-nP0kM6?Y=jAIUnaGovO4lOR5qFAuPQH|RE*9p~w3tcj9onG7IebsrkL%`9UzS*^+{&RyY7S46Wwln`+#W2~<@$P>haPWf~ zdC1lfsJ25$buROE8mcGf#Vnb0o|b>^jJ_ft-t{=(G&7{fYu;GV>}jZ$%<<@4j({yp zZ#KY3jcnRHqv&)&}EpSh;iv{{v1Z(gVE8yYzEgvOAV!(5b(Ofsvesxf@2X)>AY zgdAh#r(w8PrxB%sEAd_OGY2}oYar|Sz(G*;L7s(xG`yTJFRGO~%8?9G=MBTm0d=vb z%heGprYR$aElH4UKl>5^%1*TE7az0dMH6;n;t%xTWW6wR0is^wODc!&s$)it~eZaF{UWmbSo^u;_g90|% zrtV3EQI)Doq~@YhYa6~KW5^0Kr3ytl7RjZ<$c?hk_j_K$!>r6L^Jf~NJJSe|i0>G_ zNeyPE=pj@eEpUuUGOC6!k7 z`8%+>&JK7K-V8e2RvRFG@*c^ zZ@uN?tOl^LtmQ&Tztxm=&U1UcXk(HHvPA+|bC=%D0L0e-A6^yJWodj1HIi4@J%I>g zi;W994H)27AD?3DC(A*8@S(nHTs~@BpsyBXY64P9jt4a&{;VU|86x1OwNbrfHX z$G)A@g5XI*Cjyqpjm(%TCwMh15>KPkRREhUqorX(|MY`&`AC>iYUQRsKhj|K+*XXN&@Ir z?ANFvTc^%5chJ!Du$|^c$ZbwRJ~R_vg`O&%4UAiQ1ZCG6V{Iqw57r1!)?XV0GkEwSAu@Xd#*duOb>e<V#f|`vgim;e9uI3p0L+{78MjO3b1xO5 z*v`;F=w-ME^3q%4jG2vB-X-ySA+6yDZ_p`ATr&c#_@7}w+s)EW8x91-{9x~7HQmwj zJ}oHT$6PN23*$52sH};3f~XoIFH(_1 zJ#--Clrs(Aw2`{f6X|>!KKILB8Iq6jspO+viS@FRcm-R+C5unaQzeW>yK9P;hy`m9 ze&UynxA51AFBtI)lX_L8xcqq2&!=z-Ir_pGE!Q$4gu;|kk*l(RbIvz{Y>}X|9(1AU zXHkGqg)53~0sEL`fd#w2=`?XICdqAUz-}CkAJgzg8YF?|4BtkmuN3!7{{dwf<*3qv z-Ac1&x!z_qA+-4}0@&p}W~Ob^iQ6P!txZ{;cTSa-+k%2B3;?}|?rp{I;q^d-#q++a z$Ss*Nv-oVcdes!RB^v+g=3LG(bFwI2@xBXK?^z1I2k=-NQUbSEz01AwoXk%Isv0~! zGYMi1Kg!75jUudXM(_%EheI@XVGvF;DIOoQ9urZhbsfV$2|R`SNyW2vAs60t6sD{o zp7J%@$cac^Q*uoLs~0oPG77DEk-YCIa76bI3O=4`KM}nA8iy+eG}O+sJNoPm$}7@! zMm!}9g`fiV&HAu(YizRBywC|mQWn_*YfDf46ZcbDs z=AUg(B<73k5b}NPy;E2@e%55=k`fLd9VE?aCgvFLx>KX$!4Tw3cn^|Uj=WpB|2oeajGH7sOEvy^cB5HSo?PB{*oHaRL7 zW0=Xh{_SuyQ316E!c2Yze;`moD&2`p0sHg-)Enx21RhwFDH}L}0CNdnHXtFiX%1Pm zYt*?E>6$2d0)hVI`v@*KLAL^BSuG37IwH9UD?D)BEi!#8`~|At1K1& zc^5gMD`%rAfL&W(I*ZQAY81n;!*4?qSO{~bCr11p3wBlLN_eC6ZR*NB-E)CEze#2D zx@cZv=aDdw4D2U6dL@zv0C7F3gedp~i$p3XxaiZieswS&i)Ln6PkzYIzJznlGnV)ahcv>gAYv4-TwJ2lEk+CIf=?Z01Ia65q zzIXkndS+Y^H8oR~?oYq!#`DkE)B2H)lB4VzCr^vi&$2$1gg1Q6>89jN3~PRed9E)V z*M%O%WhoHc;s$nl19~MJPNgN(#}ZzlgK~q_2{XgbJn0t2L=}{ zXl|gII-vCj_`z{kK`@nBnC`7AD3gaC07irTPCk_iWOmF{42uqoz2+2CN1tqLO;>k* z8wpvXlhRaNs6MSJ6@D@Se66ka>qHR&G@tS@<~ikKdLWGPcBDW?dq^y{btVT3QQuAl zs4g<)rR1D)=Q8sgZ-nF+>zJG-^icV2*^k_wWN=S(QCWFE$PZ!LIufjrm>nQTxa zI)hhynMyWiO*|0VY}O|%X&Gv7KLFp3SLxxNS@tBJG=4}ikItNVhYz;q(XmftAa{(X zOUOvUbF#DpntU})sN1w@O*G?Y)w?o-gGJ3aQ(5qL0G{HN2Cqr)XmF`KqB|;eNRiYE zWoyuswYMmtD&bZKACg(P08MVrsbUCQ*pu%ZhXSrJu%&II6Qxo*Ns;+n=Yw~vw>s*E zEXd|3lLnI_JD@ZZF}~qn1uL?!;E-IE7egqZbrn2S5mQ+*-hMQs*Z16z<-I=?c3mr1 zDlin$gYpil=IAuH*_a;!+KGNUB=@|xE4Y8dbIhb?fp;n?qU@{h=XEuj4$7!O$JnIx ze6#l4GA!4aoABwlLDJJzBh0*10)uJV4L!=RX_|rUizDFZcal(wyciT`z=~X))d>vB zz2b0Tc#SNOiP@*anBy4HC;6rS*#4+<(4OSTzvN9;adRpfmtg2HpUecY{6~hHvExxQ zhY=))Mo@}3c2fG2AbEo>Wv5nA40RNxsAnr7RHrrdm3+<@aMg4FAn@q)8rs<-Pxg=o4O+l$JfaFSedg2F5h$ASK=fVFTYL}y@gp2T+MI^Z3AnNJ%{~k!f7II46!7@knc;ihvay=d;WW;`z%)>( z82MA3A1j+{Gy!|L94j->tl_FOR1Q;Var$ar296wD;VZF)JEvsbW>cO)U`}rzS{vQ4 zp^Z$Di++nV_NG-ueOMcEKsp{vy&t~mc)D(N$4$dNCm}Ywsfm!pUa#`R=T812;CAbD z;`8d5u&n3!*~2<^VD=cCCq{NaEH|cNgNs8TGLMXQtMfIh_NphI$QCoLs6fnJJ zH&@ih3DB#Ck;MC~5$tSZ3>)~Y_7+vOloh|=r6EQCd;m)fL^`u)2?>**M5))!^pceM zp_(|f81*rWmD~z?4M@mQSfQ6%$Nn49*Kb7ygAx*9_%jFmOpbAog3ViP3ixD`uzc-I4q|7HmLxX?bKWEfEYt(JI za!A0;${u%dp%TMNApGv^3!mAXAfb2VXE!Qvn35%Mjc8Vs4mz)Fw>|l`BtO_~aS#5( zj9xo2rFxfC!z|reqfb%K<#Cv0r{m8+di%td@??&SiKj}W z(;}XZ)|+PZ4t>gQ9*qzW?INsQAJz@R-%qU!RXCj<@KL!^AJVjRjU8j zaH@&G+0C*xhr!MLRih5vEJfDGUzR7TUdv7CXGz{}ZfC=VQ4t$QvE05`FVf|Cl8ZZw$I|WpP>5_%A?bP1G039i_E^4o zzq~m*r=_7`LF9d54kS8e`*2-?D4MY+!mb)7QSIybTgl3d&zR6FbvU>|^ z2IWiK>2z_0U?oz$AtWQxpBR2doEZ4#pP*Idc0!g!+o4H5-fJ*Hx}|g0di!RZ+S8rA zqN)E~aw~u^@etkl=$Y-ga~@sb3RjDz8>L%b?87zs=ubhrB{6XGaB3P(6Jl$yB>PO4 z0Vr+6??h{p$4-u0g)UXRTV%u3TpSEJ13O~01RXns^s5GU+CCj0AU7Im;fNwS68G*p zGAl!8x*~^XRR+C+I#+M0a~+RxA!9=h$Q=^)h|OnYX8Pi{&-hFiw0x~oEJlCE zEmEF;!4Pmoc795LVW?xa^R8jANs!d(@7`pgQ`|3QMTPNhXD`~|r|&Dt!}8MeYX1b? zk7SU#(ll;BZ+@#Jwxuxee9afI={EJoS&=Yy2|0+Atao#B2rOPONdz~v|RjdBm6CMK|keMBBTKA#pFA;?ywGza^7 zsj=SGgx7R$Ab9Tz?Gzg9fyuhHP-20ECY$hWnPw^0M|l*9jcAODx5c?|mmYP*)1tGs zPQko8{#}?7o;CG^F=2rMs2$$nF>N!>#cnPs*_CFxsl$B(dE?8d%7hJ#_RaB*NY(QF zHThT2=BG?kP5LIxYV;NIp?h?WOr28k0uE>$L2dT)SG@J8R&q*+K~hQ}cxP`x%gAIv z$)1!Bd>x+A!ReKVP8p**1Yf}8Esq@05wIX55HdhfY1->c5hb3M?i6tixMq82$dZlL(O|8s$^yF8D{8D_!fT=&+O*+ar2O zt@ETLI+OqTe$#2M^%VJiEf~Lz5pZx z=RRi|XmH|wXvFYo&izJ=Uya*qL4-twGYtN0{X8B!6G&hY;NQ{XsPcv+I`TNW{c=fX zdEz+DIVQ8h%ec+Bn-s#Hrdn^YmZxaxze8SGP@(YEe?Q^|AMf6;IPY_glY`w{8A=>oU>CK@m#p6GzXGm3?1n zDXg)DtI0@)PZ)G!8z#)DY=`|sL7jDqm61;SE4TQxbE)Dh$9{#fWy$_(m52J%K)a)@ zxuavYNq=i^BLU`Ii3zWZGY^9OgG|+jnbv_dWv-m9UV*cAG!|z@j<=2~YNl(4-31kZ z3r;iqoEquOFL>_okLw=EO#8$Fw3aLL#g27_d6p!Qn-gyz1V8%L7S^4Jz%7x) zHL!sf=OM}SzRI#Xcua*d4SSYn*lEfwX|Cy|!BF5t&YSYJHgOI=*Q_Tem#&E}RonF1 za?K9u6Ew@qrwIyc%pS0eE|A(FJx8ad!-O5NjjN|zQSY1SRoKxHsMYo~ISm%yZ|j_x z*CTIAK@z%=%sflp07CJg3LB{FJ( zL5t=9eQ0TY%4XlVuX-+N!?F)Fc(ISa?fWr~r_hn(Z_`b9dhF}bJC zc_*2p`)?I>RFS+TE_b)dD(c2*tEfRRJ5SRn$G0{j?D%veK0ceYwfU;6o(NolK5wBI zSPO}Yvc#CV75p9lbE@rXx#y*3gjxL58iIjoIZY}@sFl5m$Wu}dh6|FpcBH|ab+N|Y zU_Q`x%*)Ypyu1|lHK5_=!0X{W|FHMmnD7;boG!t1Cq|^D19V1!QRZZe>lC#pW09Eki5W)8>yOGBi_c>sRv#23DBxg zJYn5aslfZyie>j03!C+g>gSnlxu@U*=fg+zbtulRM_=16CA>1>OaLNeDIcvzv=oj~ z4?2-lHolt(92xC>XimD9$|BhXy?Rarpb$T=ec-JlIw422jz@VvWihB|Q!1iXt-h%J zRF3OWam}GfEFLbE=>8%qiP(P$4bY`^#wo<8V3jT56{UtDkV02ZH*Ag7et;AT+_R4m z#)_^b44~yLeA#TPiL^)g`N`?m4ZKkc8pp$!yC7%IC@`p%f0&Qy`^LUp+q2DQoaTH? zprsq&wHXErXS@Iz<2r^iFj2JzO6pG@)CWE}W*`PZ)M-W-81I)Vlw_Mm)fq3}3wu8v zs$~P!)hu!r-mUe-`ZaIsp= zwP?5XjDAj@Y1$DvsRY}{J6(0@CX2nd6Io0pdz;?K{QA=}9<4&7^KK}(>wZBnLi{H`#~0RdAGLFq4V1xYcK)gp?-2_R!Gesv-0EWYd)5iLo(F;GI}P^} z-}k7juRaX8HFiDF)M?FzEA_WZE^wY&U&bGKPiXNGFBeOtr+9kuR5zg%?f0O)m8iBm zLW!xZB2PNI3(8Qay^E;*@aIov1J~wZ_Y3eKrCxF57p{`V@T>cmXY*a#SSGJmairXH zA9<*=z*R0Km(Xpt;9g)yswSJA$rk!3BcJ_9%U3jYbnO7L{Col+a4YL^;ufKX{=m{f z_XT?3ceE#d;>rcScfjPt^P8+qn038bQ>;;q0D3on`SqTA72!_RO;`K&RKN+nVvXW0 zh>xG)mq?~Zws1p{aC?xh4-p`HGX-s2(?KwD9k$+~Y0WCM-Jd>MyaMo=7FOC&_XJ8b z)bX#y2`JUqC8k^;_!G!B1^fIUC9BI2Pt`mOKN|MOHrOdtYrqe=1jyAtNXaR?2sWfn z($T${+z&cr6x99Vi<>ru557K4n1^x+6WJ;gHuwX8P>l``I3jA8ZSqU3ZicuH{G<0AUj~hJ%)VK#EatZgyUE}yaw#_Zr-tjD z+!g#F!hKRgzx9hE6+IP{lIODACg9!KAEtxV__ITJ&Pn&ub}8{Prfng+vc;pW_KUU4 zHeB}-eg#$|FmSTj{QC8lWU|vW6hPHg*M@Vh>J%JJ8}&WM$u$yyY@0$t znpE<`Z6uy;QmeD;U&klCc~UG75ax+DbUxKPyLSmFHRZA)PZheAIC4tggw(LpT>m!3xv{_?2AtT*=}R9z{U(iovD~MtJJE< zq=BptBT!puX}D)9c8vuOPnmiTJ6v`PC-im(n)fZ9M)Si?7=8yII${dh#uFm3S#}_dcN2FBA@yI!R2;uoep{al z2G(uAz_34s9c}2ZO-%5x(|*qg0xbW&I7yH6SB1!Ia@#cYA=vOF(*Ct?5Q|s6UD|C@ zWy}MU2@PQrRF$ zw!L@t8Jx*!%wiD8F$e@71X2tFWf#85o92taZ@!u3lBR{pTJ!1#ge<&Znu{c?&Obxz z{>dEH*09`a536m`3Y3lHFX4foy*c+I;AOvY@0x{`l5sk%dt2@bY{d52^L|{_nP}Em zg^oCNEWhXR=5$?c$z%Q6JG~-z_C>Gwl$gr2eLEvG`j}z4sX%LFJt^l)r^!r?B%XtV zij&I5B1UCo0je6&VRkXgWBRqrC!tCL4A@W~H9#x;XU+s3kBo2KzVPHo6GtQJt{Aw# z@^h0$q2#fu&Q^6A>M4$i*FpprJ2litd7wWVgaZS2l!-j`(cTW^uBg0CIGw-;yzLuv zuS7&=usVRseva94FyN4=Aqq#i#lN&@)Aa+0hZ!O4%)f;;!Cv+IuAnXr#3Qf$I)B8L zd~}33)5}Sklxx*|{L;+6Yy&fX7H`_~gXb3kBH+h8lV={>+spK7C%Q1Z0_u3iyh>zv zGd{}@-LH^v|E&?OIzMG~Dv`)B8Fs-O{)iE3hOE zzg;I}3_^Wwrt3(_RkVflaN9o)Dw#i)in-M-HWDM_6(JT@m%&ZRE!@Wo!h4FoB7Xk~ zcVJe*yZMPxAYdK*^H$vys-5@LOSzVQszOSI566&eYijgL^r*bd~yX zcljMN(wwj0K`%Dljt|`T+iek6=Y6Ow@>;EnpaH$lB>@qxs~_&1ZsU1G#mM(D`N55a ze=bzQBW1_F@`$1HKB+S!%7tL_=UwAlK99{&Rk=Ze&#uVtp`antA4Q8m7*>{UGc~GT6bkki_o|BrHKSe=8$^Xq z$||TU)RCGS8a_Gtjj&AG+-w&!X3j5cW~|DnYw|z8eGT-pj^dE%HNENPKi*MUpAc*C zBehRS|Fwq46zQE~LG}|f0`6Lq zn{0MBV#Yw^XS_6@pESq8R^r0>i16^m>Cd3j(M?gJRaJ(VyM|(ureY3sNksjA4xi7z zUutIYq{DyWNXtz4pc8S(SQi05^T^YFO}4rKg8&dsm)(#^zzsAEYQHct+Ok?15pP!8 zocO?%ZD8!1tdYz7b_(632ytwYxd-4VgA~{XIo0_${}402Vlu-B&7!_f*R{yiNE_V> zlLUn%PDBH)6BT-k%A^0s(^W=Q)kWJIba$t8NT<{#K0vyqyE{Z0E=ox^h)B0ccV4=r zJ0zsLyWaJU@!s$A>+G}6-fPY^=iJ%#Ond2uo~U4gs@u9tj!DE<5=q7ABf3yT+17|4 z${yYa^ou#e;RVA{=kh^V;h&R;Iys&RQ>3%C3{1IdcVdb@2~(kk(ommo0@$nf$-Nk- zuD{nl)BKFEBx^;+JRpWcCTV8_&*Q1=pn%{}%I4c=VIhY;$VZ`f;dcJ}HQ{64E@MT@pk}g&;F~L6h=^WaFc<_W1!%W+0zl>C<&k zdgZOq)oOtJn$At#F*!6#i1khLNHs}~9%-Dv(>&kvNg|>}+I*TE@2!Zq>(_fq)vd@2 zqA-Of3Xk9Hyh#)T2i@UX3I?YXA1x}`GjDPAB^FPmhpShXexD^@k&;HUVUN)CbqF$Y z2iU9D&G^QlKF@t_bGy6|V{KgNhPdlHbFelt*)1!CFTKQxhZK;`kWd> zFgDU6nfko$cc7^;)n2(_g`=JRAr*H_tm=!N+vqzALKY+6j;LHz^a>KHuikbElLj{|}(k@L|wnjf-PS=ZlAsePTIC!RN|YAqZnj4^ZDH(t;|})5Q;{7#I{w9P|G1}g z&RJf>jze)nd@q9EYuxib*YY!8!Utk-A};_o4+EbcUD7lo7Mf?i*(`s}C+csAiRr|m zWLZl6kn(!lBRBqF<+@`ZsYqF-t@Wes?|HDu7fp1GT1v{xpc2jOsP&>s)8$y=<9GIQ zRe$Q|gk|4}QU}koc!via-bS74VACG%!5G41k13A7-f7KWlTZA(Io7ufySBc55;;f5 zX=3U2&nCc4`^$q=##DOqdmzf()hIky0#iw8q{DC{QdKK8+p%~fL`vz4(wHSu;#AG4bn}5x{OzRLBJ)A^ zmIk)#kyrr@r^l8=+_0F6H9$JiBs`3Vm}uvhuu1B3(CW~EnFZWOrLeJIgRkK0S>eku>Qr*xiFCT((5f3W(S z7%a;T@sRT)Jncyj%WdS~I#xC&3M=%gJA>1;KXKdIh`qsLdna7J6PQ%Bbzsdr^oivX z@Qcnwe)8yc%bn@|@4zUE9~O50bR;nOV7qoEuFy5sk6Eq7<~`DfYk>uMxM+@Eth31G zd9h?Ygb80`wXunJf<%=Ac^6Iu^vu=%A<}vYp&MU+HmWaPcb(v`DCc-P-EB3Dl5N-? zF8!`cUb$&I>>Y~VckU+t+HNI$T2)WKyi`Ge>!~|fuJ!nhaxK7V!7#(yJ3?lJOD@Om z=!|X}Vo40OZ6@RMz_45f#?ZsIY{`#J_Waz}!B~-Gm!v%WXuqkTnb|KmxJ z<$|Vq_M{I}l@V++RgSc7R>~TZi5F{(7tr~#4GBF_ie9giRFln{cj+SzB}G{Vw98o`#rtA_{2>+h;ud>Xxx%?Eg8M(IM80)0JuLx**S;B?uc*g8M2B z&Th?22iw((k(As6*kCJN(&$9d&r?)7i_?)I9>tzlGXMF80ohM*{-Pyc(jzVKB`SG?CW3y36sk$J|t<_Txp69|19*?``hoo_DRH2 z28rX?mAC-j-#l~UoE_%mvMA2;xoMw2RZ}0IIxrg;u6)K~eE2RxWVhy-qs5?9eMu8J*N7IK zhAm0KT^2goL)u}oq(SJPQ?{1{h|})bZbc*1g{k^+=VJ{)osWpN(98IV#gDaeG+iEB zqVNB)TCQ#t3x!69qKDEBZZu1yi$)3|7Z@5lxynXG)`(yhy8zq3Z$><}i(H=^yqC0l z40<>cZ5C63zwgiKl}+D%NyTjbPuyskfuk?#HKTVXGl|SSR8)>fjTjus#3+Xnkcy!{ z*EiPj25@Ktsm#z`ly(&W`HKN@~UY zO>D{!_=6r!6Nw}tYtN$!{i?Dv`{tsDs=U!MRz$V2ey+9=x}knq1Q|_z=N6#vp2XNW z$Zub=yTXel;G(!Na3(AEa%M1%i0}Nt;lT6DZe;3?S4yZsV=~W^u%AN z0>017aatj7BpVB8Srgk|C@$5H4bRPF*jO-aAQ!W)6-Qpyjk)>xLYj<+ z8K3eqsaxG{!#`t_5$i>l)&v`EmL%CIB6WuapX}~ZL?RWQS_ridOiVaQHMQI9`{mKN z9BnskQ2P>|`d!6P3kXVJ@Gij#@6>t?VpJnXnfSmvL3G9w6hSiP@nkOqk3f13P-X}@ z>PDi;6^~Zyzaf9mmo*pbRgndgXg9(%g79JuuCjsdNXEskk9_>0$~ipVn+)1u zgJX@CFSLYfF)^`0OlHtZ&pV!t)lBL+CZ-+JIImosyej6PqhA|D1#7os4dP|0CBeR-J`yl=1w$RWbX)7bN5Vp8OtDlVFsQ~SE{GgBNf>sqf6BKn-iyqwOjCbI; zw~i4?9SIl+te-X?s5B4k*bBfK#9Zdh;ayGo&->lNsv0@@V11dVl9|cUf{dNM6Vm!eNmckA z7zg@Tn8x3~%Q_w^iRSQVW2LR2jBS-B0vmZDUBdjVf5qH zhT-9b+C``cympTtZ^qD#(-&%&m|s~35glW6J0h1;0L}I zpf^-80vwN06_L5(GsVSlgB}L<*G{~-8L!C*P|E!>?vm z9lrvUoCPz181F*>$vktvzt)gvwTMpJVbB-tWQNc-U`shPhpN>6;kY5wa!mZh7ag3}R;`-$oBURYYiCx%J8D}HZ$6_GA`u9yi!@1^{ zPb1plyz!a1K@z?OU%Q`bCb7mN_jkxMapa2F($EY-fYCfjUscTI%)A%atmN_oT!5di zz0kYnfBtD#emV6}TIXSGabOh(pzYCln~-hkSddJ7d*Rx7+nmciKj>kQ1*A<@FPRY2 z)A;+-(Z?avL6Se{Zz&*qY*dy+pTn7;n=@SAdFKabMz(fu$Q|SU*~u=yW=fkV2FZG4 zlZK6>KuzR9T5=IDjd71_>j%DPU!Out*doRt)qqM%&|if+(n)heg-epN{XOmLw(#?x z8O3tOZ~u+UgM$m|R!|MkzMwUvn5ihT)RRs$q#FI=a*L%f?hxP|TTxLN=>V9-k&1lM zGG_G4n)SpE@P(4Q60Db1Xl{uQz&~!5NQA8JMcN}L#_fjLVXK|hvVx0@Tr&Qd$wI;8 z8U=onR+Br6Z&aHWHLiP54+--SxdDKB%UO8br01??KuBQT)?RqsW)iMD0Tm|lE) z0)sK06ht`tYu3k7ef5r?R-OYR5r_E|P5e!PJkrfLU^U4u(~hKHR-u+;q3~_*z+(geGE}d zj@8Z0Z>?AR2|L`4=BFpQURIN@j!t6udvSwDAc{s^NJmTB%_Y^O$-A#fz&gOFO{C3& zMBJd*CrcVy{tj$k1LwTlz+>C&X-Bj(6mf9dyU{zYy7`_It=|C ?}k^dosScs+p^ zU8AHHt9U&H8V1}G4!SC!Fp)*gbis}VoiO2v^lq<#Qz;zpZy&x=|Ak!kjBRa2uQKs+ zv<#XB{%*cLT)Ro3CArbmcwi|`&sVpvjt(aA#A%tYytm4AX|%EnN%#xn8Zx{~3LD+S zm0e8LOM#1RZp>iC-rl|JM#L8LodE;Xj}(dIk6e&brQFMvJ(QO-apbMAe3A&$zqlB< zk7{nKz4fs?ZHUnfu@P*4%MlaP-e~=)7|0yot^YS z!QVVTq5hm3a6Xo3js*TMiqUD)uw1*8g*2bk!#G_I0!+^OH8sxRI z5ljWc!&Nf*YL+oxCDW{B&kC0M@L+~jcB`yyuWD7?Q%(#d8{I@;Q8rQ)yxwhwutR_d$aAj{5qn18YM%g9ZL;rT>O#WZYVJ^-=fT>+J=<-G*Qg zz*{~^%A>ul4dI%kzTm-{jq|POBQ1o#EoSmtqyl{7sf@TEdP&`E6v2h+*F5p@8Gi3p zPi>L@;Ag;T24+c5&G|)P&)a`tT(tq&Fj_9j1%6FmV^U;PrHIXV`k5KEMT@`%Q6}x z>VqkRhhV>;44-}3XIt4ZvGmNnNm%<_otbRky{>HQsmi<%foFbhkeVX8QkZ_7Xhm3a zW75krWaW5mk2aFFKVLUN@y`dwF zzNF5hYf*Cnvk2HgTvLxKr&!`Qtc9t*eMepaub{_E$LLELywMMRW&1mex2;hMKb!jM zPr}TU1;f>?XsEUl=tie%SU#Q;hE>$@VNRn3Yt6jDSbtv7oKLPapg*6W_r*$V1~eh& ztPTVLcY&!9L5&yu9Ws9U|CZ!CFgZZSyg`F}Ki@^-;J%t72l{{pB^&sIt@|c(pU*J; zX{Ra#KFKndUo+PKFXj8%W0$4+Lp&&)@{*4uK?6ta> zA+iLVGJUMWJ^$~1bEh$fG*+p_@};SAa>QF%NooEkc?Qr1frIpLjQ?C&ns*y^i3HpE z2n}P+zcvZ31&kmdZj=9~9$U>0EL|W#idFtW7A{dulBRm)AT*i!nJ+{2SaF?lT@r>z zEB^Jv-}yv@0u2w6GvHZ(M015Av}H97rvo`a;1^hM+pscV|3v zf^&`^X39H_YMmbPEZ@)R2vwSsP1j6(q$}t~;)XuB5yyORvY!}=k@$M>XNH*#O^CSU z&oUe65ecOAf{lnFnZi)jiJnRcWF7wlz$+WTKt3Rgtzo;F_Q0hO%C!k?*ae2ERYihs z3zk1lHXJWS2y7WCe_$uf7y!h$cKv5C6Bop*x-Xt_q;`Y(WsqC`6?w*XLF4@K`McT; zb|W8dsUaNp!sU5Pv5}@|<5PT;ViN^?slbXu?3{$-f_`JBaTiG>p-yR(=NF}3B{^eBmiO7AM3g#bg)j3i!`T?Q_Kh9a77WqOSS?%TTp%+2p!Fg?#E>@(junMk?*!OI_se49}JSA+km$gj}m0_S5d)|AJF z2`3tFnj2W+}`~iQ9AfHAPcGFqz;Lu-33@z2@nF& zoCEG*o{%??>+)sjl9Xf~C7{rz@QI4tBVAp!j)$_ebqFI`jr+s&}b@ZmDZ3hs7+ zz5>{w#Q@gBt7FMTgb7|b#fP0ctQ=p$*)My--qcO#-pJkvG)BaL5okCR8>$Yat$TR` z0jjm^h(SA~_U=H>oO2}8Ou6gHP4UcS zhLM5)(c4CsVpYc+?n5pymnGVXD|}a)%*drSN*PzaQ-g}O#XxHTZzPJzJ4*1-c1~$b z!u~ylbHRX@L1mWxb{1<_h+980y*`xa^@%P(=^G0{4t+Q=BFZUX?@Jc^1`5Zi1OTcq z%HFnOSFay5E*NF~4Kz&b4KlCrT21gPC>ubK>;tA5AlpAcjGyp~0vymnsFfuE1)U9s z(UgRM{W>MC&NTt%Vn7ms2rn!}z?)^NoyUMo<0VcyZ%gJ7l!>MGO@feSfJk_-nZd(YB-KS zaq@muAg^j$FWVMhsQSdcYfsc8b;c&iKimx~k4-90+=6hx zZI~2bC2&dc2R;Z7S}F+vVH%El%)|X-_4S+`6lM>jO+dqj$w#NS%4K_n&0fHE8y3@5{@=EK6{A%X^vy z5r1SuuR9=Yrmmxb?w>}%#)yN#bKsnu%|locyi~d$03S~h0Qn0y2zh0AJK@d&P0!F9`5uh>A;snLm+Dcpx7Q7Zn z+uvaKC4%0K&jX?$6PH~2!4pA5{EYdpZ{T;uVe|qux|4%l0$->+EdqarF2W1bldjCb z4uWc${Gp7l5J&*M1=7p<6dcME0Y6gCCIo`!00hw702A;rFi{e|y6?_JA=^(3&{)l8 zCOaeen~{0uj!Hf%8NK~I(qeg;Q7%@*nlhZ(3#A->>6BdXg82bv;eM3<8ehd11*CEt z=xNo zBp{l&MqTD-;VVfOA>6UvclGie1WkA}+?go-^&@5QJ9auI2XKTZ23ge6NK`^I91e_EeX>SMAzCIlCj4=ee|1gucoGnq>~$ zNE211ZHItt!gdaaG#l1U`moJ(5c5x{9t4YvoGawz%jZ567|G*a6B0=aR^Nm5y1i-8 z1u51ls0}$2r5vC{Eb76Hn;?bctYkB17@Gd!p1`)iw~0`r6(fxfH@{88$QBK9ornq} zgwob$lP{_6A}Su&#GMvFus7E}t9C#1@h|_WHdL=&t+3Y9s7;RIvVi3u`i0?k1biB%a z^~RhPV`yiwg&B!ht1Stg@vT<9@88Q%!IOrVY5{(F#)rXGl0Qdm8EY#=jPJV3yW7tD zhDe3&|H(?`w^f(+Q1W{w279kc#kkqs^@cu|Uz?=|Xx6s?Y$D_xa$Lj=kx# z#`sA7VCwh8@`-hr{Iz;i$s<#Ejf3LW#$DFAdTG>;HRB@jwb+=OqTo8qGz$Fr^gtlF z-uU$sjgWcK`+AAIz5Hxbc~KoApjLB%&d4P|+Fk?~16jXHWywZ}9;@%2Fm{C?!AvcC zcc4A4f{LSiRvTECrj5TWmmoO>zJ;vIEQG!xpqSvDURtkF@O4NFTFOF&g+cM1=u^XH zI#O?tB}D2QMJ&S6RxqEWkiYa!D5}(1@jqgh>7^q4u(`1}WUEXlAh`h82Jl zpgZ&uh?h^L-9CF}Qu9o)Zn{36G2#q!7gl@R^wk_akKtEDCu$2=oD&P9B-%@3{XPni z^@qTx6z+!dK6d zYuh$J6L68@&!#=;Gwhr2{m4RisF&*-3?`f6w*jsLM(F_=CYmM0s82eNTJ0+RH$(cp zC*NaL$2-;)e=Bd#kmI1W;`RzF69-QcN+lR77Hs^NH^UbF^nDy`0QhO?84{7_J1P4U zFW&e20JNJ?g9#h#D-~uA*0N=CzC!_W)Em$$$RPgK9*do76TACy4 z?}#@tQoGNvBp4F<6@JvuCOi_ikDaISMS(a5=9huV&US>9^KKFYzl3JU6o#7r6a4yF za7%{Kj@4!hCr3&}1y#DDOW|`hZXJC%_$z-XI8vSPIAloeSGgqu4^0rfADi-WG$FFayk`yw`XQY^7D2+8R>;%(*`u;%>ne;XP4thpV4B=f(xU2t1 z3!s4w_n2QrXHElqZq!m6k84wLN}9(h!}?HQmjHV1 z$7&iY_fKjJ3wNB{nO@ura_t=@C!PclNg{Wiq)b2oU=m;?H=jf@FRSf>6sY|)95+kAjfL{qMmC%KgH!i~SXld+a$v!<)4(H!@T@@*MXdZb-X4F(3$d^(woa zomDIVLxd2Se(h!cVKM0!o+Zrk$;vczJPwzmfuTrzqU#O*vD%Hqf2*m88?6~_QynG_ zbIL~EqEw>u{En9a+k=#`(L74fHs6A>kI>>WMTN9%MdmdIYh z!F|;37?(2riPdt4kr!qPvMTRLISZ+fgjD-+icMxcX7*cI;Qxy&rYmw4YED0OD$2o_ zNp5PEj_Mx47Dv~sH`y(Bc z2~c($jVR9u-i93lp4TQks*xswCjs>b9Uz)qherVR1d=7*1i3dE&7WkX!s|C&_&L7I zhEUd3FEBkm9KcAeqeG{-uPkN_CujGJO9m=1K>~h!LO2uBvM||NlyE3yp({P7a+H&-<9X5XPWn8IPmz$ zuHGxX`4@UUFWfW&YLH@E$29z183! z1rrLaVE)6O+k8(R?w=?PT@JntW(t-A5ONtsDE^)K*r$;zjDhm3tF*ndbK!h8gUxnT z(Wn!W-6U%2bF1qR`hKbTj_el%Klhk2i7zoj1t2^u&jUounvfHBb4RTrOUGP6QTthg z?2x*}*F+6(kZ6&~gvo8GQH6V6KzpiURD*z2U?pGxoJ_R;Oel{i-wz}P_5lJQ2|W+y zFdj)vx?DqDUiMfk+3;fXJKP09Cy~8&fe#|?qvpA^+u0O)svrplN;DjxMB+n-J zn8ht>Y5ET;rS;0M+>M|h(3Ql6DCC+qu@Bx#cM<^5Qsb)Kq|dO*HGdq6ud6{<@3jF# z3^01=)EzF@rt32!R5vG!n?ab_db?A_IxCWLReLaY;H%c~ zWZv78b-Hh4xTBw(mZRUkKot6a7wBqtei~gV7kh1c6MgGCr#H(MSPcbU)KY-_(dmJm z;2AX*-Mvf%=u>2&Byx*c06D}Ht)&5w^SA?y1q*<*Zn09w7KAWzywcSg+HQPY#P#7R853)R#_LO0D8$2wN_W_uYd-cT2xe?x1v2fjUd2R zMm_3mso0EFrwZNg)vxO+55}BvF`#58>ZC!G5g-AeAdncmC6VV44!{P`0WSK~nkmuL@{64T zh`zpHli6~KU@IHw!JFi{UoZnmRb~{X{nM@YnF{axwSv`mGD;M_Z>2g1JZZrKd!!DZ zo-0I@{P9Ro)Z))f04Z|516hD%@I0^)fDS;bDo5Y|asY}z@F4==hxDNf$O9S2d})Qgup0e#OEWi#K4YD(^Zs z{>Nt(qA5S$pi^&O7f#Tg1ax>$9nk*W0?;z|+v_QRLT((VeeErwKe@B&`|%hFwKrGD zR(_KN9cZ&d9ntst-Nx=2316Z@=DxFO4MqX!Y~Md%Ad}VW+AH;at8l7gE+dK161Tky zz4%OI26cE)2t^LtwEcQD1iwU`(F{!&FN03&q_kVzWP3-DA|I`$@ZWj&Z9gDBXDd{5gO}zgPkS~3_5Te?$iMHCO#5a@9Fv6L zoq z7ufIRWY&aE2Y-Qn0|>Xq0ayXj^YywCcqB-M2x{Lt$+_ss*k%B!6njh{ zWZytng=rbHcZ-C~w#w5qm1sb)dZxq2?BB_!IY+Bxp#(w&HGbR^_*|>iw`M%}&_FgwkV2dyabZj4<^dABG7WSlH zJJq*fwo?8#2K;6ncaycvGv zPn7HV3VF%aJZhtK)ViY%yeUH?Z*3s9M{kur|FHLwGE0P9oQdD9Z%dd4ez2#f`Hx49 z6P%vr&{5{@?kjJH1okcWr8+QtO==&_kTj3r{13b9C*E`oC$?Kng>nT~&=J04==kXp zMhm?K1Dn6==P2yu($!0qG`S(yTxkO^U7)xtUqFlGD^k14C`OrTN@Y-AZA+jqbIM~q{ljWs$}z~}!>6Mmdr*9g zMv-i9l|T@(s7QWREzkYu6-BZ_nXDBOB)-fxN*Zb^L{Hmi2lx?vApz}3E8S%ihHW}P zfHS`ULs1Y!$hHqQq=nh`1sU=V(`a8;g2KB9Daic&ZoCSf`;rN=A%+%+;3`;R&3^;e z9-%|7?Dsr7e?}ib*1qIIOGb?jmzSYwMdLn?NA6Sy&$lsY;?bH25`5VOMe7Cj*SA)Q zBh%dH_~LpaeJm$$Df!(98UuxawRWfhL|}py!PSv!T|xR9>pnaaG`IJeWM790|B$Sw zL?6nMa!ohEzq&`l0za%8HVb%94r4y8`?KQZuez6x^7K7<@qIM%q>8|-QxuL1vtfJP z$rpDQX;OJ1kz&dnbTR3*hA*sp8Wb?tKe=dI%v_!GW=a=1{t5B9JbYVVEJD^2gRZ zId6-ijaelcWfX(Yw>|oPfFqI>;j` zIZ%;-fo>P~s>UDm)!TM({!V&=MVHnjXj(>Hv|KsdBF2Z?0>{*sUs&w+rO3`>TwChw z&uqR^dKME}6T%3UBMDF%jph?b2P6R|800Is@w}^hkuwbeF@#lc=oUkEJo$67?012D zZRNDdH=?E>$UYS~oug%}eJ{4Q=U=aFhmpf|JYmk-R>bmTfSWRHn#&_+-WJzr{$ur$ z33$bUmAYh=m4%HbU5raoz!T)XE`O~yBKxiQB2c7?G{@odh?jw5QnD83?`H;%ubLk9 z3QpGCP`_GD8(adKMk)KW<#jJnex7E`bflRZwwaFD;d1rj7JE<=3{Xdl%e-@X$Wt9mx)x&d^W%!pCQ%(!fjRg0*jGaH2^(jqwWJEfRWlmWf zKAw9d6QSNzJ>O%|j3Q5zzk2sJZH+ezhMx>C{!@X>5bu^vW;y&xsh!x}S(qtxEBRrf z+jl>bt7=rV$A_eFQ7aybozKT0_UK={=uGSfmPSN#J7`$DJN#7re#y-gNr5QZD40{+ zMdRU099i5TOPw0rOYM6*SYtvhDX?PlG~FUPCKDHO<>+oGZ}$c~WVc9aTUAqN+O@#> zy+q1*P86xe_1;aA^^?W3Jv4Kic((i&b|FclTVz4EAR)kbM>CfVzyk9?ze7i$@O>JH zrb0G_#;DU0XqBKUIF_ z|76ROxM6AwPo<>56+D31jPM>TAJg?w6x>k2+S)G^>F@Lf4DD7iqqM{Xd-Bh8M$ZmMH5n_h(2>@?f3T;! z%jsIqeO59rfqh*+OBi*iDd{U9*yV!8?wh~cJ)qxBca%{4D#7ySSk3Yp(98Nv(1Z zf-%v@BmD9;&=J;>O?hBQ3VBRShL!oRW1?kIaf^Q3bXHsT`zx>*y@BQ&JU!@?mc7Hm zD<9b=qh{n1x6r|vHFmN=QvJ$;y(-oBUIuZ$a9u%ZRG?6EN4C?$fV~UW=T=UWBq;{EC5LHLfbJ!iN8WB`8^^0@dxe#cLjeIwZ-=_ zHgGD4;E72>_}N4aGGiMp^%#p3Z8|%v8$Zg&sA~?^P1z|qUEY87@0(ks6pEV%cM-0HE+T2%x-ic;?;tUW@$%< z0%gp@1c7F@2daXT6}|tc8#O5Up*Kd0is|~fAEfM0_OW>X5bYp&gM)xnPG$*wdAS%z z3&vqOvwx$Fd))EJd}BmUU62xaYc$VKCeU}{3@&bsn~9{5#vuB~pQrqg52+EH=8b<) z)#ZZ@W$8AubYJoA+IQ~obr1LtJ>TlgzjGG)bNEiM;E``9_gyC5Y}s2l+~_Rf$0I$q zauT^Vx0m6I`ITPIdp*6$(|sBG#h?*a;-ac_M8hrRi+=cIsWS%qII|K=(w< zbSbj?%*1E?;-my-1^3CmX^ZQCr>+F$+sTA}&8qCpH`+ZuQR!P3~1Fx{QU9oP5X1UH(KrOJ~iq<1urq zF>)y=g?ZM$c-(6-vP}2Z76Z&LeYHl2+m+SrDeDs2UxKpi@ly_IgLlKWajcZI;YdJe z(`NqNw5!_uQoC0Yh)Wvaj?w@s0@42jx_f&8^ue6qNBo2PD!M%c_l#vJf+D#D+R<<0 zHMyj@ISh!LbQUERC?W_6A-CL?cl?;`tAxAzM;3e!`85_rE67$?;^G9}l->k6>vXvA z#spUgO$Y(r`J<|x+3>^zC+Z2(pGcZYtsiySS(v4*vM4r?fduKaO#H&V*hqMQci1rz zV0YZW(sC031+p4s04|TR{pd$FExgFySAk*sK!&jNo8vTyrqu?d<-GsghSpSP{Yb!G zs*ai>$(j!bX&BQF&2W}~nBC~nWt|QR%C7r?^@N?{VE6rq11S(e1+W*i?rKVpLs9-M z%&7+aLLflFj9iZE`c;00%pqCv*Qj+);;*jwJsm!Ku?dkE;RTh`RUuO}SBwe79Gjls zUZOL{DN^N=9_D&Jy&^9ke^Bdo*38p~m)i!WB62PnrT_d{E3MQJ`fau0+{>*fD4N!5 zzwd2dFa|=Vgp?)EEN>L%nGZ#JXe#fwJCKVvl5>(uU1}@l=zHM_O~bRN1?JPOojue6 zhorF)F*LExnvcrV)Uo$zKF(C&P#?Y1oH6|zDtwnZ9jB~ruBLY^Vtyg(nA6xmd+{n@5~UgwG9%Y&BAofFo&(D#pJ6M#}WL7_aLh_ zM?%B)fL6E#kV`^Ez z`aZKx-Z#z)^5cv)Ka!vSspp?@LN5(t_FeBr%!Y2IQ|PelUWUmx@N(ytHOOFq;h;BU z!%F4wiR3JFdYh%e8q$f|V|HJ1p7d+9?yK9^o?6w-&n9nJS+@lBM^=-hKPMJLM>r*y zm5mCstj56vnJcLNh`)ih%snH)`M~AjG#Bef<(28m&gE^j{!j0RyDa$ea#>4Kv zSO<{}E)g5ym^t{c%`#1d3fo!@IVKjd)q{&FCWqeJc_K<0%Sr>*hOo@}YJSNfu8A=~tu zPnX)n=do7i$NK&^nfHE~T}7pAO#$^i+uun9mu zsxr}Lv*6gk#ti z=KbrVqu>`y3|gVY!v}{^HCj$gQt-o1v`xO~s$^>}oOPVjSnHDbv@j^p$hI<%KbHM; zbSuMS`^^|alW3I?k1J`qSHFp8aCZtRs@-%6VrH^0NrcN`07bY0Ncv^QBX;GO9jRoV z05mzz7I^{pK4CX_rC#UOr{2+KMQ|=Iv)8Q{q>zQJWyC>Ny64;yIO#C!%n~%H!S73X zA98o+>3@}hsK;vR?E^%Io-r+Qn1c+(vzmlOdC&-zgm+Dh${FA(5HLkMHd(oxW~PFs zh~TZ-qDBRkk$%^qnxoUxhE%7wQRz!NbmtbPU``sxVCq7j&G2%ub-%gw~_LFPobfvWOm zHhu9fmVFb_?vG~awexqrMpy|Q8AX3u3pRw`+oDW0o4zo)_eK?|lT7_YYdq17#wCkY zArr`#lgIz0Zr)4jCU4lnY*6uAL4DObV^`z7{Aj&-h2jTy9TCl0>EPPH?TjGjV+&6w z5gym~q%4M9=j1=4zH9YeTE|@>W0$dcY;^n&TkjlRiL-2hPBJkjwmGqFdt%!*cWiTF z8xz~MlSwkMZQF0pdFQ@+-}#+C^L@!q@9wI#R#jJ3({qv>nm*mfZnlZOQLnYyYkeSv z`A8qVwW`iAIxU445U(ZkE8Tq61$~2hpt&}QkS!fRheMsxVnzxXC^p_(GlLDZHU|r# z;nr4|UwljV;k?JJ%L|_+g=CTkHZarup%#(y;9-r3M;-u<7MQ~H8h~3?(RF2Y?cXFG z`~iomdQpZ5!))|{%RW=bPQM=V0^0v+qrFYN*{)R85 KxTx}b(NK!&c29%OG|^k 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 z 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 zⓈ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

ld7QV*Ao*GV(K$s1p^| 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

2!cjL zDzAuDJh9xg`;l@_?+!-pOV3$pB$4!C4og^9?`L9dYOKwj&Deduw`4K|I0nv@Y#-!$ z^j*Uo+h#ULB&1q}%JIyP1x}V=jIv}PlHW0%OiX;(+!uIVp+W(KE^^d*>Y6)qbqT#m zt(CHzQ$9SdR52ttF$?*}J>7{RG;8U=NsYD>vl7&|2zlPAoV61#S%4uoV!g81IZ{`X z8T3%}6tT&R{8^;YT#=IDS5LX){gtXHlg}dq>E}84B0Cg0!TM&ON{l0mQX_oMs&-6# zJilAH=e@cislK(htCTgJ-(zYP!f!*&weZ-&T~E%f-oaEvr#4deyAE)U$-zST-ZL2@ zn{gi2Tm*JuKXvSG7w3{`j5%iT>cLGds1vw(CcCNByLkC0XAtu+g^1GP`i%JsDFd4U zeNS!j4&AYoI%MKLHf_0QKQ>^74t{7?wMzUwoac$vl-)1}Tst4gc{M=c_m=G_vjTgD z*D2Eid!=IV%$Tqg42C(fPPw%!rlL2kP5Sgkfos;#Sg=Xb+s%l|U(K~QGpg~L?aug) z%y(ezeZpMOS{ro9_vLKqV|uwwF89fgJ+=Jeo2o&1QYu#QPCNn^x{%IVo(faa8@gAJ z$GEmB!wc#DPbZSE%iU{Ys0_wj6rto1-3T0SjpXng_fZ~iQ|k)P=a^CVrv~5-eqiS^NKXEp>oTe<>!4LV1R>=~)#ur7F)*;Z*_`~g|eak1B zN{V9Wb*gXA)-12=

pN(VDOcuRh}f&Medh02U$a9OioZ-@DHuoamLxF5 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 W?MJWWg;@!JkCwWgTJ>Gq=>GwrHZeK? literal 0 HcmV?d00001 diff --git a/docs/_static/images/batch_tree.png b/docs/_static/images/batch_tree.png new file mode 100644 index 0000000000000000000000000000000000000000..b914c2ce1243669a18de871bc9e010e681298c32 GIT binary patch literal 78857 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 HOdkIir5cKD literal 0 HcmV?d00001 diff --git a/docs/index.rst b/docs/index.rst index ab4a8a1f8..ef2342d86 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -70,6 +70,7 @@ Tianshou is still under development, you can also check out the documents in sta tutorials/dqn tutorials/concepts + tutorials/batch tutorials/trick tutorials/cheatsheet diff --git a/docs/tutorials/batch.rst b/docs/tutorials/batch.rst new file mode 100644 index 000000000..390fc41ac --- /dev/null +++ b/docs/tutorials/batch.rst @@ -0,0 +1,491 @@ +.. _batch_concept: + +Understand Batch +================ + +:class:`~tianshou.data.Batch` is the internal data structure extensively used in Tianshou. It is designed to store and manipulate hierarchical named tensors. This tutorial aims to help users correctly understand the concept and the behavior of ``Batch`` so that users can make the best of Tianshou. + +The tutorial has three parts. We first explain the concept of hierarchical named tensors, and introduce basic usage of ``Batch``, followed by advanced topics of ``Batch``. + +Hierarchical Named Tensors +--------------------------- + +.. sidebar:: The structure of a Batch shown by a tree + + .. Figure:: ../_static/images/batch_tree.png + +"Hierarchical named tensors" refers to a set of tensors where their names form a hierarchy. Suppose there are four tensors ``[t1, t2, t3, t4]`` with names ``[name1, name2, name3, name4]``, where ``name1`` and ``name2`` belong to the same namespace ``name0``, then the full name of tensor ``t1`` is ``name0.name1``. That is, the hierarchy lies in the names of tensors. + +We can describe the structure of hierarchical named tensors using a tree in the right. There is always a "virtual root" node to represent the whole object; internal nodes are keys (names), and leaf nodes are values (scalars or tensors). + +Hierarchical named tensors are needed because we have to deal with the heterogeneity of reinforcement learning problems. The abstraction of RL is very simple, just:: + + state, reward, done = env.step(action) + +``reward`` and ``done`` are simple, they are mostly scalar values. However, the ``state`` and ``action`` vary with environments. For example, ``state`` can be simply a vector, a tensor, or a camera input combined with sensory input. In the last case, it is natural to store them as hierarchical named tensors. This hierarchy can go beyond ``state`` and ``action``: we can store ``state``, ``action``, ``reward``, and ``done`` together as hierarchical named tensors. + +Note that, storing hierarchical named tensors is as easy as creating nested dictionary objects: +:: + + { + 'done': done, + 'reward': reward, + 'state': { + 'camera': camera, + 'sensory': sensory + } + 'action': { + 'direct': direct, + 'point_3d': point_3d, + 'force': force, + } + } + +The real problem is how to **manipulate them**, such as adding new transition tuples into replay buffer and dealing with their heterogeneity. ``Batch`` is designed to easily create, store, and manipulate these hierarchical named tensors. + +Basic Usages +------------ + +Here we cover some basic usages of ``Batch``, describing what ``Batch`` contains, how to construct ``Batch`` objects and how to manipulate them. + +What Does Batch Contain +^^^^^^^^^^^^^^^^^^^^^^^ + +The content of ``Batch`` objects can be defined by the following rules. + +1. A ``Batch`` object can be an empty ``Batch()``, or have at least one key-value pairs. ``Batch()`` can be used to reserve keys, too. See :ref:`key_reservations` for this advanced usage. + +2. The keys are always strings (they are names of corresponding values). + +3. The values can be scalars, tensors, or Batch objects. The recurse definition makes it possible to form a hierarchy of batches. + +4. Tensors are the most important values. In short, tensors are n-dimensional arrays of the same data type. We support two types of tensors: `PyTorch `_ tensor type ``torch.Tensor`` and `NumPy `_ tensor type ``np.ndarray``. + +5. Scalars are also valid values. A scalar is a single boolean, number, or object. They can be python scalar (``False``, ``1``, ``2.3``, ``None``, ``'hello'``) or NumPy scalar (``np.bool_(True)``, ``np.int32(1)``, ``np.float64(2.3)``). They just shouldn't be mixed up with Batch/dict/tensors. + +.. note:: + + ``Batch`` cannot store ``dict`` objects, because internally ``Batch`` uses ``dict`` to store data. During construction, ``dict`` objects will be automatically converted to ``Batch`` objects. + + The data types of tensors are bool and numbers (any size of int and float as long as they are supported by NumPy or PyTorch). Besides, NumPy supports ndarray of objects and we take advantage of this feature to store non-number objects in ``Batch``. If one wants to store data that are neither boolean nor numbers (such as strings and sets), they can store the data in ``np.ndarray`` with the ``np.object`` data type. This way, ``Batch`` can store any type of python objects. + +Construction of Batch +^^^^^^^^^^^^^^^^^^^^^ + +There are two ways to construct a ``Batch`` object: from a ``dict``, or using ``kwargs``. Below are some code snippets. + +.. raw:: html + +

+ Construct Batch from dict + +.. code-block:: python + + >>> # directly passing a dict object (possibly nested) is ok + >>> data = Batch({'a': 4, 'b': [5, 5], 'c': '2312312'}) + >>> # the list will automatically be converted to numpy array + >>> data.b + array([5, 5]) + >>> data.b = np.array([3, 4, 5]) + >>> print(data) + Batch( + a: 4, + b: array([3, 4, 5]), + c: '2312312', + ) + >>> # a list of dict objects (possibly nested) will be automatically stacked + >>> data = Batch([{'a': 0.0, 'b': "hello"}, {'a': 1.0, 'b': "world"}]) + >>> print(data) + Batch( + a: array([0., 1.]), + b: array(['hello', 'world'], dtype=object), + ) + +.. raw:: html + +

+ +.. raw:: html + +
+ Construct Batch from kwargs + +.. code-block:: python + + >>> # construct a Batch with keyword arguments + >>> data = Batch(a=[4, 4], b=[5, 5], c=[None, None]) + >>> print(data) + Batch( + a: array([4, 4]), + b: array([5, 5]), + c: array([None, None], dtype=object), + ) + >>> # combining keyword arguments and batch_dict works fine + >>> data = Batch({'a':[4, 4], 'b':[5, 5]}, c=[None, None]) # the first argument is a dict, and 'c' is a keyword argument + >>> print(data) + Batch( + a: array([4, 4]), + b: array([5, 5]), + c: array([None, None], dtype=object), + ) + >>> arr = np.zeros((3, 4)) + >>> # By default, Batch only keeps the reference to the data, but it also supports data copying + >>> data = Batch(arr=arr, copy=True) # data.arr now is a copy of 'arr' + +.. raw:: html + +

+ +Data Manipulation With Batch +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Users can access the internal data by ``b.key`` or ``b[key]``, where ``b.key`` finds the sub-tree with ``key`` as the root node. If the result is a sub-tree with non-empty keys, the key-reference can be chained, i.e. ``b.key.key1.key2.key3``. When it reaches a leaf node, users get the data (scalars/tensors) stored in that ``Batch`` object. + +.. raw:: html + +
+ Access data stored in Batch + +.. code-block:: python + + >>> data = Batch(a=4, b=[5, 5]) + >>> print(data.b) + [5 5] + >>> # obj.key is equivalent to obj["key"] + >>> print(data["a"]) + 4 + >>> # iterating over data items like a dict is supported + >>> for key, value in data.items(): + >>> print(f"{key}: {value}") + a: 4 + b: [5, 5] + >>> # obj.keys() and obj.values() work just like dict.keys() and dict.values() + >>> for key in data.keys(): + >>> print(f"{key}") + a + b + >>> # obj.update() behaves like dict.update() + >>> # this is the same as data.c = 1; data.c = 2; data.e = 3; + >>> data.update(c=1, d=2, e=3) + >>> print(data) + Batch( + a: 4, + b: array([5, 5]), + c: 1, + d: 2, + e: 3, + ) + +.. raw:: html + +

+ +.. note:: + + If ``data`` is a ``dict`` object, ``for x in data`` iterates over keys in the dict. However, it has a different meaning for ``Batch`` objects: ``for x in data`` iterates over ``data[0], data[1], ..., data[-1]``. An example is given below. + +``Batch`` also partially reproduces the NumPy ndarray APIs. It supports advanced slicing, such as ``batch[:, i]`` so long as the slice is valid. Broadcast mechanism of NumPy works for ``Batch``, too. + +.. raw:: html + +
+ Length, shape, indexing, and slicing of Batch + +.. code-block:: python + + >>> # initialize Batch with tensors + >>> data = Batch(a=np.array([[0.0, 2.0], [1.0, 3.0]]), b=[[5, -5], [1, -2]]) + >>> # if values have the same length/shape, that length/shape is used for this Batch + >>> # else, check the advanced topic for details + >>> print(len(data)) + 2 + >>> print(data.shape) + [2, 2] + >>> # access the first item of all the stored tensors, while keeping the structure of Batch + >>> print(data[0]) + Batch( + a: array([0., 2.]) + b: array([ 5, -5]), + ) + >>> # iterates over ``data[0], data[1], ..., data[-1]`` + >>> for sample in data: + >>> print(sample.a) + [0. 2.] + [1. 3.] + + >>> # Advanced slicing works just fine + >>> # Arithmetic operations are passed to each value in the Batch, with broadcast enabled + >>> data[:, 1] += 1 + >>> print(data) + Batch( + a: array([[0., 3.], + [1., 4.]]), + b: array([[ 5, -4]]), + ) + + >>> # amazingly, you can directly apply np.mean to a Batch object + >>> print(np.mean(data)) + Batch( + a: 1.5, + b: -0.25, + ) + + >>> # directly converted to a list is also available + >>> list(data) + [Batch( + a: array([0., 3.]), + b: array([ 5, -4]), + ), + Batch( + a: array([1., 4.]), + b: array([ 1, -1]), + )] + +.. raw:: html + +

+ +Stacking and concatenating multiple ``Batch`` instances, or split an instance into multiple batches, they are all easy and intuitive in Tianshou. For now, we stick to the aggregation (stack/concatenate) of homogeneous (same structure) batches. Stack/Concatenation of heterogeneous batches are discussed in :ref:`aggregation`. + +.. raw:: html + +
+ Stack / Concatenate / Split of Batches + +.. code-block:: python + + >>> data_1 = Batch(a=np.array([0.0, 2.0]), b=5) + >>> data_2 = Batch(a=np.array([1.0, 3.0]), b=-5) + >>> data = Batch.stack((data_1, data_2)) + >>> print(data) + Batch( + b: array([ 5, -5]), + a: array([[0., 2.], + [1., 3.]]), + ) + >>> # split supports random shuffling + >>> data_split = list(data.split(1, shuffle=False)) + >>> print(list(data.split(1, shuffle=False))) + [Batch( + b: array([5]), + a: array([[0., 2.]]), + ), Batch( + b: array([-5]), + a: array([[1., 3.]]), + )] + >>> data_cat = Batch.cat(data_split) + >>> print(data_cat) + Batch( + b: array([ 5, -5]), + a: array([[0., 2.], + [1., 3.]]), + ) + +.. raw:: html + +

+ +Advanced Topics +--------------- + +From here on, this tutorial focuses on advanced topics of ``Batch``, including key reservation, length/shape, and aggregation of heterogeneous batches. + +.. _key_reservations: + +Key Reservations +^^^^^^^^^^^^^^^^ + +.. sidebar:: The structure of a Batch with reserved keys + + .. Figure:: ../_static/images/batch_reserve.png + +In many cases, we know in the first place what keys we have, but we do not know the shape of values until we run the environment. To deal with this, Tianshou supports key reservations: **reserve a key and use a placeholder value**. + +The usage is easy: just use ``Batch()`` to be the value of reserved keys. + +.. code-block:: python + + a = Batch(b=Batch()) # 'b' is a reserved key + # this is called hierarchical key reservation + a = Batch(b=Batch(c=Batch()), d=Batch()) # 'c' and 'd' are reserved key + # the structure of this last Batch is shown in the right figure + a = Batch(key1=tensor1, key2=tensor2, key3=Batch(key4=Batch(), key5=Batch())) + +Still, we can use a tree (in the right) to show the structure of ``Batch`` objects with reserved keys, where reserved keys are special internal nodes that do not have attached leaf nodes. + +.. note:: + + Reserved keys mean that in the future there will eventually be values attached to them. The values can be scalars, tensors, or even **Batch** objects. Understanding this is critical to understand the behavior of ``Batch`` when dealing with heterogeneous Batches. + +The introduction of reserved keys gives rise to the need to check if a key is reserved. Tianshou provides ``Batch.is_empty`` to achieve this. + +.. raw:: html + +
+ Examples of Batch.is_empty + +.. code-block:: python + + >>> Batch().is_empty() + True + >>> Batch(a=Batch(), b=Batch(c=Batch())).is_empty() + False + >>> Batch(a=Batch(), b=Batch(c=Batch())).is_empty(recurse=True) + True + >>> Batch(d=1).is_empty() + False + >>> Batch(a=np.float64(1.0)).is_empty() + False + +.. raw:: html + +

+ +The ``Batch.is_empty`` function has an option to decide whether to identify direct emptiness (just a ``Batch()``) or to identify recurse emptiness (a ``Batch`` object without any scalar/tensor leaf nodes). + +.. note:: + + Do not get confused with ``Batch.is_empty`` and ``Batch.empty``. ``Batch.empty`` and its in-place variant ``Batch.empty_`` are used to set some values to zeros or None. Check the API documentation for further details. + +Length and Shape +^^^^^^^^^^^^^^^^ + +The most common usage of ``Batch`` is to store a Batch of data. The term "Batch" comes from the deep learning community to denote a mini-batch of sampled data from the whole dataset. In this regard, "Batch" typically means a collection of tensors whose first dimensions are the same. Then the length of a ``Batch`` object is simply the batch-size. + +If all the leaf nodes in a ``Batch`` object are tensors, but they have different lengths, they can be readily stored in ``Batch``. However, for ``Batch`` of this kind, the ``len(obj)`` seems a bit ambiguous. Currently, Tianshou returns the length of the shortest tensor, but we strongly recommend that users do not use the ``len(obj)`` operator on ``Batch`` objects with tensors of different lengths. + +.. raw:: html + +
+ Examples of len and obj.shape for Batch objects + +.. code-block:: python + + >>> data = Batch(a=[5., 4.], b=np.zeros((2, 3, 4))) + >>> data.shape + [2] + >>> len(data) + 2 + >>> data[0].shape + [] + >>> len(data[0]) + TypeError: Object of type 'Batch' has no len() + +.. raw:: html + +

+ +.. note:: + + Following the convention of scientific computation, scalars have no length. If there is any scalar leaf node in a ``Batch`` object, an exception will occur when users call ``len(obj)``. + + Besides, values of reserved keys are undetermined, so they have no length, neither. Or, to be specific, values of reserved keys have lengths of **any**. When there is a mix of tensors and reserved keys, the latter will be ignored in ``len(obj)`` and the minimum length of tensors is returned. When there is not any tensor in the ``Batch`` object, Tianshou raises an exception, too. + +The ``obj.shape`` attribute of ``Batch`` behaves somewhat similar to ``len(obj)``: + +1. If all the leaf nodes in a ``Batch`` object are tensors with the same shape, that shape is returned. + +2. If all the leaf nodes in a ``Batch`` object are tensors but they have different shapes, the minimum length of each dimension is returned. + +3. If there is any scalar value in a ``Batch`` object, ``obj.shape`` returns ``[]``. + +4. The shape of reserved keys is undetermined, too. We treat their shape as ``[]``. + +.. _aggregation: + +Aggregation of Heterogeneous Batches +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +In this section, we talk about aggregation operators (stack/concatenate) on heterogeneous ``Batch`` objects. +The following picture will give you an intuitive understanding of this behavior. It shows two examples of aggregation operators with heterogeneous ``Batch``. The shapes of tensors are annotated in the leaf nodes. + +.. image:: ../_static/images/aggregation.png + +We only consider the heterogeneity in the structure of ``Batch`` objects. The aggregation operators are eventually done by NumPy/PyTorch operators (``np.stack``, ``np.concatenate``, ``torch.stack``, ``torch.cat``). Heterogeneity in values can fail these operators (such as stacking ``np.ndarray`` with ``torch.Tensor``, or stacking tensors with different shapes) and an exception will be raised. + +The behavior is natural: for keys that are not shared across all batches, batches that do not have these keys will be padded by zeros (or ``None`` if the data type is ``np.object``). It can be written in the following scripts: +:: + + >>> # examples of stack: a is missing key `b`, and b is missing key `a` + >>> a = Batch(a=np.zeros([4, 4]), common=Batch(c=np.zeros([4, 5]))) + >>> b = Batch(b=np.zeros([4, 6]), common=Batch(c=np.zeros([4, 5]))) + >>> c = Batch.stack([a, b]) + >>> c.a.shape + (2, 4, 4) + >>> c.b.shape + (2, 4, 6) + >>> c.common.c.shape + (2, 4, 5) + >>> # None or 0 is padded with appropriate shape + >>> data_1 = Batch(a=np.array([0.0, 2.0])) + >>> data_2 = Batch(a=np.array([1.0, 3.0]), b='done') + >>> data = Batch.stack((data_1, data_2)) + >>> print(data) + Batch( + a: array([[0., 2.], + [1., 3.]]), + b: array([None, 'done'], dtype=object), + ) + >>> # examples of cat: a is missing key `b`, and b is missing key `a` + >>> a = Batch(a=np.zeros([3, 4]), common=Batch(c=np.zeros([3, 5]))) + >>> b = Batch(b=np.zeros([4, 3]), common=Batch(c=np.zeros([4, 5]))) + >>> c = Batch.cat([a, b]) + >>> c.a.shape + (7, 4) + >>> c.b.shape + (7, 3) + >>> c.common.c.shape + (7, 5) + +However, there are some cases when batches are too heterogeneous that they cannot be aggregated: +:: + + >>> a = Batch(a=np.zeros([4, 4])) + >>> b = Batch(a=Batch(b=Batch())) + >>> # this will raise an exception + >>> c = Batch.stack([a, b]) + +Then how to determine if batches can be aggregated? Let's rethink the purpose of reserved keys. What is the advantage of ``a1=Batch(b=Batch())`` over ``a2=Batch()``? The only difference is that ``a1.b`` returns ``Batch()`` but ``a2.b`` raises an exception. That's to say, **we reserve keys for attribute reference**. + +We say a key chain ``k=[key1, key2, ..., keyn]`` applies to ``b`` if the expression ``b.key1.key2.{...}.keyn`` is valid, and the result is ``b[k]``. + +For a set of ``Batch`` objects denoted as :math:`S`, they can be aggregated if there exists a ``Batch`` object ``b`` satisfying the following rules: + + 1. Key chain applicability: For any object ``bi`` in :math:`S`, and any key chain ``k``, if ``bi[k]`` is valid, then ``b[k]`` is valid. + + 2. Type consistency: If ``bi[k]`` is not ``Batch()`` (the last key in the key chain is not a reserved key), then the type of ``b[k]`` should be the same as ``bi[k]`` (both should be scalar/tensor/non-empty Batch values). + +The ``Batch`` object ``b`` satisfying these rules with the minimum number of keys determines the structure of aggregating :math:`S`. The values are relatively easy to define: for any key chain ``k`` that applies to ``b``, ``b[k]`` is the stack/concatenation of ``[bi[k] for bi in S]`` (if ``k`` does not apply to ``bi``, the appropriate size of zeros or ``None`` are filled automatically). If ``bi[k]`` are all ``Batch()``, then the aggregation result is also an empty ``Batch()``. + +Miscellaneous Notes +^^^^^^^^^^^^^^^^^^^ + +1. ``Batch`` is serializable and therefore Pickle compatible. ``Batch`` objects can be saved to disk and later restored by the python ``pickle`` module. This pickle compatibility is especially important for distributed sampling from environments. + +.. raw:: html + +
+ Batch.to_torch and Batch.to_numpy + +:: + + >>> data = Batch(a=np.zeros((3, 4))) + >>> data.to_torch(dtype=torch.float32, device='cpu') + >>> print(data.a) + tensor([[0., 0., 0., 0.], + [0., 0., 0., 0.], + [0., 0., 0., 0.]]) + >>> # data.to_numpy is also available + >>> data.to_numpy() + +.. raw:: html + +

+ +2. It is often the case that the observations returned from the environment are NumPy ndarrays but the policy requires ``torch.Tensor`` for prediction and learning. In this regard, Tianshou provides helper functions to convert the stored data in-place into Numpy arrays or Torch tensors. + +3. ``obj.stack_([a, b])`` is the same as ``Batch.stack([obj, a, b])``, and ``obj.cat_([a, b])`` is the same as ``Batch.cat([obj, a, b])``. Considering the frequent requirement of concatenating two ``Batch`` objects, Tianshou also supports ``obj.cat_(a)`` to be an alias of ``obj.cat_([a])``. + +4. ``Batch.cat`` and ``Batch.cat_`` does not support ``axis`` argument as ``np.concatenate`` and ``torch.cat`` currently. + +5. ``Batch.stack`` and ``Batch.stack_`` support the ``axis`` argument so that one can stack batches besides the first dimension. But be cautious, if there are keys that are not shared across all batches, ``stack`` with ``axis != 0`` is undefined, and will cause an exception currently. diff --git a/docs/tutorials/concepts.rst b/docs/tutorials/concepts.rst index b6db4f354..1ba271ec4 100644 --- a/docs/tutorials/concepts.rst +++ b/docs/tutorials/concepts.rst @@ -14,16 +14,42 @@ Here is a more detailed description, where ``Env`` is the environment and ``Mode :align: center :height: 300 -Data Batch ----------- - -.. automodule:: tianshou.data.Batch - :members: - :noindex: +Batch +----- +Tianshou provides :class:`~tianshou.data.Batch` as the internal data structure to pass any kind of data to other methods, for example, a collector gives a :class:`~tianshou.data.Batch` to policy for learning. Let's take a look at this script: +:: -Data Buffer ------------ + >>> import torch, numpy as np + >>> from tianshou.data import Batch + >>> data = Batch(a=4, b=[5, 5], c='2312312', d=('a', -2, -3)) + >>> # the list will automatically be converted to numpy array + >>> data.b + array([5, 5]) + >>> data.b = np.array([3, 4, 5]) + >>> print(data) + Batch( + a: 4, + b: array([3, 4, 5]), + c: '2312312', + d: array(['a', '-2', '-3'], dtype=object), + ) + >>> data = Batch(obs={'index': np.zeros((2, 3))}, act=torch.zeros((2, 2))) + >>> data[:, 1] += 6 + >>> print(data[-1]) + Batch( + obs: Batch( + index: array([0., 6., 0.]), + ), + act: tensor([0., 6.]), + ) + +In short, you can define a :class:`~tianshou.data.Batch` with any key-value pair, and perform some common operations over it. + +:ref:`batch_concept` is a dedicated tutorial for :class:`~tianshou.data.Batch`. We strongly recommend every user to read it so as to correctly understand and use :class:`~tianshou.data.Batch`. + +Buffer +------ .. automodule:: tianshou.data.ReplayBuffer :members: diff --git a/test/base/test_batch.py b/test/base/test_batch.py index 4ba5d8d5a..51b8bccdb 100644 --- a/test/base/test_batch.py +++ b/test/base/test_batch.py @@ -62,6 +62,7 @@ def test_batch(): 'd': Batch(e=np.array(3.0))}]) assert len(batch2) == 1 assert Batch().shape == [] + assert Batch(a=1).shape == [] assert batch2.shape[0] == 1 with pytest.raises(IndexError): batch2[-2] diff --git a/tianshou/data/batch.py b/tianshou/data/batch.py index 7eaca1144..7e602bba8 100644 --- a/tianshou/data/batch.py +++ b/tianshou/data/batch.py @@ -29,6 +29,43 @@ def _is_batch_set(data: Any) -> bool: return False +def _is_scalar(value: Any) -> bool: + # check if the value is a scalar + # 1. python bool object, number object: isinstance(value, Number) + # 2. numpy scalar: isinstance(value, np.generic) + # 3. python object rather than dict / Batch / tensor + # the check of dict / Batch is omitted because this only checks a value. + # a dict / Batch will eventually check their values + value = np.asanyarray(value) + return value.size == 1 and not value.shape + + +def _is_number(value: Any) -> bool: + # isinstance(value, Number) checks 1, 1.0, np.int(1), np.float(1.0), etc. + # isinstance(value, np.nummber) checks np.int32(1), np.float64(1.0), etc. + # isinstance(value, np.bool_) checks np.bool_(True), etc. + is_number = isinstance(value, Number) + is_number = is_number or isinstance(value, np.number) + is_number = is_number or isinstance(value, np.bool_) + return is_number + + +def _to_array_with_correct_type(v: Any) -> np.ndarray: + # convert the value to np.ndarray + # convert to np.object data type if neither bool nor number + v = np.asanyarray(v) + if not issubclass(v.dtype.type, (np.bool_, np.number)): + v = v.astype(np.object) + if v.dtype == np.object and not v.shape: + # scalar ndarray with np.object data type is very annoying + # a=np.array([np.array({}, dtype=object), np.array({}, dtype=object)]) + # a is not array([{}, {}], dtype=object), and a[0]={} results in + # something very strange: + # array([{}, array({}, dtype=object)], dtype=object) + v = v.item(0) + return v + + def _create_value(inst: Any, size: int, stack=True) -> Union[ 'Batch', np.ndarray, torch.Tensor]: """ @@ -37,14 +74,11 @@ def _create_value(inst: Any, size: int, stack=True) -> Union[ of (10, 3, 5), otherwise (10, 5) """ has_shape = isinstance(inst, (np.ndarray, torch.Tensor)) - is_scalar = \ - isinstance(inst, Number) or \ - issubclass(inst.__class__, np.generic) or \ - (has_shape and not inst.shape) + is_scalar = _is_scalar(inst) if not stack and is_scalar: - # here we do not consider scalar types, following the - # behavior of numpy which does not support concatenation - # of zero-dimensional arrays (scalars) + # here we do not consider scalar types, following the behavior of numpy + # which does not support concatenation of zero-dimensional arrays + # (scalars) raise TypeError(f"cannot concatenate with {inst} which is scalar") if has_shape: shape = (size, *inst.shape) if stack else (size, *inst.shape[1:]) @@ -78,223 +112,36 @@ def _assert_type_keys(keys): f"keys should all be string, but got {keys}" +def _parse_value(v: Any): + if isinstance(v, (list, tuple, np.ndarray)): + if not isinstance(v, np.ndarray) and \ + all(isinstance(e, torch.Tensor) for e in v): + v = torch.stack(v) + return v + v_ = _to_array_with_correct_type(v) + if v_.dtype == np.object and _is_batch_set(v): + v = Batch(v) # list of dict / Batch + else: + # normal data list (main case) + # or actually a data list with objects + v = v_ + elif isinstance(v, dict): + v = Batch(v) + elif isinstance(v, (Batch, torch.Tensor)): + pass + else: + # scalar case, convert to ndarray + v = _to_array_with_correct_type(v) + return v + + class Batch: """Tianshou provides :class:`~tianshou.data.Batch` as the internal data structure to pass any kind of data to other methods, for example, a collector gives a :class:`~tianshou.data.Batch` to policy for learning. - Here is the usage: - :: - - >>> import numpy as np - >>> from tianshou.data import Batch - >>> data = Batch(a=4, b=[5, 5], c='2312312') - >>> # the list will automatically be converted to numpy array - >>> data.b - array([5, 5]) - >>> data.b = np.array([3, 4, 5]) - >>> print(data) - Batch( - a: 4, - b: array([3, 4, 5]), - c: '2312312', - ) - - In short, you can define a :class:`Batch` with any key-value pair. - - For Numpy arrays, only data types with ``np.object``, bool, and number are - supported. For strings or other data types, however, they can be held in - ``np.object`` arrays. - - The current implementation of Tianshou typically use 7 reserved keys in - :class:`~tianshou.data.Batch`: - - * ``obs`` the observation of step :math:`t` ; - * ``act`` the action of step :math:`t` ; - * ``rew`` the reward of step :math:`t` ; - * ``done`` the done flag of step :math:`t` ; - * ``obs_next`` the observation of step :math:`t+1` ; - * ``info`` the info of step :math:`t` (in ``gym.Env``, the ``env.step()``\ - function returns 4 arguments, and the last one is ``info``); - * ``policy`` the data computed by policy in step :math:`t`; - - For convenience, :class:`~tianshou.data.Batch` supports the mechanism of - key reservation: one can specify a key without any value, which serves as - a placeholder for the Batch object. For example, you know there will be a - key named ``obs``, but do not know the value until the simulator runs. Then - you can reserve the key ``obs``. This is done by setting the value to - ``Batch()``. - - For a Batch object, we call it "incomplete" if: (i) it is ``Batch()``; (ii) - it has reserved keys; (iii) any of its sub-Batch is incomplete. Otherwise, - the Batch object is finalized. - - Key reservation mechanism is convenient, but also causes some problem in - aggregation operators like ``stack`` or ``cat`` of Batch objects. We say - that Batch objects are compatible for aggregation with three cases: - - 1. finalized Batch objects are compatible if and only if their exists a \ - way to extend keys so that their structures are exactly the same. - - 2. incomplete Batch objects and other finalized objects are compatible if \ - their exists a way to extend keys so that incomplete Batch objects can \ - have the same structure as finalized objects. - - 3. incomplete Batch objects themselevs are compatible if their exists a \ - way to extend keys so that their structure can be the same. - - In a word, incomplete Batch objects have a set of possible structures - in the future, but finalized Batch object only have a finalized structure. - Batch objects are compatible if and only if they share at least one - commonly possible structure by extending keys. - - :class:`~tianshou.data.Batch` object can be initialized by a wide variety - of arguments, ranging from the key/value pairs or dictionary, to list and - Numpy arrays of :class:`dict` or Batch instances where each element is - considered as an individual sample and get stacked together: - :: - - >>> data = Batch([{'a': {'b': [0.0, "info"]}}]) - >>> print(data[0]) - Batch( - a: Batch( - b: array([0.0, 'info'], dtype=object), - ), - ) - - :class:`~tianshou.data.Batch` has the same API as a native Python - :class:`dict`. In this regard, one can access stored data using string key, - or iterate over stored data: - :: - - >>> data = Batch(a=4, b=[5, 5]) - >>> print(data["a"]) - 4 - >>> for key, value in data.items(): - >>> print(f"{key}: {value}") - a: 4 - b: [5, 5] - - - :class:`~tianshou.data.Batch` also partially reproduces the Numpy API for - arrays. It also supports the advanced slicing method, such as batch[:, i], - if the index is valid. You can access or iterate over the individual - samples, if any: - :: - - >>> data = Batch(a=np.array([[0.0, 2.0], [1.0, 3.0]]), b=[[5, -5]]) - >>> print(data[0]) - Batch( - a: array([0., 2.]) - b: array([ 5, -5]), - ) - >>> for sample in data: - >>> print(sample.a) - [0. 2.] - - >>> print(data.shape) - [1, 2] - >>> data[:, 1] += 1 - >>> print(data) - Batch( - a: array([[0., 3.], - [1., 4.]]), - b: array([[ 5, -4]]), - ) - - Similarly, one can also perform simple algebra on it, and stack, split or - concatenate multiple instances: - :: - - >>> data_1 = Batch(a=np.array([0.0, 2.0]), b=5) - >>> data_2 = Batch(a=np.array([1.0, 3.0]), b=-5) - >>> data = Batch.stack((data_1, data_2)) - >>> print(data) - Batch( - b: array([ 5, -5]), - a: array([[0., 2.], - [1., 3.]]), - ) - >>> print(np.mean(data)) - Batch( - b: 0.0, - a: array([0.5, 2.5]), - ) - >>> data_split = list(data.split(1, False)) - >>> print(list(data.split(1, False))) - [Batch( - b: array([5]), - a: array([[0., 2.]]), - ), Batch( - b: array([-5]), - a: array([[1., 3.]]), - )] - >>> data_cat = Batch.cat(data_split) - >>> print(data_cat) - Batch( - b: array([ 5, -5]), - a: array([[0., 2.], - [1., 3.]]), - ) - - Note that stacking of inconsistent data is also supported. In which case, - ``None`` is added in list or :class:`np.ndarray` of objects, 0 otherwise. - :: - - >>> data_1 = Batch(a=np.array([0.0, 2.0])) - >>> data_2 = Batch(a=np.array([1.0, 3.0]), b='done') - >>> data = Batch.stack((data_1, data_2)) - >>> print(data) - Batch( - a: array([[0., 2.], - [1., 3.]]), - b: array([None, 'done'], dtype=object), - ) - - Method ``empty_`` sets elements to 0 or ``None`` for ``np.object``. - :: - - >>> data.empty_() - >>> print(data) - Batch( - a: array([[0., 0.], - [0., 0.]]), - b: array([None, None], dtype=object), - ) - >>> data = Batch(a=[False, True], b={'c': [2., 'st'], 'd': [1., 0.]}) - >>> data[0] = Batch.empty(data[1]) - >>> data - Batch( - a: array([False, True]), - b: Batch( - c: array([None, 'st']), - d: array([0., 0.]), - ), - ) - - :meth:`~tianshou.data.Batch.shape` and :meth:`~tianshou.data.Batch.__len__` - methods are also provided to respectively get the shape and the length of - a :class:`Batch` instance. It mimics the Numpy API for Numpy arrays, which - means that getting the length of a scalar Batch raises an exception. - :: - - >>> data = Batch(a=[5., 4.], b=np.zeros((2, 3, 4))) - >>> data.shape - [2] - >>> len(data) - 2 - >>> data[0].shape - [] - >>> len(data[0]) - TypeError: Object of type 'Batch' has no len() - - Convenience helpers are available to convert in-place the stored data into - Numpy arrays or Torch tensors. - - Finally, note that :class:`~tianshou.data.Batch` is serializable and - therefore Pickle compatible. This is especially important for distributed - sampling. - """ + For a detailed description, please refer to :ref:`batch_concept`. + """ def __init__(self, batch_dict: Optional[Union[ dict, 'Batch', Tuple[Union[dict, 'Batch']], @@ -307,48 +154,15 @@ def __init__(self, if isinstance(batch_dict, (dict, Batch)): _assert_type_keys(batch_dict.keys()) for k, v in batch_dict.items(): - if isinstance(v, (list, tuple, np.ndarray)): - v_ = None - if not isinstance(v, np.ndarray) and \ - all(isinstance(e, torch.Tensor) for e in v): - self.__dict__[k] = torch.stack(v) - continue - else: - v_ = np.asanyarray(v) - if v_.dtype != np.object: - v = v_ # normal data list, this is the main case - if not issubclass(v.dtype.type, - (np.bool_, np.number)): - v = v.astype(np.object) - else: - if _is_batch_set(v): - v = Batch(v) # list of dict / Batch - else: - # this is actually a data list with objects - v = v_ - self.__dict__[k] = v - elif isinstance(v, dict): - self.__dict__[k] = Batch(v) - else: - self.__dict__[k] = v + self.__dict__[k] = _parse_value(v) elif _is_batch_set(batch_dict): self.stack_(batch_dict) if len(kwargs) > 0: self.__init__(kwargs, copy=copy) def __setattr__(self, key: str, value: Any): - """self[key] = value""" - if isinstance(value, list): - if _is_batch_set(value): - value = Batch(value) - else: - value = np.array(value) - if not issubclass(value.dtype.type, (np.bool_, np.number)): - value = value.astype(np.object) - elif isinstance(value, dict) or isinstance(value, np.ndarray) \ - and value.dtype == np.object and _is_batch_set(value): - value = Batch(value) - self.__dict__[key] = value + """self.key = value""" + self.__dict__[key] = _parse_value(value) def __getstate__(self): """Pickling interface. Only the actual data are serialized for both @@ -389,20 +203,13 @@ def __setitem__(self, index: Union[ str, slice, int, np.integer, np.ndarray, List[int]], value: Any) -> None: """Assign value to self[index].""" - if isinstance(value, (list, tuple)): - value = np.asanyarray(value) - if isinstance(value, np.ndarray): - if not issubclass(value.dtype.type, (np.bool_, np.number)): - value = value.astype(np.object) if isinstance(index, str): - self.__dict__[index] = value + self.__dict__[index] = _parse_value(value) return - if not isinstance(value, (dict, Batch)): - if _is_batch_set(value): - value = Batch(value) - else: - raise TypeError("Batch does not supported value type " - f"{type(value)} for item assignment.") + value = _parse_value(value) + if isinstance(value, (np.ndarray, torch.Tensor)): + raise ValueError("Batch does not supported tensor assignment." + " Use a compatible Batch or dict instead.") if not set(value.keys()).issubset(self.__dict__.keys()): raise KeyError( "Creating keys is not supported by item assignment.") @@ -431,7 +238,7 @@ def __iadd__(self, other: Union['Batch', Number, np.number]): else: self.__dict__[k] += v return self - elif isinstance(other, (Number, np.number)): + elif _is_number(other): for k, r in self.items(): if isinstance(r, Batch) and r.is_empty(): continue @@ -448,7 +255,7 @@ def __add__(self, other: Union['Batch', Number, np.number]): def __imul__(self, val: Union[Number, np.number]): """Algebraic multiplication with a scalar value in-place.""" - assert isinstance(val, (Number, np.number)), \ + assert _is_number(val), \ "Only multiplication by a number is supported." for k, r in self.__dict__.items(): if isinstance(r, Batch) and r.is_empty(): @@ -462,7 +269,7 @@ def __mul__(self, val: Union[Number, np.number]): def __itruediv__(self, val: Union[Number, np.number]): """Algebraic division with a scalar value in-place.""" - assert isinstance(val, (Number, np.number)), \ + assert _is_number(val), \ "Only division by a number is supported." for k, r in self.__dict__.items(): if isinstance(r, Batch) and r.is_empty(): @@ -524,14 +331,7 @@ def to_torch(self, dtype: Optional[torch.dtype] = None, device = torch.device(device) for k, v in self.items(): - if isinstance(v, (np.number, np.bool_, Number, np.ndarray)): - if isinstance(v, (np.number, np.bool_, Number)): - v = np.asanyarray(v) - v = torch.from_numpy(v).to(device) - if dtype is not None: - v = v.type(dtype) - self.__dict__[k] = v - elif isinstance(v, torch.Tensor): + if isinstance(v, torch.Tensor): if dtype is not None and v.dtype != dtype or \ v.device.type != device.type or \ device.index is not None and \ @@ -541,6 +341,14 @@ def to_torch(self, dtype: Optional[torch.dtype] = None, self.__dict__[k] = v.to(device) elif isinstance(v, Batch): v.to_torch(dtype, device) + else: + # ndarray or scalar + if not isinstance(v, np.ndarray): + v = np.asanyarray(v) + v = torch.from_numpy(v).to(device) + if dtype is not None: + v = v.type(dtype) + self.__dict__[k] = v def __cat(self, batches: Union['Batch', List[Union[dict, 'Batch']]], @@ -586,8 +394,7 @@ def __cat(self, # cat Batch(a=np.zeros((3, 4))) and Batch(a=Batch(b=Batch())) # will fail here v = np.concatenate(v) - if not issubclass(v.dtype.type, (np.bool_, np.number)): - v = v.astype(np.object) + v = _to_array_with_correct_type(v) self.__dict__[k] = v keys_total = set.union(*[set(b.keys()) for b in batches]) keys_reserve_or_partial = set.difference(keys_total, keys_shared) @@ -691,8 +498,7 @@ def stack_(self, self.__dict__[k] = torch.stack(v, axis) else: v = np.stack(v, axis) - if not issubclass(v.dtype.type, (np.bool_, np.number)): - v = v.astype(np.object) + v = _to_array_with_correct_type(v) self.__dict__[k] = v # all the keys keys_total = set.union(*[set(b.keys()) for b in batches]) @@ -742,7 +548,6 @@ def stack(batches: List[Union[dict, 'Batch']], axis: int = 0) -> 'Batch': (2, 4, 5) .. note:: - If there are keys that are not shared across all batches, ``stack`` with ``axis != 0`` is undefined, and will cause an exception. """ @@ -756,6 +561,26 @@ def empty_(self, index: Union[ """Return an empty a :class:`~tianshou.data.Batch` object with 0 or ``None`` filled. If ``index`` is specified, it will only reset the specific indexed-data. + :: + + >>> data.empty_() + >>> print(data) + Batch( + a: array([[0., 0.], + [0., 0.]]), + b: array([None, None], dtype=object), + ) + >>> b={'c': [2., 'st'], 'd': [1., 0.]} + >>> data = Batch(a=[False, True], b=b) + >>> data[0] = Batch.empty(data[1]) + >>> data + Batch( + a: array([False, True]), + b: Batch( + c: array([None, 'st']), + d: array([0., 0.]), + ), + ) """ for k, v in self.items(): if v is None: @@ -772,7 +597,7 @@ def empty_(self, index: Union[ else: # scalar value warnings.warn('You are calling Batch.empty on a NumPy scalar, ' 'which may cause undefined behaviors.') - if isinstance(v, (np.number, np.bool_, Number)): + if _is_number(v): self.__dict__[k] = v.__class__(0) else: self.__dict__[k] = None @@ -813,6 +638,8 @@ def __len__(self) -> int: else: raise TypeError(f"Object {v} in {self} has no len()") if len(r) == 0: + # empty batch has the shape of any, like the tensorflow '?' shape. + # So it has no length. raise TypeError(f"Object {self} has no len()") return min(r) @@ -827,7 +654,7 @@ def is_empty(self, recurse: bool = False): ``cat``, while the latter is a scalar and cannot be used in ``cat``. Another usage is in ``__len__``, where we have to skip checking the - length of recursely empty Batch. + length of recursively empty Batch. :: >>> Batch().is_empty() @@ -857,10 +684,9 @@ def shape(self) -> List[int]: data_shape = [] for v in self.__dict__.values(): try: - data_shape.append(v.shape) + data_shape.append(list(v.shape)) except AttributeError: - raise TypeError("No support for 'shape' method with " - f"type {type(v)} in class Batch.") + data_shape.append([]) return list(map(min, zip(*data_shape))) if len(data_shape) > 1 \ else data_shape[0] diff --git a/tianshou/data/buffer.py b/tianshou/data/buffer.py index f593d2a74..a2e658d32 100644 --- a/tianshou/data/buffer.py +++ b/tianshou/data/buffer.py @@ -6,9 +6,19 @@ class ReplayBuffer: """:class:`~tianshou.data.ReplayBuffer` stores data generated from - interaction between the policy and environment. It stores basically 7 types - of data, as mentioned in :class:`~tianshou.data.Batch`, based on - ``numpy.ndarray``. Here is the usage: + interaction between the policy and environment. The current implementation + of Tianshou typically use 7 reserved keys in :class:`~tianshou.data.Batch`: + + * ``obs`` the observation of step :math:`t` ; + * ``act`` the action of step :math:`t` ; + * ``rew`` the reward of step :math:`t` ; + * ``done`` the done flag of step :math:`t` ; + * ``obs_next`` the observation of step :math:`t+1` ; + * ``info`` the info of step :math:`t` (in ``gym.Env``, the ``env.step()`` \ + function returns 4 arguments, and the last one is ``info``); + * ``policy`` the data computed by policy in step :math:`t`; + + The following code snippet illustrates its usage: :: >>> import numpy as np @@ -16,13 +26,13 @@ class ReplayBuffer: >>> buf = ReplayBuffer(size=20) >>> for i in range(3): ... buf.add(obs=i, act=i, rew=i, done=i, obs_next=i + 1, info={}) - >>> len(buf) - 3 >>> buf.obs # since we set size = 20, len(buf.obs) == 20. array([0., 1., 2., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]) - + >>> # but there are only three valid items, so len(buf) == 3. + >>> len(buf) + 3 >>> buf2 = ReplayBuffer(size=10) >>> for i in range(15): ... buf2.add(obs=i, act=i, rew=i, done=i, obs_next=i + 1, info={}) From c198c60d62a5161219e8dbd012c6eb63e3758246 Mon Sep 17 00:00:00 2001 From: Alexis DUBURCQ Date: Mon, 13 Jul 2020 16:38:42 +0200 Subject: [PATCH 08/22] Vector env enable select worker (#132) * Enable selecting worker for vector env step method. * Update collector to match new vecenv selective worker behavior. * Bug fix. * Fix rebase Co-authored-by: Alexis Duburcq --- tianshou/data/batch.py | 9 ++- tianshou/data/collector.py | 9 ++- tianshou/env/vecenv.py | 136 ++++++++++++++++++------------------- 3 files changed, 78 insertions(+), 76 deletions(-) diff --git a/tianshou/data/batch.py b/tianshou/data/batch.py index 415c8f38a..23d859999 100644 --- a/tianshou/data/batch.py +++ b/tianshou/data/batch.py @@ -353,6 +353,8 @@ def __setitem__(self, index: Union[ str, slice, int, np.integer, np.ndarray, List[int]], value: Any) -> None: """Assign value to self[index].""" + if isinstance(value, (list, tuple)): + value = np.asanyarray(value) if isinstance(value, np.ndarray): if not issubclass(value.dtype.type, (np.bool_, np.number)): value = value.astype(np.object) @@ -360,8 +362,11 @@ def __setitem__(self, index: Union[ self.__dict__[index] = value return if not isinstance(value, (dict, Batch)): - raise TypeError("Batch does not supported value type " - f"{type(value)} for item assignment.") + if _is_batch_set(value): + value = Batch(value) + else: + raise TypeError("Batch does not supported value type " + f"{type(value)} for item assignment.") if not set(value.keys()).issubset(self.__dict__.keys()): raise KeyError( "Creating keys is not supported by item assignment.") diff --git a/tianshou/data/collector.py b/tianshou/data/collector.py index 40cd7390c..2bacf14f0 100644 --- a/tianshou/data/collector.py +++ b/tianshou/data/collector.py @@ -320,10 +320,13 @@ def collect(self, self._reset_state(i) obs_next = self.data.obs_next if sum(self.data.done): - obs_next = self.env.reset(np.where(self.data.done)[0]) + env_ind = np.where(self.data.done)[0] + obs_reset = self.env.reset(env_ind) if self.preprocess_fn: - obs_next = self.preprocess_fn(obs=obs_next).get( - 'obs', obs_next) + obs_next[env_ind] = self.preprocess_fn( + obs=obs_reset).get('obs', obs_reset) + else: + obs_next[env_ind] = obs_reset self.data.obs_next = obs_next if n_episode != 0: if isinstance(n_episode, list) and \ diff --git a/tianshou/env/vecenv.py b/tianshou/env/vecenv.py index 26e983560..93c388209 100644 --- a/tianshou/env/vecenv.py +++ b/tianshou/env/vecenv.py @@ -40,16 +40,12 @@ class BaseVectorEnv(ABC, gym.Env): def __init__(self, env_fns: List[Callable[[], gym.Env]]) -> None: self._env_fns = env_fns self.env_num = len(env_fns) - self._obs = None - self._rew = None - self._done = None - self._info = None def __len__(self) -> int: """Return len(self), which is the number of environments.""" return self.env_num - def __getattribute__(self, key): + def __getattribute__(self, key: str): """Switch between the default attribute getter or one looking at wrapped environment level depending on the key.""" if key not in ('observation_space', 'action_space'): @@ -58,7 +54,7 @@ def __getattribute__(self, key): return self.__getattr__(key) @abstractmethod - def __getattr__(self, key): + def __getattr__(self, key: str): """Try to retrieve an attribute from each individual wrapped environment, if it does not belong to the wrapping vector environment class.""" @@ -73,11 +69,15 @@ def reset(self, id: Optional[Union[int, List[int]]] = None): pass @abstractmethod - def step(self, action: np.ndarray + def step(self, + action: np.ndarray, + id: Optional[Union[int, List[int]]] = None ) -> Tuple[np.ndarray, np.ndarray, np.ndarray, np.ndarray]: - """Run one timestep of all the environments’ dynamics. When the end of - episode is reached, you are responsible for calling reset(id) to reset - this environment’s state. + """Run one timestep of all the environments’ dynamics if id is + ``None``, otherwise run one timestep for some environments + with given id, either an int or a list. When the end of + episode is reached, you are responsible for calling reset(id) + to reset this environment’s state. Accept a batch of action and return a tuple (obs, rew, done, info). @@ -143,24 +143,24 @@ def __getattr__(self, key): def reset(self, id: Optional[Union[int, List[int]]] = None) -> np.ndarray: if id is None: - self._obs = np.stack([e.reset() for e in self.envs]) - else: - if np.isscalar(id): - id = [id] - for i in id: - self._obs[i] = self.envs[i].reset() - return self._obs - - def step(self, action: np.ndarray + id = range(self.env_num) + elif np.isscalar(id): + id = [id] + obs = np.stack([self.envs[i].reset() for i in id]) + return obs + + def step(self, + action: np.ndarray, + id: Optional[Union[int, List[int]]] = None ) -> Tuple[np.ndarray, np.ndarray, np.ndarray, np.ndarray]: - assert len(action) == self.env_num - result = [e.step(a) for e, a in zip(self.envs, action)] - self._obs, self._rew, self._done, self._info = zip(*result) - self._obs = np.stack(self._obs) - self._rew = np.stack(self._rew) - self._done = np.stack(self._done) - self._info = np.stack(self._info) - return self._obs, self._rew, self._done, self._info + if id is None: + id = range(self.env_num) + elif np.isscalar(id): + id = [id] + assert len(action) == len(id) + result = [self.envs[i].step(action[i]) for i in id] + obs, rew, done, info = map(np.stack, zip(*result)) + return obs, rew, done, info def seed(self, seed: Optional[Union[int, List[int]]] = None) -> List[int]: if np.isscalar(seed): @@ -241,33 +241,30 @@ def __getattr__(self, key): p.send(['getattr', key]) return [p.recv() for p in self.parent_remote] - def step(self, action: np.ndarray + def step(self, + action: np.ndarray, + id: Optional[Union[int, List[int]]] = None ) -> Tuple[np.ndarray, np.ndarray, np.ndarray, np.ndarray]: - assert len(action) == self.env_num - for p, a in zip(self.parent_remote, action): - p.send(['step', a]) - result = [p.recv() for p in self.parent_remote] - self._obs, self._rew, self._done, self._info = zip(*result) - self._obs = np.stack(self._obs) - self._rew = np.stack(self._rew) - self._done = np.stack(self._done) - self._info = np.stack(self._info) - return self._obs, self._rew, self._done, self._info + if id is None: + id = range(self.env_num) + elif np.isscalar(id): + id = [id] + assert len(action) == len(id) + for i, j in enumerate(id): + self.parent_remote[j].send(['step', action[i]]) + result = [self.parent_remote[i].recv() for i in id] + obs, rew, done, info = map(np.stack, zip(*result)) + return obs, rew, done, info def reset(self, id: Optional[Union[int, List[int]]] = None) -> np.ndarray: if id is None: - for p in self.parent_remote: - p.send(['reset', None]) - self._obs = np.stack([p.recv() for p in self.parent_remote]) - return self._obs - else: - if np.isscalar(id): - id = [id] - for i in id: - self.parent_remote[i].send(['reset', None]) - for i in id: - self._obs[i] = self.parent_remote[i].recv() - return self._obs + id = range(self.env_num) + elif np.isscalar(id): + id = [id] + for i in id: + self.parent_remote[i].send(['reset', None]) + obs = np.stack([self.parent_remote[i].recv() for i in id]) + return obs def seed(self, seed: Optional[Union[int, List[int]]] = None) -> List[int]: if np.isscalar(seed): @@ -320,32 +317,29 @@ def __init__(self, env_fns: List[Callable[[], gym.Env]]) -> None: for e in env_fns] def __getattr__(self, key): - return ray.get([e.getattr.remote(key) for e in self.envs]) + return ray.get([e.__getattr__.remote(key) for e in self.envs]) - def step(self, action: np.ndarray + def step(self, + action: np.ndarray, + id: Optional[Union[int, List[int]]] = None ) -> Tuple[np.ndarray, np.ndarray, np.ndarray, np.ndarray]: - assert len(action) == self.env_num - result = ray.get([e.step.remote(a) for e, a in zip(self.envs, action)]) - self._obs, self._rew, self._done, self._info = zip(*result) - self._obs = np.stack(self._obs) - self._rew = np.stack(self._rew) - self._done = np.stack(self._done) - self._info = np.stack(self._info) - return self._obs, self._rew, self._done, self._info + if id is None: + id = range(self.env_num) + elif np.isscalar(id): + id = [id] + assert len(action) == len(id) + result = ray.get([self.envs[j].step.remote(action[i]) + for i, j in enumerate(id)]) + obs, rew, done, info = map(np.stack, zip(*result)) + return obs, rew, done, info def reset(self, id: Optional[Union[int, List[int]]] = None) -> np.ndarray: if id is None: - result_obj = [e.reset.remote() for e in self.envs] - self._obs = np.stack(ray.get(result_obj)) - else: - result_obj = [] - if np.isscalar(id): - id = [id] - for i in id: - result_obj.append(self.envs[i].reset.remote()) - for _, i in enumerate(id): - self._obs[i] = ray.get(result_obj[_]) - return self._obs + id = range(self.env_num) + elif np.isscalar(id): + id = [id] + obs = np.stack(ray.get([self.envs[i].reset.remote() for i in id])) + return obs def seed(self, seed: Optional[Union[int, List[int]]] = None) -> List[int]: if not hasattr(self.envs[0], 'seed'): From db2a4c985e07fb695f014e91980158c61757f54f Mon Sep 17 00:00:00 2001 From: youkaichao Date: Thu, 16 Jul 2020 19:36:32 +0800 Subject: [PATCH 09/22] Standardized behavior of Batch.cat and misc code refactor (#137) * code refactor; remove unused kwargs; add reward_normalization for dqn * bugfix for __setitem__ with torch.Tensor; add Batch.condense * minor fix * support cat with empty Batch * remove the dependency of is_empty on len; specify the semantic of empty Batch by test cases * support stack with empty Batch * remove condense * refactor code to reflect the shared / partial / reserved categories of keys * add is_empty(recursive=False) * doc fix * docfix and bugfix for _is_batch_set * add doc for key reservation * bugfix for algebra operators * fix cat with lens hint * code refactor * bugfix for storing None * use ValueError instead of exception * hide lens away from users * add comment for __cat * move the computation of the initial value of lens in cat_ itself. * change the place of doc string * doc fix for Batch doc string * change recursive to recurse * doc string fix * minor fix for batch doc --- test/base/test_batch.py | 71 +++++++- tianshou/data/batch.py | 261 +++++++++++++++++++++++------- tianshou/data/collector.py | 2 +- tianshou/policy/base.py | 19 ++- tianshou/policy/imitation/base.py | 2 +- tianshou/policy/modelfree/dqn.py | 7 +- tianshou/trainer/offpolicy.py | 1 - tianshou/trainer/onpolicy.py | 1 - 8 files changed, 290 insertions(+), 74 deletions(-) diff --git a/test/base/test_batch.py b/test/base/test_batch.py index 7e287e269..4ba5d8d5a 100644 --- a/test/base/test_batch.py +++ b/test/base/test_batch.py @@ -10,7 +10,12 @@ def test_batch(): assert list(Batch()) == [] assert Batch().is_empty() - assert Batch(b={'c': {}}).is_empty() + assert not Batch(b={'c': {}}).is_empty() + assert Batch(b={'c': {}}).is_empty(recurse=True) + assert not Batch(a=Batch(), b=Batch(c=Batch())).is_empty() + assert Batch(a=Batch(), b=Batch(c=Batch())).is_empty(recurse=True) + assert not Batch(d=1).is_empty() + assert not Batch(a=np.float64(1.0)).is_empty() assert len(Batch(a=[1, 2, 3], b={'c': {}})) == 3 assert not Batch(a=[1, 2, 3]).is_empty() b = Batch() @@ -109,6 +114,11 @@ def test_batch(): assert isinstance(batch5.b, Batch) assert np.allclose(batch5.b.index, [1]) + # None is a valid object and can be stored in Batch + a = Batch.stack([Batch(a=None), Batch(b=None)]) + assert a.a[0] is None and a.a[1] is None + assert a.b[0] is None and a.b[1] is None + def test_batch_over_batch(): batch = Batch(a=[3, 4, 5], b=[4, 5, 6]) @@ -162,6 +172,20 @@ def test_batch_cat_and_stack(): assert isinstance(b12_cat_in.a.d.e, np.ndarray) assert b12_cat_in.a.d.e.ndim == 1 + a = Batch(a=Batch(a=np.random.randn(3, 4))) + assert np.allclose( + np.concatenate([a.a.a, a.a.a]), + Batch.cat([a, Batch(a=Batch(a=Batch())), a]).a.a) + + # test cat with lens infer + a = Batch(a=Batch(a=np.random.randn(3, 4)), b=np.random.randn(3, 4)) + b = Batch(a=Batch(a=Batch(), t=Batch()), b=np.random.randn(3, 4)) + ans = Batch.cat([a, b, a]) + assert np.allclose(ans.a.a, + np.concatenate([a.a.a, np.zeros((3, 4)), a.a.a])) + assert np.allclose(ans.b, np.concatenate([a.b, b.b, a.b])) + assert ans.a.t.is_empty() + b12_stack = Batch.stack((b1, b2)) assert isinstance(b12_stack.a.d.e, np.ndarray) assert b12_stack.a.d.e.ndim == 2 @@ -177,6 +201,32 @@ def test_batch_cat_and_stack(): assert torch.allclose(test.b, ans.b) assert np.allclose(test.common.c, ans.common.c) + # test cat with reserved keys (values are Batch()) + b1 = Batch(a=np.random.rand(3, 4), common=Batch(c=np.random.rand(3, 5))) + b2 = Batch(a=Batch(), + b=torch.rand(4, 3), + common=Batch(c=np.random.rand(4, 5))) + test = Batch.cat([b1, b2]) + ans = Batch(a=np.concatenate([b1.a, np.zeros((4, 4))]), + b=torch.cat([torch.zeros(3, 3), b2.b]), + common=Batch(c=np.concatenate([b1.common.c, b2.common.c]))) + assert np.allclose(test.a, ans.a) + assert torch.allclose(test.b, ans.b) + assert np.allclose(test.common.c, ans.common.c) + + # test cat with all reserved keys (values are Batch()) + b1 = Batch(a=Batch(), common=Batch(c=np.random.rand(3, 5))) + b2 = Batch(a=Batch(), + b=torch.rand(4, 3), + common=Batch(c=np.random.rand(4, 5))) + test = Batch.cat([b1, b2]) + ans = Batch(a=Batch(), + b=torch.cat([torch.zeros(3, 3), b2.b]), + common=Batch(c=np.concatenate([b1.common.c, b2.common.c]))) + assert ans.a.is_empty() + assert torch.allclose(test.b, ans.b) + assert np.allclose(test.common.c, ans.common.c) + # test stack with compatible keys b3 = Batch(a=np.zeros((3, 4)), b=torch.ones((2, 5)), @@ -205,6 +255,25 @@ def test_batch_cat_and_stack(): assert np.allclose(d.c, [3, 0, 7]) assert np.allclose(d.d, [0, 6, 9]) + # test stack with empty Batch() + assert Batch.stack([Batch(), Batch(), Batch()]).is_empty() + a = Batch(a=1, b=2, c=3, d=Batch(), e=Batch()) + b = Batch(a=4, b=5, d=6, e=Batch()) + c = Batch(c=7, b=6, d=9, e=Batch()) + d = Batch.stack([a, b, c]) + assert np.allclose(d.a, [1, 4, 0]) + assert np.allclose(d.b, [2, 5, 6]) + assert np.allclose(d.c, [3, 0, 7]) + assert np.allclose(d.d, [0, 6, 9]) + assert d.e.is_empty() + b1 = Batch(a=Batch(), common=Batch(c=np.random.rand(4, 5))) + b2 = Batch(b=Batch(), common=Batch(c=np.random.rand(4, 5))) + test = Batch.stack([b1, b2], axis=-1) + assert test.a.is_empty() + assert test.b.is_empty() + assert np.allclose(test.common.c, + np.stack([b1.common.c, b2.common.c], axis=-1)) + b1 = Batch(a=np.random.rand(4, 4), common=Batch(c=np.random.rand(4, 5))) b2 = Batch(b=torch.rand(4, 6), common=Batch(c=np.random.rand(4, 5))) test = Batch.stack([b1, b2]) diff --git a/tianshou/data/batch.py b/tianshou/data/batch.py index 23d859999..7eaca1144 100644 --- a/tianshou/data/batch.py +++ b/tianshou/data/batch.py @@ -14,11 +14,17 @@ def _is_batch_set(data: Any) -> bool: + # Batch set is a list/tuple of dict/Batch objects, + # or 1-D np.ndarray with np.object type, + # where each element is a dict/Batch object if isinstance(data, (list, tuple)): if len(data) > 0 and all(isinstance(e, (dict, Batch)) for e in data): return True elif isinstance(data, np.ndarray) and data.dtype == np.object: - if all(isinstance(e, (dict, Batch)) for e in data.tolist()): + # ``for e in data`` will just unpack the first dimension, + # but data.tolist() will flatten ndarray of objects + # so do not use data.tolist() + if all(isinstance(e, (dict, Batch)) for e in data): return True return False @@ -39,7 +45,7 @@ def _create_value(inst: Any, size: int, stack=True) -> Union[ # here we do not consider scalar types, following the # behavior of numpy which does not support concatenation # of zero-dimensional arrays (scalars) - raise TypeError(f"cannot cat {inst} with which is scalar") + raise TypeError(f"cannot concatenate with {inst} which is scalar") if has_shape: shape = (size, *inst.shape) if stack else (size, *inst.shape[1:]) if isinstance(inst, np.ndarray): @@ -95,9 +101,9 @@ class Batch: In short, you can define a :class:`Batch` with any key-value pair. - For Numpy arrays, only data types with ``np.object``, bool, and number - are supported. For strings or other data types, however, they can be - held in ``np.object`` arrays. + For Numpy arrays, only data types with ``np.object``, bool, and number are + supported. For strings or other data types, however, they can be held in + ``np.object`` arrays. The current implementation of Tianshou typically use 7 reserved keys in :class:`~tianshou.data.Batch`: @@ -108,9 +114,39 @@ class Batch: * ``done`` the done flag of step :math:`t` ; * ``obs_next`` the observation of step :math:`t+1` ; * ``info`` the info of step :math:`t` (in ``gym.Env``, the ``env.step()``\ - function returns 4 arguments, and the last one is ``info``); + function returns 4 arguments, and the last one is ``info``); * ``policy`` the data computed by policy in step :math:`t`; + For convenience, :class:`~tianshou.data.Batch` supports the mechanism of + key reservation: one can specify a key without any value, which serves as + a placeholder for the Batch object. For example, you know there will be a + key named ``obs``, but do not know the value until the simulator runs. Then + you can reserve the key ``obs``. This is done by setting the value to + ``Batch()``. + + For a Batch object, we call it "incomplete" if: (i) it is ``Batch()``; (ii) + it has reserved keys; (iii) any of its sub-Batch is incomplete. Otherwise, + the Batch object is finalized. + + Key reservation mechanism is convenient, but also causes some problem in + aggregation operators like ``stack`` or ``cat`` of Batch objects. We say + that Batch objects are compatible for aggregation with three cases: + + 1. finalized Batch objects are compatible if and only if their exists a \ + way to extend keys so that their structures are exactly the same. + + 2. incomplete Batch objects and other finalized objects are compatible if \ + their exists a way to extend keys so that incomplete Batch objects can \ + have the same structure as finalized objects. + + 3. incomplete Batch objects themselevs are compatible if their exists a \ + way to extend keys so that their structure can be the same. + + In a word, incomplete Batch objects have a set of possible structures + in the future, but finalized Batch object only have a finalized structure. + Batch objects are compatible if and only if they share at least one + commonly possible structure by extending keys. + :class:`~tianshou.data.Batch` object can be initialized by a wide variety of arguments, ranging from the key/value pairs or dictionary, to list and Numpy arrays of :class:`dict` or Batch instances where each element is @@ -126,8 +162,8 @@ class Batch: ) :class:`~tianshou.data.Batch` has the same API as a native Python - :class:`dict`. In this regard, one can access stored data using string - key, or iterate over stored data: + :class:`dict`. In this regard, one can access stored data using string key, + or iterate over stored data: :: >>> data = Batch(a=4, b=[5, 5]) @@ -153,7 +189,7 @@ class Batch: ) >>> for sample in data: >>> print(sample.a) - [0., 2.] + [0. 2.] >>> print(data.shape) [1, 2] @@ -341,7 +377,7 @@ def __getitem__(self, index: Union[ if len(batch_items) > 0: b = Batch() for k, v in batch_items: - if isinstance(v, Batch) and len(v.__dict__) == 0: + if isinstance(v, Batch) and v.is_empty(): b.__dict__[k] = Batch() else: b.__dict__[k] = v[index] @@ -376,8 +412,9 @@ def __setitem__(self, index: Union[ except KeyError: if isinstance(val, Batch): self.__dict__[key][index] = Batch() - elif isinstance(val, np.ndarray) and \ - issubclass(val.dtype.type, (np.bool_, np.number)): + elif isinstance(val, torch.Tensor) or \ + (isinstance(val, np.ndarray) and + issubclass(val.dtype.type, (np.bool_, np.number))): self.__dict__[key][index] = 0 else: self.__dict__[key][index] = None @@ -389,14 +426,14 @@ def __iadd__(self, other: Union['Batch', Number, np.number]): for (k, r), v in zip(self.__dict__.items(), other.__dict__.values()): # TODO are keys consistent? - if r is None: + if isinstance(r, Batch) and r.is_empty(): continue else: self.__dict__[k] += v return self elif isinstance(other, (Number, np.number)): for k, r in self.items(): - if r is None: + if isinstance(r, Batch) and r.is_empty(): continue else: self.__dict__[k] += other @@ -413,7 +450,9 @@ def __imul__(self, val: Union[Number, np.number]): """Algebraic multiplication with a scalar value in-place.""" assert isinstance(val, (Number, np.number)), \ "Only multiplication by a number is supported." - for k in self.__dict__.keys(): + for k, r in self.__dict__.items(): + if isinstance(r, Batch) and r.is_empty(): + continue self.__dict__[k] *= val return self @@ -425,7 +464,9 @@ def __itruediv__(self, val: Union[Number, np.number]): """Algebraic division with a scalar value in-place.""" assert isinstance(val, (Number, np.number)), \ "Only division by a number is supported." - for k in self.__dict__.keys(): + for k, r in self.__dict__.items(): + if isinstance(r, Batch) and r.is_empty(): + continue self.__dict__[k] /= val return self @@ -501,50 +542,106 @@ def to_torch(self, dtype: Optional[torch.dtype] = None, elif isinstance(v, Batch): v.to_torch(dtype, device) - def cat_(self, - batches: Union['Batch', List[Union[dict, 'Batch']]]) -> None: - """Concatenate a list of (or one) :class:`~tianshou.data.Batch` objects - into current batch. + def __cat(self, + batches: Union['Batch', List[Union[dict, 'Batch']]], + lens: List[int]) -> None: + """:: + + >>> a = Batch(a=np.random.randn(3, 4)) + >>> x = Batch(a=a, b=np.random.randn(4, 4)) + >>> y = Batch(a=Batch(a=Batch()), b=np.random.randn(4, 4)) + + If we want to concatenate x and y, we want to pad y.a.a with zeros. + Without ``lens`` as a hint, when we concatenate x.a and y.a, we would + not be able to know how to pad y.a. So ``Batch.cat_`` should compute + the ``lens`` to give ``Batch.__cat`` a hint. + :: + + >>> ans = Batch.cat([x, y]) + >>> # this is equivalent to the following line + >>> ans = Batch(); ans.__cat([x, y], lens=[3, 4]) + >>> # this lens is equal to [len(a), len(b)] """ - if isinstance(batches, Batch): - batches = [batches] - if len(batches) == 0: - return - batches = [x if isinstance(x, Batch) else Batch(x) for x in batches] - if len(self.__dict__) > 0: - batches = [self] + list(batches) # partial keys will be padded by zeros # with the shape of [len, rest_shape] - lens = [len(x) for x in batches] sum_lens = [0] for x in lens: sum_lens.append(sum_lens[-1] + x) - keys_map = list(map(lambda e: set(e.keys()), batches)) + # collect non-empty keys + keys_map = [ + set(k for k, v in batch.items() + if not (isinstance(v, Batch) and v.is_empty())) + for batch in batches] keys_shared = set.intersection(*keys_map) values_shared = [[e[k] for e in batches] for k in keys_shared] _assert_type_keys(keys_shared) for k, v in zip(keys_shared, values_shared): if all(isinstance(e, (dict, Batch)) for e in v): - self.__dict__[k] = Batch.cat(v) + batch_holder = Batch() + batch_holder.__cat(v, lens=lens) + self.__dict__[k] = batch_holder elif all(isinstance(e, torch.Tensor) for e in v): self.__dict__[k] = torch.cat(v) else: + # cat Batch(a=np.zeros((3, 4))) and Batch(a=Batch(b=Batch())) + # will fail here v = np.concatenate(v) if not issubclass(v.dtype.type, (np.bool_, np.number)): v = v.astype(np.object) self.__dict__[k] = v - keys_partial = set.union(*keys_map) - keys_shared - _assert_type_keys(keys_partial) + keys_total = set.union(*[set(b.keys()) for b in batches]) + keys_reserve_or_partial = set.difference(keys_total, keys_shared) + _assert_type_keys(keys_reserve_or_partial) + # keys that are reserved in all batches + keys_reserve = set.difference(keys_total, set.union(*keys_map)) + # keys that occur only in some batches, but not all + keys_partial = keys_reserve_or_partial.difference(keys_reserve) + for k in keys_reserve: + # reserved keys + self.__dict__[k] = Batch() for k in keys_partial: for i, e in enumerate(batches): - val = e.get(k, None) - if val is not None: - try: - self.__dict__[k][sum_lens[i]:sum_lens[i + 1]] = val - except KeyError: - self.__dict__[k] = \ - _create_value(val, sum_lens[-1], stack=False) - self.__dict__[k][sum_lens[i]:sum_lens[i + 1]] = val + if k not in e.__dict__: + continue + val = e.get(k) + if isinstance(val, Batch) and val.is_empty(): + continue + try: + self.__dict__[k][sum_lens[i]:sum_lens[i + 1]] = val + except KeyError: + self.__dict__[k] = \ + _create_value(val, sum_lens[-1], stack=False) + self.__dict__[k][sum_lens[i]:sum_lens[i + 1]] = val + + def cat_(self, + batches: Union['Batch', List[Union[dict, 'Batch']]]) -> None: + """Concatenate a list of (or one) :class:`~tianshou.data.Batch` objects + into current batch. + """ + if isinstance(batches, Batch): + batches = [batches] + if len(batches) == 0: + return + batches = [x if isinstance(x, Batch) else Batch(x) for x in batches] + + # x.is_empty() means that x is Batch() and should be ignored + batches = [x for x in batches if not x.is_empty()] + try: + # x.is_empty(recurse=True) here means x is a nested empty batch + # like Batch(a=Batch), and we have to treat it as length zero and + # keep it. + lens = [0 if x.is_empty(recurse=True) else len(x) + for x in batches] + except TypeError as e: + e2 = ValueError( + f'Batch.cat_ meets an exception. Maybe because there is ' + f'any scalar in {batches} but Batch.cat_ does not support' + f'the concatenation of scalar.') + raise Exception([e, e2]) + if not self.is_empty(): + batches = [self] + list(batches) + lens = [0 if self.is_empty(recurse=True) else len(self)] + lens + return self.__cat(batches, lens) @staticmethod def cat(batches: List[Union[dict, 'Batch']]) -> 'Batch': @@ -577,9 +674,13 @@ def stack_(self, if len(batches) == 0: return batches = [x if isinstance(x, Batch) else Batch(x) for x in batches] - if len(self.__dict__) > 0: + if not self.is_empty(): batches = [self] + list(batches) - keys_map = list(map(lambda e: set(e.keys()), batches)) + # collect non-empty keys + keys_map = [ + set(k for k, v in batch.items() + if not (isinstance(v, Batch) and v.is_empty())) + for batch in batches] keys_shared = set.intersection(*keys_map) values_shared = [[e[k] for e in batches] for k in keys_shared] _assert_type_keys(keys_shared) @@ -593,22 +694,35 @@ def stack_(self, if not issubclass(v.dtype.type, (np.bool_, np.number)): v = v.astype(np.object) self.__dict__[k] = v - keys_partial = set.difference(set.union(*keys_map), keys_shared) + # all the keys + keys_total = set.union(*[set(b.keys()) for b in batches]) + # keys that are reserved in all batches + keys_reserve = set.difference(keys_total, set.union(*keys_map)) + # keys that are either partial or reserved + keys_reserve_or_partial = set.difference(keys_total, keys_shared) + # keys that occur only in some batches, but not all + keys_partial = keys_reserve_or_partial.difference(keys_reserve) if keys_partial and axis != 0: raise ValueError( f"Stack of Batch with non-shared keys {keys_partial} " f"is only supported with axis=0, but got axis={axis}!") - _assert_type_keys(keys_partial) + _assert_type_keys(keys_reserve_or_partial) + for k in keys_reserve: + # reserved keys + self.__dict__[k] = Batch() for k in keys_partial: for i, e in enumerate(batches): - val = e.get(k, None) - if val is not None: - try: - self.__dict__[k][i] = val - except KeyError: - self.__dict__[k] = \ - _create_value(val, len(batches)) - self.__dict__[k][i] = val + if k not in e.__dict__: + continue + val = e.get(k) + if isinstance(val, Batch) and val.is_empty(): + continue + try: + self.__dict__[k][i] = val + except KeyError: + self.__dict__[k] = \ + _create_value(val, len(batches)) + self.__dict__[k][i] = val @staticmethod def stack(batches: List[Union[dict, 'Batch']], axis: int = 0) -> 'Batch': @@ -691,26 +805,53 @@ def __len__(self) -> int: """Return len(self).""" r = [] for v in self.__dict__.values(): - if isinstance(v, Batch) and v.is_empty(): + if isinstance(v, Batch) and v.is_empty(recurse=True): continue elif hasattr(v, '__len__') and (not isinstance( v, (np.ndarray, torch.Tensor)) or v.ndim > 0): r.append(len(v)) else: - raise TypeError("Object of type 'Batch' has no len()") + raise TypeError(f"Object {v} in {self} has no len()") if len(r) == 0: - raise TypeError("Object of type 'Batch' has no len()") + raise TypeError(f"Object {self} has no len()") return min(r) - def is_empty(self): - return not any( - not x.is_empty() if isinstance(x, Batch) - else hasattr(x, '__len__') and len(x) > 0 for x in self.values()) + def is_empty(self, recurse: bool = False): + """ + Test if a Batch is empty. If ``recurse=True``, it further tests the + values of the object; else it only tests the existence of any key. + + ``b.is_empty(recurse=True)`` is mainly used to distinguish + ``Batch(a=Batch(a=Batch()))`` and ``Batch(a=1)``. They both raise + exceptions when applied to ``len()``, but the former can be used in + ``cat``, while the latter is a scalar and cannot be used in ``cat``. + + Another usage is in ``__len__``, where we have to skip checking the + length of recursely empty Batch. + :: + + >>> Batch().is_empty() + True + >>> Batch(a=Batch(), b=Batch(c=Batch())).is_empty() + False + >>> Batch(a=Batch(), b=Batch(c=Batch())).is_empty(recurse=True) + True + >>> Batch(d=1).is_empty() + False + >>> Batch(a=np.float64(1.0)).is_empty() + False + """ + if len(self.__dict__) == 0: + return True + if not recurse: + return False + return all(False if not isinstance(x, Batch) + else x.is_empty(recurse=True) for x in self.values()) @property def shape(self) -> List[int]: """Return self.shape.""" - if len(self.__dict__.keys()) == 0: + if self.is_empty(): return [] else: data_shape = [] diff --git a/tianshou/data/collector.py b/tianshou/data/collector.py index 2bacf14f0..98c62daa2 100644 --- a/tianshou/data/collector.py +++ b/tianshou/data/collector.py @@ -98,7 +98,7 @@ def __init__(self, stat_size: Optional[int] = 100, action_noise: Optional[BaseNoise] = None, reward_metric: Optional[Callable[[np.ndarray], float]] = None, - **kwargs) -> None: + ) -> None: super().__init__() self.env = env self.env_num = 1 diff --git a/tianshou/policy/base.py b/tianshou/policy/base.py index 335d7e86a..e75374228 100644 --- a/tianshou/policy/base.py +++ b/tianshou/policy/base.py @@ -108,7 +108,8 @@ def compute_episodic_return( batch: Batch, v_s_: Optional[Union[np.ndarray, torch.Tensor]] = None, gamma: float = 0.99, - gae_lambda: float = 0.95) -> Batch: + gae_lambda: float = 0.95, + ) -> Batch: """Compute returns over given full-length episodes, including the implementation of Generalized Advantage Estimator (arXiv:1506.02438). @@ -124,18 +125,19 @@ def compute_episodic_return( :return: a Batch. The result will be stored in batch.returns. """ + rew = batch.rew if v_s_ is None: - v_s_ = batch.rew * 0. + v_s_ = rew * 0. else: if not isinstance(v_s_, np.ndarray): v_s_ = np.array(v_s_, np.float) - v_s_ = v_s_.reshape(batch.rew.shape) + v_s_ = v_s_.reshape(rew.shape) returns = np.roll(v_s_, 1, axis=0) m = (1. - batch.done) * gamma - delta = batch.rew + v_s_ * m - returns + delta = rew + v_s_ * m - returns m *= gae_lambda gae = 0. - for i in range(len(batch.rew) - 1, -1, -1): + for i in range(len(rew) - 1, -1, -1): gae = delta[i] + m[i] * gae returns[i] += gae batch.returns = returns @@ -149,7 +151,7 @@ def compute_nstep_return( target_q_fn: Callable[[ReplayBuffer, np.ndarray], torch.Tensor], gamma: float = 0.99, n_step: int = 1, - rew_norm: bool = False + rew_norm: bool = False, ) -> np.ndarray: r"""Compute n-step return for Q-learning targets: @@ -180,8 +182,9 @@ def compute_nstep_return( :return: a Batch. The result will be stored in batch.returns as a torch.Tensor with shape (bsz, ). """ + rew = buffer.rew if rew_norm: - bfr = buffer.rew[:min(len(buffer), 1000)] # avoid large buffer + bfr = rew[:min(len(buffer), 1000)] # avoid large buffer mean, std = bfr.mean(), bfr.std() if np.isclose(std, 0): mean, std = 0, 1 @@ -189,7 +192,7 @@ def compute_nstep_return( mean, std = 0, 1 returns = np.zeros_like(indice) gammas = np.zeros_like(indice) + n_step - done, rew, buf_len = buffer.done, buffer.rew, len(buffer) + done, buf_len = buffer.done, len(buffer) for n in range(n_step - 1, -1, -1): now = (indice + n) % buf_len gammas[done[now] > 0] = n diff --git a/tianshou/policy/imitation/base.py b/tianshou/policy/imitation/base.py index 57bdba933..c01e45fd0 100644 --- a/tianshou/policy/imitation/base.py +++ b/tianshou/policy/imitation/base.py @@ -23,7 +23,7 @@ class ImitationPolicy(BasePolicy): """ def __init__(self, model: torch.nn.Module, optim: torch.optim.Optimizer, - mode: str = 'continuous', **kwargs) -> None: + mode: str = 'continuous') -> None: super().__init__() self.model = model self.optim = optim diff --git a/tianshou/policy/modelfree/dqn.py b/tianshou/policy/modelfree/dqn.py index c34ba4e04..eb6f29878 100644 --- a/tianshou/policy/modelfree/dqn.py +++ b/tianshou/policy/modelfree/dqn.py @@ -21,6 +21,8 @@ class DQNPolicy(BasePolicy): ahead. :param int target_update_freq: the target network update frequency (``0`` if you do not use the target network). + :param bool reward_normalization: normalize the reward to Normal(0, 1), + defaults to ``False``. .. seealso:: @@ -34,6 +36,7 @@ def __init__(self, discount_factor: float = 0.99, estimation_step: int = 1, target_update_freq: Optional[int] = 0, + reward_normalization: bool = False, **kwargs) -> None: super().__init__(**kwargs) self.model = model @@ -49,6 +52,7 @@ def __init__(self, if self._target: self.model_old = deepcopy(self.model) self.model_old.eval() + self._rew_norm = reward_normalization def set_eps(self, eps: float) -> None: """Set the eps for epsilon-greedy exploration.""" @@ -94,7 +98,8 @@ def process_fn(self, batch: Batch, buffer: ReplayBuffer, to :math:`Q_{new}`. """ batch = self.compute_nstep_return( - batch, buffer, indice, self._target_q, self._gamma, self._n_step) + batch, buffer, indice, self._target_q, + self._gamma, self._n_step, self._rew_norm) if isinstance(buffer, PrioritizedReplayBuffer): batch.update_weight = buffer.update_weight batch.indice = indice diff --git a/tianshou/trainer/offpolicy.py b/tianshou/trainer/offpolicy.py index 1e1272157..5cecd0570 100644 --- a/tianshou/trainer/offpolicy.py +++ b/tianshou/trainer/offpolicy.py @@ -27,7 +27,6 @@ def offpolicy_trainer( writer: Optional[SummaryWriter] = None, log_interval: int = 1, verbose: bool = True, - **kwargs ) -> Dict[str, Union[float, str]]: """A wrapper for off-policy trainer procedure. diff --git a/tianshou/trainer/onpolicy.py b/tianshou/trainer/onpolicy.py index e3849fe88..5f7ae7694 100644 --- a/tianshou/trainer/onpolicy.py +++ b/tianshou/trainer/onpolicy.py @@ -27,7 +27,6 @@ def onpolicy_trainer( writer: Optional[SummaryWriter] = None, log_interval: int = 1, verbose: bool = True, - **kwargs ) -> Dict[str, Union[float, str]]: """A wrapper for on-policy trainer procedure. From c7ecb4adebc5c776f9a00f0b2761c78e9084f852 Mon Sep 17 00:00:00 2001 From: youkaichao Date: Sun, 19 Jul 2020 15:20:35 +0800 Subject: [PATCH 10/22] write tutorials to specify the standard of Batch (#142) * add doc for len exceptions * doc move; unify is_scalar_value function * remove some issubclass check * bugfix for shape of Batch(a=1) * keep moving doc * keep writing batch tutorial * draft version of Batch tutorial done * improving doc * keep improving doc * batch tutorial done * rename _is_number * rename _is_scalar * shape property do not raise exception * restore some doc string * grammarly [ci skip] * grammarly + fix warning of building docs * polish docs * trim and re-arrange batch tutorial * go straight to the point * minor fix for batch doc * add shape / len in basic usage * keep improving tutorial * unify _to_array_with_correct_type to remove duplicate code * delegate type convertion to Batch.__init__ * further delegate type convertion to Batch.__init__ * bugfix for setattr * add a _parse_value function * remove dummy function call * polish docs Co-authored-by: Trinkle23897 <463003665@qq.com> --- docs/_static/images/aggregation.png | Bin 0 -> 213239 bytes docs/_static/images/batch_reserve.png | Bin 0 -> 75769 bytes docs/_static/images/batch_tree.png | Bin 0 -> 78857 bytes docs/index.rst | 1 + docs/tutorials/batch.rst | 491 ++++++++++++++++++++++++++ docs/tutorials/concepts.rst | 42 ++- test/base/test_batch.py | 1 + tianshou/data/batch.py | 402 ++++++--------------- tianshou/data/buffer.py | 22 +- 9 files changed, 657 insertions(+), 302 deletions(-) create mode 100644 docs/_static/images/aggregation.png create mode 100644 docs/_static/images/batch_reserve.png create mode 100644 docs/_static/images/batch_tree.png create mode 100644 docs/tutorials/batch.rst diff --git a/docs/_static/images/aggregation.png b/docs/_static/images/aggregation.png new file mode 100644 index 0000000000000000000000000000000000000000..dbcd9b33d5b619308bbc079005e8a5574d5c0577 GIT binary patch literal 213239 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 z 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

ld7QV*Ao*GV(K$s1p^| zzk%u?`@%KyRYX_{%bxp!d5}>?3pg3h!%6RrHK?|K)H}UOANMFy< zg3xOXL1jr79L?|6&iwWAJhq%;`g<@Tc;+Jv%aB1tMndk5SS>E(k8ojhQ%Zz@hV9o9 z$~Q@SX2ow;5bmfXHq9|PP0|hitcC%Uz*n66(ALrh*YH(rkDeC&|G5*{pOrH@f-E~5 za&=l~+Ze)f?D7mJ-40`IOOQecdwS&3M{0YSmYa2WHL4C!!BIdpY)`s>0}*01^)ImL zd@doqo}KvR+ok3JLnOeCI~ zA6YyaO>pO1Xl7UK1hj)%lk&hn!sARhFkhqow|aY-xtCZQ(ES>^kQ?6gnVa z_aoLM14Nex(S?dI$5@cqh25-Q~9qIaaGl z&*RQHq!hJ_EGUd1JLp&BBh+Ai-zwM4{Q8cdcm0@^0_6j!Z&y7FN{lnU0E!JT9dJk+ z_Z5`O%2&6g!C^0daGt*kwdU-2%jvn5EbC_+JiVV(+h6?f#2P|<(BX$V9j;w;pKcri zf^C$_JQjx;hco&IyKtn+*Z1#mYE`34Oy z_;p0AZ{LMi6g$7aD4**C9X6B)PO^V8WSm5%$(Nio<(px9B>2bnv)mlO?&Mq=jcu{U zD^v}8oz2i_v48DgJftrN)xS)*s#~7}g>9Qln1<=k;Li~8ZseVE0t}1lA7Z<)dbPR= z@9JQdI{S8wrA0+J!uB`oM!;$EcvP8sSrbAmQIG3bGkqxs_vuqbmNwC=q8iLj-}(nk z2mBDcl>?Y?EjBkOE-2ex7vJRAZmOWbHgpn{H5|GIgcpf%NX`?_C567V>YZg;PsjDA zBYR{V-zHeomfss#rHiVPZuyP0eLSrM|yzK^7te{~?-MXaFs-0>+Zai)|wN^5U&m^C! z@w5 zwZ}$Vfa3OwED!MzSg)Glo?&ZH|oX z-Z#IMmBXdW)fBAo(x2995KUmxDTyh00jgF}Mp|Wy!2Bl-&O<(@rXF~LDXMp;<-V%m zQL!CI(8|CGP~)#*XI#Fh@t>KA0a{^u;kGPt#lilT?`*J!?gPWXSQ z5{Av=uEubA5Szt}4AC*2)YM;?%r5z9F51(l^LWk5PdUvpYs#y_YE88H2*&C!bG3l} zkt0(32m7*`>~8`*tBf`cdqbDojyYl1dvf=8F&CDP-CSPF_cIN^0D2Gzy4qv;n4N0$ zlYW`Kr|gscHTFnsZ(qGZW{@dQOq`})DX-YMXBd}c?@7QBW$wi`o{=r>-WP;Sz|#l|m)1+Dq2%|y}|GYhoJ@fN(Kl*@kzkPEQpjAmr@3Oy^AfIezl0GSvbyid8 zz-ig$p$Qp;1aw9gnAWS6P7OXI=`2TNF;7$&VuQa>F;)sF5>{$(_9*P??Pm$LRh6He z>zlNbTs?ExJS=R}+@gp0jk3U_s~5`}-BUsY<3nHljc`4I-73Sejj4&mk2M$L6MQFw ziBS4aIsQ{{0R@Nz3cgjVEmrCM4EAazzuJ0xXb^ikRTaj*!fr-BHT;SlbsR$}L#$S{ zrZxz8Dh!Onf@(&qMqlk%0(5;O&kee&Yy!Av?P=*>it5cg-fQOBEY^LgR2?D)Mqm>n zyotKL%z^e?BWG4p)JpvNz8M##f7(k71vwEn^#mgBpO zNlT2yN)I6jD5cOrj(y~wh<#?I&HDEDFF&IoFYz5K0?n{I; zN&{iWfDOtJ7bnydGq%B+sm@z2ZMEbz)RCgkEM2#q1mz?m33|y7*gf?;W+A z9oYLz4Qb)7_jI@PWtH5dWllYybg6ke-)3M>u0o;(pUg?_RfTD6^$MA@I#Q z#?p(1R6~$i*U7>2Q+m?^QEX#gIG`{+*Ib`J1pR_mR*=;H%Rm}K2O|VZw884?6CG!5 zCQBX0I3;XHHhamrfjk93ezZ!Vuhm#GP|T1$v-#r72sx#KHDk`^U3MoTMvoyay1wck z&@=RPh%dW77|wOKA-XP7=p6Z9{V5WhG!pVtKsODgb8sJ`G4TdV<)*CUaoV1AN)scqbxcvHLHK=mnmS-!)O$|Vx>vUUPudg*2}Y9-i< zmZyAR^VX$R=logjak-zhJ7C|DQP+I@{_7L8!i8U>A-A7loJC`4MA8?G3CzJBQT_VV z>a1Q&jcKaggY1UtpuHX0oKwCk)2i|H$H#sK8zzI=dS@POrMI(Yx(kBf4qyw={LnYR z_}H8hKm4D#u1dyxLrZe&5MBUu0apS4G(gd=^*~v=!CMP|mXbO3IUGuO4NMM{ap}V8 zn4ZNGjvnaRHd+sPZ?fQ!UcZmj6L{eh3xkqkrTx~ld3+^{I-(VAbz7V*) zgtb=U2qWu6IpS13Q#J#%t-abf{D>zSM3}^Q;1HXd0%4OU-;FASo)aC9s*nWeCCdcF z5)Z3u-OR$)l}+nDG&dz|8-fRb>Wf7joD&nv4l8f4C9*7qKV4A^nKzs&K38^NJJ2*{ zH#kb6ZH~CE-82s7@(7Jp*`9;-a+#b`hj5I%6RO#IoNP#=&g>)-%R=orukl2r$1=*i z_)NTG4gp%2MthTA+k{U9_DRCl%Uue$MPNC=YUnP}8vYWDdpz3{%DlXu8Y820kI8dT zTk^1Q8!2+pjD?AStLo9Pm>kuH6*Yd=$1$k6R++lLupUR^tm^M%^J2d~@m#ky(U!tVZ*{nvwe3e~cXT@dU14dZIBy$Iu<>f*-xcHtL23EcpR zW(xg;8>MTghRGqBgicr0Y2L3pCoz#)0iZDah3@xULnH!n%((Fu(j_EckXQfYeDlkl z$m4UyL;bV;JMiT-(-ea})40L^4Qs-;Wp-6cz96COST!Zk&P(5mxJNElw9}{p!luyjT+-mv)|*1X4a1Ob{XeXaWv*MBBBf@DuLfX;^#@#g#j ziZ7}SorR6toL~%Oxe)B@oV0)sd85v;e?+3L2QE!d4fZT1=)swN_6Lj~BS%?0(iY72 zYL*f&usZD&NTQhSn3G6XTkT0_SAY$Ec&2Kx=X%yXd5nWgaG4n_(@)SpY10OIv@oxI z*~5^#PDnEIqvz6RNqqWbB+>xKJTF3x*Yo479%tXam_*lFo}C)pAA(ZRPCtlyY@GAn ztJjtCbbj@=mz#}lq05rWDB(B%&DANfQ%v`-oM@){&p6u$x9B;WoBCu~*|XzK&m(`$ z&_oXQ`ShN9;`%&*&>>o*csVJx?^d}UKsj%M?Oubm@I52Ff2c?G5nZ||zxNM(=|k4q z65*ig-W6UX>Xq|KO<=pTDlPCS>s5 zIMwcHOL&v&8NWFcifMg2md608$otBm6_<0_QwhVdeqa&ZI`9s?h!a12fEAz!Ef-oi zJ>d@4&mPeNx+WL~oO^?D=3}kLn)3}m0ya!qM1pc6$|{wbvm}{L+V+dQptUY(o5ifj zJDzx7HSTD3w#UD|b+xpt-FdbI+fE*_M19iPV2VqQ8-)6f|GZ&d9U>6%?E5*LY}Pd& zqD|1fU$h)ROT*N6G!rL>m%5adWY(pzmaK}*QmhJ?)&)E3e2h=x{7HaQCy&RY{jB-A z#lQcLdH1n(zL0aHPQP?#ewBK(a#tO!bVsScNQ`0HH)$lPN#7gH-l{38d0DT~D|rr( zribsqC@0u%JGJCGWA0!AQ%MN%<~r?(oGQ=pIT-HSi-7($N@i#B2#?|4tm+@pM|=+{fc?ul&wqmT$NxftK246 zv#XF-?i>aD40OdBqVG{HmhJO@P_9J6i~T2ss2g{Lv-}w{-(GU6s{^&F$*U5bvGU9h z$;Q;%)Wi;)QnemC$=xKEaQUy?FG#?`1MjIwQNkuwR^Y$29+LfG-9e*dbzNQQNwHVk zhs$Dtigm0_wey@p`GzuBamdh&=|m*M?eGO7i{obdjA#;&-@LlN7Ca%1&fT+S_bgR& z1KZVw@yPwI$|*tP!P|Fg(k`mHQCrjWF}cd_=1y3XDMMF)RDo|$?{QWNx$|{h`=L7X zFA<;|w#Pu!yv9nyvtgK!a~{LqF05rkOS{&{*Lky@hTJJoA=^;X-}9AKc?m%=Y};KT z{zfYz2TQ-UKDY=_wc!>%C|sFd)FyV$7>4GnW-|7iM4uLn}C zXS|i^m&@5*Cw^Dg-ITEc_F#syv_>nfTH6T_vb*6}>)s~O&m!f^gp-q&XKBv>fbFA3 z%VLVv*yP^%=FLbi9mIEAGYs}W*;ds9IR#{RjS`p;hM*M$%jr>z=3}OKaLmlcb%YJb zzq+xA3EMB`k!I@WBNNTlA6FT)9M!dZOGtn+=e4^5H`Bk+usEt1%%C3{ZM0|qL zbcXUbZ^g?6vAm2{5jK1X;jGEI)y*;Eo}pmA;tuG`D%I|T3-J0{lVu9p#_K9vA*}5* zQCvU8)yTqUo7;pJCnLCkc@- z4SQNSk=gGt*iMX)k)TBRc@*3n*mh{&bI$b@sQ=^EcDbHMK#UgP$roBfcNmT~*2|av zP9(L*Lnrb~WF@W=m!-u_xuQg$1Ul~1*1vY*sPX8ZQCNQ#N{M|#%=RULNhKjwKFlPH z;!h6umAym;#X2%1D06|}zD_N4R_oKJTC<|^u4N`^ZC@EmLeu;fu zGW(PeP~}81NdDJQ#aL~UW|s62BHA2IHOyt_&Dtc)B#lAR+BUsu!vw_+159^SZL<=g zlHMXy0T^Kdn$vjm$god8$oLmY{>*~VbFTH0#K}{rKfBCTv|ir8JMNwNDZ^kuH?v{i ztftpv!{IQAixm9KV|csYPPt&Sx1qkqH?DuWK)*O%oU5jRe4T1H8li?g>AH^?tFmY!{g_v}`M()%Zbo{j;mB92r?zO;XgKeF9 z_5-gKby`>u|>i>Z`VmCFBz-C3K6nZE{~$a%41LL2ML!FTN8f zJ88_N1tT{R9%q#=4UOmOx4ShT6Mb}E=kP_XegHHa@T@;w{|-30+1r~)dSIV&-5~JX z*mXN#+&}!;C-@WW2jr`Z8Ob`~X@M^Jn?I_V?K3CZxOzWfAVMo*Cy+afMhwTM6kv2y z0MOiq15Hrg1dTcFpE!jT_6Tt-s`)ZVXna{}L4V9t}#U4EBefb@J$ zd}Tv>3DsDuA^XQvoQB5DmV7!UF=4%qPZ0P0dRI-muY%GEM}8F(sQyawd1s6?jKUi5 zDI7=oj5&qmT)@q{JUfN&ul}MY2naoY7A?@yJk+GbMvhodEMw%=Z5LZv1WKX#UX);Q z!pDJwQamHK5GxjaPT5TsgHBSRHG)`~YsB9)KE8C;RT(I_an)9!LV~>mcSeyjiIi4( zE1Dh*8>7tg=WW7I-4H>2L$kQ^kmPp)WeV;P2YH+j$&vhX&U8-@f9|>O0>)b!zx{vX zp{1}SyQWFXU=7xmIj)X}XZdsEJ{<(Ew8tFVI*Sg6p_;t0zE7b`bH{}$P^@R0qFRoP8T^3Sme{AR;H)v1`|G;z(#H#@XW{n%;X$!VD_?g$%;5Yk46rb8d11@KppMTuot~%L6M_xG; zuok|Lg<5uH_4k-Tw!ea41SvU+Uv12$68mRoZ%huC^8Mr5CAsrW8WzfVdrcWL+&4m4 zy~<3g@i371HGC%R*8b$E$g0lSRVF@8af+4B!)IYoL@MM%G#PMP)vkj zK0r1Ar`FU({qm`%uf9jUHbL|Cb0|eRt+P)RYloo;Px8{e8{m*Arb+ht7DjvC5IA)D zw*Vm#SQW7;ngRIgwyS*ZBgGkUsNU=6|Es;X42yD$`iGAQN(crZN-Nztpfu8w(v5V3 zl*ACC0@5hm-92<8ICS^WAu&UD!+*dya~{umo=@+$mk)E@*UV<`z1Cjqw_>lo?^^x} zzfyODLARU{n&^Pc=vQns*4U3%!Ep`W@(1DyRViZuR%7N7j%-P;dFMI+>((ID zs106r0vTrXEKq}Sn{PGyUSNwI!&}v^+OH<#nq3FE% z0DD5mqJgG>kmEV$vHMv?0OW8`!H)pfLm}iI^{pE)3xfZ!h@f~3$Lp`Z_&-Sq3o2S)<~$SZAKH!n8Z%0(pMx7M zwQ8;#?l+BI^El!v6a3x(-Bg-QXafr-fSouE%0(x7I!JYjO2WUM{OM#M75_NCDZ-Sq z??Tq579Jr({S@12zvlN_eVLC}#Kv9SdaUnrF}Ob&$!%>Aei5Fo-kb1!M&mIHc3E{T ztDPn|UV@U^SMYir$S-P?_}pRBhF4nQtM6agz|!gjOu5hkci|AvEu8YjWSILw-+$G~ zZiX4G8HM5DV&mGK_2%v!14Te#CGc>EM9vt>zs=?aaDjjo^+T1C&PBK1>KjYxpI`t2 z-5{IUMM%Og??rJI>;UVSGy_|wM^_^qT+3P;Ki5!6$=lam?})X&%c+_A#Fo~Qy8+N& zE6Ns$Y^OJ9i|gu~?CK>fDT=98Pg}oRt}}L_d+NK+Ow@-LMqN*bE1a-Lk7j$_I< z(Hw2Gx$A=7Cj(;mrq=Avc?rI2zEb9Y5v7{w^xAWDSlydc)y17XV3!dC*ZXZ}4eed$m2)0HspCm^Qea=8{8X6C?3?`MlI<_HpQ{^W{2A5lnC0 zy8mpVZ^`;qaB7ZAnO0_VY{D{wcIoTw1nWTV87%fRc9b6+?Plv%!>|AezM8me;Zbzn zbP)W&SN7B_NKUCRS%Ly#){%9N?~CSq;sL8?&I-B{{c_`S z*kcoG8}ex-XWkJiQ42aXmiwSZyW3R-CBE(j%MT4x!U!@odD*udN9{N?%Jnu_f-KN? z6Jx&Sm+w5mU}K4uXCf&N9;??omGX@Uwh!K3P*T>mP9h&KcDe0UhTUcQdVI?y7g%aI z@qs8CpWgB$j(9<`Zf@Y>Mj8@cAGSkqp6wJbVJ~!8zpE9xnPS%vt#48W0$o9%t#fGMRtO0truqwZcdO`G_)-q z6m3vqs8XoswcD|gU8R_=0<|9>@Ol<0gmX zxOQ3t4EVLddl)6uz5$$1L$`OH5U{c4%F~i?V-X%JOi)?O6uEuexzF^ho3~}cym9@| z%Tc-Zo{rwq#dk1Ef_G=vxsaMXG3uCtk;{-PReW$aJ)L#_OnqK;s@SD@Mehe`NptM# z{Q`>$cu5Ox|2miJY~}RyG_7Nznm!$43~!aKsXE5%lv3obLCx;bxbBI`ZvK3f?_Y(L z3-Vnxo>%NxEhc2r@6M7mQzEYP6%+bgJ@FZu-2KllaZXIrC@FyGt=gPX?V^$sAv1Iv z3WO;~@`C8dYsUG+k9UCQiv8#P9E(g2{ALC-uN8~k)rlDj6IOZKWFG>ybPhZYy7FFT zyN0de4wcJ})qj;$ACCCEM7*#*=AQ7BpmnzPSxe-we7~o_XVjzM7@abu8FMSEnfl>q znbKi4mz3c*nSBi|!+wRbBn5}V_R!(n_~sd69hMphhS80E z^e*^?lELg>S-AIeVam!I+V|Fn=7hq-C*ol+ZsQ<+YpXi8Wur8Ay4T-5)%Qs>TOkwM zwFHs$YE|oEp^TbgvE91)e@cVM4d8ID2w%GSuBrZxjfPQBZe?<7<9#NPl+VC@1rb?# z?aHI~dZ*CLf;zeh`<0}w+x+3d z82+WMnz=J2Jd<{M4KdHHvWB}uM;^{TYABa*Ma7JydHqQ92+3W)2XOL~Xt-YCbVii$ z(5z10jtro2(V4BbUl<*%wPnR&#KcsrFDiFdzZhx^+>A9$EO8;4cU(lt2n zZgxg3OcguLeOd5dPos=%$s@Q*q+J2#-ydyZ@9;A-R=c%p#JI~yAjt}?oJzg+1qtGD zA=!(|w$D2{b#qejvn`{P>t1hL)zTDfUt*fCC>@V6j8`>hVa0RTJ{f!hmglP`;XQjZ z8kpnyEhEcyP3G9d_4qYbYx3L|dAU6#_l2JIj+OPPQ_PvKH2!fb5oIx1BtqKBVoX#{ z+7?Ysg-=5@=Fi8cZUu~qY#Q^?&kJJ>9<1f~@Kd$uO#|3S;xEz`0*b}HNj%5dA_&}% zI#0r=At^gd{`?6zUv0^SHF`I<;jx__wjM20Nh?4R67AAs`!61`x7^_E)52HJ$ z`I=mZm?_@2(IOlNjJ8?qlF^QCU-*|!;XzgfJ5z%;?)lwWul>CHX88u$jDpbos!Q*Y zd2!UKXkg8J^K*Tsivk+w08XBKl8Gi7yPDk3ws#ry9RXi9Hn^r$SX$%d7KSv-^uVpX zr-fyf9kfwYxk&nEM!Z~0Hu>}0mRS5X4zU~>YnxpC%^ifBH{uPfvY2K^0UHhgqxvO9 zV97&wg5%0;%o*-Gl{u0_<|Pi~^Xp441s#4hH63$rgRq^|sNT!w71-RW=XFOd#O#4x z#(I&x6L>FBWwp@`)j)eto;eHL$3H4KK1?}zZ%lC$o)x0GF**^m;GV&}N-xF_75-5R z+h{YwzNNI$?4mrBt+brls6M=vuX)x|q^b?%yBz96f1$hE+QlxsP*`fl8} ziRYdCbn0OyH7@U1otL|vm~#V)&AVSNR|wV2@J=^0`>0s}eGe-s0cTJ`p-wdEevv#hH-lz(9uC}$Akjay(hZE%|ft|86IuC{NlZ(4d%YcfQ z0|g6MZ#ySDdiWhUH$h8i)3SeelT23~-gwvdbp-Ft82Q&{-LZ^ZoYZ$t-z~!@YROsd(CUJu(HYHk4k_n2bjg+Lu!Lvq0mluv%4d-=1Gnd$x${O{PPuME+XLPOos<7S0(YFO zfNuQN$pRmu4F%qT%c@t#aWJCgEKitsMGHehm zp}RVSptDw<{_y8F!h>ykENMwDVWppeAcFmou)9ngu>4}l#GcL_8+)I6v%ZVe@VoH` z0jgVGcH?JwKJt95D%3AsB)t0HK%Mb&n;OzCU#Yd#;_GU<i5MRK# za{*KBt}7uS%J3nzjjSdDxMqUH_mGEmi8Aw#+I+!Q@y|EX`_H~9b)Lzd?bwubwDRY< zX3ZUaA->5qnVpE^Mq1e61IMS^ZhTvMfQnaq>KPVc?s>ZCs#b!-C0kv9EV z!u}6S;V1rDs=LcZpIFhGcyewfx28O(^w?63ob_#_C)t!LJ;zsn;RMYhm;RE(;KCt- zI#49Xh6U@nqlm!Ss1=%wxKCrp#?=l??5A4oHPj2QcnH`zCl#H&rRIdjb<|=#aeZ|J}7z~TE zusc%XH=W3FrQ>`sC7mByWBwSp66mS{qYBdgl>H>Hdi-=^t(BI~qyrR91w?W`u9Pyb zq^Blv5n0_F4Ysc>6zTBE+?lHk3tl_-SF?R^1D`Q8i5c}DcJ^J9eu zv*ExJVmHCU45CzLaW7Ii>*G(t!3xJKrVS4OH-wdRHk+Xb`1~dY?R$}c z?CAZKD7B7HU|xPB6S-2223`)E$&px*rvM^NfTFs-p-*7>@#3LQ!>KTNhNx7pM#fCG z=0krGJnrcZS>s@jbvArz4;=a+#tt#bGZNn3x);`R8}M@1)Nvtvb$rZ7Of(ka|6=kJ zW^+w1-X~%&lDv>xhPsIPm$37@QaFh0H^RD&d0F>HuGApwuSK%Z%Of>?pUK4b#p1j@ zpGa<6GG(lPa%h3C(W?}%jqBgUqcVzz#B?aQ(o6F{~P~)e&@M{ z*7qiwS0f_epKA2yBuvra4JmO#ulE!FWop0H;r|!M|CN&={~w5B5`8x`>W=3Zys^zL zn)vZjn-+|eF1uRk6Rc?4wB#({&>-2NN7i@Gzp`*w>^62=D+{>0ZXp|j?c!r%(uc*Q z>(?8t&8gCE{x3phhT=32ig=HO48x0Zku3B|Sgqfz+|V`)8z181ZG}vq>n>vN_qLD8 zW2?erywHRND{Mx(pk;Sq_zfN5$UFZ3#go2AaD6981(#AV&E{)6dnF|0UfgdYcn&T9 zfOkG7i-#1%ww@@)U=ydRl<&1X{4BS&)BF_rzX^01vXj!9I{6&|(y~T2&V%D3S@6&) zJ6IxN*{v{>!CIUbp#M_sH8{nKvm82>-sBL^=yJ02HPd=}vrhhibn}-OBThIPcg1a^ zL@V_(h;2b~f70zlQ3`r*QyV&Yyw_cq<=;W?_?5x(vLs;wRIBto;M-1dHP_qLT@UWr z^Y@+i2sBxdcx=>IFU?qEXgo<0tG}CeN<}|hur<4W)H^%;LiH!&kS-&Iit!%$u2!Do zF0U>fYae7M(&3+-!zz}STo=aP#bNMV4yz<)@etxNk`yf5@#_kB#bdfgMV|L>$93m{!*N4t17cchUL7Ll^XjDr_wURw5Uw9T{wrm z!L+qS48bGQ)woACPw{f|T%(uhpGRBl=NR@l?ixR%rP8+r-3Zjo?&!c8zsni@{B750 zU|e|nznLFfQfAZdX+9^)dv%JrBR3yTPl|L-S5e)L{Yty5I17E%%a^sYotfl1RQpQ$ zxNYzfH+DZ2Zc_Nw`@->%Hb&W6v7iZfvGU{u{rUpK4kBN|xgc9ZZ}LF4?(v>`?2@nH z`&<0xBS=yIhS^D8D75;;s)?OX?;qX(#spsa~*@Uvdi_|SHZdQ z?cw0<>H#Eb5^H{bpk}RW?J?M-Lo7$WearO$++-wP5LjURm$?#{M%_~_Y$lofWLK78 zq#40UP&VRCZ&x3E7=yk3y?Zr}B&cKgd$smNkIbq6zK~|>jx+b*R5@|{L?Xp@E;R|% zZn=%1S@!1!xKeg(gOl%W^W6$nZViV=R zi86wTlQV<6IT7O?acBSS>|Yzq5FdEMr8#~t=^v?ve~yQMT1i82d8aSCe0D7IpKY#x zAiWFcP*<}DdhGSthd<5oFT4`Sh8uDB@ z&IV}cVj(?thNI(zLIPynTtio`R4LJ7>>?Naa7?;5uwhnb)lRY@Hu&sbTO{a9mY|vh zPBO{A^>+1LQq~pKIUZEe5>NURnr9SCr5|||pEM|RDb_AK-W@T{P^fz7|?UpT~`+cqvtGM_m*?avm~o?e`{iF$2~h(=W*aFAEh1dn{-L+4=D??bXEY z7FQXSXD*JYjA4g6(tSyHWZyCXhx%>%wc?~j;I=8L6;s))OLSeHc_k@(ZNgk z;@Bql@eY{eWvbH)o51-SC^U{p3|f4&;lth?(~qQuj@z`NsiOfJ&5N`mtE8(- zt?1w?;9%fH1j$Ls?J0~kKcc(hqX~59vlXO7)UHFUGs5eOW-LHcoy^d(Ieo#t+zOvj z67&p5DP!Hg%x7K=d>idKkT;osB|a6)yt3=tlrWz8^8?{!4RoNiC0F|hx16pcC&c$= zwjr{ulJZ(O0l$K4JbA1Z`x+_OL%GB^ane;8}?%kl3+F6-W+b4)X5gx}C9@A5lT8hRLceg=BmhT}9U|rS{?c zhF>dgx0_OKo%UQWy5vD==G4{+wwD(3$RYV6d0+)y*C2e?zBZrKP={2-5G*6i@FhJJ z&==I3Eh9=p*FN+JAwUuE#ZZlxiB=(2&Qe&$CKiNOfy0ZsWRUZUcQ*ZO;3A$r_05WN zR715+R&QMPCf_S5S;GFdi&#J%Kz+P>XL*RNaLUBPvkAswIX;^$=kNtYeMLqXoQyWT zC$Ia>-H#k49zA_vI?OUD%ZY?S{o0Xaf4gEL!O4QUtRML;sHlG4NkpnY&Y)1PNR$fx zQkG1jHin0^Yv1*5i-1bSZ!S}7id-6CGt)01RWZ_Kv$Bhmt&QJ|dWgg?_m z*dr`};t;$x2Q`U^<{o^fkfww)>3!jhZZS0$lxr3L<*W{&JN3sfmhqZ%!G?~>15)v> zQP&XV?FbA@QMGw)5H0sY>b#fY4u(s5FHy~Ld8gAW;q}?UW(~cROLE!n~-q^s5IJeWSK<@T( z?hMZZ;R$KK!!xus|0A@98XA(fhy6JIju!3{WH6~c&y+|uD?wB?Su@M9kl zHlCUh;fm44HLD%CnDGJf%JOKe*Y(vujH2fQTygnKh0LBzVYN06xO{~$AsHVNuxcd+ zI@=CRcL8L#K`GhLJKZJ@Uxxj%=54?{U^+iZ91eQ5n6R&c6$gbf8sv7sHLhSvzyw3HbXUua0>1xMK#k2QUFi> zIMBdf_fipDO=^JWH?H_^T#53#qzzYEl7P0iQ_-66Mv~Jq8ExJ1?mD2jTjJ(<^m?-Y z4Rm0Xeu~~*Fs`2%Zu93Z4H2hoEi%Fo9?IL5aH1(# zc#C;B7$|T9eQZi7ViG`Ndajk7-SY}LFz|LJV00WC68P6aT4p-Qi0jbt>H8Vu+ZRcm zY&>6|HneWozU1KJVVLU1yCR}|Kc2m)uu0}&zSKx0HQhdx8S8J8;`snaHCKizxhE4@ zqU|c95h9E96?1R@yi{raz-S&&d|*^)d5)q}*n1O>A!D)gjLNE9^4qyiDpUMl19z2s ztKFtv?HQ`VMT$&`V}J%27Od!U$2vmbo5Pgz9EDTD1mLHh%c`rJt!W9sZ=rT|m1$L* z_24+r4>yWh=*5Y<_c8K5yXLsyl(tfA)O!^`@8~Ck1?)|I5!Yp%_R>ki3RYe zyBNdI;>~zub?%;^tV2d)u1U+VK>X)5;Df zP{E`vZXI-9JafWCxZ=;w&SMI+q(y-clT=6d3Pe-n~vn%Tb!IVS)sd zUR&{|w0K=xS4L+NcV~JQw@Ytd&ia&h0_CPq;+zln2qtDGTM3*uB<;3etRShb&Z{B@`}F^xlgx2*5MupB8*Q_7f7Yf9R*2alDV^c*ILC_Uu!5}A3_ zHkI%zHEllW9ezY}IXQ2}_P$*ws6TZ3>tB2&v>{LssH(hN-o^yG+=aJ$P(^pqS_yww zL3uzx?*W1de<_tDb7e8$^!Vcb1%lJ#Ot&R%(mCKJsmWCcyTia?xcndx&B_2xTMR$p z2&G}UW=o)90+#!JPonRuaSO_|{8LU{$$!SR{8I*u8z)5Q-7X|`fVo}lNq->byH73P z8Clvrb23pU{bjx3MRNqLw({6r1xNX{bSHTh9h-=!aR(~B&3>J@g|zQg=(5;MV^Wjx zXxBJtt>uvmJy%jU7H})*C~3Z=zn%e7L&UueHAx2z7p*Mkba1e7E;CJ}K%?Kv<5x)G#NxW~(0IY(E@zJZ)q02~67bnTV1EzShE?CzA&0fOB)Z4SrclV|pwa5;MwbP<56+U%#UTg!Dj zeFp|JD6H&iLsvtEUsrr@kW2JZ+| zh+Oq6Y}K11#C}Y;3b-SWoTKOMML-4<`nQ2V-sZt;Xh8v~DZ3B1<(F|sKcr1~sn6H( z5?@^E{V%%$r-BBJd}NV)WIyZ+iu09$+>vX9C1spWgv&H9F2x)y`>|Z`wDX;q&PMx{ zw~JEVsZl;3d1HntAM4c;o_qQlObcd6o)a|gV=hy_$%lDsCmN3Zk-=}g;Xv?pFDzK# zeQyBzHv-1}g>|-O$$i36TCfBv4(OfR<6b$!&*a#beMQo6&)kKkntF{CSPVa&jvdMy zU6tEZ|7~3|Ej}gL05f$&ysEwlU$$3nOu`paGF)a?Of{7%dl8vcP5G92$z7GnWbw?n zk9Nn7`+F+nbRXuRd9k1`)Gzq2R_Q0D6pSINk)f)i3iCV$S7A)sZO_YNf?_3n0)5WP z35^+I8J2ZV{EMh2SSV$B6eZ6XjI&Ttl`NBY>s3aPeM(Ad6HH{8=D}db#XGS*wa{l@ zE&|ZMgIqtd4ah+-WF?PL&HLh6Je``;SF4%4BC~3CT)a=AqDgB_zs$Bx9LFh?$HkpVvKsb3kCmSj(!lHQMK!e>*UF#mp1rk65*poq=FLx&Vi zPbXRCbQ0VkN#);zIqPnnqDWmvfP$49{kYlw#aa}7z+)UN!W9qCys%aCD)1LacX zp~$uNHb-0s;%DgHulLmi$Hj=WJ|wvC74}u$_e;e&*h?E0f)s_~aPX*sV%He9lfd{s z78i9I7`=was5>KY@-j+fJH%8!Yy_ae*D>B?zjW)ta5d;KNia2aPS>7H?j2I0X{-<3 zn*U*D_n3Q44b%cG?!^l&zp4*D)eWCF2N$DnXg_#?ktr1(o?kZA3qLBb<`DxGR%5L6%WsmPdA`7_6n-@rZ&&H|oTfl|!ML(yhTE5WqZTuq_(EVgx>m1;1_?2DHljkrU+zZjPV4|?N)}q{SxxVNQ$i%A6%y*^gDcLLO@UDfN$)1d-30zg)TcOZ_B($>VpTz z;0D??hvI{t!whnu*RnN^HK*ayt)(itg_&1t*(P0RqBs2w?Xi(rUnvLmyI9NRSv8#y z#CZK-onFDcnz(OV2@edPOk4q7J$hUL=7a=G>0<&D&Ptt(N^zU_O$ixY2Jp+DxYcw! z6XM%ZO7d=@P?KOjU=b|F2t#?ir`d{coHxLmpgH(H`BuK_?6)N7d~tmg++QdY*rjQ%^X@-EeO!pjB7qgaQJHuhn|jt_7iB(LADepB-?ynnIpGA1Uv~DB z;#40$7_&CtfFFbr>v3-60c4TQ2pAI|S8W1C4IMWrq)G!JR?p^GE$T(0wh8?-PYZCj?K>?m_I7y_M zF+cxn%L5iwIX%mDzK6)NUm);3w6U;>Aa$nV%<(4)KOH=DiKGMHP5{9=ucq+=?{Xub zM_j#byzakuqWM}nK5!IXY<1$+*+1uAjX(l5xhEH9q^!!mORr5lr_ke1T!sKD?-S^C zW$bVIerNz3TmcRoWregu_jR>F!CmWegE8JDnL9ey8o=epMx@ov>(44(O= zf~dRtGCJ}uo-&C<9kMAZyYtB4>fX}eksQAyECi2spd+wJAc+Ra9A;*=Y_Da#Mm`K3 z!b(EOXL%yQUG2GnomsBW8a%BSoTz)N3M_`)?o`QtT{feXwzIWfY^?{~w7OyG zple}vJOBfG6{kZj(@%xEEpsQrdBdiMq=p}PI+l`f7`bF1W*I#r@QS$b^UHLcx|Jib zH!>0G@H}7Oh>yQ{ZX?{ge5x$vCi3_sI+13o67O-&#tg0=C1mNv{j7kx-A}tB$rcO~ z(cGTV*uAHM<`q8<8U1D_1=YR6RGYdjt%gEXEtz(~5M8*6!neMk1_3RCJ(YmveK0>4 zK*6#_s&x^8A5Cb-V4)J<`|>co4t4)!kxb5smE`JI4E1`-Q7T9h1dNs#`{j-Ixo%!; z`%;c_Lz9vR3tWtZdxLjrZ(H0!Sn{7MEB6#BCl=DQT^rg2DdUQJ!#{QXLo~K3k&T#G zPQ1!GuUA?Zsv`HW9a~A-B$J_`!~P0uW;iiYs;dF4;Xa)mf5#9=RYn&*&7yMc47z-& zT?uJX7AW5-8KH$aN9LRkHFeQy{EIZ=l)oG9&PoO;QR9)Q6Uk&H%3MR!9rW7WwtGM! zLTlg7BvTd!*i+tRoNEH!$WOB)*o?Yn@p&DON4K2fA0;|%Irmx;5Q|sU^8jNHheD3~cdy=kxBob7xl6`i9!l_D(-1@^>tE z{p9)Z-qxytyDKmPW-;%;$xvja?D_X_0+Ogh6K@_j=rb*yJ=YaFIV56Dw{Bu~K@{R2 zQTh#J5c%vVc(1U;X&ACqYDjedhe5tpa&%47e4T)G4Hk!-9SB=nu2D?gYtz^%?HbG8 z;jhem|JEBTQ&B6lFv8KQVji=OvRuOiI!LLsUZL|(D$uo)rl}Y|Ojae>6;wO8*HS`! zcU;z$H6QKm`u(C-r z8HF?;nR06KJ-3}faZy`)j;03Tu1-4}_^7*wK-6y_Wmjk{w1d?2=qYmUHki9Gev)USUwktGzwENKj~NjNf1`H{^_#7#-ow48pO@Kz zd#xf)3zSOx_*?q?S_lN;L<)?{YTkkryv>zWIK&fd;7jHD?0yuYJIH~Gnfi}Z^-q5& z2@OfPRnLJT1~6m-b)6e+XV>-ZLJUE4QQ52KYOggFW&(i$>z z`VY&O#&EAt;}wzQ)Z@w3ks&VK7}p9Uvh;K-n|Ke_~aIcs5m zFhKGJo0xsdx!jDdf{V|8^efy5lgnciNp0F^m(1(&673{^edq5jE^2kpEi{`@)?)*u z!p8~Am?K@o$tZaX-zK-+=rT5l{zHevNwpnQxNtDlsn{#WVd{B36zl=lfcX=r{IruG zn30rwdu`g-aQBc+FgN}rF=?As&`TRZfPV^)0FrxrJ2tG8D{S1rfnIr3p8MUkU-+}H zm%^lEn2|>NL!Zt!wg??f-cPu2_>HzuX7wS2??2f{!7w`-&O?Em%bhK)T%qScUv_il zx9r31*hgg6kvFDBa33enmUo#6&3%1ue5`d{YzfKep-e^MK>V}wS zwacRp-h&^0&G2`>s5sG$Pnt6<@8xb2kE}1$VS|*{t9zo)G7R6N*ZqwY6m%iO-jWLI zYz7^=1*<{I#-~M~Rp(uzUhaeJSEsTVcM%ND|tdGgLIzJz2_z{Sqp z#h?%ktr?2o>?9eWfTrJ=f_#*vAn7eOt+{q3$WZ)Vhk`uQh7((DqF7QPCIk)sF)N%r zfwSQv$quGrYZdJjDPe5Z9f_gs6MnT}bJ3CHTsXkq!6!b|E$ohFd0{#F^{N1Y{8iRA<`%8d!LgDl`hr&I=<&MqB@~Wk>i33fo@ymy{e+r8i<+UL# z9JK;_VK z7nXe%=Pk`up`r&dVb6lx|I|HF5)^o)(ZHy~)GM?2wFraL`Zv6XX_=x2aZv_@AATz6 zwXe{K*Cx@No)7HK)$g=YnSjDyRY?$B)gPlPtL4#nO4Gvj=+^@Ot#EDGjbE2}EAmya zi3$Q&5?zIAZHBG(O>5yIjU|MjMyMFy^X6E`KGh3lV2#)%dMI3ae=X`WF5}orz#pwU zi@wjxkA<1}FJ_`Gx=~Ol)AIg)t>pg4Mc?sHAaa78@P+5gQutLfE9480{;~5efouyG zDENV#5InBd$uS2m2)|lgd%0=&LX{)X%HrFgQr)!Vm%IPi@%yP7YIrMGZv3eK9S6-# z^87rdFSsr_V@Jl{{Npaax4GewKkg+(sClM5VqzXHZsHp9v>=) z1~@*QhO-hVEyIHO0f7lW+2$F5z6TF?DzNQ*Op?!WvSA7ta6f57f$R_nNToBry6fbZ zx`urc$iZHZGvdEE8T(`xt(^^W>%iQeJgoa<=c7PWw+tmXxS(CM5BPgQem}*K_ALhw za@u#8$=K`nWVMwWE&vQk~R@jQBAkX}Ulnf9(+1Qj1p(GyH>t(7tC3 zbBwKC>v7v|TqjrWN|^=G62qacS!_Jq60FN%h*@HgQ_rs>GR+4EqYLUWv-M)vcl& z8QvY|IyJqkAl3Q$4|1t(J*SstXG&|Ut9@YT?itnZ6U^RCYN%Nyik7QX7jTX^Jgtx- z?B6|R&oD+zvfqPyJ%RwuTh9Is<>}op>>-c$+7lpiW}fa|uNbRxZ3b=?Ji^@}RI@~# zs{5NYW}G{g^yOy#Fq7jBtWLZ_m-!Yl<%}w+KMO}a3DF4M4;J$A3I~&woV#HopT%>7 z47DxXn3mr511`O*muBP>wf12ur;lUeapLjIq6>C2G8*8o9CT;mmmQ>jPKmhX+K+?+ zdGol(Fwu`@;(5?19p-5|Yl)go@k->IvkD` zVWN}aSy22j#&@|{^U>Xe;O862y}nXTM&Iib7vE^80uUNf(8+CKM$TQvdFa|?daFIV zop?A|E+efb+q-)(kgL0PNLOwChO0qCwj9NO$+p(%m(5clS4V z&Ut_TkL#Li4-e1m+0R;Q-}kCbkdmS__9L=K00016R_3)b005c>08r>Kz{o3$7b-uH z1JF)c`W2wCpJEgFi?h*3Sz`qSzzgJi3;-&S41o4<3-TofB>&%gDIg;N^!GXn01#*f zK>ha~MdbMK6M=j^eCD4Klm`6wZsfHzl>hDqO{anWdyhi*@G^~RewQY@;#x8 zE@748!gjxIyJjKL#cp6Oh3mB+&_IF&4~!fTCJ@NU>_ofK&PL|;w1X4VoDMT+aE?{7 zp(3B9>A7%~^H08z_W@i&sC4$O>&~2U5RuV^Q^Y zGpB^Q$35#mSIIWd>p5Phxo5?=$L^lQbV48Alh6@n>2Zc`mZ7o#yyIqR{qsT7nkTwu zh@&91n~Q(ECVwC{?unHI)#LwGCP89K3%*!pe+Iz-wZJ%NAQ{*oT4_ZGc1@nKMA1fp z87OHhi{*(oXB{ra28gygJm+L5x3r~Gr?Iv!da?0s!V`;G*Y^kU-QAt4*pR(nG3f*5 zUr!j`2jmp!4dz8}>6^}tP*Z&UW%vwJry#Orkj*&={61i{31@=`{&?}cHrmyjN`BKu zE>HaDGwqk0Sec8dGbY2%sZlXn_PFH&SaJg;uLavdu!aRRqCA7MYW1C z51;*A@ZWXgNrT%4!)Ozfqmhq*ydts05s|=c7h!NEl^82D$QA1On-9lN&=nz7@GX6n zwOF134sDDy&SmwCQYF82DTqFeNgw;-%ullb&X@x*yZ9QA%9Dmqt$M)=Z>ftZ7iSDM ztR}jr7ad6RNE`AB&wj8?J46kv9*rB7A6xC$kIz_FEM`UyT>Ln?=@CtFi4x-xvv=UF zt*s>4)u9Y2DAeg->(?jW6IuwJ-hGiXV$865=AdkkJ@=k;Uao_D`i6f?*P5|`c(x&J zKzES9a~sR6KK;zUP7mNs6Rn?+y7*H$C&Vm1y$Qg*turr_SAhV&%N z8P>VYjjv{^I8B(uHvK%8U|0w#wWc>^zAiErGGR6O=`^}nbiB$(& z?{<;bP%|l%dHJQa0mFx|hmV_B;RJlb^Q8pvvgns>&?~$q??h>1zYd>+82cQZ8!0S`Q!0*pC> zU;zKs6=pk}bG>)#sy`~K^7DEu1$NyY8;Ol%8X^T-?n^^)?azbg{KGe``Xpj79%=)s zGupQuo-15^;g00wVlk`z*cQA!BlqPRyTVRKXPvN)#oy_;o%t7wyP=Mk`)b-HRDl&9 z-imE^FNrKV^#2@w#4dK1Q5^azB=6N|aTi_WGyEs>KWRoBLH>j|b}xJ~OZ$5%s0Tjy zZT<6T!GcRhY5p>Yp({nm+OpH`iOuF&kgm~aZTZ>`)2dr8&H;!N+@{=-o351)`q{!p7Z{Nyim;U@w6BOJ~4$zf52dEj*- z>J^c^qkNz1b1W>Sh8cKxfx2S$t&+l^Sx82(`U7k2N2;|BU9-msb6+u5wxc z;Dk5-TUV?h4YPFzo>8@8bLp~5aq89U@f8Ql`KS(}Sn8ryx3s2Ci?bO4i)~950xxEL zctz4HW!pTih)pKJ-jhv30}JYJt!vZEX|+M_6+iewuSQ0;7ard|H*VEyZala@YCBd_ zReJI7_QeBh!hi`wRzT%UnZH69PVi1Q+}k7-;GBVbYosnq6o4*0*Wu|#AB`+NR2@5P zg2Ea%c80HQz&y#9a;KFO(Q8Go$%8s~DzCJ`dQ56Q{*YgXLnM9!ZABb^j+pE9Z|pNj zIY+teyizBGO8N`*v~@MBoBJ6G|7RU657tpS%QU3&Ky2Qq#x%m#Yfod1LR-VTKawbP zE+>yMd{84~={Q0>$_~A)yE5uEZrri0BUX!5)J%jcJRZ|b@P3-2(ZG_*`zST?Jx6`q zhZrJ}_!yNBuwB$QO6`FIqgt_iPe`mPX!OggN&}RW|NCw{(FZUaNLcyHs1hU?91+PX zN7C|}C^zvCXoT{&ZTUPTKavX>D`wGSu}v+0B`D$;qytR}zF9snF6oJcq7D{5^&Or# zzFj-(I>BCC`rmHE4*_ZjrRej&9{qcXCX)0|Z-U^T593oG_v-3%ey_ z&hJjKIKtMhwRd$jbzLv{DkVd9UN}~&9!nl0ouuwkH{{f}H`gp%wHr`ox zOlXpfwJRPG;*K~i*gEnd0Ee<(`qw2>6|dL!S+gMtn*2@4_YWjrgMr~DDLtO7Bq2NR z4mCuo(*Z^-?c;u4jyoH*;rsg57{uZK32{&g@-=-1Gzf+CSE%LEo+D zYlzhRyJ$SH=Z*j-@&CA|Idf6&lC625H6gLiimLdkB&QC_F=k8gwt}!o*Olv+^m<&Z zh;z`r=)|iyjtC40q`_G+zFD;LWmNi!c=@Vp_U}(erLPB7 z?f=!j3^jO%H2B1{T^@jj~ zK<#~G1>75%reKkB6!LoUy=qs!=UA`v64X|$ZVd;W_)vE#>w)LO(z7)A#TMOCS$Gm^sqZD54K^nLuQBe~s zKS#U2W)(F<8}sPl`yOz7_%OPueOThJm2Hv!A=BgOVD_dG!f8u-EFpb zgegl52D|QUFP)8v1%!LyO!umKkmU)cv@&o1R=+jxp4n{iE&sdUfd*--q8?qF|Qnl%M?)g zyk%n#KqS^~dn`FEL6oEXub|%`XBB>9ozElx_X10(=)4h0DmxSV$EalW8TPC>btzr4J^g{$aJK-ykUku3j`!kuDCYQr7 zWwW0ggU=y!q3IrzlXYhs@k3Vjsv6B@4?&6b&U|QqU8nxIyY5&br98=z8n2C(VH?=;8bb!w<0NXGa#z>#R-j!4kr8vn5ME4Q>O z6;Z>FZW46P!?Jy~70g7&N94nmbHIcjwRkWQu34f5j}C^E)5< z(kG8?i~cFdx0484jm_by(E7T>t!~(JXHH2SfA7>Uy>E*+ux~L#_IdXp6HWmocE@X$ z$&MaKcXIkJtMAJ~K@U!^mDA2z!SQLp`#JQYGGSEinLtDG_fNX}q!JW;Jy^Rvl&?={ z<=2VX97Y**ANT+S!n8EK#@?dRu^Z|?=Fqy8uij-fqNp#=N7&gjy7*Y}+rP+*F>?RR zbV?MmT2yB}soknR2IYzPWe*ZnnQ<`}t{hO>6XkyUOL!r#i=(P&8*-z6q^3^6$8n3jWi!KYGZom0kf+_yWS=TC$HEuv@kn;HyNwrZ8mDbhH3O%dJ zc6cTZmAGBD+12wU{uOt>@pnQ)2tMsgUZSYD+jwPnY8GEvz=hia)^25(Ii*IkVmYkL{KeUk%*~ zMsbU+Yu}E2r0fekbJ`x?t46z>*&cjGTnuF9&#IfNqcZ&#L`j9RQ89gsDFpS&6GpTS zpO}$02+eidg+o~%RKdv+!4Ys4QUCK7O953o?!@%g(an2Fkuq1(SoXZqe8eirG*KMO zlpuXmTkje6MsFB|(3v~d#FkF$FN=Ds8NsspkIEwj(!)})4Xv*)p~=bNh1XK*2n z%v2w+|C`$ShwBu2rhn?yxwW~Wq{Ex1SDepUB%HyeB5yn@-idz0xp*&QWT4vC&^Whi zt#fr_MBcjoB{{y?WVR`8%3$IH$*g*s6almBf;yXMV{Q3C;`ornmj^rb_Twn$l(eHa zO$L4jq{g#N90u9r3wXV?xoFGKnV+^{POWofHmPT3exxT~5bjg{I{|V~*QU|&4M4^C z48%qAGUF05I>1xzh0)=F3poj0I~pSr9(PdiQ`9)tVxY$Wbq&A~^-I3`k@*txT-DvL zFGIfNrLay$->^nKX-o8eD#%^RV$=w;J#WT8RP9z;H|SZ?IxNhpSzQ$IS>_z#A&$~R z|Cw*CV42*{9ri=ZihPAST!kbp_^c>{9c}n1R-cBu>f%{1W4(9j zHE>@efb(_8POQFWHzD}P004*9{Z*oFKWYQk3Ae&_L4MNG>{=WPeFh3hvU7HXK=CF!&~D`w1&7 z-wMN6s?g9FAa#by!ryW{WEyVLXW=xU*m+zLz)8$VirmX-?WEaE4X#9xD1wqJzpMyr zo4USpt$O7g8YYs13cFiS@ZL9^)=xz>^wut$ANq@**DDR|3eOT`^GDC|4~F?o%%mf7 z4pPAsn8i&`-f8%?d@orb3-d+Cvtic9RrHgO+gPk0r~+UPu}kX}p3;w~*v21eW-Sj! zER7e5it!q+#@>Jzrn25^7C7eQ{}^^>E5Qp2^c=Mjura*jLz)~R6B??>rP>3EKyfw^pqr#Yj~!fV8# zL@67kQ)N!y^{OTJuidiXgMRqW{G{*Z$rf}`)C|AGecuNMrXRZ+k=}lnJx3jJc(-wE z>a$6hCp7<&TTaYCf3TYLnsjDve{n3p-#wHDvO~dHx@z|nLdO8YMz4Jls_vgVQZa0e z-PN!TTd@c=oudHje_nW>sy7!ABE{!WG@&&oaUZ_BsH!RV;#5m=PC_pmPKRxN?CFw6 zK25SJ>LV^BGMUwY%(46^FCD3?8`PQD#M|k+dWX;JbDkt`Duiyo2RJW=iBB#D2YSG~ z0q>|oK0NEILVvUp>n%ykD)3r}xMh;6infsa=1h2yviWI4cM)TS^mRvUBU$8~4031g7d4Jmn6xdrCCSA^1aQPYpM#q=whOWmr=c z6!t%#@z6OF^;!(USPU;`Cx4bFo-OEF3ecJ`wZvUhsQ&xdv8&gj39w#|s-@u5)A^N~ z9(51Pv+=9aW8$;sJ|;X0wZ_XEw~q*Z53D?p^h7%#J-~*q&L)Da z#Ac!R3Swd>ANSZP{cp)V*;JoeERQ|DC9u}ho#fiZ9?gbwWVkfXd%LSWI?cyU*F zMl;8JujvBbQX7$zO~*`PFCDGd0Io~4Yxko+UPTO@XwmK-zZvEaf1_SkKvCWV{D>Zb zekR%ka$f7%l@Q4kbX5+I-ifQKO%GKemcE!OAH8v&pR0V4Cy%~OSJ1bP-CF;huEBCzyd6thbRK5_){aZr!H?UW`AHEZV!W;tvVGaa**EA zG9ct(OJ`t!_C*BEde#aPi@y(ex!O5Nn)gG4GtfbuWeL+p^+}KV#(v*fr%~QH(nAv` zQ{4&l@8g*Hlkv@|xrRN>Gd#q$&gh}!gC7^_1#jm9mCp3MEdkewNfB4VP?`f1#0wfK zeC902xncII1k=KA>YobGcyJ$?S!o1Cr0(jwalGmq`uRGBO(~z?03(g^0PY1m03xU} z{d(9bM+X1=e!Lk?T3vj+uo?mrA9s%v>ZTz4U|cO<>5t1rc2g;4Zw;RKAX2Z_QU^zK(g<70h z`j??3t5UoWFWI(O0n5j2U z*c#cf+@pcM@nQ2rDWwH&v9L1EG{;=35`U9O8|dlDB*j_TS4j|r(SU()z z{sZ?7iGpZx{PQFzY2923mM{M9_SfZ|de)MytyjPv;JCU4@fs8tr;XFIkT$8u=g*X* zKD)F)gS+!I?#s1hTwfV74roSJc9U0^!1Rw*rY&LHl@E6ZK@TMpr1}2NiYj;+Ol!{hJkbX^vD3Kj`L3{DXqMcQ}Q4&MX)6>s6|8f8de?&pp2~ z96NoxBI<)C@#OOU?gW=wP0NdHrD^HtC=4KdeUYZO4u}IW!DCx3!>e0*?t zb7ipdG92R0yk0F3`{qN?X<)HIr6#P-XSLm9Q&(a6A;LDD($h}SpN!}WZ9$8gIeE%k z_)xAs=^6&cL<*Vo43njK|Ic-{oKK*nV=5B&}44Awm|^EcklD zf6x1(JQ_k2K`z>5Rlv3OCw=1qLO6Z*E!(-mhL^ME)tM3xF$EI6Rx{(QTi>3M2H4t# zuN+$GO#t=dAsRZLuwt6$o6gkJ3}yBo-t7|b&^ReoADyMR^+~AtF*-| zsKD&?w4k)sbwF2h=0GLXg^zyR{j^5w+&aJ3Hm9ByeKG}OHq@J^*AVxuUw6mt)Ty{$ z`X_ppO=O~q^%CUiJsCM~_QibmXxO|_{z^&~giN5(7=ypOD7*vuo-8ZDangj1E0!BV zxQ*xN4Bbfve|HhRy>L(`b{07{J)tYOI9128HQoSExY-bt~q2}(ngQt2}bL`)hQ*apLAzXL@8Z%OPp))OzTU*Z&C*N7qkfDJlx90aL4H?K2zj|8eJiBkWP(@*? zpozILFx44u{^F6Y>~uhR{!-BBx-gbP#ei}x;oUn)9?{3oot10#=C=a)tVJ zOxs`~($^pRe&oYDRYNcBHnDp_XV=m@RNx|=s5KE$zoeocF4kci&G(yywXR!`Y-Dyx zi%YzNpKJvNUI1epT;Ss^t<+2O*#AH?>rd2>-CYC4(vlWKvfeBD{ustZ_)hf`@36hmMsgIstRon_ zK4&M8LR0~ZiQzu>`)nP)!H$#^YbP8r`#tJrAb56ZZi4{ZqUJ}&%D6Gi1b=bf6U}sX z2CeIph043F?FsTLhN&sJojNPfj@SfEr-!v7b!m>Lx%eo7St|SYMwk3rMQC|4g**7b zBK{P>fMKcoX9x?xpw~6!2oL+VCPg=1@c#suqW-7UAjG-5$%A@wg=OAO#L z`&<^r52J;3tRN#5YShXwahfDtcsM|~*KumR3x@PGx;;kqK#n!`E)k$mX#c_S56cTm zIC?g#2SNiw;CN_&)H3XOa0U%%^3&0yRAP~yr)Y@`3i!x!p#XP8vX;A7TKJ)t4Vz}L zxgl7<*~hJp59&pXb3)k8WjOhzAkA~o!9Zf6LYD8sj`-`Ny;j%9e8gX+|4N0{|2}49ApbPtE<*|4u=%CptQV-n752K?}gys8*u|Dt&q-kRO4Vd)KBFj5b&g_>Ad~ zgyVe3NCjW2^vF0PqBWL)g{PV**gdQ>p`Al+%=_!j6YFjP9h}1(QiaG9 zErRrcz=0n&cyQV5(=as(fH=09A{G7jj1NsBPa&4`b4dSQT0>JbxV7C_Rdq$2=OL}g z*Xww2UsbRtb{@u@>VW0Qn}k7Gzrll>lM`Q`UvLuX`jB6AAwkyn3SXMIa8Q+^QDn$d z^}SJfKzsRzH3scs&1GYhpR zmpyzPO_dvR6z(0jZZ*?m^FL#nF*yjL^!AzKsPuF+FBI(QWxpUNrU79ZnyQedl-H~@ z%io~CGKftCvz~)l)B_q9wt0JEMdJoUaaq}>T;8m=ZZthvfs%3=u~PX}?bX;EC%yUh z+jcYPpH>h9QbZXfFij_nSHt8|J5lj zAT!DDhZN{XWmg?KX7uIm38jH@D_!eAd7GAfUdDL&X%A=hv+@w#WUGqnRht5(M+D$u zKW{&-a?Acps;>UzdNk(^ZSUenZ|I4}nE769m1rf63`u55a2MJrFHy5u!$jeI)?D8Bq?4B9wO39mgnn8-SPWm$b> zgk~aN#=e?`tQwe^&a~OJ4b)kguo;&RbQ}>;@txAozjQM_yI2yfFw5^aRZhdl%?{^0 zI?GfZHyJbX?|Ez-LLoTTH?`h-ytijz*}w5A-k4Z&Vpo^Xt6N<|kQ-;Lo0oLe_}Qj@ z8u>Be<*~AZ%bgiA9UOL`F%H|?=I@Im-ElQuDME_yzq>4 z=l2~Pp9v*}U!2_p)mTTO|EY%@SOPa+xSKa80KBr+Gnp|rr}xIf73TcKdKZT7%vlQ9 z1BE$tYGeW((L-kZlNKLJNmu3TgBTswm=J^G7uFp(>}q;y>HC`4Vqz_h9q+J>JhyF` zEOKURT#hRh>%=^4lv&mN9JfnBfwB%eYsZ^SMc4IA6=^Lj4W|_gOQZJ|ZCYBS{HFKK8aO_?izEuhJF-St=TH+L3Ymfc&rDwP(EwKLo%7w9} zX4M>nEfBhb^tqOLnL}h11ZjAEfPSYx%`ja-@E!ghum5}g-sX-KQxed#CgNE+%CEXz3W7T?cxdJc_8Wm{iQmEZSNf(WS0{;133+9Zgf&_D; z=Fv~Tk>XuKxf8dEPrW-wWAouH`*HlK9@kJS>zchzs)i!9ec@f0i6sQd8~nrLDi|V>AK%sqE6@AQ}K*Y=dJURou}e; z%0K_giM0d9LTSzUB~$-F8O-45q14@q=&tkm-@b2O(w;vWQ6dZWLOaM!0M}qNdSa`e zrcfh#ZT)u9@2P=}lCBJhb;3fG3$pwLkhUNc1D^1ue!3$bX9YzIhVHG5c#L=rXYy+H zxBOG+-4xEvh0sHKz9E)Lg{pu?9Jtlw9ds~d<|8Xq;{uM*Um8I4h@SN(gx|FTW?q7ZNzdsEler!dzXOdz-J|z!QDd+zN&12Wt2W5C0B4-4bfLhhWD5 z^i&(KYK?iRV+OO8#=&a>xEX5ljEt55tw|Q;V;SkzXzm3);idTJlY_eCGLp0dY`%Lp zY39Ov_Kr&@EVh9lJ2mj4=@8NLHIPh8ydIr=L~R`nc=1BMGx| znGa6Ar!&>ZTmEZx%Lzx+W%7x`35vE3g6DTpTLo_Mj1rF50ql{_&2W6MmFb4mY!Z#-RRna=vd7E-$P)4o{~sNJM&}jrV|fzVLVRmeko|0Wa&KA&=}dF zizjn!szgRs8?6qk%hxxYP*howG0e(*=?s917h`|Kut#Au1PW8?^p^*GH^V3&L7Uip zd+$rDQ=IPMM;m5jL({@U3pJQ{88?xhQ4`>pubqr*WN~}XMm&S~7y# zCQnhji?Lf6e7bG>;ao424MU~Mbc_uH&ep^1n*+{Fr72AO>HvzHVOVuIwadwoI9_(x zmUY>t)mvZRZUeQN(jA|^WSc2(jtuMBbQ2tI%cFQgy4hg&A@#@n&SCqM^crE{^?Zi$ zuT0gy+NTo)ElQn5)oc80{JUWb`e19ldxFf4`P3%Z zA5jN6aOt&Pp@IE(F=`t*H-22TJ?nQ@^fEL;%UW(U*faVa4NB5+>VB?02&igLai}U< z-j!-45^tiwNGsN1zG+OoH%Q!bKs`S8Ojs7uT@?s^YrX&AYfkgL@c4b$bYlEU^C4(# zk+9{Y32?NXV;@pOG6a4cuz!bi?@V~OZ_v2x9%zxtK%+iM73gLL_iCbLnbabtz+3v^ z=9gUB?=sYJr#b3H0>y*IO2&C0)?x50*vw-pk?Xy$!Qc4F3O$#z59KeagbRHe-l3s= z7A#y=4g2-yzg2OKQ(a2FamTqrhqCeyE=wPo%)u zPqWYBIFsPBj~C~l9r{UaD|a?HK|V7Kif=&@AlKPCh_5jjpbA6_59kr?GXxM9qYB`e zvIYg@wNlFQo?aS>m^7%;gxks5)py%uN6qVw#0{zVT4mnIUyme0%o_gcP_|7%nRGhA zg}##{HpYZeM^{B`bzMHYyjx<{vs+2@)f}iGH2os|RiHE}*&K*KT>H0m6+3fPHrR$e zk?pkQY3@Ebvia!E@D!G+zaMggNz`(sjb=G#K$@9<-~!Ry^=xaqJWM$j>fSDYlUhv$ zkR?Qyd5gk6!E5Zv;@-<2*zRUynfgP}f8nqdiLolFlg@6!>i{OfTCQCJxd-w*+Pl^! zKIBLIqmP@g?xZS8p!(vh1;a@Z?^G90FYDE>RnfaLQ8I@hbQ53yqMOb!*p zg*NFYj&2RyvuwvO1viUN=<6n*eyr&kn68s(5-%}q@5{jZIizmJ@M7~=m&d|A7Tmuj z>}w)c41mffex1M#D$!%SbCq*~D^&@Gx7 zNH)cjD+))2NjW~l3N_KXAglb{rdt5FUl7Fa{Aa!XkvdJEB(`x!5;6akepkDMa-XTz zw0rl5*a;riew>@Pu`JcOLk+H~Mp5D~pZ|RMPmkb8YlT`?^W<;ffZ|b%oQC=m;Ucm{ z@J{o%s0)jn>#Ou%15$!8{-Q8960@(-whjnZj4GZoWvE=g$RxhAP31zT;TYN17SX^k=>mT$l|)Ejmee%@?<~P6cUYo zwsx(5E$*q~V;rK8p7rus+L7Ta&F(qT{;#c;Xg(cwUE!o zUY#Z>Js~!^?;+~?m}F>z!SLSkfGN)s*`>gQL>J6n2}j+-Ipmolz0a#e*l+cDwUl`+ z+BxsmvSHly1i=0;o#sY(=P+UVi)m76FQ|JU0@d4mJw0CZ@mf+zMVY-{r`cpx87<15 zOy{X_pm@>*(esv^vJvX%E|UmEee*Zv8BXSi3|by`)dWU291drw41C zf3~4)TT#&Ip*U}}MtJME5$|@9K=^M5HWG92TL#x~W#?)sixwxYT%qeNQ$KdH3#{a+ z79P4X9}@7tjZOlaMSBL~1G8MQpvWL^7?`10V{IJ536Wisky+3XE@@>}3 z@n~pQ1#7cZJ|)#n-Kxmf9>ryQUk5=(yc%Ndeu;BzZ7*Wz<{*68qFALm`syCmK&id6=1svbL22PG!YyS^sV=13fuoC^GT&K#it?V1Z-b)hQ9!Tf66` zGKz;Ktm=u;ERb>x&`$LIqj>b$(PzBny6HKivEzoUN(9E`o#-h>)>W>nL8?zfEy>1F zYhaPcEq7%(G-m30AZmk1x0p;1u+o8+$zzMKBwVl6++% zhZ#5Y?SBqdBquzo!9crcIUJ)HnwG^litG5LO)LGY>>mKA@o33;vmJ;gjD$Py)=Rw zPO7*(KknNhhMjBq((KP-B+QPFBF=zbt?(lP3ImrH(B9I+o%Okj!TPi60PIC5ez@(= z8mGk*ndyU<%O;c|CP8Qx%gqI{GkEW{AHWJ(D{vr1c+%cD=YI+$bSqmw7q^TR%^R!@ z=J{3GJNsSy;b_(`(l;{WD@gCOsR~8g^NW+*`g5}=6yT_hg091ZxUhXB{N&UoN(PD|C&T>VA zP)NhU829Gh;kogR>!aN;K|bZP1}E`6ktxsxWU&m@TEc~HYUbJ1-{$FvFbFh9EAcCT z>nX{Ly}$zK{miJth_zbWy8=ssH=ptelQ-QhH?o$%Gq%JcH;p3L79}9cJ&TJ}R8v@4;kma1jMb^-7y{QYAwxXT zmoFZ&3Y6Zq<*N~FIZFZ9qlAIOP#i&!^|V$^8vGz>q^Z`)oXGy*Npe@}b^;Q0Fm5b- zm$G?(!T^D$tuO$Y?7e+`4~HJ$$h(8YG>RQF_S-v&_Dm%U0+w6aSmb##v$tKZLzaP7 zR&kdvJb_v24`)`s3I!_`bOX+LZOs-4;4TH4b~nuOnU!s+$ry4J-`xg)F{|nxk6$Xw z{*72AWd0teC}%O$R&aUw@((J0`~mVTM)EV|1Hb-d}#ei&iOTL?7OC|Bk|s(YBBJKiaq4RgBZsr7rTUOKu$F=gKWI1oHt z06nKIO|6O3IWL_Oj3CTNIun{0V=on#1DY;zlu@< zribJQg7->vwE|e5+-fpP)oF@rdRny^1JBz9FUGJZKq#yHt5AnW=WlJP8Ee9&K3U3_ zC%yTlGMwdb&6Uzxwzme+tLpjQ$TGnEdqc;B1Uej6LW8X-0Lx9JEfz=3%|_7QkPt&bJjm;;DA@xrP{w*Wr@ z@vI~bQxd-ehTH@6uPP*Xq1<>Zk+E~pjq>jgy78RPn-QfpavCaA0wM6(XwgRJfoRKYp0`M_Sn2>QH2y5FCB+RZ3>dxj{)A66)SE3k2ie}EPp)q-3P%H& z{G>)>tOA8#d4~43NeC>@qcGkAbSD6c=?0w|EBcbc!==B5;(URl-f7;XENrOI-{+fY zUu7Ih%0m4E9iVV;5WZp!5pgAsUGigv3zv7M^}{5U$0H4-h%~fA4*gDrfCVP?MIW0y zKp_jX8=^gVxo0Z{r#9F6xyq6~eNrdFmE{abajJmvB991VoES=IJ|w9kxj2wz6Vz0q zI}<70A-K%3Y;Btn;QTwN;D%L^RJNTjv$roY00VU4Q;4GGiY(Iu=o^Y3P9YeXs=UGH zS$j7)#MelLk#if9* z&nh8msx-qresE<3x#J4EPPGhDBlc8_1F>XHvb8NzQG7ML(Ux}3&}BO`)?I2zdwVUk zwCB*a3%swCn6(Up&dgv@&CADjsbXA%qCd{yvznY%bm`GD7p)kJP}e62(ntB>{EgFF zIAK#eUqqOBQb`wwWt?p}5lyL|OsiHEmYE4^e(q3P=Dbd`Qhb#R?nOyK-vi^Iet$zq zcuT~ATm4ic+R9wiH}w0H33LYbEAbCwthy@OABu;s-{5A>)@1Jnj^~tURO~peti3fW zruYUB!(dDu6&AnjVNYP4m99rki|iX1nt|`aJpd*i)aa&3Q}~us)=v#pu1YP)A}x9x z0LUbj98inRe_aPwc2@a14=c`s`thIoKS&99g74K}9o8%@e3MI~Q3kWWI)ONB1pAOl zE+EzQm89_CVxj*%CL&zI4Fe?uqi-K3H@|wLJ^b4Zs|RE zU<_blUIdT>%84T;;Qla`pJS_J(rcHszdHRs5xq*CMCkmek zIDO+_=1GszPptXi*i1p7WAxWqoq&GXpT@)#lE8+@bu@iiC|xlY;!^AlVBqnOM@cAj zxy4>RK^f|RI`;VN+UH5SdwwH~U4)uP2zm#l%L+Ob;iOu0v}dNHhv?$?m#p|UQVDFU z!~pC)aiI36PvqVu(V;t!yW(U{Dd1B(QLtvXGU5{qx6%ZV^*ZmHD5#g~hoO?N1N6#} z$xcriIEQShILGQlqdxhcX)l1m?z_F*kOHsJcY_#7uNw1_CD+^lnZt*4iY8Y?48P&m zad*2w<%E>)J3oeRDpOqKd#-6h6$Qam80BBNXFxO64pr%Qo)VbFSZRcy1{f3k6-}hS z$EX&dFzj=aCfy@&FXOP>@Tdt)ifI)9=j*)zzVs4MHVwzK3cPoMV<1G~PsofZZa-igcu>5vYkLjmbdX+^qQ8bq2Qq?-W|kd~4Lkxq%BVQ8eg zV-V@?hTk21zdpb9{fEV3-F5FdJD&ZVefHku5*{34GAvPn6M^D1(9cupn>i;fcH=ZK zmB^y*&duc*4eY`~RASV{ghWKe5P%qYnrEec1!2-NB)h-JD;S;1QLnp-N_bEDrqvY7L zyyL@-#grr@?E#Rr`3s)(TfY@VAvzBc)8vo`q+}>r8=^fK;n7eHKYV*Wa}C3? zC|nSo9XQgv`WP5YPCR|D+jdwG!12UTCA8_)KPg>kD*q`4gBh^O^*5^x3v9{`fmSS7 z3jv%*^O++o$X$utgycn%>pO)8#GfY zpiI1G1u+Y`4q2svfP@vSO9d80?;!QBqZ3W9<9y+OsDpfn%vXwsZj9iMAdb?Crh@tg z6K9VVK}AU2M5U$@KMy!r$ayxClKxJa!s4AbIiU*n z^!RfJ&MeBoj`Y+fsrz`7B~T&;6f6Om5t^4{x6ogXWY96DAb)YbpgbC+R`fmB_5+Qs zT688xq{tOiL+m3(WhE5SVNS?|&|c`S+(5LJ3Gp>iN;vEEJt~ybPiQ+7ASPyHzOnmg z_ToC7s#5;cFl;N)sFPl>+$Xf#(?Fwx^VcaV?p=PEZ4=Nb~nSu8~ zk$ikz83Xp3C^ zQB>8r9zidP7jBFy@b)XI&G)hHkTc5j4^7uj>&xrHP~=h++dxPxZehY@F^Obu8xO1l zlXb{OkuN<&Tk-{V?!&qGM!<3RHrR3SMO~Bo-PiG5PdxbbDlH((os{XJ-CZ?sR#*I3 zy4#hRXl;HoEST6jl`jVq%{qZc-pvc~R)+bx{B*uFtse^Xf$X*rGP-d^47;BrnZ=lW zgPdHwcp~4~rU(2w-kiVGd^jjfbalW{k(3&G4CJ>O< zoBcLQFt+tuih%MhZMw!zvo*4WE?YB|May4-N*C#PGgNS-X`}%2i+<#kKEka0e$3cD z_Qd|Yd}usrU~N<8eEFlcLvn{3s?BPgb&Yg$N|}8>t#+f!57h5yR^*MpFrzIZ6?!&5 zKaekhnbQFJ!21PF*a{MWw}%dtsgvgyAo6)K@9$*PKUk~`C&AiZT@bJZLNKFj4PHXc zOdZG9LyPa z3>O?3TLyJ&I`15G&GEONR8-v0%_94$mU&$60TrYJ6br?_X}}lm^;&5+`lNF{IUg%{ zCToOe@(q%cRoAgA{uOXJn+2Ab-yugEuS9r0xD7fnNAtilijrS>1E2bA=3oY6mr1xb z85R6&i~plccpd`QGR+RiCOB+w`4NuhEX^3w!))OQV}ZR0ym+lRuaS#i+!M`9 z=ox?F$MZSBp;Rjq5OK@4AdJNya)waeCM~}&RHOW_Y+9GcLLMHR_h?8Z^J7-ppMB*EF0*4-8{J@NoAp{Ya5dAhvuGGHqVUo#Dan^!AN_VaYdPYf)Z?`B3S%70^ zIB*et5E)-GP|&Oo9~qD|-_2e{k`!y>_gj<>DV)Nm8TyAOMlSbO-q~`t21)wAQ27g)D(dqKX zx?vMEcRbjCE83sL0|x^K?4!D*j|h@d@m2?)zEWc>B7BoXg<4G0Ao7(;pc1Or^DQQ| zLKyo1ehjHAawcnF|6@_)H};8wJ$a1uSXnFMYU~b1|6@{%xLLy}Q{qW=|Kf}*=aE>F zmVQp;p1GJb6;S-z6XH|BZ&C!dNVz4-AunlZeXeg#7Is22^%y+fqm-qgH}y26Kr88K zSRB=kEyB9L| ze*)Db^!A)GE@xTe(t#k1kB6p%_GIiz|mW7ODMw3I%^o_%S8r{WwWrL%(^y^kO zBE0T|zt@*`+-ll!kFiB(n1zn~T-bQK{e#UfZbMsZCu6Om~uAn~!* zBBl3Kgz~k{-#lg6h-6}Je*{co0l5Aq8@?YnM4&@7Xsr@^T|RMDlbi1T3}j=js-CD0zW42->TWHTzRx!=M&=V`HP#E=s$ zLJrqVd+gKSKHyva>RBV}orws8qe2jOVEcoFX_KCAX(X$*_}cHhk$(R@lqTu#D&9QM zycOb2Y>tXoOfty4B-!j|^iC|2bhXHVD+Z4zM`TV7Gz(r#a~AdaLy~lO1ygDLw;uyueV&%eg>X!ybY&!{}-<`si zvCq&O5l0Y+0?QCA_)IDGLvN&Z9^Ve+(Uo}qR}le5F@-LZ2kYWqta&~4#CflRRLB6# z5wRISXbYZeklu5pSWHby)a)9r4dWVxB4kdbT4Tr|suI@P(2TZF(LQ!bLYeQKj>SxS z(VG+rtPTzG+qWY(O9dFWr;!bdLA{{hN7O(Wp>}O{cSD@J`#`x68Friik;n7bWU7Bz zCJ2RBk28?>*nN3nm63+8j|THo8}5t)O|$>1DKa|7o^Q!&0BJVC0l-pseJQigkYB8S z-TtpQ>Jzxj93kV@XD=ETS0Sx8c!E$>aZHX>&Ip(plYcop%+7)1i)UATYDxXIu`Dr( zKNRs+Zz-LJklpcXjSY+E0_rRpozbuYCsKOH%1B5cFV%he{>EO7=0Rr&?^1wM3k~$O zW75$2yaj?45Spz&iA+o!qFOr%)}p5xsHF#^xW5AG&#iRXk@vV3mclEU1KBfRtApdyUfCaY{2j<9K z_7jrId^xKlkbSICwM`92^1-NZtT?`{S7BGEYN$?__l{sZMBHbe;^i8!lO^&xmYAo= zZ6X1S2h0L0sqM9T|E~DPF>9oe#8HVf0&!zIi^6UrciXU^0e+Xj4uvvK3r?u*X@kF$ zz-~RRtFARW-1-b8k(uEGb@ao){7jeE82t~=Y{E=)xKj%|Qts<=wW5R3D4l52PijtI zL`rCIbbe4RGv%()-1S$mgUd#l^qq!qip+UEaC7xDU*KZR&GH~}HQ!8yJHbmzd+v|w z_@^f}`COy#|BdshjpViMe`3Y5p9Uf;=RKMqvvY3A?q*5+uMkKh2%MnT|CP`~iu^gS z<_<|-c=?zYYV`tRE(Ry{0p3)@jssS+b`Dvdf{q#OJt<6l58I??=-uV5Y|S#r`m_re zL*1G$ITd`Pw|ME2p-0pQr>0mpPVg1V!hQ2iCqXw_%!~-UIS^#w~qRv|I>en~G z95P*Bx?!;^MZbjd$^^I0@v0J?PjW1;|F^gf$z1r*EhaHS_&t1w&l*Je5-t4V>eOnPVXmj6~B4Bo@M6rXjDFPb6w+s=XK~YS*zh_iwuJ5g#wRd|t5Dk&AO*m(g?aySuw>8NW?G zkN%%Nz^>+!#)pXx9)|Pq@>!d9Xy1VG{%_mOR?_^g^U5L;ma@?7xPqP`$Go8WJcoDMn^YnwJq)&19%S~UG(u8qW}i3Z&f6%wVNC&~qcxF}BXPPl>Jhvf;EzvzmwJO}SM(%c>NeerW;BHu#Zn zNI3XABb2B7huK%466dL9U+8p_`Eqpl#!%0E`)C2F-V(wZcA>dbz_%5hMiN)&I3!EvHR~hIbhJobNIxwRb`?? z0098FCVh3HUAHSY<9ICd!u>!(kd4!_QnqzwUdbt6&F0izaU0BUfx5=)aBeH zU=~ouZTigdthGh#Tgxr$QIsm#3>%B^YC!mRS9rU}XB+Y8xvowsVKYnBk?z;FB(FNU zSh3#@O6m+pN^uvua$e}gyv=uamm!_0m`WhwV$1pPVKuGOXdddJbs2mtah~WnEo#yC zB<542?Dv0x8z>|toi7`zpZq&aQ1UId62I(bOuu%2Gf_{sz6IG#v*_t3LAw5Vv~X)u zo6at~j>w-}(b1jQE9vm5!9d1aRDXLLBY?~dC`vp{>>ro6Tac74;(1L5&s`3j=;hW_ z$(Yx6`A@B17vNC2sH!@C-t{RgJw62aqGxJ;J~wphPKY6@A@i?QNx9p=oaZ}$?w)u{ z9jB2zYvUQ=%GVDst=@VG4?)1FC?0r7;%QbW`it*f{ek4#M?IdD5LZU*Y4-l{nP$U} zzrVl3vWxKbrz;Ac`#V*swE6cOR|1E}7Gm13!ZC#;RPMm|b}J@}^dP)0 zQ@)lQiQn!i=xp%3Kyql^1lgkxd~C=snW3!?X-3vgHwy7vF{hntWloX|t!ROx>i=d> z$G*hoyQ|ET_sL87yC`}VWWLIgE~#r3rgvDE^T`pazOU31qhu=J-Bmy9E{NHRsBm0% z-u~IgSX&dE)fK@D)fdC2uoJRuSrMr9Uietl&7XJ8n#*i5{!#!LxB%*OvR-liwk@V( z<5s%B86ASHw(ShThXz_vY|ukZ~XN5svSIB*7m@9835V0O0!y29L$B+~uwE9Pl_9a%1m{R5tVN zCusoF06?23`_A-M!igHQ3n0o+pE^~ajInsd&t_p29c~f`w{F@D7p*$v`q~aV5S#X$ z-u#cIZ+=9P9<^Nzo#6Dg4D=|3*!xC?!l=(5oNM14BdhHb!YEt?o^@^+m)4#`MrzN4 zwFFB$m%hfIt_*f#Uk-V$UOIGIE!I12U_Rm`>va6@wDdI%-ivYj5Pku7;!oI-{Q;na zB14bW${*OBRR@MbE?vCxvysm@6yg-Qg+!erJKg9a1 z5QTE=Vr$-m&U4T6g%ut#51MagHK)#PZfdEnZCbgEZSK!hcH1zKiPM}%SEGKp<4QHI zNZS0v>^LsK66o3F$^S+epoF9FS4GB$)D5F=Lp$HuS875S=rZ5@tTN$6aDFzlA{9XM~5 zHK9o7TmEiA3E%VDbi0(HfF#2x_^=|{hRy=RE&ZV zDIb{s*FiK&h#kq|>G#d1aQmD5zWKWzBhF+tU!~>M>5F zt)p`9zXixR{nTh18L9B=6YjsXE4vRMH)`C&F-OnmOig^eq)!?wl@COb3q<)U7Z~kM zxXNQkNDCgMSL1TtR?9Lm!-a_Bs|=Jyh#Pujb;N8B{)iJV8{54hQ^=aq2+CnxLAH82 zTmTXeTJt5KRNY>Wy12LqRlM=vYE?bVUHy@pe7o>mkpIum?>dR+EC(aD<3pkC?cG}_ zi;^#dnm_)qXZ>?Ub2&xr7b8&Ym11~?o~E^;?5B+&qG#rC%5zqTN28(TRa!PR03M-m zGGcAB?XZg8S=Ht7^_<o1ef(mS~P=>yZ#Uns| zbWAd*5IdXI*{7o{molWe;jC zRv|0hTnh_9tf`wJ{-W{GxfpB#mcGFlXCnoQAN()HK$s+xX~xyAE5UdDdx#Pqc%Gy8 zqiYeWB7D6R(W7WY7y<2LRfeM=QrJb~l1Q3q>1t1sCIyyqMUUF{j4 zC@;h5uM#v}sKIGBRZF+6&2M~5dE(gbZ1=q5dDr*a+vX%{q&NaR7re})MZcAkL-)A; z6ETB#jb|2Rd%Gk$(T4HVMekTJV-YZ8C9N>~SU;k{#Xt*oz{fZ@y`3Z$(qGYqG=QW! z4Ls^7sTZU6t_x)`BRLE#pXp$mi|mcvC@1J&Z%$uSx{ov}8Cdc}=0ScztR{7%d|B16 zd1?N=><_*vau#LzU?PefEiwji0z1_oUfU;V*fcTA`6;{N`T?61rz6(=2vbGxkuXNb zR1mtb``>TXTX~-k>6km>2(<;LBQG0ZA;v`c*8(agq=Uw>RDPhMPDSS8wmUYh1~ zTXDI;dO{LAANT3Wn6ds!0eZ2n85RWh8M$maBszs8%FME|lH;|D(5ur|P3^uK=L+j& zIoCB*VgtAIqhArI_LJUvE|VeU_TJ}JY-iBIf5+%YM9UJb_FBk^o;7mZuZ#MQi zN#a(4UL5E2#U>gA)uAHI0DoSXxg7gj7|Q%}N!cbUq2?(Yq>yBeMa|6*CV7!=)Jav3 z!ArBgtPjQ^I@yP=mcD;cLoRy(Wy{)w;yEv16G!CWyRY-e_rkjh_Uo>~4|2<=Zl^PK ztpb~jY0deJ=klC@>uj$dPL0PjZFM`I?akRexiFBRFlb+zA+B^Z5VrcX$2=m51gw%i z_6?G2jV4B#bQ}VvP#SbgegGG0+@(uuac{`#QZZk(zY%ikUq3ddp($KP2&is4)g^SX zQ*r0k%Fd5{!zl|h{Ln@%&8k(y>v!@&Y^KInzB z-^A>_6r6v0qX1-3hxj=eK+8C` z4|Y+r8uP6xjzQh9=k)=RxN`M7Ht|lt7ltdJc!V`p_2ph{CYXB*Bj82Mp590cxw<@JtyVFq?pxK&8YZ1RYL$Y^ML>=VAOP5`^dwFq!ncLRaKCGeqv`c`i@I)o!f+P3mdSa zjGXS8UoX{!io{iKOUZf)b7bZO?+$a%FWa~uBlABb58T0{8ngshs!y$D5eeo8E^scR z=uCl!PL|@Bk5PVi=Fk3vd2E?CQ&d3kgCMhpyeLv1A0jhbw{le<3OBL{T)|t!ac~f!d<}e?t{D6VP?c+_4=7rKWZ%W70869=s}KQuxA_2feA*?H zlaaFh)!j`AJm6pZXzM?USx+X+_nSHXFyKg1MaqC<2ye}|X=aosFQ>9#)vm7|E-rc~ z4~imKLnSchwwy%rf|$?&mox_~*j-6m4IlVGGzKO2#qr+5?WF`sNtkLkO@($3q{5ib zu4^YcbIp&?=>?#9mC~pE#GK$UhI2-SOT%*T2Yt35dw*4ZEf+ zq0=jH&f3ARota%9D^|rssYF50f|8yg|8KYC66s^!bhwHH5n>8W-f0A+PEYd{5@F0= z)YewZG;a}16{5kN+cg4s$YFJ@6L|G6`q(U!-AkHv2`sVM8FSnVpO>U>@!TI);`Lsh zz65IlwvoXy&c=v}a#mQCS71O2`s7#NCh*d8|95d*gr*ut1Uzse_QLUMwm8R>KDHgD zNBn@5vT|gEi;Vyma)U21Uv8|G_^5zJl(R!kFDbhaoS1sdl4y{tD7)rZ*NBUIY1Q+& zQ_SvzUyu27xU)n84~fu~WGKW3YGNiBgv3ATu^mW7#FWs6wA!wgnhm70u&=)W9{@UD zqVo2goE2ZM}xgJ7zk%W05KcI9tFu_ z_5~&Rx!_6AxYSq3;9atq!<<}RE5=LwIN z&x_|;{m0S?9KYhiZNxJi09ekcmu}Ay(TPZn8eRGP)xv`_qC7jl7Za!oy)*nGgCx%g zylXp5FR&96o9a@jV#(*c1zSWZ;q_!&;Y(igv5d|Y=lWUV7`PIC!xzS(r1TbvepDMN zS21bByd*hoEMjSa^tMMjk&ar*cx%uSpy@Ax=c;$J<_~FO1LQ%DtP2vq#%&3W`yS@_ z1eYs4RaS3BG>*dHuUwP`^mV%vNf;lo zlqc}0`#QyI@H_n{ zNi+GSp9+-rWfz@q1O++E_3yGZ*4^LmSiPi&JqO+?rj??_kb`ofXzOul@GuZHMzVUp zXWlLe+h}}+O2bftZz%&0`||J|{R&JG!~F0BtWK0nS>QMAicRn+a8u@Jd^X02S9ooO z!YduHBaf8906Y)VFF; zwkuqPXsX<(0Ek=XOCb_S2To!I(rkBop?s!v0^XLxf5@N#r0m zElRihX+8fgZ@(eRz-_&%>9ga}k1DM%Kp3nA5U~le!z6_HBT4e1Yo5;Uq15hJ)?Db> ztF-GC*o;T3;3i{KQDRVDT%ZTwuNNvt8u4fNq+&L6h&?=-+@NhOi`}`j;55q?IF}oz z!%>9uYj6gz*5wrR5x~Io@k!OI{v5F>e%?uWW0BU6*5W_RnrLMYii<1&6q^CKQd2zi zTRO@-Emx!Kwg*>;P3rVc?`&ujPkot}%F<%c5Qu)$0v=`MFagOjw-3INgZiO7;WY9t z>=)3if%w};itU!LQmKEK?xJZ(FQjPg6z*x~-nAn9S1o}F?J6pG-ddt`E4A1q~& zXeDLSECHZ@PD}T*id|^&+s>!`myVbY7>k;hlI@T`2|b2zUXkqvn6$xWM+tqbGu)=} z&TJm1zU}HnmNjlT;M%ADYH%R4Lemlo0pwnQFA&i$2Y7KZHs5?BHE8~l`+htB5v{c~ z#xCN+4`wwRLOCp88#e93Z{(q`P+mm*GAv3EC(>9V;v1@i6U}u>OlC|>&v*c29H&`p zKT?Coh?20?{a3K_l&QVz9cL@ohgMuf6gH=b7+xS&z|TCj72i)Y2t;E70}_ zRDa*a8B@sJMPffuTjZ(pOFBftEx7cSQ2Ki1v*S^oFi!cI7(7sL{kT(8ifUXoCh#mQ zFQ*;-We@1=|G}i?=UmM{S_6_Gz#Z*P;@AclwgDY-JADF7L;F1W31tyZXGC_wHN0b> zh2e_P6XM&eIx8Ce942S0H?os=yg|zo3FLqW{Qx$!?>cTZ2j}{|MrXeTy)On^C{1oo zk6%9Klo?Psc>m?OIT&n!4by%Go+c#~r3drjlk(gA3XAOoO^Wy9su=KtRhCa(;TqgNqCs>-e8ME(Wg@r zvYEq697!;La5pI%stI{YR~&~+H%JETTrPVTP@_i%RTe#>ERhi8EJVzE+nAyMT{4q- zCRd|P&+q<@7%FzY5IQh69Jqs7(ux~{poL#8B&L&6qXl>uAp1oCrx4$N(#}i|;1L}h zk3Q6@F%fPFBic{YHs#&L*Gv-~y?OYxA>-qHzZgg3E+#834;+H90XvI-o#^#d@)DC+ zN&n-Q_0vQ<3z*~X?lWB+pVr$39&}(MN_4Lskn>A-e&_Wqs#biII^t4#)%d@77d%)+i5Be^5ef-fd- z=IBfa#%jZbvx7VWx_ez1A65i zTz^TE2;+lGBz@(Q64HxeEdHFn|0np+f02A>s1+;q*CTn?uhgDNS23?(qHFMKFY4|3 zh%fMI4LD7*^{VD0l%ogV-RZXlgguJpo)d#6C4yh`mbqUXt%tJ(djVEnp9XBlV}>Sg z1OZ7l(ofVU>;6(qm33F2t?#6fH}b#oznr<)XVZR%+d?KL~YQBHpB z-T23>0oYDB5FkZby}9S{w+HQQa)8cAdr;cnLm(`@w^7 zHVS;1NdZreVkJY0>$>ubBwf!jNMgY0}V)v&Y z8(3fl;4Mv>_20gs7)sOD@b)b?5FJZ3bl+N0Jy10odXjYCjA%a@upaE1a26Weq<)F2BH+5~t&%Ek?{cHx@`45@L$o`0MJoiJ z0%sl!;KRyN0MU9LYogKAG;)&2Y;F`pvvQh79xOODLUnDnfuEgEAL|8t*~&OWbM1_1 z6qRA%3md4s7ynop0y2M?4kMZ1e8vC|YYc!}75x~hl7o`LP1Y>NFwrMO{pL;Co-9Pb zvFZBnvDr#amKiWGLU};ZFKl=?3AX|z+kY?=yi4Lomg*ztr`!wCrh8ayr)!2ELDk{Z zO8=);1j=vPzl>$h-;d#$_&q-a24>VP|L;tK7o>4Y@3s`dmOT_oDl3y_?1LhQO z&--?~aPku}!a?l^%Mk4$L-&~@9C?nUIUoT*9|xd2eTT(#iek3ud%v9ZYD?3S@}(e| zp~5ms0UAD~4Z@raKyB;*bUMg?+5~>hWn>qT)Z5U{)h6)&u~H=9SYjx27)l`zqseY@xh`R(Lm(O)?qUwwepm ztYMbk!w4Gkh0NuGMR{CM?~D&HIl@R-OKu>pGfX03ar9|zx1 zgc~0i)D@n4v}t(tOh*PuTF65!;1VkBU@GUuh-4{yMAX4x2Q0QT3gTF0g7?r0M1C0d zHWMlktpIwR#380`cke6v5jFTC9DX{URTo}nL?rA}Lb@ihi#fZ!n~>r>u)j^JZ67*a zPCJe78T|3OOdbl)RfshCGi7uFA1RV}B9UZ)F+*EQ??3SQbKQZFxT9}%XV(uQKq|QO zqh=KXKGjt3?1;lr(&cH}ez;ev-d2RVN=5PrKKz&1d1s7Nh(z*)fKUzzFa-I)ezq1VTE4dfhgnb1Z#~(l{L}6&PM6&9i0x1RavM3? zM3nixDN9FpmJ+ZQWB+mChGzzr>7V>6t>%=$dTuUQ0wVg> zPhzbjOg}XQsWs2Kt7(<3vGbW zl+Jr)kMuX9aeArpLK@8#k9PZKHts%X&ba)EhdbRUH+UbemIKmfn(zcmn&j$_JPGZj zR1UHnO|zX2ARTewo<9gDUT{EK=&oMdfK9M?;IZt|f>ICzr%hNVXx1EW%y9>e`vv@> zrv02-I5W3`?dC|+<3rZ06Cyug6+n-OKMgh{wlB<2bJp5OHJ&rl~P$bvk~ z7VKT>itF7ZiVnuU`->z{YhKh6*UV@T_d%7isil!Nq8{TjUKcvV5uz>Ih1jWT$LWJx zN?Xv~iionZfuO)o&{1=d+G|256yQXu7;)rNP1#{z4dShJ2LPYy`M1zdq{0W8r7)5O z+?rZpgtpUF-on@s)5sRQ$webp_J=o2zXbz07cbXDcX<1p5xD;d!u$~~DV$o>U-(z| zZ|dqBJa(Q}j%1$;??s-19Y?6`8rIpigqX6UN#A3_WGBFo5$u|TVNHlIl8XUu&wVid zWtehu#~P>l^zD4%<43hfGGvui$=5a_)L=7@k8Fxwqhai;~OQhUux#h^l?U9qz;NUV8d+ zD_hBHt2yALdWGC7u77)D3%Ws*a)b;D9`%+>cwx3+_YiA#-n;v4lO7{e!fm}8N zA_Rv${0KN6LDNwB%f|9@13s^0P8?AXx8%0(KGWXdJkKv*n%IH54EXG|79FbHT}Y6> zqCyT>MZdb!p=jt>)uwqdq+fZD(zZL(uKEsd(<7s552xqCv1%XIvuD2|V*;&{zN|_s z%a?S~Y+DRGlT(cGy!g!SFS3wjL0(##E%9w(l6cQf?}(yQlE%W|9yWOyiuaS#f8ruk zwTebYnktN^+rxUG{gHG04(HND+NkY9J1c5nMqF)p-xiTR<#{gUK5&WKsylkf88}9Q zRQz_k%z?mIA9_)4OHhyrO#T6w+$_dQ$aN&*9 zD?dDE02e(8@1M1Ex_g$sdO5-W$>%oKO~ezQvbi%6g7&`f zT9PsV@6F|xrc~|gGKLcC# zoT+jl$E8qr_Kr%5ZIrdtr1oywj&(!zjt%S^pEMQwv-%Q(d@*)~L=|ktvK2M6;y6YT zW3#s7R+@buIejrv@=VD%j?awpoAbXT=)Ep1uM?G2__VU6?D}Qti`HfEcMW;~i}~

2!cjL zDzAuDJh9xg`;l@_?+!-pOV3$pB$4!C4og^9?`L9dYOKwj&Deduw`4K|I0nv@Y#-!$ z^j*Uo+h#ULB&1q}%JIyP1x}V=jIv}PlHW0%OiX;(+!uIVp+W(KE^^d*>Y6)qbqT#m zt(CHzQ$9SdR52ttF$?*}J>7{RG;8U=NsYD>vl7&|2zlPAoV61#S%4uoV!g81IZ{`X z8T3%}6tT&R{8^;YT#=IDS5LX){gtXHlg}dq>E}84B0Cg0!TM&ON{l0mQX_oMs&-6# zJilAH=e@cislK(htCTgJ-(zYP!f!*&weZ-&T~E%f-oaEvr#4deyAE)U$-zST-ZL2@ zn{gi2Tm*JuKXvSG7w3{`j5%iT>cLGds1vw(CcCNByLkC0XAtu+g^1GP`i%JsDFd4U zeNS!j4&AYoI%MKLHf_0QKQ>^74t{7?wMzUwoac$vl-)1}Tst4gc{M=c_m=G_vjTgD z*D2Eid!=IV%$Tqg42C(fPPw%!rlL2kP5Sgkfos;#Sg=Xb+s%l|U(K~QGpg~L?aug) z%y(ezeZpMOS{ro9_vLKqV|uwwF89fgJ+=Jeo2o&1QYu#QPCNn^x{%IVo(faa8@gAJ z$GEmB!wc#DPbZSE%iU{Ys0_wj6rto1-3T0SjpXng_fZ~iQ|k)P=a^CVrv~5-eqiS^NKXEp>oTe<>!4LV1R>=~)#ur7F)*;Z*_`~g|eak1B zN{V9Wb*gXA)-12=

pN(VDOcuRh}f&Medh02U$a9OioZ-@DHuoamLxF5 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 W?MJWWg;@!JkCwWgTJ>Gq=>GwrHZeK? literal 0 HcmV?d00001 diff --git a/docs/_static/images/batch_tree.png b/docs/_static/images/batch_tree.png new file mode 100644 index 0000000000000000000000000000000000000000..b914c2ce1243669a18de871bc9e010e681298c32 GIT binary patch literal 78857 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 HOdkIir5cKD literal 0 HcmV?d00001 diff --git a/docs/index.rst b/docs/index.rst index ab4a8a1f8..ef2342d86 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -70,6 +70,7 @@ Tianshou is still under development, you can also check out the documents in sta tutorials/dqn tutorials/concepts + tutorials/batch tutorials/trick tutorials/cheatsheet diff --git a/docs/tutorials/batch.rst b/docs/tutorials/batch.rst new file mode 100644 index 000000000..390fc41ac --- /dev/null +++ b/docs/tutorials/batch.rst @@ -0,0 +1,491 @@ +.. _batch_concept: + +Understand Batch +================ + +:class:`~tianshou.data.Batch` is the internal data structure extensively used in Tianshou. It is designed to store and manipulate hierarchical named tensors. This tutorial aims to help users correctly understand the concept and the behavior of ``Batch`` so that users can make the best of Tianshou. + +The tutorial has three parts. We first explain the concept of hierarchical named tensors, and introduce basic usage of ``Batch``, followed by advanced topics of ``Batch``. + +Hierarchical Named Tensors +--------------------------- + +.. sidebar:: The structure of a Batch shown by a tree + + .. Figure:: ../_static/images/batch_tree.png + +"Hierarchical named tensors" refers to a set of tensors where their names form a hierarchy. Suppose there are four tensors ``[t1, t2, t3, t4]`` with names ``[name1, name2, name3, name4]``, where ``name1`` and ``name2`` belong to the same namespace ``name0``, then the full name of tensor ``t1`` is ``name0.name1``. That is, the hierarchy lies in the names of tensors. + +We can describe the structure of hierarchical named tensors using a tree in the right. There is always a "virtual root" node to represent the whole object; internal nodes are keys (names), and leaf nodes are values (scalars or tensors). + +Hierarchical named tensors are needed because we have to deal with the heterogeneity of reinforcement learning problems. The abstraction of RL is very simple, just:: + + state, reward, done = env.step(action) + +``reward`` and ``done`` are simple, they are mostly scalar values. However, the ``state`` and ``action`` vary with environments. For example, ``state`` can be simply a vector, a tensor, or a camera input combined with sensory input. In the last case, it is natural to store them as hierarchical named tensors. This hierarchy can go beyond ``state`` and ``action``: we can store ``state``, ``action``, ``reward``, and ``done`` together as hierarchical named tensors. + +Note that, storing hierarchical named tensors is as easy as creating nested dictionary objects: +:: + + { + 'done': done, + 'reward': reward, + 'state': { + 'camera': camera, + 'sensory': sensory + } + 'action': { + 'direct': direct, + 'point_3d': point_3d, + 'force': force, + } + } + +The real problem is how to **manipulate them**, such as adding new transition tuples into replay buffer and dealing with their heterogeneity. ``Batch`` is designed to easily create, store, and manipulate these hierarchical named tensors. + +Basic Usages +------------ + +Here we cover some basic usages of ``Batch``, describing what ``Batch`` contains, how to construct ``Batch`` objects and how to manipulate them. + +What Does Batch Contain +^^^^^^^^^^^^^^^^^^^^^^^ + +The content of ``Batch`` objects can be defined by the following rules. + +1. A ``Batch`` object can be an empty ``Batch()``, or have at least one key-value pairs. ``Batch()`` can be used to reserve keys, too. See :ref:`key_reservations` for this advanced usage. + +2. The keys are always strings (they are names of corresponding values). + +3. The values can be scalars, tensors, or Batch objects. The recurse definition makes it possible to form a hierarchy of batches. + +4. Tensors are the most important values. In short, tensors are n-dimensional arrays of the same data type. We support two types of tensors: `PyTorch `_ tensor type ``torch.Tensor`` and `NumPy `_ tensor type ``np.ndarray``. + +5. Scalars are also valid values. A scalar is a single boolean, number, or object. They can be python scalar (``False``, ``1``, ``2.3``, ``None``, ``'hello'``) or NumPy scalar (``np.bool_(True)``, ``np.int32(1)``, ``np.float64(2.3)``). They just shouldn't be mixed up with Batch/dict/tensors. + +.. note:: + + ``Batch`` cannot store ``dict`` objects, because internally ``Batch`` uses ``dict`` to store data. During construction, ``dict`` objects will be automatically converted to ``Batch`` objects. + + The data types of tensors are bool and numbers (any size of int and float as long as they are supported by NumPy or PyTorch). Besides, NumPy supports ndarray of objects and we take advantage of this feature to store non-number objects in ``Batch``. If one wants to store data that are neither boolean nor numbers (such as strings and sets), they can store the data in ``np.ndarray`` with the ``np.object`` data type. This way, ``Batch`` can store any type of python objects. + +Construction of Batch +^^^^^^^^^^^^^^^^^^^^^ + +There are two ways to construct a ``Batch`` object: from a ``dict``, or using ``kwargs``. Below are some code snippets. + +.. raw:: html + +

+ Construct Batch from dict + +.. code-block:: python + + >>> # directly passing a dict object (possibly nested) is ok + >>> data = Batch({'a': 4, 'b': [5, 5], 'c': '2312312'}) + >>> # the list will automatically be converted to numpy array + >>> data.b + array([5, 5]) + >>> data.b = np.array([3, 4, 5]) + >>> print(data) + Batch( + a: 4, + b: array([3, 4, 5]), + c: '2312312', + ) + >>> # a list of dict objects (possibly nested) will be automatically stacked + >>> data = Batch([{'a': 0.0, 'b': "hello"}, {'a': 1.0, 'b': "world"}]) + >>> print(data) + Batch( + a: array([0., 1.]), + b: array(['hello', 'world'], dtype=object), + ) + +.. raw:: html + +

+ +.. raw:: html + +
+ Construct Batch from kwargs + +.. code-block:: python + + >>> # construct a Batch with keyword arguments + >>> data = Batch(a=[4, 4], b=[5, 5], c=[None, None]) + >>> print(data) + Batch( + a: array([4, 4]), + b: array([5, 5]), + c: array([None, None], dtype=object), + ) + >>> # combining keyword arguments and batch_dict works fine + >>> data = Batch({'a':[4, 4], 'b':[5, 5]}, c=[None, None]) # the first argument is a dict, and 'c' is a keyword argument + >>> print(data) + Batch( + a: array([4, 4]), + b: array([5, 5]), + c: array([None, None], dtype=object), + ) + >>> arr = np.zeros((3, 4)) + >>> # By default, Batch only keeps the reference to the data, but it also supports data copying + >>> data = Batch(arr=arr, copy=True) # data.arr now is a copy of 'arr' + +.. raw:: html + +

+ +Data Manipulation With Batch +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Users can access the internal data by ``b.key`` or ``b[key]``, where ``b.key`` finds the sub-tree with ``key`` as the root node. If the result is a sub-tree with non-empty keys, the key-reference can be chained, i.e. ``b.key.key1.key2.key3``. When it reaches a leaf node, users get the data (scalars/tensors) stored in that ``Batch`` object. + +.. raw:: html + +
+ Access data stored in Batch + +.. code-block:: python + + >>> data = Batch(a=4, b=[5, 5]) + >>> print(data.b) + [5 5] + >>> # obj.key is equivalent to obj["key"] + >>> print(data["a"]) + 4 + >>> # iterating over data items like a dict is supported + >>> for key, value in data.items(): + >>> print(f"{key}: {value}") + a: 4 + b: [5, 5] + >>> # obj.keys() and obj.values() work just like dict.keys() and dict.values() + >>> for key in data.keys(): + >>> print(f"{key}") + a + b + >>> # obj.update() behaves like dict.update() + >>> # this is the same as data.c = 1; data.c = 2; data.e = 3; + >>> data.update(c=1, d=2, e=3) + >>> print(data) + Batch( + a: 4, + b: array([5, 5]), + c: 1, + d: 2, + e: 3, + ) + +.. raw:: html + +

+ +.. note:: + + If ``data`` is a ``dict`` object, ``for x in data`` iterates over keys in the dict. However, it has a different meaning for ``Batch`` objects: ``for x in data`` iterates over ``data[0], data[1], ..., data[-1]``. An example is given below. + +``Batch`` also partially reproduces the NumPy ndarray APIs. It supports advanced slicing, such as ``batch[:, i]`` so long as the slice is valid. Broadcast mechanism of NumPy works for ``Batch``, too. + +.. raw:: html + +
+ Length, shape, indexing, and slicing of Batch + +.. code-block:: python + + >>> # initialize Batch with tensors + >>> data = Batch(a=np.array([[0.0, 2.0], [1.0, 3.0]]), b=[[5, -5], [1, -2]]) + >>> # if values have the same length/shape, that length/shape is used for this Batch + >>> # else, check the advanced topic for details + >>> print(len(data)) + 2 + >>> print(data.shape) + [2, 2] + >>> # access the first item of all the stored tensors, while keeping the structure of Batch + >>> print(data[0]) + Batch( + a: array([0., 2.]) + b: array([ 5, -5]), + ) + >>> # iterates over ``data[0], data[1], ..., data[-1]`` + >>> for sample in data: + >>> print(sample.a) + [0. 2.] + [1. 3.] + + >>> # Advanced slicing works just fine + >>> # Arithmetic operations are passed to each value in the Batch, with broadcast enabled + >>> data[:, 1] += 1 + >>> print(data) + Batch( + a: array([[0., 3.], + [1., 4.]]), + b: array([[ 5, -4]]), + ) + + >>> # amazingly, you can directly apply np.mean to a Batch object + >>> print(np.mean(data)) + Batch( + a: 1.5, + b: -0.25, + ) + + >>> # directly converted to a list is also available + >>> list(data) + [Batch( + a: array([0., 3.]), + b: array([ 5, -4]), + ), + Batch( + a: array([1., 4.]), + b: array([ 1, -1]), + )] + +.. raw:: html + +

+ +Stacking and concatenating multiple ``Batch`` instances, or split an instance into multiple batches, they are all easy and intuitive in Tianshou. For now, we stick to the aggregation (stack/concatenate) of homogeneous (same structure) batches. Stack/Concatenation of heterogeneous batches are discussed in :ref:`aggregation`. + +.. raw:: html + +
+ Stack / Concatenate / Split of Batches + +.. code-block:: python + + >>> data_1 = Batch(a=np.array([0.0, 2.0]), b=5) + >>> data_2 = Batch(a=np.array([1.0, 3.0]), b=-5) + >>> data = Batch.stack((data_1, data_2)) + >>> print(data) + Batch( + b: array([ 5, -5]), + a: array([[0., 2.], + [1., 3.]]), + ) + >>> # split supports random shuffling + >>> data_split = list(data.split(1, shuffle=False)) + >>> print(list(data.split(1, shuffle=False))) + [Batch( + b: array([5]), + a: array([[0., 2.]]), + ), Batch( + b: array([-5]), + a: array([[1., 3.]]), + )] + >>> data_cat = Batch.cat(data_split) + >>> print(data_cat) + Batch( + b: array([ 5, -5]), + a: array([[0., 2.], + [1., 3.]]), + ) + +.. raw:: html + +

+ +Advanced Topics +--------------- + +From here on, this tutorial focuses on advanced topics of ``Batch``, including key reservation, length/shape, and aggregation of heterogeneous batches. + +.. _key_reservations: + +Key Reservations +^^^^^^^^^^^^^^^^ + +.. sidebar:: The structure of a Batch with reserved keys + + .. Figure:: ../_static/images/batch_reserve.png + +In many cases, we know in the first place what keys we have, but we do not know the shape of values until we run the environment. To deal with this, Tianshou supports key reservations: **reserve a key and use a placeholder value**. + +The usage is easy: just use ``Batch()`` to be the value of reserved keys. + +.. code-block:: python + + a = Batch(b=Batch()) # 'b' is a reserved key + # this is called hierarchical key reservation + a = Batch(b=Batch(c=Batch()), d=Batch()) # 'c' and 'd' are reserved key + # the structure of this last Batch is shown in the right figure + a = Batch(key1=tensor1, key2=tensor2, key3=Batch(key4=Batch(), key5=Batch())) + +Still, we can use a tree (in the right) to show the structure of ``Batch`` objects with reserved keys, where reserved keys are special internal nodes that do not have attached leaf nodes. + +.. note:: + + Reserved keys mean that in the future there will eventually be values attached to them. The values can be scalars, tensors, or even **Batch** objects. Understanding this is critical to understand the behavior of ``Batch`` when dealing with heterogeneous Batches. + +The introduction of reserved keys gives rise to the need to check if a key is reserved. Tianshou provides ``Batch.is_empty`` to achieve this. + +.. raw:: html + +
+ Examples of Batch.is_empty + +.. code-block:: python + + >>> Batch().is_empty() + True + >>> Batch(a=Batch(), b=Batch(c=Batch())).is_empty() + False + >>> Batch(a=Batch(), b=Batch(c=Batch())).is_empty(recurse=True) + True + >>> Batch(d=1).is_empty() + False + >>> Batch(a=np.float64(1.0)).is_empty() + False + +.. raw:: html + +

+ +The ``Batch.is_empty`` function has an option to decide whether to identify direct emptiness (just a ``Batch()``) or to identify recurse emptiness (a ``Batch`` object without any scalar/tensor leaf nodes). + +.. note:: + + Do not get confused with ``Batch.is_empty`` and ``Batch.empty``. ``Batch.empty`` and its in-place variant ``Batch.empty_`` are used to set some values to zeros or None. Check the API documentation for further details. + +Length and Shape +^^^^^^^^^^^^^^^^ + +The most common usage of ``Batch`` is to store a Batch of data. The term "Batch" comes from the deep learning community to denote a mini-batch of sampled data from the whole dataset. In this regard, "Batch" typically means a collection of tensors whose first dimensions are the same. Then the length of a ``Batch`` object is simply the batch-size. + +If all the leaf nodes in a ``Batch`` object are tensors, but they have different lengths, they can be readily stored in ``Batch``. However, for ``Batch`` of this kind, the ``len(obj)`` seems a bit ambiguous. Currently, Tianshou returns the length of the shortest tensor, but we strongly recommend that users do not use the ``len(obj)`` operator on ``Batch`` objects with tensors of different lengths. + +.. raw:: html + +
+ Examples of len and obj.shape for Batch objects + +.. code-block:: python + + >>> data = Batch(a=[5., 4.], b=np.zeros((2, 3, 4))) + >>> data.shape + [2] + >>> len(data) + 2 + >>> data[0].shape + [] + >>> len(data[0]) + TypeError: Object of type 'Batch' has no len() + +.. raw:: html + +

+ +.. note:: + + Following the convention of scientific computation, scalars have no length. If there is any scalar leaf node in a ``Batch`` object, an exception will occur when users call ``len(obj)``. + + Besides, values of reserved keys are undetermined, so they have no length, neither. Or, to be specific, values of reserved keys have lengths of **any**. When there is a mix of tensors and reserved keys, the latter will be ignored in ``len(obj)`` and the minimum length of tensors is returned. When there is not any tensor in the ``Batch`` object, Tianshou raises an exception, too. + +The ``obj.shape`` attribute of ``Batch`` behaves somewhat similar to ``len(obj)``: + +1. If all the leaf nodes in a ``Batch`` object are tensors with the same shape, that shape is returned. + +2. If all the leaf nodes in a ``Batch`` object are tensors but they have different shapes, the minimum length of each dimension is returned. + +3. If there is any scalar value in a ``Batch`` object, ``obj.shape`` returns ``[]``. + +4. The shape of reserved keys is undetermined, too. We treat their shape as ``[]``. + +.. _aggregation: + +Aggregation of Heterogeneous Batches +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +In this section, we talk about aggregation operators (stack/concatenate) on heterogeneous ``Batch`` objects. +The following picture will give you an intuitive understanding of this behavior. It shows two examples of aggregation operators with heterogeneous ``Batch``. The shapes of tensors are annotated in the leaf nodes. + +.. image:: ../_static/images/aggregation.png + +We only consider the heterogeneity in the structure of ``Batch`` objects. The aggregation operators are eventually done by NumPy/PyTorch operators (``np.stack``, ``np.concatenate``, ``torch.stack``, ``torch.cat``). Heterogeneity in values can fail these operators (such as stacking ``np.ndarray`` with ``torch.Tensor``, or stacking tensors with different shapes) and an exception will be raised. + +The behavior is natural: for keys that are not shared across all batches, batches that do not have these keys will be padded by zeros (or ``None`` if the data type is ``np.object``). It can be written in the following scripts: +:: + + >>> # examples of stack: a is missing key `b`, and b is missing key `a` + >>> a = Batch(a=np.zeros([4, 4]), common=Batch(c=np.zeros([4, 5]))) + >>> b = Batch(b=np.zeros([4, 6]), common=Batch(c=np.zeros([4, 5]))) + >>> c = Batch.stack([a, b]) + >>> c.a.shape + (2, 4, 4) + >>> c.b.shape + (2, 4, 6) + >>> c.common.c.shape + (2, 4, 5) + >>> # None or 0 is padded with appropriate shape + >>> data_1 = Batch(a=np.array([0.0, 2.0])) + >>> data_2 = Batch(a=np.array([1.0, 3.0]), b='done') + >>> data = Batch.stack((data_1, data_2)) + >>> print(data) + Batch( + a: array([[0., 2.], + [1., 3.]]), + b: array([None, 'done'], dtype=object), + ) + >>> # examples of cat: a is missing key `b`, and b is missing key `a` + >>> a = Batch(a=np.zeros([3, 4]), common=Batch(c=np.zeros([3, 5]))) + >>> b = Batch(b=np.zeros([4, 3]), common=Batch(c=np.zeros([4, 5]))) + >>> c = Batch.cat([a, b]) + >>> c.a.shape + (7, 4) + >>> c.b.shape + (7, 3) + >>> c.common.c.shape + (7, 5) + +However, there are some cases when batches are too heterogeneous that they cannot be aggregated: +:: + + >>> a = Batch(a=np.zeros([4, 4])) + >>> b = Batch(a=Batch(b=Batch())) + >>> # this will raise an exception + >>> c = Batch.stack([a, b]) + +Then how to determine if batches can be aggregated? Let's rethink the purpose of reserved keys. What is the advantage of ``a1=Batch(b=Batch())`` over ``a2=Batch()``? The only difference is that ``a1.b`` returns ``Batch()`` but ``a2.b`` raises an exception. That's to say, **we reserve keys for attribute reference**. + +We say a key chain ``k=[key1, key2, ..., keyn]`` applies to ``b`` if the expression ``b.key1.key2.{...}.keyn`` is valid, and the result is ``b[k]``. + +For a set of ``Batch`` objects denoted as :math:`S`, they can be aggregated if there exists a ``Batch`` object ``b`` satisfying the following rules: + + 1. Key chain applicability: For any object ``bi`` in :math:`S`, and any key chain ``k``, if ``bi[k]`` is valid, then ``b[k]`` is valid. + + 2. Type consistency: If ``bi[k]`` is not ``Batch()`` (the last key in the key chain is not a reserved key), then the type of ``b[k]`` should be the same as ``bi[k]`` (both should be scalar/tensor/non-empty Batch values). + +The ``Batch`` object ``b`` satisfying these rules with the minimum number of keys determines the structure of aggregating :math:`S`. The values are relatively easy to define: for any key chain ``k`` that applies to ``b``, ``b[k]`` is the stack/concatenation of ``[bi[k] for bi in S]`` (if ``k`` does not apply to ``bi``, the appropriate size of zeros or ``None`` are filled automatically). If ``bi[k]`` are all ``Batch()``, then the aggregation result is also an empty ``Batch()``. + +Miscellaneous Notes +^^^^^^^^^^^^^^^^^^^ + +1. ``Batch`` is serializable and therefore Pickle compatible. ``Batch`` objects can be saved to disk and later restored by the python ``pickle`` module. This pickle compatibility is especially important for distributed sampling from environments. + +.. raw:: html + +
+ Batch.to_torch and Batch.to_numpy + +:: + + >>> data = Batch(a=np.zeros((3, 4))) + >>> data.to_torch(dtype=torch.float32, device='cpu') + >>> print(data.a) + tensor([[0., 0., 0., 0.], + [0., 0., 0., 0.], + [0., 0., 0., 0.]]) + >>> # data.to_numpy is also available + >>> data.to_numpy() + +.. raw:: html + +

+ +2. It is often the case that the observations returned from the environment are NumPy ndarrays but the policy requires ``torch.Tensor`` for prediction and learning. In this regard, Tianshou provides helper functions to convert the stored data in-place into Numpy arrays or Torch tensors. + +3. ``obj.stack_([a, b])`` is the same as ``Batch.stack([obj, a, b])``, and ``obj.cat_([a, b])`` is the same as ``Batch.cat([obj, a, b])``. Considering the frequent requirement of concatenating two ``Batch`` objects, Tianshou also supports ``obj.cat_(a)`` to be an alias of ``obj.cat_([a])``. + +4. ``Batch.cat`` and ``Batch.cat_`` does not support ``axis`` argument as ``np.concatenate`` and ``torch.cat`` currently. + +5. ``Batch.stack`` and ``Batch.stack_`` support the ``axis`` argument so that one can stack batches besides the first dimension. But be cautious, if there are keys that are not shared across all batches, ``stack`` with ``axis != 0`` is undefined, and will cause an exception currently. diff --git a/docs/tutorials/concepts.rst b/docs/tutorials/concepts.rst index b6db4f354..1ba271ec4 100644 --- a/docs/tutorials/concepts.rst +++ b/docs/tutorials/concepts.rst @@ -14,16 +14,42 @@ Here is a more detailed description, where ``Env`` is the environment and ``Mode :align: center :height: 300 -Data Batch ----------- - -.. automodule:: tianshou.data.Batch - :members: - :noindex: +Batch +----- +Tianshou provides :class:`~tianshou.data.Batch` as the internal data structure to pass any kind of data to other methods, for example, a collector gives a :class:`~tianshou.data.Batch` to policy for learning. Let's take a look at this script: +:: -Data Buffer ------------ + >>> import torch, numpy as np + >>> from tianshou.data import Batch + >>> data = Batch(a=4, b=[5, 5], c='2312312', d=('a', -2, -3)) + >>> # the list will automatically be converted to numpy array + >>> data.b + array([5, 5]) + >>> data.b = np.array([3, 4, 5]) + >>> print(data) + Batch( + a: 4, + b: array([3, 4, 5]), + c: '2312312', + d: array(['a', '-2', '-3'], dtype=object), + ) + >>> data = Batch(obs={'index': np.zeros((2, 3))}, act=torch.zeros((2, 2))) + >>> data[:, 1] += 6 + >>> print(data[-1]) + Batch( + obs: Batch( + index: array([0., 6., 0.]), + ), + act: tensor([0., 6.]), + ) + +In short, you can define a :class:`~tianshou.data.Batch` with any key-value pair, and perform some common operations over it. + +:ref:`batch_concept` is a dedicated tutorial for :class:`~tianshou.data.Batch`. We strongly recommend every user to read it so as to correctly understand and use :class:`~tianshou.data.Batch`. + +Buffer +------ .. automodule:: tianshou.data.ReplayBuffer :members: diff --git a/test/base/test_batch.py b/test/base/test_batch.py index 4ba5d8d5a..51b8bccdb 100644 --- a/test/base/test_batch.py +++ b/test/base/test_batch.py @@ -62,6 +62,7 @@ def test_batch(): 'd': Batch(e=np.array(3.0))}]) assert len(batch2) == 1 assert Batch().shape == [] + assert Batch(a=1).shape == [] assert batch2.shape[0] == 1 with pytest.raises(IndexError): batch2[-2] diff --git a/tianshou/data/batch.py b/tianshou/data/batch.py index 7eaca1144..7e602bba8 100644 --- a/tianshou/data/batch.py +++ b/tianshou/data/batch.py @@ -29,6 +29,43 @@ def _is_batch_set(data: Any) -> bool: return False +def _is_scalar(value: Any) -> bool: + # check if the value is a scalar + # 1. python bool object, number object: isinstance(value, Number) + # 2. numpy scalar: isinstance(value, np.generic) + # 3. python object rather than dict / Batch / tensor + # the check of dict / Batch is omitted because this only checks a value. + # a dict / Batch will eventually check their values + value = np.asanyarray(value) + return value.size == 1 and not value.shape + + +def _is_number(value: Any) -> bool: + # isinstance(value, Number) checks 1, 1.0, np.int(1), np.float(1.0), etc. + # isinstance(value, np.nummber) checks np.int32(1), np.float64(1.0), etc. + # isinstance(value, np.bool_) checks np.bool_(True), etc. + is_number = isinstance(value, Number) + is_number = is_number or isinstance(value, np.number) + is_number = is_number or isinstance(value, np.bool_) + return is_number + + +def _to_array_with_correct_type(v: Any) -> np.ndarray: + # convert the value to np.ndarray + # convert to np.object data type if neither bool nor number + v = np.asanyarray(v) + if not issubclass(v.dtype.type, (np.bool_, np.number)): + v = v.astype(np.object) + if v.dtype == np.object and not v.shape: + # scalar ndarray with np.object data type is very annoying + # a=np.array([np.array({}, dtype=object), np.array({}, dtype=object)]) + # a is not array([{}, {}], dtype=object), and a[0]={} results in + # something very strange: + # array([{}, array({}, dtype=object)], dtype=object) + v = v.item(0) + return v + + def _create_value(inst: Any, size: int, stack=True) -> Union[ 'Batch', np.ndarray, torch.Tensor]: """ @@ -37,14 +74,11 @@ def _create_value(inst: Any, size: int, stack=True) -> Union[ of (10, 3, 5), otherwise (10, 5) """ has_shape = isinstance(inst, (np.ndarray, torch.Tensor)) - is_scalar = \ - isinstance(inst, Number) or \ - issubclass(inst.__class__, np.generic) or \ - (has_shape and not inst.shape) + is_scalar = _is_scalar(inst) if not stack and is_scalar: - # here we do not consider scalar types, following the - # behavior of numpy which does not support concatenation - # of zero-dimensional arrays (scalars) + # here we do not consider scalar types, following the behavior of numpy + # which does not support concatenation of zero-dimensional arrays + # (scalars) raise TypeError(f"cannot concatenate with {inst} which is scalar") if has_shape: shape = (size, *inst.shape) if stack else (size, *inst.shape[1:]) @@ -78,223 +112,36 @@ def _assert_type_keys(keys): f"keys should all be string, but got {keys}" +def _parse_value(v: Any): + if isinstance(v, (list, tuple, np.ndarray)): + if not isinstance(v, np.ndarray) and \ + all(isinstance(e, torch.Tensor) for e in v): + v = torch.stack(v) + return v + v_ = _to_array_with_correct_type(v) + if v_.dtype == np.object and _is_batch_set(v): + v = Batch(v) # list of dict / Batch + else: + # normal data list (main case) + # or actually a data list with objects + v = v_ + elif isinstance(v, dict): + v = Batch(v) + elif isinstance(v, (Batch, torch.Tensor)): + pass + else: + # scalar case, convert to ndarray + v = _to_array_with_correct_type(v) + return v + + class Batch: """Tianshou provides :class:`~tianshou.data.Batch` as the internal data structure to pass any kind of data to other methods, for example, a collector gives a :class:`~tianshou.data.Batch` to policy for learning. - Here is the usage: - :: - - >>> import numpy as np - >>> from tianshou.data import Batch - >>> data = Batch(a=4, b=[5, 5], c='2312312') - >>> # the list will automatically be converted to numpy array - >>> data.b - array([5, 5]) - >>> data.b = np.array([3, 4, 5]) - >>> print(data) - Batch( - a: 4, - b: array([3, 4, 5]), - c: '2312312', - ) - - In short, you can define a :class:`Batch` with any key-value pair. - - For Numpy arrays, only data types with ``np.object``, bool, and number are - supported. For strings or other data types, however, they can be held in - ``np.object`` arrays. - - The current implementation of Tianshou typically use 7 reserved keys in - :class:`~tianshou.data.Batch`: - - * ``obs`` the observation of step :math:`t` ; - * ``act`` the action of step :math:`t` ; - * ``rew`` the reward of step :math:`t` ; - * ``done`` the done flag of step :math:`t` ; - * ``obs_next`` the observation of step :math:`t+1` ; - * ``info`` the info of step :math:`t` (in ``gym.Env``, the ``env.step()``\ - function returns 4 arguments, and the last one is ``info``); - * ``policy`` the data computed by policy in step :math:`t`; - - For convenience, :class:`~tianshou.data.Batch` supports the mechanism of - key reservation: one can specify a key without any value, which serves as - a placeholder for the Batch object. For example, you know there will be a - key named ``obs``, but do not know the value until the simulator runs. Then - you can reserve the key ``obs``. This is done by setting the value to - ``Batch()``. - - For a Batch object, we call it "incomplete" if: (i) it is ``Batch()``; (ii) - it has reserved keys; (iii) any of its sub-Batch is incomplete. Otherwise, - the Batch object is finalized. - - Key reservation mechanism is convenient, but also causes some problem in - aggregation operators like ``stack`` or ``cat`` of Batch objects. We say - that Batch objects are compatible for aggregation with three cases: - - 1. finalized Batch objects are compatible if and only if their exists a \ - way to extend keys so that their structures are exactly the same. - - 2. incomplete Batch objects and other finalized objects are compatible if \ - their exists a way to extend keys so that incomplete Batch objects can \ - have the same structure as finalized objects. - - 3. incomplete Batch objects themselevs are compatible if their exists a \ - way to extend keys so that their structure can be the same. - - In a word, incomplete Batch objects have a set of possible structures - in the future, but finalized Batch object only have a finalized structure. - Batch objects are compatible if and only if they share at least one - commonly possible structure by extending keys. - - :class:`~tianshou.data.Batch` object can be initialized by a wide variety - of arguments, ranging from the key/value pairs or dictionary, to list and - Numpy arrays of :class:`dict` or Batch instances where each element is - considered as an individual sample and get stacked together: - :: - - >>> data = Batch([{'a': {'b': [0.0, "info"]}}]) - >>> print(data[0]) - Batch( - a: Batch( - b: array([0.0, 'info'], dtype=object), - ), - ) - - :class:`~tianshou.data.Batch` has the same API as a native Python - :class:`dict`. In this regard, one can access stored data using string key, - or iterate over stored data: - :: - - >>> data = Batch(a=4, b=[5, 5]) - >>> print(data["a"]) - 4 - >>> for key, value in data.items(): - >>> print(f"{key}: {value}") - a: 4 - b: [5, 5] - - - :class:`~tianshou.data.Batch` also partially reproduces the Numpy API for - arrays. It also supports the advanced slicing method, such as batch[:, i], - if the index is valid. You can access or iterate over the individual - samples, if any: - :: - - >>> data = Batch(a=np.array([[0.0, 2.0], [1.0, 3.0]]), b=[[5, -5]]) - >>> print(data[0]) - Batch( - a: array([0., 2.]) - b: array([ 5, -5]), - ) - >>> for sample in data: - >>> print(sample.a) - [0. 2.] - - >>> print(data.shape) - [1, 2] - >>> data[:, 1] += 1 - >>> print(data) - Batch( - a: array([[0., 3.], - [1., 4.]]), - b: array([[ 5, -4]]), - ) - - Similarly, one can also perform simple algebra on it, and stack, split or - concatenate multiple instances: - :: - - >>> data_1 = Batch(a=np.array([0.0, 2.0]), b=5) - >>> data_2 = Batch(a=np.array([1.0, 3.0]), b=-5) - >>> data = Batch.stack((data_1, data_2)) - >>> print(data) - Batch( - b: array([ 5, -5]), - a: array([[0., 2.], - [1., 3.]]), - ) - >>> print(np.mean(data)) - Batch( - b: 0.0, - a: array([0.5, 2.5]), - ) - >>> data_split = list(data.split(1, False)) - >>> print(list(data.split(1, False))) - [Batch( - b: array([5]), - a: array([[0., 2.]]), - ), Batch( - b: array([-5]), - a: array([[1., 3.]]), - )] - >>> data_cat = Batch.cat(data_split) - >>> print(data_cat) - Batch( - b: array([ 5, -5]), - a: array([[0., 2.], - [1., 3.]]), - ) - - Note that stacking of inconsistent data is also supported. In which case, - ``None`` is added in list or :class:`np.ndarray` of objects, 0 otherwise. - :: - - >>> data_1 = Batch(a=np.array([0.0, 2.0])) - >>> data_2 = Batch(a=np.array([1.0, 3.0]), b='done') - >>> data = Batch.stack((data_1, data_2)) - >>> print(data) - Batch( - a: array([[0., 2.], - [1., 3.]]), - b: array([None, 'done'], dtype=object), - ) - - Method ``empty_`` sets elements to 0 or ``None`` for ``np.object``. - :: - - >>> data.empty_() - >>> print(data) - Batch( - a: array([[0., 0.], - [0., 0.]]), - b: array([None, None], dtype=object), - ) - >>> data = Batch(a=[False, True], b={'c': [2., 'st'], 'd': [1., 0.]}) - >>> data[0] = Batch.empty(data[1]) - >>> data - Batch( - a: array([False, True]), - b: Batch( - c: array([None, 'st']), - d: array([0., 0.]), - ), - ) - - :meth:`~tianshou.data.Batch.shape` and :meth:`~tianshou.data.Batch.__len__` - methods are also provided to respectively get the shape and the length of - a :class:`Batch` instance. It mimics the Numpy API for Numpy arrays, which - means that getting the length of a scalar Batch raises an exception. - :: - - >>> data = Batch(a=[5., 4.], b=np.zeros((2, 3, 4))) - >>> data.shape - [2] - >>> len(data) - 2 - >>> data[0].shape - [] - >>> len(data[0]) - TypeError: Object of type 'Batch' has no len() - - Convenience helpers are available to convert in-place the stored data into - Numpy arrays or Torch tensors. - - Finally, note that :class:`~tianshou.data.Batch` is serializable and - therefore Pickle compatible. This is especially important for distributed - sampling. - """ + For a detailed description, please refer to :ref:`batch_concept`. + """ def __init__(self, batch_dict: Optional[Union[ dict, 'Batch', Tuple[Union[dict, 'Batch']], @@ -307,48 +154,15 @@ def __init__(self, if isinstance(batch_dict, (dict, Batch)): _assert_type_keys(batch_dict.keys()) for k, v in batch_dict.items(): - if isinstance(v, (list, tuple, np.ndarray)): - v_ = None - if not isinstance(v, np.ndarray) and \ - all(isinstance(e, torch.Tensor) for e in v): - self.__dict__[k] = torch.stack(v) - continue - else: - v_ = np.asanyarray(v) - if v_.dtype != np.object: - v = v_ # normal data list, this is the main case - if not issubclass(v.dtype.type, - (np.bool_, np.number)): - v = v.astype(np.object) - else: - if _is_batch_set(v): - v = Batch(v) # list of dict / Batch - else: - # this is actually a data list with objects - v = v_ - self.__dict__[k] = v - elif isinstance(v, dict): - self.__dict__[k] = Batch(v) - else: - self.__dict__[k] = v + self.__dict__[k] = _parse_value(v) elif _is_batch_set(batch_dict): self.stack_(batch_dict) if len(kwargs) > 0: self.__init__(kwargs, copy=copy) def __setattr__(self, key: str, value: Any): - """self[key] = value""" - if isinstance(value, list): - if _is_batch_set(value): - value = Batch(value) - else: - value = np.array(value) - if not issubclass(value.dtype.type, (np.bool_, np.number)): - value = value.astype(np.object) - elif isinstance(value, dict) or isinstance(value, np.ndarray) \ - and value.dtype == np.object and _is_batch_set(value): - value = Batch(value) - self.__dict__[key] = value + """self.key = value""" + self.__dict__[key] = _parse_value(value) def __getstate__(self): """Pickling interface. Only the actual data are serialized for both @@ -389,20 +203,13 @@ def __setitem__(self, index: Union[ str, slice, int, np.integer, np.ndarray, List[int]], value: Any) -> None: """Assign value to self[index].""" - if isinstance(value, (list, tuple)): - value = np.asanyarray(value) - if isinstance(value, np.ndarray): - if not issubclass(value.dtype.type, (np.bool_, np.number)): - value = value.astype(np.object) if isinstance(index, str): - self.__dict__[index] = value + self.__dict__[index] = _parse_value(value) return - if not isinstance(value, (dict, Batch)): - if _is_batch_set(value): - value = Batch(value) - else: - raise TypeError("Batch does not supported value type " - f"{type(value)} for item assignment.") + value = _parse_value(value) + if isinstance(value, (np.ndarray, torch.Tensor)): + raise ValueError("Batch does not supported tensor assignment." + " Use a compatible Batch or dict instead.") if not set(value.keys()).issubset(self.__dict__.keys()): raise KeyError( "Creating keys is not supported by item assignment.") @@ -431,7 +238,7 @@ def __iadd__(self, other: Union['Batch', Number, np.number]): else: self.__dict__[k] += v return self - elif isinstance(other, (Number, np.number)): + elif _is_number(other): for k, r in self.items(): if isinstance(r, Batch) and r.is_empty(): continue @@ -448,7 +255,7 @@ def __add__(self, other: Union['Batch', Number, np.number]): def __imul__(self, val: Union[Number, np.number]): """Algebraic multiplication with a scalar value in-place.""" - assert isinstance(val, (Number, np.number)), \ + assert _is_number(val), \ "Only multiplication by a number is supported." for k, r in self.__dict__.items(): if isinstance(r, Batch) and r.is_empty(): @@ -462,7 +269,7 @@ def __mul__(self, val: Union[Number, np.number]): def __itruediv__(self, val: Union[Number, np.number]): """Algebraic division with a scalar value in-place.""" - assert isinstance(val, (Number, np.number)), \ + assert _is_number(val), \ "Only division by a number is supported." for k, r in self.__dict__.items(): if isinstance(r, Batch) and r.is_empty(): @@ -524,14 +331,7 @@ def to_torch(self, dtype: Optional[torch.dtype] = None, device = torch.device(device) for k, v in self.items(): - if isinstance(v, (np.number, np.bool_, Number, np.ndarray)): - if isinstance(v, (np.number, np.bool_, Number)): - v = np.asanyarray(v) - v = torch.from_numpy(v).to(device) - if dtype is not None: - v = v.type(dtype) - self.__dict__[k] = v - elif isinstance(v, torch.Tensor): + if isinstance(v, torch.Tensor): if dtype is not None and v.dtype != dtype or \ v.device.type != device.type or \ device.index is not None and \ @@ -541,6 +341,14 @@ def to_torch(self, dtype: Optional[torch.dtype] = None, self.__dict__[k] = v.to(device) elif isinstance(v, Batch): v.to_torch(dtype, device) + else: + # ndarray or scalar + if not isinstance(v, np.ndarray): + v = np.asanyarray(v) + v = torch.from_numpy(v).to(device) + if dtype is not None: + v = v.type(dtype) + self.__dict__[k] = v def __cat(self, batches: Union['Batch', List[Union[dict, 'Batch']]], @@ -586,8 +394,7 @@ def __cat(self, # cat Batch(a=np.zeros((3, 4))) and Batch(a=Batch(b=Batch())) # will fail here v = np.concatenate(v) - if not issubclass(v.dtype.type, (np.bool_, np.number)): - v = v.astype(np.object) + v = _to_array_with_correct_type(v) self.__dict__[k] = v keys_total = set.union(*[set(b.keys()) for b in batches]) keys_reserve_or_partial = set.difference(keys_total, keys_shared) @@ -691,8 +498,7 @@ def stack_(self, self.__dict__[k] = torch.stack(v, axis) else: v = np.stack(v, axis) - if not issubclass(v.dtype.type, (np.bool_, np.number)): - v = v.astype(np.object) + v = _to_array_with_correct_type(v) self.__dict__[k] = v # all the keys keys_total = set.union(*[set(b.keys()) for b in batches]) @@ -742,7 +548,6 @@ def stack(batches: List[Union[dict, 'Batch']], axis: int = 0) -> 'Batch': (2, 4, 5) .. note:: - If there are keys that are not shared across all batches, ``stack`` with ``axis != 0`` is undefined, and will cause an exception. """ @@ -756,6 +561,26 @@ def empty_(self, index: Union[ """Return an empty a :class:`~tianshou.data.Batch` object with 0 or ``None`` filled. If ``index`` is specified, it will only reset the specific indexed-data. + :: + + >>> data.empty_() + >>> print(data) + Batch( + a: array([[0., 0.], + [0., 0.]]), + b: array([None, None], dtype=object), + ) + >>> b={'c': [2., 'st'], 'd': [1., 0.]} + >>> data = Batch(a=[False, True], b=b) + >>> data[0] = Batch.empty(data[1]) + >>> data + Batch( + a: array([False, True]), + b: Batch( + c: array([None, 'st']), + d: array([0., 0.]), + ), + ) """ for k, v in self.items(): if v is None: @@ -772,7 +597,7 @@ def empty_(self, index: Union[ else: # scalar value warnings.warn('You are calling Batch.empty on a NumPy scalar, ' 'which may cause undefined behaviors.') - if isinstance(v, (np.number, np.bool_, Number)): + if _is_number(v): self.__dict__[k] = v.__class__(0) else: self.__dict__[k] = None @@ -813,6 +638,8 @@ def __len__(self) -> int: else: raise TypeError(f"Object {v} in {self} has no len()") if len(r) == 0: + # empty batch has the shape of any, like the tensorflow '?' shape. + # So it has no length. raise TypeError(f"Object {self} has no len()") return min(r) @@ -827,7 +654,7 @@ def is_empty(self, recurse: bool = False): ``cat``, while the latter is a scalar and cannot be used in ``cat``. Another usage is in ``__len__``, where we have to skip checking the - length of recursely empty Batch. + length of recursively empty Batch. :: >>> Batch().is_empty() @@ -857,10 +684,9 @@ def shape(self) -> List[int]: data_shape = [] for v in self.__dict__.values(): try: - data_shape.append(v.shape) + data_shape.append(list(v.shape)) except AttributeError: - raise TypeError("No support for 'shape' method with " - f"type {type(v)} in class Batch.") + data_shape.append([]) return list(map(min, zip(*data_shape))) if len(data_shape) > 1 \ else data_shape[0] diff --git a/tianshou/data/buffer.py b/tianshou/data/buffer.py index f593d2a74..a2e658d32 100644 --- a/tianshou/data/buffer.py +++ b/tianshou/data/buffer.py @@ -6,9 +6,19 @@ class ReplayBuffer: """:class:`~tianshou.data.ReplayBuffer` stores data generated from - interaction between the policy and environment. It stores basically 7 types - of data, as mentioned in :class:`~tianshou.data.Batch`, based on - ``numpy.ndarray``. Here is the usage: + interaction between the policy and environment. The current implementation + of Tianshou typically use 7 reserved keys in :class:`~tianshou.data.Batch`: + + * ``obs`` the observation of step :math:`t` ; + * ``act`` the action of step :math:`t` ; + * ``rew`` the reward of step :math:`t` ; + * ``done`` the done flag of step :math:`t` ; + * ``obs_next`` the observation of step :math:`t+1` ; + * ``info`` the info of step :math:`t` (in ``gym.Env``, the ``env.step()`` \ + function returns 4 arguments, and the last one is ``info``); + * ``policy`` the data computed by policy in step :math:`t`; + + The following code snippet illustrates its usage: :: >>> import numpy as np @@ -16,13 +26,13 @@ class ReplayBuffer: >>> buf = ReplayBuffer(size=20) >>> for i in range(3): ... buf.add(obs=i, act=i, rew=i, done=i, obs_next=i + 1, info={}) - >>> len(buf) - 3 >>> buf.obs # since we set size = 20, len(buf.obs) == 20. array([0., 1., 2., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]) - + >>> # but there are only three valid items, so len(buf) == 3. + >>> len(buf) + 3 >>> buf2 = ReplayBuffer(size=10) >>> for i in range(15): ... buf2.add(obs=i, act=i, rew=i, done=i, obs_next=i + 1, info={}) From 988a13d442f320c38b535cec1fe60cf25b22502a Mon Sep 17 00:00:00 2001 From: Alexis DUBURCQ Date: Mon, 13 Jul 2020 16:38:42 +0200 Subject: [PATCH 11/22] Vector env enable select worker (#132) * Enable selecting worker for vector env step method. * Update collector to match new vecenv selective worker behavior. * Bug fix. * Fix rebase Co-authored-by: Alexis Duburcq --- tianshou/data/batch.py | 9 ++- tianshou/data/collector.py | 9 ++- tianshou/env/vecenv.py | 136 ++++++++++++++++++------------------- 3 files changed, 78 insertions(+), 76 deletions(-) diff --git a/tianshou/data/batch.py b/tianshou/data/batch.py index 415c8f38a..23d859999 100644 --- a/tianshou/data/batch.py +++ b/tianshou/data/batch.py @@ -353,6 +353,8 @@ def __setitem__(self, index: Union[ str, slice, int, np.integer, np.ndarray, List[int]], value: Any) -> None: """Assign value to self[index].""" + if isinstance(value, (list, tuple)): + value = np.asanyarray(value) if isinstance(value, np.ndarray): if not issubclass(value.dtype.type, (np.bool_, np.number)): value = value.astype(np.object) @@ -360,8 +362,11 @@ def __setitem__(self, index: Union[ self.__dict__[index] = value return if not isinstance(value, (dict, Batch)): - raise TypeError("Batch does not supported value type " - f"{type(value)} for item assignment.") + if _is_batch_set(value): + value = Batch(value) + else: + raise TypeError("Batch does not supported value type " + f"{type(value)} for item assignment.") if not set(value.keys()).issubset(self.__dict__.keys()): raise KeyError( "Creating keys is not supported by item assignment.") diff --git a/tianshou/data/collector.py b/tianshou/data/collector.py index 40cd7390c..2bacf14f0 100644 --- a/tianshou/data/collector.py +++ b/tianshou/data/collector.py @@ -320,10 +320,13 @@ def collect(self, self._reset_state(i) obs_next = self.data.obs_next if sum(self.data.done): - obs_next = self.env.reset(np.where(self.data.done)[0]) + env_ind = np.where(self.data.done)[0] + obs_reset = self.env.reset(env_ind) if self.preprocess_fn: - obs_next = self.preprocess_fn(obs=obs_next).get( - 'obs', obs_next) + obs_next[env_ind] = self.preprocess_fn( + obs=obs_reset).get('obs', obs_reset) + else: + obs_next[env_ind] = obs_reset self.data.obs_next = obs_next if n_episode != 0: if isinstance(n_episode, list) and \ diff --git a/tianshou/env/vecenv.py b/tianshou/env/vecenv.py index 26e983560..93c388209 100644 --- a/tianshou/env/vecenv.py +++ b/tianshou/env/vecenv.py @@ -40,16 +40,12 @@ class BaseVectorEnv(ABC, gym.Env): def __init__(self, env_fns: List[Callable[[], gym.Env]]) -> None: self._env_fns = env_fns self.env_num = len(env_fns) - self._obs = None - self._rew = None - self._done = None - self._info = None def __len__(self) -> int: """Return len(self), which is the number of environments.""" return self.env_num - def __getattribute__(self, key): + def __getattribute__(self, key: str): """Switch between the default attribute getter or one looking at wrapped environment level depending on the key.""" if key not in ('observation_space', 'action_space'): @@ -58,7 +54,7 @@ def __getattribute__(self, key): return self.__getattr__(key) @abstractmethod - def __getattr__(self, key): + def __getattr__(self, key: str): """Try to retrieve an attribute from each individual wrapped environment, if it does not belong to the wrapping vector environment class.""" @@ -73,11 +69,15 @@ def reset(self, id: Optional[Union[int, List[int]]] = None): pass @abstractmethod - def step(self, action: np.ndarray + def step(self, + action: np.ndarray, + id: Optional[Union[int, List[int]]] = None ) -> Tuple[np.ndarray, np.ndarray, np.ndarray, np.ndarray]: - """Run one timestep of all the environments’ dynamics. When the end of - episode is reached, you are responsible for calling reset(id) to reset - this environment’s state. + """Run one timestep of all the environments’ dynamics if id is + ``None``, otherwise run one timestep for some environments + with given id, either an int or a list. When the end of + episode is reached, you are responsible for calling reset(id) + to reset this environment’s state. Accept a batch of action and return a tuple (obs, rew, done, info). @@ -143,24 +143,24 @@ def __getattr__(self, key): def reset(self, id: Optional[Union[int, List[int]]] = None) -> np.ndarray: if id is None: - self._obs = np.stack([e.reset() for e in self.envs]) - else: - if np.isscalar(id): - id = [id] - for i in id: - self._obs[i] = self.envs[i].reset() - return self._obs - - def step(self, action: np.ndarray + id = range(self.env_num) + elif np.isscalar(id): + id = [id] + obs = np.stack([self.envs[i].reset() for i in id]) + return obs + + def step(self, + action: np.ndarray, + id: Optional[Union[int, List[int]]] = None ) -> Tuple[np.ndarray, np.ndarray, np.ndarray, np.ndarray]: - assert len(action) == self.env_num - result = [e.step(a) for e, a in zip(self.envs, action)] - self._obs, self._rew, self._done, self._info = zip(*result) - self._obs = np.stack(self._obs) - self._rew = np.stack(self._rew) - self._done = np.stack(self._done) - self._info = np.stack(self._info) - return self._obs, self._rew, self._done, self._info + if id is None: + id = range(self.env_num) + elif np.isscalar(id): + id = [id] + assert len(action) == len(id) + result = [self.envs[i].step(action[i]) for i in id] + obs, rew, done, info = map(np.stack, zip(*result)) + return obs, rew, done, info def seed(self, seed: Optional[Union[int, List[int]]] = None) -> List[int]: if np.isscalar(seed): @@ -241,33 +241,30 @@ def __getattr__(self, key): p.send(['getattr', key]) return [p.recv() for p in self.parent_remote] - def step(self, action: np.ndarray + def step(self, + action: np.ndarray, + id: Optional[Union[int, List[int]]] = None ) -> Tuple[np.ndarray, np.ndarray, np.ndarray, np.ndarray]: - assert len(action) == self.env_num - for p, a in zip(self.parent_remote, action): - p.send(['step', a]) - result = [p.recv() for p in self.parent_remote] - self._obs, self._rew, self._done, self._info = zip(*result) - self._obs = np.stack(self._obs) - self._rew = np.stack(self._rew) - self._done = np.stack(self._done) - self._info = np.stack(self._info) - return self._obs, self._rew, self._done, self._info + if id is None: + id = range(self.env_num) + elif np.isscalar(id): + id = [id] + assert len(action) == len(id) + for i, j in enumerate(id): + self.parent_remote[j].send(['step', action[i]]) + result = [self.parent_remote[i].recv() for i in id] + obs, rew, done, info = map(np.stack, zip(*result)) + return obs, rew, done, info def reset(self, id: Optional[Union[int, List[int]]] = None) -> np.ndarray: if id is None: - for p in self.parent_remote: - p.send(['reset', None]) - self._obs = np.stack([p.recv() for p in self.parent_remote]) - return self._obs - else: - if np.isscalar(id): - id = [id] - for i in id: - self.parent_remote[i].send(['reset', None]) - for i in id: - self._obs[i] = self.parent_remote[i].recv() - return self._obs + id = range(self.env_num) + elif np.isscalar(id): + id = [id] + for i in id: + self.parent_remote[i].send(['reset', None]) + obs = np.stack([self.parent_remote[i].recv() for i in id]) + return obs def seed(self, seed: Optional[Union[int, List[int]]] = None) -> List[int]: if np.isscalar(seed): @@ -320,32 +317,29 @@ def __init__(self, env_fns: List[Callable[[], gym.Env]]) -> None: for e in env_fns] def __getattr__(self, key): - return ray.get([e.getattr.remote(key) for e in self.envs]) + return ray.get([e.__getattr__.remote(key) for e in self.envs]) - def step(self, action: np.ndarray + def step(self, + action: np.ndarray, + id: Optional[Union[int, List[int]]] = None ) -> Tuple[np.ndarray, np.ndarray, np.ndarray, np.ndarray]: - assert len(action) == self.env_num - result = ray.get([e.step.remote(a) for e, a in zip(self.envs, action)]) - self._obs, self._rew, self._done, self._info = zip(*result) - self._obs = np.stack(self._obs) - self._rew = np.stack(self._rew) - self._done = np.stack(self._done) - self._info = np.stack(self._info) - return self._obs, self._rew, self._done, self._info + if id is None: + id = range(self.env_num) + elif np.isscalar(id): + id = [id] + assert len(action) == len(id) + result = ray.get([self.envs[j].step.remote(action[i]) + for i, j in enumerate(id)]) + obs, rew, done, info = map(np.stack, zip(*result)) + return obs, rew, done, info def reset(self, id: Optional[Union[int, List[int]]] = None) -> np.ndarray: if id is None: - result_obj = [e.reset.remote() for e in self.envs] - self._obs = np.stack(ray.get(result_obj)) - else: - result_obj = [] - if np.isscalar(id): - id = [id] - for i in id: - result_obj.append(self.envs[i].reset.remote()) - for _, i in enumerate(id): - self._obs[i] = ray.get(result_obj[_]) - return self._obs + id = range(self.env_num) + elif np.isscalar(id): + id = [id] + obs = np.stack(ray.get([self.envs[i].reset.remote() for i in id])) + return obs def seed(self, seed: Optional[Union[int, List[int]]] = None) -> List[int]: if not hasattr(self.envs[0], 'seed'): From 5e2af35809a4e6bc67271cb95dacdd76198812a6 Mon Sep 17 00:00:00 2001 From: youkaichao Date: Thu, 16 Jul 2020 19:36:32 +0800 Subject: [PATCH 12/22] Standardized behavior of Batch.cat and misc code refactor (#137) * code refactor; remove unused kwargs; add reward_normalization for dqn * bugfix for __setitem__ with torch.Tensor; add Batch.condense * minor fix * support cat with empty Batch * remove the dependency of is_empty on len; specify the semantic of empty Batch by test cases * support stack with empty Batch * remove condense * refactor code to reflect the shared / partial / reserved categories of keys * add is_empty(recursive=False) * doc fix * docfix and bugfix for _is_batch_set * add doc for key reservation * bugfix for algebra operators * fix cat with lens hint * code refactor * bugfix for storing None * use ValueError instead of exception * hide lens away from users * add comment for __cat * move the computation of the initial value of lens in cat_ itself. * change the place of doc string * doc fix for Batch doc string * change recursive to recurse * doc string fix * minor fix for batch doc --- test/base/test_batch.py | 71 +++++++- tianshou/data/batch.py | 261 +++++++++++++++++++++++------- tianshou/data/collector.py | 2 +- tianshou/policy/base.py | 19 ++- tianshou/policy/imitation/base.py | 2 +- tianshou/policy/modelfree/dqn.py | 7 +- tianshou/trainer/offpolicy.py | 1 - tianshou/trainer/onpolicy.py | 1 - 8 files changed, 290 insertions(+), 74 deletions(-) diff --git a/test/base/test_batch.py b/test/base/test_batch.py index 7e287e269..4ba5d8d5a 100644 --- a/test/base/test_batch.py +++ b/test/base/test_batch.py @@ -10,7 +10,12 @@ def test_batch(): assert list(Batch()) == [] assert Batch().is_empty() - assert Batch(b={'c': {}}).is_empty() + assert not Batch(b={'c': {}}).is_empty() + assert Batch(b={'c': {}}).is_empty(recurse=True) + assert not Batch(a=Batch(), b=Batch(c=Batch())).is_empty() + assert Batch(a=Batch(), b=Batch(c=Batch())).is_empty(recurse=True) + assert not Batch(d=1).is_empty() + assert not Batch(a=np.float64(1.0)).is_empty() assert len(Batch(a=[1, 2, 3], b={'c': {}})) == 3 assert not Batch(a=[1, 2, 3]).is_empty() b = Batch() @@ -109,6 +114,11 @@ def test_batch(): assert isinstance(batch5.b, Batch) assert np.allclose(batch5.b.index, [1]) + # None is a valid object and can be stored in Batch + a = Batch.stack([Batch(a=None), Batch(b=None)]) + assert a.a[0] is None and a.a[1] is None + assert a.b[0] is None and a.b[1] is None + def test_batch_over_batch(): batch = Batch(a=[3, 4, 5], b=[4, 5, 6]) @@ -162,6 +172,20 @@ def test_batch_cat_and_stack(): assert isinstance(b12_cat_in.a.d.e, np.ndarray) assert b12_cat_in.a.d.e.ndim == 1 + a = Batch(a=Batch(a=np.random.randn(3, 4))) + assert np.allclose( + np.concatenate([a.a.a, a.a.a]), + Batch.cat([a, Batch(a=Batch(a=Batch())), a]).a.a) + + # test cat with lens infer + a = Batch(a=Batch(a=np.random.randn(3, 4)), b=np.random.randn(3, 4)) + b = Batch(a=Batch(a=Batch(), t=Batch()), b=np.random.randn(3, 4)) + ans = Batch.cat([a, b, a]) + assert np.allclose(ans.a.a, + np.concatenate([a.a.a, np.zeros((3, 4)), a.a.a])) + assert np.allclose(ans.b, np.concatenate([a.b, b.b, a.b])) + assert ans.a.t.is_empty() + b12_stack = Batch.stack((b1, b2)) assert isinstance(b12_stack.a.d.e, np.ndarray) assert b12_stack.a.d.e.ndim == 2 @@ -177,6 +201,32 @@ def test_batch_cat_and_stack(): assert torch.allclose(test.b, ans.b) assert np.allclose(test.common.c, ans.common.c) + # test cat with reserved keys (values are Batch()) + b1 = Batch(a=np.random.rand(3, 4), common=Batch(c=np.random.rand(3, 5))) + b2 = Batch(a=Batch(), + b=torch.rand(4, 3), + common=Batch(c=np.random.rand(4, 5))) + test = Batch.cat([b1, b2]) + ans = Batch(a=np.concatenate([b1.a, np.zeros((4, 4))]), + b=torch.cat([torch.zeros(3, 3), b2.b]), + common=Batch(c=np.concatenate([b1.common.c, b2.common.c]))) + assert np.allclose(test.a, ans.a) + assert torch.allclose(test.b, ans.b) + assert np.allclose(test.common.c, ans.common.c) + + # test cat with all reserved keys (values are Batch()) + b1 = Batch(a=Batch(), common=Batch(c=np.random.rand(3, 5))) + b2 = Batch(a=Batch(), + b=torch.rand(4, 3), + common=Batch(c=np.random.rand(4, 5))) + test = Batch.cat([b1, b2]) + ans = Batch(a=Batch(), + b=torch.cat([torch.zeros(3, 3), b2.b]), + common=Batch(c=np.concatenate([b1.common.c, b2.common.c]))) + assert ans.a.is_empty() + assert torch.allclose(test.b, ans.b) + assert np.allclose(test.common.c, ans.common.c) + # test stack with compatible keys b3 = Batch(a=np.zeros((3, 4)), b=torch.ones((2, 5)), @@ -205,6 +255,25 @@ def test_batch_cat_and_stack(): assert np.allclose(d.c, [3, 0, 7]) assert np.allclose(d.d, [0, 6, 9]) + # test stack with empty Batch() + assert Batch.stack([Batch(), Batch(), Batch()]).is_empty() + a = Batch(a=1, b=2, c=3, d=Batch(), e=Batch()) + b = Batch(a=4, b=5, d=6, e=Batch()) + c = Batch(c=7, b=6, d=9, e=Batch()) + d = Batch.stack([a, b, c]) + assert np.allclose(d.a, [1, 4, 0]) + assert np.allclose(d.b, [2, 5, 6]) + assert np.allclose(d.c, [3, 0, 7]) + assert np.allclose(d.d, [0, 6, 9]) + assert d.e.is_empty() + b1 = Batch(a=Batch(), common=Batch(c=np.random.rand(4, 5))) + b2 = Batch(b=Batch(), common=Batch(c=np.random.rand(4, 5))) + test = Batch.stack([b1, b2], axis=-1) + assert test.a.is_empty() + assert test.b.is_empty() + assert np.allclose(test.common.c, + np.stack([b1.common.c, b2.common.c], axis=-1)) + b1 = Batch(a=np.random.rand(4, 4), common=Batch(c=np.random.rand(4, 5))) b2 = Batch(b=torch.rand(4, 6), common=Batch(c=np.random.rand(4, 5))) test = Batch.stack([b1, b2]) diff --git a/tianshou/data/batch.py b/tianshou/data/batch.py index 23d859999..7eaca1144 100644 --- a/tianshou/data/batch.py +++ b/tianshou/data/batch.py @@ -14,11 +14,17 @@ def _is_batch_set(data: Any) -> bool: + # Batch set is a list/tuple of dict/Batch objects, + # or 1-D np.ndarray with np.object type, + # where each element is a dict/Batch object if isinstance(data, (list, tuple)): if len(data) > 0 and all(isinstance(e, (dict, Batch)) for e in data): return True elif isinstance(data, np.ndarray) and data.dtype == np.object: - if all(isinstance(e, (dict, Batch)) for e in data.tolist()): + # ``for e in data`` will just unpack the first dimension, + # but data.tolist() will flatten ndarray of objects + # so do not use data.tolist() + if all(isinstance(e, (dict, Batch)) for e in data): return True return False @@ -39,7 +45,7 @@ def _create_value(inst: Any, size: int, stack=True) -> Union[ # here we do not consider scalar types, following the # behavior of numpy which does not support concatenation # of zero-dimensional arrays (scalars) - raise TypeError(f"cannot cat {inst} with which is scalar") + raise TypeError(f"cannot concatenate with {inst} which is scalar") if has_shape: shape = (size, *inst.shape) if stack else (size, *inst.shape[1:]) if isinstance(inst, np.ndarray): @@ -95,9 +101,9 @@ class Batch: In short, you can define a :class:`Batch` with any key-value pair. - For Numpy arrays, only data types with ``np.object``, bool, and number - are supported. For strings or other data types, however, they can be - held in ``np.object`` arrays. + For Numpy arrays, only data types with ``np.object``, bool, and number are + supported. For strings or other data types, however, they can be held in + ``np.object`` arrays. The current implementation of Tianshou typically use 7 reserved keys in :class:`~tianshou.data.Batch`: @@ -108,9 +114,39 @@ class Batch: * ``done`` the done flag of step :math:`t` ; * ``obs_next`` the observation of step :math:`t+1` ; * ``info`` the info of step :math:`t` (in ``gym.Env``, the ``env.step()``\ - function returns 4 arguments, and the last one is ``info``); + function returns 4 arguments, and the last one is ``info``); * ``policy`` the data computed by policy in step :math:`t`; + For convenience, :class:`~tianshou.data.Batch` supports the mechanism of + key reservation: one can specify a key without any value, which serves as + a placeholder for the Batch object. For example, you know there will be a + key named ``obs``, but do not know the value until the simulator runs. Then + you can reserve the key ``obs``. This is done by setting the value to + ``Batch()``. + + For a Batch object, we call it "incomplete" if: (i) it is ``Batch()``; (ii) + it has reserved keys; (iii) any of its sub-Batch is incomplete. Otherwise, + the Batch object is finalized. + + Key reservation mechanism is convenient, but also causes some problem in + aggregation operators like ``stack`` or ``cat`` of Batch objects. We say + that Batch objects are compatible for aggregation with three cases: + + 1. finalized Batch objects are compatible if and only if their exists a \ + way to extend keys so that their structures are exactly the same. + + 2. incomplete Batch objects and other finalized objects are compatible if \ + their exists a way to extend keys so that incomplete Batch objects can \ + have the same structure as finalized objects. + + 3. incomplete Batch objects themselevs are compatible if their exists a \ + way to extend keys so that their structure can be the same. + + In a word, incomplete Batch objects have a set of possible structures + in the future, but finalized Batch object only have a finalized structure. + Batch objects are compatible if and only if they share at least one + commonly possible structure by extending keys. + :class:`~tianshou.data.Batch` object can be initialized by a wide variety of arguments, ranging from the key/value pairs or dictionary, to list and Numpy arrays of :class:`dict` or Batch instances where each element is @@ -126,8 +162,8 @@ class Batch: ) :class:`~tianshou.data.Batch` has the same API as a native Python - :class:`dict`. In this regard, one can access stored data using string - key, or iterate over stored data: + :class:`dict`. In this regard, one can access stored data using string key, + or iterate over stored data: :: >>> data = Batch(a=4, b=[5, 5]) @@ -153,7 +189,7 @@ class Batch: ) >>> for sample in data: >>> print(sample.a) - [0., 2.] + [0. 2.] >>> print(data.shape) [1, 2] @@ -341,7 +377,7 @@ def __getitem__(self, index: Union[ if len(batch_items) > 0: b = Batch() for k, v in batch_items: - if isinstance(v, Batch) and len(v.__dict__) == 0: + if isinstance(v, Batch) and v.is_empty(): b.__dict__[k] = Batch() else: b.__dict__[k] = v[index] @@ -376,8 +412,9 @@ def __setitem__(self, index: Union[ except KeyError: if isinstance(val, Batch): self.__dict__[key][index] = Batch() - elif isinstance(val, np.ndarray) and \ - issubclass(val.dtype.type, (np.bool_, np.number)): + elif isinstance(val, torch.Tensor) or \ + (isinstance(val, np.ndarray) and + issubclass(val.dtype.type, (np.bool_, np.number))): self.__dict__[key][index] = 0 else: self.__dict__[key][index] = None @@ -389,14 +426,14 @@ def __iadd__(self, other: Union['Batch', Number, np.number]): for (k, r), v in zip(self.__dict__.items(), other.__dict__.values()): # TODO are keys consistent? - if r is None: + if isinstance(r, Batch) and r.is_empty(): continue else: self.__dict__[k] += v return self elif isinstance(other, (Number, np.number)): for k, r in self.items(): - if r is None: + if isinstance(r, Batch) and r.is_empty(): continue else: self.__dict__[k] += other @@ -413,7 +450,9 @@ def __imul__(self, val: Union[Number, np.number]): """Algebraic multiplication with a scalar value in-place.""" assert isinstance(val, (Number, np.number)), \ "Only multiplication by a number is supported." - for k in self.__dict__.keys(): + for k, r in self.__dict__.items(): + if isinstance(r, Batch) and r.is_empty(): + continue self.__dict__[k] *= val return self @@ -425,7 +464,9 @@ def __itruediv__(self, val: Union[Number, np.number]): """Algebraic division with a scalar value in-place.""" assert isinstance(val, (Number, np.number)), \ "Only division by a number is supported." - for k in self.__dict__.keys(): + for k, r in self.__dict__.items(): + if isinstance(r, Batch) and r.is_empty(): + continue self.__dict__[k] /= val return self @@ -501,50 +542,106 @@ def to_torch(self, dtype: Optional[torch.dtype] = None, elif isinstance(v, Batch): v.to_torch(dtype, device) - def cat_(self, - batches: Union['Batch', List[Union[dict, 'Batch']]]) -> None: - """Concatenate a list of (or one) :class:`~tianshou.data.Batch` objects - into current batch. + def __cat(self, + batches: Union['Batch', List[Union[dict, 'Batch']]], + lens: List[int]) -> None: + """:: + + >>> a = Batch(a=np.random.randn(3, 4)) + >>> x = Batch(a=a, b=np.random.randn(4, 4)) + >>> y = Batch(a=Batch(a=Batch()), b=np.random.randn(4, 4)) + + If we want to concatenate x and y, we want to pad y.a.a with zeros. + Without ``lens`` as a hint, when we concatenate x.a and y.a, we would + not be able to know how to pad y.a. So ``Batch.cat_`` should compute + the ``lens`` to give ``Batch.__cat`` a hint. + :: + + >>> ans = Batch.cat([x, y]) + >>> # this is equivalent to the following line + >>> ans = Batch(); ans.__cat([x, y], lens=[3, 4]) + >>> # this lens is equal to [len(a), len(b)] """ - if isinstance(batches, Batch): - batches = [batches] - if len(batches) == 0: - return - batches = [x if isinstance(x, Batch) else Batch(x) for x in batches] - if len(self.__dict__) > 0: - batches = [self] + list(batches) # partial keys will be padded by zeros # with the shape of [len, rest_shape] - lens = [len(x) for x in batches] sum_lens = [0] for x in lens: sum_lens.append(sum_lens[-1] + x) - keys_map = list(map(lambda e: set(e.keys()), batches)) + # collect non-empty keys + keys_map = [ + set(k for k, v in batch.items() + if not (isinstance(v, Batch) and v.is_empty())) + for batch in batches] keys_shared = set.intersection(*keys_map) values_shared = [[e[k] for e in batches] for k in keys_shared] _assert_type_keys(keys_shared) for k, v in zip(keys_shared, values_shared): if all(isinstance(e, (dict, Batch)) for e in v): - self.__dict__[k] = Batch.cat(v) + batch_holder = Batch() + batch_holder.__cat(v, lens=lens) + self.__dict__[k] = batch_holder elif all(isinstance(e, torch.Tensor) for e in v): self.__dict__[k] = torch.cat(v) else: + # cat Batch(a=np.zeros((3, 4))) and Batch(a=Batch(b=Batch())) + # will fail here v = np.concatenate(v) if not issubclass(v.dtype.type, (np.bool_, np.number)): v = v.astype(np.object) self.__dict__[k] = v - keys_partial = set.union(*keys_map) - keys_shared - _assert_type_keys(keys_partial) + keys_total = set.union(*[set(b.keys()) for b in batches]) + keys_reserve_or_partial = set.difference(keys_total, keys_shared) + _assert_type_keys(keys_reserve_or_partial) + # keys that are reserved in all batches + keys_reserve = set.difference(keys_total, set.union(*keys_map)) + # keys that occur only in some batches, but not all + keys_partial = keys_reserve_or_partial.difference(keys_reserve) + for k in keys_reserve: + # reserved keys + self.__dict__[k] = Batch() for k in keys_partial: for i, e in enumerate(batches): - val = e.get(k, None) - if val is not None: - try: - self.__dict__[k][sum_lens[i]:sum_lens[i + 1]] = val - except KeyError: - self.__dict__[k] = \ - _create_value(val, sum_lens[-1], stack=False) - self.__dict__[k][sum_lens[i]:sum_lens[i + 1]] = val + if k not in e.__dict__: + continue + val = e.get(k) + if isinstance(val, Batch) and val.is_empty(): + continue + try: + self.__dict__[k][sum_lens[i]:sum_lens[i + 1]] = val + except KeyError: + self.__dict__[k] = \ + _create_value(val, sum_lens[-1], stack=False) + self.__dict__[k][sum_lens[i]:sum_lens[i + 1]] = val + + def cat_(self, + batches: Union['Batch', List[Union[dict, 'Batch']]]) -> None: + """Concatenate a list of (or one) :class:`~tianshou.data.Batch` objects + into current batch. + """ + if isinstance(batches, Batch): + batches = [batches] + if len(batches) == 0: + return + batches = [x if isinstance(x, Batch) else Batch(x) for x in batches] + + # x.is_empty() means that x is Batch() and should be ignored + batches = [x for x in batches if not x.is_empty()] + try: + # x.is_empty(recurse=True) here means x is a nested empty batch + # like Batch(a=Batch), and we have to treat it as length zero and + # keep it. + lens = [0 if x.is_empty(recurse=True) else len(x) + for x in batches] + except TypeError as e: + e2 = ValueError( + f'Batch.cat_ meets an exception. Maybe because there is ' + f'any scalar in {batches} but Batch.cat_ does not support' + f'the concatenation of scalar.') + raise Exception([e, e2]) + if not self.is_empty(): + batches = [self] + list(batches) + lens = [0 if self.is_empty(recurse=True) else len(self)] + lens + return self.__cat(batches, lens) @staticmethod def cat(batches: List[Union[dict, 'Batch']]) -> 'Batch': @@ -577,9 +674,13 @@ def stack_(self, if len(batches) == 0: return batches = [x if isinstance(x, Batch) else Batch(x) for x in batches] - if len(self.__dict__) > 0: + if not self.is_empty(): batches = [self] + list(batches) - keys_map = list(map(lambda e: set(e.keys()), batches)) + # collect non-empty keys + keys_map = [ + set(k for k, v in batch.items() + if not (isinstance(v, Batch) and v.is_empty())) + for batch in batches] keys_shared = set.intersection(*keys_map) values_shared = [[e[k] for e in batches] for k in keys_shared] _assert_type_keys(keys_shared) @@ -593,22 +694,35 @@ def stack_(self, if not issubclass(v.dtype.type, (np.bool_, np.number)): v = v.astype(np.object) self.__dict__[k] = v - keys_partial = set.difference(set.union(*keys_map), keys_shared) + # all the keys + keys_total = set.union(*[set(b.keys()) for b in batches]) + # keys that are reserved in all batches + keys_reserve = set.difference(keys_total, set.union(*keys_map)) + # keys that are either partial or reserved + keys_reserve_or_partial = set.difference(keys_total, keys_shared) + # keys that occur only in some batches, but not all + keys_partial = keys_reserve_or_partial.difference(keys_reserve) if keys_partial and axis != 0: raise ValueError( f"Stack of Batch with non-shared keys {keys_partial} " f"is only supported with axis=0, but got axis={axis}!") - _assert_type_keys(keys_partial) + _assert_type_keys(keys_reserve_or_partial) + for k in keys_reserve: + # reserved keys + self.__dict__[k] = Batch() for k in keys_partial: for i, e in enumerate(batches): - val = e.get(k, None) - if val is not None: - try: - self.__dict__[k][i] = val - except KeyError: - self.__dict__[k] = \ - _create_value(val, len(batches)) - self.__dict__[k][i] = val + if k not in e.__dict__: + continue + val = e.get(k) + if isinstance(val, Batch) and val.is_empty(): + continue + try: + self.__dict__[k][i] = val + except KeyError: + self.__dict__[k] = \ + _create_value(val, len(batches)) + self.__dict__[k][i] = val @staticmethod def stack(batches: List[Union[dict, 'Batch']], axis: int = 0) -> 'Batch': @@ -691,26 +805,53 @@ def __len__(self) -> int: """Return len(self).""" r = [] for v in self.__dict__.values(): - if isinstance(v, Batch) and v.is_empty(): + if isinstance(v, Batch) and v.is_empty(recurse=True): continue elif hasattr(v, '__len__') and (not isinstance( v, (np.ndarray, torch.Tensor)) or v.ndim > 0): r.append(len(v)) else: - raise TypeError("Object of type 'Batch' has no len()") + raise TypeError(f"Object {v} in {self} has no len()") if len(r) == 0: - raise TypeError("Object of type 'Batch' has no len()") + raise TypeError(f"Object {self} has no len()") return min(r) - def is_empty(self): - return not any( - not x.is_empty() if isinstance(x, Batch) - else hasattr(x, '__len__') and len(x) > 0 for x in self.values()) + def is_empty(self, recurse: bool = False): + """ + Test if a Batch is empty. If ``recurse=True``, it further tests the + values of the object; else it only tests the existence of any key. + + ``b.is_empty(recurse=True)`` is mainly used to distinguish + ``Batch(a=Batch(a=Batch()))`` and ``Batch(a=1)``. They both raise + exceptions when applied to ``len()``, but the former can be used in + ``cat``, while the latter is a scalar and cannot be used in ``cat``. + + Another usage is in ``__len__``, where we have to skip checking the + length of recursely empty Batch. + :: + + >>> Batch().is_empty() + True + >>> Batch(a=Batch(), b=Batch(c=Batch())).is_empty() + False + >>> Batch(a=Batch(), b=Batch(c=Batch())).is_empty(recurse=True) + True + >>> Batch(d=1).is_empty() + False + >>> Batch(a=np.float64(1.0)).is_empty() + False + """ + if len(self.__dict__) == 0: + return True + if not recurse: + return False + return all(False if not isinstance(x, Batch) + else x.is_empty(recurse=True) for x in self.values()) @property def shape(self) -> List[int]: """Return self.shape.""" - if len(self.__dict__.keys()) == 0: + if self.is_empty(): return [] else: data_shape = [] diff --git a/tianshou/data/collector.py b/tianshou/data/collector.py index 2bacf14f0..98c62daa2 100644 --- a/tianshou/data/collector.py +++ b/tianshou/data/collector.py @@ -98,7 +98,7 @@ def __init__(self, stat_size: Optional[int] = 100, action_noise: Optional[BaseNoise] = None, reward_metric: Optional[Callable[[np.ndarray], float]] = None, - **kwargs) -> None: + ) -> None: super().__init__() self.env = env self.env_num = 1 diff --git a/tianshou/policy/base.py b/tianshou/policy/base.py index 335d7e86a..e75374228 100644 --- a/tianshou/policy/base.py +++ b/tianshou/policy/base.py @@ -108,7 +108,8 @@ def compute_episodic_return( batch: Batch, v_s_: Optional[Union[np.ndarray, torch.Tensor]] = None, gamma: float = 0.99, - gae_lambda: float = 0.95) -> Batch: + gae_lambda: float = 0.95, + ) -> Batch: """Compute returns over given full-length episodes, including the implementation of Generalized Advantage Estimator (arXiv:1506.02438). @@ -124,18 +125,19 @@ def compute_episodic_return( :return: a Batch. The result will be stored in batch.returns. """ + rew = batch.rew if v_s_ is None: - v_s_ = batch.rew * 0. + v_s_ = rew * 0. else: if not isinstance(v_s_, np.ndarray): v_s_ = np.array(v_s_, np.float) - v_s_ = v_s_.reshape(batch.rew.shape) + v_s_ = v_s_.reshape(rew.shape) returns = np.roll(v_s_, 1, axis=0) m = (1. - batch.done) * gamma - delta = batch.rew + v_s_ * m - returns + delta = rew + v_s_ * m - returns m *= gae_lambda gae = 0. - for i in range(len(batch.rew) - 1, -1, -1): + for i in range(len(rew) - 1, -1, -1): gae = delta[i] + m[i] * gae returns[i] += gae batch.returns = returns @@ -149,7 +151,7 @@ def compute_nstep_return( target_q_fn: Callable[[ReplayBuffer, np.ndarray], torch.Tensor], gamma: float = 0.99, n_step: int = 1, - rew_norm: bool = False + rew_norm: bool = False, ) -> np.ndarray: r"""Compute n-step return for Q-learning targets: @@ -180,8 +182,9 @@ def compute_nstep_return( :return: a Batch. The result will be stored in batch.returns as a torch.Tensor with shape (bsz, ). """ + rew = buffer.rew if rew_norm: - bfr = buffer.rew[:min(len(buffer), 1000)] # avoid large buffer + bfr = rew[:min(len(buffer), 1000)] # avoid large buffer mean, std = bfr.mean(), bfr.std() if np.isclose(std, 0): mean, std = 0, 1 @@ -189,7 +192,7 @@ def compute_nstep_return( mean, std = 0, 1 returns = np.zeros_like(indice) gammas = np.zeros_like(indice) + n_step - done, rew, buf_len = buffer.done, buffer.rew, len(buffer) + done, buf_len = buffer.done, len(buffer) for n in range(n_step - 1, -1, -1): now = (indice + n) % buf_len gammas[done[now] > 0] = n diff --git a/tianshou/policy/imitation/base.py b/tianshou/policy/imitation/base.py index 57bdba933..c01e45fd0 100644 --- a/tianshou/policy/imitation/base.py +++ b/tianshou/policy/imitation/base.py @@ -23,7 +23,7 @@ class ImitationPolicy(BasePolicy): """ def __init__(self, model: torch.nn.Module, optim: torch.optim.Optimizer, - mode: str = 'continuous', **kwargs) -> None: + mode: str = 'continuous') -> None: super().__init__() self.model = model self.optim = optim diff --git a/tianshou/policy/modelfree/dqn.py b/tianshou/policy/modelfree/dqn.py index c34ba4e04..eb6f29878 100644 --- a/tianshou/policy/modelfree/dqn.py +++ b/tianshou/policy/modelfree/dqn.py @@ -21,6 +21,8 @@ class DQNPolicy(BasePolicy): ahead. :param int target_update_freq: the target network update frequency (``0`` if you do not use the target network). + :param bool reward_normalization: normalize the reward to Normal(0, 1), + defaults to ``False``. .. seealso:: @@ -34,6 +36,7 @@ def __init__(self, discount_factor: float = 0.99, estimation_step: int = 1, target_update_freq: Optional[int] = 0, + reward_normalization: bool = False, **kwargs) -> None: super().__init__(**kwargs) self.model = model @@ -49,6 +52,7 @@ def __init__(self, if self._target: self.model_old = deepcopy(self.model) self.model_old.eval() + self._rew_norm = reward_normalization def set_eps(self, eps: float) -> None: """Set the eps for epsilon-greedy exploration.""" @@ -94,7 +98,8 @@ def process_fn(self, batch: Batch, buffer: ReplayBuffer, to :math:`Q_{new}`. """ batch = self.compute_nstep_return( - batch, buffer, indice, self._target_q, self._gamma, self._n_step) + batch, buffer, indice, self._target_q, + self._gamma, self._n_step, self._rew_norm) if isinstance(buffer, PrioritizedReplayBuffer): batch.update_weight = buffer.update_weight batch.indice = indice diff --git a/tianshou/trainer/offpolicy.py b/tianshou/trainer/offpolicy.py index 1e1272157..5cecd0570 100644 --- a/tianshou/trainer/offpolicy.py +++ b/tianshou/trainer/offpolicy.py @@ -27,7 +27,6 @@ def offpolicy_trainer( writer: Optional[SummaryWriter] = None, log_interval: int = 1, verbose: bool = True, - **kwargs ) -> Dict[str, Union[float, str]]: """A wrapper for off-policy trainer procedure. diff --git a/tianshou/trainer/onpolicy.py b/tianshou/trainer/onpolicy.py index e3849fe88..5f7ae7694 100644 --- a/tianshou/trainer/onpolicy.py +++ b/tianshou/trainer/onpolicy.py @@ -27,7 +27,6 @@ def onpolicy_trainer( writer: Optional[SummaryWriter] = None, log_interval: int = 1, verbose: bool = True, - **kwargs ) -> Dict[str, Union[float, str]]: """A wrapper for on-policy trainer procedure. From e03c49b89c9de37c0a03ed3af669b30977ab3351 Mon Sep 17 00:00:00 2001 From: youkaichao Date: Sun, 19 Jul 2020 15:20:35 +0800 Subject: [PATCH 13/22] write tutorials to specify the standard of Batch (#142) * add doc for len exceptions * doc move; unify is_scalar_value function * remove some issubclass check * bugfix for shape of Batch(a=1) * keep moving doc * keep writing batch tutorial * draft version of Batch tutorial done * improving doc * keep improving doc * batch tutorial done * rename _is_number * rename _is_scalar * shape property do not raise exception * restore some doc string * grammarly [ci skip] * grammarly + fix warning of building docs * polish docs * trim and re-arrange batch tutorial * go straight to the point * minor fix for batch doc * add shape / len in basic usage * keep improving tutorial * unify _to_array_with_correct_type to remove duplicate code * delegate type convertion to Batch.__init__ * further delegate type convertion to Batch.__init__ * bugfix for setattr * add a _parse_value function * remove dummy function call * polish docs Co-authored-by: Trinkle23897 <463003665@qq.com> --- docs/_static/images/aggregation.png | Bin 0 -> 213239 bytes docs/_static/images/batch_reserve.png | Bin 0 -> 75769 bytes docs/_static/images/batch_tree.png | Bin 0 -> 78857 bytes docs/index.rst | 1 + docs/tutorials/batch.rst | 491 ++++++++++++++++++++++++++ docs/tutorials/concepts.rst | 42 ++- test/base/test_batch.py | 1 + tianshou/data/batch.py | 402 ++++++--------------- tianshou/data/buffer.py | 22 +- 9 files changed, 657 insertions(+), 302 deletions(-) create mode 100644 docs/_static/images/aggregation.png create mode 100644 docs/_static/images/batch_reserve.png create mode 100644 docs/_static/images/batch_tree.png create mode 100644 docs/tutorials/batch.rst diff --git a/docs/_static/images/aggregation.png b/docs/_static/images/aggregation.png new file mode 100644 index 0000000000000000000000000000000000000000..dbcd9b33d5b619308bbc079005e8a5574d5c0577 GIT binary patch literal 213239 zcma%j1yq#Z_BJu3bV-9Ubax6vGjt=}-Q6uBNOyxsr*ue4NjFF%or0wFHyFQrz5jdH z`dl;2>#R4D*K|!H{rNoq>pb(g#pkMMI|M4(=2{x0HgQ9~RBSHb738CN~Pl3Dzp^5%EmVl;#g8lhD3=~wTB^2QI zIr5Ot$A2-9_v1CcK4Ej9f1eHcE(hk%*$7NIuz!wW10ZKZ(Ny=OKt7Nhq%@tOpztUk z-_T%X;4u^w2nsAFtm*-Mkcp&|sCL~q%6rtBEJr>yG{nfBj8RmUDl3jLHKg;Q);F_1 zsUHlgDNfzGu%E>FP*&iZZB+}Xn^4Aav>um^QD(0hF4KWAX$) zKK1k%^^f|)K2<4Tm_R${IY;TgB3O(mbnf(a zrt)U#=Lh%l#j|Cmm>5Q|Kj{g^Uq`PTA@=hBNEg-%f&%>CSDG9-ukCs}LHwm6G?8y% zW$w|LDUOg7EGYthG6Lngkd)}R#328{{M&+cbRqv5kMF9jbExDLhyhUl_5yvxWU14Z zA+?~fH1lKNu6-9lv>orvcEMsie%3>o5}zFB7(SlZ)-g3xHdC&&U*RUP82Ink|2g)^ z3b_6@G7T`18P>R!$2lr)yPkX*a19oP%J4~9OJZn;|k0my?lF`DDxEd)E-AP;DOhNzfmW{nCTlhyVp%CdtAI zGJ6L<`cx_HPPTCr6?DZcxwz9vkv(lWH}wxjhPU>^G@%UtRn7gR3=Yn2<4Mf$tQ~Aw zlAUN$J)VKL%~Grsvl2xH3WbIU+gb>&V&VQ;eo#&bpk>)H)j*fXhK^HLvW95Vg6PY= z+!u3-;1kqd4YrEPq2V`$iHZNiy2e-n^UiK-Ql^-&Wc9=lM!Qu;a$Y-6Vvo2@AdkpO zHm*+#SR0wX_xz6WACH{_w9Ggb6DMscPckZ>_{VTY+O8YDXMRG@WB&F4H)_*Ufs)j+ z{`@oIf7bve0G6HpLMO2iAv0yVH0eOqSrIGs7IVg+YecDXdchFC(s+{83=ms`V?)3;9*riuDPCI3S*kr>BxeWp%(*CxH5c)R>X(3yv_ zCk-gY%r9%m?`z;s$O-;lmOolHpV0A{;A$JWV%R`OPZ&3ysK|#up3T*D=6D)aK$7jR znFW9-04<*!Qypd{m*miHMCOA`m0_Dnzsd^c%N%~^)O>nB1tJ9o|E+Dmu_r(qDMEJ1 zC9U_oU8dK*@HOAmO3IL9%FyH~Y3pj=bv6a=-{Z>>gdug;p~|ml&vd>=q-Q!t^N$_&-+d z9OF1;-O1#-S5Id^1049n>nzTNtDByxt8qIR?z_Lws+U$G&y?ft~;Waq`2kjn>Olcfs_nJ;oK zQJa~i)vs-fZ%{7(V|afa7738Zx8sQ(Y4?e!k7+&jxbtA$?zJstd)@AN%bxcaxIZYU)u^i7h1{Q{xP7K860!7XuM zE^F7B57c{k>v(@_$saBDNdr0Uz2>)IFd-$t)EUI+M{_dMX{Mw1(=B&d{A+zc0oV>7 z*PT@7d#!=-%oye}Bs2Uj{Y={FoMlDwe0Kj8eL)?}h`<87H#0om=@A5qeK~X^KlIg2 z(R^F~^9phUBt&;D`E9;M8TrB4qR3|XL3cXY0|f`I=6Jz9`2XX_AQpej0nK^wt`{T~ z?Y_5Tq-0EGb&&U8ZrfyUxzy|#AiaeeUJ^2{tF#yl7_zo^T%zGug*eL#=cQf z`huK5(_7$meY|ca>j6_c7isTb&K$&!IQ5N&`#s3HI%e{OcEDXbvxTew%Xw33*S*I7 zygLR4AZ~(7M?RRfGNww{73F?(Z^*D=7Tm@7mu>-Y0=e9ExK?X#Gl_aBOYyqxQD~Z3 z{)Y(nFz`7k{EKkbbfpE0M<{rh_n|uf{dOP&Op8f&ChPjp@{bcI+;+!eJdCjW!Eo09 zRb+eAIlWR-FOgo{mCHvhSoNy!0sljHV1hyEyiC?;@s-{Mn}VI?BSlao5WMn4sjV{~?=MWz3_ zj!-aS1}@hH(62d8XuYcGF-CsWm9mAleM@`I^VdTD;15)XP?txe(D9MVVPN{OBP&z) zf%<2u$m?YH%0e>>vc<793oh?G9 zO+5L;Q|<$CZzEXx3XPyKVW72_r?3g-K(l}Dsf%ySNwPC-c1#3WUQ4oy;5E^^_UF9r z4kM#^%)2)vA~!FI>6jP?j5i}RQSC$F?*4_qtKEn%EoX^JBeDb@1fGd=kC>Qvnp(=g zl}o1pvnqRWPhx%itiYnz;OeN3~43tpB?_S;hpwVNq~8}#$`wp_m?wezOD zPBvP7+-)1IB{D9QJ6Rp8XmlRtPp?v#Zd}m?vHD)&aTpm#)&s6uN(Gd7mR_5vR zH$eeUG4VNA--q^YXezJ6K51LHGO-yAl(8f~kfrr3gpFGJmMIro3SP?Iz4R&^RyvpZ zVAiIUe1NfijUIYwtuN-vq$`zv>t1Of`DN9YaN)Wvc%Tu@hvaU7%_GecG`fsQ zMM0yge!@n|(3KJcn}VaHOt>HybZIE718h1NKp}L&_Mw}0X6#pZJyp4`oFNBmk9S?& zCaV4!6^?9#?!EcH(W2FJz_mik!f=`8c+mGi%IdReM9eD=*O-xf(n-s9-f)F)Hc>jl zOVqCQOUozW_D85lyS}h5_)T_QZ$OY z{5bB2+@0<5Cre*uOLf zg5Vv|NEsh~dn}_lDgF9U*RP`SfpdwEAhaF#8bYrEBoW7K{G8}|FZP6z%x0-$VUKlo z$L#T_zT@9z5uOb`sO8%|xPK_Wi8F)p0D~p4vyuczUjAm&)O+}nYP^1yc_5HV}PI>%+*%x zGGR>W5cGT`&EzqAK>Ait~U?uS>{TOciywhDyEuqlm@dw01rr~x^swe!Ft9>M7w-GjD8E=xbEpNP6P<-RI#a@S` zt$n_lFa7jv_EpLpVRa4m;ly{Ub7nFFoikb<)#e_0s@5wiBMVfRNG$xswy&gVxc7?X zvN~C~ipk z`WD)|0un;`HB+uswS)$Bg<+&zq9sY~Sk!J=ZNdC}OD+vh{I!Su8`C3lWAL z`I!Cf?MNq;U^=^CAbdnUf!cwcUEDaA<>*3_ja$b9+JvX_*H5duobkIZk*DT6_G*b6 zw|bVPLzI%=j?Sb%^rR9ACKvs2d$&;m^U|DjYknhhVrjLSo_SMAI5V9IFWtJU+(!34 zzP%e+#v{yAH%$v-BncX3NOim?FXv&LapjHdAF!`y{&<;;ryhC$8J8;}N~^V~$D3eZ zk$%{FkM6g-L(x1L?pFwy-T!X>x6z=tB*`wzpZMr-j)HQPlMh?j~^>}oyoXNa`ZM`X1CQPDPgIsXiG|#tm$?X2wV9X1opgi z=ViH2Vys8eCC3SuB3?}g)s*Jxk_~g%!eIOOcE(MO$~R6x(c*JIThBnI z^+)6iOXk_WL+$d|&(Y)SOKuoKjnP10Z%qLi?Y*{$tYOSE`k*407LuwUc^2WYy#9CM z;9ep}JZdm+>bzkxd5qdxIL79Bugp+kO1cXbF#uGGM7#vgwMJ+*tHBa)*=FLzKYM78 z!;s!uGo6TF0mr(&jlOE;7m^ufJ{0$2IIpUDQT=*liN1^yIvim3n^l84uy+K3?7$NG zk3nuVKccwIq;gBm@K4%P$lcb+P&pkV#--KX4}5RIGtm+=4``E;9};&k%HmN;K+%Ee zFDCkyvr-sR0oZZhvv1Pu%65_yCH~7*-iCl`NRpAx7wVWD*#J0}DTtY`i+ip02I*{JA_`%zIM0cgO&1`B_nw*N#8DM+I63!>_Na#@;XL{dZ7-$km&Z0K7LxOe6Xg(XB|7NVsNC== zL%1TZ>u}ZF?))q#4*8w#s~U#WK;q;WP><1&hrScnOwSZnXg^No9B)lf^3dx^{_%Eh}+9?d;lGQ3I7OdW7%%=TOb zl!{huVdb2b<|>5q%mTk)5!T-7NOx(ausd5jzoj7i;}`<$G2h7dznM%)8Ez!bA)^a( z7kec(#{2cgXAn7iDhWL;fj5M>Cwg*Vrf%rnipmF{nFc{iqy+dtH!4N;SRIm4?C+A3 zZ04?8#|c8;Fk%0ulH_9yzoL1qySkG4{@aV`RM7_&epGje02nDTUU=SLEgIhFrHBY^ zOn3}cm7bmFKDSnr*%!W_!BnKz6>oo2+LW*&(~H1XVb3^}RoCQNm&@_b$Qv*e7m}ql zzn6}Q=oPFpFFy?H-NMu}**-L=v`(nKZ49e#)}aF^n9KUNk$cZvT+9L(gCNtDl3(y3 z;=QxBN2lK`n%3;nxJjZM`$Olo!~$-gs*|Q;x#6+bPEu|cCf)1ZT6w5$hz1c9vQRPL zqTO8>#MdWLQN11yiqX~CLuX?WEVC1@Za|?uEnd;Q6H2(wK_ACEFdJ}x@`Ab0v4h`| z*a49fOY$<*cH)BhEuy@-sbz-SLw#31J%X6#b9a*!XT|(ykm#-!J&=kd`Dc#xa_0iB znEi7xmbuep$-wry7o4cj9p~H8p8;ZWg>-! zfGc`>P3C*waG%)PSt2I>lQL_}1hvbsDLkn$*^1)}u}VnCl>Un_zL4ir$e1F%M5WMfFPoHwA#FJ8ULd@$6`t_zM# z#>5vGCZ4T%!0+#Y1P>l{j*UN7#64#y^a?1ap#Lbi#T%$QX0j>k4$27wp;Q1FMKljv zI&rr}5mVmB$N;TC0@H68atoJP3M=ds^}g*Cu)f9(UnP131UMQ4TiEy< zyw(}L8}Vo8SCK)K#g`oIKqs$o&`_gfZX=}y6Dndv!N?>ooXmvKNdl9_(?7VF;|VaL z9=T!1F4(s8FU*7sm998`-5IrIN!r+CL_K;ql7Hps)OS{DIhKuGmS z8z~7tH+53>DMTT9uRt=P`M+Qe0vF_~oB;UzA(F;Bho0FgrPxYkeTBodA2nZTvZW+> zbR^N*N6(P&J;xC&Lt7-i;?c2Ld=f3R5ZJN#_{?ug)`p`TFB44PZgI)wM=&?r6BAY0 zu)TOL_oP(Z4Fk~vCXx>lmsYl`NVj!_D2ABfoBMnqC)Izhn?sHaBZs*oWN6peZ^mW) z?v~f=GaQ`ED22o;p(}0k-sbS zBQcN#9-sw=RDik!N`gja`SASSsU^2o?VaGGi~V9$^XX6|lNbxW9dNQA{3jdd=9KsR zH$`riw~FT5o#zgG56hz(>Lk~@bO-1U*%*Kun)Bm~S;VQ#GOf4cbOd=vT7stm4ZBZ# zK^>C-LKhvX!pdw3{p)N;rQ6THqpCoRK2inPQn9Jn?oJw=&V;^;X+3UPsjE=Qh z6<^bq)4Hc$m{@Do%l=RHGynl{>|uRy=c9Cnv3WnNxcCemdQkw?k`&0c#*|HSC&F<( z%65)Dxv`2?6%|HM+(32yx+(7a$0*w2xshptE_mX9o0J$imFY4@XKnf*9ld!dJc3X+ z>UyTFj8H+p*;`j`&fSJ-^`mby+(szuXNN;&F9s%;_8W;a zoBdikuh^1L+(g4CXaB`@P%+-f^rwkN_eyQytHiw6pM|e}HrIzltgB?LCtS*ZuN{-g zx6(Hpc>RbLkAUF}SW{-Ri_^K)o;|M;mofL-b%qChHN)hw_A#sNA6l6uIVj0BEhb7= zLrevAjQ+~(ufEoDwRB6P%gZ=6oH^bc@z(jBnae3hq(LCs$DJR?v1v}m<3}y@$`)+Q zZarDwstvEVq8QsR7G!!Rt0$>_7{yMEJB!E&tRnY5HR5>%dl!$HaxuH#n0Jb`OhNqg zBe`edNPWxlCMm>|2ErqDLxQ((wCoX@BudMdmUB=*A?a`YGlZCgSXiB|lVi3rlMmaH z1)Vs5+^!YOQmDymm%V{+321lzkU*@s(;FZ}^)r4lW0J>86DVZi&xCitfS6O93U}K; zW6MlP_YH>|`^e8n{&Zm$xPf2BPd|ASxs~Gh!1FSYO`<;)(oHabF;OC|)Ch(IEHAuX zuWp5$`TGS-ZIXn@Os?2hW3UATkYVzSIP&t@>Y@i*diP84eLA#YK`}l~gZuu)cn%4m zfngB;O1w^X=PX)rBZUIO6(Z=MDI^tNsvnahih8%henawM53GItFQoxpLNf#&50S$QkHKXD}z4* zt`#wVI-ZWVNN4gN;6o+F?|VAuu-=+H6xiOdLxym4Vw8BNT=y7a4Y3>y1)=j z&G@}kvqeAF?Sl#kOa|XhNa4f%nS}_1iks=D(Oje@T(7i>Q5KEM1L`48CUT=U-=$zz zgv(>T>X3Dz*pmYmMo)5e=OwCprU{c(uS<)(2F@tCrkM62ms#in<@6upTiNYC|@AgV=%Ih5?^5#F^?)mx7!rr$o{ zo%Mdqp6pR~J&Nq~00d@y6_p0;arY2j}LR6AHfcJAb^XDgS`_+i43(1z4w% zGUR9IrM$4NK{y9Zl0H}b0K9u&Jzzf?xyyRoyH}GWkcW^42W|h%;WkC?kd?%K9NX)c zuk#Rs<|Gg@Q{Ezx-40E)lU+{AbYqO_Jc+ujf8l+haVAK`UJxCb%Cm9Om{5j3{Yw65 z3{5Klw18c-*{He@p@>~U=8;}Ja3-<9{gzO;qaCq3-=t0AVN9bm5a*#9Wv2EO=+UzS z*rUxRB9O=!p+j4KTlttQ3~M~wH*=l0%%8#jg{k5(!{|r{dR1e+a745tC=Z2XX$bM4 z9C3hEuZ;~;$n{LbVI%OLAS)6($M537v7$V0sT&Q4K~B5fR`Ys0GPy%V0fXjq);WFo zC!fjHUjDSOa-m1mpgseoldsyr)Db7AttQXfDOS9!Iu44Pw`_!XLI+BaIfJhB_CbbP z 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

ld7QV*Ao*GV(K$s1p^| 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

2!cjL zDzAuDJh9xg`;l@_?+!-pOV3$pB$4!C4og^9?`L9dYOKwj&Deduw`4K|I0nv@Y#-!$ z^j*Uo+h#ULB&1q}%JIyP1x}V=jIv}PlHW0%OiX;(+!uIVp+W(KE^^d*>Y6)qbqT#m zt(CHzQ$9SdR52ttF$?*}J>7{RG;8U=NsYD>vl7&|2zlPAoV61#S%4uoV!g81IZ{`X z8T3%}6tT&R{8^;YT#=IDS5LX){gtXHlg}dq>E}84B0Cg0!TM&ON{l0mQX_oMs&-6# zJilAH=e@cislK(htCTgJ-(zYP!f!*&weZ-&T~E%f-oaEvr#4deyAE)U$-zST-ZL2@ zn{gi2Tm*JuKXvSG7w3{`j5%iT>cLGds1vw(CcCNByLkC0XAtu+g^1GP`i%JsDFd4U zeNS!j4&AYoI%MKLHf_0QKQ>^74t{7?wMzUwoac$vl-)1}Tst4gc{M=c_m=G_vjTgD z*D2Eid!=IV%$Tqg42C(fPPw%!rlL2kP5Sgkfos;#Sg=Xb+s%l|U(K~QGpg~L?aug) z%y(ezeZpMOS{ro9_vLKqV|uwwF89fgJ+=Jeo2o&1QYu#QPCNn^x{%IVo(faa8@gAJ z$GEmB!wc#DPbZSE%iU{Ys0_wj6rto1-3T0SjpXng_fZ~iQ|k)P=a^CVrv~5-eqiS^NKXEp>oTe<>!4LV1R>=~)#ur7F)*;Z*_`~g|eak1B zN{V9Wb*gXA)-12=

pN(VDOcuRh}f&Medh02U$a9OioZ-@DHuoamLxF5 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 W?MJWWg;@!JkCwWgTJ>Gq=>GwrHZeK? literal 0 HcmV?d00001 diff --git a/docs/_static/images/batch_tree.png b/docs/_static/images/batch_tree.png new file mode 100644 index 0000000000000000000000000000000000000000..b914c2ce1243669a18de871bc9e010e681298c32 GIT binary patch literal 78857 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 HOdkIir5cKD literal 0 HcmV?d00001 diff --git a/docs/index.rst b/docs/index.rst index ab4a8a1f8..ef2342d86 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -70,6 +70,7 @@ Tianshou is still under development, you can also check out the documents in sta tutorials/dqn tutorials/concepts + tutorials/batch tutorials/trick tutorials/cheatsheet diff --git a/docs/tutorials/batch.rst b/docs/tutorials/batch.rst new file mode 100644 index 000000000..390fc41ac --- /dev/null +++ b/docs/tutorials/batch.rst @@ -0,0 +1,491 @@ +.. _batch_concept: + +Understand Batch +================ + +:class:`~tianshou.data.Batch` is the internal data structure extensively used in Tianshou. It is designed to store and manipulate hierarchical named tensors. This tutorial aims to help users correctly understand the concept and the behavior of ``Batch`` so that users can make the best of Tianshou. + +The tutorial has three parts. We first explain the concept of hierarchical named tensors, and introduce basic usage of ``Batch``, followed by advanced topics of ``Batch``. + +Hierarchical Named Tensors +--------------------------- + +.. sidebar:: The structure of a Batch shown by a tree + + .. Figure:: ../_static/images/batch_tree.png + +"Hierarchical named tensors" refers to a set of tensors where their names form a hierarchy. Suppose there are four tensors ``[t1, t2, t3, t4]`` with names ``[name1, name2, name3, name4]``, where ``name1`` and ``name2`` belong to the same namespace ``name0``, then the full name of tensor ``t1`` is ``name0.name1``. That is, the hierarchy lies in the names of tensors. + +We can describe the structure of hierarchical named tensors using a tree in the right. There is always a "virtual root" node to represent the whole object; internal nodes are keys (names), and leaf nodes are values (scalars or tensors). + +Hierarchical named tensors are needed because we have to deal with the heterogeneity of reinforcement learning problems. The abstraction of RL is very simple, just:: + + state, reward, done = env.step(action) + +``reward`` and ``done`` are simple, they are mostly scalar values. However, the ``state`` and ``action`` vary with environments. For example, ``state`` can be simply a vector, a tensor, or a camera input combined with sensory input. In the last case, it is natural to store them as hierarchical named tensors. This hierarchy can go beyond ``state`` and ``action``: we can store ``state``, ``action``, ``reward``, and ``done`` together as hierarchical named tensors. + +Note that, storing hierarchical named tensors is as easy as creating nested dictionary objects: +:: + + { + 'done': done, + 'reward': reward, + 'state': { + 'camera': camera, + 'sensory': sensory + } + 'action': { + 'direct': direct, + 'point_3d': point_3d, + 'force': force, + } + } + +The real problem is how to **manipulate them**, such as adding new transition tuples into replay buffer and dealing with their heterogeneity. ``Batch`` is designed to easily create, store, and manipulate these hierarchical named tensors. + +Basic Usages +------------ + +Here we cover some basic usages of ``Batch``, describing what ``Batch`` contains, how to construct ``Batch`` objects and how to manipulate them. + +What Does Batch Contain +^^^^^^^^^^^^^^^^^^^^^^^ + +The content of ``Batch`` objects can be defined by the following rules. + +1. A ``Batch`` object can be an empty ``Batch()``, or have at least one key-value pairs. ``Batch()`` can be used to reserve keys, too. See :ref:`key_reservations` for this advanced usage. + +2. The keys are always strings (they are names of corresponding values). + +3. The values can be scalars, tensors, or Batch objects. The recurse definition makes it possible to form a hierarchy of batches. + +4. Tensors are the most important values. In short, tensors are n-dimensional arrays of the same data type. We support two types of tensors: `PyTorch `_ tensor type ``torch.Tensor`` and `NumPy `_ tensor type ``np.ndarray``. + +5. Scalars are also valid values. A scalar is a single boolean, number, or object. They can be python scalar (``False``, ``1``, ``2.3``, ``None``, ``'hello'``) or NumPy scalar (``np.bool_(True)``, ``np.int32(1)``, ``np.float64(2.3)``). They just shouldn't be mixed up with Batch/dict/tensors. + +.. note:: + + ``Batch`` cannot store ``dict`` objects, because internally ``Batch`` uses ``dict`` to store data. During construction, ``dict`` objects will be automatically converted to ``Batch`` objects. + + The data types of tensors are bool and numbers (any size of int and float as long as they are supported by NumPy or PyTorch). Besides, NumPy supports ndarray of objects and we take advantage of this feature to store non-number objects in ``Batch``. If one wants to store data that are neither boolean nor numbers (such as strings and sets), they can store the data in ``np.ndarray`` with the ``np.object`` data type. This way, ``Batch`` can store any type of python objects. + +Construction of Batch +^^^^^^^^^^^^^^^^^^^^^ + +There are two ways to construct a ``Batch`` object: from a ``dict``, or using ``kwargs``. Below are some code snippets. + +.. raw:: html + +

+ Construct Batch from dict + +.. code-block:: python + + >>> # directly passing a dict object (possibly nested) is ok + >>> data = Batch({'a': 4, 'b': [5, 5], 'c': '2312312'}) + >>> # the list will automatically be converted to numpy array + >>> data.b + array([5, 5]) + >>> data.b = np.array([3, 4, 5]) + >>> print(data) + Batch( + a: 4, + b: array([3, 4, 5]), + c: '2312312', + ) + >>> # a list of dict objects (possibly nested) will be automatically stacked + >>> data = Batch([{'a': 0.0, 'b': "hello"}, {'a': 1.0, 'b': "world"}]) + >>> print(data) + Batch( + a: array([0., 1.]), + b: array(['hello', 'world'], dtype=object), + ) + +.. raw:: html + +

+ +.. raw:: html + +
+ Construct Batch from kwargs + +.. code-block:: python + + >>> # construct a Batch with keyword arguments + >>> data = Batch(a=[4, 4], b=[5, 5], c=[None, None]) + >>> print(data) + Batch( + a: array([4, 4]), + b: array([5, 5]), + c: array([None, None], dtype=object), + ) + >>> # combining keyword arguments and batch_dict works fine + >>> data = Batch({'a':[4, 4], 'b':[5, 5]}, c=[None, None]) # the first argument is a dict, and 'c' is a keyword argument + >>> print(data) + Batch( + a: array([4, 4]), + b: array([5, 5]), + c: array([None, None], dtype=object), + ) + >>> arr = np.zeros((3, 4)) + >>> # By default, Batch only keeps the reference to the data, but it also supports data copying + >>> data = Batch(arr=arr, copy=True) # data.arr now is a copy of 'arr' + +.. raw:: html + +

+ +Data Manipulation With Batch +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Users can access the internal data by ``b.key`` or ``b[key]``, where ``b.key`` finds the sub-tree with ``key`` as the root node. If the result is a sub-tree with non-empty keys, the key-reference can be chained, i.e. ``b.key.key1.key2.key3``. When it reaches a leaf node, users get the data (scalars/tensors) stored in that ``Batch`` object. + +.. raw:: html + +
+ Access data stored in Batch + +.. code-block:: python + + >>> data = Batch(a=4, b=[5, 5]) + >>> print(data.b) + [5 5] + >>> # obj.key is equivalent to obj["key"] + >>> print(data["a"]) + 4 + >>> # iterating over data items like a dict is supported + >>> for key, value in data.items(): + >>> print(f"{key}: {value}") + a: 4 + b: [5, 5] + >>> # obj.keys() and obj.values() work just like dict.keys() and dict.values() + >>> for key in data.keys(): + >>> print(f"{key}") + a + b + >>> # obj.update() behaves like dict.update() + >>> # this is the same as data.c = 1; data.c = 2; data.e = 3; + >>> data.update(c=1, d=2, e=3) + >>> print(data) + Batch( + a: 4, + b: array([5, 5]), + c: 1, + d: 2, + e: 3, + ) + +.. raw:: html + +

+ +.. note:: + + If ``data`` is a ``dict`` object, ``for x in data`` iterates over keys in the dict. However, it has a different meaning for ``Batch`` objects: ``for x in data`` iterates over ``data[0], data[1], ..., data[-1]``. An example is given below. + +``Batch`` also partially reproduces the NumPy ndarray APIs. It supports advanced slicing, such as ``batch[:, i]`` so long as the slice is valid. Broadcast mechanism of NumPy works for ``Batch``, too. + +.. raw:: html + +
+ Length, shape, indexing, and slicing of Batch + +.. code-block:: python + + >>> # initialize Batch with tensors + >>> data = Batch(a=np.array([[0.0, 2.0], [1.0, 3.0]]), b=[[5, -5], [1, -2]]) + >>> # if values have the same length/shape, that length/shape is used for this Batch + >>> # else, check the advanced topic for details + >>> print(len(data)) + 2 + >>> print(data.shape) + [2, 2] + >>> # access the first item of all the stored tensors, while keeping the structure of Batch + >>> print(data[0]) + Batch( + a: array([0., 2.]) + b: array([ 5, -5]), + ) + >>> # iterates over ``data[0], data[1], ..., data[-1]`` + >>> for sample in data: + >>> print(sample.a) + [0. 2.] + [1. 3.] + + >>> # Advanced slicing works just fine + >>> # Arithmetic operations are passed to each value in the Batch, with broadcast enabled + >>> data[:, 1] += 1 + >>> print(data) + Batch( + a: array([[0., 3.], + [1., 4.]]), + b: array([[ 5, -4]]), + ) + + >>> # amazingly, you can directly apply np.mean to a Batch object + >>> print(np.mean(data)) + Batch( + a: 1.5, + b: -0.25, + ) + + >>> # directly converted to a list is also available + >>> list(data) + [Batch( + a: array([0., 3.]), + b: array([ 5, -4]), + ), + Batch( + a: array([1., 4.]), + b: array([ 1, -1]), + )] + +.. raw:: html + +

+ +Stacking and concatenating multiple ``Batch`` instances, or split an instance into multiple batches, they are all easy and intuitive in Tianshou. For now, we stick to the aggregation (stack/concatenate) of homogeneous (same structure) batches. Stack/Concatenation of heterogeneous batches are discussed in :ref:`aggregation`. + +.. raw:: html + +
+ Stack / Concatenate / Split of Batches + +.. code-block:: python + + >>> data_1 = Batch(a=np.array([0.0, 2.0]), b=5) + >>> data_2 = Batch(a=np.array([1.0, 3.0]), b=-5) + >>> data = Batch.stack((data_1, data_2)) + >>> print(data) + Batch( + b: array([ 5, -5]), + a: array([[0., 2.], + [1., 3.]]), + ) + >>> # split supports random shuffling + >>> data_split = list(data.split(1, shuffle=False)) + >>> print(list(data.split(1, shuffle=False))) + [Batch( + b: array([5]), + a: array([[0., 2.]]), + ), Batch( + b: array([-5]), + a: array([[1., 3.]]), + )] + >>> data_cat = Batch.cat(data_split) + >>> print(data_cat) + Batch( + b: array([ 5, -5]), + a: array([[0., 2.], + [1., 3.]]), + ) + +.. raw:: html + +

+ +Advanced Topics +--------------- + +From here on, this tutorial focuses on advanced topics of ``Batch``, including key reservation, length/shape, and aggregation of heterogeneous batches. + +.. _key_reservations: + +Key Reservations +^^^^^^^^^^^^^^^^ + +.. sidebar:: The structure of a Batch with reserved keys + + .. Figure:: ../_static/images/batch_reserve.png + +In many cases, we know in the first place what keys we have, but we do not know the shape of values until we run the environment. To deal with this, Tianshou supports key reservations: **reserve a key and use a placeholder value**. + +The usage is easy: just use ``Batch()`` to be the value of reserved keys. + +.. code-block:: python + + a = Batch(b=Batch()) # 'b' is a reserved key + # this is called hierarchical key reservation + a = Batch(b=Batch(c=Batch()), d=Batch()) # 'c' and 'd' are reserved key + # the structure of this last Batch is shown in the right figure + a = Batch(key1=tensor1, key2=tensor2, key3=Batch(key4=Batch(), key5=Batch())) + +Still, we can use a tree (in the right) to show the structure of ``Batch`` objects with reserved keys, where reserved keys are special internal nodes that do not have attached leaf nodes. + +.. note:: + + Reserved keys mean that in the future there will eventually be values attached to them. The values can be scalars, tensors, or even **Batch** objects. Understanding this is critical to understand the behavior of ``Batch`` when dealing with heterogeneous Batches. + +The introduction of reserved keys gives rise to the need to check if a key is reserved. Tianshou provides ``Batch.is_empty`` to achieve this. + +.. raw:: html + +
+ Examples of Batch.is_empty + +.. code-block:: python + + >>> Batch().is_empty() + True + >>> Batch(a=Batch(), b=Batch(c=Batch())).is_empty() + False + >>> Batch(a=Batch(), b=Batch(c=Batch())).is_empty(recurse=True) + True + >>> Batch(d=1).is_empty() + False + >>> Batch(a=np.float64(1.0)).is_empty() + False + +.. raw:: html + +

+ +The ``Batch.is_empty`` function has an option to decide whether to identify direct emptiness (just a ``Batch()``) or to identify recurse emptiness (a ``Batch`` object without any scalar/tensor leaf nodes). + +.. note:: + + Do not get confused with ``Batch.is_empty`` and ``Batch.empty``. ``Batch.empty`` and its in-place variant ``Batch.empty_`` are used to set some values to zeros or None. Check the API documentation for further details. + +Length and Shape +^^^^^^^^^^^^^^^^ + +The most common usage of ``Batch`` is to store a Batch of data. The term "Batch" comes from the deep learning community to denote a mini-batch of sampled data from the whole dataset. In this regard, "Batch" typically means a collection of tensors whose first dimensions are the same. Then the length of a ``Batch`` object is simply the batch-size. + +If all the leaf nodes in a ``Batch`` object are tensors, but they have different lengths, they can be readily stored in ``Batch``. However, for ``Batch`` of this kind, the ``len(obj)`` seems a bit ambiguous. Currently, Tianshou returns the length of the shortest tensor, but we strongly recommend that users do not use the ``len(obj)`` operator on ``Batch`` objects with tensors of different lengths. + +.. raw:: html + +
+ Examples of len and obj.shape for Batch objects + +.. code-block:: python + + >>> data = Batch(a=[5., 4.], b=np.zeros((2, 3, 4))) + >>> data.shape + [2] + >>> len(data) + 2 + >>> data[0].shape + [] + >>> len(data[0]) + TypeError: Object of type 'Batch' has no len() + +.. raw:: html + +

+ +.. note:: + + Following the convention of scientific computation, scalars have no length. If there is any scalar leaf node in a ``Batch`` object, an exception will occur when users call ``len(obj)``. + + Besides, values of reserved keys are undetermined, so they have no length, neither. Or, to be specific, values of reserved keys have lengths of **any**. When there is a mix of tensors and reserved keys, the latter will be ignored in ``len(obj)`` and the minimum length of tensors is returned. When there is not any tensor in the ``Batch`` object, Tianshou raises an exception, too. + +The ``obj.shape`` attribute of ``Batch`` behaves somewhat similar to ``len(obj)``: + +1. If all the leaf nodes in a ``Batch`` object are tensors with the same shape, that shape is returned. + +2. If all the leaf nodes in a ``Batch`` object are tensors but they have different shapes, the minimum length of each dimension is returned. + +3. If there is any scalar value in a ``Batch`` object, ``obj.shape`` returns ``[]``. + +4. The shape of reserved keys is undetermined, too. We treat their shape as ``[]``. + +.. _aggregation: + +Aggregation of Heterogeneous Batches +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +In this section, we talk about aggregation operators (stack/concatenate) on heterogeneous ``Batch`` objects. +The following picture will give you an intuitive understanding of this behavior. It shows two examples of aggregation operators with heterogeneous ``Batch``. The shapes of tensors are annotated in the leaf nodes. + +.. image:: ../_static/images/aggregation.png + +We only consider the heterogeneity in the structure of ``Batch`` objects. The aggregation operators are eventually done by NumPy/PyTorch operators (``np.stack``, ``np.concatenate``, ``torch.stack``, ``torch.cat``). Heterogeneity in values can fail these operators (such as stacking ``np.ndarray`` with ``torch.Tensor``, or stacking tensors with different shapes) and an exception will be raised. + +The behavior is natural: for keys that are not shared across all batches, batches that do not have these keys will be padded by zeros (or ``None`` if the data type is ``np.object``). It can be written in the following scripts: +:: + + >>> # examples of stack: a is missing key `b`, and b is missing key `a` + >>> a = Batch(a=np.zeros([4, 4]), common=Batch(c=np.zeros([4, 5]))) + >>> b = Batch(b=np.zeros([4, 6]), common=Batch(c=np.zeros([4, 5]))) + >>> c = Batch.stack([a, b]) + >>> c.a.shape + (2, 4, 4) + >>> c.b.shape + (2, 4, 6) + >>> c.common.c.shape + (2, 4, 5) + >>> # None or 0 is padded with appropriate shape + >>> data_1 = Batch(a=np.array([0.0, 2.0])) + >>> data_2 = Batch(a=np.array([1.0, 3.0]), b='done') + >>> data = Batch.stack((data_1, data_2)) + >>> print(data) + Batch( + a: array([[0., 2.], + [1., 3.]]), + b: array([None, 'done'], dtype=object), + ) + >>> # examples of cat: a is missing key `b`, and b is missing key `a` + >>> a = Batch(a=np.zeros([3, 4]), common=Batch(c=np.zeros([3, 5]))) + >>> b = Batch(b=np.zeros([4, 3]), common=Batch(c=np.zeros([4, 5]))) + >>> c = Batch.cat([a, b]) + >>> c.a.shape + (7, 4) + >>> c.b.shape + (7, 3) + >>> c.common.c.shape + (7, 5) + +However, there are some cases when batches are too heterogeneous that they cannot be aggregated: +:: + + >>> a = Batch(a=np.zeros([4, 4])) + >>> b = Batch(a=Batch(b=Batch())) + >>> # this will raise an exception + >>> c = Batch.stack([a, b]) + +Then how to determine if batches can be aggregated? Let's rethink the purpose of reserved keys. What is the advantage of ``a1=Batch(b=Batch())`` over ``a2=Batch()``? The only difference is that ``a1.b`` returns ``Batch()`` but ``a2.b`` raises an exception. That's to say, **we reserve keys for attribute reference**. + +We say a key chain ``k=[key1, key2, ..., keyn]`` applies to ``b`` if the expression ``b.key1.key2.{...}.keyn`` is valid, and the result is ``b[k]``. + +For a set of ``Batch`` objects denoted as :math:`S`, they can be aggregated if there exists a ``Batch`` object ``b`` satisfying the following rules: + + 1. Key chain applicability: For any object ``bi`` in :math:`S`, and any key chain ``k``, if ``bi[k]`` is valid, then ``b[k]`` is valid. + + 2. Type consistency: If ``bi[k]`` is not ``Batch()`` (the last key in the key chain is not a reserved key), then the type of ``b[k]`` should be the same as ``bi[k]`` (both should be scalar/tensor/non-empty Batch values). + +The ``Batch`` object ``b`` satisfying these rules with the minimum number of keys determines the structure of aggregating :math:`S`. The values are relatively easy to define: for any key chain ``k`` that applies to ``b``, ``b[k]`` is the stack/concatenation of ``[bi[k] for bi in S]`` (if ``k`` does not apply to ``bi``, the appropriate size of zeros or ``None`` are filled automatically). If ``bi[k]`` are all ``Batch()``, then the aggregation result is also an empty ``Batch()``. + +Miscellaneous Notes +^^^^^^^^^^^^^^^^^^^ + +1. ``Batch`` is serializable and therefore Pickle compatible. ``Batch`` objects can be saved to disk and later restored by the python ``pickle`` module. This pickle compatibility is especially important for distributed sampling from environments. + +.. raw:: html + +
+ Batch.to_torch and Batch.to_numpy + +:: + + >>> data = Batch(a=np.zeros((3, 4))) + >>> data.to_torch(dtype=torch.float32, device='cpu') + >>> print(data.a) + tensor([[0., 0., 0., 0.], + [0., 0., 0., 0.], + [0., 0., 0., 0.]]) + >>> # data.to_numpy is also available + >>> data.to_numpy() + +.. raw:: html + +

+ +2. It is often the case that the observations returned from the environment are NumPy ndarrays but the policy requires ``torch.Tensor`` for prediction and learning. In this regard, Tianshou provides helper functions to convert the stored data in-place into Numpy arrays or Torch tensors. + +3. ``obj.stack_([a, b])`` is the same as ``Batch.stack([obj, a, b])``, and ``obj.cat_([a, b])`` is the same as ``Batch.cat([obj, a, b])``. Considering the frequent requirement of concatenating two ``Batch`` objects, Tianshou also supports ``obj.cat_(a)`` to be an alias of ``obj.cat_([a])``. + +4. ``Batch.cat`` and ``Batch.cat_`` does not support ``axis`` argument as ``np.concatenate`` and ``torch.cat`` currently. + +5. ``Batch.stack`` and ``Batch.stack_`` support the ``axis`` argument so that one can stack batches besides the first dimension. But be cautious, if there are keys that are not shared across all batches, ``stack`` with ``axis != 0`` is undefined, and will cause an exception currently. diff --git a/docs/tutorials/concepts.rst b/docs/tutorials/concepts.rst index b6db4f354..1ba271ec4 100644 --- a/docs/tutorials/concepts.rst +++ b/docs/tutorials/concepts.rst @@ -14,16 +14,42 @@ Here is a more detailed description, where ``Env`` is the environment and ``Mode :align: center :height: 300 -Data Batch ----------- - -.. automodule:: tianshou.data.Batch - :members: - :noindex: +Batch +----- +Tianshou provides :class:`~tianshou.data.Batch` as the internal data structure to pass any kind of data to other methods, for example, a collector gives a :class:`~tianshou.data.Batch` to policy for learning. Let's take a look at this script: +:: -Data Buffer ------------ + >>> import torch, numpy as np + >>> from tianshou.data import Batch + >>> data = Batch(a=4, b=[5, 5], c='2312312', d=('a', -2, -3)) + >>> # the list will automatically be converted to numpy array + >>> data.b + array([5, 5]) + >>> data.b = np.array([3, 4, 5]) + >>> print(data) + Batch( + a: 4, + b: array([3, 4, 5]), + c: '2312312', + d: array(['a', '-2', '-3'], dtype=object), + ) + >>> data = Batch(obs={'index': np.zeros((2, 3))}, act=torch.zeros((2, 2))) + >>> data[:, 1] += 6 + >>> print(data[-1]) + Batch( + obs: Batch( + index: array([0., 6., 0.]), + ), + act: tensor([0., 6.]), + ) + +In short, you can define a :class:`~tianshou.data.Batch` with any key-value pair, and perform some common operations over it. + +:ref:`batch_concept` is a dedicated tutorial for :class:`~tianshou.data.Batch`. We strongly recommend every user to read it so as to correctly understand and use :class:`~tianshou.data.Batch`. + +Buffer +------ .. automodule:: tianshou.data.ReplayBuffer :members: diff --git a/test/base/test_batch.py b/test/base/test_batch.py index 4ba5d8d5a..51b8bccdb 100644 --- a/test/base/test_batch.py +++ b/test/base/test_batch.py @@ -62,6 +62,7 @@ def test_batch(): 'd': Batch(e=np.array(3.0))}]) assert len(batch2) == 1 assert Batch().shape == [] + assert Batch(a=1).shape == [] assert batch2.shape[0] == 1 with pytest.raises(IndexError): batch2[-2] diff --git a/tianshou/data/batch.py b/tianshou/data/batch.py index 7eaca1144..7e602bba8 100644 --- a/tianshou/data/batch.py +++ b/tianshou/data/batch.py @@ -29,6 +29,43 @@ def _is_batch_set(data: Any) -> bool: return False +def _is_scalar(value: Any) -> bool: + # check if the value is a scalar + # 1. python bool object, number object: isinstance(value, Number) + # 2. numpy scalar: isinstance(value, np.generic) + # 3. python object rather than dict / Batch / tensor + # the check of dict / Batch is omitted because this only checks a value. + # a dict / Batch will eventually check their values + value = np.asanyarray(value) + return value.size == 1 and not value.shape + + +def _is_number(value: Any) -> bool: + # isinstance(value, Number) checks 1, 1.0, np.int(1), np.float(1.0), etc. + # isinstance(value, np.nummber) checks np.int32(1), np.float64(1.0), etc. + # isinstance(value, np.bool_) checks np.bool_(True), etc. + is_number = isinstance(value, Number) + is_number = is_number or isinstance(value, np.number) + is_number = is_number or isinstance(value, np.bool_) + return is_number + + +def _to_array_with_correct_type(v: Any) -> np.ndarray: + # convert the value to np.ndarray + # convert to np.object data type if neither bool nor number + v = np.asanyarray(v) + if not issubclass(v.dtype.type, (np.bool_, np.number)): + v = v.astype(np.object) + if v.dtype == np.object and not v.shape: + # scalar ndarray with np.object data type is very annoying + # a=np.array([np.array({}, dtype=object), np.array({}, dtype=object)]) + # a is not array([{}, {}], dtype=object), and a[0]={} results in + # something very strange: + # array([{}, array({}, dtype=object)], dtype=object) + v = v.item(0) + return v + + def _create_value(inst: Any, size: int, stack=True) -> Union[ 'Batch', np.ndarray, torch.Tensor]: """ @@ -37,14 +74,11 @@ def _create_value(inst: Any, size: int, stack=True) -> Union[ of (10, 3, 5), otherwise (10, 5) """ has_shape = isinstance(inst, (np.ndarray, torch.Tensor)) - is_scalar = \ - isinstance(inst, Number) or \ - issubclass(inst.__class__, np.generic) or \ - (has_shape and not inst.shape) + is_scalar = _is_scalar(inst) if not stack and is_scalar: - # here we do not consider scalar types, following the - # behavior of numpy which does not support concatenation - # of zero-dimensional arrays (scalars) + # here we do not consider scalar types, following the behavior of numpy + # which does not support concatenation of zero-dimensional arrays + # (scalars) raise TypeError(f"cannot concatenate with {inst} which is scalar") if has_shape: shape = (size, *inst.shape) if stack else (size, *inst.shape[1:]) @@ -78,223 +112,36 @@ def _assert_type_keys(keys): f"keys should all be string, but got {keys}" +def _parse_value(v: Any): + if isinstance(v, (list, tuple, np.ndarray)): + if not isinstance(v, np.ndarray) and \ + all(isinstance(e, torch.Tensor) for e in v): + v = torch.stack(v) + return v + v_ = _to_array_with_correct_type(v) + if v_.dtype == np.object and _is_batch_set(v): + v = Batch(v) # list of dict / Batch + else: + # normal data list (main case) + # or actually a data list with objects + v = v_ + elif isinstance(v, dict): + v = Batch(v) + elif isinstance(v, (Batch, torch.Tensor)): + pass + else: + # scalar case, convert to ndarray + v = _to_array_with_correct_type(v) + return v + + class Batch: """Tianshou provides :class:`~tianshou.data.Batch` as the internal data structure to pass any kind of data to other methods, for example, a collector gives a :class:`~tianshou.data.Batch` to policy for learning. - Here is the usage: - :: - - >>> import numpy as np - >>> from tianshou.data import Batch - >>> data = Batch(a=4, b=[5, 5], c='2312312') - >>> # the list will automatically be converted to numpy array - >>> data.b - array([5, 5]) - >>> data.b = np.array([3, 4, 5]) - >>> print(data) - Batch( - a: 4, - b: array([3, 4, 5]), - c: '2312312', - ) - - In short, you can define a :class:`Batch` with any key-value pair. - - For Numpy arrays, only data types with ``np.object``, bool, and number are - supported. For strings or other data types, however, they can be held in - ``np.object`` arrays. - - The current implementation of Tianshou typically use 7 reserved keys in - :class:`~tianshou.data.Batch`: - - * ``obs`` the observation of step :math:`t` ; - * ``act`` the action of step :math:`t` ; - * ``rew`` the reward of step :math:`t` ; - * ``done`` the done flag of step :math:`t` ; - * ``obs_next`` the observation of step :math:`t+1` ; - * ``info`` the info of step :math:`t` (in ``gym.Env``, the ``env.step()``\ - function returns 4 arguments, and the last one is ``info``); - * ``policy`` the data computed by policy in step :math:`t`; - - For convenience, :class:`~tianshou.data.Batch` supports the mechanism of - key reservation: one can specify a key without any value, which serves as - a placeholder for the Batch object. For example, you know there will be a - key named ``obs``, but do not know the value until the simulator runs. Then - you can reserve the key ``obs``. This is done by setting the value to - ``Batch()``. - - For a Batch object, we call it "incomplete" if: (i) it is ``Batch()``; (ii) - it has reserved keys; (iii) any of its sub-Batch is incomplete. Otherwise, - the Batch object is finalized. - - Key reservation mechanism is convenient, but also causes some problem in - aggregation operators like ``stack`` or ``cat`` of Batch objects. We say - that Batch objects are compatible for aggregation with three cases: - - 1. finalized Batch objects are compatible if and only if their exists a \ - way to extend keys so that their structures are exactly the same. - - 2. incomplete Batch objects and other finalized objects are compatible if \ - their exists a way to extend keys so that incomplete Batch objects can \ - have the same structure as finalized objects. - - 3. incomplete Batch objects themselevs are compatible if their exists a \ - way to extend keys so that their structure can be the same. - - In a word, incomplete Batch objects have a set of possible structures - in the future, but finalized Batch object only have a finalized structure. - Batch objects are compatible if and only if they share at least one - commonly possible structure by extending keys. - - :class:`~tianshou.data.Batch` object can be initialized by a wide variety - of arguments, ranging from the key/value pairs or dictionary, to list and - Numpy arrays of :class:`dict` or Batch instances where each element is - considered as an individual sample and get stacked together: - :: - - >>> data = Batch([{'a': {'b': [0.0, "info"]}}]) - >>> print(data[0]) - Batch( - a: Batch( - b: array([0.0, 'info'], dtype=object), - ), - ) - - :class:`~tianshou.data.Batch` has the same API as a native Python - :class:`dict`. In this regard, one can access stored data using string key, - or iterate over stored data: - :: - - >>> data = Batch(a=4, b=[5, 5]) - >>> print(data["a"]) - 4 - >>> for key, value in data.items(): - >>> print(f"{key}: {value}") - a: 4 - b: [5, 5] - - - :class:`~tianshou.data.Batch` also partially reproduces the Numpy API for - arrays. It also supports the advanced slicing method, such as batch[:, i], - if the index is valid. You can access or iterate over the individual - samples, if any: - :: - - >>> data = Batch(a=np.array([[0.0, 2.0], [1.0, 3.0]]), b=[[5, -5]]) - >>> print(data[0]) - Batch( - a: array([0., 2.]) - b: array([ 5, -5]), - ) - >>> for sample in data: - >>> print(sample.a) - [0. 2.] - - >>> print(data.shape) - [1, 2] - >>> data[:, 1] += 1 - >>> print(data) - Batch( - a: array([[0., 3.], - [1., 4.]]), - b: array([[ 5, -4]]), - ) - - Similarly, one can also perform simple algebra on it, and stack, split or - concatenate multiple instances: - :: - - >>> data_1 = Batch(a=np.array([0.0, 2.0]), b=5) - >>> data_2 = Batch(a=np.array([1.0, 3.0]), b=-5) - >>> data = Batch.stack((data_1, data_2)) - >>> print(data) - Batch( - b: array([ 5, -5]), - a: array([[0., 2.], - [1., 3.]]), - ) - >>> print(np.mean(data)) - Batch( - b: 0.0, - a: array([0.5, 2.5]), - ) - >>> data_split = list(data.split(1, False)) - >>> print(list(data.split(1, False))) - [Batch( - b: array([5]), - a: array([[0., 2.]]), - ), Batch( - b: array([-5]), - a: array([[1., 3.]]), - )] - >>> data_cat = Batch.cat(data_split) - >>> print(data_cat) - Batch( - b: array([ 5, -5]), - a: array([[0., 2.], - [1., 3.]]), - ) - - Note that stacking of inconsistent data is also supported. In which case, - ``None`` is added in list or :class:`np.ndarray` of objects, 0 otherwise. - :: - - >>> data_1 = Batch(a=np.array([0.0, 2.0])) - >>> data_2 = Batch(a=np.array([1.0, 3.0]), b='done') - >>> data = Batch.stack((data_1, data_2)) - >>> print(data) - Batch( - a: array([[0., 2.], - [1., 3.]]), - b: array([None, 'done'], dtype=object), - ) - - Method ``empty_`` sets elements to 0 or ``None`` for ``np.object``. - :: - - >>> data.empty_() - >>> print(data) - Batch( - a: array([[0., 0.], - [0., 0.]]), - b: array([None, None], dtype=object), - ) - >>> data = Batch(a=[False, True], b={'c': [2., 'st'], 'd': [1., 0.]}) - >>> data[0] = Batch.empty(data[1]) - >>> data - Batch( - a: array([False, True]), - b: Batch( - c: array([None, 'st']), - d: array([0., 0.]), - ), - ) - - :meth:`~tianshou.data.Batch.shape` and :meth:`~tianshou.data.Batch.__len__` - methods are also provided to respectively get the shape and the length of - a :class:`Batch` instance. It mimics the Numpy API for Numpy arrays, which - means that getting the length of a scalar Batch raises an exception. - :: - - >>> data = Batch(a=[5., 4.], b=np.zeros((2, 3, 4))) - >>> data.shape - [2] - >>> len(data) - 2 - >>> data[0].shape - [] - >>> len(data[0]) - TypeError: Object of type 'Batch' has no len() - - Convenience helpers are available to convert in-place the stored data into - Numpy arrays or Torch tensors. - - Finally, note that :class:`~tianshou.data.Batch` is serializable and - therefore Pickle compatible. This is especially important for distributed - sampling. - """ + For a detailed description, please refer to :ref:`batch_concept`. + """ def __init__(self, batch_dict: Optional[Union[ dict, 'Batch', Tuple[Union[dict, 'Batch']], @@ -307,48 +154,15 @@ def __init__(self, if isinstance(batch_dict, (dict, Batch)): _assert_type_keys(batch_dict.keys()) for k, v in batch_dict.items(): - if isinstance(v, (list, tuple, np.ndarray)): - v_ = None - if not isinstance(v, np.ndarray) and \ - all(isinstance(e, torch.Tensor) for e in v): - self.__dict__[k] = torch.stack(v) - continue - else: - v_ = np.asanyarray(v) - if v_.dtype != np.object: - v = v_ # normal data list, this is the main case - if not issubclass(v.dtype.type, - (np.bool_, np.number)): - v = v.astype(np.object) - else: - if _is_batch_set(v): - v = Batch(v) # list of dict / Batch - else: - # this is actually a data list with objects - v = v_ - self.__dict__[k] = v - elif isinstance(v, dict): - self.__dict__[k] = Batch(v) - else: - self.__dict__[k] = v + self.__dict__[k] = _parse_value(v) elif _is_batch_set(batch_dict): self.stack_(batch_dict) if len(kwargs) > 0: self.__init__(kwargs, copy=copy) def __setattr__(self, key: str, value: Any): - """self[key] = value""" - if isinstance(value, list): - if _is_batch_set(value): - value = Batch(value) - else: - value = np.array(value) - if not issubclass(value.dtype.type, (np.bool_, np.number)): - value = value.astype(np.object) - elif isinstance(value, dict) or isinstance(value, np.ndarray) \ - and value.dtype == np.object and _is_batch_set(value): - value = Batch(value) - self.__dict__[key] = value + """self.key = value""" + self.__dict__[key] = _parse_value(value) def __getstate__(self): """Pickling interface. Only the actual data are serialized for both @@ -389,20 +203,13 @@ def __setitem__(self, index: Union[ str, slice, int, np.integer, np.ndarray, List[int]], value: Any) -> None: """Assign value to self[index].""" - if isinstance(value, (list, tuple)): - value = np.asanyarray(value) - if isinstance(value, np.ndarray): - if not issubclass(value.dtype.type, (np.bool_, np.number)): - value = value.astype(np.object) if isinstance(index, str): - self.__dict__[index] = value + self.__dict__[index] = _parse_value(value) return - if not isinstance(value, (dict, Batch)): - if _is_batch_set(value): - value = Batch(value) - else: - raise TypeError("Batch does not supported value type " - f"{type(value)} for item assignment.") + value = _parse_value(value) + if isinstance(value, (np.ndarray, torch.Tensor)): + raise ValueError("Batch does not supported tensor assignment." + " Use a compatible Batch or dict instead.") if not set(value.keys()).issubset(self.__dict__.keys()): raise KeyError( "Creating keys is not supported by item assignment.") @@ -431,7 +238,7 @@ def __iadd__(self, other: Union['Batch', Number, np.number]): else: self.__dict__[k] += v return self - elif isinstance(other, (Number, np.number)): + elif _is_number(other): for k, r in self.items(): if isinstance(r, Batch) and r.is_empty(): continue @@ -448,7 +255,7 @@ def __add__(self, other: Union['Batch', Number, np.number]): def __imul__(self, val: Union[Number, np.number]): """Algebraic multiplication with a scalar value in-place.""" - assert isinstance(val, (Number, np.number)), \ + assert _is_number(val), \ "Only multiplication by a number is supported." for k, r in self.__dict__.items(): if isinstance(r, Batch) and r.is_empty(): @@ -462,7 +269,7 @@ def __mul__(self, val: Union[Number, np.number]): def __itruediv__(self, val: Union[Number, np.number]): """Algebraic division with a scalar value in-place.""" - assert isinstance(val, (Number, np.number)), \ + assert _is_number(val), \ "Only division by a number is supported." for k, r in self.__dict__.items(): if isinstance(r, Batch) and r.is_empty(): @@ -524,14 +331,7 @@ def to_torch(self, dtype: Optional[torch.dtype] = None, device = torch.device(device) for k, v in self.items(): - if isinstance(v, (np.number, np.bool_, Number, np.ndarray)): - if isinstance(v, (np.number, np.bool_, Number)): - v = np.asanyarray(v) - v = torch.from_numpy(v).to(device) - if dtype is not None: - v = v.type(dtype) - self.__dict__[k] = v - elif isinstance(v, torch.Tensor): + if isinstance(v, torch.Tensor): if dtype is not None and v.dtype != dtype or \ v.device.type != device.type or \ device.index is not None and \ @@ -541,6 +341,14 @@ def to_torch(self, dtype: Optional[torch.dtype] = None, self.__dict__[k] = v.to(device) elif isinstance(v, Batch): v.to_torch(dtype, device) + else: + # ndarray or scalar + if not isinstance(v, np.ndarray): + v = np.asanyarray(v) + v = torch.from_numpy(v).to(device) + if dtype is not None: + v = v.type(dtype) + self.__dict__[k] = v def __cat(self, batches: Union['Batch', List[Union[dict, 'Batch']]], @@ -586,8 +394,7 @@ def __cat(self, # cat Batch(a=np.zeros((3, 4))) and Batch(a=Batch(b=Batch())) # will fail here v = np.concatenate(v) - if not issubclass(v.dtype.type, (np.bool_, np.number)): - v = v.astype(np.object) + v = _to_array_with_correct_type(v) self.__dict__[k] = v keys_total = set.union(*[set(b.keys()) for b in batches]) keys_reserve_or_partial = set.difference(keys_total, keys_shared) @@ -691,8 +498,7 @@ def stack_(self, self.__dict__[k] = torch.stack(v, axis) else: v = np.stack(v, axis) - if not issubclass(v.dtype.type, (np.bool_, np.number)): - v = v.astype(np.object) + v = _to_array_with_correct_type(v) self.__dict__[k] = v # all the keys keys_total = set.union(*[set(b.keys()) for b in batches]) @@ -742,7 +548,6 @@ def stack(batches: List[Union[dict, 'Batch']], axis: int = 0) -> 'Batch': (2, 4, 5) .. note:: - If there are keys that are not shared across all batches, ``stack`` with ``axis != 0`` is undefined, and will cause an exception. """ @@ -756,6 +561,26 @@ def empty_(self, index: Union[ """Return an empty a :class:`~tianshou.data.Batch` object with 0 or ``None`` filled. If ``index`` is specified, it will only reset the specific indexed-data. + :: + + >>> data.empty_() + >>> print(data) + Batch( + a: array([[0., 0.], + [0., 0.]]), + b: array([None, None], dtype=object), + ) + >>> b={'c': [2., 'st'], 'd': [1., 0.]} + >>> data = Batch(a=[False, True], b=b) + >>> data[0] = Batch.empty(data[1]) + >>> data + Batch( + a: array([False, True]), + b: Batch( + c: array([None, 'st']), + d: array([0., 0.]), + ), + ) """ for k, v in self.items(): if v is None: @@ -772,7 +597,7 @@ def empty_(self, index: Union[ else: # scalar value warnings.warn('You are calling Batch.empty on a NumPy scalar, ' 'which may cause undefined behaviors.') - if isinstance(v, (np.number, np.bool_, Number)): + if _is_number(v): self.__dict__[k] = v.__class__(0) else: self.__dict__[k] = None @@ -813,6 +638,8 @@ def __len__(self) -> int: else: raise TypeError(f"Object {v} in {self} has no len()") if len(r) == 0: + # empty batch has the shape of any, like the tensorflow '?' shape. + # So it has no length. raise TypeError(f"Object {self} has no len()") return min(r) @@ -827,7 +654,7 @@ def is_empty(self, recurse: bool = False): ``cat``, while the latter is a scalar and cannot be used in ``cat``. Another usage is in ``__len__``, where we have to skip checking the - length of recursely empty Batch. + length of recursively empty Batch. :: >>> Batch().is_empty() @@ -857,10 +684,9 @@ def shape(self) -> List[int]: data_shape = [] for v in self.__dict__.values(): try: - data_shape.append(v.shape) + data_shape.append(list(v.shape)) except AttributeError: - raise TypeError("No support for 'shape' method with " - f"type {type(v)} in class Batch.") + data_shape.append([]) return list(map(min, zip(*data_shape))) if len(data_shape) > 1 \ else data_shape[0] diff --git a/tianshou/data/buffer.py b/tianshou/data/buffer.py index f593d2a74..a2e658d32 100644 --- a/tianshou/data/buffer.py +++ b/tianshou/data/buffer.py @@ -6,9 +6,19 @@ class ReplayBuffer: """:class:`~tianshou.data.ReplayBuffer` stores data generated from - interaction between the policy and environment. It stores basically 7 types - of data, as mentioned in :class:`~tianshou.data.Batch`, based on - ``numpy.ndarray``. Here is the usage: + interaction between the policy and environment. The current implementation + of Tianshou typically use 7 reserved keys in :class:`~tianshou.data.Batch`: + + * ``obs`` the observation of step :math:`t` ; + * ``act`` the action of step :math:`t` ; + * ``rew`` the reward of step :math:`t` ; + * ``done`` the done flag of step :math:`t` ; + * ``obs_next`` the observation of step :math:`t+1` ; + * ``info`` the info of step :math:`t` (in ``gym.Env``, the ``env.step()`` \ + function returns 4 arguments, and the last one is ``info``); + * ``policy`` the data computed by policy in step :math:`t`; + + The following code snippet illustrates its usage: :: >>> import numpy as np @@ -16,13 +26,13 @@ class ReplayBuffer: >>> buf = ReplayBuffer(size=20) >>> for i in range(3): ... buf.add(obs=i, act=i, rew=i, done=i, obs_next=i + 1, info={}) - >>> len(buf) - 3 >>> buf.obs # since we set size = 20, len(buf.obs) == 20. array([0., 1., 2., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]) - + >>> # but there are only three valid items, so len(buf) == 3. + >>> len(buf) + 3 >>> buf2 = ReplayBuffer(size=10) >>> for i in range(15): ... buf2.add(obs=i, act=i, rew=i, done=i, obs_next=i + 1, info={}) From 20db334cda24f83756d81221aeb9de816e0d0fed Mon Sep 17 00:00:00 2001 From: Trinkle23897 <463003665@qq.com> Date: Tue, 21 Jul 2020 13:31:43 +0800 Subject: [PATCH 14/22] fix a2c --- tianshou/policy/modelfree/a2c.py | 7 ++++--- tianshou/policy/modelfree/ddpg.py | 3 +-- tianshou/policy/modelfree/ppo.py | 3 +-- tianshou/policy/modelfree/sac.py | 2 +- 4 files changed, 7 insertions(+), 8 deletions(-) diff --git a/tianshou/policy/modelfree/a2c.py b/tianshou/policy/modelfree/a2c.py index f4de285a6..46315a64c 100644 --- a/tianshou/policy/modelfree/a2c.py +++ b/tianshou/policy/modelfree/a2c.py @@ -97,9 +97,10 @@ def forward(self, batch: Batch, def learn(self, batch: Batch, batch_size: int, repeat: int, **kwargs) -> Dict[str, List[float]]: self._batch = batch_size - r = batch.returns + r = batch.returns[:, None] if self._rew_norm and not np.isclose(r.std(), 0): - batch.returns = (r - r.mean()) / r.std() + r = (r - r.mean()) / r.std() + batch.returns = r losses, actor_losses, vf_losses, ent_losses = [], [], [], [] for _ in range(repeat): for b in batch.split(batch_size): @@ -109,7 +110,7 @@ def learn(self, batch: Batch, batch_size: int, repeat: int, a = to_torch_as(b.act, v) r = to_torch_as(b.returns, v) a_loss = -(dist.log_prob(a) * (r - v).detach()).mean() - vf_loss = F.mse_loss(r[:, None], v) + vf_loss = F.mse_loss(r, v) ent_loss = dist.entropy().mean() loss = a_loss + self._w_vf * vf_loss - self._w_ent * ent_loss loss.backward() diff --git a/tianshou/policy/modelfree/ddpg.py b/tianshou/policy/modelfree/ddpg.py index 0944e8d98..7724f3c75 100644 --- a/tianshou/policy/modelfree/ddpg.py +++ b/tianshou/policy/modelfree/ddpg.py @@ -143,8 +143,7 @@ def forward(self, batch: Batch, def learn(self, batch: Batch, **kwargs) -> Dict[str, float]: current_q = self.critic(batch.obs, batch.act) - target_q = to_torch_as(batch.returns, current_q) - target_q = target_q[:, None] + target_q = to_torch_as(batch.returns[:, None], current_q) critic_loss = F.mse_loss(current_q, target_q) self.critic_optim.zero_grad() critic_loss.backward() diff --git a/tianshou/policy/modelfree/ppo.py b/tianshou/policy/modelfree/ppo.py index a7abec518..06283d795 100644 --- a/tianshou/policy/modelfree/ppo.py +++ b/tianshou/policy/modelfree/ppo.py @@ -133,8 +133,7 @@ def learn(self, batch: Batch, batch_size: int, repeat: int, batch.v = torch.cat(v, dim=0) # old value batch.act = to_torch_as(batch.act, v[0]) batch.logp_old = torch.cat(old_log_prob, dim=0) - batch.returns = to_torch_as( - batch.returns, v[0]).reshape(batch.v.shape) + batch.returns = to_torch_as(batch.returns, v[0])[:, None] if self._rew_norm: mean, std = batch.returns.mean(), batch.returns.std() if not np.isclose(std.item(), 0): diff --git a/tianshou/policy/modelfree/sac.py b/tianshou/policy/modelfree/sac.py index ab0a633e6..cd18820b6 100644 --- a/tianshou/policy/modelfree/sac.py +++ b/tianshou/policy/modelfree/sac.py @@ -140,7 +140,7 @@ def _target_q(self, buffer: ReplayBuffer, def learn(self, batch: Batch, **kwargs) -> Dict[str, float]: # critic 1 current_q1 = self.critic1(batch.obs, batch.act) - target_q = to_torch_as(batch.returns, current_q1)[:, None] + target_q = batch.returns[:, None] critic1_loss = F.mse_loss(current_q1, target_q) self.critic1_optim.zero_grad() critic1_loss.backward() From a8027664088d4ee32ea274e87cc15d11fdb6ef0f Mon Sep 17 00:00:00 2001 From: Trinkle23897 <463003665@qq.com> Date: Tue, 21 Jul 2020 13:36:25 +0800 Subject: [PATCH 15/22] minor update --- tianshou/policy/modelfree/ddpg.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tianshou/policy/modelfree/ddpg.py b/tianshou/policy/modelfree/ddpg.py index 7724f3c75..639d5b3ae 100644 --- a/tianshou/policy/modelfree/ddpg.py +++ b/tianshou/policy/modelfree/ddpg.py @@ -143,7 +143,7 @@ def forward(self, batch: Batch, def learn(self, batch: Batch, **kwargs) -> Dict[str, float]: current_q = self.critic(batch.obs, batch.act) - target_q = to_torch_as(batch.returns[:, None], current_q) + target_q = batch.returns[:, None] critic_loss = F.mse_loss(current_q, target_q) self.critic_optim.zero_grad() critic_loss.backward() From f30dc258cabb2a13c56afa750fe9807fca95639c Mon Sep 17 00:00:00 2001 From: Trinkle23897 <463003665@qq.com> Date: Tue, 21 Jul 2020 16:40:07 +0800 Subject: [PATCH 16/22] minor update --- tianshou/policy/base.py | 13 +++++++------ tianshou/policy/modelfree/a2c.py | 2 +- tianshou/policy/modelfree/ddpg.py | 2 +- tianshou/policy/modelfree/ppo.py | 2 +- tianshou/policy/modelfree/sac.py | 2 +- tianshou/policy/modelfree/td3.py | 2 +- 6 files changed, 12 insertions(+), 11 deletions(-) diff --git a/tianshou/policy/base.py b/tianshou/policy/base.py index c9763621c..7e7ac4847 100644 --- a/tianshou/policy/base.py +++ b/tianshou/policy/base.py @@ -110,10 +110,10 @@ def learn(self, batch: Batch, **kwargs @staticmethod def compute_episodic_return( - batch: Batch, - v_s_: Optional[Union[np.ndarray, torch.Tensor]] = None, - gamma: float = 0.99, - gae_lambda: float = 0.95, + batch: Batch, + v_s_: Optional[Union[np.ndarray, torch.Tensor]] = None, + gamma: float = 0.99, + gae_lambda: float = 0.95, ) -> Batch: """Compute returns over given full-length episodes, including the implementation of Generalized Advantage Estimator (arXiv:1506.02438). @@ -128,7 +128,8 @@ def compute_episodic_return( :param float gae_lambda: the parameter for Generalized Advantage Estimation, should be in [0, 1], defaults to 0.95. - :return: a Batch. The result will be stored in batch.returns. + :return: a Batch. The result will be stored in batch.returns as a numpy + array. """ rew = batch.rew if v_s_ is None: @@ -157,7 +158,7 @@ def compute_nstep_return( gamma: float = 0.99, n_step: int = 1, rew_norm: bool = False, - ) -> np.ndarray: + ) -> Batch: r"""Compute n-step return for Q-learning targets: .. math:: diff --git a/tianshou/policy/modelfree/a2c.py b/tianshou/policy/modelfree/a2c.py index 46315a64c..d2944bfcf 100644 --- a/tianshou/policy/modelfree/a2c.py +++ b/tianshou/policy/modelfree/a2c.py @@ -97,7 +97,7 @@ def forward(self, batch: Batch, def learn(self, batch: Batch, batch_size: int, repeat: int, **kwargs) -> Dict[str, List[float]]: self._batch = batch_size - r = batch.returns[:, None] + r = batch.returns[:, np.newaxis] if self._rew_norm and not np.isclose(r.std(), 0): r = (r - r.mean()) / r.std() batch.returns = r diff --git a/tianshou/policy/modelfree/ddpg.py b/tianshou/policy/modelfree/ddpg.py index 639d5b3ae..fe79f74a7 100644 --- a/tianshou/policy/modelfree/ddpg.py +++ b/tianshou/policy/modelfree/ddpg.py @@ -143,7 +143,7 @@ def forward(self, batch: Batch, def learn(self, batch: Batch, **kwargs) -> Dict[str, float]: current_q = self.critic(batch.obs, batch.act) - target_q = batch.returns[:, None] + target_q = batch.returns[:, np.newaxis] critic_loss = F.mse_loss(current_q, target_q) self.critic_optim.zero_grad() critic_loss.backward() diff --git a/tianshou/policy/modelfree/ppo.py b/tianshou/policy/modelfree/ppo.py index 06283d795..774e3fc05 100644 --- a/tianshou/policy/modelfree/ppo.py +++ b/tianshou/policy/modelfree/ppo.py @@ -133,7 +133,7 @@ def learn(self, batch: Batch, batch_size: int, repeat: int, batch.v = torch.cat(v, dim=0) # old value batch.act = to_torch_as(batch.act, v[0]) batch.logp_old = torch.cat(old_log_prob, dim=0) - batch.returns = to_torch_as(batch.returns, v[0])[:, None] + batch.returns = to_torch_as(batch.returns, v[0])[:, np.newaxis] if self._rew_norm: mean, std = batch.returns.mean(), batch.returns.std() if not np.isclose(std.item(), 0): diff --git a/tianshou/policy/modelfree/sac.py b/tianshou/policy/modelfree/sac.py index cd18820b6..7e466628f 100644 --- a/tianshou/policy/modelfree/sac.py +++ b/tianshou/policy/modelfree/sac.py @@ -140,7 +140,7 @@ def _target_q(self, buffer: ReplayBuffer, def learn(self, batch: Batch, **kwargs) -> Dict[str, float]: # critic 1 current_q1 = self.critic1(batch.obs, batch.act) - target_q = batch.returns[:, None] + target_q = batch.returns[:, np.newaxis] critic1_loss = F.mse_loss(current_q1, target_q) self.critic1_optim.zero_grad() critic1_loss.backward() diff --git a/tianshou/policy/modelfree/td3.py b/tianshou/policy/modelfree/td3.py index 5d9bc3772..d8e2b2b7e 100644 --- a/tianshou/policy/modelfree/td3.py +++ b/tianshou/policy/modelfree/td3.py @@ -118,7 +118,7 @@ def _target_q(self, buffer: ReplayBuffer, def learn(self, batch: Batch, **kwargs) -> Dict[str, float]: # critic 1 current_q1 = self.critic1(batch.obs, batch.act) - target_q = batch.returns[:, None] + target_q = batch.returns[:, np.newaxis] critic1_loss = F.mse_loss(current_q1, target_q) self.critic1_optim.zero_grad() critic1_loss.backward() From 877b32471ec0be032fb60719e38e78326b81f7f3 Mon Sep 17 00:00:00 2001 From: Trinkle23897 <463003665@qq.com> Date: Tue, 21 Jul 2020 19:44:22 +0800 Subject: [PATCH 17/22] fix a2c bug --- tianshou/policy/modelfree/a2c.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/tianshou/policy/modelfree/a2c.py b/tianshou/policy/modelfree/a2c.py index d2944bfcf..2a68eb3af 100644 --- a/tianshou/policy/modelfree/a2c.py +++ b/tianshou/policy/modelfree/a2c.py @@ -97,16 +97,15 @@ def forward(self, batch: Batch, def learn(self, batch: Batch, batch_size: int, repeat: int, **kwargs) -> Dict[str, List[float]]: self._batch = batch_size - r = batch.returns[:, np.newaxis] + r = batch.returns if self._rew_norm and not np.isclose(r.std(), 0): - r = (r - r.mean()) / r.std() - batch.returns = r + batch.returns = (r - r.mean()) / r.std() losses, actor_losses, vf_losses, ent_losses = [], [], [], [] for _ in range(repeat): for b in batch.split(batch_size): self.optim.zero_grad() dist = self(b).dist - v = self.critic(b.obs) + v = self.critic(b.obs).squeeze(-1) a = to_torch_as(b.act, v) r = to_torch_as(b.returns, v) a_loss = -(dist.log_prob(a) * (r - v).detach()).mean() From 42287b78281b9d868b0155932e8d0ca9069be431 Mon Sep 17 00:00:00 2001 From: Trinkle23897 <463003665@qq.com> Date: Tue, 21 Jul 2020 19:54:49 +0800 Subject: [PATCH 18/22] fix ppo --- tianshou/policy/modelfree/ppo.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tianshou/policy/modelfree/ppo.py b/tianshou/policy/modelfree/ppo.py index 774e3fc05..71c82dcd7 100644 --- a/tianshou/policy/modelfree/ppo.py +++ b/tianshou/policy/modelfree/ppo.py @@ -130,10 +130,10 @@ def learn(self, batch: Batch, batch_size: int, repeat: int, v.append(self.critic(b.obs)) old_log_prob.append(self(b).dist.log_prob( to_torch_as(b.act, v[0]))) - batch.v = torch.cat(v, dim=0) # old value + batch.v = torch.cat(v, dim=0).squeeze() # old value batch.act = to_torch_as(batch.act, v[0]) batch.logp_old = torch.cat(old_log_prob, dim=0) - batch.returns = to_torch_as(batch.returns, v[0])[:, np.newaxis] + batch.returns = to_torch_as(batch.returns, v[0]) if self._rew_norm: mean, std = batch.returns.mean(), batch.returns.std() if not np.isclose(std.item(), 0): @@ -146,7 +146,7 @@ def learn(self, batch: Batch, batch_size: int, repeat: int, for _ in range(repeat): for b in batch.split(batch_size): dist = self(b).dist - value = self.critic(b.obs) + value = self.critic(b.obs).squeeze() ratio = (dist.log_prob(b.act) - b.logp_old).exp().float() surr1 = ratio * b.adv surr2 = ratio.clamp( From e88e1006abbfe57ef736c01062c1b512a5e404fb Mon Sep 17 00:00:00 2001 From: Trinkle23897 <463003665@qq.com> Date: Tue, 21 Jul 2020 21:23:30 +0800 Subject: [PATCH 19/22] all squeeze --- tianshou/policy/modelfree/a2c.py | 5 +++-- tianshou/policy/modelfree/ddpg.py | 4 ++-- tianshou/policy/modelfree/ppo.py | 5 +++-- tianshou/policy/modelfree/sac.py | 12 ++++++------ tianshou/policy/modelfree/td3.py | 6 +++--- 5 files changed, 17 insertions(+), 15 deletions(-) diff --git a/tianshou/policy/modelfree/a2c.py b/tianshou/policy/modelfree/a2c.py index 2a68eb3af..af28eef7f 100644 --- a/tianshou/policy/modelfree/a2c.py +++ b/tianshou/policy/modelfree/a2c.py @@ -105,10 +105,11 @@ def learn(self, batch: Batch, batch_size: int, repeat: int, for b in batch.split(batch_size): self.optim.zero_grad() dist = self(b).dist - v = self.critic(b.obs).squeeze(-1) + v = self.critic(b.obs).squeeze() a = to_torch_as(b.act, v) r = to_torch_as(b.returns, v) - a_loss = -(dist.log_prob(a) * (r - v).detach()).mean() + a_loss = -(dist.log_prob(a).squeeze() * (r - v).detach() + ).mean() vf_loss = F.mse_loss(r, v) ent_loss = dist.entropy().mean() loss = a_loss + self._w_vf * vf_loss - self._w_ent * ent_loss diff --git a/tianshou/policy/modelfree/ddpg.py b/tianshou/policy/modelfree/ddpg.py index fe79f74a7..45024098a 100644 --- a/tianshou/policy/modelfree/ddpg.py +++ b/tianshou/policy/modelfree/ddpg.py @@ -142,8 +142,8 @@ def forward(self, batch: Batch, return Batch(act=actions, state=h) def learn(self, batch: Batch, **kwargs) -> Dict[str, float]: - current_q = self.critic(batch.obs, batch.act) - target_q = batch.returns[:, np.newaxis] + current_q = self.critic(batch.obs, batch.act).squeeze() + target_q = batch.returns.squeeze() critic_loss = F.mse_loss(current_q, target_q) self.critic_optim.zero_grad() critic_loss.backward() diff --git a/tianshou/policy/modelfree/ppo.py b/tianshou/policy/modelfree/ppo.py index 71c82dcd7..8b03c97b1 100644 --- a/tianshou/policy/modelfree/ppo.py +++ b/tianshou/policy/modelfree/ppo.py @@ -132,7 +132,7 @@ def learn(self, batch: Batch, batch_size: int, repeat: int, to_torch_as(b.act, v[0]))) batch.v = torch.cat(v, dim=0).squeeze() # old value batch.act = to_torch_as(batch.act, v[0]) - batch.logp_old = torch.cat(old_log_prob, dim=0) + batch.logp_old = torch.cat(old_log_prob, dim=0).squeeze() batch.returns = to_torch_as(batch.returns, v[0]) if self._rew_norm: mean, std = batch.returns.mean(), batch.returns.std() @@ -147,7 +147,8 @@ def learn(self, batch: Batch, batch_size: int, repeat: int, for b in batch.split(batch_size): dist = self(b).dist value = self.critic(b.obs).squeeze() - ratio = (dist.log_prob(b.act) - b.logp_old).exp().float() + ratio = (dist.log_prob(b.act).squeeze() - b.logp_old + ).exp().float() surr1 = ratio * b.adv surr2 = ratio.clamp( 1. - self._eps_clip, 1. + self._eps_clip) * b.adv diff --git a/tianshou/policy/modelfree/sac.py b/tianshou/policy/modelfree/sac.py index 7e466628f..081fe53f6 100644 --- a/tianshou/policy/modelfree/sac.py +++ b/tianshou/policy/modelfree/sac.py @@ -139,14 +139,14 @@ def _target_q(self, buffer: ReplayBuffer, def learn(self, batch: Batch, **kwargs) -> Dict[str, float]: # critic 1 - current_q1 = self.critic1(batch.obs, batch.act) - target_q = batch.returns[:, np.newaxis] + current_q1 = self.critic1(batch.obs, batch.act).squeeze() + target_q = batch.returns critic1_loss = F.mse_loss(current_q1, target_q) self.critic1_optim.zero_grad() critic1_loss.backward() self.critic1_optim.step() # critic 2 - current_q2 = self.critic2(batch.obs, batch.act) + current_q2 = self.critic2(batch.obs, batch.act).squeeze() critic2_loss = F.mse_loss(current_q2, target_q) self.critic2_optim.zero_grad() critic2_loss.backward() @@ -154,9 +154,9 @@ def learn(self, batch: Batch, **kwargs) -> Dict[str, float]: # actor obs_result = self(batch, explorating=False) a = obs_result.act - current_q1a = self.critic1(batch.obs, a) - current_q2a = self.critic2(batch.obs, a) - actor_loss = (self._alpha * obs_result.log_prob - torch.min( + current_q1a = self.critic1(batch.obs, a).squeeze() + current_q2a = self.critic2(batch.obs, a).squeeze() + actor_loss = (self._alpha * obs_result.log_prob.squeeze() - torch.min( current_q1a, current_q2a)).mean() self.actor_optim.zero_grad() actor_loss.backward() diff --git a/tianshou/policy/modelfree/td3.py b/tianshou/policy/modelfree/td3.py index d8e2b2b7e..d0da38338 100644 --- a/tianshou/policy/modelfree/td3.py +++ b/tianshou/policy/modelfree/td3.py @@ -117,14 +117,14 @@ def _target_q(self, buffer: ReplayBuffer, def learn(self, batch: Batch, **kwargs) -> Dict[str, float]: # critic 1 - current_q1 = self.critic1(batch.obs, batch.act) - target_q = batch.returns[:, np.newaxis] + current_q1 = self.critic1(batch.obs, batch.act).squeeze() + target_q = batch.returns critic1_loss = F.mse_loss(current_q1, target_q) self.critic1_optim.zero_grad() critic1_loss.backward() self.critic1_optim.step() # critic 2 - current_q2 = self.critic2(batch.obs, batch.act) + current_q2 = self.critic2(batch.obs, batch.act).squeeze() critic2_loss = F.mse_loss(current_q2, target_q) self.critic2_optim.zero_grad() critic2_loss.backward() From 4c52ef3d9e66cfe17a5899c720bf3dc53f345d26 Mon Sep 17 00:00:00 2001 From: Trinkle23897 <463003665@qq.com> Date: Tue, 21 Jul 2020 21:35:43 +0800 Subject: [PATCH 20/22] squeeze with dim --- tianshou/policy/modelfree/a2c.py | 2 +- tianshou/policy/modelfree/ddpg.py | 4 ++-- tianshou/policy/modelfree/ppo.py | 4 ++-- tianshou/policy/modelfree/sac.py | 8 ++++---- tianshou/policy/modelfree/td3.py | 4 ++-- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/tianshou/policy/modelfree/a2c.py b/tianshou/policy/modelfree/a2c.py index af28eef7f..78b1219e3 100644 --- a/tianshou/policy/modelfree/a2c.py +++ b/tianshou/policy/modelfree/a2c.py @@ -105,7 +105,7 @@ def learn(self, batch: Batch, batch_size: int, repeat: int, for b in batch.split(batch_size): self.optim.zero_grad() dist = self(b).dist - v = self.critic(b.obs).squeeze() + v = self.critic(b.obs).squeeze(-1) a = to_torch_as(b.act, v) r = to_torch_as(b.returns, v) a_loss = -(dist.log_prob(a).squeeze() * (r - v).detach() diff --git a/tianshou/policy/modelfree/ddpg.py b/tianshou/policy/modelfree/ddpg.py index 45024098a..5dff17f55 100644 --- a/tianshou/policy/modelfree/ddpg.py +++ b/tianshou/policy/modelfree/ddpg.py @@ -142,8 +142,8 @@ def forward(self, batch: Batch, return Batch(act=actions, state=h) def learn(self, batch: Batch, **kwargs) -> Dict[str, float]: - current_q = self.critic(batch.obs, batch.act).squeeze() - target_q = batch.returns.squeeze() + current_q = self.critic(batch.obs, batch.act).squeeze(-1) + target_q = batch.returns critic_loss = F.mse_loss(current_q, target_q) self.critic_optim.zero_grad() critic_loss.backward() diff --git a/tianshou/policy/modelfree/ppo.py b/tianshou/policy/modelfree/ppo.py index 8b03c97b1..ec7ee10f3 100644 --- a/tianshou/policy/modelfree/ppo.py +++ b/tianshou/policy/modelfree/ppo.py @@ -130,7 +130,7 @@ def learn(self, batch: Batch, batch_size: int, repeat: int, v.append(self.critic(b.obs)) old_log_prob.append(self(b).dist.log_prob( to_torch_as(b.act, v[0]))) - batch.v = torch.cat(v, dim=0).squeeze() # old value + batch.v = torch.cat(v, dim=0).squeeze(-1) # old value batch.act = to_torch_as(batch.act, v[0]) batch.logp_old = torch.cat(old_log_prob, dim=0).squeeze() batch.returns = to_torch_as(batch.returns, v[0]) @@ -146,7 +146,7 @@ def learn(self, batch: Batch, batch_size: int, repeat: int, for _ in range(repeat): for b in batch.split(batch_size): dist = self(b).dist - value = self.critic(b.obs).squeeze() + value = self.critic(b.obs).squeeze(-1) ratio = (dist.log_prob(b.act).squeeze() - b.logp_old ).exp().float() surr1 = ratio * b.adv diff --git a/tianshou/policy/modelfree/sac.py b/tianshou/policy/modelfree/sac.py index 081fe53f6..289a1576d 100644 --- a/tianshou/policy/modelfree/sac.py +++ b/tianshou/policy/modelfree/sac.py @@ -139,14 +139,14 @@ def _target_q(self, buffer: ReplayBuffer, def learn(self, batch: Batch, **kwargs) -> Dict[str, float]: # critic 1 - current_q1 = self.critic1(batch.obs, batch.act).squeeze() + current_q1 = self.critic1(batch.obs, batch.act).squeeze(-1) target_q = batch.returns critic1_loss = F.mse_loss(current_q1, target_q) self.critic1_optim.zero_grad() critic1_loss.backward() self.critic1_optim.step() # critic 2 - current_q2 = self.critic2(batch.obs, batch.act).squeeze() + current_q2 = self.critic2(batch.obs, batch.act).squeeze(-1) critic2_loss = F.mse_loss(current_q2, target_q) self.critic2_optim.zero_grad() critic2_loss.backward() @@ -154,8 +154,8 @@ def learn(self, batch: Batch, **kwargs) -> Dict[str, float]: # actor obs_result = self(batch, explorating=False) a = obs_result.act - current_q1a = self.critic1(batch.obs, a).squeeze() - current_q2a = self.critic2(batch.obs, a).squeeze() + current_q1a = self.critic1(batch.obs, a).squeeze(-1) + current_q2a = self.critic2(batch.obs, a).squeeze(-1) actor_loss = (self._alpha * obs_result.log_prob.squeeze() - torch.min( current_q1a, current_q2a)).mean() self.actor_optim.zero_grad() diff --git a/tianshou/policy/modelfree/td3.py b/tianshou/policy/modelfree/td3.py index d0da38338..1ea3a9004 100644 --- a/tianshou/policy/modelfree/td3.py +++ b/tianshou/policy/modelfree/td3.py @@ -117,14 +117,14 @@ def _target_q(self, buffer: ReplayBuffer, def learn(self, batch: Batch, **kwargs) -> Dict[str, float]: # critic 1 - current_q1 = self.critic1(batch.obs, batch.act).squeeze() + current_q1 = self.critic1(batch.obs, batch.act).squeeze(-1) target_q = batch.returns critic1_loss = F.mse_loss(current_q1, target_q) self.critic1_optim.zero_grad() critic1_loss.backward() self.critic1_optim.step() # critic 2 - current_q2 = self.critic2(batch.obs, batch.act).squeeze() + current_q2 = self.critic2(batch.obs, batch.act).squeeze(-1) critic2_loss = F.mse_loss(current_q2, target_q) self.critic2_optim.zero_grad() critic2_loss.backward() From ac83c4fb746384359e9b8ad6437b658f4e710b5b Mon Sep 17 00:00:00 2001 From: Trinkle23897 <463003665@qq.com> Date: Tue, 21 Jul 2020 22:01:47 +0800 Subject: [PATCH 21/22] remove squeeze() --- tianshou/policy/base.py | 2 +- tianshou/policy/modelfree/a2c.py | 2 +- tianshou/policy/modelfree/ppo.py | 4 ++-- tianshou/policy/modelfree/sac.py | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tianshou/policy/base.py b/tianshou/policy/base.py index 7e7ac4847..80d1614fe 100644 --- a/tianshou/policy/base.py +++ b/tianshou/policy/base.py @@ -205,7 +205,7 @@ def compute_nstep_return( returns[done[now] > 0] = 0 returns = (rew[now] - mean) / std + gamma * returns terminal = (indice + n_step - 1) % buf_len - target_q = target_q_fn(buffer, terminal).squeeze() + target_q = target_q_fn(buffer, terminal).flatten() # shape: [bsz, ] target_q[gammas != n_step] = 0 returns = to_torch_as(returns, target_q) gammas = to_torch_as(gamma ** gammas, target_q) diff --git a/tianshou/policy/modelfree/a2c.py b/tianshou/policy/modelfree/a2c.py index 78b1219e3..569d98a16 100644 --- a/tianshou/policy/modelfree/a2c.py +++ b/tianshou/policy/modelfree/a2c.py @@ -108,7 +108,7 @@ def learn(self, batch: Batch, batch_size: int, repeat: int, v = self.critic(b.obs).squeeze(-1) a = to_torch_as(b.act, v) r = to_torch_as(b.returns, v) - a_loss = -(dist.log_prob(a).squeeze() * (r - v).detach() + a_loss = -(dist.log_prob(a).reshape(v.shape) * (r - v).detach() ).mean() vf_loss = F.mse_loss(r, v) ent_loss = dist.entropy().mean() diff --git a/tianshou/policy/modelfree/ppo.py b/tianshou/policy/modelfree/ppo.py index ec7ee10f3..dbf0f2408 100644 --- a/tianshou/policy/modelfree/ppo.py +++ b/tianshou/policy/modelfree/ppo.py @@ -132,7 +132,7 @@ def learn(self, batch: Batch, batch_size: int, repeat: int, to_torch_as(b.act, v[0]))) batch.v = torch.cat(v, dim=0).squeeze(-1) # old value batch.act = to_torch_as(batch.act, v[0]) - batch.logp_old = torch.cat(old_log_prob, dim=0).squeeze() + batch.logp_old = torch.cat(old_log_prob, dim=0).reshape(batch.v.shape) batch.returns = to_torch_as(batch.returns, v[0]) if self._rew_norm: mean, std = batch.returns.mean(), batch.returns.std() @@ -147,7 +147,7 @@ def learn(self, batch: Batch, batch_size: int, repeat: int, for b in batch.split(batch_size): dist = self(b).dist value = self.critic(b.obs).squeeze(-1) - ratio = (dist.log_prob(b.act).squeeze() - b.logp_old + ratio = (dist.log_prob(b.act).reshape(value.shape) - b.logp_old ).exp().float() surr1 = ratio * b.adv surr2 = ratio.clamp( diff --git a/tianshou/policy/modelfree/sac.py b/tianshou/policy/modelfree/sac.py index 289a1576d..5fdf3597f 100644 --- a/tianshou/policy/modelfree/sac.py +++ b/tianshou/policy/modelfree/sac.py @@ -156,8 +156,8 @@ def learn(self, batch: Batch, **kwargs) -> Dict[str, float]: a = obs_result.act current_q1a = self.critic1(batch.obs, a).squeeze(-1) current_q2a = self.critic2(batch.obs, a).squeeze(-1) - actor_loss = (self._alpha * obs_result.log_prob.squeeze() - torch.min( - current_q1a, current_q2a)).mean() + actor_loss = (self._alpha * obs_result.log_prob.reshape( + target_q.shape) - torch.min(current_q1a, current_q2a)).mean() self.actor_optim.zero_grad() actor_loss.backward() self.actor_optim.step() From a736526899f88f736ab9e6f492c42e61a858c4bb Mon Sep 17 00:00:00 2001 From: Trinkle23897 <463003665@qq.com> Date: Tue, 21 Jul 2020 22:12:26 +0800 Subject: [PATCH 22/22] add a warning --- tianshou/policy/base.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tianshou/policy/base.py b/tianshou/policy/base.py index 80d1614fe..f9799da2b 100644 --- a/tianshou/policy/base.py +++ b/tianshou/policy/base.py @@ -105,6 +105,15 @@ def learn(self, batch: Batch, **kwargs """Update policy with a given batch of data. :return: A dict which includes loss and its corresponding label. + + .. warning:: + + If you use ``torch.distributions.Normal`` and + ``torch.distributions.Categorical`` to calculate the log_prob, + please be careful about the shape: Categorical distribution gives + "[batch_size]" shape while Normal distribution gives "[batch_size, + 1]" shape. The auto-broadcasting of numerical operation with torch + tensors will amplify this error. """ pass

XehC{w_zRw}ZOcs=IVK7;$z2pS$8 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 ?}k^dosScs+p^ zU8AHHt9U&H8V1}G4!SC!Fp)*gbis}VoiO2v^lq<#Qz;zpZy&x=|Ak!kjBRa2uQKs+ zv<#XB{%*cLT)Ro3CArbmcwi|`&sVpvjt(aA#A%tYytm4AX|%EnN%#xn8Zx{~3LD+S zm0e8LOM#1RZp>iC-rl|JM#L8LodE;Xj}(dIk6e&brQFMvJ(QO-apbMAe3A&$zqlB< zk7{nKz4fs?ZHUnfu@P*4%MlaP-e~=)7|0yot^YS z!QVVTq5hm3a6Xo3js*TMiqUD)uw1*8g*2bk!#G_I0!+^OH8sxRI z5ljWc!&Nf*YL+oxCDW{B&kC0M@L+~jcB`yyuWD7?Q%(#d8{I@;Q8rQ)yxwhwutR_d$aAj{5qn18YM%g9ZL;rT>O#WZYVJ^-=fT>+J=<-G*Qg zz*{~^%A>ul4dI%kzTm-{jq|POBQ1o#EoSmtqyl{7sf@TEdP&`E6v2h+*F5p@8Gi3p zPi>L@;Ag;T24+c5&G|)P&)a`tT(tq&Fj_9j1%6FmV^U;PrHIXV`k5KEMT@`%Q6}x z>VqkRhhV>;44-}3XIt4ZvGmNnNm%<_otbRky{>HQsmi<%foFbhkeVX8QkZ_7Xhm3a zW75krWaW5mk2aFFKVLUN@y`dwF zzNF5hYf*Cnvk2HgTvLxKr&!`Qtc9t*eMepaub{_E$LLELywMMRW&1mex2;hMKb!jM zPr}TU1;f>?XsEUl=tie%SU#Q;hE>$@VNRn3Yt6jDSbtv7oKLPapg*6W_r*$V1~eh& ztPTVLcY&!9L5&yu9Ws9U|CZ!CFgZZSyg`F}Ki@^-;J%t72l{{pB^&sIt@|c(pU*J; zX{Ra#KFKndUo+PKFXj8%W0$4+Lp&&)@{*4uK?6ta> zA+iLVGJUMWJ^$~1bEh$fG*+p_@};SAa>QF%NooEkc?Qr1frIpLjQ?C&ns*y^i3HpE z2n}P+zcvZ31&kmdZj=9~9$U>0EL|W#idFtW7A{dulBRm)AT*i!nJ+{2SaF?lT@r>z zEB^Jv-}yv@0u2w6GvHZ(M015Av}H97rvo`a;1^hM+pscV|3v zf^&`^X39H_YMmbPEZ@)R2vwSsP1j6(q$}t~;)XuB5yyORvY!}=k@$M>XNH*#O^CSU z&oUe65ecOAf{lnFnZi)jiJnRcWF7wlz$+WTKt3Rgtzo;F_Q0hO%C!k?*ae2ERYihs z3zk1lHXJWS2y7WCe_$uf7y!h$cKv5C6Bop*x-Xt_q;`Y(WsqC`6?w*XLF4@K`McT; zb|W8dsUaNp!sU5Pv5}@|<5PT;ViN^?slbXu?3{$-f_`JBaTiG>p-yR(=NF}3B{^eBmiO7AM3g#bg)j3i!`T?Q_Kh9a77WqOSS?%TTp%+2p!Fg?#E>@(junMk?*!OI_se49}JSA+km$gj}m0_S5d)|AJF z2`3tFnj2W+}`~iQ9AfHAPcGFqz;Lu-33@z2@nF& zoCEG*o{%??>+)sjl9Xf~C7{rz@QI4tBVAp!j)$_ebqFI`jr+s&}b@ZmDZ3hs7+ zz5>{w#Q@gBt7FMTgb7|b#fP0ctQ=p$*)My--qcO#-pJkvG)BaL5okCR8>$Yat$TR` z0jjm^h(SA~_U=H>oO2}8Ou6gHP4UcS zhLM5)(c4CsVpYc+?n5pymnGVXD|}a)%*drSN*PzaQ-g}O#XxHTZzPJzJ4*1-c1~$b z!u~ylbHRX@L1mWxb{1<_h+980y*`xa^@%P(=^G0{4t+Q=BFZUX?@Jc^1`5Zi1OTcq z%HFnOSFay5E*NF~4Kz&b4KlCrT21gPC>ubK>;tA5AlpAcjGyp~0vymnsFfuE1)U9s z(UgRM{W>MC&NTt%Vn7ms2rn!}z?)^NoyUMo<0VcyZ%gJ7l!>MGO@feSfJk_-nZd(YB-KS zaq@muAg^j$FWVMhsQSdcYfsc8b;c&iKimx~k4-90+=6hx zZI~2bC2&dc2R;Z7S}F+vVH%El%)|X-_4S+`6lM>jO+dqj$w#NS%4K_n&0fHE8y3@5{@=EK6{A%X^vy z5r1SuuR9=Yrmmxb?w>}%#)yN#bKsnu%|locyi~d$03S~h0Qn0y2zh0AJK@d&P0!F9`5uh>A;snLm+Dcpx7Q7Zn z+uvaKC4%0K&jX?$6PH~2!4pA5{EYdpZ{T;uVe|qux|4%l0$->+EdqarF2W1bldjCb z4uWc${Gp7l5J&*M1=7p<6dcME0Y6gCCIo`!00hw702A;rFi{e|y6?_JA=^(3&{)l8 zCOaeen~{0uj!Hf%8NK~I(qeg;Q7%@*nlhZ(3#A->>6BdXg82bv;eM3<8ehd11*CEt z=xNo zBp{l&MqTD-;VVfOA>6UvclGie1WkA}+?go-^&@5QJ9auI2XKTZ23ge6NK`^I91e_EeX>SMAzCIlCj4=ee|1gucoGnq>~$ zNE211ZHItt!gdaaG#l1U`moJ(5c5x{9t4YvoGawz%jZ567|G*a6B0=aR^Nm5y1i-8 z1u51ls0}$2r5vC{Eb76Hn;?bctYkB17@Gd!p1`)iw~0`r6(fxfH@{88$QBK9ornq} zgwob$lP{_6A}Su&#GMvFus7E}t9C#1@h|_WHdL=&t+3Y9s7;RIvVi3u`i0?k1biB%a z^~RhPV`yiwg&B!ht1Stg@vT<9@88Q%!IOrVY5{(F#)rXGl0Qdm8EY#=jPJV3yW7tD zhDe3&|H(?`w^f(+Q1W{w279kc#kkqs^@cu|Uz?=|Xx6s?Y$D_xa$Lj=kx# z#`sA7VCwh8@`-hr{Iz;i$s<#Ejf3LW#$DFAdTG>;HRB@jwb+=OqTo8qGz$Fr^gtlF z-uU$sjgWcK`+AAIz5Hxbc~KoApjLB%&d4P|+Fk?~16jXHWywZ}9;@%2Fm{C?!AvcC zcc4A4f{LSiRvTECrj5TWmmoO>zJ;vIEQG!xpqSvDURtkF@O4NFTFOF&g+cM1=u^XH zI#O?tB}D2QMJ&S6RxqEWkiYa!D5}(1@jqgh>7^q4u(`1}WUEXlAh`h82Jl zpgZ&uh?h^L-9CF}Qu9o)Zn{36G2#q!7gl@R^wk_akKtEDCu$2=oD&P9B-%@3{XPni z^@qTx6z+!dK6d zYuh$J6L68@&!#=;Gwhr2{m4RisF&*-3?`f6w*jsLM(F_=CYmM0s82eNTJ0+RH$(cp zC*NaL$2-;)e=Bd#kmI1W;`RzF69-QcN+lR77Hs^NH^UbF^nDy`0QhO?84{7_J1P4U zFW&e20JNJ?g9#h#D-~uA*0N=CzC!_W)Em$$$RPgK9*do76TACy4 z?}#@tQoGNvBp4F<6@JvuCOi_ikDaISMS(a5=9huV&US>9^KKFYzl3JU6o#7r6a4yF za7%{Kj@4!hCr3&}1y#DDOW|`hZXJC%_$z-XI8vSPIAloeSGgqu4^0rfADi-WG$FFayk`yw`XQY^7D2+8R>;%(*`u;%>ne;XP4thpV4B=f(xU2t1 z3!s4w_n2QrXHElqZq!m6k84wLN}9(h!}?HQmjHV1 z$7&iY_fKjJ3wNB{nO@ura_t=@C!PclNg{Wiq)b2oU=m;?H=jf@FRSf>6sY|)95+kAjfL{qMmC%KgH!i~SXld+a$v!<)4(H!@T@@*MXdZb-X4F(3$d^(woa zomDIVLxd2Se(h!cVKM0!o+Zrk$;vczJPwzmfuTrzqU#O*vD%Hqf2*m88?6~_QynG_ zbIL~EqEw>u{En9a+k=#`(L74fHs6A>kI>>WMTN9%MdmdIYh z!F|;37?(2riPdt4kr!qPvMTRLISZ+fgjD-+icMxcX7*cI;Qxy&rYmw4YED0OD$2o_ zNp5PEj_Mx47Dv~sH`y(Bc z2~c($jVR9u-i93lp4TQks*xswCjs>b9Uz)qherVR1d=7*1i3dE&7WkX!s|C&_&L7I zhEUd3FEBkm9KcAeqeG{-uPkN_CujGJO9m=1K>~h!LO2uBvM||NlyE3yp({P7a+H&-<9X5XPWn8IPmz$ zuHGxX`4@UUFWfW&YLH@E$29z183! z1rrLaVE)6O+k8(R?w=?PT@JntW(t-A5ONtsDE^)K*r$;zjDhm3tF*ndbK!h8gUxnT z(Wn!W-6U%2bF1qR`hKbTj_el%Klhk2i7zoj1t2^u&jUounvfHBb4RTrOUGP6QTthg z?2x*}*F+6(kZ6&~gvo8GQH6V6KzpiURD*z2U?pGxoJ_R;Oel{i-wz}P_5lJQ2|W+y zFdj)vx?DqDUiMfk+3;fXJKP09Cy~8&fe#|?qvpA^+u0O)svrplN;DjxMB+n-J zn8ht>Y5ET;rS;0M+>M|h(3Ql6DCC+qu@Bx#cM<^5Qsb)Kq|dO*HGdq6ud6{<@3jF# z3^01=)EzF@rt32!R5vG!n?ab_db?A_IxCWLReLaY;H%c~ zWZv78b-Hh4xTBw(mZRUkKot6a7wBqtei~gV7kh1c6MgGCr#H(MSPcbU)KY-_(dmJm z;2AX*-Mvf%=u>2&Byx*c06D}Ht)&5w^SA?y1q*<*Zn09w7KAWzywcSg+HQPY#P#7R853)R#_LO0D8$2wN_W_uYd-cT2xe?x1v2fjUd2R zMm_3mso0EFrwZNg)vxO+55}BvF`#58>ZC!G5g-AeAdncmC6VV44!{P`0WSK~nkmuL@{64T zh`zpHli6~KU@IHw!JFi{UoZnmRb~{X{nM@YnF{axwSv`mGD;M_Z>2g1JZZrKd!!DZ zo-0I@{P9Ro)Z))f04Z|516hD%@I0^)fDS;bDo5Y|asY}z@F4==hxDNf$O9S2d})Qgup0e#OEWi#K4YD(^Zs z{>Nt(qA5S$pi^&O7f#Tg1ax>$9nk*W0?;z|+v_QRLT((VeeErwKe@B&`|%hFwKrGD zR(_KN9cZ&d9ntst-Nx=2316Z@=DxFO4MqX!Y~Md%Ad}VW+AH;at8l7gE+dK161Tky zz4%OI26cE)2t^LtwEcQD1iwU`(F{!&FN03&q_kVzWP3-DA|I`$@ZWj&Z9gDBXDd{5gO}zgPkS~3_5Te?$iMHCO#5a@9Fv6L zoq z7ufIRWY&aE2Y-Qn0|>Xq0ayXj^YywCcqB-M2x{Lt$+_ss*k%B!6njh{ zWZytng=rbHcZ-C~w#w5qm1sb)dZxq2?BB_!IY+Bxp#(w&HGbR^_*|>iw`M%}&_FgwkV2dyabZj4<^dABG7WSlH zJJq*fwo?8#2K;6ncaycvGv zPn7HV3VF%aJZhtK)ViY%yeUH?Z*3s9M{kur|FHLwGE0P9oQdD9Z%dd4ez2#f`Hx49 z6P%vr&{5{@?kjJH1okcWr8+QtO==&_kTj3r{13b9C*E`oC$?Kng>nT~&=J04==kXp zMhm?K1Dn6==P2yu($!0qG`S(yTxkO^U7)xtUqFlGD^k14C`OrTN@Y-AZA+jqbIM~q{ljWs$}z~}!>6Mmdr*9g zMv-i9l|T@(s7QWREzkYu6-BZ_nXDBOB)-fxN*Zb^L{Hmi2lx?vApz}3E8S%ihHW}P zfHS`ULs1Y!$hHqQq=nh`1sU=V(`a8;g2KB9Daic&ZoCSf`;rN=A%+%+;3`;R&3^;e z9-%|7?Dsr7e?}ib*1qIIOGb?jmzSYwMdLn?NA6Sy&$lsY;?bH25`5VOMe7Cj*SA)Q zBh%dH_~LpaeJm$$Df!(98UuxawRWfhL|}py!PSv!T|xR9>pnaaG`IJeWM790|B$Sw zL?6nMa!ohEzq&`l0za%8HVb%94r4y8`?KQZuez6x^7K7<@qIM%q>8|-QxuL1vtfJP z$rpDQX;OJ1kz&dnbTR3*hA*sp8Wb?tKe=dI%v_!GW=a=1{t5B9JbYVVEJD^2gRZ zId6-ijaelcWfX(Yw>|oPfFqI>;j` zIZ%;-fo>P~s>UDm)!TM({!V&=MVHnjXj(>Hv|KsdBF2Z?0>{*sUs&w+rO3`>TwChw z&uqR^dKME}6T%3UBMDF%jph?b2P6R|800Is@w}^hkuwbeF@#lc=oUkEJo$67?012D zZRNDdH=?E>$UYS~oug%}eJ{4Q=U=aFhmpf|JYmk-R>bmTfSWRHn#&_+-WJzr{$ur$ z33$bUmAYh=m4%HbU5raoz!T)XE`O~yBKxiQB2c7?G{@odh?jw5QnD83?`H;%ubLk9 z3QpGCP`_GD8(adKMk)KW<#jJnex7E`bflRZwwaFD;d1rj7JE<=3{Xdl%e-@X$Wt9mx)x&d^W%!pCQ%(!fjRg0*jGaH2^(jqwWJEfRWlmWf zKAw9d6QSNzJ>O%|j3Q5zzk2sJZH+ezhMx>C{!@X>5bu^vW;y&xsh!x}S(qtxEBRrf z+jl>bt7=rV$A_eFQ7aybozKT0_UK={=uGSfmPSN#J7`$DJN#7re#y-gNr5QZD40{+ zMdRU099i5TOPw0rOYM6*SYtvhDX?PlG~FUPCKDHO<>+oGZ}$c~WVc9aTUAqN+O@#> zy+q1*P86xe_1;aA^^?W3Jv4Kic((i&b|FclTVz4EAR)kbM>CfVzyk9?ze7i$@O>JH zrb0G_#;DU0XqBKUIF_ z|76ROxM6AwPo<>56+D31jPM>TAJg?w6x>k2+S)G^>F@Lf4DD7iqqM{Xd-Bh8M$ZmMH5n_h(2>@?f3T;! z%jsIqeO59rfqh*+OBi*iDd{U9*yV!8?wh~cJ)qxBca%{4D#7ySSk3Yp(98Nv(1Z zf-%v@BmD9;&=J;>O?hBQ3VBRShL!oRW1?kIaf^Q3bXHsT`zx>*y@BQ&JU!@?mc7Hm zD<9b=qh{n1x6r|vHFmN=QvJ$;y(-oBUIuZ$a9u%ZRG?6EN4C?$fV~UW=T=UWBq;{EC5LHLfbJ!iN8WB`8^^0@dxe#cLjeIwZ-=_ zHgGD4;E72>_}N4aGGiMp^%#p3Z8|%v8$Zg&sA~?^P1z|qUEY87@0(ks6pEV%cM-0HE+T2%x-ic;?;tUW@$%< z0%gp@1c7F@2daXT6}|tc8#O5Up*Kd0is|~fAEfM0_OW>X5bYp&gM)xnPG$*wdAS%z z3&vqOvwx$Fd))EJd}BmUU62xaYc$VKCeU}{3@&bsn~9{5#vuB~pQrqg52+EH=8b<) z)#ZZ@W$8AubYJoA+IQ~obr1LtJ>TlgzjGG)bNEiM;E``9_gyC5Y}s2l+~_Rf$0I$q zauT^Vx0m6I`ITPIdp*6$(|sBG#h?*a;-ac_M8hrRi+=cIsWS%qII|K=(w< zbSbj?%*1E?;-my-1^3CmX^ZQCr>+F$+sTA}&8qCpH`+ZuQR!P3~1Fx{QU9oP5X1UH(KrOJ~iq<1urq zF>)y=g?ZM$c-(6-vP}2Z76Z&LeYHl2+m+SrDeDs2UxKpi@ly_IgLlKWajcZI;YdJe z(`NqNw5!_uQoC0Yh)Wvaj?w@s0@42jx_f&8^ue6qNBo2PD!M%c_l#vJf+D#D+R<<0 zHMyj@ISh!LbQUERC?W_6A-CL?cl?;`tAxAzM;3e!`85_rE67$?;^G9}l->k6>vXvA z#spUgO$Y(r`J<|x+3>^zC+Z2(pGcZYtsiySS(v4*vM4r?fduKaO#H&V*hqMQci1rz zV0YZW(sC031+p4s04|TR{pd$FExgFySAk*sK!&jNo8vTyrqu?d<-GsghSpSP{Yb!G zs*ai>$(j!bX&BQF&2W}~nBC~nWt|QR%C7r?^@N?{VE6rq11S(e1+W*i?rKVpLs9-M z%&7+aLLflFj9iZE`c;00%pqCv*Qj+);;*jwJsm!Ku?dkE;RTh`RUuO}SBwe79Gjls zUZOL{DN^N=9_D&Jy&^9ke^Bdo*38p~m)i!WB62PnrT_d{E3MQJ`fau0+{>*fD4N!5 zzwd2dFa|=Vgp?)EEN>L%nGZ#JXe#fwJCKVvl5>(uU1}@l=zHM_O~bRN1?JPOojue6 zhorF)F*LExnvcrV)Uo$zKF(C&P#?Y1oH6|zDtwnZ9jB~ruBLY^Vtyg(nA6xmd+{n@5~UgwG9%Y&BAofFo&(D#pJ6M#}WL7_aLh_ zM?%B)fL6E#kV`^Ez z`aZKx-Z#z)^5cv)Ka!vSspp?@LN5(t_FeBr%!Y2IQ|PelUWUmx@N(ytHOOFq;h;BU z!%F4wiR3JFdYh%e8q$f|V|HJ1p7d+9?yK9^o?6w-&n9nJS+@lBM^=-hKPMJLM>r*y zm5mCstj56vnJcLNh`)ih%snH)`M~AjG#Bef<(28m&gE^j{!j0RyDa$ea#>4Kv zSO<{}E)g5ym^t{c%`#1d3fo!@IVKjd)q{&FCWqeJc_K<0%Sr>*hOo@}YJSNfu8A=~tu zPnX)n=do7i$NK&^nfHE~T}7pAO#$^i+uun9mu zsxr}Lv*6gk#ti z=KbrVqu>`y3|gVY!v}{^HCj$gQt-o1v`xO~s$^>}oOPVjSnHDbv@j^p$hI<%KbHM; zbSuMS`^^|alW3I?k1J`qSHFp8aCZtRs@-%6VrH^0NrcN`07bY0Ncv^QBX;GO9jRoV z05mzz7I^{pK4CX_rC#UOr{2+KMQ|=Iv)8Q{q>zQJWyC>Ny64;yIO#C!%n~%H!S73X zA98o+>3@}hsK;vR?E^%Io-r+Qn1c+(vzmlOdC&-zgm+Dh${FA(5HLkMHd(oxW~PFs zh~TZ-qDBRkk$%^qnxoUxhE%7wQRz!NbmtbPU``sxVCq7j&G2%ub-%gw~_LFPobfvWOm zHhu9fmVFb_?vG~awexqrMpy|Q8AX3u3pRw`+oDW0o4zo)_eK?|lT7_YYdq17#wCkY zArr`#lgIz0Zr)4jCU4lnY*6uAL4DObV^`z7{Aj&-h2jTy9TCl0>EPPH?TjGjV+&6w z5gym~q%4M9=j1=4zH9YeTE|@>W0$dcY;^n&TkjlRiL-2hPBJkjwmGqFdt%!*cWiTF z8xz~MlSwkMZQF0pdFQ@+-}#+C^L@!q@9wI#R#jJ3({qv>nm*mfZnlZOQLnYyYkeSv z`A8qVwW`iAIxU445U(ZkE8Tq61$~2hpt&}QkS!fRheMsxVnzxXC^p_(GlLDZHU|r# z;nr4|UwljV;k?JJ%L|_+g=CTkHZarup%#(y;9-r3M;-u<7MQ~H8h~3?(RF2Y?cXFG z`~iomdQpZ5!))|{%RW=bPQM=V0^0v+qrFYN*{)R85 KxTx}b(NK!&c29%OG|^k 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 z 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 zⓈ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

XehC{w_zRw}ZOcs=IVK7;$z2pS$8 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 ?}k^dosScs+p^ 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 KxTx}b(NK!&c29%OG|^k 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 z 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 zⓈ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