

import faiss  # noqa: F401 # Here to have a nice missing dependency error message early on
import numpy  # noqa: F401 # Here to have a nice missing dependency error message early on
import requests  # noqa: F401 # Here to have a nice missing dependency error message early on
import sklearn  # noqa: F401 # Here to have a nice missing dependency error message early on
import tqdm  # noqa: F401 # Here to have a nice missing dependency error message early on
from mauve import compute_mauve  # From: mauve-text

import datasets


lowercase_   							=  '\\n@inproceedings{pillutla-etal:mauve:neurips2021,\n  title={MAUVE: Measuring the Gap Between Neural Text and Human Text using Divergence Frontiers},\n  author={Pillutla, Krishna and Swayamdipta, Swabha and Zellers, Rowan and Thickstun, John and Welleck, Sean and Choi, Yejin and Harchaoui, Zaid},\n  booktitle = {NeurIPS},\n  year      = {2021}\n}\n\n'

lowercase_   							=  '\\nMAUVE is a library built on PyTorch and HuggingFace Transformers to measure the gap between neural text and human text with the eponymous MAUVE measure.\n\nMAUVE summarizes both Type I and Type II errors measured softly using Kullback–Leibler (KL) divergences.\n\nFor details, see the MAUVE paper: https://arxiv.org/abs/2102.01454 (Neurips, 2021).\n\nThis metrics is a wrapper around the official implementation of MAUVE:\nhttps://github.com/krishnap25/mauve\n'

lowercase_   							=  '\nCalculates MAUVE scores between two lists of generated text and reference text.\nArgs:\n    predictions: list of generated text to score. Each predictions\n        should be a string with tokens separated by spaces.\n    references: list of reference for each prediction. Each\n        reference should be a string with tokens separated by spaces.\nOptional Args:\n    num_buckets: the size of the histogram to quantize P and Q. Options: \'auto\' (default) or an integer\n    pca_max_data: the number data points to use for PCA dimensionality reduction prior to clustering. If -1, use all the data. Default -1\n    kmeans_explained_var: amount of variance of the data to keep in dimensionality reduction by PCA. Default 0.9\n    kmeans_num_redo: number of times to redo k-means clustering (the best objective is kept). Default 5\n    kmeans_max_iter: maximum number of k-means iterations. Default 500\n    featurize_model_name: name of the model from which features are obtained. Default \'gpt2-large\' Use one of [\'gpt2\', \'gpt2-medium\', \'gpt2-large\', \'gpt2-xl\'].\n    device_id: Device for featurization. Supply a GPU id (e.g. 0 or 3) to use GPU. If no GPU with this id is found, use CPU\n    max_text_length: maximum number of tokens to consider. Default 1024\n    divergence_curve_discretization_size: Number of points to consider on the divergence curve. Default 25\n    mauve_scaling_factor: "c" from the paper. Default 5.\n    verbose: If True (default), print running time updates\n    seed: random seed to initialize k-means cluster assignments.\nReturns:\n    mauve: MAUVE score, a number between 0 and 1. Larger values indicate that P and Q are closer,\n    frontier_integral: Frontier Integral, a number between 0 and 1. Smaller values indicate that P and Q are closer,\n    divergence_curve: a numpy.ndarray of shape (m, 2); plot it with matplotlib to view the divergence curve,\n    p_hist: a discrete distribution, which is a quantized version of the text distribution p_text,\n    q_hist: same as above, but with q_text.\nExamples:\n\n    >>> # faiss segfaults in doctest for some reason, so the .compute call is not tested with doctest\n    >>> import datasets\n    >>> mauve = datasets.load_metric(\'mauve\')\n    >>> predictions = ["hello there", "general kenobi"]\n    >>> references = ["hello there", "general kenobi"]\n    >>> out = mauve.compute(predictions=predictions, references=references) # doctest: +SKIP\n    >>> print(out.mauve) # doctest: +SKIP\n    1.0\n'





@datasets.utils.file_utils.add_start_docstrings(_DESCRIPTION     ,     _KWARGS_DESCRIPTION				)
class 					__lowerCAmelCase	(   datasets.Metric				):




  def     A__	(							self   )    ->					int:
        '''simple docstring'''






        return datasets.MetricInfo(
            description=_DESCRIPTION				,  citation=_CITATION				,  homepage='https://github.com/krishnap25/mauve'				,  inputs_description=_KWARGS_DESCRIPTION				,  features=datasets.Features(
                {
                    'predictions': datasets.Value('string'				,  id='sequence'   ),
                    'references': datasets.Value('string'				,  id='sequence'   ),
                }   )				,  codebase_urls=['https://github.com/krishnap25/mauve']				,  reference_urls=[
                'https://arxiv.org/abs/2102.01454',
                'https://github.com/krishnap25/mauve',
            ]				,  )




  def     A__	(							self				,  lowerCAmelCase				,  lowerCAmelCase				,  lowerCAmelCase=None				,  lowerCAmelCase=None				,  lowerCAmelCase=None				,  lowerCAmelCase=None				,  lowerCAmelCase="auto"				,  lowerCAmelCase=-1				,  lowerCAmelCase=0.9				,  lowerCAmelCase=5				,  lowerCAmelCase=500				,  lowerCAmelCase="gpt2-large"				,  lowerCAmelCase=-1				,  lowerCAmelCase=1_024				,  lowerCAmelCase=25				,  lowerCAmelCase=5				,  lowerCAmelCase=True				,  lowerCAmelCase=25				,  )    ->					str:
        '''simple docstring'''






        _lowercase      			=compute_mauve(
            p_text=lowerCAmelCase				,  q_text=lowerCAmelCase				,  p_features=lowerCAmelCase				,  q_features=lowerCAmelCase				,  p_tokens=lowerCAmelCase				,  q_tokens=lowerCAmelCase				,  num_buckets=lowerCAmelCase				,  pca_max_data=lowerCAmelCase				,  kmeans_explained_var=lowerCAmelCase				,  kmeans_num_redo=lowerCAmelCase				,  kmeans_max_iter=lowerCAmelCase				,  featurize_model_name=lowerCAmelCase				,  device_id=lowerCAmelCase				,  max_text_length=lowerCAmelCase				,  divergence_curve_discretization_size=lowerCAmelCase				,  mauve_scaling_factor=lowerCAmelCase				,  verbose=lowerCAmelCase				,  seed=lowerCAmelCase				,  )
        return out





from collections import OrderedDict
from typing import Mapping

from ...configuration_utils import PretrainedConfig
from ...onnx import OnnxConfig
from ...utils import logging


lowercase_   							=  logging.get_logger(__name__)

lowercase_   							=  {
    'distilbert-base-uncased': 'https://huggingface.co/distilbert-base-uncased/resolve/main/config.json',
    'distilbert-base-uncased-distilled-squad': (
        'https://huggingface.co/distilbert-base-uncased-distilled-squad/resolve/main/config.json'
    ),
    'distilbert-base-cased': 'https://huggingface.co/distilbert-base-cased/resolve/main/config.json',
    'distilbert-base-cased-distilled-squad': (
        'https://huggingface.co/distilbert-base-cased-distilled-squad/resolve/main/config.json'
    ),
    'distilbert-base-german-cased': 'https://huggingface.co/distilbert-base-german-cased/resolve/main/config.json',
    'distilbert-base-multilingual-cased': (
        'https://huggingface.co/distilbert-base-multilingual-cased/resolve/main/config.json'
    ),
    'distilbert-base-uncased-finetuned-sst-2-english': (
        'https://huggingface.co/distilbert-base-uncased-finetuned-sst-2-english/resolve/main/config.json'
    ),
}





class 					__lowerCAmelCase	(   SCREAMING_SNAKE_CASE				):
  _a		     =    """distilbert"""
  _a		     =    {
      """hidden_size""": """dim""",
      """num_attention_heads""": """n_heads""",
      """num_hidden_layers""": """n_layers""",
  }




  def __init__(							self				,  lowerCAmelCase=30_522				,  lowerCAmelCase=512				,  lowerCAmelCase=False				,  lowerCAmelCase=6				,  lowerCAmelCase=12				,  lowerCAmelCase=768				,  lowerCAmelCase=4 * 768				,  lowerCAmelCase=0.1				,  lowerCAmelCase=0.1				,  lowerCAmelCase="gelu"				,  lowerCAmelCase=0.02				,  lowerCAmelCase=0.1				,  lowerCAmelCase=0.2				,  lowerCAmelCase=0				,  **lowerCAmelCase				,  )    ->					Dict:
        '''simple docstring'''






        _lowercase      			=vocab_size
        _lowercase      			=max_position_embeddings
        _lowercase      			=sinusoidal_pos_embds
        _lowercase      			=n_layers
        _lowercase      			=n_heads
        _lowercase      			=dim
        _lowercase      			=hidden_dim
        _lowercase      			=dropout
        _lowercase      			=attention_dropout
        _lowercase      			=activation
        _lowercase      			=initializer_range
        _lowercase      			=qa_dropout
        _lowercase      			=seq_classif_dropout
        super().__init__(**lowerCAmelCase				,  pad_token_id=lowerCAmelCase   )





class 					__lowerCAmelCase	(   SCREAMING_SNAKE_CASE				):




  @property
  def     A__	(							self   )    ->					Mapping[str, Mapping[int, str]]:
        '''simple docstring'''






        if self.task == "multiple-choice":
              _lowercase      			={0: 'batch', 1: 'choice', 2: 'sequence'}
        else:
              _lowercase      			={0: 'batch', 1: 'sequence'}
        return OrderedDict(
            [
                ('input_ids', dynamic_axis),
                ('attention_mask', dynamic_axis),
            ]   )


