#title: Tube Cast-On (python with knitout module)

import knitout
K = knitout.Writer('1 2 3 4 5 6');
K.addHeader('Machine', 'Kniterate');

#Parameters:
min = 1 #needle number of left edge
max = 20 #needle number of right edge
carrier = "3" #carrier name

#Bring in carrier:
K.ingripper(carrier)

#On Kniterate machines, carriers start on the left,
#so will start tucking onto needles left-to-right:
for n in range(min, max+1, 1):
	#tuck alternating needles starting at the left edge:
	if (n-min) % 2 == 0:
		K.tuck("+", 'b' + str(n), carrier)

#...continue clockwise around the tube to the front bed:
for n in range(max, min-1, -1):
	#note that adding 1+max-min preserves the alternating-needles pattern:
	if (1+max-min + max-n) % 2 == 0:
		K.tuck("-", 'f' + str(n), carrier)

#...continue clockwise around the tube to the back bed and fill in needles missed the first time:
for n in range(min, max+1, 1):
	#tuck alternating needles starting at the left edge:
	if (n-min) % 2 != 0:
		K.tuck("+", 'b' + str(n), carrier)

#...finally, fill in the rest of the front bed:
for n in range(max, min-1, -1):
	#note that adding 1+max-min preserves the alternating-needles pattern:
	if (1+max-min + max-n) % 2 != 0:
		K.tuck("-", 'f' + str(n), carrier)

#now knit one and a half rows of plain knitting to let the cast-on stitches relax (and because having the carrier on the right will be convenient for example code):
for n in range(min, max+1, 1):
	K.knit("+", 'b' + str(n), carrier)
for n in range(max, min-1, -1):
	K.knit("-", 'f' + str(n), carrier)
for n in range(min, max+1, 1):
	K.knit("+", 'b' + str(n), carrier)

#...now can knit on [min,max].

K.write('tube-cast-on.kniterate.k')
