import os


DEFAULT_WORKER_FRACTION = 0.5


def resolve_worker_count(requested, workload_size, worker_fraction=DEFAULT_WORKER_FRACTION,
                         cpu_count=None):
    if workload_size <= 0:
        return 1
    if requested < 0:
        raise ValueError("worker count must be >= 0")
    if requested > 0:
        return max(1, min(int(requested), int(workload_size)))
    if worker_fraction <= 0:
        raise ValueError("worker fraction must be > 0")

    cpus = cpu_count if cpu_count is not None else os.cpu_count()
    cpus = max(1, int(cpus or 1))
    auto = max(1, int(cpus * worker_fraction))
    return max(1, min(auto, int(workload_size)))
