Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test_flatten():
assert ['ddd'] == list(flatten(['ddd']))
assert ['ddd', 1, 2, 3] == list(flatten(['ddd', 1, (2, 3)]))
assert ['ddd', 1, 2, 3] == list(flatten(['ddd', (1, (2, 3))]))
assert ['ddd', 1, 2, 3] == list(flatten(['ddd', (1, 2), 3]))
assert [None] == list(flatten(None))
assert [True] == list(flatten(True))
assert [1.0] == list(flatten(1.0))
def test_flatten():
assert ['ddd'] == list(flatten(['ddd']))
assert ['ddd', 1, 2, 3] == list(flatten(['ddd', 1, (2, 3)]))
assert ['ddd', 1, 2, 3] == list(flatten(['ddd', (1, (2, 3))]))
assert ['ddd', 1, 2, 3] == list(flatten(['ddd', (1, 2), 3]))
assert [None] == list(flatten(None))
assert [True] == list(flatten(True))
assert [1.0] == list(flatten(1.0))
def test_flatten():
assert ['ddd'] == list(flatten(['ddd']))
assert ['ddd', 1, 2, 3] == list(flatten(['ddd', 1, (2, 3)]))
assert ['ddd', 1, 2, 3] == list(flatten(['ddd', (1, (2, 3))]))
assert ['ddd', 1, 2, 3] == list(flatten(['ddd', (1, 2), 3]))
assert [None] == list(flatten(None))
assert [True] == list(flatten(True))
assert [1.0] == list(flatten(1.0))
def set_value(self, address, value, set_as_range=False):
""" Set the value of one or more cells or ranges
:param address: `str`, `AddressRange`, `AddressCell` or a tuple, list
or an iterable of these three
:param value: value to set. This can be a value or a tuple/list
which matches the shapes needed for the given address/addresses
:param set_as_range: With a single range address and a list like value,
set to true to set the entire rnage to the inserted list.
"""
if list_like(value) and not set_as_range:
value = tuple(flatten(value))
if list_like(address):
address = (AddressCell(addr) for addr in flatten(address))
else:
address = flatten(AddressRange(address).resolve_range)
address = tuple(address)
assert len(address) == len(value)
for addr, val in zip(address, value):
self.set_value(addr, val)
return
elif address not in self.cell_map:
address = AddressRange.create(address).address
assert address in self.cell_map
if set_as_range and list_like(value) and not (
value and list_like(value[0])):
def cells_to_build(self, data):
assert isinstance(data.formula, tuple)
return zip( # pragma: no branch
self, # address
flatten(v for row in data.values for v in row), # value
flatten(f for row in data.formula for f in row) # formula
)
def concatenate(*args):
# Excel reference: https://support.office.com/en-us/article/
# CONCATENATE-function-8F8AE884-2CA8-4F7A-B093-75D702BEA31D
if tuple(flatten(args)) != args:
return VALUE_ERROR
error = next((x for x in args if x in ERROR_CODES), None)
if error:
return error
return ''.join(coerce_to_string(a) for a in args)
def count(*args):
# Excel reference: https://support.office.com/en-us/article/
# COUNT-function-a59cd7fc-b623-4d93-87a4-d23bf411294c
return sum(1 for x in flatten(args)
if isinstance(x, (int, float)) and not isinstance(x, bool))
error = next((i for i in flatten(args) if i in ERROR_CODES), None)
if error:
return error
# verify array sizes match
sizes = set()
for arg in args:
assert isinstance(arg, tuple), isinstance(arg[0], tuple)
sizes.add((len(arg), len(arg[0])))
if len(sizes) != 1:
return VALUE_ERROR
# put the values into numpy vectors
values = np.array(tuple(tuple(
x if isinstance(x, (float, int)) and not isinstance(x, bool) else 0
for x in flatten(arg)) for arg in args))
# return the sum product
return np.sum(np.prod(values, axis=0))
""" Set the value of one or more cells or ranges
:param address: `str`, `AddressRange`, `AddressCell` or a tuple, list
or an iterable of these three
:param value: value to set. This can be a value or a tuple/list
which matches the shapes needed for the given address/addresses
:param set_as_range: With a single range address and a list like value,
set to true to set the entire rnage to the inserted list.
"""
if list_like(value) and not set_as_range:
value = tuple(flatten(value))
if list_like(address):
address = (AddressCell(addr) for addr in flatten(address))
else:
address = flatten(AddressRange(address).resolve_range)
address = tuple(address)
assert len(address) == len(value)
for addr, val in zip(address, value):
self.set_value(addr, val)
return
elif address not in self.cell_map:
address = AddressRange.create(address).address
assert address in self.cell_map
if set_as_range and list_like(value) and not (
value and list_like(value[0])):
value = (value, )
cell_or_range = self.cell_map[address]
def _base2dec(value, base):
value = list(flatten(value))
if len(value) != 1 or isinstance(value[0], bool):
return VALUE_ERROR
value = value[0]
if value in ERROR_CODES:
return value
if value in (None, EMPTY):
value = '0'
elif isinstance(value, (int, float)) and value >= 0:
if int(value) == value:
value = str(int(value))
if isinstance(value, str) and len(value) <= 10:
try:
value, mask = int(value, base), _SIZE_MASK[base]