diff --git a/.gitignore b/.gitignore index b7faf40..c473205 100644 --- a/.gitignore +++ b/.gitignore @@ -1,207 +1,25 @@ -# Byte-compiled / optimized / DLL files +``` +# Python cache __pycache__/ -*.py[codz] -*$py.class +*.pyc +*.pyo +*.pyd -# C extensions -*.so - -# Distribution / packaging -.Python +# Build artifacts build/ -develop-eggs/ dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -wheels/ -share/python-wheels/ *.egg-info/ -.installed.cfg -*.egg -MANIFEST - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -.nox/ -.coverage -.coverage.* -.cache -nosetests.xml -coverage.xml -*.cover -*.py.cover -.hypothesis/ -.pytest_cache/ -cover/ - -# Translations -*.mo -*.pot - -# Django stuff: -*.log -local_settings.py -db.sqlite3 -db.sqlite3-journal - -# Flask stuff: -instance/ -.webassets-cache - -# Scrapy stuff: -.scrapy - -# Sphinx documentation -docs/_build/ - -# PyBuilder -.pybuilder/ -target/ - -# Jupyter Notebook -.ipynb_checkpoints - -# IPython -profile_default/ -ipython_config.py - -# pyenv -# For a library or package, you might want to ignore these files since the code is -# intended to run in multiple environments; otherwise, check them in: -# .python-version - -# pipenv -# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. -# However, in case of collaboration, if having platform-specific dependencies or dependencies -# having no cross-platform support, pipenv may install dependencies that don't work, or not -# install all needed dependencies. -#Pipfile.lock - -# UV -# Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control. -# This is especially recommended for binary packages to ensure reproducibility, and is more -# commonly ignored for libraries. -#uv.lock - -# poetry -# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. -# This is especially recommended for binary packages to ensure reproducibility, and is more -# commonly ignored for libraries. -# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control -#poetry.lock -#poetry.toml - -# pdm -# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. -# pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python. -# https://pdm-project.org/en/latest/usage/project/#working-with-version-control -#pdm.lock -#pdm.toml -.pdm-python -.pdm-build/ - -# pixi -# Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control. -#pixi.lock -# Pixi creates a virtual environment in the .pixi directory, just like venv module creates one -# in the .venv directory. It is recommended not to include this directory in version control. -.pixi - -# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm -__pypackages__/ -# Celery stuff -celerybeat-schedule -celerybeat.pid - -# SageMath parsed files -*.sage.py - -# Environments -.env -.envrc -.venv -env/ +# Dependencies +.venv/ venv/ -ENV/ -env.bak/ -venv.bak/ - -# Spyder project settings -.spyderproject -.spyproject - -# Rope project settings -.ropeproject - -# mkdocs documentation -/site - -# mypy -.mypy_cache/ -.dmypy.json -dmypy.json - -# Pyre type checker -.pyre/ - -# pytype static type analyzer -.pytype/ - -# Cython debug symbols -cython_debug/ - -# PyCharm -# JetBrains specific template is maintained in a separate JetBrains.gitignore that can -# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore -# and can be added to the global gitignore or merged into this file. For a more nuclear -# option (not recommended) you can uncomment the following to ignore the entire idea folder. -#.idea/ - -# Abstra -# Abstra is an AI-powered process automation framework. -# Ignore directories containing user credentials, local state, and settings. -# Learn more at https://abstra.io/docs -.abstra/ - -# Visual Studio Code -# Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore -# that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore -# and can be added to the global gitignore or merged into this file. However, if you prefer, -# you could uncomment the following to ignore the entire vscode folder -# .vscode/ - -# Ruff stuff: -.ruff_cache/ - -# PyPI configuration file -.pypirc +env/ +.env -# Cursor -# Cursor is an AI-powered code editor. `.cursorignore` specifies files/directories to -# exclude from AI features like autocomplete and code analysis. Recommended for sensitive data -# refer to https://docs.cursor.com/context/ignore-files -.cursorignore -.cursorindexingignore +# Logs +*.log -# Marimo -marimo/_static/ -marimo/_lsp/ -__marimo__/ +# OS generated files +.DS_Store +Thumbs.db +``` \ No newline at end of file diff --git a/signaltools/__init__.py b/signaltools/__init__.py index 7fbd42f..f1161a9 100644 --- a/signaltools/__init__.py +++ b/signaltools/__init__.py @@ -1,6 +1,14 @@ +# ============================================================================= +# SIGNALTOOLS - Public API +# ============================================================================= +# Core signal processing and I/O from .io import read_signal_file, guess_numeric_views, write_wav, read_wav, read_audio_file, Ingestor, SignalBuffer from .framing import FrameConfig, frame_signal, normalize_signal, detrend_mean, standardize_signal from .features import frame_feature_vector, first_derivative, second_derivative +from .exceptions import SignalToolsError, SignalValidationError +from .logging_utils import configure_logging, get_logger + +# Spectral analysis and detection from .spectral import ( dft, dominant_bins, @@ -18,19 +26,9 @@ estimate_pitch, ) from .detect import threshold_events, adaptive_threshold, adaptive_events, local_peaks, anomaly_score, onset_strength -from .bridge import ( - signal_signature, - SignalSignature, - signature_to_glyph_vector, - LayeredSignalAnalysis, - analyze_signal_layered, - reconstruct_signal_from_signature, -) -from .bitlayer import analyze_bitlayer, build_bit_signature, BitSignature -from .modulate import amplitude_modulation, frequency_modulation + +# Basic filters and filter design from .filters import moving_average, median_filter, remove_dc, normalize_peak, fft_bandpass -from .fingerprint import SignalFingerprint, fingerprint_engine, cosine_similarity, euclidean_distance, compare_fingerprints -from .pipeline import AdvancedSignalAnalysis, analyze_signal_advanced from .filter_design import ( FIRCoefficients, IIRCoefficients, @@ -60,68 +58,92 @@ envelope, lms_adaptive_filter, ) -from .logging_utils import configure_logging, get_logger -from .complex_multichannel import ( - ComplexChannelResult, - analytic_signal_multichannel, - complex_channel_mix, + +# Morphological operations (1D) +from .morphology import ( + advanced_median_filter, + rank_filter, + dilation_1d, + erosion_1d, + opening_1d, + closing_1d, + morphological_gradient_1d, ) -from .complex_spectral import ( - ComplexSpectralResult, - complex_dft_multichannel, - complex_spectral_mask, - complex_spectral_shift, + +# State estimation filters +from .state_filters import ( + KalmanFilterResult, + WienerFilterResult, + kalman_filter_1d, + wiener_filter_1d, ) -from .complex_frame import ( - ComplexFrameResult, - complex_stft_multichannel, - complex_frame_operator, +from .advanced_state_filters import ( + AdaptiveWienerResult, + NonlinearFilterResult, + ParticleFilterResult, + SmootherResult, + adaptive_wiener_filter_1d, + extended_kalman_filter, + unscented_kalman_filter, + particle_filter_1d, + backward_exponential_smoother, + rts_smoother, + particle_filter_nonlinear, + particle_filter_multivariate, ) -from .complex_learnable_tf import ( - ComplexLearnableTFResult, - complex_learnable_tf_operator, - complex_learnable_tf_stack, + +# Multirate and filter banks +from .multirate import ( + polyphase_decompose, + decimate, + interpolate, + two_band_analysis_bank, ) -from .complex_multihead_tf import ( - ComplexMultiHeadTFResult, - multihead_band_complex_tf_operator, - multihead_band_complex_tf_stack, +from .filter_banks import ( + FilterBankResult, + haar_analysis_bank, + haar_synthesis_bank, + uniform_filter_bank, + reconstruct_uniform_filter_bank, ) -from .complex_attention_tf import ( - ComplexCoupledAttentionTFResult, - complex_multiband_head_coupling_operator, - complex_multiband_head_coupling_stack, - temporal_complex_head_coupling_operator, - content_conditioned_temporal_head_coupling_operator, - mode_conditioned_temporal_head_coupling_operator, - long_memory_temporal_head_coupling_operator, - stability_regularized_temporal_head_coupling_operator, - joint_temporal_spectral_regularized_coupling_operator, + +# Modulation and fingerprinting +from .modulate import amplitude_modulation, frequency_modulation +from .fingerprint import SignalFingerprint, fingerprint_engine, cosine_similarity, euclidean_distance, compare_fingerprints + +# Bridge and bitlayer analysis +from .bridge import ( + signal_signature, + SignalSignature, + signature_to_glyph_vector, + LayeredSignalAnalysis, + analyze_signal_layered, + reconstruct_signal_from_signature, ) -from .exceptions import SignalToolsError, SignalValidationError -from .forensics import ( - AuditStep, - ChainOfCustody, - ChainOfCustodyEvent, - EvidenceHashes, - EvidenceManifest, - ForensicAnalysisResult, - ForensicBundlePaths, - ForensicProfile, - FORENSIC_PROFILES, - ReportSignature, - TimestampSeal, - append_chain_of_custody_event, - create_chain_of_custody, - create_evidence_manifest, - create_timestamp_seal, - forensic_analyze_signal, - get_forensic_profile, - hash_bytes, - hash_file, - sign_report, - write_forensic_bundle, +from .bitlayer import analyze_bitlayer, build_bit_signature, BitSignature + +# Pipeline and manager +from .pipeline import AdvancedSignalAnalysis, analyze_signal_advanced + +# Graph signal processing +from .graph_filters import ( + graph_laplacian, + graph_fourier_basis, + graph_filter_signal, + graph_polynomial_filter, ) +from .graph_wavelets import ( + chebyshev_graph_filter, + graph_wavelet_kernel, + graph_wavelet_transform, +) +from .graph_positional import ( + laplacian_positional_encoding, + random_walk_positional_encoding, + augment_with_graph_positional_encoding, +) + +# Deep graph neural networks from .graph_deep_filters import ( GNNStackResult, MultiHeadAttentionResult, @@ -185,6 +207,8 @@ attentive_multiscale_hierarchical_hybrid_graph_temporal_gated_memory, attentive_multiscale_hierarchical_hybrid_graph_temporal_gated_stack, ) + +# Wavelet transforms (1D, 2D, 3D, 4D, 5D) from .wavelet_packet import ( WaveletPacketTree, available_wavelet_families, @@ -257,6 +281,8 @@ level_attentive_wavelet_packet_5d_decompose, level_attentive_wavelet_packet_5d_reconstruct, ) + +# Image processing and forensics from .image_decomposition import ( ImageLayerDecomposition, SavedLayerImages, @@ -308,204 +334,86 @@ opening_3d_kernel, closing_3d_kernel, ) -from .advanced_state_filters import ( - AdaptiveWienerResult, - NonlinearFilterResult, - ParticleFilterResult, - SmootherResult, - adaptive_wiener_filter_1d, - extended_kalman_filter, - unscented_kalman_filter, - particle_filter_1d, - backward_exponential_smoother, - rts_smoother, - particle_filter_nonlinear, - particle_filter_multivariate, -) -from .graph_wavelets import ( - chebyshev_graph_filter, - graph_wavelet_kernel, - graph_wavelet_transform, -) -from .graph_positional import ( - laplacian_positional_encoding, - random_walk_positional_encoding, - augment_with_graph_positional_encoding, -) -from .filter_banks import ( - FilterBankResult, - haar_analysis_bank, - haar_synthesis_bank, - uniform_filter_bank, - reconstruct_uniform_filter_bank, -) -from .image_decomposition import ( - ImageLayerDecomposition, - SavedLayerImages, - WaveletSubbands2D, - build_layer_alpha_masks, - decompose_image_layers, - decompose_shadows_specular, - denoise_image, - detect_reflections, - estimate_background, - estimate_illumination, - estimate_noise, - extract_foreground, - extract_texture, - mean_filter_2d, - reconstruct_from_layers, - rgb_to_gray, - save_alpha_masks, - save_decomposition_layers, - save_layer_image, - segment_ink_strokes, - simple_edges, - wavelet_subbands_2d, -) -from .image_visualization import ( - ComparisonMosaicResult, - export_comparison_mosaic, -) -from .image_forensics import ( - ForensicImageAnalysisResult, - ForensicImageBundlePaths, - forensic_decompose_image, + +# Complex-valued deep learning operators +from .complex_multichannel import ( + ComplexChannelResult, + analytic_signal_multichannel, + complex_channel_mix, ) -from .image_morphology import ( - dilation_2d, - erosion_2d, - opening_2d, - closing_2d, - median_filter_2d, - morphological_gradient_2d, +from .complex_spectral import ( + ComplexSpectralResult, + complex_dft_multichannel, + complex_spectral_mask, + complex_spectral_shift, ) -from .advanced_state_filters import ( - AdaptiveWienerResult, - NonlinearFilterResult, - ParticleFilterResult, - adaptive_wiener_filter_1d, - extended_kalman_filter, - unscented_kalman_filter, - particle_filter_1d, +from .complex_frame import ( + ComplexFrameResult, + complex_stft_multichannel, + complex_frame_operator, ) -from .multirate import ( - polyphase_decompose, - decimate, - interpolate, - two_band_analysis_bank, +from .complex_learnable_tf import ( + ComplexLearnableTFResult, + complex_learnable_tf_operator, + complex_learnable_tf_stack, ) -from .graph_filters import ( - graph_laplacian, - graph_fourier_basis, - graph_filter_signal, - graph_polynomial_filter, +from .complex_multihead_tf import ( + ComplexMultiHeadTFResult, + multihead_band_complex_tf_operator, + multihead_band_complex_tf_stack, ) -from .morphology import ( - advanced_median_filter, - rank_filter, - dilation_1d, - erosion_1d, - opening_1d, - closing_1d, - morphological_gradient_1d, +from .complex_attention_tf import ( + ComplexCoupledAttentionTFResult, + complex_multiband_head_coupling_operator, + complex_multiband_head_coupling_stack, + temporal_complex_head_coupling_operator, + content_conditioned_temporal_head_coupling_operator, + mode_conditioned_temporal_head_coupling_operator, + long_memory_temporal_head_coupling_operator, + stability_regularized_temporal_head_coupling_operator, + joint_temporal_spectral_regularized_coupling_operator, ) -from .state_filters import ( - KalmanFilterResult, - WienerFilterResult, - kalman_filter_1d, - wiener_filter_1d, + +# Forensics and audit +from .forensics import ( + AuditStep, + ChainOfCustody, + ChainOfCustodyEvent, + EvidenceHashes, + EvidenceManifest, + ForensicAnalysisResult, + ForensicBundlePaths, + ForensicProfile, + FORENSIC_PROFILES, + ReportSignature, + TimestampSeal, + append_chain_of_custody_event, + create_chain_of_custody, + create_evidence_manifest, + create_timestamp_seal, + forensic_analyze_signal, + get_forensic_profile, + hash_bytes, + hash_file, + sign_report, + write_forensic_bundle, ) __all__ = [ - "level_attentive_wavelet_packet_5d_reconstruct", - "level_attentive_wavelet_packet_5d_decompose", - "LevelAttentiveWaveletPacket5DTree", - "learnable_multiobjective_wavelet_packet_5d_reconstruct", - "learnable_multiobjective_wavelet_packet_5d_decompose", - "learnable_multiobjective_weight_search_5d", - "LearnableWeightedMultiObjectiveWaveletPacket5DTree", - "joint_temporal_spectral_regularized_coupling_operator", - "weighted_multiobjective_wavelet_packet_5d_reconstruct", - "weighted_multiobjective_wavelet_packet_5d_decompose", - "weighted_multiobjective_select_wavelet_family_per_axis_5d", - "WeightedMultiObjectiveWaveletPacket5DTree", - "cross_branch_attentive_wavelet_packet_5d_reconstruct", - "cross_branch_attentive_wavelet_packet_5d_decompose", - "CrossBranchAttentiveWaveletPacket5DTree", - "stability_regularized_temporal_head_coupling_operator", - "long_memory_temporal_head_coupling_operator", - "SubbandAttentiveWaveletPacket5DTree", - "subband_attentive_wavelet_packet_5d_reconstruct", - "subband_attentive_wavelet_packet_5d_decompose", - "RegularizedAdaptiveWaveletPacket5DTree", - "regularized_adaptive_wavelet_packet_5d_reconstruct", - "regularized_adaptive_wavelet_packet_5d_decompose", - "regularized_select_wavelet_family_per_axis_5d", - "mode_conditioned_temporal_head_coupling_operator", - "subband_adaptive_wavelet_packet_5d_reconstruct", - "subband_adaptive_wavelet_packet_5d_decompose", - "SubbandAdaptiveWaveletPacket5DTree", - "attentive_multiscale_hierarchical_hybrid_graph_temporal_gated_stack", - "attentive_multiscale_hierarchical_hybrid_graph_temporal_gated_memory", - "AttentiveMultiscaleHierarchicalGatedMemoryResult", - "content_conditioned_temporal_head_coupling_operator", - "spatially_variable_wavelet_packet_5d_reconstruct", - "spatially_variable_wavelet_packet_5d_decompose", - "SpatiallyAdaptiveWaveletPacket5DTree", - "multiscale_hierarchical_hybrid_graph_temporal_gated_stack", - "multiscale_hierarchical_hybrid_graph_temporal_gated_memory", - "MultiscaleHierarchicalGatedMemoryResult", - "temporal_complex_head_coupling_operator", - "adaptive_blockwise_wavelet_packet_5d_reconstruct", - "adaptive_blockwise_wavelet_packet_5d_decompose", - "select_wavelet_family_per_axis_5d_local_blocks", - "BlockAdaptiveWaveletPacket5DTree", - "hierarchical_hybrid_graph_temporal_gated_stack", - "hierarchical_hybrid_graph_temporal_gated_memory", - "HierarchicalGatedMemoryResult", - "complex_multiband_head_coupling_stack", - "complex_multiband_head_coupling_operator", - "ComplexCoupledAttentionTFResult", - "adaptive_wavelet_packet_5d_reconstruct", - "adaptive_wavelet_packet_5d_decompose", - "select_wavelet_family_per_axis_5d", - "AdaptiveWaveletPacket5DTree", - "bidirectional_hybrid_graph_temporal_gated_stack", - "bidirectional_hybrid_graph_temporal_gated_memory", - "BidirectionalGatedMemoryResult", - "multihead_band_complex_tf_stack", - "multihead_band_complex_tf_operator", - "ComplexMultiHeadTFResult", - "hybrid_graph_temporal_gated_stack", - "hybrid_graph_temporal_gated_memory", - "HybridGatedMemoryResult", - "complex_learnable_tf_stack", - "complex_learnable_tf_operator", - "ComplexLearnableTFResult", - "anisotropic_wavelet_packet_5d_reconstruct", - "anisotropic_wavelet_packet_5d_decompose", - "wavelet_packet_5d_reconstruct", - "wavelet_packet_5d_decompose", - "AnisotropicWaveletPacket5DTree", - "WaveletPacket5DTree", - "recurrent_hybrid_graph_temporal_transformer_stack", - "recurrent_hybrid_node_edge_temporal_attention", - "RecurrentHybridAttentionResult", - "complex_frame_operator", - "complex_stft_multichannel", - "ComplexFrameResult", + # Core I/O and framing "read_signal_file", "guess_numeric_views", "write_wav", "read_wav", "read_audio_file", "Ingestor", "SignalBuffer", "FrameConfig", "frame_signal", "normalize_signal", "detrend_mean", "standardize_signal", "frame_feature_vector", "first_derivative", "second_derivative", + + # Spectral analysis "dft", "dominant_bins", "spectral_energy", "spectral_flatness", "frequency_axis", "power_spectrum", "spectral_centroid", "spectral_bandwidth", "spectral_rolloff", "band_energy", "stft", "spectrogram_matrix", "autocorrelation", "estimate_pitch", + + # Detection "threshold_events", "adaptive_threshold", "adaptive_events", "local_peaks", "anomaly_score", "onset_strength", - "signal_signature", "SignalSignature", "signature_to_glyph_vector", "LayeredSignalAnalysis", - "analyze_signal_layered", "reconstruct_signal_from_signature", - "analyze_bitlayer", "build_bit_signature", "BitSignature", - "amplitude_modulation", "frequency_modulation", + + # Filters and filter design "moving_average", "median_filter", "remove_dc", "normalize_peak", "fft_bandpass", "FIRCoefficients", "IIRCoefficients", "AdaptiveFilterResult", "apply_fir", "apply_iir", @@ -516,28 +424,127 @@ "comb_filter_feedforward", "comb_filter_feedback", "savitzky_golay_coefficients", "savitzky_golay_filter", "hilbert_transform_fft", "analytic_signal", "envelope", "lms_adaptive_filter", - "SignalFingerprint", "fingerprint_engine", "cosine_similarity", "euclidean_distance", "compare_fingerprints", - "AdvancedSignalAnalysis", "analyze_signal_advanced", - "configure_logging", "get_logger", - "ComplexChannelResult", "analytic_signal_multichannel", "complex_channel_mix", - "ComplexSpectralResult", "complex_dft_multichannel", "complex_spectral_mask", "complex_spectral_shift", - "KalmanFilterResult", "WienerFilterResult", "kalman_filter_1d", "wiener_filter_1d", + + # Morphology (1D) "advanced_median_filter", "rank_filter", "dilation_1d", "erosion_1d", "opening_1d", "closing_1d", "morphological_gradient_1d", - "graph_laplacian", "graph_fourier_basis", "graph_filter_signal", "graph_polynomial_filter", - "polyphase_decompose", "decimate", "interpolate", "two_band_analysis_bank", + + # State estimation + "KalmanFilterResult", "WienerFilterResult", "kalman_filter_1d", "wiener_filter_1d", "AdaptiveWienerResult", "NonlinearFilterResult", "ParticleFilterResult", "SmootherResult", "adaptive_wiener_filter_1d", "extended_kalman_filter", "unscented_kalman_filter", "particle_filter_1d", "backward_exponential_smoother", "rts_smoother", "particle_filter_nonlinear", "particle_filter_multivariate", - "dilation_2d", "erosion_2d", "opening_2d", "closing_2d", "median_filter_2d", "morphological_gradient_2d", - "dilation_3d", "erosion_3d", "opening_3d", "closing_3d", "median_filter_3d", "morphological_gradient_3d", - "dilation_3d_kernel", "erosion_3d_kernel", "opening_3d_kernel", "closing_3d_kernel", + + # Multirate and filter banks + "polyphase_decompose", "decimate", "interpolate", "two_band_analysis_bank", "FilterBankResult", "haar_analysis_bank", "haar_synthesis_bank", "uniform_filter_bank", "reconstruct_uniform_filter_bank", - "WaveletPacketTree", "available_wavelet_families", "wavelet_family_kind", "wavelet_filters", "wavelet_packet_decompose", "wavelet_packet_reconstruct", - "WaveletPacket2DTree", "wavelet_packet_2d_decompose", "wavelet_packet_2d_reconstruct", - "WaveletPacket3DTree", "AnisotropicWaveletPacket3DTree", "wavelet_packet_3d_decompose", "wavelet_packet_3d_reconstruct", "anisotropic_wavelet_packet_3d_decompose", "anisotropic_wavelet_packet_3d_reconstruct", - "WaveletPacket4DTree", "AnisotropicWaveletPacket4DTree", "wavelet_packet_4d_decompose", "wavelet_packet_4d_reconstruct", "anisotropic_wavelet_packet_4d_decompose", "anisotropic_wavelet_packet_4d_reconstruct", + + # Modulation and fingerprinting + "amplitude_modulation", "frequency_modulation", + "SignalFingerprint", "fingerprint_engine", "cosine_similarity", "euclidean_distance", "compare_fingerprints", + + # Bridge and bitlayer + "signal_signature", "SignalSignature", "signature_to_glyph_vector", "LayeredSignalAnalysis", + "analyze_signal_layered", "reconstruct_signal_from_signature", + "analyze_bitlayer", "build_bit_signature", "BitSignature", + + # Pipeline + "AdvancedSignalAnalysis", "analyze_signal_advanced", + + # Graph signal processing + "graph_laplacian", "graph_fourier_basis", "graph_filter_signal", "graph_polynomial_filter", "chebyshev_graph_filter", "graph_wavelet_kernel", "graph_wavelet_transform", "laplacian_positional_encoding", "random_walk_positional_encoding", "augment_with_graph_positional_encoding", - "GNNStackResult", "MultiHeadAttentionResult", "MultiHeadNodeAttentionResult", "DeepGNNResult", "GraphTransformerResult", "EdgeConditionedConvResult", "MessagePassingResult", "QKVAttentionResult", "ChannelMixResult", "HybridTemporalAttentionResult", "graph_block_normalize", "channel_mix", "graph_block_normalize_multichannel", "edge_aware_message_passing", "edge_conditioned_convolution", "edge_conditioned_conv_stack", "edge_feature_message_passing_stack", "graph_pool", "graph_attention_matrix", "graph_attention_filter", "multihead_graph_attention", "multihead_graph_attention_multichannel", "qkv_graph_attention", "masked_qkv_graph_attention", "structured_edge_embedding_attention", "spectral_gnn_filter", "spectral_gnn_filter_multichannel", "graph_scattering_transform", "stacked_gnn", "deep_gnn_stack", "graph_transformer_layer", "graph_transformer_stack", "graph_transformer_qkv_layer", "graph_transformer_qkv_stack", "graph_transformer_masked_qkv_layer", "graph_transformer_masked_qkv_stack", "graph_transformer_enhanced_layer", "graph_transformer_enhanced_stack", "graph_transformer_edge_embedding_layer", "graph_transformer_edge_embedding_stack", "hybrid_node_edge_temporal_attention", "hybrid_graph_temporal_transformer_layer", "hybrid_graph_temporal_transformer_stack", + + # Deep graph neural networks + "GNNStackResult", "MultiHeadAttentionResult", "MultiHeadNodeAttentionResult", "DeepGNNResult", + "GraphTransformerResult", "EdgeConditionedConvResult", "MessagePassingResult", "QKVAttentionResult", + "ChannelMixResult", "HybridTemporalAttentionResult", "RecurrentHybridAttentionResult", + "HybridGatedMemoryResult", "BidirectionalGatedMemoryResult", "HierarchicalGatedMemoryResult", + "MultiscaleHierarchicalGatedMemoryResult", "AttentiveMultiscaleHierarchicalGatedMemoryResult", + "graph_block_normalize", "channel_mix", "graph_block_normalize_multichannel", + "edge_aware_message_passing", "edge_conditioned_convolution", "edge_conditioned_conv_stack", + "edge_feature_message_passing_stack", "graph_pool", "graph_attention_matrix", "graph_attention_filter", + "multihead_graph_attention", "multihead_graph_attention_multichannel", "qkv_graph_attention", + "masked_qkv_graph_attention", "structured_edge_embedding_attention", "spectral_gnn_filter", + "spectral_gnn_filter_multichannel", "graph_scattering_transform", "stacked_gnn", "deep_gnn_stack", + "graph_transformer_layer", "graph_transformer_stack", "graph_transformer_qkv_layer", + "graph_transformer_qkv_stack", "graph_transformer_masked_qkv_layer", "graph_transformer_masked_qkv_stack", + "graph_transformer_enhanced_layer", "graph_transformer_enhanced_stack", "graph_transformer_edge_embedding_layer", + "graph_transformer_edge_embedding_stack", "hybrid_node_edge_temporal_attention", + "hybrid_graph_temporal_transformer_layer", "hybrid_graph_temporal_transformer_stack", + "recurrent_hybrid_node_edge_temporal_attention", "recurrent_hybrid_graph_temporal_transformer_stack", + "hybrid_graph_temporal_gated_memory", "hybrid_graph_temporal_gated_stack", + "bidirectional_hybrid_graph_temporal_gated_memory", "bidirectional_hybrid_graph_temporal_gated_stack", + "hierarchical_hybrid_graph_temporal_gated_memory", "hierarchical_hybrid_graph_temporal_gated_stack", + "multiscale_hierarchical_hybrid_graph_temporal_gated_memory", "multiscale_hierarchical_hybrid_graph_temporal_gated_stack", + "attentive_multiscale_hierarchical_hybrid_graph_temporal_gated_memory", "attentive_multiscale_hierarchical_hybrid_graph_temporal_gated_stack", + + # Wavelet transforms (1D-5D) + "WaveletPacketTree", "available_wavelet_families", "wavelet_family_kind", "wavelet_filters", + "wavelet_packet_decompose", "wavelet_packet_reconstruct", + "WaveletPacket2DTree", "wavelet_packet_2d_decompose", "wavelet_packet_2d_reconstruct", + "WaveletPacket3DTree", "AnisotropicWaveletPacket3DTree", "wavelet_packet_3d_decompose", + "wavelet_packet_3d_reconstruct", "anisotropic_wavelet_packet_3d_decompose", "anisotropic_wavelet_packet_3d_reconstruct", + "WaveletPacket4DTree", "AnisotropicWaveletPacket4DTree", "wavelet_packet_4d_decompose", + "wavelet_packet_4d_reconstruct", "anisotropic_wavelet_packet_4d_decompose", "anisotropic_wavelet_packet_4d_reconstruct", + "WaveletPacket5DTree", "AnisotropicWaveletPacket5DTree", "AdaptiveWaveletPacket5DTree", + "BlockAdaptiveWaveletPacket5DTree", "SpatiallyAdaptiveWaveletPacket5DTree", "SubbandAdaptiveWaveletPacket5DTree", + "RegularizedAdaptiveWaveletPacket5DTree", "SubbandAttentiveWaveletPacket5DTree", "CrossBranchAttentiveWaveletPacket5DTree", + "WeightedMultiObjectiveWaveletPacket5DTree", "LearnableWeightedMultiObjectiveWaveletPacket5DTree", + "LevelAttentiveWaveletPacket5DTree", + "wavelet_packet_5d_decompose", "wavelet_packet_5d_reconstruct", + "anisotropic_wavelet_packet_5d_decompose", "anisotropic_wavelet_packet_5d_reconstruct", + "select_wavelet_family_per_axis_5d", "adaptive_wavelet_packet_5d_decompose", "adaptive_wavelet_packet_5d_reconstruct", + "select_wavelet_family_per_axis_5d_local_blocks", "adaptive_blockwise_wavelet_packet_5d_decompose", + "adaptive_blockwise_wavelet_packet_5d_reconstruct", "spatially_variable_wavelet_packet_5d_decompose", + "spatially_variable_wavelet_packet_5d_reconstruct", "subband_adaptive_wavelet_packet_5d_decompose", + "subband_adaptive_wavelet_packet_5d_reconstruct", "regularized_select_wavelet_family_per_axis_5d", + "regularized_adaptive_wavelet_packet_5d_decompose", "regularized_adaptive_wavelet_packet_5d_reconstruct", + "subband_attentive_wavelet_packet_5d_decompose", "subband_attentive_wavelet_packet_5d_reconstruct", + "cross_branch_attentive_wavelet_packet_5d_decompose", "cross_branch_attentive_wavelet_packet_5d_reconstruct", + "weighted_multiobjective_select_wavelet_family_per_axis_5d", "weighted_multiobjective_wavelet_packet_5d_decompose", + "weighted_multiobjective_wavelet_packet_5d_reconstruct", "learnable_multiobjective_weight_search_5d", + "learnable_multiobjective_wavelet_packet_5d_decompose", "learnable_multiobjective_wavelet_packet_5d_reconstruct", + "level_attentive_wavelet_packet_5d_decompose", "level_attentive_wavelet_packet_5d_reconstruct", + + # Image processing + "ImageLayerDecomposition", "SavedLayerImages", "WaveletSubbands2D", + "build_layer_alpha_masks", "decompose_image_layers", "decompose_shadows_specular", + "denoise_image", "detect_reflections", "estimate_background", "estimate_illumination", + "estimate_noise", "extract_foreground", "extract_texture", "mean_filter_2d", + "reconstruct_from_layers", "rgb_to_gray", "save_alpha_masks", "save_decomposition_layers", + "save_layer_image", "segment_ink_strokes", "simple_edges", "wavelet_subbands_2d", + + # Image visualization and forensics + "ComparisonMosaicResult", "export_comparison_mosaic", + "ForensicImageAnalysisResult", "ForensicImageBundlePaths", "forensic_decompose_image", + + # Image morphology (2D/3D) + "dilation_2d", "erosion_2d", "opening_2d", "closing_2d", "median_filter_2d", "morphological_gradient_2d", + "dilation_3d", "erosion_3d", "opening_3d", "closing_3d", "median_filter_3d", "morphological_gradient_3d", + "dilation_3d_kernel", "erosion_3d_kernel", "opening_3d_kernel", "closing_3d_kernel", + + # Complex-valued deep learning + "ComplexChannelResult", "analytic_signal_multichannel", "complex_channel_mix", + "ComplexSpectralResult", "complex_dft_multichannel", "complex_spectral_mask", "complex_spectral_shift", + "ComplexFrameResult", "complex_stft_multichannel", "complex_frame_operator", + "ComplexLearnableTFResult", "complex_learnable_tf_operator", "complex_learnable_tf_stack", + "ComplexMultiHeadTFResult", "multihead_band_complex_tf_operator", "multihead_band_complex_tf_stack", + "ComplexCoupledAttentionTFResult", "complex_multiband_head_coupling_operator", + "complex_multiband_head_coupling_stack", "temporal_complex_head_coupling_operator", + "content_conditioned_temporal_head_coupling_operator", "mode_conditioned_temporal_head_coupling_operator", + "long_memory_temporal_head_coupling_operator", "stability_regularized_temporal_head_coupling_operator", + "joint_temporal_spectral_regularized_coupling_operator", + + # Forensics and audit + "AuditStep", "ChainOfCustody", "ChainOfCustodyEvent", "EvidenceHashes", "EvidenceManifest", + "ForensicAnalysisResult", "ForensicBundlePaths", "ForensicProfile", "FORENSIC_PROFILES", + "ReportSignature", "TimestampSeal", + "append_chain_of_custody_event", "create_chain_of_custody", "create_evidence_manifest", + "create_timestamp_seal", "forensic_analyze_signal", "get_forensic_profile", "hash_bytes", + "hash_file", "sign_report", "write_forensic_bundle", + + # Utilities + "configure_logging", "get_logger", "SignalToolsError", "SignalValidationError", ] diff --git a/signaltools/__pycache__/__init__.cpython-312.pyc b/signaltools/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..773a951 Binary files /dev/null and b/signaltools/__pycache__/__init__.cpython-312.pyc differ diff --git a/signaltools/__pycache__/__main__.cpython-312.pyc b/signaltools/__pycache__/__main__.cpython-312.pyc new file mode 100644 index 0000000..05e3084 Binary files /dev/null and b/signaltools/__pycache__/__main__.cpython-312.pyc differ diff --git a/signaltools/__pycache__/advanced_state_filters.cpython-312.pyc b/signaltools/__pycache__/advanced_state_filters.cpython-312.pyc new file mode 100644 index 0000000..2f2efaa Binary files /dev/null and b/signaltools/__pycache__/advanced_state_filters.cpython-312.pyc differ diff --git a/signaltools/__pycache__/bitlayer.cpython-312.pyc b/signaltools/__pycache__/bitlayer.cpython-312.pyc new file mode 100644 index 0000000..9af6f59 Binary files /dev/null and b/signaltools/__pycache__/bitlayer.cpython-312.pyc differ diff --git a/signaltools/__pycache__/bridge.cpython-312.pyc b/signaltools/__pycache__/bridge.cpython-312.pyc new file mode 100644 index 0000000..d5d49f0 Binary files /dev/null and b/signaltools/__pycache__/bridge.cpython-312.pyc differ diff --git a/signaltools/__pycache__/complex_attention_tf.cpython-312.pyc b/signaltools/__pycache__/complex_attention_tf.cpython-312.pyc new file mode 100644 index 0000000..cd18dab Binary files /dev/null and b/signaltools/__pycache__/complex_attention_tf.cpython-312.pyc differ diff --git a/signaltools/__pycache__/complex_frame.cpython-312.pyc b/signaltools/__pycache__/complex_frame.cpython-312.pyc new file mode 100644 index 0000000..0c7dab7 Binary files /dev/null and b/signaltools/__pycache__/complex_frame.cpython-312.pyc differ diff --git a/signaltools/__pycache__/complex_learnable_tf.cpython-312.pyc b/signaltools/__pycache__/complex_learnable_tf.cpython-312.pyc new file mode 100644 index 0000000..ff1a3a0 Binary files /dev/null and b/signaltools/__pycache__/complex_learnable_tf.cpython-312.pyc differ diff --git a/signaltools/__pycache__/complex_multichannel.cpython-312.pyc b/signaltools/__pycache__/complex_multichannel.cpython-312.pyc new file mode 100644 index 0000000..eb479b5 Binary files /dev/null and b/signaltools/__pycache__/complex_multichannel.cpython-312.pyc differ diff --git a/signaltools/__pycache__/complex_multihead_tf.cpython-312.pyc b/signaltools/__pycache__/complex_multihead_tf.cpython-312.pyc new file mode 100644 index 0000000..795d0bd Binary files /dev/null and b/signaltools/__pycache__/complex_multihead_tf.cpython-312.pyc differ diff --git a/signaltools/__pycache__/complex_spectral.cpython-312.pyc b/signaltools/__pycache__/complex_spectral.cpython-312.pyc new file mode 100644 index 0000000..cd7dbf8 Binary files /dev/null and b/signaltools/__pycache__/complex_spectral.cpython-312.pyc differ diff --git a/signaltools/__pycache__/detect.cpython-312.pyc b/signaltools/__pycache__/detect.cpython-312.pyc new file mode 100644 index 0000000..c4299bf Binary files /dev/null and b/signaltools/__pycache__/detect.cpython-312.pyc differ diff --git a/signaltools/__pycache__/exceptions.cpython-312.pyc b/signaltools/__pycache__/exceptions.cpython-312.pyc new file mode 100644 index 0000000..10c16f2 Binary files /dev/null and b/signaltools/__pycache__/exceptions.cpython-312.pyc differ diff --git a/signaltools/__pycache__/features.cpython-312.pyc b/signaltools/__pycache__/features.cpython-312.pyc new file mode 100644 index 0000000..83b85ae Binary files /dev/null and b/signaltools/__pycache__/features.cpython-312.pyc differ diff --git a/signaltools/__pycache__/filter_banks.cpython-312.pyc b/signaltools/__pycache__/filter_banks.cpython-312.pyc new file mode 100644 index 0000000..c6ab50e Binary files /dev/null and b/signaltools/__pycache__/filter_banks.cpython-312.pyc differ diff --git a/signaltools/__pycache__/filter_design.cpython-312.pyc b/signaltools/__pycache__/filter_design.cpython-312.pyc new file mode 100644 index 0000000..1583e9b Binary files /dev/null and b/signaltools/__pycache__/filter_design.cpython-312.pyc differ diff --git a/signaltools/__pycache__/filters.cpython-312.pyc b/signaltools/__pycache__/filters.cpython-312.pyc new file mode 100644 index 0000000..a3cc85f Binary files /dev/null and b/signaltools/__pycache__/filters.cpython-312.pyc differ diff --git a/signaltools/__pycache__/fingerprint.cpython-312.pyc b/signaltools/__pycache__/fingerprint.cpython-312.pyc new file mode 100644 index 0000000..274ff50 Binary files /dev/null and b/signaltools/__pycache__/fingerprint.cpython-312.pyc differ diff --git a/signaltools/__pycache__/forensics.cpython-312.pyc b/signaltools/__pycache__/forensics.cpython-312.pyc new file mode 100644 index 0000000..af03093 Binary files /dev/null and b/signaltools/__pycache__/forensics.cpython-312.pyc differ diff --git a/signaltools/__pycache__/framing.cpython-312.pyc b/signaltools/__pycache__/framing.cpython-312.pyc new file mode 100644 index 0000000..fa34ba8 Binary files /dev/null and b/signaltools/__pycache__/framing.cpython-312.pyc differ diff --git a/signaltools/__pycache__/graph_deep_filters.cpython-312.pyc b/signaltools/__pycache__/graph_deep_filters.cpython-312.pyc new file mode 100644 index 0000000..f4ac0e1 Binary files /dev/null and b/signaltools/__pycache__/graph_deep_filters.cpython-312.pyc differ diff --git a/signaltools/__pycache__/graph_filters.cpython-312.pyc b/signaltools/__pycache__/graph_filters.cpython-312.pyc new file mode 100644 index 0000000..67e6347 Binary files /dev/null and b/signaltools/__pycache__/graph_filters.cpython-312.pyc differ diff --git a/signaltools/__pycache__/graph_positional.cpython-312.pyc b/signaltools/__pycache__/graph_positional.cpython-312.pyc new file mode 100644 index 0000000..4a8240d Binary files /dev/null and b/signaltools/__pycache__/graph_positional.cpython-312.pyc differ diff --git a/signaltools/__pycache__/graph_wavelets.cpython-312.pyc b/signaltools/__pycache__/graph_wavelets.cpython-312.pyc new file mode 100644 index 0000000..e3c8849 Binary files /dev/null and b/signaltools/__pycache__/graph_wavelets.cpython-312.pyc differ diff --git a/signaltools/__pycache__/image_decomposition.cpython-312.pyc b/signaltools/__pycache__/image_decomposition.cpython-312.pyc new file mode 100644 index 0000000..647b41a Binary files /dev/null and b/signaltools/__pycache__/image_decomposition.cpython-312.pyc differ diff --git a/signaltools/__pycache__/image_forensics.cpython-312.pyc b/signaltools/__pycache__/image_forensics.cpython-312.pyc new file mode 100644 index 0000000..f97e789 Binary files /dev/null and b/signaltools/__pycache__/image_forensics.cpython-312.pyc differ diff --git a/signaltools/__pycache__/image_morphology.cpython-312.pyc b/signaltools/__pycache__/image_morphology.cpython-312.pyc new file mode 100644 index 0000000..db99475 Binary files /dev/null and b/signaltools/__pycache__/image_morphology.cpython-312.pyc differ diff --git a/signaltools/__pycache__/image_visualization.cpython-312.pyc b/signaltools/__pycache__/image_visualization.cpython-312.pyc new file mode 100644 index 0000000..50606b7 Binary files /dev/null and b/signaltools/__pycache__/image_visualization.cpython-312.pyc differ diff --git a/signaltools/__pycache__/logging_utils.cpython-312.pyc b/signaltools/__pycache__/logging_utils.cpython-312.pyc new file mode 100644 index 0000000..cb050cf Binary files /dev/null and b/signaltools/__pycache__/logging_utils.cpython-312.pyc differ diff --git a/signaltools/__pycache__/manager.cpython-312.pyc b/signaltools/__pycache__/manager.cpython-312.pyc new file mode 100644 index 0000000..8a568cf Binary files /dev/null and b/signaltools/__pycache__/manager.cpython-312.pyc differ diff --git a/signaltools/__pycache__/modulate.cpython-312.pyc b/signaltools/__pycache__/modulate.cpython-312.pyc new file mode 100644 index 0000000..6e0263a Binary files /dev/null and b/signaltools/__pycache__/modulate.cpython-312.pyc differ diff --git a/signaltools/__pycache__/morphology.cpython-312.pyc b/signaltools/__pycache__/morphology.cpython-312.pyc new file mode 100644 index 0000000..df50657 Binary files /dev/null and b/signaltools/__pycache__/morphology.cpython-312.pyc differ diff --git a/signaltools/__pycache__/multirate.cpython-312.pyc b/signaltools/__pycache__/multirate.cpython-312.pyc new file mode 100644 index 0000000..26641d2 Binary files /dev/null and b/signaltools/__pycache__/multirate.cpython-312.pyc differ diff --git a/signaltools/__pycache__/pipeline.cpython-312.pyc b/signaltools/__pycache__/pipeline.cpython-312.pyc new file mode 100644 index 0000000..af873ce Binary files /dev/null and b/signaltools/__pycache__/pipeline.cpython-312.pyc differ diff --git a/signaltools/__pycache__/spectral.cpython-312.pyc b/signaltools/__pycache__/spectral.cpython-312.pyc new file mode 100644 index 0000000..87d1425 Binary files /dev/null and b/signaltools/__pycache__/spectral.cpython-312.pyc differ diff --git a/signaltools/__pycache__/state_filters.cpython-312.pyc b/signaltools/__pycache__/state_filters.cpython-312.pyc new file mode 100644 index 0000000..63b0dfa Binary files /dev/null and b/signaltools/__pycache__/state_filters.cpython-312.pyc differ diff --git a/signaltools/__pycache__/test.cpython-312.pyc b/signaltools/__pycache__/test.cpython-312.pyc new file mode 100644 index 0000000..28c3d0f Binary files /dev/null and b/signaltools/__pycache__/test.cpython-312.pyc differ diff --git a/signaltools/__pycache__/utils.cpython-312.pyc b/signaltools/__pycache__/utils.cpython-312.pyc new file mode 100644 index 0000000..0320ee3 Binary files /dev/null and b/signaltools/__pycache__/utils.cpython-312.pyc differ diff --git a/signaltools/__pycache__/wavelet_packet.cpython-312.pyc b/signaltools/__pycache__/wavelet_packet.cpython-312.pyc new file mode 100644 index 0000000..ac0cada Binary files /dev/null and b/signaltools/__pycache__/wavelet_packet.cpython-312.pyc differ diff --git a/signaltools/__pycache__/wavelet_packet_2d.cpython-312.pyc b/signaltools/__pycache__/wavelet_packet_2d.cpython-312.pyc new file mode 100644 index 0000000..2e382f0 Binary files /dev/null and b/signaltools/__pycache__/wavelet_packet_2d.cpython-312.pyc differ diff --git a/signaltools/__pycache__/wavelet_packet_3d.cpython-312.pyc b/signaltools/__pycache__/wavelet_packet_3d.cpython-312.pyc new file mode 100644 index 0000000..629e44d Binary files /dev/null and b/signaltools/__pycache__/wavelet_packet_3d.cpython-312.pyc differ diff --git a/signaltools/__pycache__/wavelet_packet_4d.cpython-312.pyc b/signaltools/__pycache__/wavelet_packet_4d.cpython-312.pyc new file mode 100644 index 0000000..3391151 Binary files /dev/null and b/signaltools/__pycache__/wavelet_packet_4d.cpython-312.pyc differ diff --git a/signaltools/__pycache__/wavelet_packet_5d.cpython-312.pyc b/signaltools/__pycache__/wavelet_packet_5d.cpython-312.pyc new file mode 100644 index 0000000..85246a7 Binary files /dev/null and b/signaltools/__pycache__/wavelet_packet_5d.cpython-312.pyc differ diff --git a/signaltools/core/__pycache__/__init__.cpython-312.pyc b/signaltools/core/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..9df5eae Binary files /dev/null and b/signaltools/core/__pycache__/__init__.cpython-312.pyc differ diff --git a/signaltools/core/__pycache__/analyzer.cpython-312.pyc b/signaltools/core/__pycache__/analyzer.cpython-312.pyc new file mode 100644 index 0000000..3d3ba0b Binary files /dev/null and b/signaltools/core/__pycache__/analyzer.cpython-312.pyc differ diff --git a/signaltools/core/__pycache__/signal.cpython-312.pyc b/signaltools/core/__pycache__/signal.cpython-312.pyc new file mode 100644 index 0000000..b2a14c5 Binary files /dev/null and b/signaltools/core/__pycache__/signal.cpython-312.pyc differ diff --git a/signaltools/io/__pycache__/__init__.cpython-312.pyc b/signaltools/io/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000..9e98043 Binary files /dev/null and b/signaltools/io/__pycache__/__init__.cpython-312.pyc differ diff --git a/signaltools/io/__pycache__/ingestor.cpython-312.pyc b/signaltools/io/__pycache__/ingestor.cpython-312.pyc new file mode 100644 index 0000000..af566a3 Binary files /dev/null and b/signaltools/io/__pycache__/ingestor.cpython-312.pyc differ diff --git a/signaltools/io/__pycache__/wav.cpython-312.pyc b/signaltools/io/__pycache__/wav.cpython-312.pyc new file mode 100644 index 0000000..42ae314 Binary files /dev/null and b/signaltools/io/__pycache__/wav.cpython-312.pyc differ