def test_serialization_init_config(self): count = 2 terms = [] for i in range(count): terms.append(Term(c=i, indices=[i, i + 1])) init_config = {"0": -1, "1": 1, "2": -1} problem = Problem(name="test", terms=terms, init_config=init_config) expected = json.dumps({ "cost_function": { "version": "1.1", "type": "ising", "terms": [{ 'c': 0, 'ids': [0, 1] }, { 'c': 1, 'ids': [1, 2] }], "initial_configuration": { "0": -1, "1": 1, "2": -1 }, } }) actual = problem.serialize() self.assertEqual(expected, actual)
def test_serialization_cterms(self): count = 2 terms = [] for i in range(count): terms.append(Term(c=i, indices=[i, i+1])) problem = Problem(name="test", terms=terms) expected = json.dumps({ "cost_function": { "version": "1.0", "type": "ising", "terms": [ { 'c':0, 'ids':[0, 1] }, {'c':1, 'ids':[1, 2]} ], } }) print(problem.serialize()) actual = problem.serialize() self.assertEqual(expected, actual)
def __test_upload_problem( self, count: int, terms_thresh: int, size_thresh: int, compress: bool, problem_type: ProblemType = ProblemType.ising, initial_terms: List[Term] = [], **kwargs ): if not (self.in_recording or self.is_live): # Temporarily disabling this test in playback mode # due to multiple calls to the storage API # that need to have a request id to distinguish # them while playing back print("Skipping this test in playback mode") return ws = self.create_workspace() sProblem = StreamingProblem( ws, name="test", problem_type=problem_type, terms=initial_terms ) rProblem = Problem( "test", problem_type=problem_type, terms=initial_terms ) sProblem.upload_terms_threshold = terms_thresh sProblem.upload_size_threshold = size_thresh sProblem.compress = compress for i in range(count): sProblem.add_term(c=i, indices=[i, i + 1]) rProblem.add_term(c=i, indices=[i, i + 1]) self.assertEqual(problem_type, sProblem.problem_type) self.assertEqual(problem_type.name, sProblem.stats["type"]) self.assertEqual( count + len(initial_terms), sProblem.stats["num_terms"] ) self.assertEqual( self.__kwarg_or_value(kwargs, "avg_coupling", 2), sProblem.stats["avg_coupling"], ) self.assertEqual( self.__kwarg_or_value(kwargs, "max_coupling", 2), sProblem.stats["max_coupling"], ) self.assertEqual( self.__kwarg_or_value(kwargs, "min_coupling", 2), sProblem.stats["min_coupling"], ) uri = sProblem.upload(ws) uploaded = json.loads(sProblem.download().serialize()) local = json.loads(rProblem.serialize()) self.assertEqual(uploaded, local)
def test_deserialize(self): count = 2 terms = [] for i in range(count): terms.append(Term(c=i, indices=[i, i + 1])) problem = Problem(name="test", terms=terms) deserialized = Problem.deserialize(problem.serialize(), problem.name) self.assertEqual(problem.name, deserialized.name) self.assertEqual(problem.problem_type, deserialized.problem_type) self.assertEqual(count, len(deserialized.terms)) self.assertEqual(problem.init_config, deserialized.init_config) self.assertEqual(Term(c=0, indices=[0, 1]), problem.terms[0]) self.assertEqual(Term(c=1, indices=[1, 2]), problem.terms[1])
def test_serialization_cterms(self): count = 2 terms = [] for i in range(count): terms.append(Term(c=i, indices=[i, i + 1])) terms.append( SlcTerm([ Term(c=0, indices=[0]), Term(c=1, indices=[1]), Term(c=-5, indices=[]) ], c=1)) problem = Problem(name="test", terms=terms) expected = json.dumps({ "metadata": { "name": "test" }, "cost_function": { "version": "1.0", "type": "ising_grouped", "terms": [{ "c": 0, "ids": [0, 1] }, { "c": 1, "ids": [1, 2] }], "terms_slc": [{ "c": 1, "terms": [{ "c": 0, "ids": [0] }, { "c": 1, "ids": [1] }, { "c": -5, "ids": [] }] }] } }) actual = problem.serialize() self.assertEqual(expected, actual)
def __test_upload_problem( self, count: int, terms_thresh: int, size_thresh: int, compress: bool, problem_type: ProblemType = ProblemType.ising, initial_terms: List[Term] = [], **kwargs ): ws = create_workspace() sProblem = StreamingProblem( ws, name="test", problem_type=problem_type, terms=initial_terms ) rProblem = Problem('test', problem_type=problem_type, terms=initial_terms) sProblem.upload_terms_threshold = terms_thresh sProblem.upload_size_threshold = size_thresh sProblem.compress = compress for i in range(count): sProblem.add_term(c = i, indices = [i, i+1]) rProblem.add_term(c = i, indices = [i, i+1]) self.assertEqual(problem_type, sProblem.problem_type) self.assertEqual(problem_type.name, sProblem.stats['type']) self.assertEqual(count + len(initial_terms), sProblem.stats['num_terms']) self.assertEqual(self.__kwarg_or_value(kwargs, 'avg_coupling', 2), sProblem.stats['avg_coupling']) self.assertEqual(self.__kwarg_or_value(kwargs, 'max_coupling', 2), sProblem.stats['max_coupling']) self.assertEqual(self.__kwarg_or_value(kwargs, 'min_coupling', 2), sProblem.stats['min_coupling']) uri = sProblem.upload(ws) uploaded = json.loads(sProblem.download().serialize()) local = json.loads(rProblem.serialize()) self.assertEqual(uploaded, local)