Pandas: [Buen primer número] TST: No permitir pytest.raises desnudos

Creado en 14 ene. 2020  ·  51Comentarios  ·  Fuente: pandas-dev/pandas

Los usuarios finales confían en los mensajes de error para su depuración. Por lo tanto, es importante que nos aseguremos de que aparezcan los mensajes de error correctos en función del error desencadenado.

La idea central es convertir esto:

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

A esto:

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

Puedes leer más sobre pytest.raises aquí .


Nota al margen:

En caso de que el mensaje de error planteado sea un mensaje de error externo (lo que significa que no es específico de los pandas), debe usar external_error_raised lugar de pytest.raises .

el uso de external_error_raised es __exactly__ como pytest.raises la única diferencia es que no pasa el argumento match .

Por ejemplo:

import pandas._testing as tm

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

Ponencias clave:

  • No olvide vincular este problema en su PR, pegue esto
https://github.com/pandas-dev/pandas/issues/30999

en su PR.

  • Por favor comente en qué está planeando trabajar, para que no hagamos el doble de trabajo (no es necesario que me mencione, solo puede declarar en qué está planeando trabajar, solo recuerde verificar si algo ya está tomado).

  • Si un archivo / archivos que deberían estar marcados como "terminado" (como si no hubiera más trabajo por hacer), no está marcado como "terminado", por favor comente haciéndome saber sobre eso (y mencionándome poniendo @MomIsBestFriend en el cuerpo del comentario, así sabré dónde buscar).


Para generar la lista completa usted mismo, puede ejecutar:

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

También puede ejecutarlo en un solo archivo como:

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

Si un archivo contiene un pytest.raises , el script generará lo siguiente:

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

Lo que significa que en pandas/tests/arithmetic/test_numeric.py en línea 553 hay un pytest.raises


La lista actual es:

  • [x] pandas / tests / io / pytables / test_timezones.py
  • [] pandas / tests / generic / métodos / 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 / indexing / 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 / momentos / 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 / métodos / 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 / indexing / 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

NOTA:

La lista puede cambiar a medida que los archivos se mueven / renombran constantemente.


Tomó casi todo del # 23922, que fue originalmente abierto por @gfyoung.

Style Testing good first issue

Todos 51 comentarios

Yo tomaré:

  • [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

Empezaré a trabajar en:

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

@ gdex1 Espero que esto te ayude :)

(Los números representan el número de línea)

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 lista no fue generada por grep -r -e "pytest.raises([a-zA-Z]*)" pandas/tests -l de hecho, fue generada por el script en # 30755 (un tipo de validación llamado bare_pytest_raises ), pondré instrucciones en el cuerpo del problema, una vez se fusiona: sonrisa:

@MomIsBestFriend Ayudaré con:
pandas / tests / base / test_constructors.py
pandas / tests / base / test_ops.py

Puedo encargarme de estos:
@MamáMejor Amiga

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 / plotting / test_backend.py
pandas / tests / plotting / test_boxplot_method.py
pandas / tests / plotting / test_frame.py
pandas / tests / plotting / test_hist_method.py
pandas / tests / plotting / test_series.py
pandas / tests / reductions / test_reductions.py

@MomIsBestFriend hubo bastante discusión en https://github.com/pandas-dev/pandas/issues/23922 a punto de abordar esto. Porque para repetir como dije allí: no creo que debamos afirmar "ciegamente" todos los mensajes de error.

Algunas cosas que se dijeron en ese hilo: limitarlo a mensajes de error internos, limitar la coincidencia a unas pocas palabras clave del mensaje, evitar patrones complicados.

Además, creo que la afirmación de los mensajes de error debería ir de la mano con la verificación real de si es un mensaje de error bueno y claro, y potencialmente mejorarlo.

Sería bueno resumir una lista de puntos de atención de la discusión en el otro tema para poner aquí.

@jorisvandenbossche

@MomIsBestFriend hubo bastante discusión en el # 23922 a punto de abordar esto. Porque para repetir como dije allí: no creo que debamos afirmar "ciegamente" todos los mensajes de error.

Estoy completamente de acuerdo, pero el problema es que los recién llegados no saben qué mensajes de error afirmar y qué mensajes de error no afirmar, si de alguna manera definimos reglas sobre qué mensajes de error afirmar y qué no afirmar, y al mismo tiempo mantener este problema "amigable para principiantes", será genial (en mi opinión).

Además, si planeamos hacer cumplir esto en el CI, necesitamos marcar de alguna manera qué bare pytest raises son "desnudos" a propósito (el comentario de IMO con el estilo de isort: skip es suficiente), y también otros la gente sabrá que un bare pytest raise está desnudo a propósito.

Algunas cosas que se dijeron en ese hilo: limitarlo a mensajes de error internos, limitar la coincidencia a unas pocas palabras clave del mensaje, evitar patrones complicados.

No veo por qué no querríamos probar los mensajes de error internos, ¿podría darnos más detalles?

Veo el punto que señaló en https://github.com/pandas-dev/pandas/issues/23922#issuecomment -458551763, y estoy +1 en eso, pero soy +2 (si tiene algún sentido) en https://github.com/pandas-dev/pandas/issues/23922#issuecomment -458733117 y https://github.com/pandas-dev/pandas/issues/ 23922 # issuecomment -458735169 porque, en

Además, creo que la afirmación de los mensajes de error debería ir de la mano con la verificación real de si es un mensaje de error bueno y claro, y potencialmente mejorarlo.

Totalmente de acuerdo.

Sería bueno resumir una lista de puntos de atención de la discusión en el otro tema para poner aquí.

He leído la conversación en la posición # 23922, pero no lo hice sierra cualquier cosa que vale la pena poner la OMI como una "nota" en el cuerpo de la cuestión, puede usted por favor señalar las cosas que echaba de menos?

Leí la conversación en el n. ° 23922, pero no vi nada que, en mi opinión, valga la pena poner como una "nota" en el cuerpo del problema, ¿pueden señalar cosas que me perdí?

Tampoco veo mucho más que agregar de ese tema.

Estoy completamente de acuerdo, pero el problema es que los recién llegados no saben qué mensajes de error afirmar y qué mensajes de error no afirmar, si de alguna manera definimos reglas sobre qué mensajes de error afirmar y qué no afirmar, y al mismo tiempo mantener este problema "amigable para principiantes", será genial (en mi opinión).

Además, si planeamos hacer cumplir esto en el CI, necesitamos marcar de alguna manera qué aumentos de pytest son "desnudos" a propósito (el comentario de la OMI con el estilo de isort: skip es suficiente), y también para que otras personas sepan que un bare pytest raise está desnudo a propósito.

Estas son, en parte, razones por las que escoger y elegir cuál probar y cuál no probar no es la dirección que preferiría. También agregaría que a veces verificamos cadenas de mensajes de error en bloques except , por lo que los buenos mensajes de error también nos benefician durante el desarrollo.

Además, si estos mensajes "internos" no son tan importantes, ¿por qué tenemos un mensaje de error en primer lugar? Luego, simplemente crearía un ayudante que luego afirme que el mensaje está vacío.

No veo por qué no querríamos probar los mensajes de error internos, ¿podría darnos más detalles?

Entonces dije "límite a los mensajes de error internos", mientras que "interno" puede ser un poco ambiguo ... Quiero decir: mensajes de error que se originan en los propios pandas y, por supuesto, queremos probarlos. Pero quise decir que nosotros (IMO) no deberíamos probar demasiados mensajes de error externos , es decir: mensajes que provienen, por ejemplo, de numpy u otras bibliotecas. Numpy puede cambiarlos, y luego nuestras pruebas comienzan a fallar debido a un cambio cosmético en numpy (y esto no es hipotético, creo que sucedió la semana pasada).

Ahora, utilicé "interno" en un contexto diferente en https://github.com/pandas-dev/pandas/pull/30998#discussion_r366726966. Allí, me refiero a un mensaje de error interno, orientado al desarrollador, que nunca debería plantearse al usuario. En mi opinión, no es importante probarlos exactamente con el mensaje de error.

Veo el punto que señaló en el # 23922 (comentario), y estoy +1 en eso, pero estoy +2 (si eso tiene algún sentido) en el # 23922 (comentario) y # 23922 (comentario) porque En mi opinión, el beneficio es mayor que el costo.

Pongamos el comentario de @simonjayhawkins al que

Estoy trabajando en la suposición, tal vez incorrectamente, de que será beneficioso para

  1. identificar pruebas que se pueden parametrizar
  2. identificar las pruebas que deben dividirse
  3. mejor comprensión del modo de falla probado
  4. agregar indirectamente más documentación a las pruebas
  5. identificar dónde los mensajes de error podrían ser más consistentes
  6. identificar pruebas que son redundantes
  7. ayudar a mejorar los mensajes de error
  8. identificar las pruebas que están pasando actualmente por un motivo incorrecto.

Todas esas son cosas útiles, estoy totalmente de acuerdo. Pero eso no es simple, y si queremos sacar esas cosas de este problema, entonces este problema no es para principiantes. Por supuesto, los principiantes no necesitan hacer todas esas cosas a la vez, pero todavía tengo la sensación de que esos RP que agregan afirmaciones suelen estar bastante cerca de "agregar ciegamente el mensaje de error actual a la llamada de pytest.raises" sin hacer nada. más (los puntos anteriores).

Además, si los puntos anteriores son los que hacen que este ejercicio sea útil, creo que hay instrucciones más concretas sobre esto que es útil poner al principio de este tema.


Para ser claros, estoy a favor de mejores mensajes de error y mejores pruebas que afirmen que tenemos y mantenemos esos mensajes de error en buen estado. Pero también tenemos tiempo limitado, y cada RP requiere tiempo y esfuerzo para hacer y revisar, y la pregunta es dónde es mejor invertir el esfuerzo.
En mi opinión, sería más útil centrarse en "corregir los aumentos de pytest" en lugar de centrarse en "mejorar los mensajes de error" (y al hacer esto, probarlos mejor).

Además, si los puntos anteriores son los que hacen que este ejercicio sea útil, creo que hay instrucciones más concretas sobre esto que es útil poner al principio de este tema.

Podría tener sentido crear un problema mayor para rastrearlos (otros problemas que vale la pena incluir en un problema de este tipo son https://github.com/pandas-dev/pandas/issues/19159 y https://github.com/pandas- dev / pandas / issues / 21575).

Esta parte en sí misma es autónoma y muy accesible para principiantes.

@gfyoung ¿cómo se relacionan los temas que vincula con esta discusión?

Se relacionan con el comentario que introdujo explícitamente de @simonjayhawkins.

31072 contiene la única coincidencia que falta en stata.py

Como digo aquí https://github.com/pandas-dev/pandas/pull/31091#issuecomment -575422207 Estoy con la idea de @jorisvandenbossche , que no

Si realmente no queremos probar ciertos mensajes de error (podría optar por los externos para ser justos), creo que deberíamos crear una función auxiliar como esta:

~ pitóndef external_error_raised (excepción_esperada):return pytest.raises (excepción_esperada, coincidencia = Ninguna)~

Esto nos dejará en claro para nosotros en el futuro que se trata de un error que no es pandas, y el match=None sirve para apaciguar cualquier verificación que desarrollemos para los aumentos de pytest .

Si realmente no queremos probar ciertos mensajes de error (podría optar por los externos para ser justos), creo que deberíamos crear una función auxiliar como esta:

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

Esto nos dejará claro a nosotros mismos en el futuro que se trata de un error que no es pandas, y el match=None sirve para apaciguar cualquier verificación que desarrollemos para los aumentos de pytest .

+1 en eso.

Realmente me gusta esa idea, ¿podemos convertirla en una convención para nuestras pruebas?

Que si una función está probando si una función / método está generando un error, y el error es un error externo, simplemente colocamos match=None en "pytest.raises```.

¿Podemos convertirlo en una convención para nuestras pruebas?

Con eso me refiero a poner una sección en la guía Contribución .

Que si una función está probando si una función / método está generando un error, y el error es un error externo, simplemente colocamos match = None en "pytest.raises```.

Preferiría la función de ayuda ya que entonces no tendrías que pensar en agregarla. Además, el nombre del ayudante es mucho más claro en cuanto a por qué lo estamos haciendo.

Si realmente no queremos probar ciertos mensajes de error (podría optar por los externos para ser justos), creo que deberíamos crear una función auxiliar como esta:

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

Esto nos dejará claro a nosotros mismos en el futuro que se trata de un error que no es pandas, y el match=None sirve para apaciguar cualquier verificación que desarrollemos para los aumentos de pytest .

@gfyoung, ¿dónde recomiendas poner esta función de ayuda? (¿como si en qué archivo?)

pandas._testing

Hola,

Me gustaría trabajar en:

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

Hola, me gustaría trabajar en:

pandas / tests / arithmetic / test_period.py
pandas / tests / arithmetic / test_timedelta64.py

Hola a todos, me quedo con lo siguiente:

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 este ya está hecho, pero no está marcado como hecho:
pandas / tests / arithmetic / test_numeric.py

ACTUALIZAR

@MomIsBestFriend estos también:
pandas / tests / arithmetic / test_period.py
pandas / tests / arrays / test_integer.py
pandas / tests / arrays / test_period.py

Estos se incluyen en # 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 / métodos / test_explode.py
pandas / tests / frame / métodos / test_isin.py
pandas / tests / frame / métodos / test_quantile.py
pandas / tests / frame / métodos / test_round.py
pandas / tests / frame / methods / test_sort_values.py
pandas / tests / frame / métodos / test_to_dict.py

Yo tomaré

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

@MamáMejor Amiga
Estos se hacen sin la marca:

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

pandas / tests / indexes / datetimes / test_tools.py no existe

Lo haré:

  • 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

Actualicé la publicación original, ahora que hay un script para detectar pytest raises , he incluido instrucciones sobre cómo usarlo, si alguien todavía tiene preguntas, puede preguntar :)

Yo tomaré

pandas / tests / arithmetic / 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 / scalar / timestamp / test_timezones.py
pandas / tests / scalar / timestamp / test_unary_ops.py

Parece que todas las pruebas en pandas / tests / scalar / timestamp / ya están arregladas.

$ 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 => falta.

estoy tomando
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 => sin problema
pandas / tests / scalar / timestamp / test_comparisons.py => sin problema
pandas / tests / scalar / timestamp / test_constructors.py => no hay problema
pandas / tests / scalar / timestamp / test_timezones.py => sin problema
pandas / tests / scalar / timestamp / test_unary_ops.py => no hay problema

pandas / tests / arrays / test_boolean.py => falta.

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 => sin problema
pandas / tests / groupby / test_timegrouper.py => sin problema

pandas / tests / indexes / categorical / test_category.py => no hay problema
pandas / tests / indexes / common.py # 33144
pandas / tests / indexes / datetimelike.py # 33144

pandas / tests / indexes / interval / test_astype.py => todas las pruebas afectadas están marcadas para ser xfailed, ¿todavía tenemos que arreglarlo? ¿Cómo?

pandas / tests / indexes / multi / test_compat.py # 33144
pandas / tests / indexes / multi / test_duplicates.py => sin problema
pandas / tests / indexes / multi / test_format.py => archivo no encontrado.
pandas / tests / indexes / multi / test_reshape.py # 33144
pandas / tests / indexes / multi / test_setops.py => sin problema
pandas / tests / indexes / multi / test_sorting.py # 33144

@ sumanau7, ¿

Hecho con

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

Estoy trabajando con

pandas / tests / indexes / rangos / test_constructors.py
pandas / tests / indexes / rangos / test_range.py
pandas / tests / indexing / multiindex / test_chaining_and_caching.py
pandas / tests / indexing / multiindex / test_partial.py
pandas / tests / series / indexing / test_alter_index.py
pandas / tests / arrays / boolean / test_function.py

Trabajando en:

pandas/tests/reshape/merge/test_multi.py

Yo tomaré:
pandas / tests / window / momentos / test_moments_ewm.py
pandas / tests / window / momentos / 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

También tomaré:

  • 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 / métodos / test_interpolate.py
  • pandas / tests / frame / métodos / test_replace.py
  • pandas / tests / frame / test_query_eval.py

Hola,
Soy un desarrollador nuevo del proyecto y me gustaría ayudar con esto. ¿Cuál de las pruebas restantes es mejor para un principiante?

Gracias,
Kevin

Hola,
Soy un desarrollador nuevo del proyecto y me gustaría ayudar con esto. ¿Cuál de las pruebas restantes es mejor para un principiante?

Gracias,
Kevin

Bienvenido: no creo que ninguno de estos sea más fácil o más difícil que otros, cualquiera sería un buen lugar para comenzar.

Recibo un error al ejecutar el 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>

Ocurre al leer 'pandas / tests / test_strings.py' Todos los archivos están codificados como cp1252.

Quería ejecutar el script para verificar dos veces qué pruebas aún están sin terminar para evitar duplicar el trabajo.

La mayoría de los NotImplementedError s no tienen un mensaje específico para coincidir, sé que frustra el propósito, pero ¿es una buena idea cambiarlos a pytest.raises(NotImplementedError, match=None) solo para silenciar el linter? ?

Yo tomaré:

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

para comenzar.

-Kevin

Soy nuevo en esto, así que comenzaré con esto:

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

Hola, soy nuevo en contribuir. Gracias por la redacción clara del problema. Comenzaré tomando pandas/tests/generic/test_duplicate_labels.py , y abordaré algunos más si funciona.

Tomaré pandas / tests / arrays / test_datetimelike.py como comienzo.
Además, si no puede ejecutar python scripts/validate_unwanted_patterns.py -vt="bare_pytest_raises" pandas/tests/ correctamente, intente
python scripts/validate_unwanted_patterns.py -vt="bare_pytest_raises" pandas/tests/**/*.py lugar

La forma más sencilla de ejecutarlo ahora sería agregar

    -   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/

a .pre-commit-config.yaml en la sección - repo: local , y luego ejecute

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

Actualicé el problema con los archivos pendientes restantes.

Puedo tomar estos:

  • [x] pandas / tests / io / pytables / test_timezones.py
  • [] pandas / tests / generic / métodos / 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

Estos son los 5 primeros de la lista a día de hoy.

@marktgraham Si aún no ha hecho test_datetime.py . Por favor déjelo en paz ya que estoy a punto de hacer un PR.

@ liaoaoyuan97 no te preocupes, todavía no he tocado test_datetimelike.py .

En su lugar, tomaré pandas / tests / extension / base / getitem.py.

validate_unwanted_patterns.py genera un error de mi parte

$ 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/'

¿Parece estar relacionado con el # 37419 quizás?

Probé con el enfoque propuesto por

La forma más sencilla de ejecutarlo ahora sería agregar

    -   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/

a .pre-commit-config.yaml en la sección - repo: local , y luego ejecute

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

¿Tiene sentido agregar esto al .pre-commit-config.yaml y luego actualizar las instrucciones en este hilo?

¿Tiene sentido agregar esto a .pre-commit-config.yaml y luego actualizar las instrucciones en este hilo?

Lo agregaremos a .pre-commit-config.yaml una vez que se solucionen todos los errores que genera, sí

¿Parece estar relacionado con el # 37419 quizás?

No, está relacionado con # 37379 (que es cuando movimos este script a pre-commit, por lo tanto, ya no era necesario que se ejecutara en directorios)

¿Fue útil esta página
0 / 5 - 0 calificaciones