classroom ========= count_pass_fail --------------- >>> from classroom import count_pass_fail >>> stgD = { ... 10: ['JBB', 0.0], ... 15: ['GWV', 5.5], ... 22: ['JJJ', 6.5], ... 27: ['AWV', 3.5], ... 31: ['MMP', 5.5], ... 35: ['BWV', 4.5], ... 42: ['SCC', 7.5], ... 49: ['BWV', 9.0], ... 55: ['FCC', 5.0], ... 72: ['ABC', 7.0], ... 81: ['GMM', 8.0], ... 92: ['MRP', 10.0], ... 99: ['ARG', 10.0], ... } >>> cl1 = [ ... [ 22, -1, 300, 42, 81, -1, 10, 2], ... [ 15, -1, 125, -1, -1, 136, 49, 1], ... [ 10, -1, 125, -1, -1, 136, 27, 1], ... [-1, -1, -1, -1, -1, -1, -1, -1], ... ] >>> sol = count_pass_fail(cl1, stgD) >>> sol # doctesttag: +TAG=1_count_pass_fail ([(1, 3, 1), (2, 2, 0), (3, 0, 2), (4, 0, 0)], [1, 1, 2, 125, 125, 136, 136, 300]) >>> cl2 = [ ... [22, -1, 42, 81, -1, 10, -1], ... [15, -1, 72, -1, -1, 35, 49], ... [92, -1, 27, -1, 31, 55, 99], ... ] >>> sol = count_pass_fail(cl2, stgD) >>> sol # doctesttag: +TAG=1_count_pass_fail ([(1, 3, 1), (2, 3, 1), (3, 4, 1)], []) >>> cl3 = [ ... [-1, -1, -1, -1, -1, -1, -1], ... [-1, -1, -1, -1, -1, -1, -1], ... [-1, -1, -1, -1, -1, -1, -1], ... ] >>> sol = count_pass_fail(cl3, stgD) >>> sol ([(1, 0, 0), (2, 0, 0), (3, 0, 0)], []) >>> cl4 = [ ... [122, -1, 142, 181, -1, 110, -1], ... [115, -1, 22, -1, -1, 131, 149], ... [192, -1, 172, -1, 131, 155, 199], ... ] >>> sol = count_pass_fail(cl4, stgD) >>> sol # doctesttag: +TAG=1_count_pass_fail ([(1, 0, 0), (2, 1, 0), (3, 0, 0)], [110, 115, 122, 131, 131, 142, 149, 155, 172, 181, 192, 199]) >>> stgD2 = { ... 1: ['JBB', 0.0], ... 2: ['GWV', 5.5], ... 3: ['JJJ', 6.5], ... 4: ['AWV', 3.5], ... 5: ['MMP', 5.5], ... 6: ['BWV', 4.5], ... 7: ['SCC', 7.5], ... 8: ['BWV', 9.0], ... 9: ['FCC', 5.0], ... 10: ['ABC', 7.0], ... 11: ['GMM', 8.0], ... 12: ['MRP', 10.0], ... 13: ['ARG', 10.0], ... } >>> cl12 = [ ... [-1, -1, -1, -1, -1, -1, -1, -1], ... [ 22, -1, 300, 42, 81, -1, 10, 2], ... [ 2, -1, 3, -1, -1, 5, 7, 8], ... [ 1, 2, 3, 4, 5, 6, 7, 8], ... [-1, -1, -1, -1, -1, -1, -1, -1], ... ] >>> sol = count_pass_fail(cl12, stgD2) >>> sol # doctesttag: +TAG=1_count_pass_fail ([(1, 0, 0), (2, 2, 0), (3, 5, 0), (4, 5, 3), (5, 0, 0)], [22, 42, 81, 300]) >>> cl13 = [ ... [ 22, -1, 300, 42, 81, -1, 10, 2], ... [ 2, -1, 3, -1, -1, 5, 7, 8], ... [ -1, 1, -1, 4, -1, -1, 6, -1], ... [ 11, 12, 13, 14, 15, 16, 17, 18], ... ] >>> sol = count_pass_fail(cl13, stgD2) >>> sol # doctesttag: +TAG=1_count_pass_fail ([(1, 2, 0), (2, 5, 0), (3, 0, 3), (4, 3, 0)], [14, 15, 16, 17, 18, 22, 42, 81, 300]) likes ===== compute_likedby_dict -------------------- >>> from likes import compute_likedby_dict >>> likesD_1 = { ... 'k': ['l', 'be'], ... 'l': ['p', 'k'], ... 'n': ['k', 'p'], ... 'p': ['be', 'l', 'k'], ... 'be': ['k'], ... 'ca': ['l', 'be', 'k'], ... } >>> correctD = { ... 'k': ['be', 'ca', 'l', 'n', 'p'], ... 'l': ['ca', 'k', 'p'], ... 'be': ['ca', 'k', 'p'], ... 'p': ['l', 'n'], ... 'n': [], ... 'ca': []} >>> solD = compute_likedby_dict(likesD_1) >>> if solD != correctD: # doctesttag: +TAG=2_likes-1_compute_likedby_dict ... solD ... else: ... True True >>> likesD_2 = { ... 'k': ['l', 'be', 'p', 'ca'], ... 'l': ['p', 'k', 'n'], ... 'n': ['k', 'p'], ... 'p': ['be', 'l', 'k', 'ca'], ... 'be': ['k', 'n', 'p'], ... 'ca': ['l', 'be', 'k', 'n', 'p'], ... } >>> correctD = {'k': ['be', 'ca', 'l', 'n', 'p'], 'l': ['ca', 'k', 'p'], 'be': ['ca', 'k', 'p'], 'p': ['be', 'ca', 'k', 'l', 'n'], 'ca': ['k', 'p'], 'n': ['be', 'ca', 'l']} >>> solD = compute_likedby_dict(likesD_2) >>> if solD != correctD: # doctesttag: +TAG=2_likes-1_compute_likedby_dict ... solD ... else: ... True True >>> likesD_3 = { ... 'k': ['l'], ... 'l': ['n'], ... 'n': ['p'], ... 'p': ['be'], ... 'be': ['ca'], ... 'ca': ['k'], ... } >>> correctD = {'k': ['ca'], 'l': ['k'], 'n': ['l'], 'p': ['n'], 'be': ['p'], 'ca': ['be']} >>> solD = compute_likedby_dict(likesD_3) >>> if solD != correctD: # doctesttag: +TAG=2_likes-1_compute_likedby_dict ... solD ... else: ... True True >>> likesD_4 = { ... 'k': ['k'], ... 'l': ['k'], ... 'n': ['k'], ... 'p': ['k'], ... 'be': ['k'], ... 'ca': ['k'], ... } >>> correctD = {'k': ['be', 'ca', 'k', 'l', 'n', 'p'], 'l': [], 'n': [], 'p': [], 'be': [], 'ca': []} >>> solD = compute_likedby_dict(likesD_4) >>> if solD != correctD: # doctesttag: +TAG=2_likes-1_compute_likedby_dict ... solD ... else: ... True True >>> likesD_5 = { ... 'k': ['l', 'be', 'ca'], ... 'l': ['be', 'ca'], ... 'be': ['ca'], ... 'ca': ['k', 'l', 'be'], ... 'n': ['k', 'l', 'be', 'ca'], ... } >>> correctD = {'k': ['ca', 'n'], 'l': ['ca', 'k', 'n'], 'be': ['ca', 'k', 'l', 'n'], 'ca': ['be', 'k', 'l', 'n'], 'n': []} >>> solD = compute_likedby_dict(likesD_5) >>> if solD != correctD: # doctesttag: +TAG=2_likes-1_compute_likedby_dict ... solD ... else: ... True True >>> likesD_6 = { ... 'k': ['l', 'be'], ... 'l': ['be', 'ca'], ... 'be': ['ca', 'k'], ... 'ca': ['k', 'l'], ... } >>> correctD = {'k': ['be', 'ca'], 'l': ['ca', 'k'], 'be': ['k', 'l'], 'ca': ['be', 'l']} >>> solD = compute_likedby_dict(likesD_6) >>> if solD != correctD: # doctesttag: +TAG=2_likes-1_compute_likedby_dict ... solD ... else: ... True True >>> likesD_7 = { ... 'k': ['l', 'be'], ... 'l': ['be', 'ca'], ... 'be': ['ca', 'p'], ... 'ca': ['p', 'k'], ... 'p': ['k', 'l'], ... 'n': ['k', 'l', 'be', 'ca'], ... } >>> correctD = {'k': ['ca', 'n', 'p'], 'l': ['k', 'n', 'p'], 'be': ['k', 'l', 'n'], 'ca': ['be', 'l', 'n'], 'p': ['be', 'ca'], 'n': []} >>> solD = compute_likedby_dict(likesD_7) >>> if solD != correctD: # doctesttag: +TAG=2_likes-1_compute_likedby_dict ... solD ... else: ... True True >>> likesD_8 = { ... 'k': ['l', 'be'], ... 'l': ['be', 'p'], ... 'be': ['p', 'k'], ... 'ca': ['p', 'k'], ... 'p': ['k', 'l'], ... 'n': ['k', 'l', 'be'], ... } >>> correctD = {'k': ['be', 'ca', 'n', 'p'], 'l': ['k', 'n', 'p'], 'be': ['k', 'l', 'n'], 'p': ['be', 'ca', 'l'], 'ca': [], 'n': []} >>> solD = compute_likedby_dict(likesD_8) >>> if solD != correctD: # doctesttag: +TAG=2_likes-1_compute_likedby_dict ... solD ... else: ... True True compute_matches_list -------------------- >>> from likes import compute_matches_list >>> likesD_1 = { ... 'k': ['l', 'be'], ... 'l': ['p', 'k'], ... 'n': ['k', 'p'], ... 'p': ['be', 'l', 'k'], ... 'be': ['k'], ... 'ca': ['l', 'be', 'k'], ... } >>> correctL = [('be', 'k'), ('k', 'l'), ('l', 'p')] >>> solL = compute_matches_list(likesD_1) >>> if solL != correctL: # doctesttag: +TAG=2_likes-2_compute_matches_list ... solL ... else: ... True True >>> likesD_2 = { ... 'k': ['l', 'be', 'p', 'ca'], ... 'l': ['p', 'k', 'n'], ... 'n': ['k', 'p'], ... 'p': ['be', 'l', 'k', 'ca'], ... 'be': ['k', 'n', 'p'], ... 'ca': ['l', 'be', 'k', 'n', 'p'], ... } >>> correctL = [('be', 'k'), ('be', 'p'), ('ca', 'k'), ('ca', 'p'), ('k', 'l'), ('k', 'p'), ('l', 'p')] >>> solL = compute_matches_list(likesD_2) >>> if solL != correctL: # doctesttag: +TAG=2_likes-2_compute_matches_list ... solL ... else: ... True True >>> likesD_3 = { ... 'k': ['l'], ... 'l': ['n'], ... 'n': ['p'], ... 'p': ['be'], ... 'be': ['ca'], ... 'ca': ['k'], ... } >>> solL = compute_matches_list(likesD_3) >>> if solL != []: # doctesttag: +TAG=2_likes-2_compute_matches_list ... solL ... else: ... True True >>> likesD_4 = { ... 'k': ['k'], ... 'l': ['k'], ... 'n': ['k'], ... 'p': ['k'], ... 'be': ['k'], ... 'ca': ['k'], ... } >>> solL = compute_matches_list(likesD_4) >>> if solL != [('k', 'k')]: # doctesttag: +TAG=2_likes-2_compute_matches_list ... solL ... else: ... True True >>> likesD_5 = { ... 'k': ['l', 'be', 'ca'], ... 'l': ['be', 'ca'], ... 'be': ['ca'], ... 'ca': ['k', 'l', 'be'], ... 'n': ['k', 'l', 'be', 'ca'], ... } >>> correctL = [('be', 'ca'), ('ca', 'k'), ('ca', 'l')] >>> solL = compute_matches_list(likesD_5) >>> if solL != correctL: # doctesttag: +TAG=2_likes-2_compute_matches_list ... solL ... else: ... True True >>> likesD_6 = { ... 'k': ['l', 'be'], ... 'l': ['be', 'ca'], ... 'be': ['ca', 'k'], ... 'ca': ['k', 'l'], ... } >>> correctL = [('be', 'k'), ('ca', 'l')] >>> solL = compute_matches_list(likesD_6) >>> if solL != correctL: # doctesttag: +TAG=2_likes-2_compute_matches_list ... solL ... else: ... True True >>> likesD_7 = { ... 'k': ['l', 'be'], ... 'l': ['be', 'ca'], ... 'be': ['ca', 'p'], ... 'ca': ['p', 'k'], ... 'p': ['k', 'l'], ... 'n': ['k', 'l', 'be', 'ca'], ... } >>> correctL = [] >>> solL = compute_matches_list(likesD_7) >>> if solL != correctL: # doctesttag: +TAG=2_likes-2_compute_matches_list ... solL ... else: ... True True >>> likesD_8 = { ... 'k': ['l', 'be'], ... 'l': ['be', 'p'], ... 'be': ['p', 'k'], ... 'ca': ['p', 'k'], ... 'p': ['k', 'l'], ... 'n': ['k', 'l', 'be'], ... } >>> correctL = [('be', 'k'), ('l', 'p')] >>> solL = compute_matches_list(likesD_8) >>> if solL != correctL: # doctesttag: +TAG=2_likes-2_compute_matches_list ... solL ... else: ... True True temp_join --------- >>> import os >>> from tempscat import temp_join >>> np = temp_join('temp_11-1-2026.csv', 'out.csv') >>> refL = [ ... 'Barcelona,8.0,13.7,24,11.5,10.0,9.5,9.0,8.5,8.0,8.1,8.5,8.8,9.2,10.5,12.0,12.5,13.0,13.5,13.7,13.5,12.5,11.5,11.0,10.8,10.5,10.2,10.0', ... 'La Cellera de Ter,0.0,12.5,23,2.0,1.5,1.0,0.0,1.0,2.5,1.0,1.5,2.2,3.4,6.5,9.0,10.3,11.0,12.0,12.5,11.5,9.0,6.0,5.8,5.2,5.0,3.5', ... 'Sort,-3.0,12.0,22,0.0,1.0,1.7,3.1,2.0,0.5,0.0,-2.0,-2.5,-3.0,3.0,7.5,9.0,11.5,12.0,8.5,7.0,4.5,4.0,2.0,0.5,1.0', ... ] >>> with open('ref.csv', 'w') as f: ... for line in refL: ... n = f.write(line + '\n') >>> with open('out.csv', 'r') as f, open('ref.csv', 'r') as fref: ... l = f.readline() ... lref = fref.readline() ... while l != '' and l == lref: ... l = f.readline() ... lref = fref.readline() ... oeq = (l== lref == '') >>> if np == len(refL) and oeq: # doctesttag: +TAG=3_temp_join ... True ... else: ... np, len(refL), l, lref True >>> if os.path.exists('out.csv'): ... os.remove('out.csv') >>> if os.path.exists('ref.csv'): ... os.remove('ref.csv') --------------------------------------------------------------------------------- >>> np = temp_join('temp_bcn_11-1-2026.csv', 'out.csv') >>> refL = [ ... 'Barcelona,-3.0,13.7,68,11.5,9.5,9.0,8.5,8.0,2.0,1.5,1.0,0.0,1.0,2.5,0.0,1.0,1.7,3.1,2.0,0.5,1.0,1.5,2.2,3.4,6.5,9.0,0.0,-2.0,-2.5,-3.0,3.0,7.5,8.1,8.5,8.8,9.2,10.5,12.0,9.0,11.5,12.0,8.5,7.0,10.3,11.0,12.0,12.5,11.5,9.0,12.5,13.0,13.5,13.7,13.5,12.5,11.5,11.0,10.8,10.5,10.2,10.0,4.5,4.0,2.0,0.5,1.0,6.0,5.8,5.2,5.0,3.5', ... ] >>> with open('ref.csv', 'w') as f: ... for line in refL: ... n = f.write(line + '\n') >>> with open('out.csv', 'r') as f, open('ref.csv', 'r') as fref: ... l = f.readline() ... lref = fref.readline() ... while l != '' and l == lref: ... l = f.readline() ... lref = fref.readline() ... oeq = (l== lref == '') ... >>> if np == len(refL) and oeq: # doctesttag: +TAG=3_temp_join ... True ... else: ... np, len(refL), l, lref True >>> if os.path.exists('out.csv'): ... os.remove('out.csv') >>> if os.path.exists('ref.csv'): ... os.remove('ref.csv') --------------------------------------------------------------------------------- >>> np = temp_join('temp_12-1-2026.csv', 'out.csv') >>> refL = [ ... 'Barcelona,8.0,11.5,6,11.5,10.0,9.5,9.0,8.5,8.0', ... 'La Cellera de Ter,0.0,2.5,6,2.0,1.5,1.0,0.0,1.0,2.5', ... 'Sort,0.0,3.1,6,0.0,1.0,1.7,3.1,2.0,0.5', ... 'Amer,1.0,9.0,6,1.0,1.5,2.2,3.4,6.5,9.0', ... 'Llavorsí,-3.0,7.5,6,0.0,-2.0,-2.5,-3.0,3.0,7.5', ... 'Badalona,8.1,12.0,6,8.1,8.5,8.8,9.2,10.5,12.0', ... 'Esterri,7.0,12.0,6,9.0,11.5,11.0,12.0,8.5,7.0', ... 'Anglès,9.0,12.5,6,10.3,11.0,12.0,12.5,11.5,9.0', ... 'Santaco,12.5,13.7,6,12.5,13.0,13.5,13.7,13.5,12.5', ... 'Castefa,10.0,11.5,6,11.5,11.0,10.8,10.5,10.2,10.0', ... 'Escaló,0.0,4.5,6,4.5,4.0,2.0,0.5,1.0,0.0', ... 'Osor,3.5,6.0,6,6.0,5.8,5.2,5.0,4.2,3.5', ... ] >>> with open('ref.csv', 'w') as f: ... for line in refL: ... n = f.write(line + '\n') >>> with open('out.csv', 'r') as f, open('ref.csv', 'r') as fref: ... l = f.readline() ... lref = fref.readline() ... while l != '' and l == lref: ... l = f.readline() ... lref = fref.readline() ... oeq = (l== lref == '') ... >>> if np == len(refL) and oeq: # doctesttag: +TAG=3_temp_join ... True ... else: ... np, len(refL), l, lref True >>> if os.path.exists('out.csv'): ... os.remove('out.csv') >>> if os.path.exists('ref.csv'): ... os.remove('ref.csv') --------------------------------------------------------------------------------- >>> np = temp_join('temp_13-1-2026.csv', 'out.csv') >>> refL = [ ... 'Barcelona,8.8,11.5,5,10.0,8.8,9.2,11.5,11.0', ... 'La Cellera de Ter,0.0,6.0,9,1.0,0.0,1.0,6.0,5.8,5.2,5.0,4.2,3.5', ... 'Sort,-3.0,7.5,9,0.0,3.1,0.0,-2.0,-2.5,-3.0,3.0,7.5,4.5', ... ] >>> with open('ref.csv', 'w') as f: ... for line in refL: ... n = f.write(line + '\n') >>> with open('out.csv', 'r') as f, open('ref.csv', 'r') as fref: ... l = f.readline() ... lref = fref.readline() ... while l != '' and l == lref: ... l = f.readline() ... lref = fref.readline() ... oeq = (l== lref == '') ... >>> if np == len(refL) and oeq: # doctesttag: +TAG=3_temp_join ... True ... else: ... np, len(refL), l, lref True >>> if os.path.exists('out.csv'): ... os.remove('out.csv') >>> if os.path.exists('ref.csv'): ... os.remove('ref.csv') --------------------------------------------------------------------------------- >>> np = temp_join('temp_14-1-2026.csv', 'out.csv') >>> refL = [ ... 'Barcelona,0.0,12.5,4,11.5,8.1,12.5,0.0', ... 'La Cellera de Ter,1.0,6.0,5,2.0,1.5,1.0,2.0,6.0', ... 'Sort,-2.0,9.0,5,0.0,0.0,-2.0,9.0,4.5', ... ] >>> with open('ref.csv', 'w') as f: ... for line in refL: ... n = f.write(line + '\n') >>> with open('out.csv', 'r') as f, open('ref.csv', 'r') as fref: ... l = f.readline() ... lref = fref.readline() ... while l != '' and l == lref: ... l = f.readline() ... lref = fref.readline() ... oeq = (l== lref == '') ... >>> if np == len(refL) and oeq: # doctesttag: +TAG=3_temp_join ... True ... else: ... np, len(refL), l, lref True >>> if os.path.exists('out.csv'): ... os.remove('out.csv') >>> if os.path.exists('ref.csv'): ... os.remove('ref.csv') drug_abs ======== drug_abs_days ------------- >>> from drug_abs import drug_abs_days >>> drug_abs_days(0.5, 0.1, 0.02) # doctesttag: +TAG=4_drug_abs_days 11 >>> drug_abs_days(0.5, 0.1, 0.01) # doctesttag: +TAG=4_drug_abs_days 22 >>> drug_abs_days(0.5, 0.1, 0.03) # doctesttag: +TAG=4_drug_abs_days 1 >>> drug_abs_days(0.2, 0.5, 0.0001) # doctesttag: +TAG=4_drug_abs_days 18 >>> drug_abs_days(0.9, 0.2, 1e-5) # doctesttag: +TAG=4_drug_abs_days 36 >>> drug_abs_days(0.4, 0.05, 1e-6) # doctesttag: +TAG=4_drug_abs_days 221 >>> drug_abs_days(0.1, 0.2, 1e-6) # doctesttag: +TAG=4_drug_abs_days 68 >>> drug_abs_days(0.1, 0.1, 1e-9) # doctesttag: +TAG=4_drug_abs_days 200 >>> drug_abs_days(0.1, 0.01, 1e-10) # doctesttag: +TAG=4_drug_abs_days 2055 >>> drug_abs_days(1, 0.001, 1e-10) # doctesttag: +TAG=4_drug_abs_days 1 >>> drug_abs_days(0.9, 0.001, 1e-10) # doctesttag: +TAG=4_drug_abs_days 13916 >>> drug_abs_days(0.1, 0.001, 1e-10) # doctesttag: +TAG=4_drug_abs_days 18310