crca 1.4.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- .github/ISSUE_TEMPLATE/bug_report.md +65 -0
- .github/ISSUE_TEMPLATE/feature_request.md +41 -0
- .github/PULL_REQUEST_TEMPLATE.md +20 -0
- .github/workflows/publish-manual.yml +61 -0
- .github/workflows/publish.yml +64 -0
- .gitignore +214 -0
- CRCA.py +4156 -0
- LICENSE +201 -0
- MANIFEST.in +43 -0
- PKG-INFO +5035 -0
- README.md +4959 -0
- __init__.py +17 -0
- branches/CRCA-Q.py +2728 -0
- branches/crca_cg/corposwarm.py +9065 -0
- branches/crca_cg/fix_rancher_docker_creds.ps1 +155 -0
- branches/crca_cg/package.json +5 -0
- branches/crca_cg/test_bolt_integration.py +446 -0
- branches/crca_cg/test_corposwarm_comprehensive.py +773 -0
- branches/crca_cg/test_new_features.py +163 -0
- branches/crca_sd/__init__.py +149 -0
- branches/crca_sd/crca_sd_core.py +770 -0
- branches/crca_sd/crca_sd_governance.py +1325 -0
- branches/crca_sd/crca_sd_mpc.py +1130 -0
- branches/crca_sd/crca_sd_realtime.py +1844 -0
- branches/crca_sd/crca_sd_tui.py +1133 -0
- crca-1.4.0.dist-info/METADATA +5035 -0
- crca-1.4.0.dist-info/RECORD +501 -0
- crca-1.4.0.dist-info/WHEEL +4 -0
- crca-1.4.0.dist-info/licenses/LICENSE +201 -0
- docs/CRCA-Q.md +2333 -0
- examples/config.yaml.example +25 -0
- examples/crca_sd_example.py +513 -0
- examples/data_broker_example.py +294 -0
- examples/logistics_corporation.py +861 -0
- examples/palantir_example.py +299 -0
- examples/policy_bench.py +934 -0
- examples/pridnestrovia-sd.py +705 -0
- examples/pridnestrovia_realtime.py +1902 -0
- prompts/__init__.py +10 -0
- prompts/default_crca.py +101 -0
- pyproject.toml +151 -0
- requirements.txt +76 -0
- schemas/__init__.py +43 -0
- schemas/mcpSchemas.py +51 -0
- schemas/policy.py +458 -0
- templates/__init__.py +38 -0
- templates/base_specialized_agent.py +195 -0
- templates/drift_detection.py +325 -0
- templates/examples/causal_agent_template.py +309 -0
- templates/examples/drag_drop_example.py +213 -0
- templates/examples/logistics_agent_template.py +207 -0
- templates/examples/trading_agent_template.py +206 -0
- templates/feature_mixins.py +253 -0
- templates/graph_management.py +442 -0
- templates/llm_integration.py +194 -0
- templates/module_registry.py +276 -0
- templates/mpc_planner.py +280 -0
- templates/policy_loop.py +1168 -0
- templates/prediction_framework.py +448 -0
- templates/statistical_methods.py +778 -0
- tests/sanity.yml +31 -0
- tests/sanity_check +406 -0
- tests/test_core.py +47 -0
- tests/test_crca_excel.py +166 -0
- tests/test_crca_sd.py +780 -0
- tests/test_data_broker.py +424 -0
- tests/test_palantir.py +349 -0
- tools/__init__.py +38 -0
- tools/actuators.py +437 -0
- tools/bolt.diy/Dockerfile +103 -0
- tools/bolt.diy/app/components/@settings/core/AvatarDropdown.tsx +175 -0
- tools/bolt.diy/app/components/@settings/core/ControlPanel.tsx +345 -0
- tools/bolt.diy/app/components/@settings/core/constants.tsx +108 -0
- tools/bolt.diy/app/components/@settings/core/types.ts +114 -0
- tools/bolt.diy/app/components/@settings/index.ts +12 -0
- tools/bolt.diy/app/components/@settings/shared/components/TabTile.tsx +151 -0
- tools/bolt.diy/app/components/@settings/shared/service-integration/ConnectionForm.tsx +193 -0
- tools/bolt.diy/app/components/@settings/shared/service-integration/ConnectionTestIndicator.tsx +60 -0
- tools/bolt.diy/app/components/@settings/shared/service-integration/ErrorState.tsx +102 -0
- tools/bolt.diy/app/components/@settings/shared/service-integration/LoadingState.tsx +94 -0
- tools/bolt.diy/app/components/@settings/shared/service-integration/ServiceHeader.tsx +72 -0
- tools/bolt.diy/app/components/@settings/shared/service-integration/index.ts +6 -0
- tools/bolt.diy/app/components/@settings/tabs/data/DataTab.tsx +721 -0
- tools/bolt.diy/app/components/@settings/tabs/data/DataVisualization.tsx +384 -0
- tools/bolt.diy/app/components/@settings/tabs/event-logs/EventLogsTab.tsx +1013 -0
- tools/bolt.diy/app/components/@settings/tabs/features/FeaturesTab.tsx +295 -0
- tools/bolt.diy/app/components/@settings/tabs/github/GitHubTab.tsx +281 -0
- tools/bolt.diy/app/components/@settings/tabs/github/components/GitHubAuthDialog.tsx +173 -0
- tools/bolt.diy/app/components/@settings/tabs/github/components/GitHubCacheManager.tsx +367 -0
- tools/bolt.diy/app/components/@settings/tabs/github/components/GitHubConnection.tsx +233 -0
- tools/bolt.diy/app/components/@settings/tabs/github/components/GitHubErrorBoundary.tsx +105 -0
- tools/bolt.diy/app/components/@settings/tabs/github/components/GitHubProgressiveLoader.tsx +266 -0
- tools/bolt.diy/app/components/@settings/tabs/github/components/GitHubRepositoryCard.tsx +121 -0
- tools/bolt.diy/app/components/@settings/tabs/github/components/GitHubRepositorySelector.tsx +312 -0
- tools/bolt.diy/app/components/@settings/tabs/github/components/GitHubStats.tsx +291 -0
- tools/bolt.diy/app/components/@settings/tabs/github/components/GitHubUserProfile.tsx +46 -0
- tools/bolt.diy/app/components/@settings/tabs/github/components/shared/GitHubStateIndicators.tsx +264 -0
- tools/bolt.diy/app/components/@settings/tabs/github/components/shared/RepositoryCard.tsx +361 -0
- tools/bolt.diy/app/components/@settings/tabs/github/components/shared/index.ts +11 -0
- tools/bolt.diy/app/components/@settings/tabs/gitlab/GitLabTab.tsx +305 -0
- tools/bolt.diy/app/components/@settings/tabs/gitlab/components/GitLabAuthDialog.tsx +186 -0
- tools/bolt.diy/app/components/@settings/tabs/gitlab/components/GitLabConnection.tsx +253 -0
- tools/bolt.diy/app/components/@settings/tabs/gitlab/components/GitLabRepositorySelector.tsx +358 -0
- tools/bolt.diy/app/components/@settings/tabs/gitlab/components/RepositoryCard.tsx +79 -0
- tools/bolt.diy/app/components/@settings/tabs/gitlab/components/RepositoryList.tsx +142 -0
- tools/bolt.diy/app/components/@settings/tabs/gitlab/components/StatsDisplay.tsx +91 -0
- tools/bolt.diy/app/components/@settings/tabs/gitlab/components/index.ts +4 -0
- tools/bolt.diy/app/components/@settings/tabs/mcp/McpServerList.tsx +99 -0
- tools/bolt.diy/app/components/@settings/tabs/mcp/McpServerListItem.tsx +70 -0
- tools/bolt.diy/app/components/@settings/tabs/mcp/McpStatusBadge.tsx +37 -0
- tools/bolt.diy/app/components/@settings/tabs/mcp/McpTab.tsx +239 -0
- tools/bolt.diy/app/components/@settings/tabs/netlify/NetlifyTab.tsx +1393 -0
- tools/bolt.diy/app/components/@settings/tabs/netlify/components/NetlifyConnection.tsx +990 -0
- tools/bolt.diy/app/components/@settings/tabs/netlify/components/index.ts +1 -0
- tools/bolt.diy/app/components/@settings/tabs/notifications/NotificationsTab.tsx +300 -0
- tools/bolt.diy/app/components/@settings/tabs/profile/ProfileTab.tsx +181 -0
- tools/bolt.diy/app/components/@settings/tabs/providers/cloud/CloudProvidersTab.tsx +308 -0
- tools/bolt.diy/app/components/@settings/tabs/providers/local/ErrorBoundary.tsx +68 -0
- tools/bolt.diy/app/components/@settings/tabs/providers/local/HealthStatusBadge.tsx +64 -0
- tools/bolt.diy/app/components/@settings/tabs/providers/local/LoadingSkeleton.tsx +107 -0
- tools/bolt.diy/app/components/@settings/tabs/providers/local/LocalProvidersTab.tsx +556 -0
- tools/bolt.diy/app/components/@settings/tabs/providers/local/ModelCard.tsx +106 -0
- tools/bolt.diy/app/components/@settings/tabs/providers/local/ProviderCard.tsx +120 -0
- tools/bolt.diy/app/components/@settings/tabs/providers/local/SetupGuide.tsx +671 -0
- tools/bolt.diy/app/components/@settings/tabs/providers/local/StatusDashboard.tsx +91 -0
- tools/bolt.diy/app/components/@settings/tabs/providers/local/types.ts +44 -0
- tools/bolt.diy/app/components/@settings/tabs/settings/SettingsTab.tsx +215 -0
- tools/bolt.diy/app/components/@settings/tabs/supabase/SupabaseTab.tsx +1089 -0
- tools/bolt.diy/app/components/@settings/tabs/vercel/VercelTab.tsx +909 -0
- tools/bolt.diy/app/components/@settings/tabs/vercel/components/VercelConnection.tsx +368 -0
- tools/bolt.diy/app/components/@settings/tabs/vercel/components/index.ts +1 -0
- tools/bolt.diy/app/components/@settings/utils/tab-helpers.ts +54 -0
- tools/bolt.diy/app/components/chat/APIKeyManager.tsx +169 -0
- tools/bolt.diy/app/components/chat/Artifact.tsx +296 -0
- tools/bolt.diy/app/components/chat/AssistantMessage.tsx +192 -0
- tools/bolt.diy/app/components/chat/BaseChat.module.scss +47 -0
- tools/bolt.diy/app/components/chat/BaseChat.tsx +522 -0
- tools/bolt.diy/app/components/chat/Chat.client.tsx +670 -0
- tools/bolt.diy/app/components/chat/ChatAlert.tsx +108 -0
- tools/bolt.diy/app/components/chat/ChatBox.tsx +334 -0
- tools/bolt.diy/app/components/chat/CodeBlock.module.scss +10 -0
- tools/bolt.diy/app/components/chat/CodeBlock.tsx +85 -0
- tools/bolt.diy/app/components/chat/DicussMode.tsx +17 -0
- tools/bolt.diy/app/components/chat/ExamplePrompts.tsx +37 -0
- tools/bolt.diy/app/components/chat/FilePreview.tsx +38 -0
- tools/bolt.diy/app/components/chat/GitCloneButton.tsx +327 -0
- tools/bolt.diy/app/components/chat/ImportFolderButton.tsx +141 -0
- tools/bolt.diy/app/components/chat/LLMApiAlert.tsx +109 -0
- tools/bolt.diy/app/components/chat/MCPTools.tsx +129 -0
- tools/bolt.diy/app/components/chat/Markdown.module.scss +171 -0
- tools/bolt.diy/app/components/chat/Markdown.spec.ts +48 -0
- tools/bolt.diy/app/components/chat/Markdown.tsx +252 -0
- tools/bolt.diy/app/components/chat/Messages.client.tsx +102 -0
- tools/bolt.diy/app/components/chat/ModelSelector.tsx +797 -0
- tools/bolt.diy/app/components/chat/NetlifyDeploymentLink.client.tsx +51 -0
- tools/bolt.diy/app/components/chat/ProgressCompilation.tsx +110 -0
- tools/bolt.diy/app/components/chat/ScreenshotStateManager.tsx +33 -0
- tools/bolt.diy/app/components/chat/SendButton.client.tsx +39 -0
- tools/bolt.diy/app/components/chat/SpeechRecognition.tsx +28 -0
- tools/bolt.diy/app/components/chat/StarterTemplates.tsx +38 -0
- tools/bolt.diy/app/components/chat/SupabaseAlert.tsx +199 -0
- tools/bolt.diy/app/components/chat/SupabaseConnection.tsx +339 -0
- tools/bolt.diy/app/components/chat/ThoughtBox.tsx +43 -0
- tools/bolt.diy/app/components/chat/ToolInvocations.tsx +409 -0
- tools/bolt.diy/app/components/chat/UserMessage.tsx +101 -0
- tools/bolt.diy/app/components/chat/VercelDeploymentLink.client.tsx +158 -0
- tools/bolt.diy/app/components/chat/chatExportAndImport/ExportChatButton.tsx +49 -0
- tools/bolt.diy/app/components/chat/chatExportAndImport/ImportButtons.tsx +96 -0
- tools/bolt.diy/app/components/deploy/DeployAlert.tsx +197 -0
- tools/bolt.diy/app/components/deploy/DeployButton.tsx +277 -0
- tools/bolt.diy/app/components/deploy/GitHubDeploy.client.tsx +171 -0
- tools/bolt.diy/app/components/deploy/GitHubDeploymentDialog.tsx +1041 -0
- tools/bolt.diy/app/components/deploy/GitLabDeploy.client.tsx +171 -0
- tools/bolt.diy/app/components/deploy/GitLabDeploymentDialog.tsx +764 -0
- tools/bolt.diy/app/components/deploy/NetlifyDeploy.client.tsx +246 -0
- tools/bolt.diy/app/components/deploy/VercelDeploy.client.tsx +235 -0
- tools/bolt.diy/app/components/editor/codemirror/BinaryContent.tsx +7 -0
- tools/bolt.diy/app/components/editor/codemirror/CodeMirrorEditor.tsx +555 -0
- tools/bolt.diy/app/components/editor/codemirror/EnvMasking.ts +80 -0
- tools/bolt.diy/app/components/editor/codemirror/cm-theme.ts +192 -0
- tools/bolt.diy/app/components/editor/codemirror/indent.ts +68 -0
- tools/bolt.diy/app/components/editor/codemirror/languages.ts +112 -0
- tools/bolt.diy/app/components/git/GitUrlImport.client.tsx +147 -0
- tools/bolt.diy/app/components/header/Header.tsx +42 -0
- tools/bolt.diy/app/components/header/HeaderActionButtons.client.tsx +54 -0
- tools/bolt.diy/app/components/mandate/MandateSubmission.tsx +167 -0
- tools/bolt.diy/app/components/observability/DeploymentStatus.tsx +168 -0
- tools/bolt.diy/app/components/observability/EventTimeline.tsx +119 -0
- tools/bolt.diy/app/components/observability/FileDiffViewer.tsx +121 -0
- tools/bolt.diy/app/components/observability/GovernanceStatus.tsx +197 -0
- tools/bolt.diy/app/components/observability/GovernorMetrics.tsx +246 -0
- tools/bolt.diy/app/components/observability/LogStream.tsx +244 -0
- tools/bolt.diy/app/components/observability/MandateDetails.tsx +201 -0
- tools/bolt.diy/app/components/observability/ObservabilityDashboard.tsx +200 -0
- tools/bolt.diy/app/components/sidebar/HistoryItem.tsx +187 -0
- tools/bolt.diy/app/components/sidebar/Menu.client.tsx +536 -0
- tools/bolt.diy/app/components/sidebar/date-binning.ts +59 -0
- tools/bolt.diy/app/components/txt +1 -0
- tools/bolt.diy/app/components/ui/BackgroundRays/index.tsx +18 -0
- tools/bolt.diy/app/components/ui/BackgroundRays/styles.module.scss +246 -0
- tools/bolt.diy/app/components/ui/Badge.tsx +53 -0
- tools/bolt.diy/app/components/ui/BranchSelector.tsx +270 -0
- tools/bolt.diy/app/components/ui/Breadcrumbs.tsx +101 -0
- tools/bolt.diy/app/components/ui/Button.tsx +46 -0
- tools/bolt.diy/app/components/ui/Card.tsx +55 -0
- tools/bolt.diy/app/components/ui/Checkbox.tsx +32 -0
- tools/bolt.diy/app/components/ui/CloseButton.tsx +49 -0
- tools/bolt.diy/app/components/ui/CodeBlock.tsx +103 -0
- tools/bolt.diy/app/components/ui/Collapsible.tsx +9 -0
- tools/bolt.diy/app/components/ui/ColorSchemeDialog.tsx +378 -0
- tools/bolt.diy/app/components/ui/Dialog.tsx +449 -0
- tools/bolt.diy/app/components/ui/Dropdown.tsx +63 -0
- tools/bolt.diy/app/components/ui/EmptyState.tsx +154 -0
- tools/bolt.diy/app/components/ui/FileIcon.tsx +346 -0
- tools/bolt.diy/app/components/ui/FilterChip.tsx +92 -0
- tools/bolt.diy/app/components/ui/GlowingEffect.tsx +192 -0
- tools/bolt.diy/app/components/ui/GradientCard.tsx +100 -0
- tools/bolt.diy/app/components/ui/IconButton.tsx +84 -0
- tools/bolt.diy/app/components/ui/Input.tsx +22 -0
- tools/bolt.diy/app/components/ui/Label.tsx +20 -0
- tools/bolt.diy/app/components/ui/LoadingDots.tsx +27 -0
- tools/bolt.diy/app/components/ui/LoadingOverlay.tsx +32 -0
- tools/bolt.diy/app/components/ui/PanelHeader.tsx +20 -0
- tools/bolt.diy/app/components/ui/PanelHeaderButton.tsx +36 -0
- tools/bolt.diy/app/components/ui/Popover.tsx +29 -0
- tools/bolt.diy/app/components/ui/Progress.tsx +22 -0
- tools/bolt.diy/app/components/ui/RepositoryStats.tsx +87 -0
- tools/bolt.diy/app/components/ui/ScrollArea.tsx +41 -0
- tools/bolt.diy/app/components/ui/SearchInput.tsx +80 -0
- tools/bolt.diy/app/components/ui/SearchResultItem.tsx +134 -0
- tools/bolt.diy/app/components/ui/Separator.tsx +22 -0
- tools/bolt.diy/app/components/ui/SettingsButton.tsx +35 -0
- tools/bolt.diy/app/components/ui/Slider.tsx +73 -0
- tools/bolt.diy/app/components/ui/StatusIndicator.tsx +90 -0
- tools/bolt.diy/app/components/ui/Switch.tsx +37 -0
- tools/bolt.diy/app/components/ui/Tabs.tsx +52 -0
- tools/bolt.diy/app/components/ui/TabsWithSlider.tsx +112 -0
- tools/bolt.diy/app/components/ui/ThemeSwitch.tsx +29 -0
- tools/bolt.diy/app/components/ui/Tooltip.tsx +122 -0
- tools/bolt.diy/app/components/ui/index.ts +38 -0
- tools/bolt.diy/app/components/ui/use-toast.ts +66 -0
- tools/bolt.diy/app/components/workbench/DiffView.tsx +796 -0
- tools/bolt.diy/app/components/workbench/EditorPanel.tsx +174 -0
- tools/bolt.diy/app/components/workbench/ExpoQrModal.tsx +55 -0
- tools/bolt.diy/app/components/workbench/FileBreadcrumb.tsx +150 -0
- tools/bolt.diy/app/components/workbench/FileTree.tsx +565 -0
- tools/bolt.diy/app/components/workbench/Inspector.tsx +126 -0
- tools/bolt.diy/app/components/workbench/InspectorPanel.tsx +146 -0
- tools/bolt.diy/app/components/workbench/LockManager.tsx +262 -0
- tools/bolt.diy/app/components/workbench/PortDropdown.tsx +91 -0
- tools/bolt.diy/app/components/workbench/Preview.tsx +1049 -0
- tools/bolt.diy/app/components/workbench/ScreenshotSelector.tsx +293 -0
- tools/bolt.diy/app/components/workbench/Search.tsx +257 -0
- tools/bolt.diy/app/components/workbench/Workbench.client.tsx +506 -0
- tools/bolt.diy/app/components/workbench/terminal/Terminal.tsx +131 -0
- tools/bolt.diy/app/components/workbench/terminal/TerminalManager.tsx +68 -0
- tools/bolt.diy/app/components/workbench/terminal/TerminalTabs.tsx +277 -0
- tools/bolt.diy/app/components/workbench/terminal/theme.ts +36 -0
- tools/bolt.diy/app/components/workflow/WorkflowPhase.tsx +109 -0
- tools/bolt.diy/app/components/workflow/WorkflowStatus.tsx +60 -0
- tools/bolt.diy/app/components/workflow/WorkflowTimeline.tsx +150 -0
- tools/bolt.diy/app/entry.client.tsx +7 -0
- tools/bolt.diy/app/entry.server.tsx +80 -0
- tools/bolt.diy/app/root.tsx +156 -0
- tools/bolt.diy/app/routes/_index.tsx +175 -0
- tools/bolt.diy/app/routes/api.bug-report.ts +254 -0
- tools/bolt.diy/app/routes/api.chat.ts +463 -0
- tools/bolt.diy/app/routes/api.check-env-key.ts +41 -0
- tools/bolt.diy/app/routes/api.configured-providers.ts +110 -0
- tools/bolt.diy/app/routes/api.corporate-swarm-status.ts +55 -0
- tools/bolt.diy/app/routes/api.enhancer.ts +137 -0
- tools/bolt.diy/app/routes/api.export-api-keys.ts +44 -0
- tools/bolt.diy/app/routes/api.git-info.ts +69 -0
- tools/bolt.diy/app/routes/api.git-proxy.$.ts +178 -0
- tools/bolt.diy/app/routes/api.github-branches.ts +166 -0
- tools/bolt.diy/app/routes/api.github-deploy.ts +67 -0
- tools/bolt.diy/app/routes/api.github-stats.ts +198 -0
- tools/bolt.diy/app/routes/api.github-template.ts +242 -0
- tools/bolt.diy/app/routes/api.github-user.ts +287 -0
- tools/bolt.diy/app/routes/api.gitlab-branches.ts +143 -0
- tools/bolt.diy/app/routes/api.gitlab-deploy.ts +67 -0
- tools/bolt.diy/app/routes/api.gitlab-projects.ts +105 -0
- tools/bolt.diy/app/routes/api.health.ts +8 -0
- tools/bolt.diy/app/routes/api.llmcall.ts +298 -0
- tools/bolt.diy/app/routes/api.mandate.ts +351 -0
- tools/bolt.diy/app/routes/api.mcp-check.ts +16 -0
- tools/bolt.diy/app/routes/api.mcp-update-config.ts +23 -0
- tools/bolt.diy/app/routes/api.models.$provider.ts +2 -0
- tools/bolt.diy/app/routes/api.models.ts +90 -0
- tools/bolt.diy/app/routes/api.netlify-deploy.ts +240 -0
- tools/bolt.diy/app/routes/api.netlify-user.ts +142 -0
- tools/bolt.diy/app/routes/api.supabase-user.ts +199 -0
- tools/bolt.diy/app/routes/api.supabase.query.ts +92 -0
- tools/bolt.diy/app/routes/api.supabase.ts +56 -0
- tools/bolt.diy/app/routes/api.supabase.variables.ts +32 -0
- tools/bolt.diy/app/routes/api.system.diagnostics.ts +142 -0
- tools/bolt.diy/app/routes/api.system.disk-info.ts +311 -0
- tools/bolt.diy/app/routes/api.system.git-info.ts +332 -0
- tools/bolt.diy/app/routes/api.update.ts +21 -0
- tools/bolt.diy/app/routes/api.vercel-deploy.ts +497 -0
- tools/bolt.diy/app/routes/api.vercel-user.ts +161 -0
- tools/bolt.diy/app/routes/api.workflow-status.$proposalId.ts +309 -0
- tools/bolt.diy/app/routes/chat.$id.tsx +8 -0
- tools/bolt.diy/app/routes/execute.$mandateId.tsx +432 -0
- tools/bolt.diy/app/routes/git.tsx +25 -0
- tools/bolt.diy/app/routes/observability.$mandateId.tsx +50 -0
- tools/bolt.diy/app/routes/webcontainer.connect.$id.tsx +32 -0
- tools/bolt.diy/app/routes/webcontainer.preview.$id.tsx +97 -0
- tools/bolt.diy/app/routes/workflow.$proposalId.tsx +170 -0
- tools/bolt.diy/app/styles/animations.scss +49 -0
- tools/bolt.diy/app/styles/components/code.scss +9 -0
- tools/bolt.diy/app/styles/components/editor.scss +135 -0
- tools/bolt.diy/app/styles/components/resize-handle.scss +30 -0
- tools/bolt.diy/app/styles/components/terminal.scss +3 -0
- tools/bolt.diy/app/styles/components/toast.scss +23 -0
- tools/bolt.diy/app/styles/diff-view.css +72 -0
- tools/bolt.diy/app/styles/index.scss +73 -0
- tools/bolt.diy/app/styles/variables.scss +255 -0
- tools/bolt.diy/app/styles/z-index.scss +37 -0
- tools/bolt.diy/app/types/GitHub.ts +182 -0
- tools/bolt.diy/app/types/GitLab.ts +103 -0
- tools/bolt.diy/app/types/actions.ts +85 -0
- tools/bolt.diy/app/types/artifact.ts +5 -0
- tools/bolt.diy/app/types/context.ts +26 -0
- tools/bolt.diy/app/types/design-scheme.ts +93 -0
- tools/bolt.diy/app/types/global.d.ts +13 -0
- tools/bolt.diy/app/types/mandate.ts +333 -0
- tools/bolt.diy/app/types/model.ts +25 -0
- tools/bolt.diy/app/types/netlify.ts +94 -0
- tools/bolt.diy/app/types/supabase.ts +54 -0
- tools/bolt.diy/app/types/template.ts +8 -0
- tools/bolt.diy/app/types/terminal.ts +9 -0
- tools/bolt.diy/app/types/theme.ts +1 -0
- tools/bolt.diy/app/types/vercel.ts +67 -0
- tools/bolt.diy/app/utils/buffer.ts +29 -0
- tools/bolt.diy/app/utils/classNames.ts +65 -0
- tools/bolt.diy/app/utils/constants.ts +147 -0
- tools/bolt.diy/app/utils/debounce.ts +13 -0
- tools/bolt.diy/app/utils/debugLogger.ts +1284 -0
- tools/bolt.diy/app/utils/diff.spec.ts +11 -0
- tools/bolt.diy/app/utils/diff.ts +117 -0
- tools/bolt.diy/app/utils/easings.ts +3 -0
- tools/bolt.diy/app/utils/fileLocks.ts +96 -0
- tools/bolt.diy/app/utils/fileUtils.ts +121 -0
- tools/bolt.diy/app/utils/folderImport.ts +73 -0
- tools/bolt.diy/app/utils/formatSize.ts +12 -0
- tools/bolt.diy/app/utils/getLanguageFromExtension.ts +24 -0
- tools/bolt.diy/app/utils/githubStats.ts +9 -0
- tools/bolt.diy/app/utils/gitlabStats.ts +54 -0
- tools/bolt.diy/app/utils/logger.ts +162 -0
- tools/bolt.diy/app/utils/markdown.ts +155 -0
- tools/bolt.diy/app/utils/mobile.ts +4 -0
- tools/bolt.diy/app/utils/os.ts +4 -0
- tools/bolt.diy/app/utils/path.ts +19 -0
- tools/bolt.diy/app/utils/projectCommands.ts +197 -0
- tools/bolt.diy/app/utils/promises.ts +19 -0
- tools/bolt.diy/app/utils/react.ts +6 -0
- tools/bolt.diy/app/utils/sampler.ts +49 -0
- tools/bolt.diy/app/utils/selectStarterTemplate.ts +255 -0
- tools/bolt.diy/app/utils/shell.ts +384 -0
- tools/bolt.diy/app/utils/stacktrace.ts +27 -0
- tools/bolt.diy/app/utils/stripIndent.ts +23 -0
- tools/bolt.diy/app/utils/terminal.ts +11 -0
- tools/bolt.diy/app/utils/unreachable.ts +3 -0
- tools/bolt.diy/app/vite-env.d.ts +2 -0
- tools/bolt.diy/assets/entitlements.mac.plist +25 -0
- tools/bolt.diy/assets/icons/icon.icns +0 -0
- tools/bolt.diy/assets/icons/icon.ico +0 -0
- tools/bolt.diy/assets/icons/icon.png +0 -0
- tools/bolt.diy/bindings.js +78 -0
- tools/bolt.diy/bindings.sh +33 -0
- tools/bolt.diy/docker-compose.yaml +145 -0
- tools/bolt.diy/electron/main/index.ts +201 -0
- tools/bolt.diy/electron/main/tsconfig.json +30 -0
- tools/bolt.diy/electron/main/ui/menu.ts +29 -0
- tools/bolt.diy/electron/main/ui/window.ts +54 -0
- tools/bolt.diy/electron/main/utils/auto-update.ts +110 -0
- tools/bolt.diy/electron/main/utils/constants.ts +4 -0
- tools/bolt.diy/electron/main/utils/cookie.ts +40 -0
- tools/bolt.diy/electron/main/utils/reload.ts +35 -0
- tools/bolt.diy/electron/main/utils/serve.ts +71 -0
- tools/bolt.diy/electron/main/utils/store.ts +3 -0
- tools/bolt.diy/electron/main/utils/vite-server.ts +44 -0
- tools/bolt.diy/electron/main/vite.config.ts +44 -0
- tools/bolt.diy/electron/preload/index.ts +22 -0
- tools/bolt.diy/electron/preload/tsconfig.json +7 -0
- tools/bolt.diy/electron/preload/vite.config.ts +31 -0
- tools/bolt.diy/electron-builder.yml +64 -0
- tools/bolt.diy/electron-update.yml +4 -0
- tools/bolt.diy/eslint.config.mjs +57 -0
- tools/bolt.diy/functions/[[path]].ts +12 -0
- tools/bolt.diy/icons/angular.svg +1 -0
- tools/bolt.diy/icons/astro.svg +8 -0
- tools/bolt.diy/icons/chat.svg +1 -0
- tools/bolt.diy/icons/expo-brand.svg +1 -0
- tools/bolt.diy/icons/expo.svg +4 -0
- tools/bolt.diy/icons/logo-text.svg +1 -0
- tools/bolt.diy/icons/logo.svg +4 -0
- tools/bolt.diy/icons/mcp.svg +1 -0
- tools/bolt.diy/icons/nativescript.svg +1 -0
- tools/bolt.diy/icons/netlify.svg +10 -0
- tools/bolt.diy/icons/nextjs.svg +1 -0
- tools/bolt.diy/icons/nuxt.svg +1 -0
- tools/bolt.diy/icons/qwik.svg +1 -0
- tools/bolt.diy/icons/react.svg +1 -0
- tools/bolt.diy/icons/remix.svg +24 -0
- tools/bolt.diy/icons/remotion.svg +1 -0
- tools/bolt.diy/icons/shadcn.svg +21 -0
- tools/bolt.diy/icons/slidev.svg +60 -0
- tools/bolt.diy/icons/solidjs.svg +1 -0
- tools/bolt.diy/icons/stars.svg +1 -0
- tools/bolt.diy/icons/svelte.svg +1 -0
- tools/bolt.diy/icons/typescript.svg +1 -0
- tools/bolt.diy/icons/vite.svg +1 -0
- tools/bolt.diy/icons/vue.svg +1 -0
- tools/bolt.diy/load-context.ts +9 -0
- tools/bolt.diy/notarize.cjs +31 -0
- tools/bolt.diy/package.json +218 -0
- tools/bolt.diy/playwright.config.preview.ts +35 -0
- tools/bolt.diy/pre-start.cjs +26 -0
- tools/bolt.diy/public/apple-touch-icon-precomposed.png +0 -0
- tools/bolt.diy/public/apple-touch-icon.png +0 -0
- tools/bolt.diy/public/favicon.ico +0 -0
- tools/bolt.diy/public/favicon.svg +4 -0
- tools/bolt.diy/public/icons/AmazonBedrock.svg +1 -0
- tools/bolt.diy/public/icons/Anthropic.svg +4 -0
- tools/bolt.diy/public/icons/Cohere.svg +4 -0
- tools/bolt.diy/public/icons/Deepseek.svg +5 -0
- tools/bolt.diy/public/icons/Default.svg +4 -0
- tools/bolt.diy/public/icons/Google.svg +4 -0
- tools/bolt.diy/public/icons/Groq.svg +4 -0
- tools/bolt.diy/public/icons/HuggingFace.svg +4 -0
- tools/bolt.diy/public/icons/Hyperbolic.svg +3 -0
- tools/bolt.diy/public/icons/LMStudio.svg +5 -0
- tools/bolt.diy/public/icons/Mistral.svg +4 -0
- tools/bolt.diy/public/icons/Ollama.svg +4 -0
- tools/bolt.diy/public/icons/OpenAI.svg +4 -0
- tools/bolt.diy/public/icons/OpenAILike.svg +4 -0
- tools/bolt.diy/public/icons/OpenRouter.svg +4 -0
- tools/bolt.diy/public/icons/Perplexity.svg +4 -0
- tools/bolt.diy/public/icons/Together.svg +4 -0
- tools/bolt.diy/public/icons/xAI.svg +5 -0
- tools/bolt.diy/public/inspector-script.js +292 -0
- tools/bolt.diy/public/logo-dark-styled.png +0 -0
- tools/bolt.diy/public/logo-dark.png +0 -0
- tools/bolt.diy/public/logo-light-styled.png +0 -0
- tools/bolt.diy/public/logo-light.png +0 -0
- tools/bolt.diy/public/logo.svg +15 -0
- tools/bolt.diy/public/social_preview_index.jpg +0 -0
- tools/bolt.diy/scripts/clean.js +45 -0
- tools/bolt.diy/scripts/electron-dev.mjs +181 -0
- tools/bolt.diy/scripts/setup-env.sh +41 -0
- tools/bolt.diy/scripts/update-imports.sh +7 -0
- tools/bolt.diy/scripts/update.sh +52 -0
- tools/bolt.diy/services/execution-governor/Dockerfile +41 -0
- tools/bolt.diy/services/execution-governor/config.ts +42 -0
- tools/bolt.diy/services/execution-governor/index.ts +683 -0
- tools/bolt.diy/services/execution-governor/metrics.ts +141 -0
- tools/bolt.diy/services/execution-governor/package.json +31 -0
- tools/bolt.diy/services/execution-governor/priority-queue.ts +139 -0
- tools/bolt.diy/services/execution-governor/tsconfig.json +21 -0
- tools/bolt.diy/services/execution-governor/types.ts +145 -0
- tools/bolt.diy/services/headless-executor/Dockerfile +43 -0
- tools/bolt.diy/services/headless-executor/executor.ts +210 -0
- tools/bolt.diy/services/headless-executor/index.ts +323 -0
- tools/bolt.diy/services/headless-executor/package.json +27 -0
- tools/bolt.diy/services/headless-executor/tsconfig.json +21 -0
- tools/bolt.diy/services/headless-executor/types.ts +38 -0
- tools/bolt.diy/test-workflows.sh +240 -0
- tools/bolt.diy/tests/integration/corporate-swarm.test.ts +208 -0
- tools/bolt.diy/tests/mandates/budget-limited.json +34 -0
- tools/bolt.diy/tests/mandates/complex.json +53 -0
- tools/bolt.diy/tests/mandates/constraint-enforced.json +36 -0
- tools/bolt.diy/tests/mandates/simple.json +35 -0
- tools/bolt.diy/tsconfig.json +37 -0
- tools/bolt.diy/types/istextorbinary.d.ts +15 -0
- tools/bolt.diy/uno.config.ts +279 -0
- tools/bolt.diy/vite-electron.config.ts +76 -0
- tools/bolt.diy/vite.config.ts +112 -0
- tools/bolt.diy/worker-configuration.d.ts +22 -0
- tools/bolt.diy/wrangler.toml +6 -0
- tools/code_generator.py +461 -0
- tools/file_operations.py +465 -0
- tools/mandate_generator.py +337 -0
- tools/mcpClientUtils.py +1216 -0
- tools/sensors.py +285 -0
- utils/Agent_types.py +15 -0
- utils/AnyToStr.py +0 -0
- utils/HHCS.py +277 -0
- utils/__init__.py +30 -0
- utils/agent.py +3627 -0
- utils/aop.py +2948 -0
- utils/canonical.py +143 -0
- utils/conversation.py +1195 -0
- utils/doctrine_versioning +230 -0
- utils/formatter.py +474 -0
- utils/ledger.py +311 -0
- utils/out_types.py +16 -0
- utils/rollback.py +339 -0
- utils/router.py +929 -0
- utils/tui.py +1908 -0
|
@@ -0,0 +1,705 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Pridnestrovia (Transnistria) CRCA-SD Example
|
|
3
|
+
|
|
4
|
+
This example models Pridnestrovia's socioeconomic dynamics using real data as of December 20, 2025.
|
|
5
|
+
Pridnestrovia is a self-proclaimed independent region between Moldova and Ukraine, with limited
|
|
6
|
+
international recognition, which affects its economic and social indicators.
|
|
7
|
+
|
|
8
|
+
Real Data Sources (as of December 2025):
|
|
9
|
+
- Population: ~368,000 (March 2024 estimate, adjusted for decline)
|
|
10
|
+
- GDP: ~$1.2 billion (2021 estimate, nominal)
|
|
11
|
+
- GDP per capita: ~$2,584
|
|
12
|
+
- Currency: Transnistrian ruble (PRB), ~11 PRB = 1 USD
|
|
13
|
+
- Major industries: Steel, textiles, electricity generation
|
|
14
|
+
- Economic challenges: Limited international recognition, trade primarily with Russia/CIS
|
|
15
|
+
- Weather (Dec 20, 2025): Mostly cloudy, 31-37°F (0-3°C)
|
|
16
|
+
|
|
17
|
+
This example demonstrates:
|
|
18
|
+
1. Initializing state with real Pridnestrovia data
|
|
19
|
+
2. Modeling economic constraints (trade isolation, energy dependence)
|
|
20
|
+
3. Board governance for policy decisions
|
|
21
|
+
4. Scenario analysis (trade embargo, energy crisis, etc.)
|
|
22
|
+
5. MPC optimization under uncertainty
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
from typing import List, Dict, Optional
|
|
26
|
+
import numpy as np
|
|
27
|
+
from loguru import logger
|
|
28
|
+
|
|
29
|
+
# Import CRCA-SD components
|
|
30
|
+
from crca_sd.crca_sd_core import (
|
|
31
|
+
StateVector,
|
|
32
|
+
ControlVector,
|
|
33
|
+
DynamicsModel,
|
|
34
|
+
ConstraintChecker,
|
|
35
|
+
ForwardSimulator,
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
from crca_sd.crca_sd_mpc import (
|
|
39
|
+
ObjectiveVector,
|
|
40
|
+
CVaRComputer,
|
|
41
|
+
MPCSolver,
|
|
42
|
+
ScenarioGenerator,
|
|
43
|
+
StabilityEnforcer,
|
|
44
|
+
ParetoExtractor,
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
from crca_sd.crca_sd_governance import (
|
|
48
|
+
BoardMember,
|
|
49
|
+
Board,
|
|
50
|
+
BoardType,
|
|
51
|
+
Arbitration,
|
|
52
|
+
GovernanceSystem,
|
|
53
|
+
LogisticsNetwork,
|
|
54
|
+
Visualization,
|
|
55
|
+
MetricsCollector,
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def initialize_pridnestrovia_state() -> StateVector:
|
|
60
|
+
"""
|
|
61
|
+
Initialize state vector with real Pridnestrovia data (December 2025).
|
|
62
|
+
|
|
63
|
+
Data sources:
|
|
64
|
+
- Population: 367,776 (March 2024) -> ~360,000 (Dec 2025, accounting for decline)
|
|
65
|
+
- GDP: $1.201 billion (2021) -> ~$1.3 billion (2025 estimate, adjusted for inflation)
|
|
66
|
+
- GDP per capita: $2,584 (2021) -> ~$3,600 (2025 estimate)
|
|
67
|
+
- Unemployment: ~7% (estimated, higher than Moldova's 5.4%)
|
|
68
|
+
- Literacy: ~99% (high, Soviet legacy)
|
|
69
|
+
- Infrastructure: Moderate (aging Soviet-era infrastructure)
|
|
70
|
+
|
|
71
|
+
Returns:
|
|
72
|
+
StateVector: Initialized state vector
|
|
73
|
+
"""
|
|
74
|
+
# Population: declining due to emigration
|
|
75
|
+
population = 360000.0 # ~360k (down from 367k in 2024)
|
|
76
|
+
|
|
77
|
+
# Labor force: ~50% participation rate (typical for post-Soviet region)
|
|
78
|
+
labor_force = population * 0.50
|
|
79
|
+
|
|
80
|
+
# Unemployment: higher due to economic isolation
|
|
81
|
+
unemployment_rate = 0.07 # 7% (estimated, higher than Moldova)
|
|
82
|
+
|
|
83
|
+
# Wage: low due to limited economic opportunities
|
|
84
|
+
# Average monthly wage ~$300-400 USD equivalent
|
|
85
|
+
wage_proxy = 0.35 # Normalized proxy (low)
|
|
86
|
+
|
|
87
|
+
# Social stability: moderate (unrecognized status creates uncertainty)
|
|
88
|
+
stability = 0.65 # 65% (moderate, affected by political status)
|
|
89
|
+
|
|
90
|
+
# Literacy: very high (Soviet education legacy)
|
|
91
|
+
literacy = 0.99 # 99% (very high)
|
|
92
|
+
|
|
93
|
+
# Education capacity: moderate (Soviet-era institutions)
|
|
94
|
+
education_capacity = 15000.0 # Seats/teachers
|
|
95
|
+
|
|
96
|
+
# Healthcare capacity: limited (aging infrastructure)
|
|
97
|
+
healthcare_capacity = 8000.0 # Beds/staff
|
|
98
|
+
|
|
99
|
+
# Capital stock: industrial (steel, textiles, electricity)
|
|
100
|
+
# Estimated at ~$800M in productive capital
|
|
101
|
+
capital_stock = 800000000.0 # $800M
|
|
102
|
+
|
|
103
|
+
# Infrastructure: aging Soviet-era, moderate condition
|
|
104
|
+
infrastructure_health = 0.65 # 65% (moderate, needs maintenance)
|
|
105
|
+
|
|
106
|
+
# Transport capacity: limited (landlocked, trade isolation)
|
|
107
|
+
transport_capacity = 5000.0 # ton-km/day (limited)
|
|
108
|
+
|
|
109
|
+
# Energy stock: dependent on imports (Russia, Ukraine)
|
|
110
|
+
energy_stock = 20000.0 # Limited reserves
|
|
111
|
+
|
|
112
|
+
# Food stock: moderate (agricultural region)
|
|
113
|
+
food_stock = 15000.0 # Moderate reserves
|
|
114
|
+
|
|
115
|
+
# Materials stock: industrial inputs (steel production)
|
|
116
|
+
materials_stock = 10000.0 # Industrial materials
|
|
117
|
+
|
|
118
|
+
# Ecological damage: moderate (industrial pollution)
|
|
119
|
+
ecological_damage = 50000.0 # Accumulated damage
|
|
120
|
+
|
|
121
|
+
# GDP proxy: ~$1.3B (2025 estimate)
|
|
122
|
+
gdp_proxy = 1300000000.0 # $1.3B
|
|
123
|
+
|
|
124
|
+
state = StateVector(
|
|
125
|
+
P=population,
|
|
126
|
+
L=labor_force,
|
|
127
|
+
U=unemployment_rate,
|
|
128
|
+
W=wage_proxy,
|
|
129
|
+
S=stability,
|
|
130
|
+
literacy=literacy,
|
|
131
|
+
Ecap=education_capacity,
|
|
132
|
+
Hcap=healthcare_capacity,
|
|
133
|
+
K=capital_stock,
|
|
134
|
+
I=infrastructure_health,
|
|
135
|
+
Tcap=transport_capacity,
|
|
136
|
+
E_stock=energy_stock,
|
|
137
|
+
F_stock=food_stock,
|
|
138
|
+
M_stock=materials_stock,
|
|
139
|
+
C=ecological_damage,
|
|
140
|
+
Y=gdp_proxy,
|
|
141
|
+
)
|
|
142
|
+
|
|
143
|
+
logger.info("Initialized Pridnestrovia state:")
|
|
144
|
+
logger.info(f" Population: {population:,.0f}")
|
|
145
|
+
logger.info(f" GDP: ${gdp_proxy/1e9:.2f}B")
|
|
146
|
+
logger.info(f" Unemployment: {unemployment_rate:.1%}")
|
|
147
|
+
logger.info(f" Stability: {stability:.1%}")
|
|
148
|
+
|
|
149
|
+
return state
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
def create_pridnestrovia_dynamics() -> DynamicsModel:
|
|
153
|
+
"""
|
|
154
|
+
Create dynamics model with Pridnestrovia-specific parameters.
|
|
155
|
+
|
|
156
|
+
Adjustments for Pridnestrovia:
|
|
157
|
+
- Higher capital depreciation (aging industrial base)
|
|
158
|
+
- Lower investment efficiency (limited access to international markets)
|
|
159
|
+
- Higher infrastructure decay (aging Soviet-era infrastructure)
|
|
160
|
+
- Lower trade efficiency (isolation)
|
|
161
|
+
|
|
162
|
+
Returns:
|
|
163
|
+
DynamicsModel: Configured dynamics model
|
|
164
|
+
"""
|
|
165
|
+
return DynamicsModel(
|
|
166
|
+
delta_K=0.06, # 6% capital depreciation (aging industrial base)
|
|
167
|
+
delta_I=0.03, # 3% infrastructure decay (faster than typical)
|
|
168
|
+
alpha=0.35, # 35% capital share (industrial economy)
|
|
169
|
+
kappa_K=0.65, # 65% investment efficiency (lower due to isolation)
|
|
170
|
+
kappa_I=0.60, # 60% maintenance efficiency (aging infrastructure)
|
|
171
|
+
kappa_literacy=0.08, # 8% literacy diffusion (already high)
|
|
172
|
+
delta_literacy=0.005, # 0.5% literacy disruption (low, good education)
|
|
173
|
+
alpha_U=0.12, # 12% unemployment adjustment (slower, limited opportunities)
|
|
174
|
+
alpha_rho=0.04, # 4% labor participation adjustment
|
|
175
|
+
)
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
def create_pridnestrovia_scenarios() -> List[List[Dict[str, float]]]:
|
|
179
|
+
"""
|
|
180
|
+
Generate realistic scenarios for Pridnestrovia.
|
|
181
|
+
|
|
182
|
+
Scenarios reflect real risks:
|
|
183
|
+
1. Trade embargo (Russia/Ukraine tensions)
|
|
184
|
+
2. Energy crisis (gas supply disruption)
|
|
185
|
+
3. Economic isolation (sanctions)
|
|
186
|
+
4. Normal operation (baseline)
|
|
187
|
+
|
|
188
|
+
Returns:
|
|
189
|
+
List[List[Dict[str, float]]]: List of scenario sequences
|
|
190
|
+
"""
|
|
191
|
+
generator = ScenarioGenerator()
|
|
192
|
+
scenarios = []
|
|
193
|
+
|
|
194
|
+
# Scenario 1: Baseline (normal operation)
|
|
195
|
+
baseline = generator.generate_gaussian(
|
|
196
|
+
n_scenarios=1,
|
|
197
|
+
horizon=12,
|
|
198
|
+
mean={
|
|
199
|
+
"demand_shock": 0.0,
|
|
200
|
+
"trade_shock": 0.0,
|
|
201
|
+
"productivity_shock": 1.0,
|
|
202
|
+
"disaster_shock": 0.0,
|
|
203
|
+
"labor_shock": 0.0,
|
|
204
|
+
"unemployment_shock": 0.0,
|
|
205
|
+
"energy_import": 500.0, # Normal energy imports
|
|
206
|
+
"food_import": 200.0, # Normal food imports
|
|
207
|
+
},
|
|
208
|
+
cov=np.eye(8) * 0.01 # Low variance
|
|
209
|
+
)
|
|
210
|
+
scenarios.extend(baseline)
|
|
211
|
+
|
|
212
|
+
# Scenario 2: Trade embargo (reduced trade with Russia/Ukraine)
|
|
213
|
+
embargo = generator.generate_structured_shock(
|
|
214
|
+
"trade_embargo",
|
|
215
|
+
magnitude=0.8, # 80% trade reduction
|
|
216
|
+
timing=3, # Starts at month 3
|
|
217
|
+
horizon=12
|
|
218
|
+
)
|
|
219
|
+
scenarios.append(embargo)
|
|
220
|
+
|
|
221
|
+
# Scenario 3: Energy crisis (gas supply disruption)
|
|
222
|
+
energy_crisis = []
|
|
223
|
+
for t in range(12):
|
|
224
|
+
if t >= 2: # Crisis starts at month 2
|
|
225
|
+
energy_crisis.append({
|
|
226
|
+
"energy_import": -1000.0, # Severe reduction
|
|
227
|
+
"trade_shock": 0.3, # Moderate trade impact
|
|
228
|
+
"productivity_shock": 0.85, # Reduced productivity
|
|
229
|
+
})
|
|
230
|
+
else:
|
|
231
|
+
energy_crisis.append({})
|
|
232
|
+
scenarios.append(energy_crisis)
|
|
233
|
+
|
|
234
|
+
# Scenario 4: Economic sanctions (increased isolation)
|
|
235
|
+
sanctions = []
|
|
236
|
+
for t in range(12):
|
|
237
|
+
if t >= 4: # Sanctions start at month 4
|
|
238
|
+
sanctions.append({
|
|
239
|
+
"trade_shock": 0.6, # 60% trade reduction
|
|
240
|
+
"demand_shock": -0.2, # Reduced demand
|
|
241
|
+
"productivity_shock": 0.9, # 10% productivity loss
|
|
242
|
+
})
|
|
243
|
+
else:
|
|
244
|
+
sanctions.append({})
|
|
245
|
+
scenarios.append(sanctions)
|
|
246
|
+
|
|
247
|
+
# Scenario 5: Student-t heavy-tailed disaster
|
|
248
|
+
heavy_tail = generator.generate_student_t(
|
|
249
|
+
n_scenarios=1,
|
|
250
|
+
horizon=12,
|
|
251
|
+
df=3.0, # Heavy tails
|
|
252
|
+
scale=0.15
|
|
253
|
+
)
|
|
254
|
+
scenarios.extend(heavy_tail)
|
|
255
|
+
|
|
256
|
+
logger.info(f"Generated {len(scenarios)} scenarios for Pridnestrovia")
|
|
257
|
+
return scenarios
|
|
258
|
+
|
|
259
|
+
|
|
260
|
+
def create_pridnestrovia_boards() -> List[Board]:
|
|
261
|
+
"""
|
|
262
|
+
Create governance boards for Pridnestrovia.
|
|
263
|
+
|
|
264
|
+
Boards reflect real policy priorities:
|
|
265
|
+
- Growth: Industrial output, employment
|
|
266
|
+
- Welfare: Social stability, unemployment reduction
|
|
267
|
+
- Sustainability: Long-term resilience, environmental protection
|
|
268
|
+
- Stability: Risk management, avoiding collapse
|
|
269
|
+
|
|
270
|
+
Returns:
|
|
271
|
+
List[Board]: List of governance boards
|
|
272
|
+
"""
|
|
273
|
+
growth_board = Board(
|
|
274
|
+
board_id="growth_pridnestrovia",
|
|
275
|
+
board_type=BoardType.GROWTH,
|
|
276
|
+
members=[
|
|
277
|
+
BoardMember(
|
|
278
|
+
name="Industrial Director",
|
|
279
|
+
board_type=BoardType.GROWTH,
|
|
280
|
+
expertise_areas=["steel_production", "manufacturing", "trade"],
|
|
281
|
+
voting_weight=2.0,
|
|
282
|
+
independence_status=False,
|
|
283
|
+
),
|
|
284
|
+
BoardMember(
|
|
285
|
+
name="Economic Advisor",
|
|
286
|
+
board_type=BoardType.GROWTH,
|
|
287
|
+
expertise_areas=["macroeconomics", "investment"],
|
|
288
|
+
voting_weight=1.5,
|
|
289
|
+
independence_status=True,
|
|
290
|
+
),
|
|
291
|
+
]
|
|
292
|
+
)
|
|
293
|
+
|
|
294
|
+
welfare_board = Board(
|
|
295
|
+
board_id="welfare_pridnestrovia",
|
|
296
|
+
board_type=BoardType.WELFARE,
|
|
297
|
+
members=[
|
|
298
|
+
BoardMember(
|
|
299
|
+
name="Social Policy Director",
|
|
300
|
+
board_type=BoardType.WELFARE,
|
|
301
|
+
expertise_areas=["social_policy", "unemployment", "education"],
|
|
302
|
+
voting_weight=2.0,
|
|
303
|
+
independence_status=False,
|
|
304
|
+
),
|
|
305
|
+
BoardMember(
|
|
306
|
+
name="Healthcare Director",
|
|
307
|
+
board_type=BoardType.WELFARE,
|
|
308
|
+
expertise_areas=["healthcare", "public_health"],
|
|
309
|
+
voting_weight=1.5,
|
|
310
|
+
independence_status=False,
|
|
311
|
+
),
|
|
312
|
+
]
|
|
313
|
+
)
|
|
314
|
+
|
|
315
|
+
sustainability_board = Board(
|
|
316
|
+
board_id="sustainability_pridnestrovia",
|
|
317
|
+
board_type=BoardType.SUSTAINABILITY,
|
|
318
|
+
members=[
|
|
319
|
+
BoardMember(
|
|
320
|
+
name="Environmental Director",
|
|
321
|
+
board_type=BoardType.SUSTAINABILITY,
|
|
322
|
+
expertise_areas=["environment", "pollution_control", "energy_efficiency"],
|
|
323
|
+
voting_weight=2.0,
|
|
324
|
+
independence_status=True,
|
|
325
|
+
),
|
|
326
|
+
]
|
|
327
|
+
)
|
|
328
|
+
|
|
329
|
+
stability_board = Board(
|
|
330
|
+
board_id="stability_pridnestrovia",
|
|
331
|
+
board_type=BoardType.STABILITY,
|
|
332
|
+
members=[
|
|
333
|
+
BoardMember(
|
|
334
|
+
name="Risk Management Director",
|
|
335
|
+
board_type=BoardType.STABILITY,
|
|
336
|
+
expertise_areas=["risk_management", "crisis_management", "resilience"],
|
|
337
|
+
voting_weight=2.5,
|
|
338
|
+
independence_status=True,
|
|
339
|
+
),
|
|
340
|
+
]
|
|
341
|
+
)
|
|
342
|
+
|
|
343
|
+
boards = [growth_board, welfare_board, sustainability_board, stability_board]
|
|
344
|
+
logger.info(f"Created {len(boards)} governance boards for Pridnestrovia")
|
|
345
|
+
return boards
|
|
346
|
+
|
|
347
|
+
|
|
348
|
+
def pridnestrovia_mpc_analysis():
|
|
349
|
+
"""
|
|
350
|
+
Run MPC analysis for Pridnestrovia.
|
|
351
|
+
|
|
352
|
+
Analyzes policy options under uncertainty, considering:
|
|
353
|
+
- Trade isolation risks
|
|
354
|
+
- Energy dependence
|
|
355
|
+
- Economic constraints
|
|
356
|
+
- Social stability requirements
|
|
357
|
+
"""
|
|
358
|
+
logger.info("=== Pridnestrovia MPC Analysis ===")
|
|
359
|
+
|
|
360
|
+
# Initialize
|
|
361
|
+
x_0 = initialize_pridnestrovia_state()
|
|
362
|
+
dynamics = create_pridnestrovia_dynamics()
|
|
363
|
+
checker = ConstraintChecker(U_max=0.15, S_min=0.50) # Stricter bounds for stability
|
|
364
|
+
obj_computer = ObjectiveVector(horizon=12)
|
|
365
|
+
stability = StabilityEnforcer(max_budget_change=0.15) # Conservative rate limits
|
|
366
|
+
solver = MPCSolver(dynamics, checker, obj_computer, horizon=12, stability_enforcer=stability)
|
|
367
|
+
simulator = ForwardSimulator(dynamics, checker)
|
|
368
|
+
|
|
369
|
+
# Generate scenarios
|
|
370
|
+
scenarios = create_pridnestrovia_scenarios()
|
|
371
|
+
|
|
372
|
+
# Solve MPC
|
|
373
|
+
logger.info("Solving MPC optimization...")
|
|
374
|
+
policy, solver_info = solver.solve(x_0, scenarios)
|
|
375
|
+
|
|
376
|
+
logger.info(f"MPC solved: best_score={solver_info.get('best_score', 'N/A')}")
|
|
377
|
+
logger.info(f"Budget allocation: {policy.budget_shares}")
|
|
378
|
+
|
|
379
|
+
# Simulate optimal policy
|
|
380
|
+
logger.info("Simulating optimal policy...")
|
|
381
|
+
trajectory, feasibility, first_violation = simulator.simulate_scenario(
|
|
382
|
+
x_0, policy, scenarios[0], horizon=12
|
|
383
|
+
)
|
|
384
|
+
|
|
385
|
+
feasible_steps = sum(feasibility)
|
|
386
|
+
logger.info(f"Feasibility: {feasible_steps}/12 steps")
|
|
387
|
+
|
|
388
|
+
if first_violation:
|
|
389
|
+
logger.warning(f"First constraint violation at month {first_violation}")
|
|
390
|
+
|
|
391
|
+
# Compute objectives
|
|
392
|
+
objectives = obj_computer.compute(trajectory, [policy] * 12)
|
|
393
|
+
logger.info(f"Objectives: J_U={objectives[0]:.2f}, J_Y={objectives[2]:.2f}, J_C={objectives[4]:.2f}")
|
|
394
|
+
|
|
395
|
+
# Compute CVaR
|
|
396
|
+
cvar_computer = CVaRComputer(alpha=0.05)
|
|
397
|
+
collapse_proxies = []
|
|
398
|
+
for scenario in scenarios[:3]: # Use subset for speed
|
|
399
|
+
traj, _, _ = simulator.simulate_scenario(x_0, policy, scenario, horizon=12)
|
|
400
|
+
proxy = cvar_computer.collapse_proxy(traj)
|
|
401
|
+
collapse_proxies.append(proxy)
|
|
402
|
+
|
|
403
|
+
cvar = cvar_computer.compute_cvar(np.array(collapse_proxies))
|
|
404
|
+
logger.info(f"CVaR (α=0.05): {cvar:.4f}")
|
|
405
|
+
|
|
406
|
+
# Final state
|
|
407
|
+
final_state = trajectory[-1]
|
|
408
|
+
logger.info(f"Final state: P={final_state.P:,.0f}, U={final_state.U:.1%}, Y=${final_state.Y/1e9:.2f}B")
|
|
409
|
+
|
|
410
|
+
return {
|
|
411
|
+
"policy": policy,
|
|
412
|
+
"trajectory": trajectory,
|
|
413
|
+
"objectives": objectives,
|
|
414
|
+
"cvar": cvar,
|
|
415
|
+
"feasibility": feasible_steps,
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
|
|
419
|
+
def pridnestrovia_governance_demo():
|
|
420
|
+
"""
|
|
421
|
+
Demonstrate board governance for Pridnestrovia policy selection.
|
|
422
|
+
|
|
423
|
+
Shows how different boards evaluate policies and how arbitration
|
|
424
|
+
selects the final policy.
|
|
425
|
+
"""
|
|
426
|
+
logger.info("=== Pridnestrovia Board Governance Demo ===")
|
|
427
|
+
|
|
428
|
+
# Initialize
|
|
429
|
+
x_0 = initialize_pridnestrovia_state()
|
|
430
|
+
dynamics = create_pridnestrovia_dynamics()
|
|
431
|
+
checker = ConstraintChecker()
|
|
432
|
+
obj_computer = ObjectiveVector(horizon=12)
|
|
433
|
+
simulator = ForwardSimulator(dynamics, checker)
|
|
434
|
+
|
|
435
|
+
# Create boards
|
|
436
|
+
boards = create_pridnestrovia_boards()
|
|
437
|
+
|
|
438
|
+
# Generate candidate policies
|
|
439
|
+
budget_categories = [
|
|
440
|
+
"energy", # Energy security (critical for Pridnestrovia)
|
|
441
|
+
"food", # Food security
|
|
442
|
+
"infrastructure", # Infrastructure maintenance
|
|
443
|
+
"education", # Education (already high, maintain)
|
|
444
|
+
"healthcare", # Healthcare (aging population)
|
|
445
|
+
"R&D", # Research & development (limited)
|
|
446
|
+
"welfare", # Social welfare
|
|
447
|
+
]
|
|
448
|
+
|
|
449
|
+
candidate_policies = [
|
|
450
|
+
ControlVector.sample_budget_simplex(budget_categories)
|
|
451
|
+
for _ in range(6)
|
|
452
|
+
]
|
|
453
|
+
|
|
454
|
+
# Evaluate under scenarios
|
|
455
|
+
scenarios = create_pridnestrovia_scenarios()
|
|
456
|
+
objective_matrix = []
|
|
457
|
+
|
|
458
|
+
logger.info("Evaluating candidate policies...")
|
|
459
|
+
for i, policy in enumerate(candidate_policies):
|
|
460
|
+
scenario_objectives = []
|
|
461
|
+
for scenario in scenarios[:3]: # Use subset for speed
|
|
462
|
+
traj, _, _ = simulator.simulate_scenario(x_0, policy, scenario, horizon=12)
|
|
463
|
+
obj = obj_computer.compute(traj, [policy] * 12)
|
|
464
|
+
scenario_objectives.append(obj)
|
|
465
|
+
expected_obj = np.mean(scenario_objectives, axis=0)
|
|
466
|
+
objective_matrix.append(expected_obj)
|
|
467
|
+
logger.info(f"Policy {i+1} objectives: J_U={expected_obj[0]:.2f}, J_Y={expected_obj[2]:.2f}")
|
|
468
|
+
|
|
469
|
+
objective_matrix = np.array(objective_matrix)
|
|
470
|
+
|
|
471
|
+
# Board evaluations
|
|
472
|
+
logger.info("\nBoard evaluations:")
|
|
473
|
+
for board in boards:
|
|
474
|
+
ranked = board.evaluate_policies(candidate_policies, objective_matrix)
|
|
475
|
+
top_policy_idx = candidate_policies.index(ranked[0][0])
|
|
476
|
+
logger.info(f"{board.board_type.value} board: Top policy {top_policy_idx+1}, score={ranked[0][1]:.4f}")
|
|
477
|
+
|
|
478
|
+
# Arbitration
|
|
479
|
+
governance = GovernanceSystem(boards, arbitration_method="weighted_vote")
|
|
480
|
+
selected_policy = governance.select_policy(candidate_policies, objective_matrix)
|
|
481
|
+
selected_idx = candidate_policies.index(selected_policy)
|
|
482
|
+
|
|
483
|
+
logger.info(f"\nGovernance selected: Policy {selected_idx+1} via weighted vote")
|
|
484
|
+
|
|
485
|
+
# Test other methods
|
|
486
|
+
consensus = Arbitration.pareto_intersection(boards, candidate_policies, objective_matrix)
|
|
487
|
+
logger.info(f"Pareto intersection: {len(consensus)} consensus policies")
|
|
488
|
+
|
|
489
|
+
minimax_policy = Arbitration.minimax_regret(boards, candidate_policies, objective_matrix)
|
|
490
|
+
logger.info(f"Minimax regret: Policy {candidate_policies.index(minimax_policy)+1}")
|
|
491
|
+
|
|
492
|
+
return {
|
|
493
|
+
"selected_policy": selected_policy,
|
|
494
|
+
"consensus_policies": consensus,
|
|
495
|
+
"minimax_policy": minimax_policy,
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
|
|
499
|
+
def pridnestrovia_logistics_demo():
|
|
500
|
+
"""
|
|
501
|
+
Demonstrate logistics network for Pridnestrovia.
|
|
502
|
+
|
|
503
|
+
Models trade flows between:
|
|
504
|
+
- Tiraspol (capital)
|
|
505
|
+
- Bender (industrial city)
|
|
506
|
+
- Rybnitsa (steel production)
|
|
507
|
+
- External: Russia, Ukraine, Moldova
|
|
508
|
+
"""
|
|
509
|
+
logger.info("=== Pridnestrovia Logistics Network Demo ===")
|
|
510
|
+
|
|
511
|
+
# Create network
|
|
512
|
+
nodes = [
|
|
513
|
+
"Tiraspol", # Capital
|
|
514
|
+
"Bender", # Industrial city
|
|
515
|
+
"Rybnitsa", # Steel production
|
|
516
|
+
"Russia", # External: Russia
|
|
517
|
+
"Ukraine", # External: Ukraine
|
|
518
|
+
"Moldova", # External: Moldova
|
|
519
|
+
]
|
|
520
|
+
|
|
521
|
+
edges = [
|
|
522
|
+
("Tiraspol", "Bender"),
|
|
523
|
+
("Tiraspol", "Rybnitsa"),
|
|
524
|
+
("Bender", "Tiraspol"),
|
|
525
|
+
("Rybnitsa", "Tiraspol"),
|
|
526
|
+
("Russia", "Tiraspol"), # Energy imports
|
|
527
|
+
("Ukraine", "Tiraspol"), # Trade
|
|
528
|
+
("Moldova", "Tiraspol"), # Limited trade
|
|
529
|
+
("Tiraspol", "Russia"), # Exports
|
|
530
|
+
("Tiraspol", "Ukraine"), # Exports
|
|
531
|
+
]
|
|
532
|
+
|
|
533
|
+
# Capacities (limited due to isolation)
|
|
534
|
+
capacities = {
|
|
535
|
+
("Russia", "Tiraspol"): 2000.0, # Energy imports
|
|
536
|
+
("Ukraine", "Tiraspol"): 1500.0, # Trade
|
|
537
|
+
("Moldova", "Tiraspol"): 500.0, # Limited trade
|
|
538
|
+
("Tiraspol", "Bender"): 1000.0,
|
|
539
|
+
("Tiraspol", "Rybnitsa"): 800.0,
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
# Costs (higher due to isolation)
|
|
543
|
+
costs = {
|
|
544
|
+
("Russia", "Tiraspol"): 1.2, # Higher cost
|
|
545
|
+
("Ukraine", "Tiraspol"): 1.5, # Even higher (tensions)
|
|
546
|
+
("Moldova", "Tiraspol"): 2.0, # Very high (limited trade)
|
|
547
|
+
("Tiraspol", "Bender"): 0.8,
|
|
548
|
+
("Tiraspol", "Rybnitsa"): 0.9,
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
network = LogisticsNetwork(nodes, edges, capacities, costs)
|
|
552
|
+
logger.info(f"Created logistics network: {len(nodes)} nodes, {len(edges)} edges")
|
|
553
|
+
|
|
554
|
+
# Solve flow problem
|
|
555
|
+
demands = {
|
|
556
|
+
"Tiraspol": {"energy": 800.0, "food": 300.0, "materials": 200.0},
|
|
557
|
+
"Bender": {"energy": 400.0, "food": 150.0},
|
|
558
|
+
"Rybnitsa": {"energy": 500.0, "materials": 300.0},
|
|
559
|
+
}
|
|
560
|
+
commodities = ["energy", "food", "materials"]
|
|
561
|
+
|
|
562
|
+
flows = network.solve_flow_problem(demands, commodities)
|
|
563
|
+
logger.info(f"Solved flow problem: {len(flows)} flow variables")
|
|
564
|
+
|
|
565
|
+
# Analyze flows
|
|
566
|
+
total_energy_import = sum(
|
|
567
|
+
v for (src, tgt, comm), v in flows.items()
|
|
568
|
+
if comm == "energy" and src in ["Russia", "Ukraine", "Moldova"]
|
|
569
|
+
)
|
|
570
|
+
logger.info(f"Total energy imports: {total_energy_import:.0f} units")
|
|
571
|
+
|
|
572
|
+
return {
|
|
573
|
+
"network": network,
|
|
574
|
+
"flows": flows,
|
|
575
|
+
"total_energy_import": total_energy_import,
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
|
|
579
|
+
def full_pridnestrovia_workflow():
|
|
580
|
+
"""
|
|
581
|
+
Full end-to-end workflow for Pridnestrovia.
|
|
582
|
+
|
|
583
|
+
Demonstrates complete CRCA-SD system:
|
|
584
|
+
1. Initialize with real data
|
|
585
|
+
2. Generate scenarios (trade embargo, energy crisis, etc.)
|
|
586
|
+
3. Solve MPC for candidate policies
|
|
587
|
+
4. Evaluate with boards
|
|
588
|
+
5. Arbitrate to select final policy
|
|
589
|
+
6. Simulate and collect metrics
|
|
590
|
+
"""
|
|
591
|
+
logger.info("=== Full Pridnestrovia Workflow ===")
|
|
592
|
+
|
|
593
|
+
# 1. Initialize
|
|
594
|
+
x_0 = initialize_pridnestrovia_state()
|
|
595
|
+
dynamics = create_pridnestrovia_dynamics()
|
|
596
|
+
checker = ConstraintChecker(U_max=0.15, S_min=0.50)
|
|
597
|
+
obj_computer = ObjectiveVector(horizon=12)
|
|
598
|
+
stability = StabilityEnforcer(max_budget_change=0.15)
|
|
599
|
+
solver = MPCSolver(dynamics, checker, obj_computer, horizon=12, stability_enforcer=stability)
|
|
600
|
+
simulator = ForwardSimulator(dynamics, checker)
|
|
601
|
+
|
|
602
|
+
# 2. Generate scenarios
|
|
603
|
+
scenarios = create_pridnestrovia_scenarios()
|
|
604
|
+
logger.info(f"Generated {len(scenarios)} scenarios")
|
|
605
|
+
|
|
606
|
+
# 3. Solve MPC
|
|
607
|
+
logger.info("Solving MPC...")
|
|
608
|
+
policy_candidates, solver_info = solver.solve(x_0, scenarios)
|
|
609
|
+
|
|
610
|
+
# Generate additional candidates
|
|
611
|
+
budget_categories = ["energy", "food", "infrastructure", "education", "healthcare", "R&D", "welfare"]
|
|
612
|
+
additional_candidates = [
|
|
613
|
+
ControlVector.sample_budget_simplex(budget_categories)
|
|
614
|
+
for _ in range(4)
|
|
615
|
+
]
|
|
616
|
+
all_candidates = [policy_candidates] + additional_candidates
|
|
617
|
+
|
|
618
|
+
# 4. Evaluate with boards
|
|
619
|
+
boards = create_pridnestrovia_boards()
|
|
620
|
+
|
|
621
|
+
objective_matrix = []
|
|
622
|
+
for policy in all_candidates:
|
|
623
|
+
scenario_objectives = []
|
|
624
|
+
for scenario in scenarios[:3]:
|
|
625
|
+
traj, _, _ = simulator.simulate_scenario(x_0, policy, scenario, horizon=12)
|
|
626
|
+
obj = obj_computer.compute(traj, [policy] * 12)
|
|
627
|
+
scenario_objectives.append(obj)
|
|
628
|
+
expected_obj = np.mean(scenario_objectives, axis=0)
|
|
629
|
+
objective_matrix.append(expected_obj)
|
|
630
|
+
|
|
631
|
+
objective_matrix = np.array(objective_matrix)
|
|
632
|
+
|
|
633
|
+
# 5. Arbitrate
|
|
634
|
+
governance = GovernanceSystem(boards, arbitration_method="weighted_vote")
|
|
635
|
+
final_policy = governance.select_policy(all_candidates, objective_matrix)
|
|
636
|
+
logger.info("Governance selected final policy")
|
|
637
|
+
|
|
638
|
+
# 6. Simulate final policy
|
|
639
|
+
final_traj, final_feasibility, _ = simulator.simulate_scenario(
|
|
640
|
+
x_0, final_policy, scenarios[0], horizon=12
|
|
641
|
+
)
|
|
642
|
+
|
|
643
|
+
# 7. Collect metrics
|
|
644
|
+
collector = MetricsCollector()
|
|
645
|
+
metrics = collector.compute_all_metrics([final_traj], [final_policy])
|
|
646
|
+
|
|
647
|
+
# 8. Visualization
|
|
648
|
+
dashboard = Visualization.state_dashboard(x_0)
|
|
649
|
+
print("\n=== Initial State ===")
|
|
650
|
+
print(dashboard)
|
|
651
|
+
|
|
652
|
+
final_dashboard = Visualization.state_dashboard(final_traj[-1])
|
|
653
|
+
print("\n=== Final State (12 months) ===")
|
|
654
|
+
print(final_dashboard)
|
|
655
|
+
|
|
656
|
+
report = collector.generate_report()
|
|
657
|
+
print("\n=== Metrics Report ===")
|
|
658
|
+
print(report)
|
|
659
|
+
|
|
660
|
+
logger.info("=== Workflow Complete ===")
|
|
661
|
+
logger.info(f"Final state: U={final_traj[-1].U:.1%}, Y=${final_traj[-1].Y/1e9:.2f}B, C={final_traj[-1].C:,.0f}")
|
|
662
|
+
logger.info(f"Feasibility: {sum(final_feasibility)}/12 steps")
|
|
663
|
+
logger.info(f"Metrics: {metrics.get('feasibility_rate', 0.0):.1%} feasibility rate")
|
|
664
|
+
|
|
665
|
+
return {
|
|
666
|
+
"final_policy": final_policy,
|
|
667
|
+
"final_trajectory": final_traj,
|
|
668
|
+
"metrics": metrics,
|
|
669
|
+
}
|
|
670
|
+
|
|
671
|
+
|
|
672
|
+
if __name__ == "__main__":
|
|
673
|
+
"""Run Pridnestrovia examples."""
|
|
674
|
+
logger.info("Starting Pridnestrovia CRCA-SD Examples")
|
|
675
|
+
logger.info("Date: December 20, 2025")
|
|
676
|
+
logger.info("=" * 60)
|
|
677
|
+
|
|
678
|
+
# Run individual demos
|
|
679
|
+
try:
|
|
680
|
+
mpc_results = pridnestrovia_mpc_analysis()
|
|
681
|
+
logger.info("MPC analysis complete\n")
|
|
682
|
+
except Exception as e:
|
|
683
|
+
logger.error(f"MPC analysis failed: {e}")
|
|
684
|
+
|
|
685
|
+
try:
|
|
686
|
+
governance_results = pridnestrovia_governance_demo()
|
|
687
|
+
logger.info("Governance demo complete\n")
|
|
688
|
+
except Exception as e:
|
|
689
|
+
logger.error(f"Governance demo failed: {e}")
|
|
690
|
+
|
|
691
|
+
try:
|
|
692
|
+
logistics_results = pridnestrovia_logistics_demo()
|
|
693
|
+
logger.info("Logistics demo complete\n")
|
|
694
|
+
except Exception as e:
|
|
695
|
+
logger.error(f"Logistics demo failed: {e}")
|
|
696
|
+
|
|
697
|
+
# Run full workflow
|
|
698
|
+
try:
|
|
699
|
+
full_results = full_pridnestrovia_workflow()
|
|
700
|
+
logger.info("Full workflow complete!")
|
|
701
|
+
except Exception as e:
|
|
702
|
+
logger.error(f"Full workflow failed: {e}")
|
|
703
|
+
|
|
704
|
+
logger.success("All Pridnestrovia examples completed!")
|
|
705
|
+
|