"""
Full-Model Obfuscation — Make ALL model files untraceable while preserving behavior.

Obfuscates every output file:
- Weight parameters (permutation, rotation, scaling)
- Parameter names (hashed to opaque keys)
- Knowledge files (noise-injected)
- Architecture spec (randomized layer names)
- Manifest metadata (stripped provenance)
- Fingerprint (recomputed)

Usage::

    from model_osmosis.obfuscation import WeightObfuscator, ObfuscationConfig

    obfuscator = WeightObfuscator(ObfuscationConfig())
    obfuscated_model = obfuscator.obfuscate(osmo_model, sample_data=X)

Or via the pipeline::

    pipeline = OsmosisPipeline()
    result = pipeline.obfuscate(model, sample_data=X)
"""

from model_osmosis.obfuscation.obfuscator import (
    WeightObfuscator,
    ObfuscationConfig,
    obfuscate_osmo,
)
from model_osmosis.obfuscation.verification import (
    ObfuscationVerifier,
    VerificationResult,
)
from model_osmosis.obfuscation.graph import LayerGraph, TransformGroup
from model_osmosis.obfuscation.transforms import (
    permute_neurons,
    rotate_basis,
    scale_weights,
    randomize_metadata,
    obfuscate_knowledge,
    obfuscate_architecture,
    obfuscate_parameter_names,
    obfuscate_auxiliary_files,
)

__all__ = [
    "WeightObfuscator",
    "ObfuscationConfig",
    "obfuscate_osmo",
    "ObfuscationVerifier",
    "VerificationResult",
    "LayerGraph",
    "TransformGroup",
    "permute_neurons",
    "rotate_basis",
    "scale_weights",
    "randomize_metadata",
    "obfuscate_knowledge",
    "obfuscate_architecture",
    "obfuscate_parameter_names",
    "obfuscate_auxiliary_files",
]
