docs: async def set_slave_neighbors(self):
          '''Set neighbor environments for all the slave environments. Assumes
          that :attr:`neighbors` are set for this multi-environment.
          '''
          for i, elem in enumerate(self._slave_origins):
              o, addr = elem
              r_slave = await self.env.connect(addr)
              nxy = _get_neighbor_xy('N', o)
              exy = _get_neighbor_xy('E', (o[0] + self.gs[0] - 1, o[1]))
              sxy = _get_neighbor_xy('S', (o[0], o[1] + self.gs[1] - 1))
              wxy = _get_neighbor_xy('W', o)
              if i == 0 and self.neighbors['W'] is not None:
                  m_addr = self.neighbors['W']
                  r_manager = await self.env.connect(m_addr)
                  n_addr = await r_manager.get_xy_environment(wxy)
                  await r_slave.set_grid_neighbor('W', n_addr)
              elif i == self._n_slaves - 1 and self.neighbors['E'] is not None:
                  m_addr = self.neighbors['E']
                  r_manager = await self.env.connect(m_addr)
                  n_addr = await r_manager.get_xy_environment(exy)
                  await r_slave.set_grid_neighbor('E', n_addr)
              else:
                  w_addr = self.get_xy_environment(wxy)
                  e_addr = self.get_xy_environment(exy)
                  await r_slave.set_grid_neighbor('W', w_addr)
                  await r_slave.set_grid_neighbor('E', e_addr)
  
              if self.neighbors['N'] is not None:
                  m_addr = self.neighbors['N']
                  r_manager = await self.env.connect(m_addr)
                  n_addr = await r_manager.get_xy_environment(nxy)
                  await r_slave.set_grid_neighbor('N', n_addr)
  
              if self.neighbors['S'] is not None:
                  m_addr = self.neighbors['S']
                  r_manager = await self.env.connect(m_addr)
                  n_addr = await r_manager.get_xy_environment(sxy)
                  await r_slave.set_grid_neighbor('S', n_addr)