






"""simple docstring"""





from __future__ import annotations

from collections.abc import Callable
from typing import Generic, TypeVar

UpperCamelCase					=     TypeVar("""T""")
UpperCamelCase					=     TypeVar("""U""")







class 						_a  (		Generic[T, U]       ):





   '''simple docstring'''






   def __init__(       self					, UpperCAmelCase_					, UpperCAmelCase_)			->   Union[str, Any]:




          '''simple docstring'''




          lowercase__:							Any         =     key
          lowercase__:							List[Any]         =     val
          lowercase__:							int         =     0
          lowercase__:							DoubleLinkedListNode[T, U] | None         =     None
          lowercase__:							DoubleLinkedListNode[T, U] | None         =     None





   def __repr__(       self)			->   str:




          '''simple docstring'''




          return "Node: key: {}, val: {}, freq: {}, has next: {}, has prev: {}".format(
              self.key					, self.val					, self.freq					, self.next is not None					, self.prev is not None)







class 						_a  (		Generic[T, U]       ):





   '''simple docstring'''






   def __init__(       self)			->   None:




          '''simple docstring'''




          lowercase__:							DoubleLinkedListNode[T, U]         =     DoubleLinkedListNode(UpperCAmelCase_					, UpperCAmelCase_)
          lowercase__:							DoubleLinkedListNode[T, U]         =     DoubleLinkedListNode(UpperCAmelCase_					, UpperCAmelCase_)
          lowercase__    ,      lowercase__:							Union[str, Any]         =     self.rear, self.head





   def __repr__(       self)			->   str:




          '''simple docstring'''




          lowercase__:							Tuple         =     ["DoubleLinkedList"]
          lowercase__:							Union[str, Any]         =     self.head
          while node.next is not None:
                 rep.append(str(UpperCAmelCase_))
                 lowercase__:							List[str]         =     node.next
          rep.append(str(self.rear))
          return ",\n    ".join(UpperCAmelCase_)





   def __lowercase							(       self					, UpperCAmelCase_)			->   None:




          '''simple docstring'''




          lowercase__:							Union[str, Any]         =     self.rear.prev

          # All nodes other than self.head are guaranteed to have non-None previous
          assert previous is not None

          lowercase__:							List[str]         =     node
          lowercase__:							Union[str, Any]         =     previous
          lowercase__:							Tuple         =     node
          lowercase__:							Any         =     self.rear
          node.freq += 1
          self._position_node(UpperCAmelCase_)





   def __lowercase							(       self					, UpperCAmelCase_)			->   None:




          '''simple docstring'''




          while node.prev is not None and node.prev.freq > node.freq:
                 # swap node with previous node
                 lowercase__:							Any         =     node.prev

                 lowercase__:							List[str]         =     previous_node.prev
                 lowercase__:							Union[str, Any]         =     node.prev
                 lowercase__:							Dict         =     previous_node
                 lowercase__:							Any         =     node





   def __lowercase							(       self					, UpperCAmelCase_)			->   DoubleLinkedListNode[T, U] | None:




          '''simple docstring'''




          if node.prev is None or node.next is None:
                 return None

          lowercase__:							int         =     node.next
          lowercase__:							List[str]         =     node.prev
          lowercase__:							List[Any]         =     None
          lowercase__:							Union[str, Any]         =     None
          return node







class 						_a  (		Generic[T, U]       ):





   '''simple docstring'''






   UpperCamelCase__     	=							{}





   def __init__(       self					, UpperCAmelCase_)			->   List[str]:




          '''simple docstring'''




          lowercase__:							DoubleLinkedList[T, U]         =     DoubleLinkedList()
          lowercase__:							List[Any]         =     capacity
          lowercase__:							int         =     0
          lowercase__:							Any         =     0
          lowercase__:							int         =     0
          lowercase__:							dict[T, DoubleLinkedListNode[T, U]]         =     {}





   def __repr__(       self)			->   str:




          '''simple docstring'''




          return (
              F"""CacheInfo(hits={self.hits}, misses={self.miss}, """
              F"""capacity={self.capacity}, current_size={self.num_keys})"""
          )





   def __contains__(       self					, UpperCAmelCase_)			->   bool:




          '''simple docstring'''




          return key in self.cache





   def __lowercase							(       self					, UpperCAmelCase_)			->   U | None:




          '''simple docstring'''




          if key in self.cache:
                 self.hits += 1
                 lowercase__:							DoubleLinkedListNode[T, U]         =     self.cache[key]
                 lowercase__:							Optional[int]         =     self.list.remove(self.cache[key])
                 assert node == value_node

                 # node is guaranteed not None because it is in self.cache
                 assert node is not None
                 self.list.add(UpperCAmelCase_)
                 return node.val
          self.miss += 1
          return None





   def __lowercase							(       self					, UpperCAmelCase_					, UpperCAmelCase_)			->   None:




          '''simple docstring'''




          if key not in self.cache:
                 if self.num_keys >= self.capacity:
                        # delete first node when over capacity
                        lowercase__:							Any         =     self.list.head.next

                        # guaranteed to have a non-None first node when num_keys > 0
                        # explain to type checker via assertions
                        assert first_node is not None
                        assert first_node.key is not None
                        assert self.list.remove(UpperCAmelCase_) is not None
                        # first_node guaranteed to be in list

                        del self.cache[first_node.key]
                        self.num_keys -= 1
                 lowercase__:							str         =     DoubleLinkedListNode(UpperCAmelCase_					, UpperCAmelCase_)
                 self.list.add(self.cache[key])
                 self.num_keys += 1

          else:
                 lowercase__:							List[Any]         =     self.list.remove(self.cache[key])
                 assert node is not None  # node guaranteed to be in list
                 lowercase__:							Union[str, Any]         =     value
                 self.list.add(UpperCAmelCase_)





   @classmethod
   def __lowercase							(       cls					, UpperCAmelCase_ = 128)			->   Callable[[Callable[[T], U]], Callable[..., U]]:




          '''simple docstring'''




          def cache_decorator_inner(UpperCAmelCase_) -> Callable[..., U]:
                 def cache_decorator_wrapper(*UpperCAmelCase_) -> U:
                        if func not in cls.decorator_function_to_instance_map:
                               lowercase__:							Any         =     LFUCache(UpperCAmelCase_)

                        lowercase__:							str         =     cls.decorator_function_to_instance_map[func].get(args[0])
                        if result is None:
                               lowercase__:							Union[str, Any]         =     func(*UpperCAmelCase_)
                               cls.decorator_function_to_instance_map[func].put(args[0]					, UpperCAmelCase_)
                        return result

                 def cache_info() -> LFUCache[T, U]:
                        return cls.decorator_function_to_instance_map[func]

                 setattr(UpperCAmelCase_					, "cache_info"					, UpperCAmelCase_)  # noqa: B010

                 return cache_decorator_wrapper

          return cache_decorator_inner


if __name__ == "__main__":
  import doctest

  doctest.testmod()














"""simple docstring"""





import json
import os
import pickle
import subprocess
from hashlib import mda
from pathlib import Path
from tempfile import gettempdir
from textwrap import dedent
from types import CodeType, FunctionType
from unittest import TestCase
from unittest.mock import patch

import pytest
from multiprocess import Pool
from packaging import version

import datasets
from datasets.fingerprint import Hasher, fingerprint_transform
from datasets.table import InMemoryTable

from .utils import (
    require_regex,
    require_spacy,
    require_spacy_model,
    require_tiktoken,
    require_torch,
    require_transformers,
)







class 						_a  :





   '''simple docstring'''






   def __init__(       self					, UpperCAmelCase_)			->   List[Any]:




          '''simple docstring'''




          lowercase__:							List[str]         =     foo





   def __call__(       self)			->   Union[str, Any]:




          '''simple docstring'''




          return self.foo







class 						_a  (		datasets.Dataset       ):





   '''simple docstring'''






   @fingerprint_transform(inplace=UpperCAmelCase_)
   def __lowercase							(       self					, UpperCAmelCase_					, *UpperCAmelCase_					, **UpperCAmelCase_)			->   int:




          '''simple docstring'''




          return DatasetChild(self.data					, fingerprint=UpperCAmelCase_)





   @fingerprint_transform(inplace=UpperCAmelCase_)
   def __lowercase							(       self					, UpperCAmelCase_					, *UpperCAmelCase_					, **UpperCAmelCase_)			->   int:




          '''simple docstring'''




          return DatasetChild(self.data					, fingerprint=UpperCAmelCase_)







class 						_a  :





   '''simple docstring'''






   def __init__(       self					, UpperCAmelCase_)			->   Optional[int]:




          '''simple docstring'''




          lowercase__:							Tuple         =     callable





   def __call__(       self					, *UpperCAmelCase_					, **UpperCAmelCase_)			->   Optional[int]:




          '''simple docstring'''




          if self.callable is not None:
                 return self.callable(*UpperCAmelCase_					, **UpperCAmelCase_)





   def __getstate__(       self)			->   int:




          '''simple docstring'''




          raise pickle.PicklingError()







class 						_a  (		lowercase_       ):





   '''simple docstring'''






   @require_transformers
   @pytest.mark.integration
   def __lowercase							(       self)			->   List[Any]:




          '''simple docstring'''




          from transformers import AutoTokenizer

          def encode(UpperCAmelCase_):
                 return tokenizer(UpperCAmelCase_)

          # TODO: add hash consistency tests across sessions
          lowercase__:							Tuple         =     AutoTokenizer.from_pretrained("bert-base-uncased")
          lowercase__:							Optional[Any]         =     mda(datasets.utils.py_utils.dumps(UpperCAmelCase_)).hexdigest()
          lowercase__:							Any         =     mda(datasets.utils.py_utils.dumps(lambda UpperCAmelCase_: tokenizer(UpperCAmelCase_))).hexdigest()
          lowercase__:							Optional[Any]         =     mda(datasets.utils.py_utils.dumps(UpperCAmelCase_)).hexdigest()
          lowercase__:							Tuple         =     AutoTokenizer.from_pretrained("bert-base-cased")
          lowercase__:							int         =     mda(datasets.utils.py_utils.dumps(UpperCAmelCase_)).hexdigest()
          lowercase__:							Tuple         =     mda(datasets.utils.py_utils.dumps(lambda UpperCAmelCase_: tokenizer(UpperCAmelCase_))).hexdigest()
          lowercase__:							List[str]         =     mda(datasets.utils.py_utils.dumps(UpperCAmelCase_)).hexdigest()
          lowercase__:							Optional[int]         =     AutoTokenizer.from_pretrained("bert-base-uncased")
          lowercase__:							Tuple         =     mda(datasets.utils.py_utils.dumps(UpperCAmelCase_)).hexdigest()
          lowercase__:							str         =     mda(datasets.utils.py_utils.dumps(lambda UpperCAmelCase_: tokenizer(UpperCAmelCase_))).hexdigest()
          lowercase__:							Tuple         =     mda(datasets.utils.py_utils.dumps(UpperCAmelCase_)).hexdigest()
          self.assertEqual(UpperCAmelCase_					, UpperCAmelCase_)
          self.assertNotEqual(UpperCAmelCase_					, UpperCAmelCase_)
          self.assertEqual(UpperCAmelCase_					, UpperCAmelCase_)
          self.assertNotEqual(UpperCAmelCase_					, UpperCAmelCase_)
          self.assertEqual(UpperCAmelCase_					, UpperCAmelCase_)
          self.assertNotEqual(UpperCAmelCase_					, UpperCAmelCase_)





   @require_transformers
   @pytest.mark.integration
   def __lowercase							(       self)			->   Optional[int]:




          '''simple docstring'''




          from transformers import AutoTokenizer

          lowercase__:							Optional[int]         =     AutoTokenizer.from_pretrained("gpt2")
          lowercase__:							Any         =     mda(datasets.utils.py_utils.dumps(UpperCAmelCase_)).hexdigest()
          tokenizer("Hello world !")  # call once to change the tokenizer's cache
          lowercase__:							Tuple         =     mda(datasets.utils.py_utils.dumps(UpperCAmelCase_)).hexdigest()
          self.assertEqual(UpperCAmelCase_					, UpperCAmelCase_)





   @require_regex
   def __lowercase							(       self)			->   str:




          '''simple docstring'''




          import regex

          lowercase__:							List[Any]         =     regex.Regex("foo")
          lowercase__:							Optional[int]         =     mda(datasets.utils.py_utils.dumps(UpperCAmelCase_)).hexdigest()
          lowercase__:							List[Any]         =     regex.Regex("bar")
          lowercase__:							List[str]         =     mda(datasets.utils.py_utils.dumps(UpperCAmelCase_)).hexdigest()
          lowercase__:							Union[str, Any]         =     regex.Regex("foo")
          lowercase__:							Optional[Any]         =     mda(datasets.utils.py_utils.dumps(UpperCAmelCase_)).hexdigest()
          self.assertEqual(UpperCAmelCase_					, UpperCAmelCase_)
          self.assertNotEqual(UpperCAmelCase_					, UpperCAmelCase_)







class 						_a  (		lowercase_       ):





   '''simple docstring'''






   def __lowercase							(       self)			->   int:




          '''simple docstring'''




          def func():
                 return foo

          lowercase__:							int         =     [0]
          lowercase__:							Optional[Any]         =     mda(datasets.utils.py_utils.dumps(UpperCAmelCase_)).hexdigest()
          lowercase__:							Dict         =     [1]
          lowercase__:							int         =     mda(datasets.utils.py_utils.dumps(UpperCAmelCase_)).hexdigest()
          lowercase__:							Union[str, Any]         =     [0]
          lowercase__:							List[Any]         =     mda(datasets.utils.py_utils.dumps(UpperCAmelCase_)).hexdigest()
          self.assertEqual(UpperCAmelCase_					, UpperCAmelCase_)
          self.assertNotEqual(UpperCAmelCase_					, UpperCAmelCase_)





   def __lowercase							(       self)			->   Dict:




          '''simple docstring'''




          def func():
                 pass

          lowercase__:							Any         =     mda(datasets.utils.py_utils.dumps(UpperCAmelCase_)).hexdigest()

          def func():
                 pass

          lowercase__:							List[Any]         =     mda(datasets.utils.py_utils.dumps(UpperCAmelCase_)).hexdigest()
          self.assertEqual(UpperCAmelCase_					, UpperCAmelCase_)





   def __lowercase							(       self)			->   str:




          '''simple docstring'''




          lowercase__:							Optional[int]         =     mda(datasets.utils.py_utils.dumps(Foo([0]))).hexdigest()
          lowercase__:							Optional[Any]         =     mda(datasets.utils.py_utils.dumps(Foo([1]))).hexdigest()
          lowercase__:							int         =     mda(datasets.utils.py_utils.dumps(Foo([0]))).hexdigest()
          self.assertEqual(UpperCAmelCase_					, UpperCAmelCase_)
          self.assertNotEqual(UpperCAmelCase_					, UpperCAmelCase_)





   def __lowercase							(       self)			->   Union[str, Any]:




          '''simple docstring'''




          lowercase__:							Any         =     mda(datasets.utils.py_utils.dumps(Foo([0]).__call__)).hexdigest()
          lowercase__:							List[Any]         =     mda(datasets.utils.py_utils.dumps(Foo([1]).__call__)).hexdigest()
          lowercase__:							Optional[Any]         =     mda(datasets.utils.py_utils.dumps(Foo([0]).__call__)).hexdigest()
          self.assertEqual(UpperCAmelCase_					, UpperCAmelCase_)
          self.assertNotEqual(UpperCAmelCase_					, UpperCAmelCase_)





   def __lowercase							(       self)			->   Union[str, Any]:




          '''simple docstring'''




          lowercase__:							List[Any]         =     (
              "co_argcount",
              "co_kwonlyargcount",
              "co_nlocals",
              "co_stacksize",
              "co_flags",
              "co_code",
              "co_consts",
              "co_names",
              "co_varnames",
              "co_filename",
              "co_name",
              "co_firstlineno",
              "co_lnotab",
              "co_freevars",
              "co_cellvars",
          )

          def _create_code_pyaa(*UpperCAmelCase_):
                 if hasattr(args[-3]					, "encode"):
                        lowercase__:							Tuple         =     list(UpperCAmelCase_)
                        lowercase__:							str         =     args[-3].encode()  # co_lnotab
                        lowercase__:							Any         =     args[-10].encode()  # co_code
                 if hasattr(UpperCAmelCase_					, "co_posonlyargcount"):
                        if len(UpperCAmelCase_) == 16:
                               return CodeType(*UpperCAmelCase_)
                        elif len(UpperCAmelCase_) == 15:
                               return CodeType(args[0]					, 0					, *args[1:])
                        return CodeType(args[0]					, 0					, 0					, *args[1:])
                 elif hasattr(UpperCAmelCase_					, "co_kwonlyargcount"):
                        if len(UpperCAmelCase_) == 16:
                               return CodeType(args[0]					, *args[2:])
                        elif len(UpperCAmelCase_) == 15:
                               return CodeType(*UpperCAmelCase_)
                        return CodeType(args[0]					, 0					, *args[1:])
                 if len(UpperCAmelCase_) == 16:
                        return CodeType(args[0]					, *args[3:])
                 elif len(UpperCAmelCase_) == 15:
                        return CodeType(args[0]					, *args[2:])
                 return CodeType(*UpperCAmelCase_)

          def create_ipython_func(UpperCAmelCase_					, UpperCAmelCase_):
                 def func():
                        return returned_obj

                 lowercase__:							Dict         =     func.__code__
                 # Use _create_code from dill in order to make it work for different python versions
                 if datasets.config.PY_VERSION < version.parse("3.8"):
                        lowercase__:							Union[str, Any]         =     _create_code_pyaa(
                            *[getattr(UpperCAmelCase_					, UpperCAmelCase_) if k != "co_filename" else co_filename for k in code_args_pyaa])
                 else:
                        lowercase__:							Tuple         =     code.replace(co_filename=UpperCAmelCase_)
                 return FunctionType(UpperCAmelCase_					, func.__globals__					, func.__name__					, func.__defaults__					, func.__closure__)

          lowercase__    ,      lowercase__:							Any         =     "<ipython-input-2-e0383a102aae>", [0]
          lowercase__:							List[str]         =     mda(datasets.utils.py_utils.dumps(create_ipython_func(UpperCAmelCase_					, UpperCAmelCase_))).hexdigest()
          lowercase__    ,      lowercase__:							Optional[Any]         =     "<ipython-input-2-e0383a102aae>", [1]
          lowercase__:							Optional[int]         =     mda(datasets.utils.py_utils.dumps(create_ipython_func(UpperCAmelCase_					, UpperCAmelCase_))).hexdigest()
          lowercase__    ,      lowercase__:							Tuple         =     "<ipython-input-5-713f6613acf3>", [0]
          lowercase__:							List[str]         =     mda(datasets.utils.py_utils.dumps(create_ipython_func(UpperCAmelCase_					, UpperCAmelCase_))).hexdigest()
          self.assertEqual(UpperCAmelCase_					, UpperCAmelCase_)
          self.assertNotEqual(UpperCAmelCase_					, UpperCAmelCase_)

          lowercase__    ,      lowercase__:							Dict         =     os.path.join(gettempdir()					, "ipykernel_12345"					, "321456789.py"), [0]
          lowercase__:							Tuple         =     mda(datasets.utils.py_utils.dumps(create_ipython_func(UpperCAmelCase_					, UpperCAmelCase_))).hexdigest()
          lowercase__    ,      lowercase__:							Dict         =     os.path.join(gettempdir()					, "ipykernel_12345"					, "321456789.py"), [1]
          lowercase__:							Any         =     mda(datasets.utils.py_utils.dumps(create_ipython_func(UpperCAmelCase_					, UpperCAmelCase_))).hexdigest()
          lowercase__    ,      lowercase__:							Any         =     os.path.join(gettempdir()					, "ipykernel_12345"					, "654123987.py"), [0]
          lowercase__:							Dict         =     mda(datasets.utils.py_utils.dumps(create_ipython_func(UpperCAmelCase_					, UpperCAmelCase_))).hexdigest()
          self.assertEqual(UpperCAmelCase_					, UpperCAmelCase_)
          self.assertNotEqual(UpperCAmelCase_					, UpperCAmelCase_)





   def __lowercase							(       self)			->   Dict:




          '''simple docstring'''




          lowercase__    ,      lowercase__:							str         =     [0], [1]

          def func():
                 return foo, bar

          lowercase__:							List[str]         =     "__main__"

          def globalvars_mocka_side_effect(UpperCAmelCase_					, *UpperCAmelCase_					, **UpperCAmelCase_):
                 return {"foo": foo, "bar": bar}

          def globalvars_mocka_side_effect(UpperCAmelCase_					, *UpperCAmelCase_					, **UpperCAmelCase_):
                 return {"bar": bar, "foo": foo}

          with patch("dill.detect.globalvars"					, side_effect=UpperCAmelCase_) as globalvars_mocka:
                 lowercase__:							Optional[Any]         =     mda(datasets.utils.py_utils.dumps(UpperCAmelCase_)).hexdigest()
                 self.assertGreater(globalvars_mocka.call_count					, 0)
          with patch("dill.detect.globalvars"					, side_effect=UpperCAmelCase_) as globalvars_mocka:
                 lowercase__:							Tuple         =     mda(datasets.utils.py_utils.dumps(UpperCAmelCase_)).hexdigest()
                 self.assertGreater(globalvars_mocka.call_count					, 0)
          self.assertEqual(UpperCAmelCase_					, UpperCAmelCase_)







class 						_a  (		lowercase_       ):





   '''simple docstring'''






   def __lowercase							(       self)			->   int:




          '''simple docstring'''




          lowercase__:							List[Any]         =     Hasher.hash("hello")
          lowercase__:							Optional[int]         =     Hasher.hash("hello")
          lowercase__:							int         =     Hasher.hash("there")
          self.assertEqual(UpperCAmelCase_					, UpperCAmelCase_)
          self.assertNotEqual(UpperCAmelCase_					, UpperCAmelCase_)





   def __lowercase							(       self)			->   Any:




          '''simple docstring'''




          lowercase__:							str         =     Hasher.hash(Foo("hello"))
          lowercase__:							Tuple         =     Hasher.hash(Foo("hello"))
          lowercase__:							Union[str, Any]         =     Hasher.hash(Foo("there"))
          self.assertEqual(UpperCAmelCase_					, UpperCAmelCase_)
          self.assertNotEqual(UpperCAmelCase_					, UpperCAmelCase_)





   def __lowercase							(       self)			->   str:




          '''simple docstring'''




          lowercase__:							str         =     Hasher()
          for x in ["hello", Foo("hello")]:
                 hasher.update(UpperCAmelCase_)
          lowercase__:							Dict         =     hasher.hexdigest()
          lowercase__:							Any         =     Hasher()
          for x in ["hello", Foo("hello")]:
                 hasher.update(UpperCAmelCase_)
          lowercase__:							List[Any]         =     hasher.hexdigest()
          lowercase__:							Optional[int]         =     Hasher()
          for x in ["there", Foo("there")]:
                 hasher.update(UpperCAmelCase_)
          lowercase__:							Tuple         =     hasher.hexdigest()
          self.assertEqual(UpperCAmelCase_					, UpperCAmelCase_)
          self.assertNotEqual(UpperCAmelCase_					, UpperCAmelCase_)





   def __lowercase							(       self)			->   List[str]:




          '''simple docstring'''




          with self.assertRaises(pickle.PicklingError):
                 Hasher.hash(UnpicklableCallable(Foo("hello")))





   def __lowercase							(       self)			->   Optional[Any]:




          '''simple docstring'''




          lowercase__:							Optional[Any]         =     "abc"
          lowercase__:							Any         =     [string, string]  # two strings have the same ids
          lowercase__:							str         =     [string, string]
          lowercase__:							Optional[int]         =     json.loads(F"""[\"{string}\", \"{string}\"]""")  # two strings have different ids
          self.assertIs(obja[0]					, UpperCAmelCase_)
          self.assertIs(obja[0]					, obja[1])
          self.assertIs(obja[0]					, UpperCAmelCase_)
          self.assertIs(obja[0]					, obja[1])
          self.assertIsNot(obja[0]					, UpperCAmelCase_)
          self.assertIsNot(obja[0]					, obja[1])
          lowercase__:							List[Any]         =     Hasher.hash(UpperCAmelCase_)
          lowercase__:							str         =     Hasher.hash(UpperCAmelCase_)
          lowercase__:							Tuple         =     Hasher.hash(UpperCAmelCase_)
          self.assertEqual(UpperCAmelCase_					, UpperCAmelCase_)
          self.assertEqual(UpperCAmelCase_					, UpperCAmelCase_)





   @require_tiktoken
   def __lowercase							(       self)			->   str:




          '''simple docstring'''




          import tiktoken

          lowercase__:							Union[str, Any]         =     tiktoken.get_encoding("gpt2")
          lowercase__:							List[str]         =     mda(datasets.utils.py_utils.dumps(UpperCAmelCase_)).hexdigest()
          lowercase__:							Dict         =     tiktoken.get_encoding("r50k_base")
          lowercase__:							Dict         =     mda(datasets.utils.py_utils.dumps(UpperCAmelCase_)).hexdigest()
          lowercase__:							List[Any]         =     tiktoken.get_encoding("gpt2")
          lowercase__:							Optional[int]         =     mda(datasets.utils.py_utils.dumps(UpperCAmelCase_)).hexdigest()
          self.assertEqual(UpperCAmelCase_					, UpperCAmelCase_)
          self.assertNotEqual(UpperCAmelCase_					, UpperCAmelCase_)





   @require_torch
   def __lowercase							(       self)			->   List[Any]:




          '''simple docstring'''




          import torch

          lowercase__:							Tuple         =     torch.tensor([1.0])
          lowercase__:							Optional[int]         =     mda(datasets.utils.py_utils.dumps(UpperCAmelCase_)).hexdigest()
          lowercase__:							Dict         =     torch.tensor([2.0])
          lowercase__:							Union[str, Any]         =     mda(datasets.utils.py_utils.dumps(UpperCAmelCase_)).hexdigest()
          lowercase__:							Tuple         =     torch.tensor([1.0])
          lowercase__:							Any         =     mda(datasets.utils.py_utils.dumps(UpperCAmelCase_)).hexdigest()
          self.assertEqual(UpperCAmelCase_					, UpperCAmelCase_)
          self.assertNotEqual(UpperCAmelCase_					, UpperCAmelCase_)





   @require_spacy
   @require_spacy_model("en_core_web_sm")
   @require_spacy_model("fr_core_news_sm")
   @pytest.mark.integration
   def __lowercase							(       self)			->   Any:




          '''simple docstring'''




          import spacy

          lowercase__:							Tuple         =     spacy.load("en_core_web_sm")
          lowercase__:							Any         =     mda(datasets.utils.py_utils.dumps(UpperCAmelCase_)).hexdigest()
          lowercase__:							Any         =     spacy.load("fr_core_news_sm")
          lowercase__:							str         =     mda(datasets.utils.py_utils.dumps(UpperCAmelCase_)).hexdigest()
          lowercase__:							int         =     spacy.load("en_core_web_sm")
          lowercase__:							str         =     mda(datasets.utils.py_utils.dumps(UpperCAmelCase_)).hexdigest()
          self.assertEqual(UpperCAmelCase_					, UpperCAmelCase_)
          self.assertNotEqual(UpperCAmelCase_					, UpperCAmelCase_)







@pytest.mark.integration
def 							A(    snake_case_						):
       """simple docstring"""





       lowercase__:							Optional[Any]         =     tmp_path / "dir1"
       lowercase__:							Tuple         =     tmp_path / "dir2"
       dira.mkdir()
       dira.mkdir()
       lowercase__:							Union[str, Any]         =     "script.py"
       lowercase__:							Any         =     dedent(
           "\n    from datasets.fingerprint import Hasher\n    def foo():\n        pass\n    print(Hasher.hash(foo))\n    "						)
       lowercase__:							List[str]         =     dira / script_filename
       lowercase__:							int         =     dira / script_filename
       with script_patha.open("w"						) as f:
              f.write(snake_case_						)
       with script_patha.open("w"						) as f:
              f.write(snake_case_						)
       lowercase__:							Any         =     subprocess.check_output(["python", str(snake_case_						)]						)
       lowercase__:							Optional[Any]         =     subprocess.check_output(["python", str(snake_case_						)]						)
       assert fingerprinta == fingerprinta






def 							A(    ):
       """simple docstring"""





       lowercase__:							Optional[int]         =     {"a": [0, 1, 2]}
       lowercase__:							Dict         =     DatasetChild(InMemoryTable.from_pydict(snake_case_						)						)
       lowercase__:							List[Any]         =     dataset.funca()._fingerprint
       assert expected_fingerprint == dataset.funca()._fingerprint
       assert expected_fingerprint != dataset.funca()._fingerprint

       with Pool(2						) as p:
              assert expected_fingerprint == p.apply_async(dataset.funca						).get()._fingerprint
              assert expected_fingerprint != p.apply_async(dataset.funca						).get()._fingerprint






def 							A(    ):
       """simple docstring"""





       lowercase__:							List[str]         =     {"a": [0, 1, 2]}







       class 						_a  (		datasets.Dataset       ):





          '''simple docstring'''






          @fingerprint_transform(inplace=UpperCAmelCase_)
          def __lowercase							(       self					, UpperCAmelCase_)			->   List[str]:




                 '''simple docstring'''




                 return DummyDatasetChild(self.data					, fingerprint=UpperCAmelCase_)







       lowercase__:							Tuple         =     DummyDatasetChild(InMemoryTable.from_pydict(snake_case_						)						).func()







       class 						_a  (		datasets.Dataset       ):





          '''simple docstring'''






          @fingerprint_transform(inplace=UpperCAmelCase_					, version="1.0.0")
          def __lowercase							(       self					, UpperCAmelCase_)			->   Optional[int]:




                 '''simple docstring'''




                 return DummyDatasetChild(self.data					, fingerprint=UpperCAmelCase_)







       lowercase__:							Optional[int]         =     DummyDatasetChild(InMemoryTable.from_pydict(snake_case_						)						).func()







       class 						_a  (		datasets.Dataset       ):





          '''simple docstring'''






          @fingerprint_transform(inplace=UpperCAmelCase_					, version="2.0.0")
          def __lowercase							(       self					, UpperCAmelCase_)			->   Any:




                 '''simple docstring'''




                 return DummyDatasetChild(self.data					, fingerprint=UpperCAmelCase_)







       lowercase__:							Optional[int]         =     DummyDatasetChild(InMemoryTable.from_pydict(snake_case_						)						).func()

       assert len({fingeprint_no_version, fingeprint_a, fingeprint_a}						) == 3







def 							A(    ):
       """simple docstring"""





       lowercase__:							int         =     Hasher()
       hasher.update(lambda snake_case_						: x						)






