Skip to content

Commit 0668cc4

Browse files
[Andrew Polyakov] Changed python executor
1 parent e8c693e commit 0668cc4

File tree

2 files changed

+33
-16
lines changed

2 files changed

+33
-16
lines changed

utbot-python-executor/src/main/python/utbot_executor/utbot_executor/deep_serialization/json_converter.py

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ def default(self, o):
3131
elif isinstance(o, NdarrayMemoryObject):
3232
base_json["items"] = o.items
3333
base_json["comparable"] = True
34-
# raise AttributeError(base_json)
34+
base_json["dimensions"] = o.dimensions
3535
elif isinstance(o, (ListMemoryObject, DictMemoryObject)):
3636
base_json["items"] = o.items
3737
elif isinstance(o, IteratorMemoryObject):
@@ -59,8 +59,9 @@ def default(self, o):
5959
"module": o.module,
6060
}
6161
if isinstance(o, np.ndarray):
62-
# raise TypeError(f'Object {o.tolist()}, type: {type(o)}')
63-
return all(o.tolist())
62+
raise NotImplementedError("np.ndarray is not supported")
63+
if isinstance(o, np.bool_):
64+
return bool(o)
6465
return json.JSONEncoder.default(self, o)
6566

6667

@@ -91,6 +92,7 @@ def as_reduce_object(dct: Dict) -> Union[MemoryObject, Dict]:
9192
kind=dct["typeinfo"]["kind"], module=dct["typeinfo"]["module"]
9293
)
9394
obj.comparable = dct["comparable"]
95+
obj.dimensions = dct["dimensions"]
9496
return obj
9597

9698
if dct["strategy"] == "dict":
@@ -160,6 +162,7 @@ def reload_id(self) -> MemoryDump:
160162
new_memory_object.items = [
161163
self.dump_id_to_real_id[id_] for id_ in new_memory_object.items
162164
]
165+
new_memory_object.dimensions = obj.dimensions
163166
elif isinstance(new_memory_object, IteratorMemoryObject):
164167
new_memory_object.items = [
165168
self.dump_id_to_real_id[id_] for id_ in new_memory_object.items
@@ -220,17 +223,27 @@ def load_object(self, python_id: PythonId) -> object:
220223

221224
for item in dump_object.items:
222225
real_object.append(self.load_object(item))
226+
223227
elif isinstance(dump_object, NdarrayMemoryObject):
224-
# print(f"Hi", file=sys.stderr)
225228
real_object = []
226229

227230
id_ = PythonId(str(id(real_object)))
228231
self.dump_id_to_real_id[python_id] = id_
229232
self.memory[id_] = real_object
230233

234+
temp_list = []
231235
for item in dump_object.items:
232-
real_object = np.append(real_object, self.load_object(item))
233-
# real_object.append()
236+
temp_list.append(self.load_object(item))
237+
238+
dt = np.dtype(type(temp_list[0]) if len(temp_list) > 0 else np.int64)
239+
temp_list = np.array(temp_list, dtype=dt)
240+
241+
real_object = np.ndarray(
242+
shape=dump_object.dimensions,
243+
dtype=dt,
244+
buffer=temp_list
245+
)
246+
234247
elif isinstance(dump_object, DictMemoryObject):
235248
real_object = {}
236249

utbot-python-executor/src/main/python/utbot_executor/utbot_executor/deep_serialization/memory_objects.py

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -112,13 +112,15 @@ def initialize(self) -> None:
112112
elif self.typeinfo.fullname == "builtins.set":
113113
deserialized_obj = set(deserialized_obj)
114114

115+
115116
comparable = all(serializer.get_by_id(elem).comparable for elem in self.items)
116117

117118
super()._initialize(deserialized_obj, comparable)
118119

119120
class NdarrayMemoryObject(MemoryObject):
120121
strategy: str = "ndarray"
121122
items: List[PythonId] = []
123+
dimensions: List[int] = []
122124

123125
def __init__(self, ndarray_object: object) -> None:
124126
self.items: List[PythonId] = []
@@ -129,21 +131,23 @@ def initialize(self) -> None:
129131
self.deserialized_obj = [] # for recursive collections
130132
self.comparable = False # for recursive collections
131133

132-
for elem in self.obj:
133-
elem_id = serializer.write_object_to_memory(elem)
134-
self.items.append(elem_id)
135-
self.deserialized_obj.append(serializer[elem_id])
134+
temp_object = self.obj.copy().flatten()
136135

137-
deserialized_obj = self.deserialized_obj
138-
comparable = all(serializer.get_by_id(elem).comparable for elem in self.items)
139-
# comparable = True
136+
self.dimensions = self.obj.shape
137+
if temp_object.shape != (0, ):
138+
for elem in temp_object:
139+
elem_id = serializer.write_object_to_memory(elem)
140+
self.items.append(elem_id)
141+
self.deserialized_obj.append(serializer[elem_id])
140142

143+
deserialized_obj = self.deserialized_obj
144+
comparable = all(serializer.get_by_id(elem).comparable for elem in self.items) if self.deserialized_obj != [] else True
141145
super()._initialize(deserialized_obj, comparable)
142146

143147
def __repr__(self) -> str:
144148
if hasattr(self, "obj"):
145149
return str(self.obj)
146-
return f"{self.typeinfo.kind}{self.items}"
150+
return f"{self.typeinfo.kind}{self.items}{self.dimensions}"
147151

148152

149153
class DictMemoryObject(MemoryObject):
@@ -413,7 +417,7 @@ def get_serializer(obj: object) -> Optional[Type[MemoryObject]]:
413417
class ListMemoryObjectProvider(MemoryObjectProvider):
414418
@staticmethod
415419
def get_serializer(obj: object) -> Optional[Type[MemoryObject]]:
416-
if any(type(obj) == t for t in (list, set, tuple, frozenset)):
420+
if any(type(obj) == t for t in (list, set, tuple, frozenset)) and type(obj) != np.ndarray:
417421
return ListMemoryObject
418422
return None
419423

@@ -482,13 +486,13 @@ class PythonSerializer:
482486
visited: Set[PythonId] = set()
483487

484488
providers: List[MemoryObjectProvider] = [
489+
NdarrayMemoryObjectProvider,
485490
ListMemoryObjectProvider,
486491
DictMemoryObjectProvider,
487492
IteratorMemoryObjectProvider,
488493
ReduceMemoryObjectProvider,
489494
ReprMemoryObjectProvider,
490495
ReduceExMemoryObjectProvider,
491-
NdarrayMemoryObjectProvider
492496
]
493497

494498
def __new__(cls):

0 commit comments

Comments
 (0)