internlm/SWE-Fixer-Train-110K huggingface dataset:
Repository: ESMCI/cime

Issue:
question on case_submit.py (Thomas Toniazzo)
I think that the instruction
      unlock_file(os.path.basename(env_batch.filename),caseroot=caseroot)
in line 97 might be wrong, since it seems to delete
LockFiles/env_batch.xml just before running check_lockfile; which throws
an error and thus forces env_submit.py to regenerate all batch scripts
every time.

Is this correct?

If so would it make sense to remove that line or mv it to just before
the subsequent lockfile line (although I'm not sure if that should be
part of the if clause rather than done every time).


Discussion:

Resolving patch:
diff --git a/CIME/case/case_submit.py b/CIME/case/case_submit.py
--- a/CIME/case/case_submit.py
+++ b/CIME/case/case_submit.py
@@ -94,8 +94,10 @@ def _submit(
         batch_system = "none"
     else:
         batch_system = env_batch.get_batch_system_type()
-    unlock_file(os.path.basename(env_batch.filename), caseroot=caseroot)
-    case.set_value("BATCH_SYSTEM", batch_system)
+
+    if batch_system != case.get_value("BATCH_SYSTEM"):
+        unlock_file(os.path.basename(env_batch.filename), caseroot=caseroot)
+        case.set_value("BATCH_SYSTEM", batch_system)
 
     env_batch_has_changed = False
     if not external_workflow:


Test patch:
Repository: ESMCI/cime

Issue:
V3 config_machines.xml doesn't consider user `.cime` directory for machine configs
If there's a V3 `config_machines.xml` under `~/.cime/`, CIME will check for `$SRCROOT/ccs_config/machines/docker/config_machines.xml` and not `~/.cime/docker/config_machines.xml`.

Issue is in `set_machine` function: https://github.com/ESMCI/cime/blob/d2ec81a4e5ee4bc558c46f31b407c02afd759b6b/CIME/XML/machines.py#L320-L328

Should also consider `~/.cime/docker/config_machines.xml`.


Discussion:

Resolving patch:
diff --git a/CIME/XML/machines.py b/CIME/XML/machines.py
--- a/CIME/XML/machines.py
+++ b/CIME/XML/machines.py
@@ -7,6 +7,7 @@
 from CIME.utils import convert_to_unknown_type, get_cime_config
 
 import socket
+from pathlib import Path
 
 logger = logging.getLogger(__name__)
 
@@ -317,15 +318,25 @@ def set_machine(self, machine, schema=None):
         if machine == "Query":
             return machine
         elif self.get_version() == 3:
-            machines_file = os.path.join(
-                self.machines_dir, machine, "config_machines.xml"
-            )
-            if os.path.isfile(machines_file):
+            machines_file = Path.home() / ".cime" / machine / "config_machines.xml"
+
+            if machines_file.exists():
                 GenericXML.read(
                     self,
                     machines_file,
                     schema=schema,
                 )
+            else:
+                machines_file = (
+                    Path(self.machines_dir) / machine / "config_machines.xml"
+                )
+
+                if machines_file.exists():
+                    GenericXML.read(
+                        self,
+                        machines_file,
+                        schema=schema,
+                    )
         self.machine_node = super(Machines, self).get_child(
             "machine",
             {"MACH": machine},


Test patch:
Repository: ESMCI/cime

Issue:
Unbound machine variable when there is no matching nodename_regex
When there is no matching nodename_regex for a machine, the following error is generated from create_newcase, even if `--machine` is explicitly specified:

```
Traceback (most recent call last):
  File "/Users/sacks/cesm_code/cesm/cime/scripts/./create_newcase", line 18, in <module>
    _main_func()
  File "/Users/sacks/cesm_code/cesm/cime/CIME/scripts/create_newcase.py", line 440, in _main_func
    case.create(
  File "/Users/sacks/cesm_code/cesm/cime/CIME/case/case.py", line 2479, in create
    self.configure(
  File "/Users/sacks/cesm_code/cesm/cime/CIME/case/case.py", line 1350, in configure
    probed_machine = machobj.probe_machine_name()
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/sacks/cesm_code/cesm/cime/CIME/XML/machines.py", line 183, in probe_machine_name
    machine = self._probe_machine_name_one_guess(nametomatch)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/sacks/cesm_code/cesm/cime/CIME/XML/machines.py", line 213, in _probe_machine_name_one_guess
    return self._probe_machine_name_one_guess_v3(nametomatch)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/sacks/cesm_code/cesm/cime/CIME/XML/machines.py", line 306, in _probe_machine_name_one_guess_v3
    return machine
           ^^^^^^^
UnboundLocalError: cannot access local variable 'machine' where it is not associated with a value
```

This is with the latest CIME in CESM (cime6.0.217_httpsbranch02) – I haven't tried cime master.

See https://github.com/ESMCI/cime/discussions/4587 for details.


Discussion:

Resolving patch:
diff --git a/CIME/XML/machines.py b/CIME/XML/machines.py
--- a/CIME/XML/machines.py
+++ b/CIME/XML/machines.py
@@ -263,6 +263,7 @@ def _probe_machine_name_one_guess_v3(self, nametomatch):
 
         children = [y for x in nodes for y in self.get_children(root=x)]
 
+        machine = None
         for child in children:
             machtocheck = self.get(child, "MACH")
             regex_str = self.text(child)


Test patch:
Repository: explosion/spaCy

Issue:
Hindi example is broken
```
$ python3 spacy/lang/hi/examples.py
 File "spacy/lang/hi/examples.py", line 15
        "स्वायत्त कार निर्माताओं की ओर बीमा दायित्व रखती है",
      ^
SyntaxError: invalid character in identifier
```

This is because the whitespace contains U+00A0 (NO-BREAK SPACE) which Python does not understand.


Discussion:
Thanks for spotting this! 👍 If you have a second, do you want to submit a quick PR?

Resolving patch:
diff --git a/spacy/lang/hi/examples.py b/spacy/lang/hi/examples.py
--- a/spacy/lang/hi/examples.py
+++ b/spacy/lang/hi/examples.py
@@ -1,4 +1,4 @@
-  # coding: utf8
+# coding: utf8
 from __future__ import unicode_literals
 
 
@@ -11,12 +11,12 @@
 
 
 sentences = [
-     "एप्पल 1 अरब डॉलर के लिए यू.के. स्टार्टअप खरीदने पर विचार कर रहा है",
-     "स्वायत्त कार निर्माताओं की ओर बीमा दायित्व रखती है",
-     "सैन फ्रांसिस्को फुटवे डिलीवरी रोबोटों पर प्रतिबंध लगाने का विचार कर रहा है",
-     "लंदन यूनाइटेड किंगडम का बड़ा शहर है।",
-     "आप कहाँ हैं?",
-     "फ्रांस के राष्ट्रपति कौन हैं?",
-     "संयुक्त राज्य की राजधानी क्या है?",
-     "बराक ओबामा का जन्म हुआ था?"
+    "एप्पल 1 अरब डॉलर के लिए यू.के. स्टार्टअप खरीदने पर विचार कर रहा है",
+    "स्वायत्त कार निर्माताओं की ओर बीमा दायित्व रखती है",
+    "सैन फ्रांसिस्को फुटवे डिलीवरी रोबोटों पर प्रतिबंध लगाने का विचार कर रहा है",
+    "लंदन यूनाइटेड किंगडम का बड़ा शहर है।",
+    "आप कहाँ हैं?",
+    "फ्रांस के राष्ट्रपति कौन हैं?",
+    "संयुक्त राज्य की राजधानी क्या है?",
+    "बराक ओबामा का जन्म हुआ था?",
 ]


Test patch:
Repository: explosion/spaCy

Issue:
Dummy command argument wasn't removed from auto-link after download
Auto-linking of downloaded languages was broken in https://github.com/explosion/spaCy/commit/7f0ab145e95036a55af4802184a4b1c496557d0a. The dummy argument wasn't removed from the `link` call at https://github.com/explosion/spaCy/blob/master/spacy/cli/download.py#L44. I can make a PR for the fix unless it's easier for a maintainer to just fix this quickly.

## Your Environment
* Operating System: Docker python:3.6
* Python Version Used: 3.6.2
* spaCy Version Used: Changes made since 2.0.5
* Environment Information: Docker python:3.6



Discussion:
Thanks – I thought this was fixed in a second PR, but it might have been lost in an unclean merge in between, damn. If you could submit a quick PR, that would be great! 👍

Resolving patch:
diff --git a/spacy/cli/download.py b/spacy/cli/download.py
--- a/spacy/cli/download.py
+++ b/spacy/cli/download.py
@@ -41,7 +41,7 @@ def download(model, direct=False):
             # package, which fails if model was just installed via
             # subprocess
             package_path = get_package_path(model_name)
-            link(None, model_name, model, force=True,
+            link(model_name, model, force=True,
                     model_path=package_path)
         except:
             # Dirty, but since spacy.download and the auto-linking is


Test patch:
Repository: explosion/spaCy

Issue:
Few variables was changed globally by mistake in runtime
<!--- Please provide a summary in the title and describe your issue here.
Is this a bug or feature request? If a bug, include all the steps that led to the issue.

If you're looking for help with your code, consider posting a question on StackOverflow instead:
http://stackoverflow.com/questions/tagged/spacy -->

`spacy.lang.zh.ChineseDefaults.use_jieba` should be `True` by default (default value). But actually it is `False` which is changed by `spacy.cli.ud_train` in runtime (when loading spacy). `spacy.cli.ud_train` also make few other changes by accident, for example: `lang.ja.Japanese.Defaults.use_janome = False`, `random.seed(0)` and `numpy.random.seed(0)`. This will cause bugs which is very difficult to find.

**I will make a PR to fix this bug later.**

## Your Environment
<!-- Include details of your environment. If you're using spaCy 1.7+, you can also type 
`python -m spacy info --markdown` and copy-paste the result here.-->
* Operating System: Any
* Python Version Used: Any
* spaCy Version Used: 2.1.0.dev4
* Environment Information: Any



Discussion:

Resolving patch:
diff --git a/spacy/cli/ud_train.py b/spacy/cli/ud_train.py
--- a/spacy/cli/ud_train.py
+++ b/spacy/cli/ud_train.py
@@ -32,11 +32,6 @@
 from ..lang import zh
 from ..lang import ja
 
-lang.zh.Chinese.Defaults.use_jieba = False
-lang.ja.Japanese.Defaults.use_janome = False
-
-random.seed(0)
-numpy.random.seed(0)
 
 ################
 # Data reading #
@@ -326,6 +321,12 @@ def __init__(self, ud_path, treebank, **cfg):
     limit=("Size limit", "option", "n", int)
 )
 def main(ud_dir, parses_dir, config, corpus, limit=0):
+    lang.zh.Chinese.Defaults.use_jieba = False
+    lang.ja.Japanese.Defaults.use_janome = False
+
+    random.seed(0)
+    numpy.random.seed(0)
+
     config = Config.load(config)
     paths = TreebankPaths(ud_dir, corpus)
     if not (parses_dir / corpus).exists():


Test patch:
Repository: explosion/spaCy

Issue:
Minor: Swedish lemmatizer confuses "year" with "oar"
I would've submitted a pull request but perhaps I'm missing something here.

```python
from spacy.lang.sv import Swedish

nlp = Swedish()

[x.lemma_ for x in nlp('För två år sedan')]
```

outputs

```
['För', 'två', 'åra', 'sedan']
```

Here, the word `år` (year) is lemmatized to `åra` (oar), which is obviously not correct. The mapping from `år` to `åra` can be found in [spacy/lang/sv/lemmatizer/lookup.py](https://github.com/explosion/spaCy/blob/master/spacy/lang/sv/lemmatizer/lookup.py).

## Environment
* **spaCy version:** 2.0.11
* **Platform:** Darwin-16.7.0-x86_64-i386-64bit
* **Python version:** 3.6.4
* **Models:** xx_ent_wiki_sm



Discussion:
Thanks for the report! (Unfortunately, this often happens with freely available tables and resources that get passed around a lot. They're never 100% perfect – but I'm glad we have a community that spots and reports mistakes like this 🙏)

What would be the correct solution then? Should `år` be removed entirely, or should the mapping be replaced with something else? (If you have a second, you could also just submit a PR instead.)

Resolving patch:
diff --git a/spacy/lang/sv/lemmatizer/lookup.py b/spacy/lang/sv/lemmatizer/lookup.py
--- a/spacy/lang/sv/lemmatizer/lookup.py
+++ b/spacy/lang/sv/lemmatizer/lookup.py
@@ -651423,7 +651423,6 @@
     "åpnasts": "åpen",
     "åpne": "åpen",
     "åpnes": "åpen",
-    "år": "åra",
     "åran": "åra",
     "årans": "åra",
     "åras": "åra",


Test patch:
Repository: explosion/spaCy

Issue:
Typo in docs? multi-label text classification
The docs give an example of text classification on IMDB [here](https://spacy.io/usage/training#example-textcat). It says it's "multi-label", but this dataset is binary. So I'm not sure what you mean here.


Discussion:

Resolving patch:
diff --git a/examples/training/train_textcat.py b/examples/training/train_textcat.py
--- a/examples/training/train_textcat.py
+++ b/examples/training/train_textcat.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 # coding: utf8
-"""Train a multi-label convolutional neural network text classifier on the
+"""Train a convolutional neural network text classifier on the
 IMDB dataset, using the TextCategorizer component. The dataset will be loaded
 automatically via Thinc's built-in dataset loader. The model is added to
 spacy.pipeline, and predictions are available via `doc.cats`. For more details,


Test patch:
Repository: explosion/spaCy

Issue:
Initialization in text 
In `evaluate `method from 
    https://github.com/explosion/spacy/blob/master/examples/training/train_textcat.py
tp, fp, fn, and tn (true positives etc) are initialized to 1e-8 (see below)

```
tp = 1e-8  # True positives
fp = 1e-8  # False positives
fn = 1e-8  # False negative
tn = 1e-8  # True negatives
```

Why are the values not initlaized to 0? When there are no true positives the precision is 0.5, That doesn't seem right.


Discussion:
Fair point --- I was avoiding the divide-by-zero error, but if there are no true or false positives, I guess the precision should be 0.0. It should be more correct to initialize `tp` and `tn` to 0.0, while `fp` and `fn` are initialized to a small value to avoid the denominator being zero.

Do you want to make a pull request?

Resolving patch:
diff --git a/examples/training/train_textcat.py b/examples/training/train_textcat.py
--- a/examples/training/train_textcat.py
+++ b/examples/training/train_textcat.py
@@ -106,10 +106,10 @@ def load_data(limit=0, split=0.8):
 
 def evaluate(tokenizer, textcat, texts, cats):
     docs = (tokenizer(text) for text in texts)
-    tp = 1e-8  # True positives
+    tp = 0.0   # True positives
     fp = 1e-8  # False positives
     fn = 1e-8  # False negatives
-    tn = 1e-8  # True negatives
+    tn = 0.0   # True negatives
     for i, doc in enumerate(textcat.pipe(docs)):
         gold = cats[i]
         for label, score in doc.cats.items():


Test patch:
Repository: explosion/spaCy

Issue:
parameter averaging
You recommend (https://spacy.io/usage/training#section-tips):

> Then when we want to actually use the model, we use the averages, not the most recent value. 
> with nlp.use_params(optimizer.averages):
>     nlp.to_disk('/model')

But in the classification example https://spacy.io/usage/training#section-textcat model is saved only not in nlp.use_params(optimizer.averages) scope. Is it correct?
parameter averaging
You recommend (https://spacy.io/usage/training#section-tips):

> Then when we want to actually use the model, we use the averages, not the most recent value. 
> with nlp.use_params(optimizer.averages):
>     nlp.to_disk('/model')

But in the classification example https://spacy.io/usage/training#section-textcat model is saved only not in nlp.use_params(optimizer.averages) scope. Is it correct?


Discussion:
You're right, that's a bug in the example. Normally the best thing to do is to save the model with the best accuracy each epoch, when we do the evaluation, and then use the best model. Using the model from the last epoch is usually worse --- especially without the parameter averaging.
You're right, that's a bug in the example. Normally the best thing to do is to save the model with the best accuracy each epoch, when we do the evaluation, and then use the best model. Using the model from the last epoch is usually worse --- especially without the parameter averaging.

Resolving patch:
diff --git a/examples/training/train_textcat.py b/examples/training/train_textcat.py
--- a/examples/training/train_textcat.py
+++ b/examples/training/train_textcat.py
@@ -82,7 +82,8 @@ def main(model=None, output_dir=None, n_iter=20, n_texts=2000):
         output_dir = Path(output_dir)
         if not output_dir.exists():
             output_dir.mkdir()
-        nlp.to_disk(output_dir)
+        with nlp.use_params(optimizer.averages):
+            nlp.to_disk(output_dir)
         print("Saved model to", output_dir)
 
         # test the saved model


Test patch:
Repository: explosion/spaCy

Issue:
Unable to pickle a Token
I'm unable to serialize `Token`s. I think this used to work in an earlier version, since I get this exception from a friend's code that used to work fine. I suspect issue #2819 is a manifestation of the same problem, but with Spark wrapping the error message.

## How to reproduce the behavior

```
import spacy, pickle
nlp = spacy.load('en')
doc = nlp("Hello, world")

with open("test_pckl", "wb") as fh:
    pickle.dump(doc[0], fh)
```

## Your Environment

* **spaCy version:** 2.0.12
* **Platform:** Linux-4.10.0-28-generic-x86_64-with-debian-stretch-sid
* **Python version:** 3.6.5
* **Models:** en
* **pickleshare version:** 0.7.5 (also tested with 0.7.4)



Discussion:
Hi, is there any update on this issue? I'm still encountering it in version 2.0.18.
I think the main problem here is that spaCy doesn't really raise its own helpful error and the default error is kinda cryptic. 

A token is only a view of the `Doc` so it can't really exist on its own. There's also no proper way to restore it, because it always needs the `Doc` and the `Vocab` as its context. So if you were to pickle a `Token`, the resulting data would be huge, because it'd have to include the `Doc` and the `Doc`'s `Vocab`. This is very confusing and there's not really a benefit to serializing a token over serializing the parent `Doc`, because you'd always be pulling in the parent `Doc` anyways.

I'll try to come up with a good error message that gets this across and implement that in `Token.__reduce__`.


Resolving patch:
diff --git a/spacy/errors.py b/spacy/errors.py
--- a/spacy/errors.py
+++ b/spacy/errors.py
@@ -303,7 +303,11 @@ class Errors(object):
     E109 = ("Model for component '{name}' not initialized. Did you forget to load "
             "a model, or forget to call begin_training()?")
     E110 = ("Invalid displaCy render wrapper. Expected callable, got: {obj}")
-
+    E111 = ("Pickling a token is not supported, because tokens are only views "
+            "of the parent Doc and can't exist on their own. A pickled token "
+            "would always have to include its Doc and Vocab, which has "
+            "practically no advantage over pickling the parent Doc directly. "
+            "So instead of pickling the token, pickle the Doc it belongs to.")
 
 @add_codes
 class TempErrors(object):


Test patch:
diff --git a/spacy/tests/regression/test_issue2833.py b/spacy/tests/regression/test_issue2833.py
new file mode 100644
--- /dev/null
+++ b/spacy/tests/regression/test_issue2833.py
@@ -0,0 +1,13 @@
+# coding: utf-8
+from __future__ import unicode_literals
+
+import pytest
+from spacy.tokens import Doc
+from spacy.compat import pickle
+
+
+def test_issue2833(en_vocab):
+    """Test that a custom error is raised if a token is pickled."""
+    doc = Doc(en_vocab, words=["Hello", "world"])
+    with pytest.raises(NotImplementedError):
+        pickle.dumps(doc[0])
Repository: explosion/spaCy

Issue:
💫 Raise error if user is running narrow unicode build
## Feature description

Because v2.1 includes various changes to the regular expressions used in the tokenizer (including replacing `regex` with `re`), loading a model with a narrow unicode build of Python will fail with `sre_constants.error: bad character range`. See #3421 for details.

spaCy should probably check `sys.maxunicode` on import and raise an error if it's `65535`, meaning the user is running a narrow build. (Even aside form spaCy, a narrow unicode build is pretty inconvenient when working with text in Python.)

I've already added a section on this to the troubleshooting guide, so we can use text from that for the error message: https://spacy.io/usage#narrow-unicode


Discussion:

Resolving patch:
diff --git a/spacy/__init__.py b/spacy/__init__.py
--- a/spacy/__init__.py
+++ b/spacy/__init__.py
@@ -1,6 +1,7 @@
 # coding: utf8
 from __future__ import unicode_literals
 import warnings
+import sys
 
 warnings.filterwarnings("ignore", message="numpy.dtype size changed")
 warnings.filterwarnings("ignore", message="numpy.ufunc size changed")
@@ -11,10 +12,14 @@
 from .cli.info import info as cli_info
 from .glossary import explain
 from .about import __version__
-from .errors import Warnings, deprecation_warning
+from .errors import Errors, Warnings, deprecation_warning
 from . import util
 
 
+if sys.maxunicode == 65535:
+    raise SystemError(Errors.E130)
+
+
 def load(name, **overrides):
     depr_path = overrides.get("path")
     if depr_path not in (True, False, None):
diff --git a/spacy/errors.py b/spacy/errors.py
--- a/spacy/errors.py
+++ b/spacy/errors.py
@@ -367,6 +367,10 @@ class Errors(object):
             "Instead, create a new Span object and specify the `label` keyword argument, "
             "for example:\nfrom spacy.tokens import Span\n"
             "span = Span(doc, start={start}, end={end}, label='{label}')")
+    E130 = ("You are running a narrow unicode build, which is incompatible "
+            "with spacy >= 2.1.0. To fix this, reinstall Python and use a wide "
+            "unicode build instead. You can also rebuild Python and set the "
+            "--enable-unicode=ucs4 flag.")
 
 
 @add_codes


Test patch:
Repository: explosion/spaCy

Issue:
Incorrect lemma from lemmatizer
**Right:**
`[w.lemma_ for w in nlp('funnier')]` -> `['funny']` 

**Wrong:**
`[w.lemma_ for w in nlp('faster')]` ->`['faster']`

I think for word _faster_ lemma should be _fast_


Discussion:
This is also works in unexpected way: `nlp('data')[0].lemma_` -> `'datum'`
Hellos,
Lemma of an adverb is itself %99 of the time. However, some short adverbs can go comparative or superlative just as in your example, `fast -> faster`. I'll make a small refinement.

`Data` is **plural** of `datum` in Latin. `Data` is treated plural in grammatically correct sentences. However, in written and spoken English  it's used as `singular`. Honestly I don't know if should mark `data` as plural, then a catastrophe may arise due to practical issues.



Resolving patch:
diff --git a/spacy/lang/en/lemmatizer/_adverbs_irreg.py b/spacy/lang/en/lemmatizer/_adverbs_irreg.py
--- a/spacy/lang/en/lemmatizer/_adverbs_irreg.py
+++ b/spacy/lang/en/lemmatizer/_adverbs_irreg.py
@@ -5,9 +5,27 @@
 ADVERBS_IRREG = {
     "best": ("well",),
     "better": ("well",),
+    "closer": ("close",),
+    "closest": ("close",),
     "deeper": ("deeply",),
+    "earlier": ("early",),
+    "earliest": ("early",),
     "farther": ("far",),
     "further": ("far",),
+    "faster": ("fast",),
+    "fastest": ("fast",),
     "harder": ("hard",),
     "hardest": ("hard",),
+    "longer": ("long",),
+    "longest": ("long",),
+    "nearer": ("near",),
+    "nearest": ("near",),
+    "nigher": ("nigh",),
+    "nighest": ("nigh",),
+    "quicker": ("quick",),
+    "quickest": ("quick",),
+    "slower": ("slow",),
+    "slowest": ("slowest",),
+    "sooner": ("soon",),
+    "soonest": ("soon",)
 }


Test patch:
diff --git a/spacy/tests/lang/en/test_exceptions.py b/spacy/tests/lang/en/test_exceptions.py
--- a/spacy/tests/lang/en/test_exceptions.py
+++ b/spacy/tests/lang/en/test_exceptions.py
@@ -124,3 +124,9 @@ def test_en_tokenizer_norm_exceptions(en_tokenizer, text, norms):
 def test_en_lex_attrs_norm_exceptions(en_tokenizer, text, norm):
     tokens = en_tokenizer(text)
     assert tokens[0].norm_ == norm
+
+
+@pytest.mark.parametrize("text", ["faster", "fastest", "better", "best"])
+def test_en_lemmatizer_handles_irreg_adverbs(en_tokenizer, text):
+    tokens = en_tokenizer(text)
+    assert tokens[0].lemma_ in ["fast", "well"]