23from pyhelios.config.plugin_metadata
import PLUGIN_METADATA, get_all_plugin_names, get_platform_compatible_plugins
33 """Discover and recommend optimal plugin configuration."""
34 print(
"PyHelios Plugin Discovery")
37 resolver = PluginDependencyResolver()
40 print(
"System Analysis:")
44 compatible_plugins = get_platform_compatible_plugins()
45 all_plugins = get_all_plugin_names()
46 platform_compatibility = len(compatible_plugins) / len(all_plugins) * 100
47 print(f
"Platform compatibility: {platform_compatibility:.1f}% ({len(compatible_plugins)}/{len(all_plugins)} plugins)")
50 gpu_available = resolver._check_cuda()
51 print(f
"GPU/CUDA support: {'✓ Available' if gpu_available else '✗ Not available'}")
54 system_deps = resolver._check_system_dependencies(compatible_plugins)
55 available_deps = sum(1
for available
in system_deps.values()
if available)
56 total_deps = len(system_deps)
58 dep_percentage = available_deps / total_deps * 100
59 print(f
"System dependencies: {dep_percentage:.1f}% available ({available_deps}/{total_deps})")
64 print(
"Recommendations:")
68 print(
"✓ GPU detected - GPU-accelerated workflows are possible")
69 print(
" Recommended for: Ray tracing, radiation modeling, high-performance simulations")
70 recommended_plugins = [
"weberpenntree",
"canopygenerator",
"solarposition",
"radiation",
"visualizer",
"energybalance"]
72 print(
"• No GPU detected - Using CPU-based workflows")
73 print(
" Recommended for: General plant modeling, visualization, basic simulations")
74 recommended_plugins = [
"weberpenntree",
"canopygenerator",
"solarposition",
"visualizer",
"energybalance"]
77 recommended_plugins = [p
for p
in recommended_plugins
if p
in compatible_plugins]
78 validation = resolver.validate_configuration(recommended_plugins)
80 print(f
"\nRecommended plugins ({len(recommended_plugins)}):")
81 for plugin
in recommended_plugins:
82 if plugin
in validation[
'platform_compatible']:
85 print(f
" ⚠ {plugin} (may have compatibility issues)")
88 print(f
"\nSuggested build command:")
89 plugin_list =
",".join(recommended_plugins)
90 print(f
" build_scripts/build_helios --plugins {plugin_list}")
93 if validation[
'platform_incompatible']:
94 print(f
"\n⚠ Platform compatibility issues:")
95 for plugin
in validation[
'platform_incompatible']:
98 missing_system_deps = [dep
for dep, available
in system_deps.items()
if not available]
99 if missing_system_deps:
100 print(f
"\n⚠ Missing system dependencies:")
101 for dep
in missing_system_deps:
106 """Show detailed information about a specific plugin."""
107 plugin_name = args.plugin_name
109 if plugin_name
not in PLUGIN_METADATA:
110 print(f
"❌ Unknown plugin: {plugin_name}")
111 print(f
"Available plugins: {', '.join(sorted(get_all_plugin_names()))}")
115 metadata = PLUGIN_METADATA[plugin_name]
117 print(f
"Plugin Information: {plugin_name}")
118 print(
"=" * (20 + len(plugin_name)))
120 print(f
"Description: {metadata.description}")
121 print(f
"GPU Required: {'Yes' if metadata.gpu_required else 'No'}")
122 print(f
"Optional: {'Yes' if metadata.optional else 'No (core plugin)'}")
123 print(f
"Supported Platforms: {', '.join(metadata.platforms)}")
125 if metadata.system_dependencies:
126 print(f
"System Dependencies: {', '.join(metadata.system_dependencies)}")
128 if metadata.plugin_dependencies:
129 print(f
"Plugin Dependencies: {', '.join(metadata.plugin_dependencies)}")
133 print(f
"\nRuntime Status:")
135 print(f
"❌ Error: {info['error']}")
137 print(f
"Available: {'✓ Yes' if info['available'] else '✗ No'}")
139 if info.get(
'validation'):
140 validation = info[
'validation']
141 print(f
"Validation: {'✓ Valid' if validation['valid'] else '✗ Invalid'}")
142 if not validation[
'valid']:
143 print(f
" Reason: {validation['reason']}")
145 if validation[
'missing_dependencies']:
146 print(f
" Missing dependencies: {', '.join(validation['missing_dependencies'])}")
210 """Main entry point for plugin command-line interface."""
211 parser = argparse.ArgumentParser(
212 description=
"PyHelios plugin status and discovery tools",
213 formatter_class=argparse.RawDescriptionHelpFormatter,
216 status Show comprehensive plugin status
217 discover Analyze system and recommend optimal configuration
218 info Show detailed information about a specific plugin
219 validate Validate a list of plugins for compatibility
222 python -m pyhelios.plugins status
223 python -m pyhelios.plugins discover
224 python -m pyhelios.plugins info radiation
225 python -m pyhelios.plugins validate --plugins radiation,visualizer
229 subparsers = parser.add_subparsers(dest=
'command', help=
'Available commands')
232 status_parser = subparsers.add_parser(
'status', help=
'Show plugin status')
233 status_parser.set_defaults(func=cmd_status)
236 discover_parser = subparsers.add_parser(
'discover', help=
'Discover optimal configuration')
237 discover_parser.set_defaults(func=cmd_discover)
240 info_parser = subparsers.add_parser(
'info', help=
'Show plugin information')
241 info_parser.add_argument(
'plugin_name', help=
'Name of the plugin')
242 info_parser.set_defaults(func=cmd_info)
245 validate_parser = subparsers.add_parser(
'validate', help=
'Validate plugin configuration')
246 validate_parser.add_argument(
'--plugins', nargs=
'*', help=
'Plugin names to validate')
247 validate_parser.set_defaults(func=cmd_validate)
250 args = parser.parse_args()
257 return args.func(args)
258 except KeyboardInterrupt:
259 print(
"\nOperation cancelled by user")
261 except Exception
as e:
262 print(f
"❌ Error: {e}")
cmd_discover(args)
Discover and recommend optimal plugin configuration.
cmd_validate(args)
Validate a list of plugins.
main()
Main entry point for plugin command-line interface.
cmd_info(args)
Show detailed information about a specific plugin.
cmd_status(args)
Show comprehensive plugin status.