Example #1
0
 def setUp(self):
     self.materials = MemoryStore()
     self.materials.connect()
     materials = loadfn(os.path.join(TEST_DIR, "test_materials.json"))
     materials = jsanitize(materials, strict=True, allow_bson=True)
     self.materials.update(materials)
     self.propstore = MemoryStore()
     self.propstore.connect()
Example #2
0
    def setUp(self):
        """Set up materials and robocrys stores."""
        struct_docs = loadfn(test_mats, cls=None)

        self.materials = MemoryStore("materials")
        self.materials.connect()
        self.materials.update(struct_docs)
        self.robocrys = MemoryStore("robocrys")
Example #3
0
def memory_data_jobstore():
    from maggma.stores import MemoryStore

    from jobflow import JobStore

    store = JobStore(MemoryStore(), additional_stores={"data": MemoryStore()})
    store.connect()

    return store
Example #4
0
 def setUpClass(cls):
     materials = MemoryStore("materials")
     materials.connect()
     docs = []
     for n, mat_string in enumerate(["Si", "Sn", "TiO2", "VO2"]):
         docs.append({"task_id": n, "structure": PymatgenTest.get_structure(mat_string).as_dict()})
     materials.update(docs, key='task_id')
     elasticity = MemoryStore("elasticity")
     elasticity.connect()
     elasticity.update(docs[0:1], key="task_id")
     cls.materials = materials
     cls.elasticity = elasticity
Example #5
0
    def test_get_item(self):
        dt = MemoryStore()
        at = MemoryStore()
        qc = [{
            'catalog': 'icsd',
            'k': 100,
            'exclude': [],
            'filter': [('auid', '__eq__', 'aflow:0132ab6b9cddd429')],
            'select': [],
            'targets': ['data', 'auid']
        }]
        kw = ['ael_elastic_anisotropy']
        afi = AflowIngester(data_target=dt,
                            auid_target=at,
                            keywords=kw,
                            query_configs=qc)

        count = 0
        for item in afi.get_items():
            count += 1
            self.assertEqual(count,
                             1,
                             msg="The query returned more than one material")
            expected_attributes = [
                'auid', 'aurl', 'compound', 'ael_elastic_anisotropy'
            ]
            self.assertIsInstance(item, tuple)
            self.assertEqual(len(item), 2)
            entry, targets = item
            self.assertIsInstance(entry, Entry)
            self.assertIsInstance(targets, list)

            self.assertCountEqual(list(entry.attributes.keys()),
                                  expected_attributes)
            self.assertCountEqual(targets, ['data', 'auid'])

            self.assertEqual(entry.auid, 'aflow:0132ab6b9cddd429')

        # Test empty query
        empty_qc = [{
            'catalog': 'lib1',
            'k': 100,
            'exclude': [],
            'filter': [('auid', '__eq__', 'aflow:0132ab6b9cddd429')],
            'select': [],
            'targets': ['data', 'auid']
        }]
        afi = AflowIngester(data_target=dt,
                            auid_target=at,
                            keywords=kw,
                            query_configs=empty_qc)
        with self.assertRaises(ValueError):
            _ = afi.get_items().__next__()
Example #6
0
def test_keys():
    with mock_s3():
        conn = boto3.client("s3")
        conn.create_bucket(Bucket="bucket1")
        index = MemoryStore("index", key=1)
        with pytest.raises(AssertionError, match=r"Since we are.*"):
            store = S3Store(index, "bucket1", s3_workers=4, key=1)
        index = MemoryStore("index", key="key1")
        with pytest.warns(UserWarning, match=r"The desired S3Store.*$"):
            store = S3Store(index, "bucket1", s3_workers=4, key="key2")
        store.connect()
        store.update({"key1": "mp-1", "data": "1234"})
        with pytest.raises(KeyError):
            store.update({"key2": "mp-2", "data": "1234"})
        assert store.key == store.index.key == "key1"
Example #7
0
    def setUpClass(cls):
        # Set up test db, etc.
        cls.test_materials = MemoryStore("mat_descriptors")

        cls.test_materials.connect()
        struct_docs = loadfn(test_structs, cls=None)
        cls.test_materials.update(struct_docs)
Example #8
0
    def test_builder(self):
        test_basic_descriptors = MemoryStore("test_basic_descriptors")
        sd_builder = BasicDescriptorsBuilder(self.test_materials,
                                             test_basic_descriptors)
        sd_builder.connect()
        meta_comp_descr = loadfn(test_meta_comp_descr, cls=None)

        for t in sd_builder.get_items():
            processed = sd_builder.process_item(t)
            if processed:
                sd_builder.update_targets([processed])
            else:
                import nose
                nose.tools.set_trace()
            for md in ['nsites', 'formula_pretty', 'nelements']:
                self.assertEqual(processed['meta']['atomate'][md],
                                 meta_comp_descr['meta'][t['task_id']][md])
            for k, v in meta_comp_descr['comp_descr'][t['task_id']][0].items():
                if k != 'name':
                    self.assertAlmostEqual(
                        processed['composition_descriptors'][0][k], v)
        self.assertEqual(len([t for t in sd_builder.get_items()]), 0)

        # Remove one data piece in diamond entry and test partial update.
        test_basic_descriptors.collection.find_one_and_update(
            {'task_id': 'mp-66'}, {'$unset': {
                'site_descriptors': 1
            }})
        items = [e for e in list(sd_builder.get_items())]
        self.assertEqual(len(items), 1)
def source2():
    store = MemoryStore("source2", key="k", last_updated_field="lu")
    store.connect()
    store.ensure_index("k")
    store.ensure_index("lu")
    store.update([{"k": k, "c": "c", "d": "d"} for k in range(15)])
    return store
Example #10
0
def test_reporting(mongostore, reporting_store):

    memorystore = MemoryStore("temp")
    builder = CopyBuilder(mongostore, memorystore)

    mongostore.update([{
        mongostore.key: i,
        mongostore.last_updated_field: datetime.utcnow()
    } for i in range(10)])

    runner = CliRunner()
    with runner.isolated_filesystem():
        dumpfn(builder, "test_builder.json")
        dumpfn(reporting_store, "test_reporting_store.json")
        result = runner.invoke(
            run,
            ["-v", "test_builder.json", "-r", "test_reporting_store.json"])
        assert result.exit_code == 0

        report_docs = list(reporting_store.query())
        assert len(report_docs) == 3

        start_doc = next(d for d in report_docs
                         if d["event"] == "BUILD_STARTED")
        assert "sources" in start_doc
        assert "targets" in start_doc

        end_doc = next(d for d in report_docs if d["event"] == "BUILD_ENDED")
        assert "errors" in end_doc
        assert "warnings" in end_doc

        update_doc = next(d for d in report_docs if d["event"] == "UPDATE")
        assert "items" in update_doc
Example #11
0
def _get_correlation_values():
    full_propstore = MemoryStore()
    with open(os.path.join(CORR_TEST_DIR, "correlation_propnet_data.json"),
              'r') as f:
        data = json.load(f)
    full_propstore.connect()
    full_propstore.update(jsanitize(data, strict=True, allow_bson=True))
    correlation_store = MemoryStore()
    builder = CorrelationBuilder(full_propstore,
                                 correlation_store,
                                 props=PROPNET_PROPS,
                                 funcs='all',
                                 from_quantity_db=False)
    runner = Runner([builder])
    runner.run()
    return builder
Example #12
0
def s3store():
    with mock_s3():
        conn = boto3.client("s3")
        conn.create_bucket(Bucket="bucket1")

        index = MemoryStore("index")
        store = S3Store(index, "bucket1")
        store.connect()

        store.update(
            [
                {
                    "task_id": "mp-1",
                    "data": "asd",
                    store.last_updated_field: datetime.utcnow(),
                }
            ]
        )
        store.update(
            [
                {
                    "task_id": "mp-3",
                    "data": "sdf",
                    store.last_updated_field: datetime.utcnow(),
                }
            ]
        )

        yield store
Example #13
0
    def setUpClass(self):
        # Set up test db, etc.
        self.test_materials = MemoryStore("mat_site_fingerprint")

        self.test_materials.connect()
        struct_docs = loadfn(test_structs, cls=None)
        self.test_materials.update(struct_docs)
Example #14
0
def create_mp_builder_test_docs():
    """
    Create documents for propnet MP builder tests. Outputs JSON file to test directory.
    """
    formulas = ["BaNiO3", "Si", "Fe2O3", "Cs"]
    mgstore = MongograntStore("ro:knowhere.lbl.gov/mp_core", "materials")
    builder = PropnetBuilder(mgstore,
                             MemoryStore(),
                             criteria={
                                 "pretty_formula": {
                                     "$in": formulas
                                 },
                                 "e_above_hull": 0
                             })
    builder.connect()

    materials = list(builder.get_items())
    deprecated_item = mgstore.query_one({'deprecated': True, 'sbxn': 'core'})

    # Create fake, non-core sandboxed material to represent proprietary info
    sandboxed_item = materials[0].copy()
    sandboxed_item.update({'sbxn': ['test_sbx'], 'task_id': 'mp-fakesbx'})
    del sandboxed_item['_id']
    materials.extend([deprecated_item, sandboxed_item])
    dumpfn(materials, os.path.join(MP_TEST_DIR, "test_materials.json"))
Example #15
0
def test_run_builder(mongostore):

    memorystore = MemoryStore("temp")
    builder = CopyBuilder(mongostore, memorystore)

    mongostore.update([{
        mongostore.key: i,
        mongostore.last_updated_field: datetime.utcnow()
    } for i in range(10)])

    runner = CliRunner()
    with runner.isolated_filesystem():
        dumpfn(builder, "test_builder.json")
        result = runner.invoke(run, ["-v", "test_builder.json"])
        assert result.exit_code == 0
        assert "CopyBuilder" in result.output
        assert "SerialProcessor" in result.output

        result = runner.invoke(run, ["-vvv", "--no_bars", "test_builder.json"])
        assert result.exit_code == 0
        assert "Get" not in result.output
        assert "Update" not in result.output

        result = runner.invoke(run, ["-v", "-n", "2", "test_builder.json"])
        assert result.exit_code == 0
        assert "CopyBuilder" in result.output
        assert "MultiProcessor" in result.output

        result = runner.invoke(
            run, ["-vvv", "-n", "2", "--no_bars", "test_builder.json"])
        assert result.exit_code == 0
        assert "Get" not in result.output
        assert "Update" not in result.output
Example #16
0
def test_additional(memory_store):
    from copy import deepcopy

    import boto3
    from maggma.stores import MemoryStore, S3Store
    from moto import mock_s3

    from jobflow import JobStore

    with mock_s3():
        conn = boto3.resource("s3", region_name="us-east-1")
        conn.create_bucket(Bucket="bucket1")
        index = MemoryStore("index", key="blob_uuid")
        s3_store = S3Store(index, "bucket1", key="blob_uuid")
        store = JobStore(
            memory_store,
            additional_stores={
                "data": deepcopy(memory_store),
                "data_s3": s3_store
            },
        )

        with store as s:
            assert s
            assert s.name == "JobStore-mem://memory_db"
            assert s._collection is not None
            assert s.additional_stores["data_s3"].searchable_fields == [
                "job_uuid",
                "job_index",
            ]
Example #17
0
def source(docs):
    store = MemoryStore("source", key="k", last_updated_field="lu")
    store.connect()
    store.ensure_index("k")
    store.ensure_index("lu")
    store.update(docs)
    return store
Example #18
0
    def setUp(self):
        coords = list()
        coords.append([0, 0, 0])
        coords.append([0.75, 0.5, 0.75])
        lattice = Lattice([[3.8401979337, 0.00, 0.00],
                           [1.9200989668, 3.3257101909, 0.00],
                           [0.00, -2.2171384943, 3.1355090603]])
        self.structure = Structure(lattice, ["Si", "Si"], coords)

        materials = MemoryStore("materials")
        electronic_structure = MemoryStore("electronic_structure")
        bandstructures = MemoryStore("bandstructure")
        dos = MemoryStore("dos")
        self.builder = ElectronicStructureImageBuilder(materials,
                                                       electronic_structure,
                                                       bandstructures, dos)
def source1():
    store = MemoryStore("source1", key="k", last_updated_field="lu")
    store.connect()
    store.ensure_index("k")
    store.ensure_index("lu")
    store.update([{"k": k, "a": "a", "b": "b"} for k in range(10)])
    return store
Example #20
0
 def setUp(self):
     stores = [MemoryStore(str(i)) for i in range(7)]
     builder1 = Bldr([stores[0], stores[1], stores[2]],
                     [stores[3], stores[4], stores[5]])
     builder2 = Bldr([stores[0], stores[1], stores[3]],
                     [stores[3], stores[6]])
     self.builders = [builder1, builder2]
Example #21
0
 def setUpClass(cls):
     add_builtin_models_to_registry()
     cls.materials = MemoryStore()
     cls.materials.connect()
     materials = loadfn(os.path.join(TEST_DATA_DIR, "test_materials.json"))
     materials = jsanitize(materials, strict=True, allow_bson=True)
     cls.materials.update(materials)
     cls.propstore = None
Example #22
0
 def setUp(self):
     self.memorystore = MemoryStore("test")
     self.memorystore.connect()
     self.aliasingstore = AliasingStore(self.memorystore, {
         "a": "b",
         "c.d": "e",
         "f": "g.h"
     })
 def setUp(self):
     self.index = MemoryStore("index'")
     with patch("boto3.resource") as mock_resource:
         mock_resource.return_value = MagicMock()
         mock_resource("s3").list_buckets.return_value = [
             "bucket1", "bucket2"
         ]
         self.s3store = AmazonS3Store(self.index, "bucket1")
         self.s3store.connect()
Example #24
0
def memory_jobstore():
    from maggma.stores import MemoryStore

    from jobflow import JobStore

    store = JobStore(MemoryStore())
    store.connect()

    return store
Example #25
0
def test_no_bucket():
    with mock_s3():
        conn = boto3.client("s3")
        conn.create_bucket(Bucket="bucket1")

        index = MemoryStore("index")
        store = S3Store(index, "bucket2")
        with pytest.raises(RuntimeError, match=r".*Bucket not present.*"):
            store.connect()
Example #26
0
def alias_store():
    memorystore = MemoryStore("test")
    memorystore.connect()
    alias_store = AliasingStore(memorystore, {
        "a": "b",
        "c.d": "e",
        "f": "g.h"
    })
    return alias_store
Example #27
0
 def setUpClass(cls) -> None:
     Registry.clear_all_registries()
     add_builtin_symbols_to_registry()
     cls.afa_web = AflowAdapter()
     store_data = loadfn(os.path.join(TEST_DATA_DIR, 'aflow_store.json'))
     store = MemoryStore()
     store.connect()
     store.update(store_data, key='auid')
     cls.afa_store = AflowAdapter(store)
 def setUp(self):
     self.materials = JSONStore(boltztrap4dos_mat)
     self.materials.connect()
     self.bandstructure = JSONStore(boltztrap4dos_bs)
     self.bandstructure.connect()
     self.dos_ref = JSONStore(boltztrap4dos_dos)
     self.dos_ref.connect()
     self.dos = MemoryStore("dos")
     self.dos.connect()
    def setUp(self):
        coords = list()
        coords.append([0, 0, 0])
        coords.append([0.75, 0.5, 0.75])
        lattice = [
            [3.8401979337, 0.00, 0.00],
            [1.9200989668, 3.3257101909, 0.00],
            [0.00, -2.2171384943, 3.1355090603],
        ]

        structure = Structure(lattice, ["Si", "Si"], coords)

        input_sets = {
            "GGA Structure Optimization": MPRelaxSet(structure),
            "GGA Static": MPStaticSet(structure),
            "GGA NSCF Line": MPNonSCFSet(structure, mode="line"),
            "GGA NSCF Uniform": MPNonSCFSet(structure, mode="uniform"),
        }

        tasks = []
        t_id = 1
        for task_type, input_set in input_sets.items():
            doc = {
                "true_task_type": task_type,
                "last_updated": datetime.now(),
                "task_id": t_id,
                "state": "successful",
                "orig_inputs": {
                    "incar": input_set.incar.as_dict(),
                    "kpoints": input_set.kpoints.as_dict(),
                },
                "output": {
                    "structure": structure.as_dict()
                },
            }
            t_id += 1
            tasks.append(doc)

        self.test_tasks = MemoryStore("tasks")
        self.task_types = MemoryStore("task_types")
        self.test_tasks.connect()
        self.task_types.connect()

        self.test_tasks.update(tasks)
Example #30
0
    def setUpClass(cls):
        add_builtin_models_to_registry()
        cls.propnet_props = PROPNET_PROPS

        cls.propstore = MemoryStore()
        cls.propstore.connect()
        materials_file = os.path.join(TEST_DATA_DIR,
                                      "correlation_propnet_data.json")
        if os.path.exists(materials_file):
            with open(materials_file, 'r') as f:
                materials = json.load(f)
            materials = jsanitize(materials, strict=True, allow_bson=True)
            cls.propstore.update(materials)

        cls.quantity_store = MemoryStore()
        cls.quantity_store.connect()
        quantities_file = os.path.join(
            TEST_DATA_DIR, "correlation_propnet_quantity_data.json")
        if os.path.exists(quantities_file):
            with open(quantities_file, 'r') as f:
                quantities = json.load(f)
            quantities = jsanitize(quantities, strict=True, allow_bson=True)
            cls.quantity_store.update(quantities, key='internal_id')

        cls.correlation = None

        # vickers hardness (x-axis) vs. bulk modulus (y-axis)
        cls.correlation_values_vickers_bulk = {
            'linlsq': 0.49302857395714916,
            'pearson': 0.7021599347421844,
            'spearman': 0.7658801470036752,
            'mic': 0.7069707677575771,
            'theilsen': 0.4498696692135892,
            'ransac': 0.412850153689996
        }

        cls.correlation_values_bulk_vickers = {
            'linlsq': 0.49302857395714916,
            'pearson': 0.7021599347421844,
            'spearman': 0.7658801470036752,
            'mic': 0.7069707677575771,
            'theilsen': 0.46461142885951223,
            'ransac': 0.3699261228882036
        }