Refactor API#5
Open
qthibeault wants to merge 60 commits into
Open
Conversation
…n protocol definition
Implementations can use these options rather than needing to re-define them per module
Components are now uniquely identified and are used to index into the simulation to interact with running members. Interaction is achieved through asyncio co-processes, and components can list their dependencies that must remain running when interacting with the component.
Run is implemented as a context manager to handle simulation start and stop automatically
Bakefile integrates more tightly with Docker than makefiles and provides a more ergonomic experience
These contexts are defined in the bakefile and allow us to define intermediate images without tagging them
Instead of copying multicosim files to an intermediate image and then installing, we mount the context and install directly from that, reducing the number of dockerfile instructions
Psy-taliro is outside the scope of this project and is not used in any examples. Nox depends on a more recent version of attrs so we remove the dependency on psy-taliro
Create test session that runs test module against python version matrix
Instead of setting the version in both the pyproject and __version__ attribute, dynamically populate __version__ using importlib.metadata
By using a uv workspace we ensure the compatibility between both container programs and the multicosim library. This also allows us to more easily manage the development environment
Since sub-programs are now workspace members, they do not have their own lockfiles and must use the top-level one.
Avoid sending virtual environment to build context when building images
Rename Gazebo to Options and prefer to use gazebo module as a namespace for clarity
Using a custom class allows us to change the implementation later without breaking existing usages
Change class heirarchy
Do not create an empty set to iterate over, only iterate if value is set instead
Externalize the container options to a separate class that processes the data. All components should be able to return options representing their configuration, which are used through a method implemented on the base class to start the component. This allows us more flexibility on the public API to include/exclude certain fields
Have components return Simulation instances instead of Node instances since they are functionally the same. Remove the multi-component simulator definition since it only pertains to the Docker implementation right now
…nfiguration blocks to bottom of pyproject.
Rather than raise an exception, return a value from the coroutine that monitors a component's dependencies. This way we can raise the exception on the main thread and a value will be returned from both coroutines which satisfies the type checker.
…ging dependency groups.
Change workflow definitions to hopefully speed up execution by avoiding downloading Python too many times.
Using numeric values for Python versions causes trailing zeros to be dropped (i.e. 3.10 -> 3.1) which may refer to version that no longer exist.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Update API to improve ergonomics. The objective of these changes is to make it easier to define new components, and extend existing components without compromising functionality.
These changes introduce several async functions which enable container monitoring during interaction. Monitoring is a major feature we are excited to include because it ensures that component failures can effectively interrupt the simulations instead of causing other components to idle forever when their data sources are no longer running.