def _assert_doc_core(doc, is_update):
    """Assert core information."""
    tu.assert_iter(doc.reports, 1)
    r = doc.reports[0]
    tu.assert_date(r.date, '2011-05-01 12:00:00')
    tu.assert_object(r.evaluator, cim.v1.ResponsibleParty)
    tu.assert_str(r.evaluator.individual_name, '*****@*****.**')
    tu.assert_str(r.evaluator.role, 'pointofContact')
def _assert_doc_core(doc, is_update):
    """Assert core information."""
    tu.assert_str(doc.description, "The HadGEM2-A model", True)
    if not is_update:
        tu.assert_str(doc.long_name, "Hadley Global Environment Model 2 - Atmosphere")
    tu.assert_date(doc.release_date, "2009")
    tu.assert_str(doc.short_name, "HadGEM2-A")
    tu.assert_str(doc.type, "model")
    tu.assert_int(doc.types, 2)
    tu.assert_str(doc.types[1], "model")
def _assert_doc_core(doc, is_update):
    """Assert core information."""
    tu.assert_str(doc.description, "The HadGEM2-A model", True)
    if not is_update:
        tu.assert_str(doc.long_name,
                      "Hadley Global Environment Model 2 - Atmosphere")
    tu.assert_date(doc.release_date, "2009")
    tu.assert_str(doc.short_name, "HadGEM2-A")
    tu.assert_str(doc.type, "model")
    tu.assert_int(doc.types, 2)
    tu.assert_str(doc.types[1], "model")
def _assert_doc_report_evaluation(doc, is_update):
    """Assert report evaluation information."""
    r = doc.reports[0]
    tu.assert_object(r.evaluation, cim.v1.Evaluation)
    e = r.evaluation
    tu.assert_date(e.date, '2012-11-05')
    tu.assert_str(e.description, 'evaluationMethodType=indirect', True)
    tu.assert_str(e.explanation, 'The quality results for this ESG', True)
    tu.assert_str(e.specification, 'The CMIP5/AR5 Model Data Quality Control')
    tu.assert_str(e.specification_hyperlink, 'http://cmip5qc.wdc-climate.de')
    tu.assert_str(e.type, 'QC Level 2 Results')
    tu.assert_str(e.type_hyperlink, 'http://cera-www.dkrz.de/WDCC/CMIP5/QCResult.jsp?experiment=cmip5/output1/NCC/NorESM1-ME/rcp45')
def _assert_doc_member_change(doc, is_update):
    """Assert ensemble members information."""
    member = doc.members[1]
    
    tu.assert_iter(member.simulation_reference.changes, 1, cim.v1.Change)
    c = member.simulation_reference.changes[0]
    tu.assert_str(c.name, "IC mod")
    tu.assert_str(c.type, "InitialCondition")
    tu.assert_date(c.date, "1850-01-01T00:00:00Z")

    tu.assert_iter(c.details, 1, cim.v1.ChangeProperty)
    cp = c.details[0]
    tu.assert_str(cp.description, "ICs come from different points in the control run")
def _assert_doc_core(doc, is_update):
    """Assert core information."""
    tu.assert_str(doc.authors, "C. Jones, J. Hughes", True)
    tu.assert_object(doc.date_range, cim.v1.ClosedDateRange)
    tu.assert_str(doc.date_range.duration, "P30Y")
    tu.assert_date(doc.date_range.start, "1978-12-01 00:00:00+00:00")
    tu.assert_str(doc.description, "Main amip ensemble simulations", True)
    tu.assert_str(doc.long_name, "3.3 AMIP and AMIP Ensemble", True)
    tu.assert_iter(doc.projects, 1, str)
    tu.assert_iter(doc.projects[0], "CMIP5")
    tu.assert_iter(doc.responsible_parties, 4, cim.v1.ResponsibleParty)
    tu.assert_str(doc.short_name, "amip")
    tu.assert_object(doc.spinup_date_range, cim.v1.ClosedDateRange)
    tu.assert_str(doc.spinup_date_range.duration, "P30Y")
    tu.assert_date(doc.spinup_date_range.start, "1978-12-01 00:00:00+00:00")
def _assert_doc_core(doc, is_update):
    """Assert core information."""
    tu.assert_str(doc.authors, "C. Jones, J. Hughes", True)
    tu.assert_object(doc.date_range, cim.v1.ClosedDateRange)
    tu.assert_str(doc.date_range.duration, "P30Y")
    tu.assert_date(doc.date_range.start, "1978-12-01 00:00:00+00:00")
    tu.assert_str(doc.description, "Main amip ensemble simulations", True)
    tu.assert_str(doc.long_name, "3.3 AMIP and AMIP Ensemble", True)
    tu.assert_iter(doc.projects, 1, str)
    tu.assert_str(doc.projects[0], "CMIP5")
    tu.assert_iter(doc.responsible_parties, 4, cim.v1.ResponsibleParty)
    tu.assert_str(doc.short_name, "amip")
    tu.assert_object(doc.spinup_date_range, cim.v1.ClosedDateRange)
    tu.assert_str(doc.spinup_date_range.duration, "P30Y")
    tu.assert_date(doc.spinup_date_range.start, "1978-12-01 00:00:00+00:00")
def _assert_doc_extent(doc, is_update):
    """Assert extent information."""
    tu.assert_object(doc.extent, cim.v1.DataExtent)
    e = doc.extent
    tu.assert_object(e.geographical, cim.v1.DataExtentGeographical)
    tu.assert_float(e.geographical.east, 360.0)
    tu.assert_float(e.geographical.north, 90.0)
    tu.assert_float(e.geographical.south, -90.0)
    tu.assert_object(e.temporal, cim.v1.DataExtentTemporal)
    tu.assert_date(e.temporal.begin, "1859-12-01 00:00:00")
    tu.assert_date(e.temporal.end, "1999-12-30 00:00:00")
    tu.assert_object(e.temporal.time_interval, cim.v1.DataExtentTimeInterval)
    ti = e.temporal.time_interval
    tu.assert_int(ti.factor, -1)
    tu.assert_int(ti.radix, 50430)
    tu.assert_str(ti.unit, "day")
def _assert_doc_requirements(doc, is_update):
    """Assert experiment requirements."""
    tu.assert_iter(doc.requirements, 13, cim.v1.NumericalRequirement)

    # Initial condition.
    req = doc.requirements[0]
    tu.assert_object(req, cim.v1.InitialCondition)
    tu.assert_str(req.description, "Initial conditions are from", True)
    tu.assert_str(req.id, "ic.003")
    tu.assert_str(req.name, "3.3.ic")
    tu.assert_str(req.requirement_type, "initialCondition")

    # Boundary condition.
    req = doc.requirements[1]
    tu.assert_object(req, cim.v1.BoundaryCondition)
    tu.assert_str(req.requirement_type, "boundaryCondition")
    tu.assert_str(req.description, "Imposed changing concentrations", True)
    tu.assert_none(req.id)
    tu.assert_str(req.name, "3.3.bc.sls")

    # Boundary condition - options.
    tu.assert_iter(req.options, 2, cim.v1.NumericalRequirementOption)
    opt = req.options[0]
    tu.assert_str(opt.relationship, "XOR")
    tu.assert_object(opt.requirement, cim.v1.BoundaryCondition)
    # ... sub-requirement
    req = opt.requirement
    tu.assert_str(req.requirement_type, "boundaryCondition")
    tu.assert_str(req.description, "Concentrations")
    tu.assert_str(req.id, "bc.013")
    tu.assert_str(req.name, "3.3.bc.sls_conc")

    # Spatio Temporal Constraint.
    req = doc.requirements[12]
    tu.assert_object(req, cim.v1.SpatioTemporalConstraint)
    tu.assert_object(req.date_range, cim.v1.ClosedDateRange)
    tu.assert_str(req.date_range.duration, "P30Y")
    tu.assert_date(req.date_range.end, "2008-12-30 00:00:00+00:00")
    tu.assert_date(req.date_range.start, "1979-01-01 00:00:00+00:00")
    tu.assert_str(req.description, "Begin in 1979 and", True)
    tu.assert_str(req.id, "stc.027")
    tu.assert_str(req.name, "3.3.stc.1979_30yr")
    tu.assert_str(req.requirement_type, "spatioTemporalConstraint")
def _assert_doc_sub_components(doc, is_update):
    """Assert sub-components."""
    tu.assert_int(doc.sub_components, 4)

    sc = doc.sub_components[0]
    tu.assert_int(sc.citations, 1)
    tu.assert_str(sc.description, "The model includes interactive schemes",
                  True)
    tu.assert_uuid(sc.meta.id, "7a44cb24-03ca-11e1-a36a-00163e9152a5")
    tu.assert_int(sc.meta.version, 1)
    tu.assert_date(sc.meta.create_date, "2012-04-23 14:59:04.757315")
    tu.assert_str(sc.long_name, "Aerosols")
    tu.assert_int(sc.properties, 4)
    tu.assert_int(sc.responsible_parties, 4)
    tu.assert_int(sc.sub_components, 3)
    tu.assert_str(sc.short_name, "Aerosols")
    tu.assert_str(sc.type, "Aerosols")
    tu.assert_int(sc.types, 3)

    # Property.
    p = sc.properties[0]
    tu.assert_bool(p.is_represented, True)
    tu.assert_str(p.long_name, "Aerosols")
    tu.assert_str(p.short_name, "Aerosol Key Properties")
    tu.assert_int(p.sub_properties, 6)

    p = sc.properties[2]
    tu.assert_int(p.standard_names, 1)
    tu.assert_str(p.standard_names[0], "tendency_of_atmosphere", True)
    tu.assert_str(p.units, "kg/m2/s")

    # Sub-property.
    p = sc.properties[0].sub_properties[0]
    tu.assert_str(p.short_name, "AerosolSchemeScope")
    tu.assert_str(p.long_name, "AerosolSchemeScope")
    tu.assert_int(p.values, 1)
    tu.assert_str(p.values[0], "Whole atmosphere")
def _assert_doc_sub_components(doc, is_update):
    """Assert sub-components."""
    tu.assert_int(doc.sub_components, 4)

    sc = doc.sub_components[0]
    tu.assert_int(sc.citations, 1)
    tu.assert_str(sc.description, "The model includes interactive schemes", True)
    tu.assert_uuid(sc.meta.id, "7a44cb24-03ca-11e1-a36a-00163e9152a5")
    tu.assert_int(sc.meta.version, 1)
    tu.assert_date(sc.meta.create_date, "2012-04-23 14:59:04.757315")
    tu.assert_str(sc.long_name, "Aerosols")
    tu.assert_int(sc.properties, 4)
    tu.assert_int(sc.responsible_parties, 4)
    tu.assert_int(sc.sub_components, 3)
    tu.assert_str(sc.short_name, "Aerosols")
    tu.assert_str(sc.type, "Aerosols")
    tu.assert_int(sc.types, 3)

    # Property.
    p = sc.properties[0]
    tu.assert_bool(p.is_represented, True)
    tu.assert_str(p.long_name, "Aerosols")
    tu.assert_str(p.short_name, "Aerosol Key Properties")
    tu.assert_int(p.sub_properties, 6)

    p = sc.properties[2]
    tu.assert_int(p.standard_names, 1)
    tu.assert_str(p.standard_names[0], "tendency_of_atmosphere", True)
    tu.assert_str(p.units, "kg/m2/s")

    # Sub-property.
    p = sc.properties[0].sub_properties[0]
    tu.assert_str(p.short_name, "AerosolSchemeScope")
    tu.assert_str(p.long_name, "AerosolSchemeScope")
    tu.assert_int(p.values, 1)
    tu.assert_str(p.values[0], "Whole atmosphere")