This commit is contained in:
blueloveTH 2025-02-13 15:00:57 +08:00
parent 3d6325473e
commit 7e9fd338b7
2 changed files with 28 additions and 30 deletions

View File

@ -621,8 +621,9 @@ static bool array2d_like_convolve(int argc, py_Ref argv) {
#undef HANDLE_SLICE #undef HANDLE_SLICE
static py_Type register_array2d_like(py_Ref mod) { static void register_array2d_like(py_Ref mod) {
py_Type type = py_newtype("array2d_like", tp_object, mod, NULL); py_Type type = py_newtype("array2d_like", tp_object, mod, NULL);
assert(type == tp_array2d_like);
py_bindproperty(type, "n_cols", array2d_like_n_cols, NULL); py_bindproperty(type, "n_cols", array2d_like_n_cols, NULL);
py_bindproperty(type, "n_rows", array2d_like_n_rows, NULL); py_bindproperty(type, "n_rows", array2d_like_n_rows, NULL);
@ -663,8 +664,6 @@ static py_Type register_array2d_like(py_Ref mod) {
py_printexc(); py_printexc();
c11__abort("failed to execute array2d.py"); c11__abort("failed to execute array2d.py");
} }
return type;
} }
static bool array2d_like_iterator__next__(int argc, py_Ref argv) { static bool array2d_like_iterator__next__(int argc, py_Ref argv) {
@ -686,11 +685,11 @@ static bool array2d_like_iterator__next__(int argc, py_Ref argv) {
return true; return true;
} }
static py_Type register_array2d_like_iterator(py_Ref mod) { static void register_array2d_like_iterator(py_Ref mod) {
py_Type type = py_newtype("array2d_like_iterator", tp_object, mod, NULL); py_Type type = py_newtype("array2d_like_iterator", tp_object, mod, NULL);
assert(type == tp_array2d_like_iterator);
py_bindmagic(type, __iter__, pk_wrapper__self); py_bindmagic(type, __iter__, pk_wrapper__self);
py_bindmagic(type, __next__, array2d_like_iterator__next__); py_bindmagic(type, __next__, array2d_like_iterator__next__);
return type;
} }
static bool array2d__new__(int argc, py_Ref argv) { static bool array2d__new__(int argc, py_Ref argv) {
@ -754,13 +753,13 @@ static bool array2d_fromlist_STATIC(int argc, py_Ref argv) {
return true; return true;
} }
static py_Type register_array2d(py_Ref mod){ static void register_array2d(py_Ref mod){
py_Type type = py_newtype("array2d", tp_array2d_like, mod, NULL); py_Type type = py_newtype("array2d", tp_array2d_like, mod, NULL);
assert(type == tp_array2d);
py_bind(py_tpobject(type), py_bind(py_tpobject(type),
"__new__(cls, n_cols: int, n_rows: int, default=None)", "__new__(cls, n_cols: int, n_rows: int, default=None)",
array2d__new__); array2d__new__);
py_bindstaticmethod(type, "fromlist", array2d_fromlist_STATIC); py_bindstaticmethod(type, "fromlist", array2d_fromlist_STATIC);
return type;
} }
static bool array2d_view_origin(int argc, py_Ref argv) { static bool array2d_view_origin(int argc, py_Ref argv) {
@ -770,10 +769,10 @@ static bool array2d_view_origin(int argc, py_Ref argv) {
return true; return true;
} }
static py_Type register_array2d_view(py_Ref mod) { static void register_array2d_view(py_Ref mod) {
py_Type type = py_newtype("array2d_view", tp_array2d_like, mod, NULL); py_Type type = py_newtype("array2d_view", tp_array2d_like, mod, NULL);
assert(type == tp_array2d_view);
py_bindproperty(type, "origin", array2d_view_origin, NULL); py_bindproperty(type, "origin", array2d_view_origin, NULL);
return type;
} }
/* chunked_array2d */ /* chunked_array2d */
@ -1038,26 +1037,27 @@ static void c11_chunked_array2d__mark(void* ud) {
} }
static void register_chunked_array2d(py_Ref mod) { static void register_chunked_array2d(py_Ref mod) {
py_Type cls = py_newtype("chunked_array2d", tp_object, mod, (py_Dtor)c11_chunked_array2d__dtor); py_Type type = py_newtype("chunked_array2d", tp_object, mod, (py_Dtor)c11_chunked_array2d__dtor);
pk__tp_set_marker(cls, c11_chunked_array2d__mark); pk__tp_set_marker(type, c11_chunked_array2d__mark);
assert(type == tp_chunked_array2d);
py_bindmagic(cls, __new__, chunked_array2d__new__); py_bindmagic(type, __new__, chunked_array2d__new__);
py_bind(py_tpobject(cls), py_bind(py_tpobject(type),
"__init__(self, chunk_size, default=None, context_builder=None)", "__init__(self, chunk_size, default=None, context_builder=None)",
chunked_array2d__init__); chunked_array2d__init__);
py_bindproperty(cls, "chunk_size", chunked_array2d__chunk_size, NULL); py_bindproperty(type, "chunk_size", chunked_array2d__chunk_size, NULL);
py_bindmagic(cls, __getitem__, chunked_array2d__getitem__); py_bindmagic(type, __getitem__, chunked_array2d__getitem__);
py_bindmagic(cls, __setitem__, chunked_array2d__setitem__); py_bindmagic(type, __setitem__, chunked_array2d__setitem__);
py_bindmagic(cls, __delitem__, chunked_array2d__delitem__); py_bindmagic(type, __delitem__, chunked_array2d__delitem__);
py_bindmagic(cls, __iter__, chunked_array2d__iter__); py_bindmagic(type, __iter__, chunked_array2d__iter__);
py_bindmethod(cls, "clear", chunked_array2d__clear); py_bindmethod(type, "clear", chunked_array2d__clear);
py_bindmethod(cls, "world_to_chunk", chunked_array2d__world_to_chunk); py_bindmethod(type, "world_to_chunk", chunked_array2d__world_to_chunk);
py_bindmethod(cls, "add_chunk", chunked_array2d__add_chunk); py_bindmethod(type, "add_chunk", chunked_array2d__add_chunk);
py_bindmethod(cls, "remove_chunk", chunked_array2d__remove_chunk); py_bindmethod(type, "remove_chunk", chunked_array2d__remove_chunk);
py_bindmethod(cls, "get_context", chunked_array2d__get_context); py_bindmethod(type, "get_context", chunked_array2d__get_context);
} }

View File

@ -83,21 +83,19 @@ d = c.copy()
assert (d == c).all() and d is not c assert (d == c).all() and d is not c
# test fill_ # test fill_
d.fill_(-3) d[:, :] = -3 # d.fill_(-3)
assert (d == array2d(2, 4, default=-3)).all() assert (d == array2d(2, 4, default=-3)).all()
# test apply_ # test apply
d.apply_(lambda x: x + 3) d.apply(lambda x: x + 3)
assert (d == array2d(2, 4, default=0)).all() assert (d == array2d(2, 4, default=0)).all()
# test copy_ # test copy_
a.copy_(d) a[:, :] = d
assert (a == d).all() and a is not d assert (a == d).all() and a is not d
x = array2d(2, 4, default=0) x = array2d(2, 4, default=0)
x.copy_(d) x[:, :] = d
assert (x == d).all() and x is not d assert (x == d).all() and x is not d
x.copy_([1, 2, 3, 4, 5, 6, 7, 8])
assert x.tolist() == [[1, 2], [3, 4], [5, 6], [7, 8]]
# test alive_neighbors # test alive_neighbors
a = array2d[int](3, 3, default=0) a = array2d[int](3, 3, default=0)