Open
Conversation
Add wrappers/julia module that enables serving pure Julia Philote disciplines via Python gRPC server using juliacall. - Add JuliaWrapperDiscipline for explicit disciplines - Add JuliaImplicitWrapperDiscipline for implicit disciplines - Add YAML configuration support via PhiloteConfig - Add explicit and implicit server functions - Add CLI entry point (philote-julia-serve command) - Add example disciplines (paraboloid, quadratic) - Add example configurations
- Add 'julia' extra with juliacall and pyyaml dependencies - Add philote-julia-serve console script entry point - Enables: pip install philote-mdo[julia]
- Create GitHub Actions workflow for release automation - Trigger on merged PRs with release/prerelease labels - Validate label combinations (major/minor/patch + alpha/beta/rc) - Update version in pyproject.toml automatically - Update CHANGELOG.md with new version sections - Create GPG-signed commits and git tags - Build package and create GitHub releases - Add copyright update script for Python files
- Add [Unreleased] section for upcoming changes - Convert version headers to [X.Y.Z] - YYYY-MM-DD format - Reorganize sections using Added/Changed/Fixed/Removed categories - Add version comparison links at bottom - Follows Keep a Changelog specification
Add entries for Julia wrapper infrastructure, automated release workflow, and CHANGELOG format conversion to [Unreleased] section
- Add test_julia_integration.py with 6 gRPC integration tests for explicit and implicit Julia disciplines - Add test_julia_wrapper.py with 17 unit tests for JuliaWrapperDiscipline and JuliaImplicitWrapperDiscipline - Add test_julia_config.py with 21 tests for YAML configuration loading, validation, and error handling - Add test_julia_cli.py with 10 tests for CLI argument parsing, routing, and error handling Tests follow existing patterns from test_integration.py and include: - Automatic skipping when juliacall is not installed - Comprehensive error handling validation - Round-trip configuration testing - Numerical correctness verification Total: 54 new test cases covering the entire Julia integration feature
- Add Julia setup using julia-actions/setup-julia@v2 (version 1.10) - Install Julia optional dependencies with pip install -e ".[julia]" - This enables juliacall and pyyaml installation for Julia integration tests Julia tests will now run in CI instead of being skipped
This commit adds user-facing documentation for the Julia feature: - Created tutorials/julia_integration.md with complete guide covering: * Installation and setup * Creating explicit and implicit Julia disciplines * YAML configuration format and examples * Serving disciplines with philote-julia-serve CLI * Client integration (Python and OpenMDAO) * Advanced topics (units, arrays, custom options) * Troubleshooting guide - Created api/julia_wrapper.md with full API reference: * JuliaWrapperDiscipline and JuliaImplicitWrapperDiscipline classes * Server functions and configuration classes * CLI documentation * Usage patterns and error handling - Updated _toc.yml to add new sections: * "Language Integrations" section with Julia tutorial * "API Reference" section with Julia wrapper API - Added missing reference labels to enable cross-references: * tutorials/units.md: Added (tutorials:units)= label * tutorials/implicit_disciplines.md: Added (tutorials:implicit)= label All documentation follows existing Jupyter Book style and includes working examples based on the paraboloid.jl and quadratic.jl examples.
Add step to install Philote.jl package from GitHub repository during CI builds. This is a temporary workaround until the package is registered in Julia's General registry. The package is installed as a development dependency using Pkg.develop() which clones the repository and makes it available for Julia's 'using Philote' statements. Fixes Julia test failures where tests were failing with: "ArgumentError: Package Philote not found in current path"
Add dedicated precompilation and verification step after installing Philote.jl from GitHub. This ensures the package is fully compiled before tests run, preventing long compilation delays during test execution that could cause timeouts. The precompilation step: - Runs Pkg.precompile() to compile all packages - Verifies Philote.jl can be loaded with 'using Philote' - Provides clear feedback if installation was successful This should resolve test hanging issues where juliacall was compiling the Philote package on first use during tests.
juliacall uses its own separate Julia environment (pyjuliapkg) that is independent from the system Julia installation. This was causing tests to hang for 7+ minutes as juliacall tried to install and compile Philote.jl during the first test run. This commit adds a dedicated step that initializes juliacall's Julia environment and installs Philote.jl into it before tests run. This ensures: - Philote.jl is available in juliacall's environment - All package compilation happens upfront, not during tests - Tests can run immediately without waiting for package installation This should resolve the test hanging issue completely.
Previous attempts were installing Philote.jl in the system Julia environment, but juliacall uses its own separate pyjuliapkg environment. This caused tests to hang as juliacall tried to install packages during the first test run. This commit: - Removes separate system Julia installation steps - Pre-warms juliacall's Julia environment by importing it from Python - Installs Philote.jl directly into juliacall's environment - Precompiles all packages before tests run - Verifies Philote.jl loads correctly This ensures all package installation and compilation happens in a dedicated setup step with clear progress output, preventing test hangs.
Add timeout-minutes directives to prevent CI from hanging indefinitely: - Pre-warm step: 5 minute timeout (package installation + compilation) - Test execution: 3 minute timeout (tests should complete quickly) Also added flush=True to all print statements in the pre-warm step to ensure progress output is immediately visible in CI logs, making it easier to diagnose where hangs occur.
Tests complete in ~2 seconds locally, so 30 seconds (15x buffer) is more than sufficient. This will fail fast if Julia tests hang, making it easier to debug the issue.
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.
Summary
This PR adds complete Julia discipline integration to Philote-Python, enabling users to write high-performance disciplines in Julia while leveraging Python's proven gRPC server infrastructure.
Features
Core Implementation
JuliaWrapperDiscipline(explicit) andJuliaImplicitWrapperDiscipline(implicit)PhiloteConfig,DisciplineConfig, andServerConfigclassesphilote-julia-servecommand for easy deploymentpip install philote-mdo[julia]Examples
Testing
Documentation
Changes
Added
philote_mdo/wrappers/julia/)examples/julia/)tests/test_julia_*.py)doc/tutorials/julia_integration.md)doc/api/julia_wrapper.md)Changed
Testing
All tests pass including:
Documentation Preview
The documentation adds two new sections:
Impact
This feature enables:
Test Plan