Commit Graph

66 Commits

Author SHA1 Message Date
Umut
b41029d9c0 refactor(drawing): start using graphviz for visualization 2021-08-25 10:01:20 +03:00
youben11
2585eb7ed8 tests: result correctness of the compiled function 2021-08-24 16:12:44 +01:00
Arthur Meyre
66d0c8dd62 feat(tracing): update hnumpy to manage tensor types
- binary ops and constants support
2021-08-24 16:00:42 +02:00
Arthur Meyre
96b04b45e1 refacto: rename check functions for values
- indicate the checks are for ScalarValues as we now have TensorValues
coming
2021-08-24 16:00:42 +02:00
Arthur Meyre
fc3ae6461c refacto: change the way mixing values is handled
- use an intermediate function that checks which mix function to use
- update function used in hnumpy tracing
2021-08-24 16:00:42 +02:00
Umut
1d5be5a1e7 refactor: re-organize data types and values 2021-08-24 16:13:36 +03:00
Umut
2b5f7f3118 refactor: rename ConstantInput to Constant to reduce confusion 2021-08-24 10:48:57 +03:00
Arthur Meyre
4e658c15cb feat: add TensorValue 2021-08-24 09:31:17 +02:00
Arthur Meyre
e41f77349f refactor: make BaseDataType __eq__ abstract
- update test files with dummy dtypes
2021-08-24 09:31:17 +02:00
Arthur Meyre
9a0c108d4b refactor: refactor ConstantInput to be flexible
- refactor to take a function to generate the propore BaseValue to store in
its output
- refactor BaseTracer to force inheriting tracers to indicate how to build
a ConstantInput tracer
- remove "as import" for intermediate in hnumpy/tracing.py
- update compile to manage python dtypes
2021-08-23 14:10:41 +02:00
Arthur Meyre
5048992707 refactor: properly manage unhandled operands in BaseTracer and NPTracer
- use the pythonic way of signaling unhandled operands
- change typing hint in NPTracer
2021-08-23 14:10:41 +02:00
Arthur Meyre
a4181afe4d refactor: refactor np_dtype_helpers.py
- rename convert_numpy_dtype_to_common_dtype to
convert_numpy_dtype_to_base_data_type
- change names of constants to be clearer
2021-08-23 14:10:41 +02:00
Arthur Meyre
60daf31981 refactor: refactor make_integer_to_hold_ints
- rename make_integer_to_hold_ints to make_integer_to_hold
- accept any values as input as we don't know which type this function will
be called with
- rename get_bits_to_represent_int to
get_bits_to_represent_value_as_integer
2021-08-23 14:10:41 +02:00
Arthur Meyre
0ff3ae4795 refactor: refactor BaseValue and mix_values_determine_holding_dtype
- add _is_encrypted to BaseValue
- remove EncryptedValue and ClearValue classes
- add a ScalarValue class
- add two helpers EncryptedValue and ClearValue which create a ScalarValue
either encrypted or not when passed a data_type
- rename to mix_scalar_values_determine_holding_dtype
- change typing
2021-08-23 14:10:41 +02:00
Arthur Meyre
371ecae801 tests: do not test BaseValue __repr__ anymore 2021-08-23 14:10:41 +02:00
Umut
94fef5e202 feat(debugging): provide a way to export the drawn graph as a png file 2021-08-18 17:33:19 +03:00
Umut
a367d68c6e feat(compilation-configuration): make compilation customizable 2021-08-18 15:10:58 +03:00
Arthur Meyre
5038502327 chore(test): make printable graph tests less verbose but keep debug info 2021-08-18 11:03:14 +02:00
youben11
788e94bfa3 feat: end to end compilation and execution 2021-08-18 08:08:19 +01:00
Arthur Meyre
4e40982f5a feat(float-fusing): fuse float parts of an OPGraph during compilation
- this allows to be compatible with the current compiler and squash float
domains into a single int to int ArbitraryFunction
2021-08-17 18:27:31 +02:00
Arthur Meyre
d48c4dba32 dev(NPTracer): add support for sin
- re-organize numpy tracing tests

refs #126
2021-08-17 18:27:31 +02:00
Arthur Meyre
8dfed58829 chore(tools): add flake8 linter, flake8-bugbear plugin and fix issues
- remove detected `from hdk imports` (use relative imports instead) we ARE
the package
- change the way Float32 and Float64 are defined
2021-08-17 09:22:39 +02:00
youben11
3922bfe9b4 feat(mlir): support constant inputs in mlir conversion 2021-08-16 14:58:56 +01:00
youben11
8fbe5dab4d fix(mlir): unsigned are considered signless in compiler
+ changed the name of compiled func to main, as it's the default name to
  be executed later
2021-08-16 14:58:56 +01:00
Benoit Chevallier
3245d3e673 Feat/user friendly arbitrary function name 144 (#149)
* feat: let the dev give a useful name for ArbitraryFunction

might be useful to debug or understand what happens
closes #144

* feat: let the dev give a useful name for ArbitraryFunction

might be useful to debug or understand what happens
closes #144

* feat: let the dev give a useful name for ArbitraryFunction

might be useful to debug or understand what happens
closes #144

* feat: let the dev give a useful name for ArbitraryFunction

might be useful to debug or understand what happens
closes #144

* feat: let the dev give a useful name for ArbitraryFunction

might be useful to debug or understand what happens
closes #144

* feat: let the dev give a useful name for ArbitraryFunction

might be useful to debug or understand what happens
closes #144

* feat: let the dev give a useful name for ArbitraryFunction

might be useful to debug or understand what happens
closes #144

Co-authored-by: Benoit Chevallier-Mames <benoitchevalliermames@zama.ai>
2021-08-13 18:10:35 +02:00
Ayoub Benaissa
f6c9618b5a feat(mlir): MLIR Conversion (#103)
* feat(mlir): conversion from HDKIR to MLIR

* feat(mlir): support ir.Sub and ir.Mul

- better type conversion from HDK to MLIR
- Context management inside the converter class
- better handling of input type in conversion functions

* refactor(mlir): use input and output from OPGraph

Co-authored-by: Arthur Meyre <arthur.meyre@zama.ai>

* feat(mlir): eint-int subtractions

* feat(mlir): adhere to spec for supported ops

* feat(OPGraph): getters for ordered inputs/outputs

+ formatting

* tests(mlir): test converion via compiler roundtrip

* fix(mlir): flip operands on int_eint sym ops

* feat(mlir): check that the outputs are unsigned

* feat(mlir): set bit_width of all nodes to the max

This is currently required as the compiler is already assuming this.
Could be removed from HDK when the compiler can do it on its own

* feat: value_is_integer + CRs

disable some linting errors

* tests: update compile tests + coverage

* refactor: reorganize mlir package + better doc

* doc: conformance with pydocstyle

Co-authored-by: Arthur Meyre <arthur.meyre@zama.ai>
2021-08-13 12:50:31 +01:00
Umut
2c3c080923 test(direct-tlu): create debugging and compilation tests for direct table lookup 2021-08-12 17:41:06 +03:00
Benoit Chevallier-Mames
4f6103d1d1 fix: fixing issue in the graph generation
closes #130
2021-08-12 15:17:35 +02:00
Arthur Meyre
7bdcfabbfe feat(hnp-tracing): add support for ufunc routing to NPTracer
- start tracing numpy.rint and manage dtypes
- update BaseTracer to accept iterables as inputs, because NPTracer does
not get list givent the way numpy sends arguments to the functions
2021-08-11 14:20:42 +02:00
Arthur Meyre
19e68589d1 dev(numpy-dtypes): add some additional numpy dtype helper functions
- add function to convert a type from the project to a numpy dtype
- add function to manage numpy ufunc output dtypes
- add a check for integers to have positive bit_width
- add a check for floats to only accept 32 and 64 bits
2021-08-11 14:20:42 +02:00
Umut
fe9ab2d21d feat(compilation): create compilation artifacts and provide a way to export them in a textual format 2021-08-11 10:26:54 +03:00
Umut
56556a85e9 feat(representation): create lookup table wrapper to be used during tracing direct table lookups 2021-08-10 12:42:38 +03:00
Arthur Meyre
c51c4bd17a feat(tracing-astype): add astype method on NPTracer 2021-08-10 10:13:00 +02:00
Arthur Meyre
9ef2154d51 dev(numpy-dtype): add a function to translate numpy types to frontend types 2021-08-10 09:07:30 +02:00
Arthur Meyre
371cdd5e66 fix(ir): make is_equivalent_to abstract
- this allows to make sure each node has a proper implementation
- move op_args and op_kwargs in ArbitraryFunction only
- update BaseTracer accordingly
2021-08-09 13:42:55 +02:00
Arthur Meyre
5d9259c000 dev(ir): add the ArbitraryFunction ir node 2021-08-06 18:35:25 +02:00
Arthur Meyre
789a976661 dev(floats): add the possibility to have constant floats in a program
- update ConstantInput to manage floats
- update OPGraph update_values_with_bounds to manage floats
- update test code to manage cases where output could be a float
- add test cases with float inputs
2021-08-06 17:38:13 +02:00
Benoit Chevallier-Mames
6491e47178 feat: adding a compilation api
also, showing data_types in get_printable_graph
refs #86, #87
2021-08-06 17:04:30 +02:00
Benoit Chevallier-Mames
ee832079ba fix: remove the use of map in the code base
closes #90
2021-08-06 16:51:19 +02:00
Arthur Meyre
c9c7acf616 dev(floats): update function to mix types to support floats 2021-08-05 18:15:45 +02:00
Arthur Meyre
0c275c5f43 dev(floats): add Float class to represent a floating point value 2021-08-05 15:49:01 +02:00
Benoit Chevallier-Mames
1771bc6e52 fix: fix #80
closes #80
2021-08-05 11:30:45 +02:00
Benoit Chevallier-Mames
1ee8195af0 feat: supporting several outputs in print and draw of graphs
refs #76
2021-08-05 10:59:24 +02:00
Benoit Chevallier-Mames
6a80b065fc test: testing eval_op_graph_bounds_on_dataset with multiple outputs
refs #74
2021-08-04 16:22:46 +02:00
Arthur Meyre
73f21c79a6 dev: add a function to check that a program is an actual integer program 2021-08-03 18:53:09 +02:00
Benoit Chevallier-Mames
6157e4680b feat: adding constant management
refs #49
2021-08-03 16:49:46 +02:00
Arthur Meyre
a158b09f44 feat(bounds): add function to update OPGraph IR nodes in and output values
- this allows to have tighter data types by sticking to the smallest types
able to represent the ranges passed as argument
- update test_dataset_eval to check the output Value's data_type is updated
2021-08-03 11:33:13 +02:00
Arthur Meyre
b1a3b28a20 dev(dtypes): add a function to make Integers able to hold a set of values 2021-08-03 11:33:13 +02:00
Arthur Meyre
e55284b3ea feat(bounds): add a way to evaluate an operator graph on a dataset 2021-08-02 13:01:52 +02:00
Arthur Meyre
9b52ea94fb dev(opgraph): add a class to ease manipulating an operator graph 2021-08-02 13:01:52 +02:00