View a markdown version of this page

Registro delle modifiche del motore WDL per HealthOmics - AWS HealthOmics

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Registro delle modifiche del motore WDL per HealthOmics

Questa pagina contiene il registro delle modifiche per il motore WDL sia per la modalità WDL strict che per la modalità WDL lenient. Ogni sezione riassume le nuove funzionalità, i miglioramenti e le deprecazioni.

Nuove funzionalità e miglioramenti

La tabella seguente elenca le nuove funzionalità e i miglioramenti per il motore WDL attivo. HealthOmics

Data di modifica Cambia nome Cambia la descrizione Operazione consigliata
22 settembre 2026 Gestione coerente delle terminazioni di riga CRLF

HealthOmics taglia le Windows-style terminazioni di riga in modo coerente tra e read_lines() read_tsv()read_map(), adattando il comportamento degli strumenti Linux standard. \r\n

Nessuna. Non sono richieste modifiche al flusso di lavoro.
22 settembre 2026

zip()cross(), e read_tsv() ora gestisci correttamente gli input di tipo misto. Le soluzioni alternative manuali possono essere rimosse.

Le funzioni integrate e read_tsv() ora zip() deducono correttamente cross() i tipi dei valori restituiti. Nelle versioni precedenti, queste funzioni potevano generare errori di tipo imprevisti quando si combinavano tipi misti (ad esempio Array[String] e Array[Int] in una zip() chiamata), richiedendo soluzioni tipografiche manuali nel codice WDL.

Se il flusso di lavoro include cast di tipo esplicito aggiunti per ovviare agli errori di tipo provenienti dazip(), o, cross() è possibile rimuoverli. read_tsv() HealthOmics ora deduce automaticamente i tipi corretti.

La conservazione dei type cast esistenti non causerà errori né influirà sul comportamento del flusso di lavoro.

22 settembre 2026

basename(path, "")fix restituisce il nome del file anziché una stringa vuota.

basename(path, "")ora restituisce il nome del file.

Ad esempio, basename("/path/to/file.txt", "") restituirà "file.txt" invece di una stringa vuota.

Cerca le basename(x, "") chiamate nei tuoi flussi di lavoro. Se ne esistono, verifica che la restituzione del nome del file sia il comportamento previsto.

22 settembre 2026

Float-key rilevamento delle collisioni in collect_by_key()

collect_by_key()in precedenza Float le chiavi erano considerate identiche se corrispondevano a 6 cifre decimali. Valori distinti come 0.0000001 e 0.0000002 sono stati uniti in un unico gruppo.

Dalla data di modifica in poi, HealthOmics rileva questa collisione al momento della creazione del flusso di lavoro e fallisce il flusso di lavoro con un chiaro errore nel campo GetWorkflow StatusMessage invece di scartare i risultati.

Un flusso di lavoro precedentemente completato con successo durante l'unione di Float chiavi distinte ora avrà esito negativo e si verificherà un errore di rilevamento delle collisioni come "statusMessage": "(collect_by_key_test.wdl Ln 17 Col 47) No such function: collect_by_key\n Map[Float, Array[String]] collected = collect_by_key(pairs_with_collision)"

È possibile utilizzare uno dei tre approcci:

  • Usa String le chiavi: cambia Array[Pair[Float, String]] Array[Pair[String, String]] e cita i tuoi valori chiave. Le chiavi a forma di stringa sono sempre distinte ed eliminano completamente il rischio di collisione.

  • Usa Int le chiavi: modifica il tipo di chiave per Array[Pair[Int, String]] moltiplicare i valori float per una potenza di 10 per preservare la precisione richiesta come numeri interi.

  • Se Float le chiavi sono inevitabili, arrotondale prima con una precisione costante per assicurarti che ogni chiave sia veramente distinta e che nessun dato venga unito silenziosamente. Normalizza ogni chiave usando prima di passare a. round(value * 1000000.0) / 1000000.0 collect_by_key()

Prossimamente (preavviso di 60 giorni dal 22 settembre 2026)

La divisione float (/) restituirà numeri decimali, non numeri interi troncati.

Comportamento attuale: l'/operatore sugli operandi restituisce il numero intero più vicino. Float Ad esempio, 5.0 / 2 restituisce2.0, no. 2.5 Se entrambi gli operandi lo sono Int (ad esempio,5 / 2), il risultato restituisce 2.

Modifica imminente (30 novembre 2026): la divisione float sugli operandi float verrà restituita con una precisione decimale di 16. Dopo questa data, 5.0 / 2.0 tornerà2.5, restituirà invece un 150.0 / 7.0 valore intero. 21.428...

La precisione del risultato dipende da come viene utilizzato: se il tipo di risultato èFloat, il valore viene calcolato con precisione fino a 16 cifre decimali; se il risultato viene forzato a, viene invece formattato a 6 String cifre decimali.

Ad esempio, restituirà e 5.0 / 2.0 tornerà 21.4285714285714 come a2.5, ma se 150.0 / 7.0 interpolato in aFloat. 21.428571 String

Int / Intespressioni quali non 5 / 2 sono interessate e continueranno a restituire 2.

Per garantire risultati interi indipendentemente dalla versione del motore, inserisci la divisione float in or: floor() ceil()

  • floor(5.0 / 2.0)→ restituisce sempre 2

  • ceil(5.0 / 2.0)→ ritorna sempre 3

Se il flusso di lavoro prevede intenzionalmente risultati decimali dalla divisione in virgolette, non sono necessarie modifiche. L'imminente comportamento di divisione a partire dal 30 novembre 2026 restituirà anche cifre decimali.

Nota: 5/2 restituirà comunque 2 poiché l'/operatore viene applicato ai numeri interi.