Usikker forskning: Python-script gav forskellige resultater afhængig af styresystem

Illustration: Selenit, BigStock
Et Python-script brugt i over hundrede forskningsprojekter har virket forskelligt afhængigt af, hvilket operativsystem scriptet er kørt på.

Hundredevis af kemi-forskningsartikler kan vise sig at være upræcise, viser et studie, der netop er udgivet i Organic Letters.

Problemet er, at et meget anvendt script ved navn Willoughby-Hoye sorterede forskelligt og dermed gav forskellige resultater afhængigt af, hvilket operativsystem du brugte.

For både Windows og nogle udgaver af macOS (Mavericks) gav scriptet det forventede resultat, mens det drillede i Ubuntu og andre versioner af macOS.

Forskelligheden skyldes, at koden afhænger af systemkald, der kan være forskellige fra operativsystem til operativsystem, hvilket ikke er hensigtsmæssigt.

Patrick Willoughby, der har lagt navn til det oprindelige script, har efterfølgende skrevet på Twitter:

»Da jeg skrev scriptet for seks år siden, kunne styresystemet godt finde ud af at sortere korrekt. Rui og Williams har tilføjet den nødvendige sorteringskode og har tilføjet en funktion, der sikrer og udregninger sker korrekt. Godt gået!«

Han fortæller overfor The Register, at han forventer, at hans script er brugt i 150-160 forskningsprojekter.

Tips og korrekturforslag til denne historie sendes til tip@version2.dk
Kommentarer (14)
sortSortér kommentarer
  • Ældste først
  • Nyeste først
  • Bedste først
Palle Simonsen

Er historien her ikke bare at man skal være varsom med at læne sig op ad sideeffekter

Jeg vil sige det er et godt eksempel på hvad der kan ske, når man forlader sig på 'citizen programming'.

Fra artiklen:

def read_gaussian_outputfiles():  
    list_of_files = []  
    for file in glob.glob('*.out'):  
        list_of_files.append(file)  
    return list_of_files

The glob module finds all the pathnames matching a specified pattern according to the rules used by the Unix shell, although results are returned in arbitrary order

Man må formode (håbe :) at en professionel Python programmør ville have vist dette. Og ja, som der skrives ovenfor, hvis sortering er vigtig så lav en testcase for det.

  • 5
  • 0
Søren Pilgård

Første sætning af dokumentationen af Pythons glob modul:

The glob module finds all the pathnames matching a specified pattern according to the rules used by the Unix shell, although results are returned in arbitrary order.

I pathlib modulet nævner de godt nok ikke noget om rækkefølgen, men alle eksemplerne starter med at sortere resultatet.

  • 5
  • 0
Søren Pilgård

Hele funktionen tyder generelt på at de ikke er super kyndige i python.
funktionen kunne bare have været:

def read_gaussian_outputfiles():  
    return glob.glob("*.out")

Der er ingen grund til at løbe over listen for at lave en ny liste. I det mindste kunne man have brugt en list comprehension.

  • 2
  • 0
Sune Marcher

Sorteringen er vel ikke kun operativsystem-afhængigt, men nok også filsystems-afhængig?

Hvis hverken OS eller sprogets standard library laver sortering, vil der vel være forskel på om du lister filer fra et filsystem med btree indexering, eller et "dumt" fs som fx FAT?

  • 1
  • 0
Emil Kampp

Jeg synes måske kritikken her i kommentar sporet rammer ved siden af.

Kritikken går meget på at der ikke bliver overholdt x, y, og z bedt practices, som man ville kende, hvis man var en programmør.

Han er jo netop ikke programmør, han er kemiker. At skyde skylden på ham, for andres lemfældige brug af hans kode synes jeg rammer ved siden af.

I stedet for at kritisere ham for at skrive et script til sig projekt (som for resten virkede fint dengang), så skulle man måske tage et konstruktivt, kritisk syn på processen for at vælge scripts til at bearbejde data til videnskabelige artikler.

Måske man kunne indføre peer review på dette også, eller måske noget helt andet.

  • 3
  • 0
Log ind eller Opret konto for at kommentere