示例#1
0
def simple_project():

    proj = Project(

        # subprojects
        Project(name='P350', label=r'$\mathrm{M_P}\,(623\,K)$'),
        Project(name='A350', label=r'$\mathrm{M_A}\,(623\,K)$'),
        Project(name='B350', label=r'$\mathrm{M_B}\,(623\,K)$'),

        # attributes
        name='project_1',
        label='main project',
    )

    assert proj.projects_names == ['P350', 'A350', 'B350']

    ir = NDDataset([1.1, 2.2, 3.3], coordset=[[1, 2, 3]])
    tg = NDDataset([1, 3, 4], coordset=[[1, 2, 3]])
    proj.A350['IR'] = ir
    proj.A350['TG'] = tg
    script_source = 'set_loglevel(INFO)\n' \
                    'info_(f"samples contained in the project are {proj.projects_names}")'

    proj['print_info'] = Script('print_info', script_source)
    return proj
示例#2
0
def test_save_and_load_project(ds1, ds2):
    myp = Project(name='process')

    ds1.name = 'toto'
    ds2.name = 'tata'

    myp.add_datasets(ds1, ds2)

    fn = myp.save()

    proj = Project.load(fn)

    assert str(proj['toto']
               ) == 'NDDataset: [float64] a.u. (shape: (z:10, y:100, x:3))'
def test_save_and_load_project(ds1, ds2):
    myp = Project(name="process")

    ds1.name = "toto"
    ds2.name = "tata"

    myp.add_datasets(ds1, ds2)

    fn = myp.save()

    proj = Project.load(fn)

    assert str(proj["toto"]
               ) == "NDDataset: [float64] a.u. (shape: (z:10, y:100, x:3))"
示例#4
0
def test_project_with_script():
    # Example from tutorial agir notebook
    proj = Project(Project(name='P350', label=r'$\mathrm{M_P}\,(623\,K)$'),
                   Project(name='A350', label=r'$\mathrm{M_A}\,(623\,K)$'),
                   Project(name='B350', label=r'$\mathrm{M_B}\,(623\,K)$'),
                   name='HIZECOKE_TEST')

    assert proj.projects_names == ['P350', 'A350', 'B350']

    # add a dataset to a subproject
    ir = NDDataset([1, 2, 3])
    tg = NDDataset([1, 3, 4])
    proj.A350['IR'] = ir
    proj['TG'] = tg

    print(proj.A350)
    print(proj)
    print(proj.A350.label)

    f = proj.save()

    newproj = Project.load('HIZECOKE_TEST')
    # print(newproj)
    assert str(newproj) == str(proj)
    assert newproj.A350.label == proj.A350.label

    # proj = Project.load('HIZECOKE')
    # assert proj.projects_names == ['A350', 'B350', 'P350']

    script_source = 'set_loglevel(INFO)\n' \
                    'info_("samples contained in the project are : ' \
                    '%s"%proj.projects_names)'

    proj['print_info'] = Script('print_info', script_source)

    # print(proj)

    # save but do not chnge the original data
    proj.save_as('HIZECOKE_TEST', overwrite_data=False)

    newproj = Project.load('HIZECOKE_TEST')

    # execute
    run_script(newproj.print_info, locals())
    newproj.print_info.execute(locals())

    newproj.print_info(locals())

    # attemps to resolve locals
    newproj.print_info()

    proj.save_as('HIZECOKE_TEST')
    newproj = Project.load('HIZECOKE_TEST')
示例#5
0
def test_empty_project():
    proj = Project(name="XXX")
    assert proj.name == "XXX"
    assert str(proj).strip() == "Project XXX:\n    (empty project)"
示例#6
0
def test_project(ds1, ds2, dsm):
    myp = Project(name='AGIR processing', method='stack')

    ds1.name = 'toto'
    ds2.name = 'tata'
    dsm.name = 'titi'

    ds = ds1[:, 10, INPLACE]
    assert ds1.shape == ds.shape
    assert ds is ds1

    myp.add_datasets(ds1, ds2, dsm)

    print(myp.datasets_names)
    assert myp.datasets_names[-1] == 'titi'
    assert ds1.parent == myp

    # iteration
    d = []
    for item in myp:
        d.append(item)

    assert d[1][0] == 'tata'

    ##
    # add sub project
    msp1 = Project(name='AGIR ATG')
    msp1.add_dataset(ds1)
    assert ds1.parent == msp1  # ds1 has changed of project
    assert ds1.name not in myp.datasets_names

    msp2 = Project(name='AGIR IR')

    myp.add_projects(msp1, msp2)

    print(myp)
    # an object can be accessed by it's name whatever it's type
    assert 'tata' in myp.allnames
    myp['titi']
    assert myp['titi'] == dsm

    # import multiple objects in Project
    myp2 = Project(msp1, msp2, ds1, ds2)  # multi dataset and project and no
    # names

    print(myp2)
示例#7
0
        def item_to_attr(obj, dic):

            for key, val in dic.items():

                try:
                    if "readonly" in dic.keys() and key in [
                            "readonly", "name"
                    ]:
                        # case of the meta and preferences
                        pass

                    elif hasattr(obj, f"_{key}"):
                        # use the hidden attribute if it exists
                        key = f"_{key}"

                    if val is None:
                        pass

                    elif key in ["_meta", "_ranges", "_preferences"]:
                        setattr(obj, key, item_to_attr(getattr(obj, key), val))

                    elif key in ["_coordset"]:
                        _coords = []
                        for v in val["coords"]:
                            if "data" in v:
                                # coords
                                _coords.append(item_to_attr(Coord(), v))
                            elif "coords" in v:
                                # likely a coordset (multicoordinates)
                                if v["is_same_dim"]:
                                    _mcoords = []
                                    for mv in v["coords"]:
                                        if "data" in mv:
                                            # coords
                                            _mcoords.append(
                                                item_to_attr(Coord(), mv))
                                        else:
                                            # likely a linearcoord
                                            _mcoords.append(
                                                item_to_attr(
                                                    LinearCoord(), mv))
                                    cs = CoordSet(*_mcoords[::-1],
                                                  name=v["name"])
                                    _coords.append(cs)
                                else:
                                    raise ValueError(
                                        "Invalid : not a multicoordinate")
                            else:
                                # likely a linearcoord
                                _coords.append(item_to_attr(LinearCoord(), v))

                        coords = dict((c.name, c) for c in _coords)
                        obj.set_coordset(coords)
                        obj._name = val["name"]
                        obj._references = val["references"]

                    elif key in ["_datasets"]:
                        # datasets = [item_to_attr(NDDataset(name=k),
                        # v) for k, v in val.items()]
                        datasets = [
                            item_to_attr(NDDataset(), js) for js in val
                        ]
                        obj.datasets = datasets

                    elif key in ["_projects"]:
                        projects = [item_to_attr(Project(), js) for js in val]
                        obj.projects = projects

                    elif key in ["_scripts"]:
                        scripts = [item_to_attr(Script(), js) for js in val]
                        obj.scripts = scripts

                    elif key in ["_parent"]:
                        # automatically set
                        pass

                    else:
                        if isinstance(val, TYPE_BOOL) and key == "_mask":
                            val = np.bool_(val)
                        if isinstance(obj, NDDataset) and key == "_filename":
                            obj.filename = val  # This is a hack because for some reason fileame attribute is not
                            # found ????
                        else:
                            setattr(obj, key, val)

                except Exception as e:
                    raise TypeError(f"for {key} {e}")

            return obj
def test_project_with_script():
    # Example from tutorial agir notebook
    proj = Project(
        Project(name="P350", label=r"$\mathrm{M_P}\,(623\,K)$"),
        Project(name="A350", label=r"$\mathrm{M_A}\,(623\,K)$"),
        Project(name="B350", label=r"$\mathrm{M_B}\,(623\,K)$"),
        name="HIZECOKE_TEST",
    )

    assert proj.projects_names == ["P350", "A350", "B350"]

    # add a dataset to a subproject
    ir = NDDataset([1, 2, 3])
    tg = NDDataset([1, 3, 4])
    proj.A350["IR"] = ir
    proj["TG"] = tg

    print(proj.A350)
    print(proj)
    print(proj.A350.label)

    f = proj.save()

    newproj = Project.load("HIZECOKE_TEST")
    # print(newproj)
    assert str(newproj) == str(proj)
    assert newproj.A350.label == proj.A350.label

    # proj = Project.load('HIZECOKE')
    # assert proj.projects_names == ['A350', 'B350', 'P350']

    script_source = ("set_loglevel(INFO)\n"
                     'info_("samples contained in the project are : '
                     '%s"%proj.projects_names)')

    proj["print_info"] = Script("print_info", script_source)

    # print(proj)

    # save but do not change the original data
    proj.save_as("HIZECOKE_TEST", overwrite_data=False)

    newproj = Project.load("HIZECOKE_TEST")

    # execute
    run_script(newproj.print_info, locals())
    newproj.print_info.execute(locals())

    newproj.print_info(locals())

    # attempts to resolve locals
    newproj.print_info()

    proj.save_as("HIZECOKE_TEST")
    newproj = Project.load("HIZECOKE_TEST")