`generate_dataset()` ignores `unique=True` for coherent presets (email, name, city, ...)
I maintainer di solito rispondono entro 1 giorno
Una pull request collegata è già stata integrata.
- #447 di @rich-iannone — integrata
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 69/100
Direzione di ricerca
Start with _generate_single_country() and _generate_column_with_row_context() in pointblank/generate/generators.py, then compare their handling of field.unique with generate_column() and _generate_unique_values(). Reproduce the duplicates using the issue’s script and presets. Done means coherent presets either produce the requested number of unique values or raise a clear error when that cannot be achieved.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Description
string_field(preset=..., unique=True) returns duplicate values, without any error or warning, when the preset belongs to one of the coherent groups (person, address, business, credit card). Presets outside those groups (e.g. url, uuid4) are unique as expected.
Reproducer
import pointblank as pb
for preset in ["email", "name", "city", "user_name", "url", "uuid4"]:
schema = pb.Schema(x=pb.string_field(preset=preset, unique=True))
df = pb.generate_dataset(schema, n=2000, seed=42, country="US")
print(f"{preset:10} distinct={df['x'].n_unique()} / 2000")
Output:
email distinct=1998 / 2000
name distinct=1946 / 2000
city distinct=156 / 2000
user_name distinct=1994 / 2000
url distinct=2000 / 2000
uuid4 distinct=2000 / 2000
For city the constraint cannot be satisfied at all with the available values, but no error is raised. On the regular path, _generate_unique_values() would raise "Unable to generate 2000 unique values ...".
Cause
In pointblank/generate/generators.py, _generate_single_country() sends every column whose preset is in coherent_presets to _generate_column_with_row_context() (line 666 on main at 4510729):
if needs_coherence and preset in coherent_presets:
data[col_name] = _generate_column_with_row_context(field, config, shared_locale_gen)
else:
data[col_name] = generate_column(field, config)
generate_column() checks field.unique and uses _generate_unique_values(), but _generate_column_with_row_context() (line 533) generates one value per row and never looks at field.unique.
Expected behavior
Either the values are unique, or an error is raised when uniqueness cannot be guaranteed, as on the regular path. Since coherent values are built per row from a shared person/location context, a full fix may need retries at the row-context level; raising a clear error (or at least a warning) when unique=True is combined with a coherent preset would already avoid silently returning invalid data.
Environment
- pointblank 1.0.1 (also reproduced on 0.25.0)
- polars 1.38.1
- Python 3.12.7
- Linux
Found while using pointblank as the generation engine of fauxdata.
- Lingua principale
- Python
- Stelle
- 493
- Fork
- 34
- Merge medio
- 13h 39m
- PR unite (30g)
- 16
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di posit-dev/pointblank
-
Type: ★ Enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
posit-dev/pointblank#379 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 48/100
posit-dev/pointblank#395 ·
I maintainer di solito rispondono entro 1 giorno
-
Type: ★ Enhancement
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
posit-dev/pointblank#394 ·
I maintainer di solito rispondono entro 1 giorno
-
ibis.pyspark col_vals_in_set produces invalid SQLForse di nuovo libera @rich-iannone l’ha presa 296 giorni fa e non c’è nessuna pull request aperta. ApertaDifficulty: [2] Intermediate Effort: [3] High Priority: [3] High Type: ☹︎ Bug
posit-dev/pointblank#335 · 1 commento · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
YAML value column selectorForse di nuovo libera @rich-iannone l’ha presa 315 giorni fa e non c’è nessuna pull request aperta. ApertaDifficulty: [2] Intermediate Effort: [3] High Priority: [3] High Type: ☹︎ Bug
posit-dev/pointblank#333 · 1 commento · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di posit-dev/pointblank
Issue simili
-
good first issue
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
btclib-org/btclib-node#1955 ·
I maintainer di solito rispondono entro 1 giorno
-
documentation v0.9.2
Difficoltà 2/5 Mezza giornata Idoneità per principianti 72/100
khuisman/mcp-gee-sweet#1033 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
ossf/cve-bin-tool#5966 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
I maintainer di solito rispondono entro 2 giorni
-
write_iceberg ignores the table's write.parquet.compression-codec propertyForse già presa @YuangGao l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
Eventual-Inc/Daft#7606 ·
I maintainer di solito rispondono entro 1 giorno