Solució de l’examen final d’Ampliació d’Informàtica - Torn 1

Organització:

Secció ETSEIB, Departament de Ciències de la Computació, UPC

Data:

13 de gener de 2025

Durada:

1 hora i 40 minuts

Copyright:

Reconeixement-CompartirIgual 4.0 No adaptada de Creative Commons

Jocs de proves


Els exemples que compten per la nota són només els que van seguits de # doctesttag: +TAG

>>> import networkx as nx
>>> def crea_graf(n):
...    l1 = 'ABCDEF'
...    t1 = [2 for x,_ in enumerate(l1)]
...    l2 = 'GHIJKL'
...    t2 = [4+x for x,_ in enumerate(l2)]
...    l3 = 'MNOPQ'
...    t3 = [8 for x,_ in enumerate(l3)]
...    l4 = 'NIDX'
...    t4 = [16-x for x,_ in enumerate(l4)]
...    l5 = 'RBHNS'
...    t5 = [32 for x,_ in enumerate(l5)]
...    l6 = 'DJPTU'
...    t6 = [20-x for x,_ in enumerate(l6)]
...    g = nx.Graph()
...    tmps = [t1, t2, t3, t4, t5, t6]
...    linies = [l1, l2, l3, l4, l5, l6]
...    for i, lp in enumerate(linies[:n]):
...        for j in range(len(lp)-1):
...            g.add_edge(lp[j], lp[j+1], linia='R'+str(i+1), temps=tmps[i][j])
...    return g

Tests per a assignar_temps

>>> from metro3 import assignar_temps
>>> g = crea_graf(4)
>>> assignar_temps(g, 'R1', 10)
>>> sorted(e for e in g.edges(data=True))  # doctesttag: +TAG=1_assignar_temps
[('A', 'B', {'linia': 'R1', 'temps': 10}), ('B', 'C', {'linia': 'R1', 'temps': 10}), ('C', 'D', {'linia': 'R1', 'temps': 10}), ('D', 'E', {'linia': 'R1', 'temps': 10}), ('D', 'I', {'linia': 'R4', 'temps': 15}), ('D', 'X', {'linia': 'R4', 'temps': 14}), ('E', 'F', {'linia': 'R1', 'temps': 10}), ('G', 'H', {'linia': 'R2', 'temps': 4}), ('H', 'I', {'linia': 'R2', 'temps': 5}), ('I', 'J', {'linia': 'R2', 'temps': 6}), ('I', 'N', {'linia': 'R4', 'temps': 16}), ('J', 'K', {'linia': 'R2', 'temps': 7}), ('K', 'L', {'linia': 'R2', 'temps': 8}), ('M', 'N', {'linia': 'R3', 'temps': 8}), ('N', 'O', {'linia': 'R3', 'temps': 8}), ('O', 'P', {'linia': 'R3', 'temps': 8}), ('P', 'Q', {'linia': 'R3', 'temps': 8})]
>>> g = crea_graf(5)
>>> assignar_temps(g, 'R2', 20)
>>> sorted(e for e in g.edges(data=True))  # doctesttag: +TAG=1_assignar_temps
[('A', 'B', {'linia': 'R1', 'temps': 2}), ('B', 'C', {'linia': 'R1', 'temps': 2}), ('B', 'H', {'linia': 'R5', 'temps': 32}), ('B', 'R', {'linia': 'R5', 'temps': 32}), ('C', 'D', {'linia': 'R1', 'temps': 2}), ('D', 'E', {'linia': 'R1', 'temps': 2}), ('D', 'I', {'linia': 'R4', 'temps': 15}), ('D', 'X', {'linia': 'R4', 'temps': 14}), ('E', 'F', {'linia': 'R1', 'temps': 2}), ('G', 'H', {'linia': 'R2', 'temps': 20}), ('H', 'I', {'linia': 'R2', 'temps': 20}), ('H', 'N', {'linia': 'R5', 'temps': 32}), ('I', 'J', {'linia': 'R2', 'temps': 20}), ('I', 'N', {'linia': 'R4', 'temps': 16}), ('J', 'K', {'linia': 'R2', 'temps': 20}), ('K', 'L', {'linia': 'R2', 'temps': 20}), ('M', 'N', {'linia': 'R3', 'temps': 8}), ('N', 'O', {'linia': 'R3', 'temps': 8}), ('N', 'S', {'linia': 'R5', 'temps': 32}), ('O', 'P', {'linia': 'R3', 'temps': 8}), ('P', 'Q', {'linia': 'R3', 'temps': 8})]
>>> g = crea_graf(6)
>>> assignar_temps(g, 'R3', 30)
>>> sorted(e for e in g.edges(data=True))  # doctesttag: +TAG=1_assignar_temps
[('A', 'B', {'linia': 'R1', 'temps': 2}), ('B', 'C', {'linia': 'R1', 'temps': 2}), ('B', 'H', {'linia': 'R5', 'temps': 32}), ('B', 'R', {'linia': 'R5', 'temps': 32}), ('C', 'D', {'linia': 'R1', 'temps': 2}), ('D', 'E', {'linia': 'R1', 'temps': 2}), ('D', 'I', {'linia': 'R4', 'temps': 15}), ('D', 'J', {'linia': 'R6', 'temps': 20}), ('D', 'X', {'linia': 'R4', 'temps': 14}), ('E', 'F', {'linia': 'R1', 'temps': 2}), ('G', 'H', {'linia': 'R2', 'temps': 4}), ('H', 'I', {'linia': 'R2', 'temps': 5}), ('H', 'N', {'linia': 'R5', 'temps': 32}), ('I', 'J', {'linia': 'R2', 'temps': 6}), ('I', 'N', {'linia': 'R4', 'temps': 16}), ('J', 'K', {'linia': 'R2', 'temps': 7}), ('J', 'P', {'linia': 'R6', 'temps': 19}), ('K', 'L', {'linia': 'R2', 'temps': 8}), ('M', 'N', {'linia': 'R3', 'temps': 30}), ('N', 'O', {'linia': 'R3', 'temps': 30}), ('N', 'S', {'linia': 'R5', 'temps': 32}), ('O', 'P', {'linia': 'R3', 'temps': 30}), ('P', 'Q', {'linia': 'R3', 'temps': 30}), ('P', 'T', {'linia': 'R6', 'temps': 18}), ('T', 'U', {'linia': 'R6', 'temps': 17})]
>>> assignar_temps(g, 'R4', 40)
>>> sorted(e for e in g.edges(data=True))  # doctesttag: +TAG=1_assignar_temps
[('A', 'B', {'linia': 'R1', 'temps': 2}), ('B', 'C', {'linia': 'R1', 'temps': 2}), ('B', 'H', {'linia': 'R5', 'temps': 32}), ('B', 'R', {'linia': 'R5', 'temps': 32}), ('C', 'D', {'linia': 'R1', 'temps': 2}), ('D', 'E', {'linia': 'R1', 'temps': 2}), ('D', 'I', {'linia': 'R4', 'temps': 40}), ('D', 'J', {'linia': 'R6', 'temps': 20}), ('D', 'X', {'linia': 'R4', 'temps': 40}), ('E', 'F', {'linia': 'R1', 'temps': 2}), ('G', 'H', {'linia': 'R2', 'temps': 4}), ('H', 'I', {'linia': 'R2', 'temps': 5}), ('H', 'N', {'linia': 'R5', 'temps': 32}), ('I', 'J', {'linia': 'R2', 'temps': 6}), ('I', 'N', {'linia': 'R4', 'temps': 40}), ('J', 'K', {'linia': 'R2', 'temps': 7}), ('J', 'P', {'linia': 'R6', 'temps': 19}), ('K', 'L', {'linia': 'R2', 'temps': 8}), ('M', 'N', {'linia': 'R3', 'temps': 30}), ('N', 'O', {'linia': 'R3', 'temps': 30}), ('N', 'S', {'linia': 'R5', 'temps': 32}), ('O', 'P', {'linia': 'R3', 'temps': 30}), ('P', 'Q', {'linia': 'R3', 'temps': 30}), ('P', 'T', {'linia': 'R6', 'temps': 18}), ('T', 'U', {'linia': 'R6', 'temps': 17})]
>>> assignar_temps(g, 'R5', 40)
>>> sorted(e for e in g.edges(data=True))  # doctesttag: +TAG=1_assignar_temps
[('A', 'B', {'linia': 'R1', 'temps': 2}), ('B', 'C', {'linia': 'R1', 'temps': 2}), ('B', 'H', {'linia': 'R5', 'temps': 40}), ('B', 'R', {'linia': 'R5', 'temps': 40}), ('C', 'D', {'linia': 'R1', 'temps': 2}), ('D', 'E', {'linia': 'R1', 'temps': 2}), ('D', 'I', {'linia': 'R4', 'temps': 40}), ('D', 'J', {'linia': 'R6', 'temps': 20}), ('D', 'X', {'linia': 'R4', 'temps': 40}), ('E', 'F', {'linia': 'R1', 'temps': 2}), ('G', 'H', {'linia': 'R2', 'temps': 4}), ('H', 'I', {'linia': 'R2', 'temps': 5}), ('H', 'N', {'linia': 'R5', 'temps': 40}), ('I', 'J', {'linia': 'R2', 'temps': 6}), ('I', 'N', {'linia': 'R4', 'temps': 40}), ('J', 'K', {'linia': 'R2', 'temps': 7}), ('J', 'P', {'linia': 'R6', 'temps': 19}), ('K', 'L', {'linia': 'R2', 'temps': 8}), ('M', 'N', {'linia': 'R3', 'temps': 30}), ('N', 'O', {'linia': 'R3', 'temps': 30}), ('N', 'S', {'linia': 'R5', 'temps': 40}), ('O', 'P', {'linia': 'R3', 'temps': 30}), ('P', 'Q', {'linia': 'R3', 'temps': 30}), ('P', 'T', {'linia': 'R6', 'temps': 18}), ('T', 'U', {'linia': 'R6', 'temps': 17})]

Tests per a parada_mes_llunyana

>>> from metro3 import parada_mes_llunyana
>>> g1 = crea_graf(4)
>>> g2 = crea_graf(5)
>>> g3 = crea_graf(6)
>>> parada_mes_llunyana(g1, 'A')  # doctesttag: +TAG=1_parada_mes_llunyana
('Q', 61)
>>> parada_mes_llunyana(g1, 'B')  # doctesttag: +TAG=1_parada_mes_llunyana
('Q', 59)
>>> parada_mes_llunyana(g1, 'M')  # doctesttag: +TAG=1_parada_mes_llunyana
('X', 53)
>>> parada_mes_llunyana(g2, 'G')  # doctesttag: +TAG=1_parada_mes_llunyana
('R', 60)
>>> parada_mes_llunyana(g2, 'M')  # doctesttag: +TAG=1_parada_mes_llunyana
('R', 75)
>>> parada_mes_llunyana(g3, 'X')  # doctesttag: +TAG=1_parada_mes_llunyana
('U', 88)
>>> parada_mes_llunyana(g3, 'S')  # doctesttag: +TAG=1_parada_mes_llunyana
('R', 99)
>>> for p in g1.nodes():    # doctesttag: +TAG=1_parada_mes_llunyana
...    print(parada_mes_llunyana(g1, p))
('Q', 61)
('Q', 59)
('Q', 57)
('Q', 55)
('Q', 57)
('Q', 59)
('Q', 49)
('Q', 45)
('Q', 40)
('Q', 46)
('Q', 53)
('Q', 61)
('X', 53)
('X', 45)
('X', 53)
('X', 61)
('X', 69)
('Q', 69)
>>> for p in g2.nodes():    # doctesttag: +TAG=1_parada_mes_llunyana
...    print(parada_mes_llunyana(g2, p))
('S', 69)
('S', 67)
('S', 65)
('S', 63)
('S', 65)
('S', 67)
('R', 60)
('R', 56)
('R', 51)
('R', 57)
('R', 64)
('R', 72)
('R', 75)
('R', 67)
('R', 75)
('R', 83)
('R', 91)
('S', 77)
('S', 99)
('R', 99)
>>> for p in g3.nodes():    # doctesttag: +TAG=1_parada_mes_llunyana
...    print(parada_mes_llunyana(g3, p))
('U', 80)
('U', 78)
('U', 76)
('U', 74)
('U', 76)
('U', 78)
('U', 69)
('U', 65)
('U', 60)
('R', 56)
('R', 63)
('R', 71)
('R', 75)
('R', 67)
('R', 75)
('R', 75)
('R', 83)
('U', 88)
('U', 110)
('R', 99)
('R', 93)
('R', 110)

Tests per a cjt_substrings

>>> from substrings import cjt_strings
>>> cjt_strings('abcdefgh', 25)  # doctesttag: +TAG=2_cjt_strings
set()
>>> cjt_strings('abcdefghijklmnopqrstuvxyz', 7)   # doctesttag: +TAG=2_cjt_strings
set()
>>> cjt_strings('aaaaaaaaaaaaaaaaaaaaaa', 6)  # doctesttag: +TAG=2_cjt_strings
{'aaaaaa'}
>>> cjt_strings('piiip', 5)  # doctesttag: +TAG=2_cjt_strings
{'piiip'}
>>> cjt_strings('aabbccddeeffgghh', 2) == {'bb', 'ee', 'gg', 'hh', 'cc', 'ff', 'dd', 'aa'} # doctesttag: +TAG=2_cjt_strings
True
>>> cjt_strings('aabbccddeeffgghh' * 5, 2)  == {'bb', 'ee', 'gg', 'hh', 'cc', 'ff', 'dd', 'aa'} # doctesttag: +TAG=2_cjt_strings
True
>>> cjt_strings('AMANIDACATALANA', 3) == {'AMA', 'ACA', 'ANA', 'ALA', 'ATA'} # doctesttag: +TAG=2_cjt_strings
True
>>> cjt_strings('AMANIDACATALANA', 5) == {'ALANA', 'ANIDA', 'ACATA', 'ATALA'} # doctesttag: +TAG=2_cjt_strings
True
>>> cjt_strings('AMANIDACATALANA' * 2, 8) == {'ALANAAMA', 'AAMANIDA', 'ATALANAA'} # doctesttag: +TAG=2_cjt_strings
True
>>> cjt_strings('claclecliclocluc' * 3, 4)  == {'licl', 'lacl', 'cluc', 'locl', 'lecl', 'clec', 'clac', 'cloc', 'clic'} # doctesttag: +TAG=2_cjt_strings
True

Test per a gran_arbre

>>> import pandas as pd
>>> from bd_arbres import gran_arbre
>>> df = pd.read_csv('arbres_tst.csv', index_col='Tree_ID')
>>> dfcl = df.dropna()
>>> df2 = dfcl[1000:3000]
>>> nomc, diam, alt = gran_arbre(dfcl, 'Santry', 'Dead')
>>> print(nomc, '---', diam, '---', alt) # doctesttag: +TAG=3_gran_arbre
Myrobalan (Purple) Plum --- 28.0 --- 5.1-10
>>> nomc, diam, alt = gran_arbre(dfcl, 'Santry', 'Fair')
>>> print(nomc, '---', diam, '---', alt) # doctesttag: +TAG=3_gran_arbre
Horse Chestnut --- 94.0 --- > 20.1
>>> nomc, diam, alt = gran_arbre(df2, 'Howth', 'Fair')
>>> print(nomc, '---', diam, '---', alt) # doctesttag: +TAG=3_gran_arbre
Elm --- 42.0 --- 15.1-20
>>> nomc, diam, alt = gran_arbre(dfcl, 'Mulhuddart', 'Poor')
>>> print(nomc, '---', diam, '---', alt) # doctesttag: +TAG=3_gran_arbre
Common Beech --- 118.0 --- 5.1-10
>>> nomc, diam, alt = gran_arbre(df2, 'Howth', 'Dead')
>>> print(nomc, '---', diam, '---', alt) # doctesttag: +TAG=3_gran_arbre
Stump --- 10.0 --- Up to 5
>>> dfaux = df2[df2.Town == 'Clonsilla']
>>> for e in sorted(dfaux.Condition.unique()):
...    nomc, diam, alt = gran_arbre(df2, 'Clonsilla', e)
...    print(nomc, '---', diam, '---', alt)   # doctesttag: +TAG=3_gran_arbre
Common Ash --- 58.0 --- 15.1-20
Norway Maple --- 22.0 --- 5.1-10
>>> dfaux = df2[df2.Town == 'Skerries']
>>> for e in sorted(dfaux.Condition.unique()):
...    nomc, diam, alt = gran_arbre(df2, 'Skerries', e)
...    print(nomc, '---', diam, '---', alt)   # doctesttag: +TAG=3_gran_arbre
Norway Maple --- 30.0 --- 5.1-10
Common Ash --- 18.0 --- 5.1-10
Sycamore --- 33.0 --- 10.1- 15
London Plane --- 38.0 --- 5.1-10
Whitebeam --- 28.0 --- 5.1-10
>>> dfaux = dfcl[dfcl.Town == 'Malahide']
>>> for e in sorted(dfaux.Condition.unique()):
...    nomc, diam, alt = gran_arbre(dfcl, 'Malahide', e)
...    print(nomc, '---', diam, '---', alt)   # doctesttag: +TAG=3_gran_arbre
Common Ash --- 65.0 --- 5.1-10
Maple --- 65.0 --- 10.1- 15
Lime --- 71.0 --- Up to 5
Eucalyptus --- 69.0 --- 10.1- 15
Oak --- 65.0 --- > 20.1
Oak --- 66.0 --- > 20.1
>>> dfaux = dfcl[dfcl.Condition == 'Poor']
>>> for t in sorted(dfaux.Town.unique()):
...    nomc, diam, alt = gran_arbre(dfcl, t, 'Poor')
...    print(nomc, '---', diam, '---', alt)   # doctesttag: +TAG=3_gran_arbre
Cherry --- 14.0 --- 5.1-10
Common Ash --- 9.0 --- Up to 5
Common Beech --- 119.0 --- > 20.1
Rowan (Mountain Ash) --- 13.0 --- Up to 5
Horse Chestnut --- 42.0 --- 10.1- 15
Pedunculate (English) Oak --- 65.0 --- 10.1- 15
Horse Chestnut --- 81.0 --- 10.1- 15
Sycamore --- 82.0 --- 15.1-20
Norway Maple --- 36.0 --- Up to 5
Rowan (Mountain Ash) --- 37.0 --- 5.1-10
Pedunculate (English) Oak --- 73.0 --- 10.1- 15
Maple --- 29.0 --- 5.1-10
Oak --- 66.0 --- > 20.1
Common Beech --- 118.0 --- 5.1-10
Japanese Cherry --- 15.0 --- 5.1-10
Norway Maple --- 33.0 --- 10.1- 15
Norway Maple --- 7.0 --- Up to 5
Common Beech --- 88.0 --- 5.1-10
Norway Maple --- 29.0 --- 5.1-10
Sycamore --- 41.0 --- 5.1-10
Silver Birch --- 38.0 --- 10.1- 15
Unknown Conifer --- 36.0 --- Up to 5
Black Poplar --- 54.0 --- 15.1-20
Norway Maple --- 35.0 --- 10.1- 15
Common Beech --- 100.0 --- 10.1- 15
>>> dfaux = dfcl[dfcl.Condition == 'Fair']
>>> for t in sorted(dfaux.Town.dropna().unique()):
...    nomc, diam, alt = gran_arbre(dfcl, t, 'Fair')
...    print(nomc, '---', diam, '---', alt)   # doctesttag: +TAG=3_gran_arbre
Common Ash --- 30.0 --- 5.1-10
Norway Maple --- 116.0 --- 5.1-10
Sycamore --- 61.0 --- 15.1-20
Norway Maple --- 50.0 --- 15.1-20
Common Beech --- 82.0 --- > 20.1
White Willow --- 161.0 --- 15.1-20
Common Lime --- 77.0 --- > 20.1
Elm --- 54.0 --- 15.1-20
Leyland Cypress --- 45.0 --- 15.1-20
Horse Chestnut --- 61.0 --- 10.1- 15
Norway Maple --- 34.0 --- 10.1- 15
Maple --- 65.0 --- 10.1- 15
Common Lime --- 159.0 --- > 20.1
Japanese Cherry --- 42.0 --- 5.1-10
Norway Maple --- 21.0 --- Up to 5
Horse Chestnut --- 94.0 --- > 20.1
Norway Maple --- 42.0 --- 5.1-10
Sycamore --- 35.0 --- 10.1- 15
Sycamore --- 45.0 --- 10.1- 15
Holm Oak --- 57.0 --- 10.1- 15
Japanese Cherry --- 1402.0 --- 5.1-10
Norway Maple --- 44.0 --- 10.1- 15
Common Lime --- 65.0 --- > 20.1

Tests per a noms_comuns

>>> from bd_arbres import noms_comuns
>>> df = pd.read_csv('arbres_tst.csv', index_col='Tree_ID')
>>> dfcl = df.dropna()
>>> df2 = dfcl[1000:3000]
>>> cjt = noms_comuns(df.iloc[:2])
>>> cjt == {"Acer platanoides 'Globosum'": 'Mop-Head Maple', 'Carpinus betulus': 'Hornbeam'}   # doctesttag: +TAG=3_noms_comuns
True
>>> cjt = noms_comuns(df.iloc[2:10])
>>> cjt == {'Acer platanoides': 'Norway Maple', 'Fraxinus excelsior': 'Common Ash', 'Tilia cordata': 'Small-Leafed Lime', 'Carpinus betulus': 'Hornbeam'} # doctesttag: +TAG=3_noms_comuns
True
>>> cjt = noms_comuns(df2[df2.Species_Desc.str.startswith('S')])
>>> cjt == {'Sorbus intermedia': 'Swedish Whitebeam', 'Sorbus aria': 'Whitebeam', 'Sorbus aucuparia': 'Rowan (Mountain Ash)', 'Sorbus x thuringiaca': 'Bastard Service Tree', 'Stump': 'Stump', "Sorbus aria 'Lutescens'": 'Whitebeam', "Sorbus x thuringiaca 'Fastigiata'": 'Bastard Service Tree', 'Salix caprea': 'Goat Willow'}  # doctesttag: +TAG=3_noms_comuns
True
>>> cjt = noms_comuns(df2.iloc[123456:])
>>> cjt == {} # doctesttag: +TAG=3_noms_comuns
True
>>> cjt = noms_comuns(dfcl[dfcl.Species_Desc.str.startswith('Prunus')])
>>> cjt == {'Prunus serrulata': 'Japanese Cherry', "Prunus cerasifera 'Nigra'": 'Myrobalan (Purple) Plum', 'Prunus spp.': 'Cherry', 'Prunus serrula': 'Tibetan cherry', 'Prunus cerasifera': 'Myrobalan Plum', 'Prunus avium': 'Gean (Wild Cherry)', 'Prunus spinosa': 'Blackthorn', 'Prunus laurocerasus': 'Cherry Laurel'} # doctesttag: +TAG=3_noms_comuns
True
>>> cjt = noms_comuns(df.iloc[100:200])
>>> cjt == {'Acer platanoides': 'Norway Maple', 'Platanus x acerifolia': 'London Plane', 'Tilia spp.': 'Lime', 'Alnus glutinosa': 'Common Alder', 'Fraxinus ornus': 'Manna Ash', 'Acer pseudoplatanus': 'Sycamore', 'Sorbus aucuparia': 'Rowan (Mountain Ash)', 'Fagus sylvatica': 'Common Beech', "Acer platanoides 'Crimson Sentry'": 'Norway Maple', 'Tilia cordata': 'Small-Leafed Lime', "Acer platanoides 'Crimson King'": 'Norway Maple', 'Betula pendula': 'Silver Birch', 'Carpinus betulus': 'Hornbeam', 'Fraxinus excelsior': 'Common Ash', 'Populus nigra': 'Black Poplar', 'Prunus serrula': 'Tibetan cherry', 'Alnus incana': 'Grey Alder', 'Prunus serrulata': 'Japanese Cherry', 'Sorbus intermedia': 'Swedish Whitebeam', 'Ulmus spp.': 'Elm', 'Pyrus spp.': 'Pear', 'Platanus x hispanica': 'London Plane', 'Cercis siliquastrum': 'Judas Tree', "Carpinus betulus 'Fastigiata'": 'Hornbeam', 'Tilia x europaea': 'Common Lime', 'Acer pseudoplatanus f. purpureum': 'Sycamore', 'Sorbus aria': 'Whitebeam', 'Acer saccharinum': 'Silver Maple', "Crat. oxyacanthoides 'Paul's Scarlet'": 'Midland Thorn', 'Acer campestre "Queen Elizabeth"': 'Field Maple'}  # doctesttag: +TAG=3_noms_comuns
True
>>> cjt = noms_comuns(df.iloc[3000::1000])
>>> cjt == {'Tilia cordata': 'Small-Leafed Lime', 'Prunus spp.': 'Cherry', 'Sorbus intermedia': 'Swedish Whitebeam', 'Acer platanoides': 'Norway Maple', 'Acer pseudoplatanus': 'Sycamore', "Prunus cerasifera 'Nigra'": 'Myrobalan (Purple) Plum', 'Prunus serrulata': 'Japanese Cherry', 'Alnus glutinosa': 'Common Alder', 'Tilia spp.': 'Lime', 'Sorbus aucuparia': 'Rowan (Mountain Ash)', 'Acer campestre': 'Field Maple', 'Sorbus x thuringiaca': 'Bastard Service Tree'}  # doctesttag: +TAG=3_noms_comuns
True
>>> cjt = noms_comuns(df2.iloc[-10:])
>>> cjt == {'Acer platanoides': 'Norway Maple', 'Acer pseudoplatanus f. purpureum': 'Sycamore', 'Larix kaempferi': 'Japanese Larch', 'Tilia spp.': 'Lime', 'Acer campestre': 'Field Maple', 'Corylus colorna': 'Turkish hazel'}   # doctesttag: +TAG=3_noms_comuns
True
>>> cjt = noms_comuns(dfcl[dfcl.Common_Name.str.endswith('Lime')])
>>> cjt == {'Tilia spp.': 'Lime', 'Tilia x europaea': 'Common Lime', 'Tilia cordata': 'Small-Leafed Lime', 'Tilia  euchlora': 'Caucasian Lime', "Tilia cordata 'Greenspire'": 'Small-Leafed Lime', "Tilia platyphyllos 'Rubra'": 'Large-Leafed Lime', 'Tilia cordata "Street Wise"': 'Small-Leafed Lime'} # doctesttag: +TAG=3_noms_comuns
True
>>> cjt = noms_comuns(df)
>>> cjt == {"Acer platanoides 'Globosum'": 'Mop-Head Maple', 'Carpinus betulus': 'Hornbeam', 'Acer platanoides': 'Norway Maple', 'Fraxinus excelsior': 'Common Ash', 'Tilia cordata': 'Small-Leafed Lime', 'Betula jacquemontii': 'Kashmir Birch', "Acer platanoides 'Drummondii'": 'Harlequin Maple', 'Alnus incana': 'Grey Alder', 'Betula pendula': 'Silver Birch', 'Platanus x acerifolia': 'London Plane', 'Prunus serrulata': 'Japanese Cherry', 'Populus spp.': 'Poplar', 'Sorbus aria': 'Whitebeam', 'Tilia spp.': 'Lime', 'Ulmus spp.': 'Elm', 'Sorbus aucuparia': 'Rowan (Mountain Ash)', 'Acer pseudoplatanus': 'Sycamore', "Prunus cerasifera 'Nigra'": 'Myrobalan (Purple) Plum', 'Crataegus monogyna': 'Hawthorn', 'Sorbus intermedia': 'Swedish Whitebeam', 'Fagus sylvatica': 'Common Beech', 'Tilia x europaea': 'Common Lime', "Acer platanoides 'Crimson Sentry'": 'Norway Maple', 'Acer spp.': 'Maple', 'Prunus spp.': 'Cherry', 'Acer campestre': 'Field Maple', 'Sorbus x thuringiaca': 'Bastard Service Tree', 'Acer saccharinum': 'Silver Maple', 'Alnus glutinosa': 'Common Alder', 'Fraxinus ornus': 'Manna Ash', "Acer platanoides 'Crimson King'": 'Norway Maple', 'Populus nigra': 'Black Poplar', 'Prunus serrula': 'Tibetan cherry', 'Pyrus spp.': 'Pear', 'Platanus x hispanica': 'London Plane', 'Cercis siliquastrum': 'Judas Tree', "Carpinus betulus 'Fastigiata'": 'Hornbeam', 'Acer pseudoplatanus f. purpureum': 'Sycamore', "Crat. oxyacanthoides 'Paul's Scarlet'": 'Midland Thorn', 'Acer campestre "Queen Elizabeth"': 'Field Maple', 'Stump': 'Stump', 'Prunus cerasifera': 'Myrobalan Plum', 'Malus spp.': 'Crab apple', 'Quercus ilex': 'Holm Oak', "Sorbus x thuringiaca 'Fastigiata'": 'Bastard Service Tree', 'Corylus spp.': 'Common Hazel', 'Malus floribunda': 'Japanese Crab', 'Corylus colorna': 'Turkish hazel', 'Aesculus hippocastanum': 'Horse Chestnut', 'Salix fragilis': 'Crack willow', 'Pyrus calleryana': 'Pear', 'Prunus avium': 'Gean (Wild Cherry)', 'Pinus nigra var nigra': 'Austrian Pine', 'Prunus persica': 'Peach', 'Fraxinus spp.': 'Common Ash', 'x Cupressocyparis leylandii': 'Leyland Cypress', 'Salix spp.': 'Willow', 'Amelanchier lamarchii': 'Serviceberry', 'Acer campestre "Streetwise"': 'Field Maple', 'Cupressus macrocarpa': 'Monterey Cypress', 'Morus nigra': 'Black Mulberry', 'Pinus sylvestris': 'Scots Pine', 'Salix caprea': 'Goat Willow', "Sorbus aria 'Lutescens'": 'Whitebeam', 'Alnus spp.': 'Common Alder', 'Betula spp.': 'Birch', 'Tilia  euchlora': 'Caucasian Lime', 'Quercus spp.': 'Oak', 'Betula papyrifera': 'Paper-Bark Birch (Canoe birch)', "Tilia cordata 'Greenspire'": 'Small-Leafed Lime', "Tilia platyphyllos 'Rubra'": 'Large-Leafed Lime', "Acer pseudoplatanus 'Leopoldii'": 'Sycamore', 'Larix kaempferi': 'Japanese Larch', 'Acer buergerianum': 'Trident maple', 'Prunus dulcis': 'Almond', 'Alnus cordata': 'Italian alder', 'Cordyline australis': 'Cabbage Palm', 'Liquidamber styraciflua': 'Sweet Gum', 'Populus alba': 'White Poplar', 'Robinia pseudocacia': 'Locust Tree (False Acacia)', "Gleditsia triacanthos 'Skyline'": 'Honey-Locust', "Gleditsia triancanthos 'sunburst'": 'Honey-Locust', 'Crataegus crus-galli': 'Cockspur Thorn', 'Crataegus spp.': 'Hawthorn', "Populus nigra 'Italica'": 'Lombardy Poplar', "Abies pinsapo 'Glauca'": 'Spanish Fir (Hedgehog fir)', 'Fagus sylvatica f. purpurea': 'Copper Beech', 'Sambucus nigra': 'Elder', "Populus x candicans 'Aurora'": 'Ontario Poplar', 'Eucalyptus spp.': 'Eucalyptus', 'Taxus baccata': 'Common Yew', 'Laburnum x watereri': 'Laburnum', 'Acer negundo': 'Box elder', 'Chamaecyparis lawsoniana': 'Lawson Cypress', "Tilia cordata 'Erecta'": 'Small-Leafed Lime', "Acer pseudoplatanus 'Atropurpureum'": 'Sycamore', 'Unknown Broadleaf': 'Unknown Broadleaf', 'Quercus robur': 'Pedunculate (English) Oak', "Salix 'Chrysocoma'": 'Weeping willow', 'Acer rubrum': 'Red Maple', 'Unknown Conifer': 'Unknown Conifer', 'Fraxinus angustifolia': 'Narrow-Leafed Ash', 'Cedrus deodara': 'Deodar', "Acer pseudoplatanus 'Negenia'": 'Sycamore', 'Ulmus glabra': 'Wych Elm', 'Amelanchier alniflora': 'Serviceberry', 'Abis numidica x homolepsis': 'Algerian Fir', 'Morus alba': 'White Mulberry', 'Castanea sativa': 'Sweet (Spanish) Chestnut', 'Betula nigra': 'Black Birch (River Birch)', 'Acer palmatum': 'Smooth Japanese Maple', 'Thuja spp.': 'Cypress', 'Amelanchier arborea': 'Serviceberry', 'Euonymus europaeus': 'Spindle bush', 'Prunus spinosa': 'Blackthorn', 'Robinia pseudocacia "Bessoniana"': 'Locust Tree (False Acacia)', 'Tilia cordata "Street Wise"': 'Small-Leafed Lime', 'Abies cephalonica': 'Grecian Fir', 'Crataegus oxyacanthoides': 'Midland Hawthorn', "Malus x zumi 'Golden Hornet'": 'Crab apple', 'Cotoneaster spp.': 'Cotoneaster', 'Liriodendron tulipifera': 'Tulip Tree', 'Juglans regia': 'Common Walnut', 'Prunus laurocerasus': 'Cherry Laurel', 'Quercus cerris': 'Turkey oak', 'Abies pinsapo': 'Spanish Fir (Hedgehog fir)', 'Ilex aquifolium': 'Holly', 'Pinus radiata': 'Monterey Pine', 'Ulmus procera': 'English Elm', 'Salix alba': 'White Willow', 'Ginko biloba': 'Maidenhair Tree', 'Quercus petraea': 'Sessile (Durmast) Oak', 'Betula albosinensis var septentrionalis': 'Chinese red-barked birch', 'Abies nordmanianna': 'Caucasian Fir', "Carpinus fastigiata 'Frans Fontaine'": 'Hornbeam', "Laburnum alpinum 'Autumnale'": 'Laburnum', 'Pyracantha coccinia': 'Firethorn', "Pyrus salicifolia'Pendula'": 'Weeping willow leafed pear', 'Juniperus spp.': 'Common Juniper', 'Populus tremula': 'Aspen', 'Eucalyptus gunnii': 'Cider gum', 'Pinus spp.': 'Pine', "Laburnum x watereri 'Vossii'": "Voss's Laburnum", 'Sequoiadendron giganteum': 'Wellingtonia', "Picea glauca 'Albertiana'": 'Dwarf Alberta Spruce', 'Cedrus atlantica Glauca': 'Blue Atlas Cedar', 'Acacia dealbata': 'Mimosa (Silver Wattle)'} # doctesttag: +TAG=3_noms_comuns
True