lyken
4e57a82543
core/ndstrides: update builtin_fns to use ndarray with strides
2024-10-17 15:17:50 +08:00
lyken
1ba8365692
core/ndstrides: add NDArrayObject::to_any
2024-10-17 14:58:46 +08:00
lyken
34b1e6b982
core/ndstrides: add ContiguousNDArray
...
Currently this is used to interop with nalgebra.
2024-10-17 14:58:46 +08:00
lyken
e7aa2688e6
core/ndstrides: implement np_dot() for scalars and 1D
2024-10-17 14:57:28 +08:00
lyken
548739b86f
core/ndstrides: implement general matmul
2024-10-17 14:57:28 +08:00
lyken
3bd344bd2b
core/ndstrides: implement cmpop
2024-10-17 14:53:09 +08:00
lyken
92d2efcc6e
core/ndstrides: implement unary op
2024-10-17 14:52:20 +08:00
lyken
39ae9bd630
core/ndstrides: implement binop
2024-10-17 14:52:18 +08:00
lyken
94e98c1bd9
core/ndstrides: add NDArrayOut, broadcast_map and map
2024-10-17 14:47:20 +08:00
lyken
d12d62f078
core/ndstrides: implement subscript assignment
...
Overlapping is not handled. Currently it has undefined behavior.
2024-10-17 14:40:38 +08:00
lyken
5f31d6ec28
core/ndstrides: add more ScalarOrNDArray and NDArrayObject utils
2024-10-17 14:40:38 +08:00
lyken
020b776889
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-17 14:39:51 +08:00
lyken
fc51bc63e2
core/ndstrides: implement broadcasting & np_broadcast_to()
2024-10-17 14:38:06 +08:00
lyken
f8c0e2c4dd
core/ndstrides: implement np_reshape()
2024-10-17 14:35:17 +08:00
lyken
c156c7e46e
core: categorize np_{transpose,reshape} as 'view functions'
2024-10-17 14:32:49 +08:00
lyken
e33f74b331
core/ndstrides: implement np_size()
2024-10-17 14:31:55 +08:00
lyken
c307a483bd
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-17 14:31:55 +08:00
lyken
f57df4c6a7
core/ndstrides: implement ndarray.fill() and .copy()
2024-10-17 14:29:05 +08:00
lyken
532fccf1fb
core/ndstrides: implement np_identity() and np_eye()
2024-10-17 14:29:05 +08:00
lyken
de732ba68e
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-17 14:27:04 +08:00
lyken
5da67b4268
core/irrt: add List
...
Needed for implementing np_array()
2024-10-17 14:27:04 +08:00
lyken
2b6f1f7bc6
core/ndstrides: add NDArrayObject::atleast_nd
2024-10-17 14:27:03 +08:00
lyken
8bde4729ef
core/ndstrides: add NDArrayObject::make_copy
2024-10-17 14:23:59 +08:00
lyken
0206c3989a
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-17 13:56:35 +08:00
lyken
7327f979fb
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-17 13:52:27 +08:00
lyken
f07fe3b88e
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-17 13:52:27 +08:00
lyken
a8928d35e7
core/ndstrides: implement len(ndarray) & refactor len()
2024-10-17 13:44:43 +08:00
lyken
76a1c80081
core/ndstrides: implement np_{zeros,ones,full,empty}
2024-10-17 13:44:43 +08:00
lyken
8d4c2fd9f2
core/model: add util::gen_for_model
2024-10-17 13:44:43 +08:00
lyken
1c8cb84fcf
core/object: add ListObject and TupleObject
...
Needed for implementing other ndarray utils.
2024-10-17 13:44:43 +08:00
lyken
9d8358c0e7
core/ndstrides: implement ndarray iterator NDIter
...
A necessary utility to iterate through all elements in a possibly strided ndarray.
2024-10-17 13:44:43 +08:00
lyken
9d87975c01
core/ndstrides: introduce NDArray
...
NDArray with strides.
2024-10-17 13:44:43 +08:00
lyken
35d30703eb
core/irrt: fix exception.hpp C++ castings
2024-10-17 13:44:43 +08:00
lyken
b605006f58
core/toplevel/helper: add {extract,create}_ndims
2024-10-17 13:44:43 +08:00
lyken
5c18a32a28
core/object: introduce object
...
A small abstraction to simplify implementations.
2024-10-17 13:44:43 +08:00
lyken
0066c331d6
[core] introduce models
2024-10-17 13:44:43 +08:00
David Mak
56c845aac4
[standalone] Add support for registering globals without type decl
2024-10-07 20:44:06 +08:00
David Mak
65a12d9ab3
[core] Refactor registration of top-level variables
2024-10-07 17:05:48 +08:00
David Mak
9c6685fa8f
[core] typecheck/function_check: Fix lookup of defined ids in scope
2024-10-07 16:51:37 +08:00
David Mak
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
David Mak
42a2f243b5
[core] typecheck: Disallow redeclaration of var shadowing global
2024-10-07 13:11:00 +08:00
David Mak
3ce2eddcdc
[core] typecheck/type_inferencer: Infer whether variables are global
2024-10-07 13:10:46 +08:00
David Mak
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
David Mak
1a197c67f6
[core] toplevel/composer: Reduce lock scope while analyzing function
2024-10-05 15:53:20 +08:00
David Mak
e60e8e837f
[core] Add support for global statements
2024-10-04 13:24:27 +08:00
David Mak
9fdbe9695d
[core] Add generator to SymbolResolver::get_symbol_value
...
Needed in a future commit.
2024-10-04 13:20:29 +08:00
David Mak
8065e73598
[core] toplevel/composer: Add type analysis for global variables
2024-10-04 13:20:29 +08:00
David Mak
192290889b
[core] Add IdentifierInfo
...
Keeps track of whether an identifier refers to a global or local
variable.
2024-10-04 13:20:24 +08:00
David Mak
1407553a2f
[core] Implement parsing of global variables
...
Globals are now parsed into symbol resolver and top level definitions.
2024-10-04 13:18:29 +08:00
David Mak
c7697606e1
[core] Add TopLevelDef::Variable
2024-10-04 13:09:25 +08:00