[docs]
def subbasins(gf):
    """
    Aggregates ocean regions into the following larger sub-basins:
    * Arctic Ocean Basin
    * North Atlantic Basin
    * South Atlantic Basin
    * North Pacific Basin
    * South Pacific Basin
    * Indian Ocean Basin
    * Southern Ocean Basin
    Parameters
    ----------
    gf : geometric_features.GeometricFeatures
        An object that knows how to download and read geometric features
    Returns
    -------
    fc : geometric_features.FeatureCollection
        The new feature collection with ocean sub-basins
    """
    # Authors
    # -------
    # Milena Veneziani
    author = 'Milena Veneziani'
    # Create Arctic Ocean
    fcAr = gf.read('ocean', 'region', ['Central Arctic'])
    fcESS = gf.read('ocean', 'region', ['East Siberian Sea'])
    fcLap = gf.read('ocean', 'region', ['Laptev Sea'])
    fcChu = gf.read('ocean', 'region', ['Chukchi Sea'])
    fcCa = gf.read('ocean', 'region', ['Canada Basin'])
    fcKara = gf.read('ocean', 'region', ['Kara Sea'])
    fcBarents = gf.read('ocean', 'region', ['Barents Sea'])
    fcAr.merge(fcESS)
    fcAr.merge(fcLap)
    fcAr.merge(fcChu)
    fcAr.merge(fcCa)
    fcAr.merge(fcKara)
    fcAr.merge(fcBarents)
    fcAr = fcAr.combine('Arctic Ocean Basin')
    props = fcAr.features[0]['properties']
    props['tags'] = ['Arctic_Ocean_Basin', 'oceanSubBasinRegions']
    props['author'] = author
    # Create North Atlantic
    fcNA = gf.read('ocean', 'region', ['North Atlantic Ocean'])
    fcGS = gf.read('ocean', 'region', ['Greenland Sea'])
    fcLab = gf.read('ocean', 'region', ['Labrador Sea'])
    fcNor = gf.read('ocean', 'region', ['Norwegian Sea'])
    fcIrm = gf.read('ocean', 'region', ['Irminger Sea'])
    fcBayFundy = gf.read('ocean', 'region', ['Bay of Fundy'])
    fcNorthSea = gf.read('ocean', 'region', ['North Sea'])
    fcBaltic = gf.read('ocean', 'region', ['Baltic Sea'])
    fcEngCh = gf.read('ocean', 'region', ['English Channel'])
    fcCeltic = gf.read('ocean', 'region', ['Celtic Sea'])
    fcBristol = gf.read('ocean', 'region', ['Bristol Channel'])
    fcScot = gf.read('ocean', 'region',
                     ['Inner Seas off the West Coast of Scotland'])
    fcIrish = gf.read('ocean', 'region', ['Irish Sea and St Georges Channel'])
    fcBothnia = gf.read('ocean', 'region', ['Gulf of Bothnia'])
    fcCanArc = gf.read('ocean', 'region', ['Canadian Archipelago'])
    fcHudson = gf.read('ocean', 'region', ['Hudson Bay'])
    fcBaffin = gf.read('ocean', 'region', ['Baffin Bay'])
    fcBayBiscay = gf.read('ocean', 'region', ['Bay of Biscay'])
    fcGStLaw = gf.read('ocean', 'region', ['Gulf of St-Lawrence'])
    fcGMexico = gf.read('ocean', 'region', ['Gulf of Mexico'])
    fcCarr = gf.read('ocean', 'region', ['Caribbean Sea'])
    fcGuinea = gf.read('ocean', 'region', ['Gulf of Guinea'])
    fcNA.merge(fcGS)
    fcNA.merge(fcLab)
    fcNA.merge(fcNor)
    fcNA.merge(fcIrm)
    fcNA.merge(fcBayFundy)
    fcNA.merge(fcNorthSea)
    fcNA.merge(fcBaltic)
    fcNA.merge(fcEngCh)
    fcNA.merge(fcCeltic)
    fcNA.merge(fcBristol)
    fcNA.merge(fcScot)
    fcNA.merge(fcIrish)
    fcNA.merge(fcBothnia)
    fcNA.merge(fcCanArc)
    fcNA.merge(fcHudson)
    fcNA.merge(fcBaffin)
    fcNA.merge(fcBayBiscay)
    fcNA.merge(fcGStLaw)
    fcNA.merge(fcGMexico)
    fcNA.merge(fcCarr)
    fcNA.merge(fcGuinea)
    fcNA = fcNA.combine('North Atlantic Basin')
    props = fcNA.features[0]['properties']
    props['tags'] = ['North_Atlantic_Basin', 'oceanSubBasinRegions']
    props['author'] = author
    # Create South Atlantic
    fcSA = gf.read('ocean', 'region', ['South Atlantic Ocean'])
    fcRio = gf.read('ocean', 'region', ['Rio de La Plata'])
    fcSA.merge(fcRio)
    fcSA = fcSA.combine('South Atlantic Basin')
    props = fcSA.features[0]['properties']
    props['tags'] = ['South_Atlantic_Basin', 'oceanSubBasinRegions']
    props['author'] = author
    # Create North Pacific
    fcNP = gf.read('ocean', 'region', ['North Pacific Ocean'])
    fcECS = gf.read('ocean', 'region', ['Eastern China Sea'])
    fcAla = gf.read('ocean', 'region', ['Gulf of Alaska'])
    fcAla2 = gf.read('ocean', 'region',
                     ['The Coastal Waters of Southeast Alaska and British '
                      'Columbia'])
    fcHala = gf.read('ocean', 'region', ['Halamahera Sea'])
    fcYell = gf.read('ocean', 'region', ['Yellow Sea'])
    fcSCS = gf.read('ocean', 'region', ['South China Sea'])
    fcThai = gf.read('ocean', 'region', ['Gulf of Thailand'])
    fcBering = gf.read('ocean', 'region', ['Bering Sea'])
    fcGCali = gf.read('ocean', 'region', ['Gulf of California'])
    fcJapan = gf.read('ocean', 'region', ['Japan Sea'])
    fcSeaOk = gf.read('ocean', 'region', ['Sea of Okhotsk'])
    fcSingapore = gf.read('ocean', 'region', ['Singapore Strait'])
    fcPhil = gf.read('ocean', 'region', ['Philippine Sea'])
    fcSulu = gf.read('ocean', 'region', ['Sulu Sea'])
    fcInland = gf.read('ocean', 'region', ['Inland Sea'])
    fcCelebes = gf.read('ocean', 'region', ['Celebes Sea'])
    fcNP.merge(fcECS)
    fcNP.merge(fcAla)
    fcNP.merge(fcAla2)
    fcNP.merge(fcHala)
    fcNP.merge(fcYell)
    fcNP.merge(fcSCS)
    fcNP.merge(fcThai)
    fcNP.merge(fcBering)
    fcNP.merge(fcGCali)
    fcNP.merge(fcJapan)
    fcNP.merge(fcSeaOk)
    fcNP.merge(fcSingapore)
    fcNP.merge(fcPhil)
    fcNP.merge(fcSulu)
    fcNP.merge(fcInland)
    fcNP.merge(fcCelebes)
    fcNP = fcNP.combine('North Pacific Basin')
    props = fcNP.features[0]['properties']
    props['tags'] = ['North_Pacific_Basin', 'oceanSubBasinRegions']
    props['author'] = author
    # Create South Pacific
    fcSP = gf.read('ocean', 'region', ['South Pacific Ocean'])
    fcBali = gf.read('ocean', 'region', ['Bali Sea'])
    fcSavu = gf.read('ocean', 'region', ['Savu Sea'])
    fcMak = gf.read('ocean', 'region', ['Makassar Strait'])
    fcAra = gf.read('ocean', 'region', ['Arafura Sea'])
    fcCeram = gf.read('ocean', 'region', ['Ceram Sea'])
    fcBis = gf.read('ocean', 'region', ['Bismarck Sea'])
    fcSolo = gf.read('ocean', 'region', ['Solomon Sea'])
    fcMol = gf.read('ocean', 'region', ['Molukka Sea'])
    fcBanda = gf.read('ocean', 'region', ['Banda Sea'])
    fcGBoni = gf.read('ocean', 'region', ['Gulf of Boni'])
    fcGTomini = gf.read('ocean', 'region', ['Gulf of Tomini'])
    fcJava = gf.read('ocean', 'region', ['Java Sea'])
    fcFlores = gf.read('ocean', 'region', ['Flores Sea'])
    fcTimor = gf.read('ocean', 'region', ['Timor Sea'])
    fcTasmanN = gf.read('ocean', 'region', ['Tasman Sea North'])
    fcCoral = gf.read('ocean', 'region', ['Coral Sea'])
    fcSP.merge(fcBali)
    fcSP.merge(fcSavu)
    fcSP.merge(fcMak)
    fcSP.merge(fcAra)
    fcSP.merge(fcCeram)
    fcSP.merge(fcBis)
    fcSP.merge(fcSolo)
    fcSP.merge(fcMol)
    fcSP.merge(fcBanda)
    fcSP.merge(fcGBoni)
    fcSP.merge(fcGTomini)
    fcSP.merge(fcJava)
    fcSP.merge(fcFlores)
    fcSP.merge(fcTimor)
    fcSP.merge(fcTasmanN)
    fcSP.merge(fcCoral)
    fcSP = fcSP.combine('South Pacific Basin')
    props = fcSP.features[0]['properties']
    props['tags'] = ['South_Pacific_Basin', 'oceanSubBasinRegions']
    props['author'] = author
    # Create Indian Ocean
    fcI = gf.read('ocean', 'region', ['Indian Ocean'])
    fcBassStN = gf.read('ocean', 'region', ['Bass Strait North'])
    fcBayBengal = gf.read('ocean', 'region', ['Bay of Bengal'])
    fcGulfOman = gf.read('ocean', 'region', ['Gulf of Oman'])
    fcMalaccaSt = gf.read('ocean', 'region', ['Malacca Strait'])
    fcGABN = gf.read('ocean', 'region', ['Great Australian Bight North'])
    fcMoz = gf.read('ocean', 'region', ['Mozambique Channel'])
    fcBu = gf.read('ocean', 'region', ['Andaman or Burma Sea'])
    fcAden = gf.read('ocean', 'region', ['Gulf of Aden'])
    fcLacc = gf.read('ocean', 'region', ['Laccadive Sea'])
    fcArab = gf.read('ocean', 'region', ['Arabian Sea'])
    fcI.merge(fcBassStN)
    fcI.merge(fcBayBengal)
    fcI.merge(fcGulfOman)
    fcI.merge(fcMalaccaSt)
    fcI.merge(fcGABN)
    fcI.merge(fcMoz)
    fcI.merge(fcBu)
    fcI.merge(fcAden)
    fcI.merge(fcLacc)
    fcI.merge(fcArab)
    fcI = fcI.combine('Indian Ocean Basin')
    props = fcI.features[0]['properties']
    props['tags'] = ['Indian_Ocean_Basin', 'oceanSubBasinRegions']
    props['author'] = author
    # Create Southern Ocean
    fcSO = gf.read('ocean', 'region', ['Southern Ocean'])
    fcTasmanS = gf.read('ocean', 'region', ['Tasman Sea South'])
    fcBassStS = gf.read('ocean', 'region', ['Bass Strait South'])
    fcGABS = gf.read('ocean', 'region', ['Great Australian Bight South'])
    fcSO.merge(fcTasmanS)
    fcSO.merge(fcBassStS)
    fcSO.merge(fcGABS)
    fcSO = fcSO.combine('Southern Ocean Basin')
    props = fcSO.features[0]['properties']
    props['tags'] = ['South_Ocean_Basin', 'oceanSubBasinRegions']
    props['author'] = author
    # Create Ocean subBasins merged feature
    fc = fcSO
    fc.merge(fcAr)
    fc.merge(fcNA)
    fc.merge(fcSA)
    fc.merge(fcNP)
    fc.merge(fcSP)
    fc.merge(fcI)
    props = fc.features[0]['properties']
    props['tags'] = 'oceanSubBasinRegions'
    props['author'] = author
    return fc