f8530e0ef6
[core] codegen: Add CodeGenContext::get_size_type
...
Convenience method for getting the `size_t` LLVM type without the use of
`CodeGenerator`.
2025-01-15 13:22:50 +08:00
3ebd4ba5d1
[core] codegen: Add assertion verifying size_t is compatible
2025-01-14 18:25:00 +08:00
d1dcfa19ff
CodeGenerator: Add with_target_machine factory function
...
Allows creating CodeGenerator with the LLVM target machine to infer the
expected type for size_t.
2025-01-13 14:55:33 +08:00
8baf111734
[meta] Apply clippy suggestions
2025-01-06 17:11:31 +08:00
2271b46b96
[core] codegen/values/ndarray: Fix Vec allocation
2025-01-06 16:53:33 +08:00
12fddc3533
[core] codegen/ndarray: Make ndims non-optional
...
Now that everything is ported to use strided impl, dynamic-ndim ndarray
instances do not exist anymore.
2025-01-03 15:43:08 +08:00
3ac1083734
[core] codegen: Reimplement np_dot() for scalars and 1D
...
Based on 693b7f37
: core/ndstrides: implement np_dot() for scalars and 1D
2025-01-03 15:43:08 +08:00
66b8a5e01d
[core] codegen/ndarray: Reimplement matmul
...
Based on 73c2203b
: core/ndstrides: implement general matmul
2025-01-03 15:43:06 +08:00
ebbadc2d74
[core] codegen: Reimplement ndarray cmpop
...
Based on 56cccce1
: core/ndstrides: implement cmpop
2025-01-03 15:15:13 +08:00
a2f1b25fd8
[core] codegen: Reimplement ndarray unary op
...
Based on bb992704
: core/ndstrides: implement unary op
2025-01-03 15:15:12 +08:00
59f19e29df
[core] codegen: Reimplement ndarray binop
...
Based on 9e40c834
: core/ndstrides: implement binop
2025-01-03 15:15:12 +08:00
6cbba8fdde
[core] codegen: Reimplement builtin funcs to support strided ndarrays
...
Based on 7f3c4530
: core/ndstrides: update builtin_fns to use ndarray
with strides
2025-01-03 15:15:12 +08:00
e6dab25a57
[core] codegen/ndarray: Add NDArrayOut, broadcast_map, map
...
Based on fbfc0b29
: core/ndstrides: add NDArrayOut, broadcast_map and map
2025-01-03 15:15:11 +08:00
2dc5e79a23
[core] codegen/ndarray: Implement subscript assignment
...
Based on 5bed394e
: core/ndstrides: implement subscript assignment
Overlapping is not handled. Currently it has undefined behavior.
2025-01-03 15:15:11 +08:00
dcde1d9c87
[core] codegen/values/ndarray: Add more ScalarOrNDArray utils
...
Based on f731e604
: core/ndstrides: add more ScalarOrNDArray and
NDArrayObject utils
2025-01-03 15:15:10 +08:00
7375983e0c
[core] codegen/ndarray: Implement np_transpose without axes argument
...
Based on 052b67c8
: core/ndstrides: implement np_transpose() (no axes
argument)
The IRRT implementation knows how to handle axes. But the argument is
not in NAC3 yet.
2025-01-03 15:15:08 +08:00
43e440d2fd
[core] codegen/ndarray: Reimplement broadcasting
...
Based on 9359ed96
: core/ndstrides: implement broadcasting &
np_broadcast_to()
2025-01-03 15:14:59 +08:00
8d975b5ff3
[core] codegen/ndarray: Implement np_reshape
...
Based on 926e7e93
: core/ndstrides: implement np_reshape()
2025-01-03 14:56:16 +08:00
aae41eef6a
[core] toplevel: Add view functions category
...
Based on 9e0f636d
: core: categorize np_{transpose,reshape} as 'view
functions'
2025-01-03 14:47:59 +08:00
132ba1942f
[core] toplevel: Implement np_size
...
Based on 2c1030d1
: core/ndstrides: implement np_size()
2025-01-03 14:16:29 +08:00
12358c57b1
[core] codegen/ndarray: Implement np_{shape,strides}
...
Based on 40c24486
: 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.
2025-01-03 13:58:47 +08:00
9ffa2d6552
[core] codegen/ndarray: Reimplement np_{copy,fill}
...
Based on 18db85fa
: core/ndstrides: implement ndarray.fill() and .copy()
2025-01-03 13:58:47 +08:00
acb437919d
[core] codegen/ndarray: Reimplement np_{eye,identity}
...
Based on fa047d50
: core/ndstrides: implement np_identity() and np_eye()
2025-01-03 13:58:47 +08:00
fadadd7505
[core] codegen/ndarray: Reimplement np_array()
...
Based on 8f0084ac
: 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)`.
2025-01-03 13:58:47 +08:00
26f1428739
[core] codegen: Refactor len()
...
Based on 54a842a9
: core/ndstrides: implement len(ndarray) & refactor
len()
2025-01-03 13:58:47 +08:00
5880f964bb
[core] codegen/ndarray: Reimplement np_{zeros,ones,full,empty}
...
Based on 792374fa
: core/ndstrides: implement np_{zeros,ones,full,empty}.
2025-01-03 13:58:47 +08:00
7d02f5833d
[core] codegen: Implement Tuple{Type,Value}
2025-01-03 13:58:47 +08:00
822f9d33f8
[core] codegen: Refactor ListType to use derive(StructFields)
2025-01-03 13:58:47 +08:00
805a9d23b3
[core] codegen: Add derive(Copy, Clone) to TypedArrayLikeAdapter
2025-01-03 13:58:46 +08:00
1ffe2fcc7f
[core] irrt: Minor reformat
2025-01-03 13:26:51 +08:00
2f0847d77b
[core] codegen/types: Refactor ProxyType
...
- Add alloca_type() function to obtain the type that should be passed
into a `build_alloca` call
- Provide default implementations for raw_alloca and array_alloca
- Add raw_alloca_var and array_alloca_var to distinguish alloca
instructions placed at the front of the function vs at the current
builder location
2024-12-30 17:00:17 +08:00
dc9efa9e8c
[core] codegen/ndarray: Use IRRT for size() and indexing operations
...
Also refactor some usages of call_ndarray_calc_size with ndarray.size().
2024-12-30 16:58:33 +08:00
3c0ce3031f
[core] codegen: Update raw_alloca to return PointerValue
...
Better match the expected behavior of alloca.
2024-12-30 16:51:34 +08:00
d5e8df070a
[core] Minor improvements to IRRT and add missing documentation
2024-12-30 16:51:17 +08:00
dc413dfa43
[core] codegen: Refactor TypedArrayLikeAdapter to use fn
...
Allows for greater flexibility when TypedArrayLikeAdapter is used with
custom value types.
2024-12-30 16:50:22 +08:00
19122e2905
[core] codegen: Rename classes/functions for consistency
...
- ContiguousNDArrayFields -> ContiguousNDArrayStructFields
- ndarray/nditer: Add _field suffix to field accessors
2024-12-30 16:50:18 +08:00
318371a509
[core] irrt: Minor cleanup
2024-12-30 14:13:48 +08:00
35e3042435
[core] Refactor/Remove redundant and unused constructs
...
- Use ProxyValue.name where necessary
- Remove NDArrayValue::ptr_to_{shape,strides}
- Remove functions made obsolete by ndstrides
- Remove use statement for ndarray::views as it only contain an impl
block.
- Remove class_names field in Resolvers of test sources
2024-12-30 14:13:48 +08:00
0e5940c49d
[meta] Refactor itertools::{chain,enumerate,repeat_n} with std equiv
2024-12-30 14:13:48 +08:00
fbf0053c24
[core] irrt/string: Minor cleanup
...
- Refactor __nac3_str_eq to always return bool
- Use `get_usize_dependent_function_name` to get IRRT func name
2024-12-30 14:04:42 +08:00
456aefa6ee
clean up duplicate include
2024-12-30 13:03:31 +08:00
49a7469b4a
use memcmp for string comparison
...
Co-authored-by: ram <RAMTEJ001@e.ntu.edu.sg>
Co-committed-by: ram <RAMTEJ001@e.ntu.edu.sg>
2024-12-30 13:02:09 +08:00
a00eb7969e
[core] codegen: Implement matrix_power
...
Last of the functions that need to be ported over to strided-ndarray.
2024-12-13 15:23:31 +08:00
27a6f47330
[core] codegen: Implement construction of unsized ndarrays
...
Partially based on f731e604
: core/ndstrides: add more ScalarOrNDArray
and NDArrayObject utils.
2024-12-13 15:23:31 +08:00
061747c67b
[core] codegen: Implement NDArrayValue::atleast_nd
...
Based on 9cfa2622
: core/ndstrides: add NDArrayObject::atleast_nd.
2024-12-13 15:23:31 +08:00
dc91d9e35a
[core] codegen: Implement ScalarOrNDArray and use it in indexing
...
Based on 8f9d2d82
: core/ndstrides: implement ndarray indexing.
2024-12-13 15:23:31 +08:00
438943ac6f
[core] codegen: Implement indexing for NDArray
...
Based on 8f9d2d82
: 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-12-13 15:23:31 +08:00
678e56c95d
[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-12-13 15:23:31 +08:00
fdfc80ca5f
[core] codegen: Implement Slice{Type,Value}, RustSlice
...
Based on 01c96396
: core/irrt: add Slice and Range and part of
8f9d2d82
: core/ndstrides: implement ndarray indexing.
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-12-13 15:23:31 +08:00
8b3429d62a
[artiq] Reimplement get_obj_value for strided ndarray
...
Based on 7ef93472
: artiq: reimplement get_obj_value to use ndarray with
strides
2024-12-13 15:23:31 +08:00