| import os |
| import shutil |
| from ._registry import method_files_map |
|
|
| try: |
| import platformdirs |
| except ImportError: |
| platformdirs = None |
|
|
|
|
| def _clear_cache(datasets, cache_dir=None, method_map=None): |
| if method_map is None: |
| |
| method_map = method_files_map |
| if cache_dir is None: |
| |
| if platformdirs is None: |
| |
| raise ImportError("Missing optional dependency 'pooch' required " |
| "for scipy.datasets module. Please use pip or " |
| "conda to install 'pooch'.") |
| cache_dir = platformdirs.user_cache_dir("scipy-data") |
|
|
| if not os.path.exists(cache_dir): |
| print(f"Cache Directory {cache_dir} doesn't exist. Nothing to clear.") |
| return |
|
|
| if datasets is None: |
| print(f"Cleaning the cache directory {cache_dir}!") |
| shutil.rmtree(cache_dir) |
| else: |
| if not isinstance(datasets, (list, tuple)): |
| |
| datasets = [datasets, ] |
| for dataset in datasets: |
| assert callable(dataset) |
| dataset_name = dataset.__name__ |
| if dataset_name not in method_map: |
| raise ValueError(f"Dataset method {dataset_name} doesn't " |
| "exist. Please check if the passed dataset " |
| "is a subset of the following dataset " |
| f"methods: {list(method_map.keys())}") |
|
|
| data_files = method_map[dataset_name] |
| data_filepaths = [os.path.join(cache_dir, file) |
| for file in data_files] |
| for data_filepath in data_filepaths: |
| if os.path.exists(data_filepath): |
| print("Cleaning the file " |
| f"{os.path.split(data_filepath)[1]} " |
| f"for dataset {dataset_name}") |
| os.remove(data_filepath) |
| else: |
| print(f"Path {data_filepath} doesn't exist. " |
| "Nothing to clear.") |
|
|
|
|
| def clear_cache(datasets=None): |
| """ |
| Cleans the scipy datasets cache directory. |
| |
| If a scipy.datasets method or a list/tuple of the same is |
| provided, then clear_cache removes all the data files |
| associated to the passed dataset method callable(s). |
| |
| By default, it removes all the cached data files. |
| |
| Parameters |
| ---------- |
| datasets : callable or list/tuple of callable or None |
| |
| Examples |
| -------- |
| >>> from scipy import datasets |
| >>> ascent_array = datasets.ascent() |
| >>> ascent_array.shape |
| (512, 512) |
| >>> datasets.clear_cache([datasets.ascent]) |
| Cleaning the file ascent.dat for dataset ascent |
| """ |
| _clear_cache(datasets) |
|
|