>>> from primvols import primer_vol ---- inici >>> lv = ['XYZ',8,9,12,14,15,18,20,21] >>> r = primer_vol(lv,'XYZ',16) >>> r # doctesttag: +TAG=1_primvols-1_primer_vol-trobat 18 >>> r = primer_vol(lv,'XYZ',14) >>> r # doctesttag: +TAG=1_primvols-1_primer_vol-trobat 14 >>> r = primer_vol(lv,'XYZ',22) >>> r # doctesttag: +TAG=1_primvols-1_primer_vol-no_trobat -1 >>> r = primer_vol(lv,'SEV',14) >>> r # doctesttag: +TAG=1_primvols-1_primer_vol-no_trobat -1 ---- fi >>> r = primer_vol(lv,'XYZ',10) >>> r # doctesttag: +TAG=1_primvols-1_primer_vol-trobat 12 >>> r = primer_vol(lv,'XYZ',19) >>> r # doctesttag: +TAG=1_primvols-1_primer_vol-trobat 20 >>> r = primer_vol(lv,'XYZ',7) >>> r # doctesttag: +TAG=1_primvols-1_primer_vol-trobat 8 >>> from primvols import ordena ---- inici >>> l = [('CAL', 19), ('AirVol', 21), ('CatAir', 18)] >>> ordena(l); l # doctesttag: +TAG=1_primvols-2_ordena [('CatAir', 18), ('CAL', 19), ('AirVol', 21)] ---- fi >>> l = [('Air1', 15), ('Air2', 13), ('Air3', 10), ('Air4', 16), ('Air5', 12)] >>> ordena(l); l # doctesttag: +TAG=1_primvols-2_ordena [('Air3', 10), ('Air5', 12), ('Air2', 13), ('Air1', 15), ('Air4', 16)] >>> l = [('CAL', 19), ('AirVol', 21)] >>> ordena(l); l # doctesttag: +TAG=1_primvols-2_ordena [('CAL', 19), ('AirVol', 21)] >>> l = [('P', 896), ('S', 204), ('M', 285), ('Y', 866), ('V', 316), ('U', 674), ('W', 287), ('X', 684), ('E', 546), ('R', 374)] >>> ordena(l); l # doctesttag: +TAG=1_primvols-2_ordena [('S', 204), ('M', 285), ('W', 287), ('V', 316), ('R', 374), ('E', 546), ('U', 674), ('X', 684), ('Y', 866), ('P', 896)] >>> l = [('R', 646), ('U', 532), ('Q', 829), ('F', 466), ('Y', 726), ('B', 163), ('I', 651), ('V', 552), ('J', 935), ('A', 359), ('Z', 181), ('N', 73), ('M', 653), ('E', 294), ('O', 497)] >>> ordena(l); l # doctesttag: +TAG=1_primvols-2_ordena [('N', 73), ('B', 163), ('Z', 181), ('E', 294), ('A', 359), ('F', 466), ('O', 497), ('U', 532), ('V', 552), ('R', 646), ('I', 651), ('M', 653), ('Y', 726), ('Q', 829), ('J', 935)] >>> l = [('M', 435), ('B', 623), ('H', 685), ('L', 363), ('I', 866), ('G', 125), ('E', 89), ('K', 771), ('F', 885), ('Q', 38), ('V', 370), ('A', 695), ('T', 288), ('C', 260), ('S', 11), ('P', 393), ('N', 897), ('Z', 344), ('D', 785), ('J', 379)] >>> ordena(l); l # doctesttag: +TAG=1_primvols-2_ordena [('S', 11), ('Q', 38), ('E', 89), ('G', 125), ('C', 260), ('T', 288), ('Z', 344), ('L', 363), ('V', 370), ('J', 379), ('P', 393), ('M', 435), ('B', 623), ('H', 685), ('A', 695), ('K', 771), ('D', 785), ('I', 866), ('F', 885), ('N', 897)] >>> l = [('C', 377), ('N', 387), ('B', 138), ('E', 246), ('W', 583), ('Y', 731), ('Z', 666), ('P', 638), ('Q', 223), ('U', 829), ('T', 496), ('M', 157), ('X', 847), ('D', 291), ('F', 824), ('R', 372), ('O', 760), ('K', 433), ('J', 555), ('L', 459), ('H', 984), ('I', 763), ('S', 186)] >>> ordena(l); l # doctesttag: +TAG=1_primvols-2_ordena [('B', 138), ('M', 157), ('S', 186), ('Q', 223), ('E', 246), ('D', 291), ('R', 372), ('C', 377), ('N', 387), ('K', 433), ('L', 459), ('T', 496), ('J', 555), ('W', 583), ('P', 638), ('Z', 666), ('Y', 731), ('O', 760), ('I', 763), ('F', 824), ('U', 829), ('X', 847), ('H', 984)] >>> l = [('A', 378), ('Y', 732), ('P', 83), ('K', 102), ('Q', 41), ('N', 802), ('T', 651), ('G', 160), ('B', 833), ('V', 449), ('O', 161), ('H', 168), ('X', 263), ('W', 272), ('U', 190), ('M', 264), ('D', 695), ('J', 458), ('L', 171), ('I', 239), ('C', 729), ('F', 594), ('R', 761), ('Z', 181)] >>> ordena(l); l # doctesttag: +TAG=1_primvols-2_ordena [('Q', 41), ('P', 83), ('K', 102), ('G', 160), ('O', 161), ('H', 168), ('L', 171), ('Z', 181), ('U', 190), ('I', 239), ('X', 263), ('M', 264), ('W', 272), ('A', 378), ('V', 449), ('J', 458), ('F', 594), ('T', 651), ('D', 695), ('C', 729), ('Y', 732), ('R', 761), ('N', 802), ('B', 833)] >>> l = [('M', 584), ('R', 158), ('G', 38), ('J', 759), ('H', 463), ('C', 395), ('W', 170), ('A', 360), ('D', 313), ('B', 437), ('L', 101), ('P', 139), ('K', 100), ('Q', 817), ('I', 93), ('U', 604), ('V', 676), ('X', 346), ('S', 323), ('E', 897), ('O', 121), ('N', 53), ('F', 978), ('Z', 982), ('Y', 710)] >>> ordena(l); l # doctesttag: +TAG=1_primvols-2_ordena [('G', 38), ('N', 53), ('I', 93), ('K', 100), ('L', 101), ('O', 121), ('P', 139), ('R', 158), ('W', 170), ('D', 313), ('S', 323), ('X', 346), ('A', 360), ('C', 395), ('B', 437), ('H', 463), ('M', 584), ('U', 604), ('V', 676), ('Y', 710), ('J', 759), ('Q', 817), ('E', 897), ('F', 978), ('Z', 982)] >>> l = [('X', 325), ('U', 594), ('I', 156), ('V', 787), ('T', 729), ('Y', 64), ('F', 667), ('N', 31), ('S', 53), ('A', 981), ('P', 293), ('O', 132), ('B', 379), ('C', 644), ('Q', 26), ('E', 945), ('H', 766), ('K', 145), ('R', 625), ('Z', 257), ('W', 402), ('L', 23), ('M', 174), ('J', 309), ('D', 537), ('G', 645)] >>> ordena(l); l # doctesttag: +TAG=1_primvols-2_ordena [('L', 23), ('Q', 26), ('N', 31), ('S', 53), ('Y', 64), ('O', 132), ('K', 145), ('I', 156), ('M', 174), ('Z', 257), ('P', 293), ('J', 309), ('X', 325), ('B', 379), ('W', 402), ('D', 537), ('U', 594), ('R', 625), ('C', 644), ('G', 645), ('F', 667), ('T', 729), ('H', 766), ('V', 787), ('E', 945), ('A', 981)] >>> from primvols import vols ---- inici >>> lnoms = ['AirVol','VolinAir','CatAir','CAL'] >>> lc = [['XYZ',8,9,12,14,15,21], ['BIL',8,9,11,15,18,19,20], ... ['XYZ',10,15,18,21], ['XYZ',7,15,19,21]] >>> r = vols(lc,'XYZ',16,lnoms) >>> r # doctesttag: +TAG=1_primvols-3_vols-no_buit [('AirVol', 21), ('CatAir', 18), ('CAL', 19)] >>> r = vols(lc,'SEV',12,lnoms) >>> r # doctesttag: +TAG=1_primvols-3_vols-buit [] ---- fi primer conjunt de tests ------------------------ >>> lc = [['Desti-5', 11, 13, 19, 20], ['Desti-4', 10, 15, 16, 18], ['Desti-4', 13, 14, 15, 16, 18, 19, 21, 23], ['Desti-2', 9, 10, 20, 21], ['Desti-1', 9, 11, 13, 18, 22], ['Desti-5', 9], ['Desti-3', 14, 22], ['Desti-1', 10, 12, 14, 15, 16, 20], ['Desti-4', 12, 13, 17, 18, 20, 23], ['Desti-3', 11, 14, 16, 21], ['Desti-5', 10], ['Desti-1', 9, 11, 14, 15, 16, 17, 19], ['Desti-4', 10, 15, 16, 18]] >>> ln = ['Companyia_6', 'Companyia_1', 'Companyia_9', 'Companyia_3', 'Companyia_5', 'Companyia_8', 'Companyia_6', 'Companyia_2', 'Companyia_7', 'Companyia_11', 'Companyia_10', 'Companyia_4', 'Companyia_4'] >>> r = vols(lc, 'Desti-1', 13 ,ln) >>> r # doctesttag: +TAG=1_primvols-3_vols-no_buit [('Companyia_5', 13), ('Companyia_2', 14), ('Companyia_4', 14)] >>> r = vols(lc, 'Desti-1', 14 ,ln) >>> r # doctesttag: +TAG=1_primvols-3_vols-no_buit [('Companyia_5', 18), ('Companyia_2', 14), ('Companyia_4', 14)] >>> r = vols(lc, 'Desti-1', 19 ,ln) >>> r # doctesttag: +TAG=1_primvols-3_vols-no_buit [('Companyia_5', 22), ('Companyia_2', 20), ('Companyia_4', 19)] >>> r = vols(lc, 'Desti-1', 20 ,ln) >>> r # doctesttag: +TAG=1_primvols-3_vols-no_buit [('Companyia_5', 22), ('Companyia_2', 20)] >>> r = vols(lc, 'Desti-1', 21 ,ln) >>> r # doctesttag: +TAG=1_primvols-3_vols-no_buit [('Companyia_5', 22)] >>> r = vols(lc, 'Desti-1', 23 ,ln) >>> r # doctesttag: +TAG=1_primvols-3_vols-buit [] >>> r = vols(lc, 'Desti-2', 12 ,ln) >>> r # doctesttag: +TAG=1_primvols-3_vols-no_buit [('Companyia_3', 20)] >>> r = vols(lc, 'Desti-3', 18 ,ln) >>> r # doctesttag: +TAG=1_primvols-3_vols-no_buit [('Companyia_6', 22), ('Companyia_11', 21)] >>> r = vols(lc, 'Desti-4', 12 ,ln) >>> r # doctesttag: +TAG=1_primvols-3_vols-no_buit [('Companyia_1', 15), ('Companyia_9', 13), ('Companyia_7', 12), ('Companyia_4', 15)] >>> r = vols(lc, 'Desti-4', 19 ,ln) >>> r # doctesttag: +TAG=1_primvols-3_vols-no_buit [('Companyia_9', 19), ('Companyia_7', 20)] segon conjunt de tests ---------------------- >>> lc = [['Desti-2', 13], ['Desti-4', 9, 10, 11, 12, 14, 15], ['Desti-4', 9, 15, 19], ['Desti-3', 10, 16, 19], ['Desti-2', 9, 11, 12, 13, 15, 18], ['Desti-3', 13], ['Desti-2', 9, 11, 12], ['Desti-1', 16, 19], ['Desti-4', 13, 19], ['Desti-5', 10, 12, 13, 19], ['Desti-2', 11, 14, 15], ['Desti-1', 9], ['Desti-4', 9, 10, 11, 12, 14, 15]] >>> ln = ['Companyia_8', 'Companyia_9', 'Companyia_11', 'Companyia_7', 'Companyia_2', 'Companyia_5', 'Companyia_10', 'Companyia_4', 'Companyia_1', 'Companyia_3', 'Companyia_6', 'Companyia_6', 'Companyia_4'] >>> r = vols(lc, 'Desti-1', 9 ,ln) >>> r # doctesttag: +TAG=1_primvols-3_vols-no_buit [('Companyia_4', 16), ('Companyia_6', 9)] >>> r = vols(lc, 'Desti-2', 11 ,ln) >>> r # doctesttag: +TAG=1_primvols-3_vols-no_buit [('Companyia_8', 13), ('Companyia_2', 11), ('Companyia_10', 11), ('Companyia_6', 11)] >>> r = vols(lc, 'Desti-2', 13 ,ln) >>> r # doctesttag: +TAG=1_primvols-3_vols-no_buit [('Companyia_8', 13), ('Companyia_2', 13), ('Companyia_6', 14)] >>> r = vols(lc, 'Desti-2', 15 ,ln) >>> r # doctesttag: +TAG=1_primvols-3_vols-no_buit [('Companyia_2', 15), ('Companyia_6', 15)] >>> r = vols(lc, 'Desti-4', 13 ,ln) >>> r # doctesttag: +TAG=1_primvols-3_vols-no_buit [('Companyia_9', 14), ('Companyia_11', 15), ('Companyia_1', 13), ('Companyia_4', 14)] Tot repetit >>> lc = [['A', 10]]*2 + [['B', 10]]*2 + [['C', 10]]*2 >>> ln = ['X', 'Y']*3 >>> r = vols(lc, 'A', 9, ln) >>> r # doctesttag: +TAG=1_primvols-3_vols-no_buit [('X', 10), ('Y', 10)] >>> r = vols(lc, 'B', 9, ln) >>> r # doctesttag: +TAG=1_primvols-3_vols-no_buit [('X', 10), ('Y', 10)] >>> r = vols(lc, 'C', 9, ln) >>> r # doctesttag: +TAG=1_primvols-3_vols-no_buit [('X', 10), ('Y', 10)] >>> r = vols(lc, 'A', 11, ln) >>> r # doctesttag: +TAG=1_primvols-3_vols-buit [] >>> r = vols(lc, 'B', 11, ln) >>> r # doctesttag: +TAG=1_primvols-3_vols-buit [] >>> r = vols(lc, 'C', 11, ln) >>> r # doctesttag: +TAG=1_primvols-3_vols-buit [] >>> r = vols(lc, 'D', 9, ln) >>> r # doctesttag: +TAG=1_primvols-3_vols-buit [] >>> from pprint import pprint >>> from csv_utils import linia_noms_cols_a_dic ---- inici >>> cap = ['Data', 'Codi_Postal', 'Sector_Economic', 'Tram_Horari', 'Valor'] >>> linia = '2022-01-01,08001,Indústria,0-6,817' >>> cols = ['Data', 'Valor', 'Tram_Horari'] >>> res = linia_noms_cols_a_dic(cap, linia, ',', cols) >>> res == {'Data': '2022-01-01', 'Valor': '817', 'Tram_Horari': '0-6'} # doctesttag: +TAG=2_csv_utils-1_linia_noms_cols_a_dic-no_buit True ---- fi >>> linia = '2022-01-03,08003,Artesania,0-6,817' >>> cols = [] >>> res = linia_noms_cols_a_dic(cap, linia, ',', cols) >>> res # doctesttag: +TAG=2_csv_utils-1_linia_noms_cols_a_dic-buit {} >>> linia = '2022-01-05,08005,Comerç,6-12,935' >>> cols = ['Data', 'Codi_Postal', 'Sector_Economic', 'Tram_Horari', 'Valor'] >>> res = linia_noms_cols_a_dic(cap, linia, ',', cols) >>> esp = { ... 'Data': '2022-01-05', ... 'Codi_Postal': '08005', ... 'Sector_Economic': 'Comerç', ... 'Tram_Horari': '6-12', ... 'Valor': '935' ... } >>> if res != esp: # doctesttag: +TAG=2_csv_utils-1_linia_noms_cols_a_dic-no_buit ... print('Has calculat:'); pprint(res); print('Però esperavem:'); pprint(esp) >>> cols = ['Codi_Postal', 'Sector_Economic', 'Tram_Horari'] >>> res = linia_noms_cols_a_dic(cap, linia, ',', cols) >>> esp = { ... 'Codi_Postal': '08005', ... 'Sector_Economic': 'Comerç', ... 'Tram_Horari': '6-12', ... } >>> if res != esp: # doctesttag: +TAG=2_csv_utils-1_linia_noms_cols_a_dic-no_buit ... print('Has calculat:'); pprint(res); print('Però esperavem:'); pprint(esp) >>> cols = ['Data', 'Codi_Postal', 'Sector_Economic'] >>> res = linia_noms_cols_a_dic(cap, linia, ',', cols) >>> esp = { ... 'Data': '2022-01-05', ... 'Codi_Postal': '08005', ... 'Sector_Economic': 'Comerç', ... } >>> if res != esp: # doctesttag: +TAG=2_csv_utils-1_linia_noms_cols_a_dic-no_buit ... print('Has calculat:'); pprint(res); print('Però esperavem:'); pprint(esp) >>> cols = ['Sector_Economic', 'Tram_Horari', 'Valor'] >>> res = linia_noms_cols_a_dic(cap, linia, ',', cols) >>> esp = { ... 'Sector_Economic': 'Comerç', ... 'Tram_Horari': '6-12', ... 'Valor': '935' ... } >>> if res != esp: # doctesttag: +TAG=2_csv_utils-1_linia_noms_cols_a_dic-no_buit ... print('Has calculat:'); pprint(res); print('Però esperavem:'); pprint(esp) >>> cap = [chr(ord('A') + i) for i in range(26)] >>> linia = ';'.join(str(i) for i in range(26)) >>> cols = ['A', 'X', 'T', 'D', 'L'] >>> res = linia_noms_cols_a_dic(cap, linia, ';', cols) >>> esp = {c: str(ord(c) - ord('A')) for c in cols} >>> if res != esp: # doctesttag: +TAG=2_csv_utils-1_linia_noms_cols_a_dic-no_buit ... print('Has calculat:'); pprint(res); print('Però esperavem:'); pprint(esp) >>> cols = ['Z', 'A', 'R', 'X', 'T', 'D', 'L', 'W'] >>> res = linia_noms_cols_a_dic(cap, linia, ';', cols) >>> esp = {c: str(ord(c) - ord('A')) for c in cols} >>> if res != esp: # doctesttag: +TAG=2_csv_utils-1_linia_noms_cols_a_dic-no_buit ... print('Has calculat:'); pprint(res); print('Però esperavem:'); pprint(esp) >>> cols = ['C', 'Z', 'V', 'A', 'K', 'R', 'S', 'X', 'Q', 'T', 'I', 'D', 'H', 'L', 'M', 'W', 'N'] >>> res = linia_noms_cols_a_dic(cap, linia, ';', cols) >>> esp = {c: str(ord(c) - ord('A')) for c in cols} >>> if res != esp: # doctesttag: +TAG=2_csv_utils-1_linia_noms_cols_a_dic-no_buit ... print('Has calculat:'); pprint(res); print('Però esperavem:'); pprint(esp) >>> from pprint import pprint >>> from csv_utils import linia_bools_a_dic ---- inici >>> cap = ['Data', 'Codi_Postal', 'Sector_Economic', 'Tram_Horari', 'Valor'] >>> linia = '2022-01-01,08001,Indústria,0-6,817' >>> bools = [True, False, False, True, True] >>> res = linia_bools_a_dic(cap, linia, ',', bools) >>> res == {'Data': '2022-01-01', 'Tram_Horari': '0-6', 'Valor': '817'} # doctesttag: +TAG=2_csv_utils-2_linia_bools_a_dic-no_buit True ---- fi >>> linia = '2022-01-03,08003,Artesania,0-6,817' >>> bools = [False]*5 >>> res = linia_bools_a_dic(cap, linia, ',', bools) >>> res # doctesttag: +TAG=2_csv_utils-2_linia_bools_a_dic-buit {} >>> linia = '2022-01-05,08005,Comerç,6-12,935' >>> bools = [True]*5 >>> res = linia_bools_a_dic(cap, linia, ',', bools) >>> esp = { ... 'Data': '2022-01-05', ... 'Codi_Postal': '08005', ... 'Sector_Economic': 'Comerç', ... 'Tram_Horari': '6-12', ... 'Valor': '935' ... } >>> if res != esp: # doctesttag: +TAG=2_csv_utils-2_linia_bools_a_dic-no_buit ... print('Has calculat:'); pprint(res); print('Però esperavem:'); pprint(esp) >>> bools = [False]*2 + [True]*3 >>> res = linia_bools_a_dic(cap, linia, ',', bools) >>> esp = { ... 'Sector_Economic': 'Comerç', ... 'Tram_Horari': '6-12', ... 'Valor': '935' ... } >>> if res != esp: # doctesttag: +TAG=2_csv_utils-2_linia_bools_a_dic-no_buit ... print('Has calculat:'); pprint(res); print('Però esperavem:'); pprint(esp) >>> bools = [True]*3 + [False]*2 >>> res = linia_bools_a_dic(cap, linia, ',', bools) >>> esp = { ... 'Data': '2022-01-05', ... 'Codi_Postal': '08005', ... 'Sector_Economic': 'Comerç', ... } >>> if res != esp: # doctesttag: +TAG=2_csv_utils-2_linia_bools_a_dic-no_buit ... print('Has calculat:'); pprint(res); print('Però esperavem:'); pprint(esp) >>> bools = [False] + [True]*3 + [False] >>> res = linia_bools_a_dic(cap, linia, ',', bools) >>> esp = { ... 'Codi_Postal': '08005', ... 'Sector_Economic': 'Comerç', ... 'Tram_Horari': '6-12', ... } >>> if res != esp: # doctesttag: +TAG=2_csv_utils-2_linia_bools_a_dic-no_buit ... print('Has calculat:'); pprint(res); print('Però esperavem:'); pprint(esp) >>> cap = [chr(ord('A') + i) for i in range(26)] >>> linia = ';'.join(str(i) for i in range(26)) >>> bls = [False]*10 + [True]*10 + [False]*6 >>> res = linia_bools_a_dic(cap, linia, ';', bls) >>> esp = {cap[i]: str(ord(cap[i]) - ord('A')) for i in range(26) if bls[i]} >>> if res != esp: # doctesttag: +TAG=2_csv_utils-2_linia_bools_a_dic-no_buit ... print('Has calculat:'); pprint(res); print('Però esperavem:'); pprint(esp) >>> bls = ([False]*3 + [True]*3)*4 + [False]*2 >>> res = linia_bools_a_dic(cap, linia, ';', bls) >>> esp = {cap[i]: str(ord(cap[i]) - ord('A')) for i in range(26) if bls[i]} >>> if res != esp: # doctesttag: +TAG=2_csv_utils-2_linia_bools_a_dic-no_buit ... print('Has calculat:'); pprint(res); print('Però esperavem:'); pprint(esp) >>> bls = ([False]*2 + [True]*3)*5 + [False] >>> res = linia_bools_a_dic(cap, linia, ';', bls) >>> esp = {cap[i]: str(ord(cap[i]) - ord('A')) for i in range(26) if bls[i]} >>> if res != esp: # doctesttag: +TAG=2_csv_utils-2_linia_bools_a_dic-no_buit ... print('Has calculat:'); pprint(res); print('Però esperavem:'); pprint(esp) >>> import os >>> from metadades import sense_metadades >>> dades = """\ ... :Origen: https://inf2.etseib.upc.edu/_downloads/149e9dffad58b96db3e85525fcc28012/consum_elect.csv ... : Descripció : consum d’electricitat durant alguns mesos de 2022. ... :Tema: Energia ... Data,Codi_Postal,Sector_Economic,Tram_Horari,Valor ... 2022-01-01,08001,Indústria,0-6,817 ... 2022-01-01,08001,Indústria,6-12,942 ... 2022-01-01,08001,Indústria,12-18,1145 ... """ >>> with open('consum_elect.txt', 'w') as f: r = f.write(dades) ---- inici Contingut del fitxer. >>> print(dades) # doctest: +NORMALIZE_WHITESPACE :Origen: https://inf2.etseib.upc.edu/_downloads/149e9dffad58b96db3e85525fcc28012/consum_elect.csv : Descripció : consum d’electricitat durant alguns mesos de 2022. :Tema: Energia Data,Codi_Postal,Sector_Economic,Tram_Horari,Valor 2022-01-01,08001,Indústria,0-6,817 2022-01-01,08001,Indústria,6-12,942 2022-01-01,08001,Indústria,12-18,1145 Descartem les metadades. >>> sense_metadades('consum_elect.txt', 'consum_elect-sense.txt') >>> with open('consum_elect-sense.txt', 'r') as f: ... res = f.read() >>> print(res) # doctesttag: +TAG=3_metadades-amb +NORMALIZE_WHITESPACE Data,Codi_Postal,Sector_Economic,Tram_Horari,Valor 2022-01-01,08001,Indústria,0-6,817 2022-01-01,08001,Indústria,6-12,942 2022-01-01,08001,Indústria,12-18,1145 >>> try: ... os.remove('consum_elect-sense.txt') ... except FileNotFoundError: ... pass Si el fitxer amb metadades no en conté, els fitxer sense metadades és idèntic al fitxer amb de metadades. >>> dades = """\ ... Data,Codi_Postal,Sector_Economic,Tram_Horari,Valor ... 2022-01-01,08001,Indústria,0-6,817 ... """ >>> with open('sense_metadades.txt', 'w') as f: r = f.write(dades) >>> sense_metadades('sense_metadades.txt', 'sense_metadades-sense.txt') >>> with open('sense_metadades-sense.txt', 'r') as f: ... res = f.read() >>> dades == res # doctesttag: +TAG=3_metadades-sense True >>> try: ... os.remove('sense_metadades-sense.txt') ... except FileNotFoundError: ... pass ---- fi >>> dades = """\ ... : Autor : desconegut ... :Origen: https://inf2.etseib.upc.edu/_downloads/149e9dffad58b96db3e85525fcc28012/consum_elect.csv ... : Descripció : consum d’electricitat durant alguns mesos de 2022. ... :Tema: Energia ... Codi_Postal,Sector_Economic,Tram_Horari,Valor ... 08001,Indústria,0-6,817 ... 08001,Indústria,6-12,942 ... 08001,Indústria,12-18,1145 ... """ >>> with open('consum-1.txt', 'w') as f: r = f.write(dades) >>> sense_metadades('consum-1.txt', 'consum-1-sense.txt') >>> with open('consum-1-sense.txt', 'r') as f: ... res = f.read() >>> print(res) # doctesttag: +TAG=3_metadades-amb +NORMALIZE_WHITESPACE Codi_Postal,Sector_Economic,Tram_Horari,Valor 08001,Indústria,0-6,817 08001,Indústria,6-12,942 08001,Indústria,12-18,1145 >>> try: ... os.remove('consum-1-sense.txt') ... except FileNotFoundError: ... pass >>> dades = """\ ... : Autor : desconegut ... :Tema: Energia ... Codi_Postal,Sector_Economic,Tram_Horari,Valor ... 08001,Indústria,0-6,817 ... 08001,Indústria,6-12,942 ... 08001,Indústria,12-18,1145 ... """ >>> with open('consum-2.txt', 'w') as f: r = f.write(dades) >>> sense_metadades('consum-2.txt', 'consum-2-sense.txt') >>> with open('consum-2-sense.txt', 'r') as f: ... res = f.read() >>> print(res) # doctesttag: +TAG=3_metadades-amb +NORMALIZE_WHITESPACE Codi_Postal,Sector_Economic,Tram_Horari,Valor 08001,Indústria,0-6,817 08001,Indústria,6-12,942 08001,Indústria,12-18,1145 >>> try: ... os.remove('consum-2-sense.txt') ... except FileNotFoundError: ... pass >>> dades = """\ ... :Tema: Energia ... Sector_Economic,Tram_Horari,Valor ... Indústria,0-6,817 ... Indústria,6-12,942 ... Indústria,12-18,1145 ... """ >>> with open('consum-3.txt', 'w') as f: r = f.write(dades) >>> sense_metadades('consum-3.txt', 'consum-3-sense.txt') >>> with open('consum-3-sense.txt', 'r') as f: ... res = f.read() >>> print(res) # doctesttag: +TAG=3_metadades-amb +NORMALIZE_WHITESPACE Sector_Economic,Tram_Horari,Valor Indústria,0-6,817 Indústria,6-12,942 Indústria,12-18,1145 >>> try: ... os.remove('consum-3-sense.txt') ... except FileNotFoundError: ... pass >>> from biseccio import succ_biseccio ---- inici >>> def f1(x): ... return 2*x - 6 >>> eps = 1e-3 >>> c = succ_biseccio(f1, 2.9, 3.15, eps) Valors arrodonits dels extrems dels intervals. >>> [(round(e, 3), round(d, 3)) for e, d in c] # doctesttag: +TAG=4_biseccio-llista [(2.9, 3.15), (2.9, 3.025), (2.962, 3.025), (2.994, 3.025), (2.994, 3.009), (2.994, 3.002), (2.998, 3.002), (3.0, 3.002), (3.0, 3.001)] Només el darrer interval té una longitud més petita que eps. >>> [abs(e - d) < eps for e, d in c] == [False]*8 + [True] # doctesttag: +TAG=4_biseccio-long_intervals True El punt mig del darrer interval s'acosta prou al zero de la funció en l'interval. >>> e, d = c[-1] >>> f1((e + d)/2) < eps # doctesttag: +TAG=4_biseccio-quasi_zero True ---- fi >>> c = succ_biseccio(f1, 0, 5, eps) >>> len(c) # doctesttag: +TAG=4_biseccio-long_llista 14 >>> [abs(e - d) < eps for e, d in c] == [False]*13 + [True] # doctesttag: +TAG=4_biseccio-long_intervals True >>> e, d = c[-1] >>> round(e, 4) 2.9999 >>> round(d, 4) 3.0005 >>> f1((e + d)/2) < eps # doctesttag: +TAG=4_biseccio-quasi_zero True >>> eps = 1e-5 >>> c = succ_biseccio(f1, 0, 5, eps) >>> len(c) # doctesttag: +TAG=4_biseccio-long_llista 20 >>> [abs(e - d) < eps for e, d in c] == [False]*19 + [True] # doctesttag: +TAG=4_biseccio-long_intervals True >>> e, d = c[-1] >>> round(e, 6) 2.999992 >>> round(d, 6) 3.000002 >>> f1((e + d)/2) < eps # doctesttag: +TAG=4_biseccio-quasi_zero True >>> def f2(x): ... return (x - 2)*(x + 1) >>> eps = 1e-3 >>> c = succ_biseccio(f2, 1.9, 2.3, eps) >>> [(round(e, 3), round(d, 3)) for e, d in c] # doctesttag: +TAG=4_biseccio-llista [(1.9, 2.3), (1.9, 2.1), (2.0, 2.1), (2.0, 2.05), (2.0, 2.025), (2.0, 2.012), (2.0, 2.006), (2.0, 2.003), (2.0, 2.002), (2.0, 2.001)] >>> len(c) # doctesttag: +TAG=4_biseccio-long_llista 10 >>> [abs(e - d) < eps for e, d in c] == [False]*9 + [True] # doctesttag: +TAG=4_biseccio-long_intervals True >>> e, d = c[-1] >>> f2((e + d)/2) < eps*10 # doctesttag: +TAG=4_biseccio-quasi_zero True >>> c = succ_biseccio(f2, 0, 3, eps) >>> len(c) # doctesttag: +TAG=4_biseccio-long_llista 13 >>> [abs(e - d) < eps for e, d in c] == [False]*12 + [True] # doctesttag: +TAG=4_biseccio-long_intervals True >>> e, d = c[-1] >>> round(e, 4) 1.9995 >>> round(d, 4) 2.0002 >>> f2((e + d)/2) < eps # doctesttag: +TAG=4_biseccio-quasi_zero True >>> eps = 1e-5 >>> c = succ_biseccio(f2, 0, 5, eps) >>> len(c) # doctesttag: +TAG=4_biseccio-long_llista 20 >>> [abs(e - d) < eps for e, d in c] == [False]*19 + [True] # doctesttag: +TAG=4_biseccio-long_intervals True >>> e, d = c[-1] >>> round(e, 6) 1.999998 >>> round(d, 6) 2.000008 >>> f2((e + d)/2) < eps # doctesttag: +TAG=4_biseccio-quasi_zero True >>> eps = 1e-3 >>> c = succ_biseccio(f2, -2, -0.5, eps) >>> [(round(e, 4), round(d, 4)) for e, d in c] # doctesttag: +TAG=4_biseccio-llista [(-2, -0.5), (-1.25, -0.5), (-1.25, -0.875), (-1.0625, -0.875), (-1.0625, -0.9688), (-1.0156, -0.9688), (-1.0156, -0.9922), (-1.0039, -0.9922), (-1.0039, -0.998), (-1.001, -0.998), (-1.001, -0.9995), (-1.0002, -0.9995)] >>> len(c) # doctesttag: +TAG=4_biseccio-long_llista 12 >>> [abs(e - d) < eps for e, d in c] == [False]*11 + [True] # doctesttag: +TAG=4_biseccio-long_intervals True >>> e, d = c[-1] >>> f2((e + d)/2) < eps # doctesttag: +TAG=4_biseccio-quasi_zero True >>> c = succ_biseccio(f2, -5, 0, eps) >>> len(c) # doctesttag: +TAG=4_biseccio-long_llista 14 >>> [abs(e - d) < eps for e, d in c] == [False]*13 + [True] # doctesttag: +TAG=4_biseccio-long_intervals True >>> e, d = c[-1] >>> round(e, 4) -1.0004 >>> round(d, 4) -0.9998 >>> f2((e + d)/2) < eps # doctesttag: +TAG=4_biseccio-quasi_zero True >>> eps = 1e-5 >>> c = succ_biseccio(f2, -4, 1, eps) >>> len(c) # doctesttag: +TAG=4_biseccio-long_llista 20 >>> [abs(e - d) < eps for e, d in c] == [False]*19 + [True] # doctesttag: +TAG=4_biseccio-long_intervals True >>> e, d = c[-1] >>> round(e, 6) -1.000008 >>> round(d, 6) -0.999998 >>> f2((e + d)/2) < eps # doctesttag: +TAG=4_biseccio-quasi_zero True