pub fn locate() -> Self {
        // There might be several cases:
        // - We're running from the prover workspace.
        // - We're running from the core workspace.
        // - We're running the binary from the docker.
        let data_dir_path = match Workspace::locate() {
            Workspace::Root => {
                // We're running a binary, likely in a docker.
                // Keys can be in one of a few paths.
                // We want to be very conservative here, and checking
                // more locations than we likely need to not accidentally
                // break something.
                let paths = ["./prover/data", "./data", "/prover/data", "/data"];
                paths.iter().map(PathBuf::from).find(|path| path.exists()).unwrap_or_else(|| {
                    panic!("Failed to locate the prover data directory. Locations checked: {paths:?}")
                })
            }
            ws => {
                // If we're running in the Cargo workspace, the data *must* be in `prover/data`.
                ws.prover().join("data")
            }
        };
        let base_path = data_dir_path.join("keys");

        #[cfg(feature = "gpu")]
        let setup_data_cache_proof_compressor = Arc::new(CompressorSetupData::new());

        Self {
            basedir: base_path.clone(),
            setup_data_path: base_path,
            #[cfg(feature = "gpu")]
            setup_data_cache_proof_compressor,
        }
    }
Uses automatic detection of the base path, and assumes that setup keys
are stored in the same directory.

The "base" path is considered to be equivalent to the `prover/data/keys`
directory in the repository.
prover/crates/lib/keystore/src/keystore.rs