90 lines
2.4 KiB
Python
90 lines
2.4 KiB
Python
import sys
|
|
|
|
if sys.version_info[0] < 3:
|
|
raise "Must be using Python 3"
|
|
|
|
class Causal:
|
|
def __init__(self, causalcode=""):
|
|
self.causalcode = causalcode
|
|
self._description = ""
|
|
self._title = ""
|
|
self._prechac = ""
|
|
self._sequence = ""
|
|
self._fourhanded = ""
|
|
|
|
# https://docs.python.org/3/library/functions.html#property
|
|
|
|
@property
|
|
def description(self):
|
|
return self._description
|
|
|
|
@description.setter
|
|
def description(self, value):
|
|
self._description = value
|
|
|
|
@property
|
|
def title(self):
|
|
return self._title
|
|
|
|
@title.setter
|
|
def title(self, value):
|
|
self._title = value
|
|
|
|
@property
|
|
def prechac(self):
|
|
return self._prechac
|
|
|
|
@prechac.setter
|
|
def prechac(self, value):
|
|
self._prechac = value
|
|
|
|
@property
|
|
def sequence(self):
|
|
return self._sequence
|
|
|
|
@sequence.setter
|
|
def sequence(self, value):
|
|
self._sequence = value
|
|
|
|
@property
|
|
def fourhanded(self):
|
|
return self._fourhanded
|
|
|
|
@fourhanded.setter
|
|
def fourhanded(self, value):
|
|
if self.isvalid_fourhanded(value):
|
|
self._fourhanded = str(value)
|
|
else:
|
|
raise Exception("Can't parse as fourhanded siteswap")
|
|
# convert to prechac and fill prechac value
|
|
|
|
def isvalid_fourhanded(self, value):
|
|
if type(value) == int:
|
|
value = str(value)
|
|
elif type(value) == str:
|
|
if value.isdigit():
|
|
next
|
|
else:
|
|
return False
|
|
else:
|
|
return False
|
|
|
|
# inspired by https://icculus.org/jugglemaster/docs/validate.txt
|
|
lst = [1] * len(value)
|
|
for i, c in enumerate(value):
|
|
j = ( i + int(c) ) % len(value)
|
|
lst[j] = lst[j] - 1
|
|
for i in lst:
|
|
if i != 0:
|
|
return False
|
|
return True
|
|
|
|
def fourhanded_to_local(self, value):
|
|
# local notation from https://jonglieren-jena.de/ppa/anthology.pdf
|
|
# This is the local siteswap of the pattern accompanying a global siteswap. Subscripts
|
|
# indicate the starting positions of the different jugglers. So than in
|
|
# A7B65 the juggler A starts with a 7 while B starts with a 6
|
|
|
|
if not self.isvalid_fourhanded(value):
|
|
raise Exception("Can't parse as fourhanded siteswap")
|
|
return
|