Inzynierka/Lib/site-packages/scipy/datasets/_utils.py
2023-06-02 12:51:02 +02:00

82 lines
2.8 KiB
Python

import os
import shutil
from ._registry import method_files_map
try:
import appdirs
except ImportError:
appdirs = None
def _clear_cache(datasets, cache_dir=None, method_map=None):
if method_map is None:
# Use SciPy Datasets method map
method_map = method_files_map
if cache_dir is None:
# Use default cache_dir path
if appdirs is None:
# appdirs is pooch dependency
raise ImportError("Missing optional dependency 'pooch' required "
"for scipy.datasets module. Please use pip or "
"conda to install 'pooch'.")
cache_dir = appdirs.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)):
# single dataset method passed should be converted to list
datasets = [datasets, ]
for dataset in datasets:
assert callable(dataset)
dataset_name = dataset.__name__ # Name of the dataset method
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)