def filled_collection(self, tmpdir): # returns (a bundle of [t1, t2, t3], then individal references to each) with tmpdir.as_cwd(): t1 = dtr.Treant('larry') t2 = dtr.Treant('curly') t3 = dtr.Treant('moe') b = dtr.Bundle((t1, t2, t3)) return b, (t1, t2, t3)
def test_tags_filter(self, collection, testtreant, testtreant2, tmpdir): with tmpdir.as_cwd(): maple = dtr.Treant('maple') pine = dtr.Treant('pine') maple.tags.add({'tree', 'new jersey', 'deciduous'}) pine.tags.add({'tree', 'new york', 'evergreen'}) col = collection(maple, pine) tags = col.tags maple_bund = dtr.Bundle(maple) pine_bund = dtr.Bundle(pine) assert len(tags.any) == 5 # filter using single tags assert tags.filter('tree') == col assert tags.filter({'tree'}) == dtr.Bundle() assert tags.filter('deciduous') == maple_bund assert tags.filter('evergreen') == pine_bund assert tags.filter('new jersey') == maple_bund assert tags.filter('new york') == pine_bund # filter Treants that DON'T have a given tag assert tags.filter({'new york'}) == maple_bund assert tags.filter({'deciduous'}) == pine_bund # filter Treants containing all of the tags assert tags.filter(['deciduous', 'tree']) == maple_bund assert tags.filter(['evergreen', 'tree']) == pine_bund assert tags.filter(['deciduous', 'new york']) == dtr.Bundle() # filter Treants containing any of the tags tags assert tags.filter(('evergreen', 'tree')) == col assert tags.filter(('deciduous', 'new york')) == col assert tags.filter(('evergreen', 'new york')) == pine_bund # filter Treants that exclude any of the provided tags assert tags.filter({'deciduous', 'new york'}) == col assert tags.filter({'deciduous', 'new jersey'}) == pine_bund assert tags.filter({'evergreen', 'tree'}) == maple_bund # complex logic tests # give those that are evergreen or in NY AND also not deciduous selection = [('evergreen', 'new york'), {'deciduous'}] assert tags.filter(selection) == pine_bund # give those that are evergreen or in NY AND also not a tree selection = [('evergreen', 'new york'), {'tree'}] assert tags.filter(selection) == dtr.Bundle() # give a tree that's in NJ OR anything that's not evergreen selection = (['tree', 'new jersey'], {'evergreen'}) assert tags.filter(selection) == maple_bund # cannot be a tree in NJ, AND must also be deciduous # I.e., give all deciduous things that aren't trees in NJ selection = [{'tree', 'new jersey'}, 'deciduous'] assert tags.filter(selection) == dtr.Bundle()
def filled_bundle(self, tmpdir): with tmpdir.as_cwd(): t1 = dtr.Treant('one') t2 = dtr.Treant('two') t3 = dtr.Treant('three') t4 = dtr.Treant('four') t1.tags.add('odd', 'one') t2.tags.add('even', 'two') t3.tags.add('odd', 'three') t4.tags.add('even', 'four') t1.categories.add(is_even=False, value=1) t2.categories.add(is_even=True, value=2) t3.categories.add(is_even=False, value=3) t4.categories.add(is_even=True, value=4) return [t1, t2, t3, t4], dtr.Bundle([t1, t2, t3, t4])
def test_submit_test_prompt_yes(cli_runner, tmpdir, data, monkeypatch): """Test whether promt answer no works.""" with tmpdir.as_cwd(): # Test that we can force restart already run benchmarks. # Monkeypatch a few functions monkeypatch.setattr("subprocess.call", lambda x: True) monkeypatch.setattr( "mdbenchmark.cli.submit.get_batch_command", lambda: "sbatch" ) monkeypatch.setattr( "mdbenchmark.cli.submit.detect_md_engine", lambda x: gromacs ) monkeypatch.setattr( "mdbenchmark.cli.submit.cleanup_before_restart", lambda engine, sim: True ) result = cli_runner.invoke( cli, [ "submit", "--directory={}".format(data["analyze-files-gromacs-one-unstarted"]), ], input="y\n", ) df = pd.read_csv(data["gromacs/test_prompt.csv"], index_col=0) s = print_dataframe(df, False) output = ( "Benchmark Summary:\n" + s + "\nThe above benchmarks will be submitted. Continue? [y/N]: y\n" + "Submitting a total of 1 benchmarks.\n" + "Submitted all benchmarks. Run mdbenchmark analyze once they are finished to get the results.\n" ) assert result.exit_code == 0 assert result.output == output # Lazy way of resetting the value of `started` to `false`. # TODO: We need to clean up all of our unit tests... treant = dtr.Bundle(data["analyze-files-gromacs-one-unstarted"] + "/1") treant.categories["started"] = False
def test_tags_set_behavior(self, collection, tmpdir): with tmpdir.as_cwd(): t1 = dtr.Treant('maple') t2 = dtr.Treant('pine') t3 = dtr.Treant('juniper') t1.tags.add({'tree', 'new jersey', 'deciduous'}) t2.tags.add({'tree', 'new york', 'evergreen'}) t3.tags.add({'shrub', 'new york', 'evergreen'}) col = collection(t1, t2, t3) trees = dtr.Bundle('maple', 'pine') evergreens = dtr.Bundle('pine', 'juniper') tags = col.tags assert len(tags.any) == 6 # test equality: __eq__ (==) assert t1.tags == {'tree', 'new jersey', 'deciduous'} assert t2.tags == {'tree', 'new york', 'evergreen'} assert t3.tags == {'shrub', 'new york', 'evergreen'} # test subset: __lt__ (<) assert not t1.tags < {'tree', 'new jersey', 'deciduous'} assert tags < {'tree', 'new jersey', 'deciduous'} assert t1.tags < tags.any assert t2.tags < tags.any assert t3.tags < tags.any # test difference: __sub__ (-) assert t1.tags - {'tree'} == {'new jersey', 'deciduous'} assert trees.tags - {'tree'} == set() # test right difference: __rsub__ (-) evergreen_ny_shrub = {'evergreen', 'new york', 'shrub'} dec_nj_sh = {'deciduous', 'new jersey', 'shrub'} assert tags.any - t1.tags == evergreen_ny_shrub assert tags.any - evergreens.tags - trees.tags == dec_nj_sh assert {'tree'} - trees.tags == set() # test union: __or__ (|) evergreen_ny_shrub = {'evergreen', 'new york', 'shrub'} assert evergreens.tags | t3.tags == evergreen_ny_shrub assert t1.tags | t2.tags | t3.tags == tags.any # test right union: __ror__ (|) assert {'shrub'} | evergreens.tags == evergreen_ny_shrub assert t3.tags | {'tree'} == {'tree'} | t3.tags # test intersection: __and__ (&) evergreen_ny = {'evergreen', 'new york'} assert evergreens.tags & t3.tags == evergreen_ny assert t1.tags & t2.tags & t3.tags == tags.all # test right intersection: __rand__ (&) assert evergreen_ny_shrub & evergreens.tags == evergreen_ny assert t3.tags & {'shrub'} == {'shrub'} & t3.tags # test symmetric difference: __xor__ (^) evergreen_ny_tree = {'evergreen', 'new york', 'tree'} assert trees.tags ^ evergreens.tags == evergreen_ny_tree assert evergreens.tags ^ t3.tags == {'shrub'} assert t1.tags ^ t2.tags ^ t3.tags == dec_nj_sh # test right symmetric difference: __rxor__ (^) assert {'new york'} ^ evergreens.tags == {'evergreen'} assert {'shrub'} ^ trees.tags == t2.tags ^ t3.tags # type_error_msg = "Operands must be AggTags, Tags, or a set." with pytest.raises(TypeError) as e: ['tree'] == trees.tags # assert e.value.message == type_error_msg with pytest.raises(TypeError) as e: trees.tags < ['tree'] # assert e.value.message == type_error_msg with pytest.raises(TypeError) as e: ['tree'] - trees.tags # assert e.value.message == type_error_msg with pytest.raises(TypeError) as e: trees.tags - ['tree'] # assert e.value.message == type_error_msg with pytest.raises(TypeError) as e: ['tree'] | trees.tags # assert e.value.message == type_error_msg with pytest.raises(TypeError) as e: trees.tags | ['tree'] # assert e.value.message == type_error_msg with pytest.raises(TypeError) as e: ['tree'] & trees.tags # assert e.value.message == type_error_msg with pytest.raises(TypeError) as e: trees.tags & ['tree'] # assert e.value.message == type_error_msg with pytest.raises(TypeError) as e: ['tree'] ^ trees.tags # assert e.value.message == type_error_msg with pytest.raises(TypeError) as e: trees.tags ^ ['tree']