natural_comparison_key: faster sort keys for names without digits
Los mantenedores suelen responder en 1 día
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 76/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- python
- Área
- performance
Línea de trabajo
Empieza con natural_comparison_key en src/graphql/pyutils/natural_compare.py y lee tests/pyutils/test_natural_compare.py. Comprueba que la ruta rápida propuesta y la asignación de segmentos conserven las claves existentes y, después, ejecuta el archivo de pruebas indicado. La tarea estará terminada cuando las pruebas pasen y la optimización mantenga las claves sin cambios.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
natural_comparison_key in src/graphql/pyutils/natural_compare.py runs for every name when lexicographic_sort_schema sorts a schema. It is also used by suggestion_list and sort_value_node.
Problem
The function always splits the name with a regex. Then it walks the parts with zip and itertools.cycle inside a generator. Most GraphQL names (userName, createdAt) have no digits. For these names, this work always gives the same one-item tuple (name,).
Numbers
I measured the current code and a small change with timeit (CPython 3.12, Linux). The table shows the time to compute the keys for each list of names.
| Situation | Current | Proposed | Change |
|---|---|---|---|
| GitHub schema names (3323 names) | 2.11 ms | 0.34 ms | 84% faster |
Letters only, userName (5000 names) |
3.00 ms | 0.38 ms | 88% faster |
Underscore names, USER_NAME (5000 names) |
3.09 ms | 1.83 ms | 41% faster |
Names with numbers, field12x3 (5000 names) |
5.61 ms | 3.72 ms | 34% faster |
Proposed fix
Return (key,) early when key.isalpha() is true, because such a name cannot contain a decimal digit. For other names, keep the regex split and replace the digit parts in one slice assignment instead of the zip/cycle generator. The keys stay exactly the same, and the existing tests in tests/pyutils/test_natural_compare.py pass.
Environment
- graphql-core
mainat 1d505c1 - CPython 3.12, Linux x86_64
- Lenguaje dominante
- Python
- Estrellas
- 534
- Forks
- 159
- Merge medio
- 1 d 18 h
- PR fusionados (30 d)
- 9
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Sin guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de graphql-python/graphql-core
-
collect_fields spends extra time on selections without directivesPosiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
graphql-python/graphql-core#315 ·
Los mantenedores suelen responder en 1 día
-
is_printable_as_block_string checks each character in a Python loopPosiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 83/100
graphql-python/graphql-core#312 ·
Los mantenedores suelen responder en 1 día
-
Make is_awaitable faster for values that are not awaitablePosiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
graphql-python/graphql-core#308 ·
Los mantenedores suelen responder en 1 día
-
assert_name checks each character in a Python generatorPosiblemente ocupada @swayamdudhela la tomó hace 2 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
graphql-python/graphql-core#304 · 4 comentarios ·
Los mantenedores suelen responder en 1 día
-
coerce_input_literal spends extra time on type checks and non-null recursionPosiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
graphql-python/graphql-core#302 ·
Los mantenedores suelen responder en 1 día
Todos los issues de graphql-python/graphql-core
Issues similares
-
`destroy` sans terminal répond « Aborted. » au lieu de réclamer `--yes` comme `clean` et `reset`Abiertobug
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
stephrobert/dsoxlab#354 ·
Los mantenedores suelen responder en 1 día
-
hardware help wanted testing
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 77/100
jasonacox/pypowerwall#472 ·
Los mantenedores suelen responder en 1 día
-
[Bug]: DoubleMLRDDData accepts a score_col that is no data column (as in its docstring example); the running variable then becomes a covariate and RDFlex failsPosiblemente ocupada @vrjdev la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
DoubleML/doubleml-for-py#455 ·
Los mantenedores suelen responder en 1 día
-
[Bug]: Python mod.Box[T] annotation gets a false generic_arg edge that replaces the parameter_type one ('is' on tree-sitter nodes)Posiblemente ocupada @rohit-jsfreaky la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
Graphify-Labs/graphify#5110 · 1 comentario ·
Los mantenedores suelen responder en 2 días