async def METHOD_NAME():
    ds = cls(*args, **kwargs)
    ds = await sync_to_async(ds.initialize, executor=executor.ensure_sync())
    workers = await executor.get_available_workers()
    scheduler = Scheduler(workers)
    # FIXME the partitioning should be dynamic
    # since the number of eligible workers may depend on
    # the set of UDFs that may or may not run on CPU or GPU
    # This is a workaround with a "best guess compromise"
    ds.set_num_cores(scheduler.effective_worker_count())
    await executor.run_function(ds.check_valid)
    return ds