# API Parity Exclusions
# Format:
#   [section] - One of: wasm_only, python_only, ffi_only, no_ffi, no_wasm, no_python
#   Class.method = reason   (class-scoped exclusion)
#   free_function = reason  (free function exclusion)
#   *.method = reason       (wildcard class)
#   Class.prefix* = reason  (prefix match)
#
# [wasm_only]   = expected in WASM only -> suppress if missing from Python/FFI
# [python_only] = expected in Python only -> suppress if missing from WASM/FFI
# [ffi_only]    = expected in FFI only -> suppress if missing from WASM/Python
# [no_ffi]      = not expected in FFI -> suppress if missing from FFI
# [no_wasm]     = not expected in WASM -> suppress if missing from WASM
# [no_python]   = not expected in Python -> suppress if missing from Python

[ffi_only]
*.free = FFI memory management
free_* = FFI memory management
mchprs_world_* = FFI simulation world management (WASM/Python use MchprsWorld class methods)
Schematic.print = FFI debug variant (WASM/Python use print_schematic)
SchematicBuilder.build_with_error = FFI error-via-outpointer pattern (WASM/Python use exceptions)

[python_only]
*.__repr__ = Python dunder method
*.__str__ = Python dunder method
*.__bool__ = Python dunder method
*.__len__ = Python dunder method
*.__copy__ = Python dunder method
*.__deepcopy__ = Python dunder method
load_schematic = Python file I/O convenience
save_schematic = Python file I/O convenience
Schematic.test = Python debug method
Schematic.cache_info = Python debug method
Schematic.clear_cache = Python debug method
ResourcePack.from_file = Python file I/O
MeshResult.save = Python file I/O
MultiMeshResult.save_all = Python file I/O
ChunkMeshResult.save_all = Python file I/O
Value.to_py = Python interop

[wasm_only]
start = WASM panic hook init
LazyChunkIterator.* = WASM-specific lazy iteration
Schematic.blocks_indices = WASM JS optimization
Schematic.chunks_indices = WASM JS optimization
Schematic.chunks_indices_with_strategy = WASM JS optimization
Schematic.get_chunk_blocks_indices = WASM JS optimization
Schematic.get_chunk_data = WASM JS optimization
Schematic.get_optimization_info = WASM debug
Schematic.optimization_info = WASM debug
Schematic.create_lazy_chunk_iterator = WASM-specific lazy iteration
Schematic.blocks = WASM JS array return format
PaletteManager.* = WASM-specific palette helper
StateModeConstants.* = WASM-specific constants enum
SimulationOptions.* = WASM-specific simulation config
Value.to_js = WASM JS interop
Value.from_* = WASM factory methods
ResourcePack.get_stats = WASM debug
ResourcePack.stats = WASM debug
MeshResult.get_stats = WASM debug
MeshResult.stats = WASM debug
CircuitBuilder.with_options = WASM-specific (uses SimulationOptions type)
IoLayoutBuilder.add_input_region = WASM-specific (takes min/max coords directly)
IoLayoutBuilder.add_input_region_auto = WASM-specific (takes min/max coords directly)
IoLayoutBuilder.add_output_region = WASM-specific (takes min/max coords directly)
IoLayoutBuilder.add_output_region_auto = WASM-specific (takes min/max coords directly)
TypedCircuitExecutor.from_insign_with_options = WASM-specific (uses SimulationOptions)
TypedCircuitExecutor.from_layout_with_options = WASM-specific (uses SimulationOptions)
TypedCircuitExecutor.run = WASM-specific simplified execute
TypedCircuitExecutor.sync_to_schematic = WASM-specific sync API
MchprsWorld.with_options = WASM-specific (uses SimulationOptions type)
MchprsWorld.truth_table = WASM-specific truth table generation

# --- Methods not expected in WASM ---
[no_wasm]
Schematic.from_world_directory = Filesystem not available in WASM
Schematic.from_world_directory_bounded = Filesystem not available in WASM
Schematic.save_world = Filesystem not available in WASM
Schematic.from_file = Filesystem not available in WASM
Schematic.all_blocks = FFI/Python naming convention (WASM uses blocks())
# RawMeshExport: FFI short names not in WASM (WASM uses _flat suffix)
RawMeshExport.positions = FFI naming (WASM: positions_flat)
RawMeshExport.normals = FFI naming (WASM: normals_flat)
RawMeshExport.uvs = FFI naming (WASM: uvs_flat)
RawMeshExport.colors = FFI naming (WASM: colors_flat)
DefinitionRegion.set_metadata_mut = Python mutability helper (WASM uses set_metadata)
DefinitionRegion.sync = FFI sync method (WASM uses direct property access)
ResourcePack.from_bytes = Python/FFI binary I/O
MultiMeshResult.all_meshes = Python convenience method
ChunkMeshResult.all_meshes = Python convenience method
Value.bool = Python typed value factory
Value.f32 = Python typed value factory
Value.i32 = Python typed value factory
Value.u32 = Python typed value factory
Value.string = Python typed value factory

# --- Methods not expected in Python ---
[no_python]
Schematic.chunk_blocks = WASM/FFI chunk access (Python has different iteration)
# RawMeshExport: FFI short names not in Python (Python uses _flat suffix)
RawMeshExport.positions = FFI naming (Python: positions_flat)
RawMeshExport.normals = FFI naming (Python: normals_flat)
RawMeshExport.uvs = FFI naming (Python: uvs_flat)
RawMeshExport.colors = FFI naming (Python: colors_flat)
Schematic.chunks_with_strategy = WASM/FFI chunk loading strategies
ResourcePack.new = WASM constructor (Python uses from_file/from_bytes)
MchprsWorld.new = WASM constructor (Python creates via Schematic method)
Schematic.create_simulation_world_with_options = WASM-specific (uses SimulationOptions)
Schematic.create_circuit = WASM/FFI convenience (Python uses CircuitBuilder directly)
Schematic.create_circuit_builder = WASM/FFI convenience (Python uses CircuitBuilder directly)
DefinitionRegion.blocks = WASM/FFI method (returns blocks at positions)
DefinitionRegion.clone_region = WASM/FFI alias for copy

# --- Methods not expected in FFI ---
[no_ffi]
CircuitBuilder.* = Complex builder pattern requiring closures/state machines
TypedCircuitExecutor.* = Complex stateful executor with callback patterns
ExecutionMode.* = Circuit execution config, used with TypedCircuitExecutor
IoLayout.* = Circuit I/O layout, used with CircuitBuilder
IoLayoutBuilder.* = Complex builder for I/O layouts
IoType.* = Circuit I/O type definitions
LayoutFunction.* = Circuit layout mapping functions
OutputCondition.* = Circuit output condition matching
SortStrategy.* = Block sorting strategies for circuit I/O
Value.* = Circuit typed values
MchprsWorld.* = Simulation world requiring feature gate + complex state
Schematic.create_circuit = Requires circuit ecosystem
Schematic.create_circuit_builder = Requires circuit ecosystem
Schematic.build_executor = Requires circuit ecosystem
Schematic.create_simulation_world = Requires simulation feature gate
Schematic.create_simulation_world_with_options = Requires simulation feature gate

# --- Meshing ecosystem: specific exclusions ---
# RawMeshExport: Python/WASM _flat suffix not in FFI (FFI: rawmeshexport_positions etc.)
RawMeshExport.positions_flat = Python/WASM naming (FFI: positions)
RawMeshExport.normals_flat = Python/WASM naming (FFI: normals)
RawMeshExport.uvs_flat = Python/WASM naming (FFI: uvs)
RawMeshExport.colors_flat = Python/WASM naming (FFI: colors)
ResourcePack.new = WASM constructor (FFI uses from_bytes)
ResourcePack.stats = FFI exposes individual stat getters
MultiMeshResult.all_meshes = Python convenience (FFI uses get_mesh)
ChunkMeshResult.all_meshes = Python convenience (FFI uses get_mesh)
MeshExporter.* = Mesh exporter registered via FormatManager (FFI uses schematic_register_mesh_exporter)

# --- Scripting FFI entry points (feature-gated, not in WASM/Python) ---
[ffi_only]
run_lua_script = FFI scripting entry point (feature-gated scripting-lua)
run_js_script = FFI scripting entry point (feature-gated scripting-js)
run_script = FFI scripting entry point (feature-gated scripting)
Schematic.last_error = FFI error handling via thread-local (WASM/Python use exceptions)
