# Copyright 2023-2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

DISTUTILS_USE_PEP517=setuptools
PYTHON_COMPAT=( python3_{10..12} )
DISTUTILS_SINGLE_IMPL=1
inherit distutils-r1

DESCRIPTION="Access and share datasets for Audio, Computer Vision, and NLP tasks"
HOMEPAGE="https://pypi.org/project/datasets/"
SRC_URI="https://github.com/huggingface/${PN}/archive/refs/tags/${PV}.tar.gz
	-> ${P}.gh.tar.gz"

LICENSE="Apache-2.0"
SLOT="0"
KEYWORDS="~amd64"

IUSE="test"

RDEPEND="
	${PYTHON_DEPS}
	sci-libs/pytorch[${PYTHON_SINGLE_USEDEP}]
	sci-libs/caffe2[${PYTHON_SINGLE_USEDEP},numpy]
	$(python_gen_cond_dep '
		dev-python/absl-py[${PYTHON_USEDEP}]
		dev-python/aiohttp[${PYTHON_USEDEP}]
		dev-python/dill[${PYTHON_USEDEP}]
		dev-python/filelock[${PYTHON_USEDEP}]
		dev-python/fsspec[${PYTHON_USEDEP}]
		dev-python/multiprocess[${PYTHON_USEDEP}]
		dev-python/numpy[${PYTHON_USEDEP}]
		dev-python/packaging[${PYTHON_USEDEP}]
		dev-python/pandas[${PYTHON_USEDEP}]
		dev-python/pyarrow[${PYTHON_USEDEP},parquet,snappy]
		dev-python/pyyaml[${PYTHON_USEDEP}]
		dev-python/requests[${PYTHON_USEDEP}]
		dev-python/scikit-learn[${PYTHON_USEDEP}]
		dev-python/tqdm[${PYTHON_USEDEP}]
		dev-python/xxhash[${PYTHON_USEDEP}]
		dev-python/zstandard[${PYTHON_USEDEP}]
		sci-libs/huggingface_hub[${PYTHON_USEDEP}]
	')
"
DEPEND="${RDEPEND}"
BDEPEND="test? (
	$(python_gen_cond_dep '
		dev-python/absl-py[${PYTHON_USEDEP}]
		dev-python/pytest-datadir[${PYTHON_USEDEP}]
		dev-python/decorator[${PYTHON_USEDEP}]
		dev-python/sqlalchemy[${PYTHON_USEDEP}]
		sci-libs/jiwer[${PYTHON_USEDEP}]
		sci-libs/seqeval[${PYTHON_USEDEP}]
	')
)"

PATCHES=(
	"${FILESDIR}"/${PN}-2.19.2-tests.patch
)

distutils_enable_tests pytest

src_prepare() {
	distutils-r1_src_prepare
	sed -i -e \
		"/pyarrow_hotfix/d" \
		src/datasets/features/features.py || die
}

src_test() {
	local EPYTEST_IGNORE=(
		tests/test_upstream_hub.py
		tests/packaged_modules/test_spark.py
		tests/test_load.py
	)

	local EPYTEST_DESELECT=(
		"tests/test_arrow_dataset.py::BaseDatasetTest::test_filter_caching_on_disk"
		"tests/test_arrow_dataset.py::BaseDatasetTest::test_filter_in_memory"
		"tests/test_arrow_dataset.py::BaseDatasetTest::test_filter_on_disk"
		"tests/test_arrow_dataset.py::BaseDatasetTest::test_flatten_indices_in_memory"
		"tests/test_arrow_dataset.py::BaseDatasetTest::test_flatten_indices_on_disk"
		"tests/test_arrow_dataset.py::BaseDatasetTest::test_map_batched_in_memory"
		"tests/test_arrow_dataset.py::BaseDatasetTest::test_map_batched_on_disk"
		"tests/test_arrow_dataset.py::BaseDatasetTest::test_map_caching_on_disk"
		"tests/test_arrow_dataset.py::BaseDatasetTest::test_map_in_memory"
		"tests/test_arrow_dataset.py::BaseDatasetTest::test_map_on_disk"
		"tests/test_arrow_dataset.py::BaseDatasetTest::test_map_remove_columns_in_memory"
		"tests/test_arrow_dataset.py::BaseDatasetTest::test_map_remove_columns_on_disk"
		"tests/test_arrow_dataset.py::BaseDatasetTest::test_select_in_memory"
		"tests/test_arrow_dataset.py::BaseDatasetTest::test_select_on_disk"
		"tests/test_arrow_dataset.py::BaseDatasetTest::test_set_format_numpy_multiple_columns_in_memory"
		"tests/test_arrow_dataset.py::BaseDatasetTest::test_set_format_numpy_multiple_columns_on_disk"
		"tests/test_arrow_dataset.py::BaseDatasetTest::test_set_format_torch_in_memory"
		"tests/test_arrow_dataset.py::BaseDatasetTest::test_set_format_torch_on_disk"
		"tests/test_arrow_dataset.py::BaseDatasetTest::test_train_test_split_in_memory"
		"tests/test_arrow_dataset.py::BaseDatasetTest::test_train_test_split_on_disk"
		"tests/test_arrow_dataset.py::TaskTemplatesTest::test_task_automatic_speech_recognition"
		"tests/test_arrow_dataset.py::StratifiedTest::test_train_test_split_startify"
		"tests/test_arrow_dataset.py::test_dataset_format_with_unformatted_image"
		"tests/test_arrow_dataset.py::test_map_cases"
		"tests/test_dataset_dict.py::DatasetDictTest::test_set_format_numpy"
		"tests/test_dataset_dict.py::DatasetDictTest::test_set_format_torch"
		"tests/test_distributed.py::test_torch_distributed_run"
		"tests/test_distributed.py::test_torch_distributed_run_streaming_with_num_workers"
		"tests/test_file_utils.py::TestxPath::test_xpath_glob"
		"tests/test_file_utils.py::TestxPath::test_xpath_rglob"
		"tests/test_file_utils.py::test_xopen_remote"
		"tests/test_file_utils.py::test_xexists_private"
		"tests/test_file_utils.py::test_xlistdir_private"
		"tests/test_file_utils.py::test_xisdir_private"
		"tests/test_file_utils.py::test_xisfile_private"
		"tests/test_file_utils.py::test_xgetsize_private"
		"tests/test_file_utils.py::test_xglob_private"
		"tests/test_file_utils.py::test_xwalk_private"
		"tests/test_fingerprint.py::TokenizersHashTest::test_hash_regex"
		"tests/test_fingerprint.py::TokenizersHashTest::test_hash_tokenizer"
		"tests/test_fingerprint.py::TokenizersHashTest::test_hash_tokenizer_with_cache"
		"tests/test_fingerprint.py::RecurseHashTest::test_hash_ignores_line_definition_of_function"
		"tests/test_fingerprint.py::RecurseHashTest::test_hash_ipython_function"
		"tests/test_fingerprint.py::HashingTest::test_hash_torch_compiled_module"
		"tests/test_fingerprint.py::HashingTest::test_hash_torch_generator"
		"tests/test_fingerprint.py::HashingTest::test_hash_torch_tensor"
		"tests/test_fingerprint.py::HashingTest::test_set_doesnt_depend_on_order"
		"tests/test_fingerprint.py::HashingTest::test_set_stable"
		"tests/test_fingerprint.py::test_move_script_doesnt_change_hash"
		"tests/test_formatting.py::ArrowExtractorTest::test_numpy_extractor"
		"tests/test_formatting.py::ArrowExtractorTest::test_numpy_extractor_nested"
		"tests/test_formatting.py::ArrowExtractorTest::test_numpy_extractor_temporal"
		"tests/test_formatting.py::FormatterTest::test_numpy_formatter"
		"tests/test_formatting.py::FormatterTest::test_numpy_formatter_image"
		"tests/test_formatting.py::FormatterTest::test_numpy_formatter_np_array_kwargs"
		"tests/test_formatting.py::FormatterTest::test_torch_formatter"
		"tests/test_formatting.py::FormatterTest::test_torch_formatter_image"
		"tests/test_formatting.py::FormatterTest::test_torch_formatter_torch_tensor_kwargs"
		"tests/test_formatting.py::test_torch_formatter_sets_default_dtypes"
		"tests/test_inspect.py::test_get_dataset_config_names[hf-internal-testing/librispeech_asr_dummy-expected4]"
		"tests/test_inspect.py::test_get_dataset_default_config_name[hf-internal-testing/librispeech_asr_dummy-None]"
		"tests/test_inspect.py::test_inspect_dataset"
		"tests/test_inspect.py::test_inspect_metric"
		"tests/test_inspect.py::test_get_dataset_config_info"
		"tests/test_inspect.py::test_get_dataset_config_info_error[paws-None-ValueError]"
		"tests/test_inspect.py::test_get_dataset_config_names"
		"tests/test_inspect.py::test_get_dataset_default_config_name"
		"tests/test_inspect.py::test_get_dataset_info"
		"tests/test_inspect.py::test_get_dataset_split_names"
		"tests/test_inspect.py::test_get_dataset_config_info_private"
		"tests/test_metric_common.py::LocalMetricTest::test_load_metric_bertscore"
		"tests/test_metric_common.py::LocalMetricTest::test_load_metric_bleurt"
		"tests/test_metric_common.py::LocalMetricTest::test_load_metric_chrf"
		"tests/test_metric_common.py::LocalMetricTest::test_load_metric_code_eval"
		"tests/test_metric_common.py::LocalMetricTest::test_load_metric_competition_math"
		"tests/test_metric_common.py::LocalMetricTest::test_load_metric_coval"
		"tests/test_metric_common.py::LocalMetricTest::test_load_metric_cuad"
		"tests/test_metric_common.py::LocalMetricTest::test_load_metric_frugalscore"
		"tests/test_metric_common.py::LocalMetricTest::test_load_metric_glue"
		"tests/test_metric_common.py::LocalMetricTest::test_load_metric_google_bleu"
		"tests/test_metric_common.py::LocalMetricTest::test_load_metric_indic_glue"
		"tests/test_metric_common.py::LocalMetricTest::test_load_metric_mae"
		"tests/test_metric_common.py::LocalMetricTest::test_load_metric_mauve"
		"tests/test_metric_common.py::LocalMetricTest::test_load_metric_mean_iou"
		"tests/test_metric_common.py::LocalMetricTest::test_load_metric_meteor"
		"tests/test_metric_common.py::LocalMetricTest::test_load_metric_mse"
		"tests/test_metric_common.py::LocalMetricTest::test_load_metric_precision"
		"tests/test_metric_common.py::LocalMetricTest::test_load_metric_roc_auc"
		"tests/test_metric_common.py::LocalMetricTest::test_load_metric_rouge"
		"tests/test_metric_common.py::LocalMetricTest::test_load_metric_sacrebleu"
		"tests/test_metric_common.py::LocalMetricTest::test_load_metric_sari"
		"tests/test_metric_common.py::LocalMetricTest::test_load_metric_spearmanr"
		"tests/test_metric_common.py::LocalMetricTest::test_load_metric_super_glue"
		"tests/test_metric_common.py::LocalMetricTest::test_load_metric_ter"
		"tests/test_metric_common.py::LocalMetricTest::test_load_metric_wiki_split"
		"tests/test_metric_common.py::LocalMetricTest::test_load_metric_xnli"
		"tests/test_metric_common.py::LocalMetricTest::test_load_metric_xtreme_s"
		"tests/test_metric_common.py::LocalMetricTest::test_load_metric_bleu"
		"tests/commands/test_test.py::test_test_command"
		"tests/features/test_array_xd.py::ExtensionTypeCompatibilityTest::test_array2d_nonspecific_shape"
		"tests/features/test_array_xd.py::ExtensionTypeCompatibilityTest::test_extension_indexing"
		"tests/features/test_array_xd.py::ExtensionTypeCompatibilityTest::test_multiple_extensions_same_row"
		"tests/features/test_array_xd.py::ArrayXDTest::test_from_dict_2d"
		"tests/features/test_array_xd.py::ArrayXDTest::test_from_dict_3d"
		"tests/features/test_array_xd.py::ArrayXDTest::test_from_dict_4d"
		"tests/features/test_array_xd.py::ArrayXDTest::test_from_dict_5d"
		"tests/features/test_array_xd.py::ArrayXDTest::test_write_2d"
		"tests/features/test_array_xd.py::ArrayXDTest::test_write_3d"
		"tests/features/test_array_xd.py::ArrayXDTest::test_write_4d"
		"tests/features/test_array_xd.py::ArrayXDTest::test_write_5d"
		"tests/features/test_array_xd.py::ArrayXDTest::test_write_batch_2d"
		"tests/features/test_array_xd.py::ArrayXDTest::test_write_batch_3d"
		"tests/features/test_array_xd.py::ArrayXDTest::test_write_batch_4d"
		"tests/features/test_array_xd.py::ArrayXDTest::test_write_batch_5d"
		"tests/features/test_array_xd.py::test_array_xd_numpy_arrow_extractor"
		"tests/features/test_array_xd.py::test_array_xd_with_none"
		"tests/features/test_array_xd.py::test_dataset_map"
		"tests/features/test_audio.py::test_audio_feature_encode_example"
		"tests/features/test_audio.py::test_audio_feature_encode_example_pcm"
		"tests/features/test_audio.py::test_audio_decode_example_pcm"
		"tests/features/test_audio.py::test_dataset_cast_to_audio_features"
		"tests/features/test_audio.py::test_dataset_concatenate_audio_features"
		"tests/features/test_audio.py::test_dataset_concatenate_nested_audio_features"
		"tests/features/test_audio.py::test_dataset_with_audio_feature_undecoded"
		"tests/features/test_audio.py::test_formatted_dataset_with_audio_feature_undecoded"
		"tests/features/test_audio.py::test_dataset_with_audio_feature_map_undecoded"
		"tests/features/test_image.py::test_formatted_dataset_with_image_feature_map"
		"tests/features/test_image.py::test_formatted_dataset_with_image_feature"
		"tests/features/test_image.py::test_formatted_dataset_with_image_feature_undecoded"
		"tests/packaged_modules/test_cache.py::test_cache_multi_configs"
		"tests/packaged_modules/test_cache.py::test_cache_single_config"
		"tests/packaged_modules/test_cache.py::test_cache_capital_letters"
		"tests/packaged_modules/test_folder_based_builder.py::test_data_files_with_different_levels_no_metadata"
		"tests/packaged_modules/test_folder_based_builder.py::test_data_files_with_one_label_no_metadata"
		"tests/test_data_files.py::test_DataFilesList_from_patterns_locally_with_extra_files"
		"tests/test_data_files.py::test_DataFilesDict_from_patterns_locally_or_remote_hashing"
		"tests/test_hf_gcp.py::TestDatasetOnHfGcp::test_dataset_info_available_natural_questions/default@19ba7767b174ad046a84f46af056517a3910ee57"
		"tests/test_hf_gcp.py::TestDatasetOnHfGcp::test_dataset_info_available_wiki40b/en@7b21a2e64b90323b2d3d1b81aa349bb4bc76d9bf"
		"tests/test_hf_gcp.py::TestDatasetOnHfGcp::test_dataset_info_available_wiki_dpr/psgs_w100.multiset.no_index@b24a417d802a583f8922946c1c75210290e93108"
		"tests/test_hf_gcp.py::TestDatasetOnHfGcp::test_dataset_info_available_wiki_dpr/psgs_w100.nq.compressed@b24a417d802a583f8922946c1c75210290e93108"
		"tests/test_hf_gcp.py::TestDatasetOnHfGcp::test_dataset_info_available_wiki_dpr/psgs_w100.nq.no_index@b24a417d802a583f8922946c1c75210290e93108"
		"tests/test_hf_gcp.py::TestDatasetOnHfGcp::test_dataset_info_available_wikipedia/20220301.de@4d013bdd32c475c8536aae00a56efc774f061649"
		"tests/test_hf_gcp.py::TestDatasetOnHfGcp::test_dataset_info_available_wikipedia/20220301.en@4d013bdd32c475c8536aae00a56efc774f061649"
		"tests/test_hf_gcp.py::TestDatasetOnHfGcp::test_dataset_info_available_wikipedia/20220301.fr@4d013bdd32c475c8536aae00a56efc774f061649"
		"tests/test_hf_gcp.py::TestDatasetOnHfGcp::test_dataset_info_available_wikipedia/20220301.frr@4d013bdd32c475c8536aae00a56efc774f061649"
		"tests/test_hf_gcp.py::TestDatasetOnHfGcp::test_dataset_info_available_wikipedia/20220301.it@4d013bdd32c475c8536aae00a56efc774f061649"
		"tests/test_hf_gcp.py::TestDatasetOnHfGcp::test_dataset_info_available_wikipedia/20220301.simple@4d013bdd32c475c8536aae00a56efc774f061649"
		"tests/test_hf_gcp.py::test_as_dataset_from_hf_gcs"
		"tests/test_hf_gcp.py::test_as_streaming_dataset_from_hf_gcs"
		"tests/test_iterable_dataset.py::test_iterable_dataset_from_hub_torch_dataloader_parallel"
		"tests/test_offline_util.py::test_offline_with_timeout"
		"tests/io/test_parquet.py::test_parquet_read_geoparquet"
		tests/test_exceptions.py::test_error_deprecated
		tests/test_hub.py::test_convert_to_parquet
	)
	distutils-r1_src_test
}