# Core Components

## 📚 Main Components

### Knitout Executer

The main analysis class that provides comprehensive execution simulation:

    from knitout_interpreter.knitout_execution import Knitout_Executer
    from knitout_interpreter.knitout_language.Knitout_Parser import parse_knitout
    from virtual_knitting_machine.Knitting_Machine import Knitting_Machine

    # Parse knitout file
    parsed_instructions = parse_knitout("example.k", pattern_is_file=True)

    executer = Knitout_Executer(
        instructions=parsed_instructions,
        knitting_machine=Knitting_Machine(),
        accepted_error_types=[],  # Optional: Knitting Machine Errors to ignore
        knitout_version=2
    )

Key Properties:

- `execution_time`: Number of carriage passes that will be executed

- `left_most_position` / `right_most_position`: The range of needle positions in the executed file

- `carriage_passes`: List of carriage passes in the order they are executed

- `resulting_knit_graph`: Final fabric structure

### Instruction Types

The library supports all knitout operations as Python classes:

#### Needle Operations

- `Knit_Instruction`: Create new loops, stitch through the old one

- `Tuck_Instruction`: Create new loops, keeping old ones

- `Split_Instruction`: Creates a loop on first specified needle while moving existing loops to the second specified needle

- `Drop_Instruction`: Remove loops from needles

- `Xfer_Instruction`: Transfer loops between needles

- `Miss_Instruction`: Position carriers without forming loops

- `Kick_Instruction`: Specialized miss for kickbacks

#### Carrier Operations

- `In_Instruction` / `Out_Instruction`: Move carriers in/out of knitting area

- `Inhook_Instruction` / `Outhook_Instruction`: Move carriers in/out of knitting area using yarn-inserting hook

- `Releasehook_Instruction`: Release carriers on the yarn-inserting hook

#### Machine Control

- `Rack_Instruction`: Set bed alignment and all-needle mode

- `Pause_Instruction`: Pause machine execution

#### Header Declarations

- `Machine_Header_Line`: Specify machine type

- `Gauge_Header_Line`: Set machine gauge

- `Yarn_Header_Line`: Define yarn properties

- `Carriers_Header_Line`: Configure available carriers

- `Position_Header_Line`: Set knitting position

### Carriage Pass Organization

The library automatically organizes instructions into carriage passes for efficient execution:

    # Access carriage passes from the executer
    for pass_index, carriage_pass in enumerate(executer.carriage_passes):
        print(f"Pass {pass_index + 1}:")
        print(f"  Direction: {carriage_pass.direction}")
        print(f"  Instructions: {len(carriage_pass)}")
        print(f"  Needle range: {carriage_pass.carriage_pass_range()}")
        print(f"  Carriers used: {carriage_pass.carrier_set}")

Carriage Pass Properties:

- `direction`: Left-to-right or right-to-left movement

- `carriage_pass_range()`: Needle positions covered in this pass

- `carrier_set`: Set of yarn carriers used in this pass

- `len(carriage_pass)`: Number of instructions in this pass

### Parser Components

#### Knitout Parser

The parser converts knitout text files into structured Python objects:

    from knitout_interpreter.knitout_language.Knitout_Parser import parse_knitout

    # Parse from file
    instructions = parse_knitout("pattern.k", pattern_is_file=True)

    # Parse from string
    knitout_string = """
    ;!knitout-2
    ;;Machine: SWG091N2
    knit + f1 1
    """
    instructions = parse_knitout(knitout_string, pattern_is_file=False)

Parser Features:

- Supports knitout specification v2

- Handles header declarations

- Validates instruction syntax

- Converts to structured Python objects

- Provides detailed error messages for invalid syntax

### Virtual Machine Integration

#### Integration with Virtual Knitting Machine

The library integrates seamlessly with the virtual-knitting-machine library:

    from virtual_knitting_machine.Knitting_Machine import Knitting_Machine
    from knitout_interpreter.run_knitout import run_knitout

    # The run_knitout function returns the final machine state
    instructions, final_machine, knit_graph = run_knitout("pattern.k")

    # Access machine properties
    print(f"Machine has {len(final_machine.needle_beds)} needle beds")
    print(f"Active needles: {final_machine.active_needle_count}")

Machine State Tracking:

- Loop positions and types

- Carrier positions and states

- Needle bed configurations

- Error detection and reporting