lyken
0744b938b8
core: fix __nac3_ndarray_calc_size crash due to incorrect typing
2024-07-03 13:03:14 +08:00
lyken
56fa2b6803
core: fix crash on iterating over non-iterables
...
a
2024-06-28 15:45:53 +08:00
lyken
d06c13f936
core: fix crash on invalid subscripting
2024-06-27 16:58:48 +08:00
lyken
9808923258
core: improve comments in type_inferencer/mod.rs
2024-06-27 14:46:48 +08:00
lyken
5b11a1dbdd
core: support tuple and int32 input for np_empty, np_ones, and more
2024-06-27 14:30:17 +08:00
lyken
b21df53e0d
core: fix comment typo in unify_call()
2024-06-27 14:06:39 +08:00
lyken
0ec967a468
core: improve function call errors
2024-06-27 14:06:39 +08:00
abdul124
134af79fd6
core: add support for class attributes
2024-06-25 16:06:33 +08:00
abdul124
7fe2c3496c
core: add attribute field to class definition
2024-06-25 16:06:33 +08:00
lyken
144a3fc426
core: more derive Debug in typedef
2024-06-25 15:02:50 +08:00
lyken
74096eb9f6
core: name codegen worker threads
2024-06-25 12:36:37 +08:00
lyken
06e9d90d57
apply clippy changes
2024-06-21 14:14:01 +08:00
lyken
d89146aa02
core: use no_run on builtin_fns docs
2024-06-20 13:53:25 +08:00
David Mak
0452e6de78
core: Fix codegen for tuple-index into ndarray
2024-06-20 12:50:30 +08:00
David Mak
635c944c90
core: Fix type inference for tuple-index into ndarray
...
Fixes #420 .
2024-06-20 12:50:30 +08:00
lyken
e36af3b0a3
core: reduce code duplication in codegen/builtin_fns ( #422 )
...
Used macros to generate some unary math functions.
Reviewed-on: #422
Reviewed-by: David Mak <chmakac@connect.ust.hk>
Co-authored-by: lyken <lyken@m-labs.hk>
Co-committed-by: lyken <lyken@m-labs.hk>
2024-06-20 12:48:44 +08:00
lyken
e85f4f9bd2
core: refactor top_level::builtins::get_builtins()
2024-06-18 11:06:25 +08:00
David Mak
82091b1be8
meta: Apply clippy changes
2024-06-17 14:10:31 +08:00
lyken
2abe75d1f4
core: remove code dup with `make_exception_fields`
2024-06-17 12:01:48 +08:00
lyken
676412fe6d
apply cargo fmt
2024-06-14 09:46:42 +08:00
lyken
8b9df7252f
core: cleanup with Unifier::generate_var_id
2024-06-14 09:42:04 +08:00
lyken
6979843431
core: fix typo in into_var_map
2024-06-13 16:59:10 +08:00
lyken
fed1361c6a
core: rename to_var_map to into_var_map
2024-06-13 16:59:10 +08:00
lyken
aa94e0c8a4
core: remove pub & add From<TypeVarId> for u32
2024-06-13 16:59:10 +08:00
lyken
f523e26227
core: fix typo in fmt::Display of TypeVarId
2024-06-13 16:59:10 +08:00
lyken
f026b48e2a
core: refactor to use `TypeVarId` and `TypeVar`
2024-06-13 16:59:10 +08:00
lyken
dc874f2994
core: use `PrimDef` simple names in make_primitives()
2024-06-13 16:58:32 +08:00
David Mak
23974feae7
meta: Restrict number of allowed lints
2024-06-12 16:10:57 +08:00
David Mak
40a3bded36
meta: Set clippy lints in {main,lib}.rs
...
So that this does not have to be manually passed to the `cargo clippy`
command-line every single time. Also allows incrementally addressing
these lints by removing and fixing them one-by-one.
2024-06-12 16:10:57 +08:00
lyken
c4420e6ab9
core: refactor `get_builtins()`
2024-06-12 15:09:20 +08:00
lyken
fd36f78005
core: refactor `PrimitiveDefinitionId` into enum `PrimDef`
2024-06-12 15:01:01 +08:00
lyken
8168692cc3
apply cargo fmt
2024-06-12 14:45:03 +08:00
David Mak
6153f94b05
core/numpy: Implement codegen for np_array
2024-06-11 16:42:11 +08:00
David Mak
4730b595f3
core/builtins: Add np_array function
2024-06-11 16:42:08 +08:00
David Mak
c2fdb12397
core/type_inferencer: Add special rule for np_array
2024-06-11 16:40:35 +08:00
David Mak
82bf14785b
core: Add multidimensional array helpers
2024-06-11 15:30:06 +08:00
David Mak
2d4329e23c
core/stmt: Use BB of last statement in if-else in phi
2024-06-11 15:30:06 +08:00
David Mak
679656f9e1
core/classes: Fix incorrect field locations for lists
2024-06-11 15:30:06 +08:00
David Mak
210d9e2334
core: Add more creator functions for ProxyType
2024-06-11 15:26:37 +08:00
David Mak
181ac3ec1a
core/classes: Fix incorrect pointers of range.{stop,step}
2024-06-11 15:13:31 +08:00
David Mak
3acdfb304d
meta: Apply clippy suggestions
2024-06-11 14:58:32 +08:00
David Mak
f0ab1b858a
core: Refactor class abstractions
...
- Introduce new Type abstractions
- Rearrange some functions
2024-06-06 13:45:51 +08:00
lyken
08129cc635
nac3core: add TopLevelComposer::new builtin check's assertion msg
2024-06-05 15:30:02 +08:00
David Mak
ad4832dcf4
core: Refactor to get LLVM intrinsics via Intrinsics::find
2024-06-05 15:29:40 +08:00
lyken
b857f1e403
nac3core: fix typo in gen_for's comment
2024-06-04 17:15:41 +08:00
David Mak
ed79d5bb9e
core/expr: Add support for multi-dim slicing of NDArrays
2024-06-03 16:40:05 +08:00
David Mak
c35ad06949
core/expr: Add support for 1D slicing of NDArrays
2024-06-03 16:40:05 +08:00
David Mak
135ef557f9
core/numpy: Implement ndarray_sliced_{copy,copyto_impl}
...
Performing copying with optional support for slicing. Also made
copy_impl delegate to sliced_copy, as sliced_copy now performs a
superset of operations that copy_impl can already do.
2024-06-03 16:40:05 +08:00
David Mak
a176c3eb70
core/irrt: Change handle_slice_indices to instead take length of object
...
So that all other array-like datatypes (e.g. ndarray) can also take
advantage of it.
2024-06-03 16:40:05 +08:00
David Mak
2cf79510c2
core/numpy: Add more helper functions
2024-06-03 16:40:05 +08:00
David Mak
b6ff75dcaf
core/irrt: Add support for calculating partial size of NDArray
2024-06-03 16:40:05 +08:00
David Mak
588c15f80d
core/stmt: Add gen_for_range_callback
...
For generating for loops over range objects or array slices.
2024-06-03 16:40:05 +08:00
David Mak
82cc693b11
meta: Update dependencies
2024-06-03 16:40:02 +08:00
David Mak
520e1adc56
core/builtins: Add np_minimum/np_maximum
2024-05-09 15:01:20 +08:00
David Mak
73e81259f3
core/builtins: Add np_min/np_max
2024-05-09 15:01:20 +08:00
David Mak
7627acea41
core/type_inferencer: Fix error message
2024-05-09 15:01:20 +08:00
David Mak
a777099ea8
core/type_inferencer: Fix missing lowering for some builtin TVars
2024-05-09 15:01:20 +08:00
David Mak
30c6cffbad
core/builtins: Refactored numpy builtins to accept scalar and ndarrays
2024-05-06 15:38:29 +08:00
David Mak
51671800b6
core/builtins: Extract codegen portion into functions
...
We will need to reuse them when implementing elementwise function
application for ndarrays.
2024-05-06 13:21:54 +08:00
David Mak
7195476edb
core/builtins: Add llvm_intrinsics prefix
2024-05-06 13:21:54 +08:00
David Mak
eecba0b71d
core: Add GenCall::create_dummy
...
A simple abstraction for GenCalls that are already handled elsewhere.
2024-05-06 13:21:54 +08:00
David Mak
7b4253ccd8
core/numpy: Add missing lifetime parameters
2024-05-06 13:21:54 +08:00
David Mak
f58c3a11f8
core/builtins: Rework handling of PrimitiveStore-Unifier tuples
2024-05-06 13:21:54 +08:00
David Mak
d0766a116f
core: Remove Box from GenCallCallback type alias
...
So that references to the function type can be taken.
2024-05-06 13:21:54 +08:00
David Mak
64a3751fc2
core: Remove custom function type definitions for ndarray operators
2024-05-06 13:21:54 +08:00
David Mak
062e318dd5
core/magic_methods: Fix clippy warnings
2024-05-06 13:21:54 +08:00
David Mak
847615fc2f
core: Implement numpy.matmul for 2D-2D ndarrays
2024-04-23 10:27:37 +08:00
David Mak
5dfcc63978
core/classes: Take reference of indexes
2024-04-16 17:20:24 +08:00
David Mak
025b3cd02f
core/stmt: Remove gen_if_chained*
...
Turns out it is really difficult to get lifetimes and closures right, so
let's just provide the most rudimentary if-else codegen and we can nest
them if necessary.
2024-04-16 17:16:50 +08:00
David Mak
e0f440040c
core/expr: Implement negative indices for ndarray
2024-04-15 12:49:42 +08:00
David Mak
f0715e2b6d
core/stmt: Add gen_if* functions
...
For generating if-constructs in IR.
2024-04-15 12:20:34 +08:00
David Mak
e7fca67786
core/stmt: Do not generate jumps if bb is already terminated
...
Future-proofs gen_*_callback functions in case other codegen functions
will delegate to it in the future.
2024-04-15 12:20:34 +08:00
David Mak
52c731c312
core: Implement Not/UAdd/USub for booleans
...
Not sure if this is deliberate or an oversight, but we implement it
anyway for consistency with other Python implementations.
2024-04-12 18:29:58 +08:00
David Mak
00d1b9be9b
core: Fix __inv__ for i8-based boolean operands
2024-04-12 15:35:54 +08:00
David Mak
e614dd4257
core/type_inferencer: Fix location of unary/compare expressions
...
Codegen uses this location information to determine the CallId, and if
a function call is the operand of a unary expression or left-hand
operand of a compare expression, codegen will use the type of the
operator expression rather than the actual operand type.
2024-04-05 15:42:10 +08:00
David Mak
937a8b9698
core/magic_methods: Fix type of unary ops with primitive types
2024-04-05 13:23:08 +08:00
David Mak
876ad6c59c
core/type_inferencer: Include location info if inferencer fails
2024-04-05 13:22:35 +08:00
David Mak
a920fe0501
core: Implement elementwise comparison operators
2024-04-03 00:07:33 +08:00
David Mak
727a1886b3
core: Implement elementwise unary operators
2024-04-03 00:07:33 +08:00
David Mak
6af13a8261
core: Implement elementwise binary operators
...
Including immediate variants of these operators.
2024-04-03 00:07:33 +08:00
David Mak
3540d0ab29
core/magic_methods: Add typeof_*op
...
Used to determine the expected type of the binary operator with
primitive operands.
2024-04-03 00:07:33 +08:00
David Mak
3a6c53d760
core/toplevel/numpy: Split ndarray type var utilities
2024-04-03 00:07:33 +08:00
David Mak
87bc34f7ec
core: Implement calculations for broadcasting ndarrays
2024-04-03 00:07:31 +08:00
David Mak
f50a5f0345
core/type_inferencer: Allow both int32 and isize when indexing ndarray
2024-04-02 16:49:12 +08:00
David Mak
a77fd213e0
core/magic_methods: Allow unknown return types
...
These types can be later inferred by the type inferencer.
2024-04-02 16:49:12 +08:00
David Mak
8f1497df83
core/helper: Add PrimitiveDefinitionIds::iter
2024-04-02 16:49:12 +08:00
David Mak
5ca2dbeec8
core/typedef: Add Type::obj_id to replace get_obj_id
2024-04-02 16:49:10 +08:00
David Mak
9a98cde595
core: Extract codegen portion of gen_*op_expr
...
This allows *ops to be generated internally using LLVM values as
input. Required in a future change.
2024-04-01 16:48:25 +08:00
David Mak
5ba8601b39
core: Remove ArrayValue variants of functions
...
These will be lowered and optimized away later anyways, and we have
ArrayLikeAccessor now.
2024-04-01 16:48:25 +08:00
David Mak
26a01b14d5
core: Use more typed slices in APIs
2024-04-01 16:48:25 +08:00
David Mak
d5f4817134
core/builtins: Fix len() on ndarrays
2024-04-01 16:48:24 +08:00
David Mak
789bfb5a26
core: Fix index-based operations not returning i32
2024-04-01 16:46:45 +08:00
David Mak
4bb0e60981
core: Apply clippy suggestions
2024-04-01 16:46:41 +08:00
David Mak
13f06f3e29
core: Refactor VarMap to IndexMap
...
This is the only Map I can find that preserves insertion order while
also deduplicating elements by key.
2024-03-22 15:51:23 +08:00
David Mak
f0da9c0283
core: Add ArrayLikeValue
...
For exposing LLVM values that can be accessed like an array.
2024-03-22 15:51:06 +08:00
David Mak
2c4bf3ce59
core: Allow unsized CodeGenerator to be passed to some codegen functions
...
Enables codegen_callback to call these codegen functions as well.
2024-03-22 15:07:28 +08:00
David Mak
e980f19c93
core: Simplify typed value assertions
2024-03-22 15:07:28 +08:00
David Mak
cfbc37c1ed
core: Add gen_for_callback_incrementing
...
Simplifies generation of monotonically increasing for loops.
2024-03-22 15:07:28 +08:00
David Mak
50264e8750
core: Add missing unchecked accessors for NDArrayDimsProxy
2024-03-22 15:07:28 +08:00
David Mak
1b77e62901
core: Split numpy into codegen and toplevel
2024-03-22 15:07:28 +08:00
David Mak
fd44ee6887
core: Apply clippy suggestions
2024-03-22 15:07:23 +08:00
David Mak
c8866b1534
core/classes: Rename get_* functions to remove prefix
...
As suggested by Rust API Guidelines.
2024-03-21 15:46:10 +08:00
David Mak
84a888758a
core: Rename unsafe functions to unchecked
...
This is this intended name of the functions.
2024-03-21 15:46:10 +08:00
David Mak
c3b122acfc
core: Implement `ndarray.copy`
2024-03-07 14:59:13 +08:00
David Mak
a94927a11d
core: Update __builtin_assume expressions
...
No dimension size should be 0.
2024-03-07 14:59:13 +08:00
David Mak
ebf86cd134
core: Use size_t for accessing array elements
2024-03-07 14:59:13 +08:00
David Mak
cccd8f2d00
core: Fix ndarray_eye not preserving signness of offset
2024-03-07 14:59:13 +08:00
David Mak
3292aed099
core: Fix ndarray subscript operator returning the wrong object
...
Should be returning the newly created object instead of the original
ndarray...
2024-03-07 14:59:13 +08:00
David Mak
96b7f29679
core: Implement `ndarray.fill`
2024-03-07 14:59:13 +08:00
David Mak
3d2abf73c8
core: Replace ndarray_init_dims IRRT impl with IR impl
...
Implementation of that function in IR allows for more flexibility in
terms of different integer type widths.
2024-03-07 14:59:13 +08:00
David Mak
f682e9bf7a
core: Match IRRT compile flavor with build profile
2024-03-07 14:59:02 +08:00
David Mak
b26cb2b360
core: Express member func def IDs as offsets from class def ID
2024-03-06 12:24:39 +08:00
David Mak
2317516cf6
core: Use tvars from ndarray for class definition
2024-03-04 23:58:02 +08:00
David Mak
77de24ef74
core: Use BTreeMap for type variable mapping
...
There have been multiple instances where I had the need to iterate over
type variables, only to discover that the traversal order is arbitrary.
This commit fixes that by adding SortedMapping, which utilizes BTreeMap
internally to guarantee a traversal order. All instances of VarMap are
now refactored to use this to ensure that type variables are iterated in
the order of its variable ID, which should be monotonically incremented
by the unifier.
2024-03-04 23:56:04 +08:00
David Mak
234a6bde2a
core: Use TObj for NDArray
2024-03-01 15:41:55 +08:00
David Mak
c3db6297d9
core: Add primitive definition-id list
...
So that we have a single ground truth for the definition IDs of
primitive types.
2024-03-01 11:29:10 +08:00
David Mak
82fdb02d13
core: Extract LLVM intrinsic functions to their functions
2024-02-23 15:41:06 +08:00
David Mak
4efdd17513
core: Add missing From implementations for LLVM wrapper classes
2024-02-23 15:41:06 +08:00
David Mak
49de81ef1e
core: Apply clippy suggestions
2024-02-23 15:41:06 +08:00
David Mak
8492503af2
core: Update cargo dependencies
2024-02-23 15:41:04 +08:00
David Mak
cc538d221a
core: Implement codegen for indexing into ndarray
2024-02-19 17:13:09 +08:00
David Mak
0d5c53e60c
core: Implement type inference for indexing into ndarray
2024-02-19 17:13:09 +08:00
David Mak
976a9512c1
core: Add const variants to NDArray element getters
2024-02-19 16:56:21 +08:00
David Mak
1eacaf9afa
core: Fix IRRT argument order to ndarray_flatten_index
2024-02-19 16:37:13 +08:00
David Mak
8c7e44098a
core: Fix IRRT implementation of ndarray_flatten_index
2024-02-19 16:37:13 +08:00
David Mak
282a3e1911
core: Fix typo in error message
2024-02-14 16:26:13 +08:00
David Mak
5cecb2bb74
core: Fix Literal use in variable type annotation
2024-02-06 18:16:14 +08:00
David Mak
1963c30744
core: Use Display output for locations
2024-02-06 18:11:51 +08:00
David Mak
27011f385b
core: Add location to non-primitive value return error
2024-02-02 12:49:21 +08:00
David Mak
d6302b6ec8
core: Allow tuple of primitives to be returned
2024-02-02 12:48:52 +08:00
David Mak
b3736c3e99
core: Disallow returning of non-primitive values
...
Non-primitive values are represented by an `alloca`-ed value in the
function body, and when the pointer is returned from the function, the
`alloca`-ed object is deallocated on the stack.
Related to #54 .
2024-01-29 12:49:24 +08:00
David Mak
8470915809
core: Add NDArrayValue and helper functions
2024-01-25 15:51:39 +08:00
David Mak
148900302e
core: Add RangeValue and helper functions
2024-01-25 15:51:39 +08:00
David Mak
5ee08b585f
core: Add ListValue and helper functions
2024-01-25 15:51:39 +08:00
David Mak
f1581299fc
core: Minor changes to IRRT
...
Add missing documentation, remove redundant lifetime variables, and fix
typos.
2024-01-25 15:50:53 +08:00
David Mak
e3e2c36ef4
core: Mark TNDArray and TLiteral as unimplemented in tests
2024-01-17 09:58:14 +08:00
David Mak
4f9a0110c4
meta: Update insta snapshots
2024-01-17 09:49:50 +08:00
David Mak
12c0eed0a3
core: Fix compilation of tests
2024-01-17 09:49:49 +08:00
David Mak
140f8f8a08
core: Implement most ndarray-creation functions
2023-12-22 16:29:55 +08:00
David Mak
27fcf8926e
core: Implement ndarray constructor and numpy.empty
2023-12-22 16:29:54 +08:00
David Mak
afa7d9b100
core: Implement helper for creation of generic ndarray
2023-12-21 15:39:49 +08:00
David Mak
c395472094
core: Initial infrastructure for ndarray
2023-12-21 15:39:46 +08:00
David Mak
03870f222d
core: Extract special method handling in type inferencer
...
To prepare for more special handling with methods.
2023-12-21 15:38:26 +08:00
David Mak
e435b25756
core: Allow implicit promotions of integral literals
...
It should not matter, since it is the value of the literal that matters
with respect to the const generic variable.
2023-12-21 15:21:08 +08:00
David Mak
bd792904f9
core: Add size_t to primitive store
...
Used for ndims in ndarray.
2023-12-21 15:20:31 +08:00
David Mak
1c3a823670
core: Do not discard value names for IRRT
2023-12-20 15:16:02 +08:00
David Mak
9d64e606f4
core: Reject multiple literal bounds
...
This is currently broken due to how we handle function calls in the
unifier.
2023-12-18 10:04:25 +08:00
David Mak
6dccb343bb
Revert "core: Do not keep unification result for function arguments"
...
This reverts commit f09f3c27a5
.
2023-12-18 10:01:23 +08:00
David Mak
8886964776
core: Remove redundant argument in type annotation parsing
2023-12-16 18:40:48 +08:00
David Mak
f09f3c27a5
core: Do not keep unification result for function arguments
...
For some reason, when unifying a function call parameter with an
argument, subsequent calls to the same function will only accept the
type of the substituted argument.
This affect snippets like:
```
def make1() -> C[Literal[1]]:
return ...
def make2() -> C[Literal[2]]:
return ...
def consume(instance: C[Literal[1, 2]]):
pass
consume(make1())
consume(make2())
```
The last statement will result in a compiler error, as the parameter of
consume is replaced with C[Literal[1]].
We fix this by getting a snapshot before performing unification, and
restoring the snapshot after unification succeeds.
2023-12-16 18:40:48 +08:00