# Buggy code
def init(
    token: str = "",
    cloud=False,
    n_workers=1,
    memory_limit=None,
    processes=False,
    threads_per_worker=1,
    distributed=True,
):
    """Initializes cluster either local or on the cloud

    Parameters
    ----------
    token: str
        token provided by snark
    cache: float
        Amount on local memory to cache locally, default 2e9 (2GB)
    cloud: bool
        Should be run locally or on the cloud
    n_workers: int
        number of concurrent workers, default to1
    threads_per_worker: int
        Number of threads per each worker
    """
    print("initialized")
    global _client
    if _client is not None:
        _client.close()

    if cloud:
        raise NotImplementedError
    elif not distributed:
        client = None
        dask.config.set(scheduler="threading")
        hub.config.DISTRIBUTED = False
    else:
        n_workers = n_workers if n_workers is not None else psutil.cpu_count()
        memory_limit = (
            memory_limit
            if memory_limit is not None
            else psutil.virtual_memory().available
        )

        local_directory = os.path.join(
            os.path.expanduser("~"),
            ".activeloop",
            "tmp",
        )
        if not os.path.exists(local_directory):
            os.makedirs(local_directory)
        client = Client(
            n_workers=n_workers,
            processes=processes,
            memory_limit=memory_limit,
            threads_per_worker=threads_per_worker,
            local_directory=local_directory,
        )
        config.DISTRIBUTED = True

    _client = client
    return client


# Traceback (ValueError)
Traceback (most recent call last):
File "hub/compute/tests/test_transform.py", line 284, in <module>
test_threaded()
File "hub/compute/tests/test_transform.py", line 88, in test_threaded
create_classification_dataset(ds_init).store(
File "/Users/davitb/Git/Hub/hub/compute/transform.py", line 246, in store
ds = self.upload(results, url=url, token=token, progressbar=progressbar)
File "/Users/davitb/Git/Hub/hub/compute/transform.py", line 177, in upload
list(self.map(upload_chunk, index_batched_values))
File "/Users/davitb/Library/Python/3.8/lib/python/site-packages/pathos/threading.py", line 134, in map
return _pool.map(star(f), zip(*args)) # chunksize
File "/Users/davitb/Library/Python/3.8/lib/python/site-packages/multiprocess/pool.py", line 364, in map
return self._map_async(func, iterable, mapstar, chunksize).get()
File "/Users/davitb/Library/Python/3.8/lib/python/site-packages/multiprocess/pool.py", line 771, in get
raise self._value
File "/Users/davitb/Library/Python/3.8/lib/python/site-packages/multiprocess/pool.py", line 125, in worker
result = (True, func(*args, **kwds))
File "/Users/davitb/Library/Python/3.8/lib/python/site-packages/multiprocess/pool.py", line 48, in mapstar
return list(map(*args))
File "/Users/davitb/Library/Python/3.8/lib/python/site-packages/pathos/helpers/mp_helper.py", line 15, in <lambda>
func = lambda args: f(*args)
File "/Users/davitb/Git/Hub/hub/compute/transform.py", line 167, in upload_chunk
ds[key, i * length + k] = el
File "/Users/davitb/Git/Hub/hub/api/dataset.py", line 316, in __setitem__
self._tensors[subpath][slice_list] = value
File "/Users/davitb/Git/Hub/hub/store/dynamic_tensor.py", line 207, in __setitem__
self._dynamic_tensor[slice_[0]]
File "/usr/local/lib/python3.8/site-packages/zarr/core.py", line 571, in __getitem__
return self.get_basic_selection(selection, fields=fields)
File "/usr/local/lib/python3.8/site-packages/zarr/core.py", line 696, in get_basic_selection
return self._get_basic_selection_nd(selection=selection, out=out,
File "/usr/local/lib/python3.8/site-packages/zarr/core.py", line 739, in _get_basic_selection_nd
return self._get_selection(indexer=indexer, out=out, fields=fields)
File "/usr/local/lib/python3.8/site-packages/zarr/core.py", line 1028, in _get_selection
self._chunk_getitem(chunk_coords, chunk_selection, out, out_selection,
File "/usr/local/lib/python3.8/site-packages/zarr/core.py", line 1649, in _chunk_getitem
self._process_chunk(out, cdata, chunk_selection, drop_axes,
File "/usr/local/lib/python3.8/site-packages/zarr/core.py", line 1592, in _process_chunk
chunk = self._decode_chunk(cdata)
File "/usr/local/lib/python3.8/site-packages/zarr/core.py", line 1802, in _decode_chunk
chunk = chunk.reshape(self._chunks, order=self._order)
ValueError: cannot reshape array of size 0 into shape (50,3)

# Fixed code
def init(
    token: str = "",
    cloud=False,
    n_workers=1,
    memory_limit=None,
    processes=False,
    threads_per_worker=1,
    distributed=True,
):
    """Initializes cluster either local or on the cloud

    Parameters
    ----------
    token: str
        token provided by snark
    cache: float
        Amount on local memory to cache locally, default 2e9 (2GB)
    cloud: bool
        Should be run locally or on the cloud
    n_workers: int
        number of concurrent workers, default to1
    threads_per_worker: int
        Number of threads per each worker
    """
    print("initialized")
    if "dask" not in sys.modules:
        raise ModuleNotInstalledException("dask")
    else:
        import dask
        from dask.distributed import Client

        global dask
        global Client

    global _client
    if _client is not None:
        _client.close()

    if cloud:
        raise NotImplementedError
    elif not distributed:
        client = None
        dask.config.set(scheduler="threading")
        hub.config.DISTRIBUTED = False
    else:
        n_workers = n_workers if n_workers is not None else psutil.cpu_count()
        memory_limit = (
            memory_limit
            if memory_limit is not None
            else psutil.virtual_memory().available
        )

        local_directory = os.path.join(
            os.path.expanduser("~"),
            ".activeloop",
            "tmp",
        )
        if not os.path.exists(local_directory):
            os.makedirs(local_directory)
        client = Client(
            n_workers=n_workers,
            processes=processes,
            memory_limit=memory_limit,
            threads_per_worker=threads_per_worker,
            local_directory=local_directory,
        )
        config.DISTRIBUTED = True

    _client = client
    return client