Examples

📖 Usage Examples

Example 1: Basic Stockinette

from knitout_interpreter.knitout_language.Knitout_Parser import parse_knitout

knitout_code = """
;!knitout-2
;;Machine: SWG091N2
;;Gauge: 15
;;Yarn-5: 50-50 Rust
;;Carriers: 1 2 3 4 5 6 7 8 9 10
;;Position: Right
inhook 1;
tuck + f1 1;
tuck + f2 1;
tuck + f3 1;
tuck + f4 1;
knit - f4 1
knit - f3 1
knit - f2 1
knit - f1 1
knit + f1 1;
knit + f2 1;
knit + f3 1;
knit + f4 1;
knit - f4 1
knit - f3 1
knit - f2 1
knit - f1 1
releasehook 1;
outhook 1;
"""

instructions = parse_knitout(knitout_code)
# Process instructions...

Example 2: Pattern Analysis

from knitout_interpreter.run_knitout import run_knitout
from knitout_interpreter.knitout_execution import Knitout_Executer

# Load complex pattern
instructions, machine, graph = run_knitout("complex_pattern.knitout")

# Analyze with executer
executer = Knitout_Executer(instructions, machine)

# Print analysis
print("=== Pattern Analysis ===")
print(f"Total instructions: {len(instructions)}")
print(f"Execution time: {executer.execution_time} passes")
print(f"Width: {executer.right_most_position - executer.left_most_position + 1} needles")

# Analyze carriage passes
for i, cp in enumerate(executer.carriage_passes):
    print(f"Pass {i+1}: {cp}")

Example 3: Working with Carriage Passes

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
)

for carriage_pass in executer.carriage_passes:
    print(f"Pass 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}")

Example 4: Error Handling

from knitout_interpreter.run_knitout import run_knitout
from virtual_knitting_machine.machine_errors.KnittingMachineError import KnittingMachineError

try:
    instructions, machine, graph = run_knitout("pattern_with_errors.k")
    print("Pattern executed successfully!")
except KnittingMachineError as e:
    print(f"Knitting error occurred: {e}")
except FileNotFoundError:
    print("Knitout file not found!")
except ValueError as e:
    print(f"Invalid knitout syntax: {e}")

Example 5: Custom Machine Configuration

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 instructions
instructions = parse_knitout("pattern.k", pattern_is_file=True)

# Create custom machine
machine = Knitting_Machine()

# Configure machine settings if needed
# machine.set_custom_settings(...)

# Execute with custom error handling
executer = Knitout_Executer(
    instructions=instructions,
    knitting_machine=machine,
    accepted_error_types=["LoopTransferError"],  # Ignore specific errors
    knitout_version=2
)

print(f"Execution completed in {executer.execution_time} passes")
print(f"Final knit graph has {executer.resulting_knit_graph.node_count} nodes")