Commit Graph

1404 Commits

Author SHA1 Message Date
a83df19a81 standalone/ndarray: add and organize view function tests 2024-10-18 15:02:35 +08:00
7f3c45302d core/ndstrides: update builtin_fns to use ndarray with strides 2024-10-18 15:01:54 +08:00
3a12d39548 core/ndstrides: add NDArrayObject::to_any 2024-10-18 15:01:54 +08:00
618854f8d0 core/ndstrides: add ContiguousNDArray
Currently this is used to interop with nalgebra.
2024-10-18 15:01:54 +08:00
693b7f3774 core/ndstrides: implement np_dot() for scalars and 1D 2024-10-18 15:01:29 +08:00
73c2203b89 core/ndstrides: implement general matmul 2024-10-18 15:01:25 +08:00
56cccce149 core/ndstrides: implement cmpop 2024-10-18 14:59:52 +08:00
bb992704b2 core/ndstrides: implement unary op 2024-10-18 14:59:52 +08:00
9e40c83490 core/ndstrides: implement binop 2024-10-18 14:59:52 +08:00
fbfc0b293a core/ndstrides: add NDArrayOut, broadcast_map and map 2024-10-18 14:59:52 +08:00
5bed394ef7 core/ndstrides: implement subscript assignment
Overlapping is not handled. Currently it has undefined behavior.
2024-10-18 14:58:58 +08:00
f731e604c7 core/ndstrides: add more ScalarOrNDArray and NDArrayObject utils 2024-10-18 14:58:58 +08:00
052b67c8e9 core/ndstrides: implement np_transpose() (no axes argument)
The IRRT implementation knows how to handle axes. But the argument is
not in NAC3 yet.
2024-10-18 14:58:29 +08:00
9359ed9685 core/ndstrides: implement broadcasting & np_broadcast_to() 2024-10-18 14:57:33 +08:00
926e7e93a8 core/ndstrides: implement np_reshape() 2024-10-18 14:56:24 +08:00
9e0f636d2a core: categorize np_{transpose,reshape} as 'view functions' 2024-10-18 14:55:18 +08:00
2c1030d158 core/ndstrides: implement np_size() 2024-10-18 14:54:40 +08:00
40c2448651 core/ndstrides: implement np_shape() and np_strides()
These functions are not important, but they are handy for debugging.

`np.strides()` is not an actual NumPy function, but `ndarray.strides` is used.
2024-10-18 14:54:04 +08:00
18db85fa7b core/ndstrides: implement ndarray.fill() and .copy() 2024-10-18 14:21:57 +08:00
fa047d505d core/ndstrides: implement np_identity() and np_eye() 2024-10-18 14:21:57 +08:00
8f0084ac8a core/ndstrides: implement np_array()
It also checks for inconsistent dimensions if the input is a list.
e.g., rejecting `[[1.0, 2.0], [3.0]]`.

However, currently only `np_array(<input>, copy=False)` and `np_array(<input>, copy=True)` are supported. In NumPy, copy could be false, true, or None. Right now, NAC3's `np_array(<input>, copy=False)` behaves like NumPy's `np.array(<input>, copy=None)`.
2024-10-18 14:21:50 +08:00
b8190ccc87 core/irrt: add List
Needed for implementing np_array()
2024-10-18 14:21:50 +08:00
9cfa2622ca core/ndstrides: add NDArrayObject::atleast_nd 2024-10-18 14:21:50 +08:00
b6980c3a39 core/ndstrides: add NDArrayObject::make_copy 2024-10-18 14:21:50 +08:00
8f9d2d82dd core/ndstrides: implement ndarray indexing
The functionality for `...` and `np.newaxis` is there in IRRT, but there
is no implementation of them for @kernel Python expressions because of
#486.
2024-10-18 14:21:42 +08:00
9d0bfd965c core/irrt: rename NDIndex to NDIndexInt
Unfortunately the name `NDIndex` is used in later commits. Renaming this
typedef to `NDIndexInt` to avoid amending. `NDIndexInt` will be removed
anyway when ndarray strides is completed.
2024-10-18 14:21:42 +08:00
01c9639646 core/irrt: add Slice and Range
Needed for implementing general ndarray indexing.

Currently IRRT slice and range have nothing to do with NAC3's slice
and range. The IRRT slice and range are currently there to implement
ndarray specific features. However, in the future their definitions may
be used to replace that of NAC3's. (NAC3's range is a [i32 x 3], IRRT's
range is a proper struct. NAC3 does not have a slice struct).
2024-10-18 14:21:42 +08:00
54a842a93f core/ndstrides: implement len(ndarray) & refactor len() 2024-10-18 14:21:28 +08:00
792374fa9a core/ndstrides: implement np_{zeros,ones,full,empty} 2024-10-18 14:21:28 +08:00
b41d091cac core/model: add util::gen_for_model 2024-10-18 14:21:27 +08:00
79eda92582 core/object: add ListObject and TupleObject
Needed for implementing other ndarray utils.
2024-10-18 14:21:27 +08:00
50f960abb5 core/ndstrides: implement ndarray iterator NDIter
A necessary utility to iterate through all elements in a possibly strided ndarray.
2024-10-18 14:21:27 +08:00
a0a1f35b5d core/ndstrides: introduce NDArray
NDArray with strides.
2024-10-18 14:21:27 +08:00
45f590f238 core/irrt: fix exception.hpp C++ castings 2024-10-18 14:21:27 +08:00
d51f45193f core/toplevel/helper: add {extract,create}_ndims 2024-10-18 14:21:26 +08:00
572ae116ec core/object: introduce object
A small abstraction to simplify implementations.
2024-10-18 14:21:26 +08:00
870a922367 [core] introduce models 2024-10-18 14:21:04 +08:00
b6e2644391 [meta] Update cargo dependencies 2024-10-18 14:17:16 +08:00
45cd01556b [meta] Apply cargo fmt 2024-10-18 14:16:42 +08:00
b6cd2a6993 [meta] Reorganize order of use declarations - Phase 3 2024-10-17 16:25:52 +08:00
a98f33e6d1 [meta] Reorganize order of use declarations - Phase 2
Some more rules:

- For module-level imports, prefer no prefix > super > crate.
- Use crate instead of super if super refers to the crate-level module
2024-10-17 15:57:33 +08:00
5839badadd [standalone] Update globals.py with type-inferred global var 2024-10-07 20:44:08 +08:00
56c845aac4 [standalone] Add support for registering globals without type decl 2024-10-07 20:44:06 +08:00
65a12d9ab3 [core] Refactor registration of top-level variables 2024-10-07 17:05:48 +08:00
9c6685fa8f [core] typecheck/function_check: Fix lookup of defined ids in scope 2024-10-07 16:51:37 +08:00
2bb788e4bb [core] codegen/expr: Materialize implicit globals
Required for when globals are read without the use of a global
declaration.
2024-10-07 13:13:20 +08:00
42a2f243b5 [core] typecheck: Disallow redeclaration of var shadowing global 2024-10-07 13:11:00 +08:00
3ce2eddcdc [core] typecheck/type_inferencer: Infer whether variables are global 2024-10-07 13:10:46 +08:00
51bf126a32 [core] typecheck/type_inferencer: Differentiate global symbols
Required for analyzing use of global symbols before global declaration.
2024-10-07 12:25:00 +08:00
1a197c67f6 [core] toplevel/composer: Reduce lock scope while analyzing function 2024-10-05 15:53:20 +08:00