Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Source file h5.ml
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499# 1 "h5.cppo.ml"openBigarrayopenHdf5_rawletescapes=leti=tryString.indexs'\\'withNot_found->-1inletj=tryString.indexs'/'withNot_found->-1inifi=-1&&j=-1thenselsebeginletlen=String.lengthsinletbuf=Buffer.create(len+16)infori=0tolen-1doletc=String.getsiinifc=='\\'thenbeginBuffer.add_charbuf'\\';Buffer.add_charbuf'\\'endelseifc=='/'thenbeginBuffer.add_charbuf'\\';Buffer.add_charbuf'-'endelseBuffer.add_charbufcdone;Buffer.contentsbufendletstring_containssc=leti=ref0inletlen=String.lengthsinwhile!i<len&&String.unsafe_gets!i<>cdoincridone;!i<lenletunescapes=ifstring_containss'\\'thenbeginletlen=String.lengthsinletpos=ref0inletbuf=Buffer.createleninwhile!pos<lendoletc=String.gets!posinifc=='\\'thenbeginincrpos;letc=String.gets!posinBuffer.add_charbuf(ifc='-'then'/'elsec)endelseBuffer.add_charbufc;incrposdone;Buffer.contentsbufendelseslet()=H5_raw.init()letdefault_get_setinit=letref=refinitin(fun()->!ref),(funv->ref:=v)letdefault_deflate,set_default_deflate=default_get_set6letdefault_split,set_default_split=default_get_setfalsetypet=|DatasetofHid.t|FileofHid.t|GroupofHid.tlethid=function|Datasetd->d|Filef->f|Groupg->gletdatasetd=matchH5i.get_typedwith|H5i.Type.DATASET->Filed|_->raiseH5i.Failletfilef=matchH5i.get_typefwith|H5i.Type.FILE->Filef|_->raiseH5i.Failletgroupg=matchH5i.get_typegwith|H5i.Type.GROUP->Groupg|_->raiseH5i.Failleth5tx=letopenH5iinletopenTypeinmatchget_typexwith|FILE->Filex|GROUP->Groupx|DATASET->Datasetx|_->raiseFailtypeopen_=?meta_block_size:int->?split:bool->string->tletopen_(open_:string->?fapl:Hid.t->H5f.Acc.tlist->Hid.t)acc=fun?meta_block_size?(split=default_split())name->letfapl=H5p.createFILE_ACCESSinbeginmatchmeta_block_sizewith|None->()|Somemeta_block_size->H5p.set_meta_block_sizefaplmeta_block_sizeend;ifsplitthenbeginH5p.set_fapl_splitfapl"-m.h5""-r.h5";(* Warm up metadata in the cache *)ifSys.file_exists(name^"-m.h5")thenletcommand="cat "^name^"-m.h5 > /dev/null &"inifSys.commandcommand<>0thenfailwith(Printf.sprintf"Error executing command \"%s\""command)end;letresult=open_name~faplaccinH5p.closefapl;Fileresultletcreate_trunc:open_=open_(funname?faplaccs->H5f.createname?faplaccs)H5f.Acc.([TRUNC])letopen_rdonly=open_H5f.open_H5f.Acc.([RDONLY])letopen_rdwr=open_H5f.open_H5f.Acc.([CREAT;RDWR])letopen_grouptname=letname=escapenameinlett=hidtinGroup(ifname="."||H5l.existstnamethenH5g.open_tnameelseH5g.createtname)letopen_datasettname=Dataset(H5d.open_(hidt)(escapename))letclose=function|Datasetd->H5d.closed|Filef->H5f.closef|Groupg->H5g.closegletwith_grouptnamef=lett=open_grouptnameinletr=ftincloset;rletflusht=H5f.flush(hidt)H5f.Scope.LOCALletget_namet=H5f.get_name(hidt)|>unescapeletexiststname=H5l.exists(hidt)(escapename)letdeletetname=H5l.delete(hidt)(escapename)letls?(index=H5_raw.Index.NAME)?(order=H5_raw.Iter_order.NATIVE)t=letlinks=ref[]inlet_=H5l.iterate(hidt)indexorder(fun_l_()->links:=unescapel::!links;H5_raw.Iter.CONT)()inList.rev!linksletcopy~src~src_name~dst~dst_name=H5o.copy(hidsrc)(escapesrc_name)(hiddst)(escapedst_name)letrecmerge~src~dst~on_duplicatepath=let_=H5l.iteratesrcH5_raw.Index.NAMEH5_raw.Iter_order.NATIVE(fun_name_()->ifH5l.existsdstnamethenbeginletsrc=H5o.open_srcnameinletdst=H5o.open_dstnameinbeginmatchH5i.get_typesrc,H5i.get_typedstwith|t,t'whent<>t'->invalid_arg(Printf.sprintf"Object %s not of the same type in source and destination"name)|H5i.Type.FILE,_|H5i.Type.GROUP,_->merge~src~dst~on_duplicate(name::path)|H5i.Type.DATASET,_->beginmatchon_duplicatewith|`Skip->()|`Raise->letb=Buffer.create64inBuffer.add_stringb"H5.merge: duplicate dataset at ";List.iter(funs->Buffer.add_stringbs;Buffer.add_stringb"/")(List.revpath);Buffer.add_stringbname;failwith(Buffer.contentsb)|`Callf->f(List.rev(name::path))end|H5i.Type.DATATYPE,_|H5i.Type.DATASPACE,_|H5i.Type.ATTR,_|H5i.Type.REFERENCE,_|H5i.Type.VFL,_|H5i.Type.GENPROP_CLS,_|H5i.Type.GENPROP_LST,_|H5i.Type.ERROR_CLASS,_|H5i.Type.ERROR_MSG,_|H5i.Type.ERROR_STACK,_|H5i.Type.NTYPES,_->invalid_arg(Printf.sprintf"Unhandled object type %d for the object %s"(Obj.magic(H5i.get_typesrc))name)end;H5o.closesrc;H5o.closedstendelseH5o.copysrcnamedstname;H5_raw.Iter.CONT)()in()letmerge~src~dst~on_duplicate=merge~src:(hidsrc)~dst:(hiddst)~on_duplicate[]letcreate_hard_link~obj~obj_name~link~link_name=H5l.create_hard(hidobj)(escapeobj_name)(hidlink)(escapelink_name)letcreate_soft_link~target_path~link~link_name=H5l.create_softtarget_path(hidlink)(escapelink_name)letcreate_external_linkt~target_file_name~target_obj_name~link_name=H5l.create_externaltarget_file_name(escapetarget_obj_name)(hidt)(escapelink_name)letwrite_datawritetdatatypedimsname?(deflate=6)data=letdataspace=H5s.create_simpledimsinletdcpl=matchdeflatewith|0->None|deflate->letdcpl=H5p.createH5p.Cls_id.DATASET_CREATEinH5p.set_chunkdcpldims;H5p.set_deflatedcpldeflate;Somedcplinletdataset=H5d.create(hidt)(escapename)datatype?dcpldataspaceinwritedatasetdatatypeH5s.allH5s.all?xfer_plist:Nonedata;H5d.closedataset;H5s.closedataspace;matchdcplwith|None->()|Somedcpl->H5p.closedcplletread_datareadexpected_datatypecreateverifytdata?xfer_plistname=lethid=hidtinletdataset=H5d.open_hid(escapename)inletdatatype=H5d.get_typedatasetinifnot(H5t.equalexpected_datatypedatatype)theninvalid_arg"Unexpected datatype";letdataspace=H5d.get_spacedatasetinletdims,_=H5s.get_simple_extent_dimsdataspaceinletdata=matchdatawith|Somedata->verifydatadims|None->createdimsinreaddatasetdatatypeH5s.allH5s.all?xfer_plistdata;H5s.closedataspace;H5t.closedatatype;H5d.closedataset;dataletwrite_uint8_array1tname?deflate(a:(char,int8_unsigned_elt,_)Array1.t)=write_dataH5d.write_bigarraytH5t.native_b8[|Array1.dima|]name?deflate(genarray_of_array1a)letwrite_stringtname?deflate(a:string)=write_dataH5d.write_stringtH5t.c_s1[|String.lengtha|]name?deflatealetwrite_string_arraytname?deflate(a:stringarray)=letdatatype=H5t.copyH5t.c_s1inH5t.set_sizedatatypeH5t.variable;write_dataH5d.write_string_arraytdatatype[|Array.lengtha|]name?deflatea;H5t.closedatatypemoduletypeFloat_arg=sigtypefloat_eltvalh5t:Hid.tvalkind:(float,float_elt)kindendmoduleMake_float(F:Float_arg)=structletwrite_float_arraytname?deflate(a:floatarray)=write_dataH5d.write_float_arraytF.h5t[|Array.lengtha|]name?deflatealetwrite_float_genarraytname?deflate(a:(float,F.float_elt,_)Genarray.t)=leta=Genarray.change_layoutaC_layoutinwrite_dataH5d.write_bigarraytF.h5t(Genarray.dimsa)name?deflatealetwrite_float_array1tname?deflate(a:(float,F.float_elt,_)Array1.t)=write_float_genarraytname?deflate(genarray_of_array1a)letwrite_float_array2tname?deflate(a:(float,F.float_elt,_)Array2.t)=write_float_genarraytname?deflate(genarray_of_array2a)letwrite_float_array3tname?deflate(a:(float,F.float_elt,_)Array3.t)=write_float_genarraytname?deflate(genarray_of_array3a)letread_float_genarrayt?datanamelayout=leta=read_dataH5d.read_bigarrayF.h5t(fundims->Genarray.createF.kindc_layoutdims)(fundatadims->letdata=Genarray.change_layoutdataC_layoutinletdims'=Genarray.dimsdatainletn=Array.lengthdimsinletn'=Array.lengthdims'inletsmaller=reffalseinfori=0tominnn'-1doifdims'.(i)<dims.(i)thensmaller:=truedone;ifn<>n'||!smallertheninvalid_arg(Printf.sprintf"The provided storage (%s) not of adequate size and dimensions (%s)"(Array.mapstring_of_intdims'|>Array.to_list|>String.concat" ")(Array.mapstring_of_intdims|>Array.to_list|>String.concat" "));data)tdatanameinGenarray.change_layoutalayoutletread_float_arrayt?dataname=read_dataH5d.read_float_arrayF.h5t(fundims->ifArray.lengthdims<>1theninvalid_arg"Dataset not one dimensional";# 320 "h5.cppo.ml"Array.create_floatdims.(0))# 324 "h5.cppo.ml"(fundatadims->ifArray.lengthdims<>1theninvalid_arg"Dataset not one dimensional";ifArray.lengthdata<dims.(0)theninvalid_arg"The provided data storage too small";data)tdatanameletread_float_array1t?datanamelayout=read_float_genarraytnamelayout?data:(matchdatawithNone->None|Somedata->Some(genarray_of_array1data))|>array1_of_genarrayletread_float_array2t?datanamelayout=read_float_genarraytnamelayout?data:(matchdatawithNone->None|Somedata->Some(genarray_of_array2data))|>array2_of_genarrayletread_float_array3t?datanamelayout=read_float_genarraytnamelayout?data:(matchdatawithNone->None|Somedata->Some(genarray_of_array3data))|>array3_of_genarrayletwrite_attribute_floattnamev=letdataspace=H5s.createH5s.Class.SCALARinletatt=H5a.create(hidt)nameF.h5tdataspaceinH5a.write_floatattF.h5tv;H5a.closeatt;H5s.closedataspaceletread_attribute_floattname=letatt=H5a.open_(hidt)nameinletdataspace=H5a.get_spaceattinletdatatype=H5a.get_typeattinletf=H5a.read_floatattdatatypeinH5t.closedatatype;H5s.closedataspace;H5a.closeatt;fletwrite_attribute_float_arraytnamev=letdataspace=H5s.create_simple[|Array.lengthv|]inletatt=H5a.create(hidt)nameF.h5tdataspaceinH5a.write_float_arrayattF.h5tv;H5a.closeatt;H5s.closedataspaceletread_attribute_float_arraytname=letatt=H5a.open_(hidt)nameinletdataspace=H5a.get_spaceattinletdatatype=H5a.get_typeattinletdims,_=H5s.get_simple_extent_dimsdataspacein# 376 "h5.cppo.ml"leta=Array.create_floatdims.(0)in# 380 "h5.cppo.ml"H5a.read_float_arrayattdatatypea;H5t.closedatatype;H5s.closedataspace;H5a.closeatt;aendmoduleFloat32=Make_float(structtypefloat_elt=float32_eltleth5t=H5t.native_floatletkind=Float32end)moduleFloat64=Make_float(structtypefloat_elt=float64_eltleth5t=H5t.native_doubleletkind=Float64end)includeFloat64letread_uint8_array1t?datanamelayout=read_dataH5d.read_bigarrayH5t.native_b8(fundims->ifArray.lengthdims<>1theninvalid_arg"Dataset not one dimensional";genarray_of_array1(Array1.createCharlayoutdims.(0)))(fundatadims->ifArray.lengthdims<>1theninvalid_arg"Dataset not one dimensional";ifArray1.dimdata<dims.(0)theninvalid_arg"The provided data storage too small";genarray_of_array1data)tdataname|>array1_of_genarrayletread_stringtname=read_dataH5d.read_stringH5t.c_s1(fundims->ifArray.lengthdims<>1theninvalid_arg"Dataset not one dimensional";Bytes.createdims.(0)|>Bytes.to_string)(fun__->assertfalse)tNonenameletread_string_arraytname=letdatatype=H5t.copyH5t.c_s1inH5t.set_sizedatatypeH5t.variable;letdata=read_dataH5d.read_c_string_arraydatatype(fundims->ifArray.lengthdims<>1theninvalid_arg"Dataset not one dimensional";Array.makedims.(0)H5d.C_string.null)(fun__->assertfalse)tNonenameinH5t.closedatatype;Array.map(funcs->lets=H5d.C_string.to_stringcsinH5d.C_string.freecs;s)dataletwrite_attribute_int64tnamev=letdataspace=H5s.createH5s.Class.SCALARinletatt=H5a.create(hidt)nameH5t.native_int64dataspaceinH5a.write_int64attH5t.native_int64v;H5a.closeatt;H5s.closedataspaceletread_attribute_int64tname=letatt=H5a.open_(hidt)nameinletdataspace=H5a.get_spaceattinletdatatype=H5a.get_typeattinleti=H5a.read_int64attdatatypeinH5t.closedatatype;H5s.closedataspace;H5a.closeatt;iletwrite_attribute_stringtnamev=letdatatype=H5t.copyH5t.c_s1inH5t.set_sizedatatype(String.lengthv);letdataspace=H5s.createH5s.Class.SCALARinletatt=H5a.create(hidt)namedatatypedataspaceinH5a.write_stringattdatatypev;H5a.closeatt;H5s.closedataspace;H5t.closedatatypeletread_attribute_stringtname=letatt=H5a.open_(hidt)nameinletdataspace=H5a.get_spaceattinletdatatype=H5a.get_typeattinleta=Bytes.create(H5t.get_sizedatatype)inH5a.read_stringattdatatypea;H5t.closedatatype;H5s.closedataspace;H5a.closeatt;Bytes.unsafe_to_stringaletwrite_attribute_string_arraytnamea=letdatatype=H5t.copyH5t.c_s1inH5t.set_sizedatatypeH5t.variable;letdataspace=H5s.create_simple[|Array.lengtha|]inletatt=H5a.create(hidt)namedatatypedataspaceinH5a.write_string_arrayattdatatypea;H5a.closeatt;H5s.closedataspace;H5t.closedatatypeletread_attribute_string_arraytname=letatt=H5a.open_(hidt)nameinletdataspace=H5a.get_spaceattinletdatatype=H5a.get_typeattinletdims,_=H5s.get_simple_extent_dimsdataspaceinleta=Array.makedims.(0)""inH5a.read_string_arrayattdatatypea;H5t.closedatatype;H5s.closedataspace;H5a.closeatt;aletattribute_existstname=H5a.exists(hidt)nameletdelete_attributetname=H5a.delete(hidt)name