Pandas: [Bon premier numéro] TST : Interdire le pytest.raises nu

Créé le 14 janv. 2020  ·  51Commentaires  ·  Source: pandas-dev/pandas

Les utilisateurs finaux se fient aux messages d'erreur à des fins de débogage. Ainsi, il est important que nous nous assurons que les messages d'erreur corrects sont affichés en fonction de l'erreur déclenchée.

L'idée de base est de convertir ceci :

with pytest.raises(klass):
    # Some code that raise an error

Pour ça:

with pytest.raises(klass, match=msg):
    # Some code that raise an error

Vous pouvez en savoir plus sur pytest.raises ici .


Note latérale :

Dans le cas où le message d'erreur généré est un message d'erreur externe (ce qui signifie qu'il n'est pas spécifique aux pandas), vous devez utiliser le external_error_raised au lieu de pytest.raises .

l'utilisation de external_error_raised est __exactement__ comme pytest.raises la seule différence est que vous ne passez pas l'argument match .

Par exemple:

import pandas._testing as tm

def test_foo():
    with tm.external_error_raised(ValueError):
        raise ValueError("foo")

Présentations :

  • N'oubliez pas de lier ce problème dans votre RP, collez-le
https://github.com/pandas-dev/pandas/issues/30999

dans votre RP.

  • Veuillez commenter ce sur quoi vous prévoyez de travailler, afin que nous ne fassions pas le double du travail (inutile de me mentionner, vous pouvez simplement déclarer ce sur quoi vous prévoyez de travailler, n'oubliez pas de vérifier si quelque chose est déjà pris).

  • Si un fichier ou des fichiers qui devraient être marqués comme "terminés" (comme s'il n'y avait plus de travail à faire), n'est pas marqué comme "terminé", veuillez commenter pour m'en informer (et me mentionner en mettant @MomIsBestFriend au corps du commentaire, donc je saurai où chercher).


Pour générer vous-même la liste complète, vous pouvez exécuter :

python scripts/validate_unwanted_patterns.py -vt="bare_pytest_raises" pandas/tests/

Vous pouvez également l'exécuter sur un seul fichier comme :

python scripts/validate_unwanted_patterns.py -vt="bare_pytest_raises" pandas/tests/PATH/TO/SPECIFIC/FILE.py

Si un fichier contient un pytest.raises nu, le script affichera ce qui suit :

pandas/tests/arithmetic/test_numeric.py:553:Bare pytests raise have been found. Please pass in the argument 'match' as well the exception

Ce qui veut dire qu'à pandas/tests/arithmetic/test_numeric.py en ligne 553 il y a un nu pytest.raises


La liste actuelle est :

  • [x] pandas/tests/io/pytables/test_timezones.py
  • [ ] pandas/tests/generic/methods/test_pipe.py
  • [ ] pandas/tests/reshape/merge/test_merge_asof.py
  • [ ] pandas/tests/extension/base/reduce.py
  • [x] pandas/tests/arrays/test_datetimelike.py
  • [ ] pandas/tests/extension/test_boolean.py
  • [ ] pandas/tests/extension/base/getitem.py
  • [ ] pandas/tests/arrays/boolean/test_arithmetic.py
  • [ ] pandas/tests/extension/base/setitem.py
  • [ ] pandas/tests/indexes/interval/test_astype.py
  • [ ] pandas/tests/io/parser/test_network.py
  • [ ] pandas/tests/extension/test_integer.py
  • [ ] pandas/tests/indexation/multiindex/test_partial.py
  • [ ] pandas/tests/io/parser/test_python_parser_only.py
  • [ ] pandas/tests/io/test_html.py
  • [ ] pandas/tests/reductions/test_stat_reductions.py
  • [ ] pandas/tests/dtypes/test_inference.py
  • [ ] pandas/tests/plotting/test_hist_method.py
  • [ ] pandas/tests/series/apply/test_series_apply.py
  • [ ] pandas/tests/io/excel/test_xlrd.py
  • [ ] pandas/tests/indexes/test_common.py
  • [ ] pandas/tests/util/test_assert_series_equal.py
  • [ ] pandas/tests/extension/base/ops.py
  • [ ] pandas/tests/io/test_clipboard.py
  • [ ] pandas/tests/plotting/frame/test_frame_color.py
  • [ ] pandas/tests/window/moments/test_moments_ewm.py
  • [ ] pandas/tests/io/test_gbq.py
  • [ ] pandas/tests/reductions/test_reductions.py
  • [ ] pandas/tests/io/test_feather.py
  • [ ] pandas/tests/resample/test_resampler_grouper.py
  • [ ] pandas/tests/indexes/multi/test_indexing.py
  • [ ] pandas/tests/io/test_common.py
  • [ ] pandas/tests/io/test_sql.py
  • [ ] pandas/tests/plotting/test_series.py
  • [ ] pandas/tests/io/test_fsspec.py
  • [ ] pandas/tests/extension/test_floating.py
  • [ ] pandas/tests/indexes/multi/test_setops.py
  • [ ] pandas/tests/reshape/test_get_dummies.py
  • [ ] pandas/tests/plotting/frame/test_frame_subplots.py
  • [ ] pandas/tests/plotting/test_backend.py
  • [ ] pandas/tests/generic/methods/test_sample.py
  • [ ] pandas/tests/plotting/test_boxplot_method.py
  • [ ] pandas/tests/io/test_parquet.py
  • [ ] pandas/tests/extension/test_string.py
  • [ ] pandas/tests/io/pytables/test_complex.py
  • [ ] pandas/tests/indexes/test_numpy_compat.py
  • [ ] pandas/tests/io/test_gcs.py
  • [ ] pandas/tests/io/sas/test_sas7bdat.py
  • [ ] pandas/tests/window/test_apply.py
  • [ ] pandas/tests/series/test_ufunc.py
  • [ ] pandas/tests/plotting/frame/test_frame.py
  • [ ] pandas/tests/reshape/test_union_categoricals.py
  • [ ] pandas/tests/io/json/test_ujson.py
  • [ ] pandas/tests/indexation/test_coercion.py
  • [ ] pandas/tests/io/pytables/test_store.py
  • [ ] pandas/tests/computation/test_compat.py
  • [ ] pandas/tests/io/json/test_pandas.py
  • [ ] pandas/tests/io/json/test_json_table_schema.py

    - [ ] pandas/tests/scalar/test_nat.py

REMARQUE:

La liste peut changer au fur et à mesure que les fichiers sont déplacés/renommés en permanence.


A pris à peu près tout du #23922, qui a été ouvert à l'origine par @gfyoung.

Style Testing good first issue

Tous les 51 commentaires

Je vais prendre:

  • [x] pandas/tests/test_common.py
  • [x] pandas/tests/test_downstream.py
  • [x] pandas/tests/test_errors.py
  • [x] pandas/tests/test_lib.py
  • [x] pandas/tests/test_take.py
  • [x] pandas/tests/internals/test_internals.py
  • [x] pandas/tests/window/test_rolling.py

Je vais commencer à travailler sur :

pandas/tests/arithmetic/test_numeric.py
pandas/tests/arithmétique/test_object.py
pandas/tests/arithmetic/test_period.py
pandas/tests/arithmétique/test_timedelta64.py
pandas/tests/arrays/interval/test_interval.py

@gdex1 J'espère que cela vous aidera :)

(Les chiffres représentent le numéro de ligne)

pandas/tests/arithmetic/test_numeric.py:138
pandas/tests/arithmetic/test_numeric.py:141
pandas/tests/arithmetic/test_numeric.py:190
pandas/tests/arithmetic/test_numeric.py:208
pandas/tests/arithmetic/test_numeric.py:210
pandas/tests/arithmetic/test_numeric.py:212
pandas/tests/arithmetic/test_numeric.py:214
pandas/tests/arithmetic/test_numeric.py:232
pandas/tests/arithmetic/test_numeric.py:234
pandas/tests/arithmetic/test_numeric.py:236
pandas/tests/arithmetic/test_numeric.py:238
pandas/tests/arithmetic/test_numeric.py:519
pandas/tests/arithmetic/test_numeric.py:610
pandas/tests/arithmetic/test_numeric.py:615
pandas/tests/arithmetic/test_numeric.py:617
pandas/tests/arithmetic/test_numeric.py:795
pandas/tests/arithmetic/test_numeric.py:798
pandas/tests/arithmetic/test_numeric.py:819
pandas/tests/arithmetic/test_object.py:140
pandas/tests/arithmetic/test_object.py:152
pandas/tests/arithmetic/test_object.py:154
pandas/tests/arithmetic/test_object.py:278
pandas/tests/arithmetic/test_object.py:280
pandas/tests/arithmetic/test_object.py:282
pandas/tests/arithmetic/test_object.py:284
pandas/tests/arithmetic/test_object.py:298
pandas/tests/arithmetic/test_object.py:301
pandas/tests/arithmetic/test_object.py:315
pandas/tests/arithmetic/test_object.py:318



md5-634e15eb80aa764171dbacd11a06b70b



pandas/tests/arithmetic/test_timedelta64.py:51
pandas/tests/arithmetic/test_timedelta64.py:445
pandas/tests/arithmetic/test_timedelta64.py:607
pandas/tests/arithmetic/test_timedelta64.py:609
pandas/tests/arithmetic/test_timedelta64.py:703
pandas/tests/arithmetic/test_timedelta64.py:705
pandas/tests/arithmetic/test_timedelta64.py:707
pandas/tests/arithmetic/test_timedelta64.py:709
pandas/tests/arithmetic/test_timedelta64.py:741
pandas/tests/arithmetic/test_timedelta64.py:743
pandas/tests/arithmetic/test_timedelta64.py:960
pandas/tests/arithmetic/test_timedelta64.py:972
pandas/tests/arithmetic/test_timedelta64.py:1028
pandas/tests/arithmetic/test_timedelta64.py:1037
pandas/tests/arithmetic/test_timedelta64.py:1039
pandas/tests/arithmetic/test_timedelta64.py:1502
pandas/tests/arithmetic/test_timedelta64.py:1505
pandas/tests/arithmetic/test_timedelta64.py:1508
pandas/tests/arithmetic/test_timedelta64.py:1511
pandas/tests/arithmetic/test_timedelta64.py:1536
pandas/tests/arithmetic/test_timedelta64.py:1591
pandas/tests/arithmetic/test_timedelta64.py:1783
pandas/tests/arithmetic/test_timedelta64.py:1785
pandas/tests/arithmetic/test_timedelta64.py:1911
pandas/tests/arithmetic/test_timedelta64.py:1960
pandas/tests/arithmetic/test_timedelta64.py:1962
pandas/tests/arithmetic/test_timedelta64.py:1968



md5-634e15eb80aa764171dbacd11a06b70b



pandas/tests/arrays/interval/test_interval.py:155

@gfyoung la liste n'a pas été générée par grep -r -e "pytest.raises([a-zA-Z]*)" pandas/tests -l en fait, elle a été générée par le script dans #30755 (un type de validation appelé bare_pytest_raises ), je mettrai des instructions au corps du problème, une fois ça fusionne :sourire:

@MomIsBestFriend Je vais aider avec :
pandas/tests/base/test_constructors.py
pandas/tests/base/test_ops.py

Je peux m'occuper de ceux-ci :
@MomIsBestFriend

pandas/tests/io/test_html.py
pandas/tests/io/test_parquet.py
pandas/tests/io/test_sql.py
pandas/tests/io/test_stata.py
pandas/tests/traçage/test_backend.py
pandas/tests/plotting/test_boxplot_method.py
pandas/tests/plotting/test_frame.py
pandas/tests/traçage/test_hist_method.py
pandas/tests/traçage/test_series.py
pandas/tests/reductions/test_reductions.py

@MomIsBestFriend, il y a eu pas mal de discussions sur https://github.com/pandas-dev/pandas/issues/23922 sur le point de s'y prendre. Car pour répéter comme je l'ai dit là : je ne pense pas qu'il faille affirmer « aveuglément » tous les messages d'erreur.

Certaines choses ont été dites dans ce fil : limitez-le aux messages d'erreur internes, limitez la correspondance à quelques mots clés du message, évitez les modèles compliqués.

De plus, je pense que l'affirmation des messages d'erreur devrait aller de pair avec la vérification réelle s'il s'agit d'un bon message d'erreur clair, et potentiellement l'amélioration de cela.

Il pourrait être bon de distiller une liste de points d'attention de la discussion dans l'autre question à mettre ici.

@jorisvandenbossche

@MomIsBestFriend, il y a eu pas mal de discussions dans #23922 sur le sujet. Car pour répéter comme je l'ai dit là : je ne pense pas qu'il faille affirmer « aveuglément » tous les messages d'erreur.

Je suis tout à fait d'accord, mais le problème est que les nouveaux arrivants ne savent pas quels messages d'erreur affirmer et quels messages d'erreur ne pas affirmer, si nous définissons en quelque sorte des règles sur quels messages d'erreur affirmer et ne pas affirmer, et en même temps garder ce numéro "débutant amical", ce sera génial (IMO).

De plus, si nous prévoyons d'appliquer cela dans le CI, nous devons d'une manière ou d'une autre marquer ce que bare pytest raises sont "nu" exprès (un commentaire IMO avec le style de isort: skip est suffisant), et aussi d'autres les gens sauront qu'un bare pytest raise est volontairement nu.

Certaines choses ont été dites dans ce fil : limitez-le aux messages d'erreur internes, limitez la correspondance à quelques mots clés du message, évitez les modèles compliqués.

Je ne vois pas pourquoi nous ne voudrions pas tester les messages d'erreur internes, pouvez-vous nous en dire davantage ?

Je vois le point que vous avez souligné dans https://github.com/pandas-dev/pandas/issues/23922#issuecomment -458551763, et je suis +1 dessus, mais je suis +2 (si cela a du sens) sur https://github.com/pandas-dev/pandas/issues/23922#issuecomment -458733117 et https://github.com/pandas-dev/pandas/issues/ 23922#issuecomment -458735169 car selon l'OMI, l'avantage est supérieur au coût.

De plus, je pense que l'affirmation des messages d'erreur devrait aller de pair avec la vérification réelle s'il s'agit d'un bon message d'erreur clair, et potentiellement l'amélioration de cela.

Tout à fait d'accord.

Il pourrait être bon de distiller une liste de points d'attention de la discussion dans l'autre question à mettre ici.

J'ai lu la conversation au n° 23922, mais je n'ai rien vu que l' OMI vaille la peine de mettre comme "note" dans le corps du problème, pouvez-vous s'il vous plaît souligner les choses que j'ai manquées ?

J'ai lu la conversation au n° 23922, mais je n'ai rien vu que l'OMI vaille la peine de mettre comme "note" dans le corps du problème, pouvez-vous s'il vous plaît souligner les choses que j'ai manquées ?

Je ne vois pas grand-chose d'autre à ajouter à ce problème non plus.

Je suis tout à fait d'accord, mais le problème est que les nouveaux arrivants ne savent pas quels messages d'erreur affirmer et quels messages d'erreur ne pas affirmer, si nous définissons en quelque sorte des règles sur quels messages d'erreur affirmer et ne pas affirmer, et en même temps garder ce numéro "débutant amical", ce sera génial (IMO).

De plus, si nous prévoyons d'appliquer cela dans le CI, nous devons d'une manière ou d'une autre marquer quelles augmentations de pytest nues sont "nues" volontairement (commentaire IMO avec le style isort: skip est suffisant), et aussi pour que d'autres personnes sachent qu'un particulier l'augmentation nue de pytest est nue exprès.

Ce sont en partie des raisons pour lesquelles choisir ce qu'il faut tester et lequel ne pas tester n'est pas la direction que je préférerais. J'ajouterais également que nous vérifions parfois les chaînes de messages d'erreur dans les blocs except , donc de bons messages d'erreur nous profitent également pendant le développement.

De plus, si ces messages "internes" ne sont pas si importants, pourquoi avons-nous un message d'erreur en premier lieu ? Je voudrais alors simplement créer un assistant qui affirme ensuite que le message est vide.

Je ne vois pas pourquoi nous ne voudrions pas tester les messages d'erreur internes, pouvez-vous nous en dire davantage ?

J'ai donc dit "limiter aux messages d'erreur internes", alors que "interne" peut être un peu ambigu... Je voulais dire : les messages d'erreur qui proviennent des pandas eux-mêmes, et bien sûr nous voulons les tester. Mais donc je voulais dire que nous (IMO) ne devrions pas tester trop de messages d'erreur externes , c'est-à-dire des messages provenant par exemple de numpy ou d'autres bibliothèques. Numpy peut les changer, puis nos tests commencent à échouer en raison d'un changement cosmétique dans numpy (et ce n'est pas hypothétique, c'est arrivé la semaine dernière je pense).

Maintenant, j'ai utilisé "interne" dans un contexte différent dans https://github.com/pandas-dev/pandas/pull/30998#discussion_r366726966. Là, je voulais dire comme un message d'erreur interne, orienté développeur, qui ne devrait

Je vois le point que vous avez souligné dans #23922 (commentaire), et je suis +1 là-dessus, mais je suis +2 (si cela a du sens) sur #23922 (commentaire) et #23922 (commentaire) parce que OMI, l'avantage est plus grand que le coût.

Mettons le commentaire de @simonjayhawkins vers lequel vous vous connectez ici :

Je travaille sur l'hypothèse, peut-être à tort, qu'il sera bénéfique pour

  1. identifier les tests paramétrables
  2. identifier les tests qui devraient être divisés
  3. meilleure compréhension du mode de défaillance testé
  4. ajouter indirectement plus de documentation aux tests
  5. identifier où les messages d'erreur pourraient être plus cohérents
  6. identifier les tests redondants
  7. aider à améliorer les messages d'erreur
  8. identifier les tests qui passent actuellement pour la mauvaise raison.

Ce sont toutes des choses utiles, je suis entièrement d'accord. Mais ce n'est pas simple, et si nous voulons sortir ces choses de ce problème, alors ce problème n'est pas pour les débutants. Bien sûr, les débutants n'ont pas besoin de faire toutes ces choses à la fois, mais j'ai toujours le sentiment que ces PR ajoutant des assertions sont souvent assez proches de "ajouter aveuglément le message d'erreur actuel à l'appel pytest.raises" sans y aller plus loin (les points ci-dessus).

De plus, si les points ci-dessus rendent cet exercice utile, ce sont des instructions plus concrètes à ce sujet qu'il est utile de mettre en tête de ce numéro, je pense.


Pour être clair, je suis tout à fait pour de meilleurs messages d'erreur et de meilleurs tests affirmant que nous avons et gardons ces messages d'erreur bons. Mais nous avons également un temps limité, et chaque PR nécessite du temps et des efforts pour être réalisé et révisé, et la question est de savoir où l'effort est le mieux dépensé.
OMI, il serait plutôt utile de se concentrer sur « réparer les augmentations de pytest nues » plutôt de se concentrer sur « améliorer les messages d'erreur » (et tout en faisant cela, mieux les tester).

De plus, si les points ci-dessus rendent cet exercice utile, ce sont des instructions plus concrètes à ce sujet qu'il est utile de mettre en tête de ce numéro, je pense.

Il peut être judicieux de créer un problème plus important pour les suivre (d'autres problèmes qui valent la peine d'être inclus dans un tel problème sont https://github.com/pandas-dev/pandas/issues/19159 et https://github.com/pandas- dev/pandas/issues/21575).

Cette partie en elle-même est autonome et est très accessible pour les débutants.

@gfyoung, en quoi les problèmes que vous

Ils se rapportent au commentaire que vous avez explicitement introduit de @simonjayhawkins

31072 contient la seule correspondance manquante dans stata.py

Comme je dis ici https://github.com/pandas-dev/pandas/pull/31091#issuecomment -575422207 Je suis avec l'idée de @jorisvandenbossche , que nous ne testerons pas les messages d'erreur des packages externes, Des idées sur la façon dont pour les marquer ?

Si nous ne voulons vraiment pas tester certains messages d'erreur (je pourrais aller dans les deux sens sur les messages externes pour être juste), je pense que nous devrions simplement créer une fonction d'assistance comme celle-ci :

~pythondef external_error_raised (expected_exception):return pytest.raises(expected_exception, match=None)~

Cela nous montrera clairement qu'il s'agit d'une erreur non-pandas, et le match=None sert à apaiser tout contrôle de peluche que nous développons pour de simples pytest .

Si nous ne voulons vraiment pas tester certains messages d'erreur (je pourrais aller dans les deux sens sur les messages externes pour être juste), je pense que nous devrions simplement créer une fonction d'assistance comme celle-ci :

def external_error_raised(expected_exception):
   return pytest.raises(expected_exception, match=None)

Cela nous montrera clairement qu'il s'agit d'une erreur non-pandas, et le match=None sert à apaiser tout contrôle de peluche que nous développons pour de simples pytest .

+1 dessus.

J'aime beaucoup cette idée, pouvons-nous en faire une convention pour nos tests ?

Que si une fonction teste si une fonction/méthode génère une erreur et que l'erreur est une erreur externe, nous mettons simplement match=None dans le fichier "pytest.raises```.

pouvons-nous en faire une convention pour nos tests ?

J'entends par là mettre une section dans le Guide de contribution .

Que si une fonction teste si une fonction/méthode génère une erreur et que l'erreur est une erreur externe, nous mettons simplement match=None dans le fichier "pytest.raises```.

Je préférerais la fonction d'assistance car vous n'auriez alors pas à penser à l'ajouter. De plus, le nom de l'assistant est beaucoup plus clair quant à la raison pour laquelle nous le faisons.

Si nous ne voulons vraiment pas tester certains messages d'erreur (je pourrais aller dans les deux sens sur les messages externes pour être juste), je pense que nous devrions simplement créer une fonction d'assistance comme celle-ci :

def external_error_raised(expected_exception):
   return pytest.raises(expected_exception, match=None)

Cela nous montrera clairement qu'il s'agit d'une erreur non-pandas, et le match=None sert à apaiser tout contrôle de peluche que nous développons pour de simples pytest .

@gfyoung où recommandez-vous de mettre cette fonction d'assistance ? (comme si dans quel fichier ?)

pandas._testing

Bonjour,

J'aimerais travailler sur :

pandas/tests/arrays/interval/test_ops.py
pandas/tests/arrays/test_array.py
pandas/tests/arrays/test_boolean.py

Bonjour - Je souhaite travailler sur :

pandas/tests/arithmetic/test_period.py
pandas/tests/arithmétique/test_timedelta64.py

Bonjour à tous, je prends ce qui suit :

pandas/tests/computation/test_compat.py
pandas/tests/computation/test_eval.py
pandas/tests/dtypes/cast/test_upcast.py
pandas/tests/dtypes/test_dtypes.py

@MomIsBestFriend celui-ci est déjà terminé mais n'est pas marqué comme terminé :
pandas/tests/arithmetic/test_numeric.py

METTRE À JOUR

@MomIsBestFriend ceux-ci aussi :
pandas/tests/arithmetic/test_period.py
pandas/tests/arrays/test_integer.py
pandas/tests/arrays/test_period.py

Ceux-ci sont inclus dans #31852

pandas/tests/extension/decimal/test_decimal.py
pandas/tests/extension/json/test_json.py
pandas/tests/extension/test_boolean.py
pandas/tests/extension/test_categorical.py
pandas/tests/frame/indexing/test_categorical.py
pandas/tests/frame/indexing/test_indexing.py
pandas/tests/frame/indexing/test_where.py
pandas/tests/frame/methods/test_explode.py
pandas/tests/frame/methods/test_isin.py
pandas/tests/frame/methods/test_quantile.py
pandas/tests/frame/methods/test_round.py
pandas/tests/frame/methods/test_sort_values.py
pandas/tests/frame/methods/test_to_dict.py

Je vais prendre

pandas/tests/io/excel/test_readers.py
pandas/tests/io/excel/test_writers.py
pandas/tests/io/excel/test_xlwt.py
pandas/tests/io/formats/test_format.py
pandas/tests/io/formats/test_style.py
pandas/tests/io/formats/test_to_latex.py

@MomIsBestFriend
Celles-ci se font sans la marque :

  • pandas/tests/indexes/datetimes/test_astype.py

pandas/tests/indexes/datetimes/test_tools.py n'existe pas

Je ferai:

  • pandas/tests/indexes/datetimes/test_constructors.py
  • pandas/tests/indexes/datetimes/test_date_range.py
  • pandas/tests/indexes/datetimes/test_indexing.py
  • pandas/tests/indexes/datetimes/test_shift.py
  • pandas/tests/indexes/datetimes/test_timezones.py

J'ai mis à jour le message d'origine, maintenant qu'il existe un script pour détecter les pytest raises nus, j'ai inclus des instructions sur la façon de l'utiliser, si quelqu'un a encore des questions, vous êtes plus que bienvenus :)

Je vais prendre,

pandas/tests/arithmétique/test_timedelta64.py

pandas/tests/scalar/timestamp/test_arithmetic.py
pandas/tests/scalar/timestamp/test_comparisons.py
pandas/tests/scalar/timestamp/test_constructors.py
pandas/tests/scalaire/timestamp/test_timezones.py
pandas/tests/scalar/timestamp/test_unary_ops.py

semble que tous les tests dans pandas/tests/scalar/timestamp/ sont déjà corrigés.

$ git checkout master
Already on 'master'
$ python scripts/validate_unwanted_patterns.py -vt="bare_pytest_raises"  pandas/tests/scalar/timestamp/
$ 

pandas/tests/arrays/test_boolean.py => est manquant.

Je prends
pandas/tests/arrays/interval/test_ops.py
pandas/tests/arrays/test_datetimelike.py

pandas/tests/groupby/test_categorical.py
pandas/tests/groupby/test_groupby.py
pandas/tests/groupby/test_timegrouper.py

pandas/tests/arithmetic/test_timedelta64.py => #33010

pandas/tests/scalar/timestamp/test_arithmetic.py => pas de problème
pandas/tests/scalar/timestamp/test_comparisons.py => pas de problème
pandas/tests/scalar/timestamp/test_constructors.py => pas de problème
pandas/tests/scalar/timestamp/test_timezones.py => pas de problème
pandas/tests/scalar/timestamp/test_unary_ops.py => pas de problème

pandas/tests/arrays/test_boolean.py => est manquant.

pandas/tests/arrays/interval/test_ops.py => #33010
pandas/tests/arrays/test_datetimelike.py => #33010

pandas/tests/groupby/test_categorical.py => #33144
pandas/tests/groupby/test_groupby.py => pas de problème
pandas/tests/groupby/test_timegrouper.py => pas de problème

pandas/tests/indexes/categorical/test_category.py => pas de problème
pandas/tests/index/common.py #33144
pandas/tests/index/datetimelike.py #33144

pandas/tests/indexes/interval/test_astype.py => tous les tests concernés sont marqués comme ayant échoué, devons-nous encore corriger, comment faire ?

pandas/tests/indexes/multi/test_compat.py #33144
pandas/tests/indexes/multi/test_duplicates.py => pas de problème
pandas/tests/indexes/multi/test_format.py => fichier introuvable.
pandas/tests/indexes/multi/test_reshape.py #33144
pandas/tests/indexes/multi/test_setops.py => pas de problème
pandas/tests/indexes/multi/test_sorting.py #33144

@sumanau7 avez-vous répertorié les fichiers que vous

Fini avec

pandas/tests/indexes/categorical/test_category.py
pandas/tests/indexes/period/test_constructors.py
pandas/tests/indexes/period/test_join.py
pandas/tests/indexes/period/test_partial_slicing.py
pandas/tests/indexes/period/test_setops.py
pandas/tests/indexes/timedeltas/test_delete.py

je travaille avec

pandas/tests/index/ranges/test_constructors.py
pandas/tests/index/ranges/test_range.py
pandas/tests/indexing/multiindex/test_chaining_and_caching.py
pandas/tests/indexation/multiindex/test_partial.py
pandas/tests/series/indexing/test_alter_index.py
pandas/tests/arrays/boolean/test_function.py

Travaille sur:

pandas/tests/reshape/merge/test_multi.py

Je vais prendre:
pandas/tests/window/moments/test_moments_ewm.py
pandas/tests/window/moments/test_moments_rolling.py
pandas/tests/window/test_dtypes.py
pandas/tests/window/test_ewm.py
pandas/tests/window/test_expanding.py
pandas/tests/window/test_timeseries_window.py

Je prendrai aussi :

  • pandas/tests/frame/methods/test_assign.py
  • pandas/tests/frame/methods/test_at_time.py
  • pandas/tests/frame/methods/test_between_time.py
  • pandas/tests/frame/methods/test_first_and_last.py
  • pandas/tests/frame/methods/test_interpolate.py
  • pandas/tests/frame/methods/test_replace.py
  • pandas/tests/frame/test_query_eval.py

Salut,
Je suis un nouveau développeur sur le projet et j'aimerais aider avec cela. Lequel des tests restants convient le mieux à un débutant ?

Merci,
Kévin

Salut,
Je suis un nouveau développeur sur le projet et j'aimerais aider avec cela. Lequel des tests restants convient le mieux à un débutant ?

Merci,
Kévin

Bienvenue - Je ne pense pas qu'aucun d'entre eux ne soit plus facile ou plus difficile que les autres, tout serait un bon point de départ

J'obtiens une erreur lors de l'exécution du script validate_unwanted_patterns.py :

Traceback (most recent call last):
  File "C:\Users\Kevom\git\pandas\scripts\validate_unwanted_patterns.py", line 397, in <module>
    main(
  File "C:\Users\Kevom\git\pandas\scripts\validate_unwanted_patterns.py", line 352, in main
    for line_number, msg in function(file_obj):
  File "C:\Users\Kevom\git\pandas\scripts\validate_unwanted_patterns.py", line 88, in bare_pytest_raises
    contents = file_obj.read()
  File "C:\Program Files (x86)\Python\lib\encodings\cp1252.py", line 23, in decode
    return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x8d in position 76843: character maps to <undefined>

Cela se produit lors de la lecture de 'pandas/tests/test_strings.py' Tous les fichiers sont codés en cp1252.

Je voulais exécuter le script pour vérifier quels tests sont encore inachevés pour éviter de dupliquer le travail.

La plupart des NotImplementedError n'ont pas de message spécifique à associer, je sais que cela va à l'encontre de l'objectif, mais est-ce une bonne idée de les changer en pytest.raises(NotImplementedError, match=None) juste pour faire taire le linter ?

Je vais prendre:

  • pandas/tests/tools/test_to_datetime.py
  • pandas/tests/tseries/offsets/test_offsets.py

commencer.

-Kévin

Je suis nouveau dans ce domaine, je vais donc commencer par ceci :

  • pandas/tests/tseries/offsets/test_ticks.py

Bonjour, je suis nouveau dans la contribution. Merci pour l'écriture claire dans le problème. Je commencerai par prendre pandas/tests/generic/test_duplicate_labels.py , et j'en aborderai d'autres si cela fonctionne.

Je vais commencer par pandas/tests/arrays/test_datetimelike.py.
De plus, si vous ne parvenez pas à exécuter python scripts/validate_unwanted_patterns.py -vt="bare_pytest_raises" pandas/tests/ avec succès, essayez
python scripts/validate_unwanted_patterns.py -vt="bare_pytest_raises" pandas/tests/**/*.py place

Le moyen le plus simple de l'exécuter maintenant serait d'ajouter

    -   id: unwanted-patterns-bare-pytest-raises
        name: Check for use of bare use of pytest raises
        language: python
        entry: python scripts/validate_unwanted_patterns.py --validation-type="bare_pytest_raises"
        types: [python]
        files: ^pandas/tests/

à .pre-commit-config.yaml dans la section - repo: local , puis exécutez

pre-commit run unwanted-patterns-bare-pytest-raises --all-files.

J'ai mis à jour le problème avec les fichiers en suspens restants

Je peux prendre ceux-ci :

  • [x] pandas/tests/io/pytables/test_timezones.py
  • [ ] pandas/tests/generic/methods/test_pipe.py
  • [ ] pandas/tests/reshape/merge/test_merge_asof.py
  • [ ] pandas/tests/extension/base/reduce.py
  • [ ] pandas/tests/extension/base/getitem.py
  • pandas/tests/arrays/test_datetimelike.py

Ce sont les 5 premiers de la liste à ce jour.

@marktgraham Si vous n'avez pas encore fait test_datetime.py . S'il vous plaît laissez-le seul car je suis sur le point de faire un PR

@liaoaoyuan97 pas de soucis, je n'ai pas encore touché test_datetimelike.py .

Je prendrai plutôt pandas/tests/extension/base/getitem.py.

validate_unwanted_patterns.py lève une erreur de mon côté

$ python scripts/validate_unwanted_patterns.py -vt="bare_pytest_raises" pandas/tests/
Traceback (most recent call last):
  File "scripts/validate_unwanted_patterns.py", line 479, in <module>
    output_format=args.format,
  File "scripts/validate_unwanted_patterns.py", line 435, in main
    with open(file_path, encoding="utf-8") as file_obj:
IsADirectoryError: [Errno 21] Is a directory: 'pandas/tests/'

Semble être lié à #37419 peut-être ?

J'ai essayé avec l'approche proposée par @MarcoGorelli et

Le moyen le plus simple de l'exécuter maintenant serait d'ajouter

    -   id: unwanted-patterns-bare-pytest-raises
        name: Check for use of bare use of pytest raises
        language: python
        entry: python scripts/validate_unwanted_patterns.py --validation-type="bare_pytest_raises"
        types: [python]
        files: ^pandas/tests/

à .pre-commit-config.yaml dans la section - repo: local , puis exécutez

pre-commit run unwanted-patterns-bare-pytest-raises --all-files.

Est-il judicieux d'ajouter ceci au .pre-commit-config.yaml , puis de mettre à jour les instructions sur ce fil ?

Est-il judicieux d'ajouter ceci au fichier .pre-commit-config.yaml, puis de mettre à jour les instructions sur ce fil ?

Nous l'ajouterons à .pre-commit-config.yaml une fois que toutes les erreurs qu'il soulève seront corrigées, oui

Semble être lié à #37419 peut-être ?

Non, c'est lié à #37379 (c'est à ce moment-là que nous avons déplacé ce script en pré-validation, il n'était donc plus nécessaire qu'il s'exécute sur les répertoires)

Cette page vous a été utile?
0 / 5 - 0 notes