Skip to content

User expression support [POC] (#789) #841

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 46 commits into
base: develop
Choose a base branch
from
Draft

Conversation

maciej-flexcompute
Copy link
Collaborator

  • Added examples of a pydantic model using expressions

  • Example units support

  • Migrate to Pydantic V2

  • Added variable support

  • Added units support in variable expressions

  • Added support for constrained types

  • Added tests, add support for unary operations

andrzej-krupka and others added 4 commits April 15, 2025 12:07
* Added examples of a pydantic model using expressions

* Example units support

* Migrate to Pydantic V2

* Added variable support

* Added units support in variable expressions

* Added support for constrained types

* Added tests, add support for unary operations
…al evaluation of builtin solver variables (#858)

* Move Flow360 and Tidy3D-specific logic outside of core blueprint module

* Add support for partial evaluation of solver variables
* Added complete list of usable solver variables

* Add variable capture when creating simulation params

* Serialization improvements

* Fix serialization and deserialization issues

---------

Co-authored-by: Andrzej Krupka <akrupka@Andrzejs-MacBook-Pro.local>
andrzej-krupka and others added 17 commits May 8, 2025 11:37
* Nested variables are now available for use

* Added expression validation endpoint support

* Extend expressions endpoint to support multiple expressions

* Add ability to use expressions in vector fields

* Added numpy interop capabilities along with subscript operator support

* Apply PR feedback

---------

Co-authored-by: Andrzej Krupka <akrupka@Andrzejs-MacBook-Pro.local>
* Reorganized solver variables into target namespaces

* Apply PR feedback

* Added ability to convert expressions to C++ syntax (#1009)

Co-authored-by: Andrzej Krupka <akrupka@Andrzejs-MacBook-Pro.local>

* Update CI yaml

* Fix unit tests after alias changes

* Removed unused __init__.py items

---------

Co-authored-by: Andrzej Krupka <akrupka@Andrzejs-MacBook-Pro.local>
Co-authored-by: benflexcompute <ben@flexcompute.com>
…to expression validation service (#1013)

Co-authored-by: Andrzej Krupka <akrupka@Andrzejs-MacBook-Pro.local>
* Validation service fixes

* Fix aliasing issues, fix numpy interop with dimensioned variables

* Apply PR feedback

* Ready to merge

---------

Co-authored-by: Andrzej Krupka <akrupka@Andrzejs-MacBook-Pro.local>
Co-authored-by: benflexcompute <ben@flexcompute.com>
* Validation service fixes

* Fix aliasing issues, fix numpy interop with dimensioned variables

* Apply PR feedback

* Added unit stripping when converting to solver code

* Add a general name preprocessing function instead of unit stripping

* Finalize unit -> solver conversion function

* Add user variable inlining for solver code generation

---------

Co-authored-by: Andrzej Krupka <akrupka@Andrzejs-MacBook-Pro.local>
Co-authored-by: benflexcompute <ben@flexcompute.com>
…ressions (#1082)

* Validation service fixes

* Fix aliasing issues, fix numpy interop with dimensioned variables

* Apply PR feedback

* Added unit stripping when converting to solver code

* Add a general name preprocessing function instead of unit stripping

* Finalize unit -> solver conversion function

* Add user variable inlining for solver code generation

* Demonstrating E2E case with expressions

* Fix variable initialization when loading from file

* Removed non-release code

* Fixed unit test

---------

Co-authored-by: Andrzej Krupka <akrupka@Andrzejs-MacBook-Pro.local>
Co-authored-by: benflexcompute <ben@flexcompute.com>
* wip

* More fixes

* Another batch of linter fixes

* Another round of linter fixes

* Fixed most unit test, now fixing extra error

* Fixing all the unit tests, pylint etc

* Fix unit test

* Fix unit test

---------

Co-authored-by: Andrzej Krupka <akrupka@Andrzejs-MacBook-Pro.local>
…it is not compatible with solver translation (#1108)

* Rolled back to python list types, no numpy interop as of now because it is not compatible with solver translation

* Format

---------

Co-authored-by: Andrzej Krupka <akrupka@Andrzejs-MacBook-Pro.local>
Co-authored-by: benflexcompute <ben@flexcompute.com>
* Cross in Pyhton mode works

* WIP now needing for refactor to enable function on-demand import since current structure causes circular import

* Some comments

* Got symbolic evaluation to work but very HACKY

* Refactored expressions module structure to be self-contained (still contains cyclic imports but only runtime, never at init...)

* Partial evaluation before solver code translation

* More fixes, simplify deserializer logic

* Format

* Fixed unit test as many as possible, only 1 left

* Fixing most of the pylint issues

* Fixed allow_inf_nan when evaluating expressions with solver variables

* eagerly evaluation and also taking advantage of unyt pacakge

* Small fixes

* Fix invalid list initialization syntax in the C++ code generator

* Added back the as_vector() implementation

* Renamed raise_error

* Remove extra evaluation call in cross, reduce unnecessary parentheses

* some more small changes

---------

Co-authored-by: benflexcompute <ben@flexcompute.com>
Co-authored-by: Andrzej Krupka <akrupka@Andrzejs-MacBook-Pro.local>
benflexcompute and others added 20 commits June 9, 2025 15:03
* Added unit test, now pending fixing lint and todos

* Ready for review

* Fix for windows-1

* Format

* Another attempt

* Thank you Windows

* should work now
…tion unit test (#1151)

* Added unit test for project_variables and also simplified the translation unit test

* Removed print

* Fix windows test
* Added util function to get the unit from expression

* removed print

* Added catch for input_params is None

* fix lint
* Initial implementation

* More variable finished

* Fix unit test

* Fix pylint

* Fix the issue that solver name is not used

* Move prepending code to translator

* Fix prepending code

* Fix deserialize issue that output units is not loaded

* self review of prepending code

* typo fix

* Address comments

* fix grad pressure's prepending code

* Added support for solver variable in output_fields and also fixed a bug when translating Mach (#1160)

---------

Co-authored-by: Ben <106089368+benflexcompute@users.noreply.github.com>
* Initial implementation

* More variable finished

* Fix unit test

* Fix pylint

* Fix the issue that solver name is not used

* Move prepending code to translator

* Fix prepending code

* Fix deserialize issue that output units is not loaded

* self review of prepending code

* typo fix

* Address comments

* fix grad pressure's prepending code

* Added support for solver variable in output_fields and also fixed a bug when translating Mach (#1160)

* Replace wall shear stress with its magnitude, add unit test to whitelisted_callables

* Fix coordinate, remove mu

* Fix the scaling of turbulence solution

* Fix the unit conversion for a list of float

* Add missing vorticty magnitude

* remove declaration when user-specified name is the same as the solver_name

* Add velocity magnitude

* Address comments

* formatting

---------

Co-authored-by: Ben <106089368+benflexcompute@users.noreply.github.com>
* Implementation done, now checking pylint

* Now writing the overwrite checker

* Ready for self review
* Enabled timestepping->step size to be expression too

* Bumped version
* Updated the project variables schema

* rename gradient
* Added postProcessing flag setter

* Fixed unit test

* Fixed v1 unit test
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants