tnfr 4.5.2__py3-none-any.whl → 8.5.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.
Potentially problematic release.
This version of tnfr might be problematic. Click here for more details.
- tnfr/__init__.py +334 -50
- tnfr/__init__.pyi +33 -0
- tnfr/_compat.py +10 -0
- tnfr/_generated_version.py +34 -0
- tnfr/_version.py +49 -0
- tnfr/_version.pyi +7 -0
- tnfr/alias.py +214 -37
- tnfr/alias.pyi +108 -0
- tnfr/backends/__init__.py +354 -0
- tnfr/backends/jax_backend.py +173 -0
- tnfr/backends/numpy_backend.py +238 -0
- tnfr/backends/optimized_numpy.py +420 -0
- tnfr/backends/torch_backend.py +408 -0
- tnfr/cache.py +149 -556
- tnfr/cache.pyi +13 -0
- tnfr/cli/__init__.py +51 -16
- tnfr/cli/__init__.pyi +26 -0
- tnfr/cli/arguments.py +344 -32
- tnfr/cli/arguments.pyi +29 -0
- tnfr/cli/execution.py +676 -50
- tnfr/cli/execution.pyi +70 -0
- tnfr/cli/interactive_validator.py +614 -0
- tnfr/cli/utils.py +18 -3
- tnfr/cli/utils.pyi +7 -0
- tnfr/cli/validate.py +236 -0
- tnfr/compat/__init__.py +85 -0
- tnfr/compat/dataclass.py +136 -0
- tnfr/compat/jsonschema_stub.py +61 -0
- tnfr/compat/matplotlib_stub.py +73 -0
- tnfr/compat/numpy_stub.py +155 -0
- tnfr/config/__init__.py +224 -0
- tnfr/config/__init__.pyi +10 -0
- tnfr/{constants_glyphs.py → config/constants.py} +26 -20
- tnfr/config/constants.pyi +12 -0
- tnfr/config/defaults.py +54 -0
- tnfr/{constants/core.py → config/defaults_core.py} +59 -6
- tnfr/config/defaults_init.py +33 -0
- tnfr/config/defaults_metric.py +104 -0
- tnfr/config/feature_flags.py +81 -0
- tnfr/config/feature_flags.pyi +16 -0
- tnfr/config/glyph_constants.py +31 -0
- tnfr/config/init.py +77 -0
- tnfr/config/init.pyi +8 -0
- tnfr/config/operator_names.py +254 -0
- tnfr/config/operator_names.pyi +36 -0
- tnfr/config/physics_derivation.py +354 -0
- tnfr/config/presets.py +83 -0
- tnfr/config/presets.pyi +7 -0
- tnfr/config/security.py +927 -0
- tnfr/config/thresholds.py +114 -0
- tnfr/config/tnfr_config.py +498 -0
- tnfr/constants/__init__.py +51 -133
- tnfr/constants/__init__.pyi +92 -0
- tnfr/constants/aliases.py +33 -0
- tnfr/constants/aliases.pyi +27 -0
- tnfr/constants/init.py +3 -1
- tnfr/constants/init.pyi +12 -0
- tnfr/constants/metric.py +9 -15
- tnfr/constants/metric.pyi +19 -0
- tnfr/core/__init__.py +33 -0
- tnfr/core/container.py +226 -0
- tnfr/core/default_implementations.py +329 -0
- tnfr/core/interfaces.py +279 -0
- tnfr/dynamics/__init__.py +213 -633
- tnfr/dynamics/__init__.pyi +83 -0
- tnfr/dynamics/adaptation.py +267 -0
- tnfr/dynamics/adaptation.pyi +7 -0
- tnfr/dynamics/adaptive_sequences.py +189 -0
- tnfr/dynamics/adaptive_sequences.pyi +14 -0
- tnfr/dynamics/aliases.py +23 -0
- tnfr/dynamics/aliases.pyi +19 -0
- tnfr/dynamics/bifurcation.py +232 -0
- tnfr/dynamics/canonical.py +229 -0
- tnfr/dynamics/canonical.pyi +48 -0
- tnfr/dynamics/coordination.py +385 -0
- tnfr/dynamics/coordination.pyi +25 -0
- tnfr/dynamics/dnfr.py +2699 -398
- tnfr/dynamics/dnfr.pyi +26 -0
- tnfr/dynamics/dynamic_limits.py +225 -0
- tnfr/dynamics/feedback.py +252 -0
- tnfr/dynamics/feedback.pyi +24 -0
- tnfr/dynamics/fused_dnfr.py +454 -0
- tnfr/dynamics/homeostasis.py +157 -0
- tnfr/dynamics/homeostasis.pyi +14 -0
- tnfr/dynamics/integrators.py +496 -102
- tnfr/dynamics/integrators.pyi +36 -0
- tnfr/dynamics/learning.py +310 -0
- tnfr/dynamics/learning.pyi +33 -0
- tnfr/dynamics/metabolism.py +254 -0
- tnfr/dynamics/nbody.py +796 -0
- tnfr/dynamics/nbody_tnfr.py +783 -0
- tnfr/dynamics/propagation.py +326 -0
- tnfr/dynamics/runtime.py +908 -0
- tnfr/dynamics/runtime.pyi +77 -0
- tnfr/dynamics/sampling.py +10 -5
- tnfr/dynamics/sampling.pyi +7 -0
- tnfr/dynamics/selectors.py +711 -0
- tnfr/dynamics/selectors.pyi +85 -0
- tnfr/dynamics/structural_clip.py +207 -0
- tnfr/errors/__init__.py +37 -0
- tnfr/errors/contextual.py +492 -0
- tnfr/execution.py +77 -55
- tnfr/execution.pyi +45 -0
- tnfr/extensions/__init__.py +205 -0
- tnfr/extensions/__init__.pyi +18 -0
- tnfr/extensions/base.py +173 -0
- tnfr/extensions/base.pyi +35 -0
- tnfr/extensions/business/__init__.py +71 -0
- tnfr/extensions/business/__init__.pyi +11 -0
- tnfr/extensions/business/cookbook.py +88 -0
- tnfr/extensions/business/cookbook.pyi +8 -0
- tnfr/extensions/business/health_analyzers.py +202 -0
- tnfr/extensions/business/health_analyzers.pyi +9 -0
- tnfr/extensions/business/patterns.py +183 -0
- tnfr/extensions/business/patterns.pyi +8 -0
- tnfr/extensions/medical/__init__.py +73 -0
- tnfr/extensions/medical/__init__.pyi +11 -0
- tnfr/extensions/medical/cookbook.py +88 -0
- tnfr/extensions/medical/cookbook.pyi +8 -0
- tnfr/extensions/medical/health_analyzers.py +181 -0
- tnfr/extensions/medical/health_analyzers.pyi +9 -0
- tnfr/extensions/medical/patterns.py +163 -0
- tnfr/extensions/medical/patterns.pyi +8 -0
- tnfr/flatten.py +29 -50
- tnfr/flatten.pyi +21 -0
- tnfr/gamma.py +66 -53
- tnfr/gamma.pyi +36 -0
- tnfr/glyph_history.py +144 -57
- tnfr/glyph_history.pyi +35 -0
- tnfr/glyph_runtime.py +19 -0
- tnfr/glyph_runtime.pyi +8 -0
- tnfr/immutable.py +70 -30
- tnfr/immutable.pyi +36 -0
- tnfr/initialization.py +22 -16
- tnfr/initialization.pyi +65 -0
- tnfr/io.py +5 -241
- tnfr/io.pyi +13 -0
- tnfr/locking.pyi +7 -0
- tnfr/mathematics/__init__.py +79 -0
- tnfr/mathematics/backend.py +453 -0
- tnfr/mathematics/backend.pyi +99 -0
- tnfr/mathematics/dynamics.py +408 -0
- tnfr/mathematics/dynamics.pyi +90 -0
- tnfr/mathematics/epi.py +391 -0
- tnfr/mathematics/epi.pyi +65 -0
- tnfr/mathematics/generators.py +242 -0
- tnfr/mathematics/generators.pyi +29 -0
- tnfr/mathematics/metrics.py +119 -0
- tnfr/mathematics/metrics.pyi +16 -0
- tnfr/mathematics/operators.py +239 -0
- tnfr/mathematics/operators.pyi +59 -0
- tnfr/mathematics/operators_factory.py +124 -0
- tnfr/mathematics/operators_factory.pyi +11 -0
- tnfr/mathematics/projection.py +87 -0
- tnfr/mathematics/projection.pyi +33 -0
- tnfr/mathematics/runtime.py +182 -0
- tnfr/mathematics/runtime.pyi +64 -0
- tnfr/mathematics/spaces.py +256 -0
- tnfr/mathematics/spaces.pyi +83 -0
- tnfr/mathematics/transforms.py +305 -0
- tnfr/mathematics/transforms.pyi +62 -0
- tnfr/metrics/__init__.py +47 -9
- tnfr/metrics/__init__.pyi +20 -0
- tnfr/metrics/buffer_cache.py +163 -0
- tnfr/metrics/buffer_cache.pyi +24 -0
- tnfr/metrics/cache_utils.py +214 -0
- tnfr/metrics/coherence.py +1510 -330
- tnfr/metrics/coherence.pyi +129 -0
- tnfr/metrics/common.py +23 -16
- tnfr/metrics/common.pyi +35 -0
- tnfr/metrics/core.py +251 -36
- tnfr/metrics/core.pyi +13 -0
- tnfr/metrics/diagnosis.py +709 -110
- tnfr/metrics/diagnosis.pyi +86 -0
- tnfr/metrics/emergence.py +245 -0
- tnfr/metrics/export.py +60 -18
- tnfr/metrics/export.pyi +7 -0
- tnfr/metrics/glyph_timing.py +233 -43
- tnfr/metrics/glyph_timing.pyi +81 -0
- tnfr/metrics/learning_metrics.py +280 -0
- tnfr/metrics/learning_metrics.pyi +21 -0
- tnfr/metrics/phase_coherence.py +351 -0
- tnfr/metrics/phase_compatibility.py +349 -0
- tnfr/metrics/reporting.py +63 -28
- tnfr/metrics/reporting.pyi +25 -0
- tnfr/metrics/sense_index.py +1126 -43
- tnfr/metrics/sense_index.pyi +9 -0
- tnfr/metrics/trig.py +215 -23
- tnfr/metrics/trig.pyi +13 -0
- tnfr/metrics/trig_cache.py +148 -24
- tnfr/metrics/trig_cache.pyi +10 -0
- tnfr/multiscale/__init__.py +32 -0
- tnfr/multiscale/hierarchical.py +517 -0
- tnfr/node.py +646 -140
- tnfr/node.pyi +139 -0
- tnfr/observers.py +160 -45
- tnfr/observers.pyi +31 -0
- tnfr/ontosim.py +23 -19
- tnfr/ontosim.pyi +28 -0
- tnfr/operators/__init__.py +1358 -106
- tnfr/operators/__init__.pyi +31 -0
- tnfr/operators/algebra.py +277 -0
- tnfr/operators/canonical_patterns.py +420 -0
- tnfr/operators/cascade.py +267 -0
- tnfr/operators/cycle_detection.py +358 -0
- tnfr/operators/definitions.py +4108 -0
- tnfr/operators/definitions.pyi +78 -0
- tnfr/operators/grammar.py +1164 -0
- tnfr/operators/grammar.pyi +140 -0
- tnfr/operators/hamiltonian.py +710 -0
- tnfr/operators/health_analyzer.py +809 -0
- tnfr/operators/jitter.py +107 -38
- tnfr/operators/jitter.pyi +11 -0
- tnfr/operators/lifecycle.py +314 -0
- tnfr/operators/metabolism.py +618 -0
- tnfr/operators/metrics.py +2138 -0
- tnfr/operators/network_analysis/__init__.py +27 -0
- tnfr/operators/network_analysis/source_detection.py +186 -0
- tnfr/operators/nodal_equation.py +395 -0
- tnfr/operators/pattern_detection.py +660 -0
- tnfr/operators/patterns.py +669 -0
- tnfr/operators/postconditions/__init__.py +38 -0
- tnfr/operators/postconditions/mutation.py +236 -0
- tnfr/operators/preconditions/__init__.py +1226 -0
- tnfr/operators/preconditions/coherence.py +305 -0
- tnfr/operators/preconditions/dissonance.py +236 -0
- tnfr/operators/preconditions/emission.py +128 -0
- tnfr/operators/preconditions/mutation.py +580 -0
- tnfr/operators/preconditions/reception.py +125 -0
- tnfr/operators/preconditions/resonance.py +364 -0
- tnfr/operators/registry.py +74 -0
- tnfr/operators/registry.pyi +9 -0
- tnfr/operators/remesh.py +1415 -91
- tnfr/operators/remesh.pyi +26 -0
- tnfr/operators/structural_units.py +268 -0
- tnfr/operators/unified_grammar.py +105 -0
- tnfr/parallel/__init__.py +54 -0
- tnfr/parallel/auto_scaler.py +234 -0
- tnfr/parallel/distributed.py +384 -0
- tnfr/parallel/engine.py +238 -0
- tnfr/parallel/gpu_engine.py +420 -0
- tnfr/parallel/monitoring.py +248 -0
- tnfr/parallel/partitioner.py +459 -0
- tnfr/py.typed +0 -0
- tnfr/recipes/__init__.py +22 -0
- tnfr/recipes/cookbook.py +743 -0
- tnfr/rng.py +75 -151
- tnfr/rng.pyi +26 -0
- tnfr/schemas/__init__.py +8 -0
- tnfr/schemas/grammar.json +94 -0
- tnfr/sdk/__init__.py +107 -0
- tnfr/sdk/__init__.pyi +19 -0
- tnfr/sdk/adaptive_system.py +173 -0
- tnfr/sdk/adaptive_system.pyi +21 -0
- tnfr/sdk/builders.py +370 -0
- tnfr/sdk/builders.pyi +51 -0
- tnfr/sdk/fluent.py +1121 -0
- tnfr/sdk/fluent.pyi +74 -0
- tnfr/sdk/templates.py +342 -0
- tnfr/sdk/templates.pyi +41 -0
- tnfr/sdk/utils.py +341 -0
- tnfr/secure_config.py +46 -0
- tnfr/security/__init__.py +70 -0
- tnfr/security/database.py +514 -0
- tnfr/security/subprocess.py +503 -0
- tnfr/security/validation.py +290 -0
- tnfr/selector.py +59 -22
- tnfr/selector.pyi +19 -0
- tnfr/sense.py +92 -67
- tnfr/sense.pyi +23 -0
- tnfr/services/__init__.py +17 -0
- tnfr/services/orchestrator.py +325 -0
- tnfr/sparse/__init__.py +39 -0
- tnfr/sparse/representations.py +492 -0
- tnfr/structural.py +639 -263
- tnfr/structural.pyi +83 -0
- tnfr/telemetry/__init__.py +35 -0
- tnfr/telemetry/cache_metrics.py +226 -0
- tnfr/telemetry/cache_metrics.pyi +64 -0
- tnfr/telemetry/nu_f.py +422 -0
- tnfr/telemetry/nu_f.pyi +108 -0
- tnfr/telemetry/verbosity.py +36 -0
- tnfr/telemetry/verbosity.pyi +15 -0
- tnfr/tokens.py +2 -4
- tnfr/tokens.pyi +36 -0
- tnfr/tools/__init__.py +20 -0
- tnfr/tools/domain_templates.py +478 -0
- tnfr/tools/sequence_generator.py +846 -0
- tnfr/topology/__init__.py +13 -0
- tnfr/topology/asymmetry.py +151 -0
- tnfr/trace.py +300 -126
- tnfr/trace.pyi +42 -0
- tnfr/tutorials/__init__.py +38 -0
- tnfr/tutorials/autonomous_evolution.py +285 -0
- tnfr/tutorials/interactive.py +1576 -0
- tnfr/tutorials/structural_metabolism.py +238 -0
- tnfr/types.py +743 -12
- tnfr/types.pyi +357 -0
- tnfr/units.py +68 -0
- tnfr/units.pyi +13 -0
- tnfr/utils/__init__.py +282 -0
- tnfr/utils/__init__.pyi +215 -0
- tnfr/utils/cache.py +4223 -0
- tnfr/utils/cache.pyi +470 -0
- tnfr/{callback_utils.py → utils/callbacks.py} +26 -39
- tnfr/utils/callbacks.pyi +49 -0
- tnfr/utils/chunks.py +108 -0
- tnfr/utils/chunks.pyi +22 -0
- tnfr/utils/data.py +428 -0
- tnfr/utils/data.pyi +74 -0
- tnfr/utils/graph.py +85 -0
- tnfr/utils/graph.pyi +10 -0
- tnfr/utils/init.py +821 -0
- tnfr/utils/init.pyi +80 -0
- tnfr/utils/io.py +559 -0
- tnfr/utils/io.pyi +66 -0
- tnfr/{helpers → utils}/numeric.py +51 -24
- tnfr/utils/numeric.pyi +21 -0
- tnfr/validation/__init__.py +257 -0
- tnfr/validation/__init__.pyi +85 -0
- tnfr/validation/compatibility.py +460 -0
- tnfr/validation/compatibility.pyi +6 -0
- tnfr/validation/config.py +73 -0
- tnfr/validation/graph.py +139 -0
- tnfr/validation/graph.pyi +18 -0
- tnfr/validation/input_validation.py +755 -0
- tnfr/validation/invariants.py +712 -0
- tnfr/validation/rules.py +253 -0
- tnfr/validation/rules.pyi +44 -0
- tnfr/validation/runtime.py +279 -0
- tnfr/validation/runtime.pyi +28 -0
- tnfr/validation/sequence_validator.py +162 -0
- tnfr/validation/soft_filters.py +170 -0
- tnfr/validation/soft_filters.pyi +32 -0
- tnfr/validation/spectral.py +164 -0
- tnfr/validation/spectral.pyi +42 -0
- tnfr/validation/validator.py +1266 -0
- tnfr/validation/window.py +39 -0
- tnfr/validation/window.pyi +1 -0
- tnfr/visualization/__init__.py +98 -0
- tnfr/visualization/cascade_viz.py +256 -0
- tnfr/visualization/hierarchy.py +284 -0
- tnfr/visualization/sequence_plotter.py +784 -0
- tnfr/viz/__init__.py +60 -0
- tnfr/viz/matplotlib.py +278 -0
- tnfr/viz/matplotlib.pyi +35 -0
- tnfr-8.5.0.dist-info/METADATA +573 -0
- tnfr-8.5.0.dist-info/RECORD +353 -0
- {tnfr-4.5.2.dist-info → tnfr-8.5.0.dist-info}/entry_points.txt +1 -0
- {tnfr-4.5.2.dist-info → tnfr-8.5.0.dist-info}/licenses/LICENSE.md +1 -1
- tnfr/collections_utils.py +0 -300
- tnfr/config.py +0 -32
- tnfr/grammar.py +0 -344
- tnfr/graph_utils.py +0 -84
- tnfr/helpers/__init__.py +0 -71
- tnfr/import_utils.py +0 -228
- tnfr/json_utils.py +0 -162
- tnfr/logging_utils.py +0 -116
- tnfr/presets.py +0 -60
- tnfr/validators.py +0 -84
- tnfr/value_utils.py +0 -59
- tnfr-4.5.2.dist-info/METADATA +0 -379
- tnfr-4.5.2.dist-info/RECORD +0 -67
- {tnfr-4.5.2.dist-info → tnfr-8.5.0.dist-info}/WHEEL +0 -0
- {tnfr-4.5.2.dist-info → tnfr-8.5.0.dist-info}/top_level.txt +0 -0
tnfr/extensions/base.pyi
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"""Type stubs for tnfr.extensions.base"""
|
|
2
|
+
|
|
3
|
+
from abc import ABC, abstractmethod
|
|
4
|
+
from dataclasses import dataclass, field
|
|
5
|
+
from typing import Any, Dict, List, Optional, Type
|
|
6
|
+
|
|
7
|
+
@dataclass
|
|
8
|
+
class PatternDefinition:
|
|
9
|
+
name: str
|
|
10
|
+
sequence: List[str]
|
|
11
|
+
description: str
|
|
12
|
+
use_cases: List[str] = ...
|
|
13
|
+
health_requirements: Dict[str, float] = ...
|
|
14
|
+
domain_context: Dict[str, Any] = ...
|
|
15
|
+
examples: List[Dict[str, Any]] = ...
|
|
16
|
+
|
|
17
|
+
@dataclass
|
|
18
|
+
class CookbookRecipe:
|
|
19
|
+
name: str
|
|
20
|
+
description: str
|
|
21
|
+
sequence: List[str]
|
|
22
|
+
parameters: Dict[str, Any] = ...
|
|
23
|
+
expected_health: Dict[str, float] = ...
|
|
24
|
+
validation: Dict[str, Any] = ...
|
|
25
|
+
|
|
26
|
+
class TNFRExtension(ABC):
|
|
27
|
+
@abstractmethod
|
|
28
|
+
def get_domain_name(self) -> str: ...
|
|
29
|
+
@abstractmethod
|
|
30
|
+
def get_pattern_definitions(self) -> Dict[str, PatternDefinition]: ...
|
|
31
|
+
@abstractmethod
|
|
32
|
+
def get_health_analyzers(self) -> Dict[str, Type]: ...
|
|
33
|
+
def get_cookbook_recipes(self) -> Dict[str, CookbookRecipe]: ...
|
|
34
|
+
def get_visualization_tools(self) -> Dict[str, Type]: ...
|
|
35
|
+
def get_metadata(self) -> Dict[str, Any]: ...
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"""Business domain extension for TNFR.
|
|
2
|
+
|
|
3
|
+
Provides patterns, health analyzers, and tools for business process optimization,
|
|
4
|
+
organizational change management, and workflow analysis using TNFR structural
|
|
5
|
+
operators.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from typing import Dict, Type
|
|
9
|
+
from ..base import TNFRExtension, PatternDefinition, CookbookRecipe
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class BusinessExtension(TNFRExtension):
|
|
13
|
+
"""Extension for business process and organizational applications.
|
|
14
|
+
|
|
15
|
+
This extension provides specialized patterns for business contexts,
|
|
16
|
+
organizational change, workflow optimization, and KPI analysis.
|
|
17
|
+
|
|
18
|
+
Examples
|
|
19
|
+
--------
|
|
20
|
+
>>> from tnfr.extensions import registry
|
|
21
|
+
>>> from tnfr.extensions.business import BusinessExtension
|
|
22
|
+
>>>
|
|
23
|
+
>>> # Register extension
|
|
24
|
+
>>> ext = BusinessExtension()
|
|
25
|
+
>>> registry.register_extension(ext)
|
|
26
|
+
>>>
|
|
27
|
+
>>> # Access patterns
|
|
28
|
+
>>> patterns = ext.get_pattern_definitions()
|
|
29
|
+
>>> print(list(patterns.keys()))
|
|
30
|
+
['change_management', 'workflow_optimization', 'team_alignment']
|
|
31
|
+
"""
|
|
32
|
+
|
|
33
|
+
def get_domain_name(self) -> str:
|
|
34
|
+
"""Return domain name identifier."""
|
|
35
|
+
return "business"
|
|
36
|
+
|
|
37
|
+
def get_pattern_definitions(self) -> Dict[str, PatternDefinition]:
|
|
38
|
+
"""Return business domain pattern definitions."""
|
|
39
|
+
from .patterns import PATTERNS
|
|
40
|
+
|
|
41
|
+
return PATTERNS
|
|
42
|
+
|
|
43
|
+
def get_health_analyzers(self) -> Dict[str, Type]:
|
|
44
|
+
"""Return business domain health analyzers."""
|
|
45
|
+
from .health_analyzers import ProcessHealthAnalyzer
|
|
46
|
+
|
|
47
|
+
return {
|
|
48
|
+
"process": ProcessHealthAnalyzer,
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
def get_cookbook_recipes(self) -> Dict[str, CookbookRecipe]:
|
|
52
|
+
"""Return validated recipes for common business scenarios."""
|
|
53
|
+
from .cookbook import RECIPES
|
|
54
|
+
|
|
55
|
+
return RECIPES
|
|
56
|
+
|
|
57
|
+
def get_metadata(self) -> Dict[str, object]:
|
|
58
|
+
"""Return extension metadata."""
|
|
59
|
+
return {
|
|
60
|
+
"domain": "business",
|
|
61
|
+
"version": "1.0.0",
|
|
62
|
+
"description": "Business process and organizational domain extension",
|
|
63
|
+
"author": "TNFR Community",
|
|
64
|
+
"patterns_count": len(self.get_pattern_definitions()),
|
|
65
|
+
"use_cases": [
|
|
66
|
+
"Organizational change management",
|
|
67
|
+
"Workflow optimization",
|
|
68
|
+
"Team alignment and collaboration",
|
|
69
|
+
"Process improvement",
|
|
70
|
+
],
|
|
71
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"""Type stubs for tnfr.extensions.business"""
|
|
2
|
+
|
|
3
|
+
from typing import Dict, Type
|
|
4
|
+
from ..base import TNFRExtension, PatternDefinition, CookbookRecipe
|
|
5
|
+
|
|
6
|
+
class BusinessExtension(TNFRExtension):
|
|
7
|
+
def get_domain_name(self) -> str: ...
|
|
8
|
+
def get_pattern_definitions(self) -> Dict[str, PatternDefinition]: ...
|
|
9
|
+
def get_health_analyzers(self) -> Dict[str, Type]: ...
|
|
10
|
+
def get_cookbook_recipes(self) -> Dict[str, CookbookRecipe]: ...
|
|
11
|
+
def get_metadata(self) -> Dict[str, object]: ...
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"""Cookbook recipes for common business scenarios."""
|
|
2
|
+
|
|
3
|
+
from ..base import CookbookRecipe
|
|
4
|
+
|
|
5
|
+
# Change Initiative Recipe
|
|
6
|
+
CHANGE_INITIATIVE = CookbookRecipe(
|
|
7
|
+
name="change_initiative",
|
|
8
|
+
description="Launching successful organizational change program",
|
|
9
|
+
sequence=["emission", "dissonance", "coupling", "self_organization", "coherence"],
|
|
10
|
+
parameters={
|
|
11
|
+
"suggested_nf": 1.0, # Hz_str - steady change pace
|
|
12
|
+
"suggested_phase": 0.0,
|
|
13
|
+
"duration_weeks": 12, # 3-month change cycle
|
|
14
|
+
},
|
|
15
|
+
expected_health={
|
|
16
|
+
"min_C_t": 0.75,
|
|
17
|
+
"min_Si": 0.70,
|
|
18
|
+
"min_change_readiness": 0.75,
|
|
19
|
+
},
|
|
20
|
+
validation={
|
|
21
|
+
"tested_cases": 15,
|
|
22
|
+
"success_rate": 0.87,
|
|
23
|
+
"notes": (
|
|
24
|
+
"Validated on digital transformation and restructuring initiatives. "
|
|
25
|
+
"Dissonance phase critical for unfreezing current state. "
|
|
26
|
+
"Success measured as adoption rate > 80% after 6 months."
|
|
27
|
+
),
|
|
28
|
+
},
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
# Process Improvement Recipe
|
|
32
|
+
PROCESS_IMPROVEMENT = CookbookRecipe(
|
|
33
|
+
name="process_improvement",
|
|
34
|
+
description="Optimizing business process for efficiency",
|
|
35
|
+
sequence=["reception", "contraction", "coupling", "resonance"],
|
|
36
|
+
parameters={
|
|
37
|
+
"suggested_nf": 1.3, # Hz_str - active improvement phase
|
|
38
|
+
"suggested_phase": 0.0,
|
|
39
|
+
"improvement_cycles": 3, # PDCA iterations
|
|
40
|
+
},
|
|
41
|
+
expected_health={
|
|
42
|
+
"min_C_t": 0.75,
|
|
43
|
+
"min_Si": 0.70,
|
|
44
|
+
"min_efficiency_potential": 0.78,
|
|
45
|
+
},
|
|
46
|
+
validation={
|
|
47
|
+
"tested_cases": 20,
|
|
48
|
+
"success_rate": 0.90,
|
|
49
|
+
"notes": (
|
|
50
|
+
"Validated on Lean Six Sigma projects. "
|
|
51
|
+
"Reception phase ensures current state understanding. "
|
|
52
|
+
"Success measured as cycle time reduction > 25%."
|
|
53
|
+
),
|
|
54
|
+
},
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
# Team Alignment Recipe
|
|
58
|
+
TEAM_ALIGNMENT_RECIPE = CookbookRecipe(
|
|
59
|
+
name="team_alignment_meeting",
|
|
60
|
+
description="Aligning team around shared objectives",
|
|
61
|
+
sequence=["emission", "reception", "coupling", "resonance", "coherence"],
|
|
62
|
+
parameters={
|
|
63
|
+
"suggested_nf": 1.5, # Hz_str - high energy alignment
|
|
64
|
+
"suggested_phase": 0.0,
|
|
65
|
+
"meeting_duration_hours": 4, # Half-day session
|
|
66
|
+
},
|
|
67
|
+
expected_health={
|
|
68
|
+
"min_C_t": 0.75,
|
|
69
|
+
"min_Si": 0.70,
|
|
70
|
+
"min_alignment_strength": 0.80,
|
|
71
|
+
},
|
|
72
|
+
validation={
|
|
73
|
+
"tested_cases": 25,
|
|
74
|
+
"success_rate": 0.92,
|
|
75
|
+
"notes": (
|
|
76
|
+
"Validated on strategic planning and kickoff meetings. "
|
|
77
|
+
"Reception phase ensures all voices heard. "
|
|
78
|
+
"Success measured using team alignment survey."
|
|
79
|
+
),
|
|
80
|
+
},
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
# Collect all recipes
|
|
84
|
+
RECIPES = {
|
|
85
|
+
"change_initiative": CHANGE_INITIATIVE,
|
|
86
|
+
"process_improvement": PROCESS_IMPROVEMENT,
|
|
87
|
+
"team_alignment_meeting": TEAM_ALIGNMENT_RECIPE,
|
|
88
|
+
}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
"""Specialized health analyzers for business domain."""
|
|
2
|
+
|
|
3
|
+
from typing import Any, Dict, List
|
|
4
|
+
import networkx as nx
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class ProcessHealthAnalyzer:
|
|
8
|
+
"""Specialized health analyzer for business process contexts.
|
|
9
|
+
|
|
10
|
+
Computes domain-specific health dimensions beyond standard coherence
|
|
11
|
+
and sense index metrics, focusing on process efficiency, organizational
|
|
12
|
+
alignment, and change readiness.
|
|
13
|
+
|
|
14
|
+
Examples
|
|
15
|
+
--------
|
|
16
|
+
>>> analyzer = ProcessHealthAnalyzer()
|
|
17
|
+
>>> G = nx.Graph()
|
|
18
|
+
>>> # ... set up network ...
|
|
19
|
+
>>> metrics = analyzer.analyze_process_health(
|
|
20
|
+
... G, ["reception", "contraction", "coupling"]
|
|
21
|
+
... )
|
|
22
|
+
>>> print(metrics["efficiency_potential"])
|
|
23
|
+
0.82
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
def analyze_process_health(
|
|
27
|
+
self, G: nx.Graph, sequence: List[str], **kwargs: Any
|
|
28
|
+
) -> Dict[str, float]:
|
|
29
|
+
"""Compute process-specific health metrics.
|
|
30
|
+
|
|
31
|
+
Parameters
|
|
32
|
+
----------
|
|
33
|
+
G : nx.Graph
|
|
34
|
+
Network graph representing business system.
|
|
35
|
+
sequence : List[str]
|
|
36
|
+
Operator sequence to analyze.
|
|
37
|
+
**kwargs : Any
|
|
38
|
+
Additional analysis parameters.
|
|
39
|
+
|
|
40
|
+
Returns
|
|
41
|
+
-------
|
|
42
|
+
Dict[str, float]
|
|
43
|
+
Domain-specific health metrics with values in [0, 1]:
|
|
44
|
+
- efficiency_potential: Capacity for process improvement
|
|
45
|
+
- change_readiness: Readiness for organizational change
|
|
46
|
+
- alignment_strength: Degree of organizational alignment
|
|
47
|
+
"""
|
|
48
|
+
metrics = {}
|
|
49
|
+
|
|
50
|
+
# Compute business dimensions
|
|
51
|
+
metrics["efficiency_potential"] = self._calculate_efficiency_potential(
|
|
52
|
+
G, sequence
|
|
53
|
+
)
|
|
54
|
+
metrics["change_readiness"] = self._calculate_change_readiness(G, sequence)
|
|
55
|
+
metrics["alignment_strength"] = self._calculate_alignment_strength(G, sequence)
|
|
56
|
+
|
|
57
|
+
return metrics
|
|
58
|
+
|
|
59
|
+
def _calculate_efficiency_potential(
|
|
60
|
+
self, G: nx.Graph, sequence: List[str]
|
|
61
|
+
) -> float:
|
|
62
|
+
"""Calculate capacity for process efficiency improvement.
|
|
63
|
+
|
|
64
|
+
Parameters
|
|
65
|
+
----------
|
|
66
|
+
G : nx.Graph
|
|
67
|
+
Network graph.
|
|
68
|
+
sequence : List[str]
|
|
69
|
+
Operator sequence.
|
|
70
|
+
|
|
71
|
+
Returns
|
|
72
|
+
-------
|
|
73
|
+
float
|
|
74
|
+
Efficiency potential score [0, 1].
|
|
75
|
+
"""
|
|
76
|
+
# Check for optimization operators
|
|
77
|
+
optimization_ops = {"contraction", "coupling", "resonance"}
|
|
78
|
+
optimization_count = sum(1 for op in sequence if op in optimization_ops)
|
|
79
|
+
|
|
80
|
+
# Check for analysis operators
|
|
81
|
+
analysis_ops = {"reception", "coherence"}
|
|
82
|
+
analysis_count = sum(1 for op in sequence if op in analysis_ops)
|
|
83
|
+
|
|
84
|
+
if len(sequence) == 0:
|
|
85
|
+
return 0.0
|
|
86
|
+
|
|
87
|
+
# Balance between analysis and optimization
|
|
88
|
+
optimization_ratio = optimization_count / len(sequence)
|
|
89
|
+
analysis_ratio = analysis_count / len(sequence)
|
|
90
|
+
|
|
91
|
+
balance_score = min(optimization_ratio + analysis_ratio, 1.0)
|
|
92
|
+
|
|
93
|
+
# Factor in network efficiency (shorter paths = more efficient)
|
|
94
|
+
if len(G.nodes()) > 1 and nx.is_connected(G):
|
|
95
|
+
avg_path_length = nx.average_shortest_path_length(G)
|
|
96
|
+
# Lower average path = higher efficiency
|
|
97
|
+
efficiency_score = 1.0 / (1.0 + avg_path_length / len(G.nodes()))
|
|
98
|
+
else:
|
|
99
|
+
efficiency_score = 0.5
|
|
100
|
+
|
|
101
|
+
# Combine factors
|
|
102
|
+
efficiency_potential = 0.6 * balance_score + 0.4 * efficiency_score
|
|
103
|
+
|
|
104
|
+
return min(efficiency_potential, 1.0)
|
|
105
|
+
|
|
106
|
+
def _calculate_change_readiness(self, G: nx.Graph, sequence: List[str]) -> float:
|
|
107
|
+
"""Calculate readiness for organizational change.
|
|
108
|
+
|
|
109
|
+
Parameters
|
|
110
|
+
----------
|
|
111
|
+
G : nx.Graph
|
|
112
|
+
Network graph.
|
|
113
|
+
sequence : List[str]
|
|
114
|
+
Operator sequence.
|
|
115
|
+
|
|
116
|
+
Returns
|
|
117
|
+
-------
|
|
118
|
+
float
|
|
119
|
+
Change readiness score [0, 1].
|
|
120
|
+
"""
|
|
121
|
+
# Check for change-enabling operators
|
|
122
|
+
change_ops = {"dissonance", "mutation", "expansion", "self_organization"}
|
|
123
|
+
change_count = sum(1 for op in sequence if op in change_ops)
|
|
124
|
+
|
|
125
|
+
# Check for stabilizing operators (needed for sustainable change)
|
|
126
|
+
stability_ops = {"coherence", "coupling"}
|
|
127
|
+
stability_count = sum(1 for op in sequence if op in stability_ops)
|
|
128
|
+
|
|
129
|
+
if len(sequence) == 0:
|
|
130
|
+
return 0.0
|
|
131
|
+
|
|
132
|
+
# Change readiness requires both disruption and stabilization
|
|
133
|
+
change_ratio = change_count / len(sequence)
|
|
134
|
+
stability_ratio = stability_count / len(sequence)
|
|
135
|
+
|
|
136
|
+
# Need balance - too much disruption is risky
|
|
137
|
+
if change_count > 0:
|
|
138
|
+
balance = min(stability_count / change_count, 1.0)
|
|
139
|
+
readiness_base = 0.5 * change_ratio + 0.5 * balance
|
|
140
|
+
else:
|
|
141
|
+
# No change operators = low readiness
|
|
142
|
+
readiness_base = 0.3
|
|
143
|
+
|
|
144
|
+
# Network connectivity aids change propagation
|
|
145
|
+
if len(G.nodes()) > 0:
|
|
146
|
+
avg_degree = sum(dict(G.degree()).values()) / len(G.nodes())
|
|
147
|
+
connectivity_factor = min(avg_degree / 4.0, 1.0)
|
|
148
|
+
else:
|
|
149
|
+
connectivity_factor = 0.0
|
|
150
|
+
|
|
151
|
+
change_readiness = 0.7 * readiness_base + 0.3 * connectivity_factor
|
|
152
|
+
|
|
153
|
+
return min(change_readiness, 1.0)
|
|
154
|
+
|
|
155
|
+
def _calculate_alignment_strength(self, G: nx.Graph, sequence: List[str]) -> float:
|
|
156
|
+
"""Calculate degree of organizational alignment.
|
|
157
|
+
|
|
158
|
+
Parameters
|
|
159
|
+
----------
|
|
160
|
+
G : nx.Graph
|
|
161
|
+
Network graph.
|
|
162
|
+
sequence : List[str]
|
|
163
|
+
Operator sequence.
|
|
164
|
+
|
|
165
|
+
Returns
|
|
166
|
+
-------
|
|
167
|
+
float
|
|
168
|
+
Alignment strength score [0, 1].
|
|
169
|
+
"""
|
|
170
|
+
# Alignment built through communication and coordination
|
|
171
|
+
alignment_ops = {"emission", "reception", "coupling", "resonance"}
|
|
172
|
+
alignment_count = sum(1 for op in sequence if op in alignment_ops)
|
|
173
|
+
|
|
174
|
+
# Coherence strengthens alignment
|
|
175
|
+
coherence_count = sequence.count("coherence")
|
|
176
|
+
|
|
177
|
+
if len(sequence) == 0:
|
|
178
|
+
return 0.0
|
|
179
|
+
|
|
180
|
+
# More alignment operators = stronger alignment
|
|
181
|
+
alignment_ratio = alignment_count / len(sequence)
|
|
182
|
+
|
|
183
|
+
# Coherence multiplier
|
|
184
|
+
coherence_bonus = min(coherence_count * 0.1, 0.3)
|
|
185
|
+
|
|
186
|
+
# Network cohesion as proxy for alignment
|
|
187
|
+
if len(G.nodes()) > 2:
|
|
188
|
+
try:
|
|
189
|
+
# Use clustering coefficient as cohesion proxy
|
|
190
|
+
avg_clustering = nx.average_clustering(G)
|
|
191
|
+
cohesion_score = avg_clustering
|
|
192
|
+
except (nx.NetworkXError, ZeroDivisionError):
|
|
193
|
+
cohesion_score = 0.5
|
|
194
|
+
else:
|
|
195
|
+
cohesion_score = 0.5
|
|
196
|
+
|
|
197
|
+
# Combine factors
|
|
198
|
+
alignment_strength = (
|
|
199
|
+
0.5 * alignment_ratio + 0.3 * cohesion_score + 0.2
|
|
200
|
+
) + coherence_bonus
|
|
201
|
+
|
|
202
|
+
return min(alignment_strength, 1.0)
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"""Type stubs for tnfr.extensions.business.health_analyzers"""
|
|
2
|
+
|
|
3
|
+
from typing import Any, Dict, List
|
|
4
|
+
import networkx as nx
|
|
5
|
+
|
|
6
|
+
class ProcessHealthAnalyzer:
|
|
7
|
+
def analyze_process_health(
|
|
8
|
+
self, G: nx.Graph, sequence: List[str], **kwargs: Any
|
|
9
|
+
) -> Dict[str, float]: ...
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
"""Business domain pattern definitions."""
|
|
2
|
+
|
|
3
|
+
from ..base import PatternDefinition
|
|
4
|
+
|
|
5
|
+
# Change Management Pattern
|
|
6
|
+
CHANGE_MANAGEMENT = PatternDefinition(
|
|
7
|
+
name="change_management",
|
|
8
|
+
sequence=["emission", "dissonance", "coupling", "self_organization", "coherence"],
|
|
9
|
+
description="Managing organizational change and transformation",
|
|
10
|
+
use_cases=[
|
|
11
|
+
"Digital transformation initiative",
|
|
12
|
+
"Restructuring and reorganization",
|
|
13
|
+
"Cultural change program",
|
|
14
|
+
],
|
|
15
|
+
health_requirements={
|
|
16
|
+
"min_coherence": 0.75,
|
|
17
|
+
"min_sense_index": 0.70,
|
|
18
|
+
},
|
|
19
|
+
domain_context={
|
|
20
|
+
"real_world_mapping": (
|
|
21
|
+
"Follows Kotter's change model: emission (create urgency), "
|
|
22
|
+
"dissonance (challenge status quo), coupling (build coalition), "
|
|
23
|
+
"self_organization (empower action), coherence (consolidate gains)"
|
|
24
|
+
),
|
|
25
|
+
"expected_outcomes": (
|
|
26
|
+
"Successful change adoption, minimal resistance, "
|
|
27
|
+
"sustainable new practices embedded in culture"
|
|
28
|
+
),
|
|
29
|
+
"failure_modes": (
|
|
30
|
+
"Skipping dissonance leads to superficial change, "
|
|
31
|
+
"insufficient coupling causes isolated pockets of change, "
|
|
32
|
+
"lack of coherence results in change reversal"
|
|
33
|
+
),
|
|
34
|
+
},
|
|
35
|
+
examples=[
|
|
36
|
+
{
|
|
37
|
+
"name": "Digital Transformation",
|
|
38
|
+
"context": "Company-wide adoption of new digital tools and processes",
|
|
39
|
+
"sequence": [
|
|
40
|
+
"emission",
|
|
41
|
+
"dissonance",
|
|
42
|
+
"coupling",
|
|
43
|
+
"self_organization",
|
|
44
|
+
"coherence",
|
|
45
|
+
],
|
|
46
|
+
"health_metrics": {"C_t": 0.81, "Si": 0.77},
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"name": "Cultural Shift",
|
|
50
|
+
"context": "Moving from hierarchical to agile culture",
|
|
51
|
+
"sequence": [
|
|
52
|
+
"emission",
|
|
53
|
+
"dissonance",
|
|
54
|
+
"coupling",
|
|
55
|
+
"self_organization",
|
|
56
|
+
"coherence",
|
|
57
|
+
],
|
|
58
|
+
"health_metrics": {"C_t": 0.79, "Si": 0.75},
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"name": "Merger Integration",
|
|
62
|
+
"context": "Integrating two organizational cultures post-merger",
|
|
63
|
+
"sequence": [
|
|
64
|
+
"emission",
|
|
65
|
+
"dissonance",
|
|
66
|
+
"coupling",
|
|
67
|
+
"self_organization",
|
|
68
|
+
"coherence",
|
|
69
|
+
],
|
|
70
|
+
"health_metrics": {"C_t": 0.83, "Si": 0.79},
|
|
71
|
+
},
|
|
72
|
+
],
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
# Workflow Optimization Pattern
|
|
76
|
+
WORKFLOW_OPTIMIZATION = PatternDefinition(
|
|
77
|
+
name="workflow_optimization",
|
|
78
|
+
sequence=["reception", "contraction", "coupling", "resonance"],
|
|
79
|
+
description="Optimizing business processes and workflows",
|
|
80
|
+
use_cases=[
|
|
81
|
+
"Process improvement initiative",
|
|
82
|
+
"Lean/Six Sigma implementation",
|
|
83
|
+
"Bottleneck elimination",
|
|
84
|
+
],
|
|
85
|
+
health_requirements={
|
|
86
|
+
"min_coherence": 0.75,
|
|
87
|
+
"min_sense_index": 0.70,
|
|
88
|
+
},
|
|
89
|
+
domain_context={
|
|
90
|
+
"real_world_mapping": (
|
|
91
|
+
"Process optimization cycle: reception (understand current state), "
|
|
92
|
+
"contraction (eliminate waste), coupling (integrate improvements), "
|
|
93
|
+
"resonance (align with organizational flow)"
|
|
94
|
+
),
|
|
95
|
+
"expected_outcomes": (
|
|
96
|
+
"Reduced cycle time, improved efficiency, "
|
|
97
|
+
"better resource utilization, sustained improvements"
|
|
98
|
+
),
|
|
99
|
+
"failure_modes": (
|
|
100
|
+
"Premature contraction without understanding creates new problems, "
|
|
101
|
+
"lack of resonance causes local optimization at expense of system"
|
|
102
|
+
),
|
|
103
|
+
},
|
|
104
|
+
examples=[
|
|
105
|
+
{
|
|
106
|
+
"name": "Supply Chain Optimization",
|
|
107
|
+
"context": "Reducing lead times and inventory costs",
|
|
108
|
+
"sequence": ["reception", "contraction", "coupling", "resonance"],
|
|
109
|
+
"health_metrics": {"C_t": 0.84, "Si": 0.80},
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"name": "Sales Process Streamlining",
|
|
113
|
+
"context": "Reducing steps from lead to close",
|
|
114
|
+
"sequence": ["reception", "contraction", "coupling", "resonance"],
|
|
115
|
+
"health_metrics": {"C_t": 0.82, "Si": 0.78},
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
"name": "Customer Service Improvement",
|
|
119
|
+
"context": "Reducing response time and improving satisfaction",
|
|
120
|
+
"sequence": ["reception", "contraction", "coupling", "resonance"],
|
|
121
|
+
"health_metrics": {"C_t": 0.86, "Si": 0.81},
|
|
122
|
+
},
|
|
123
|
+
],
|
|
124
|
+
)
|
|
125
|
+
|
|
126
|
+
# Team Alignment Pattern
|
|
127
|
+
TEAM_ALIGNMENT = PatternDefinition(
|
|
128
|
+
name="team_alignment",
|
|
129
|
+
sequence=["emission", "reception", "coupling", "resonance", "coherence"],
|
|
130
|
+
description="Aligning team members around shared goals",
|
|
131
|
+
use_cases=[
|
|
132
|
+
"New team formation",
|
|
133
|
+
"Cross-functional collaboration",
|
|
134
|
+
"Strategic alignment meeting",
|
|
135
|
+
],
|
|
136
|
+
health_requirements={
|
|
137
|
+
"min_coherence": 0.75,
|
|
138
|
+
"min_sense_index": 0.70,
|
|
139
|
+
},
|
|
140
|
+
domain_context={
|
|
141
|
+
"real_world_mapping": (
|
|
142
|
+
"Team alignment process: emission (state vision), "
|
|
143
|
+
"reception (hear perspectives), coupling (find common ground), "
|
|
144
|
+
"resonance (build momentum), coherence (commit to action)"
|
|
145
|
+
),
|
|
146
|
+
"expected_outcomes": (
|
|
147
|
+
"Shared understanding of goals, coordinated action, "
|
|
148
|
+
"mutual support, high team performance"
|
|
149
|
+
),
|
|
150
|
+
"failure_modes": (
|
|
151
|
+
"Skipping reception leads to superficial agreement, "
|
|
152
|
+
"lack of coupling causes siloed action, "
|
|
153
|
+
"missing coherence results in misalignment over time"
|
|
154
|
+
),
|
|
155
|
+
},
|
|
156
|
+
examples=[
|
|
157
|
+
{
|
|
158
|
+
"name": "Strategic Planning Session",
|
|
159
|
+
"context": "Leadership team aligning on annual strategy",
|
|
160
|
+
"sequence": ["emission", "reception", "coupling", "resonance", "coherence"],
|
|
161
|
+
"health_metrics": {"C_t": 0.85, "Si": 0.82},
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
"name": "Cross-Functional Project Kickoff",
|
|
165
|
+
"context": "Multiple departments starting shared initiative",
|
|
166
|
+
"sequence": ["emission", "reception", "coupling", "resonance", "coherence"],
|
|
167
|
+
"health_metrics": {"C_t": 0.80, "Si": 0.76},
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
"name": "Team Norming",
|
|
171
|
+
"context": "New team establishing working agreements",
|
|
172
|
+
"sequence": ["emission", "reception", "coupling", "resonance", "coherence"],
|
|
173
|
+
"health_metrics": {"C_t": 0.83, "Si": 0.79},
|
|
174
|
+
},
|
|
175
|
+
],
|
|
176
|
+
)
|
|
177
|
+
|
|
178
|
+
# Collect all patterns
|
|
179
|
+
PATTERNS = {
|
|
180
|
+
"change_management": CHANGE_MANAGEMENT,
|
|
181
|
+
"workflow_optimization": WORKFLOW_OPTIMIZATION,
|
|
182
|
+
"team_alignment": TEAM_ALIGNMENT,
|
|
183
|
+
}
|