circuitpython/py
Jeff Epler f5c637dc10
Add adafruit_pixelmap.PixelMap
.. a fast helper for animations. It is similar to and inspired by the
PixelMap helper in Adafruit LED Animation library, but with an extremely
fast 'paste' method for setting a series of pixels. This is a common
operation for many animations, and can give a substantial speed improvement.

It's named `adafruit_pixelmap` so that we can package a compatible version
in pure Python for systems that can't fit it in C in flash, or for
Blinka.

This is a proof of concept and can make a very fast comet animation:
```python
import time
import adafruit_pixelbuf
import adafruti_pixelmap
import board
import neopixel
from supervisor import ticks_ms
from adafruit_led_animation.animation.solid import Solid
from adafruit_led_animation import color

pixel_pin = board.GP0
pixel_num = 96

pixels = neopixel.NeoPixel(pixel_pin, pixel_num, brightness=1, auto_write=False, pixel_order="RGB")

evens = adafruit_pixelmap.PixelMap(pixels, tuple(range(0, pixel_num, 2)))
odd_indices = tuple((i, i+2) for i in range(1, pixel_num, 4))
print(odd_indices)
odds = adafruit_pixelbuf.PixelMap(pixels, odd_indices)
assert len(odds) == len(odd_indices)


comet_length = 16

comet1 = [color.calculate_intensity(color.GREEN, ((1+i) / comet_length) ** 2.4)
        for i in range(comet_length)]
comet2 = [color.calculate_intensity(color.PURPLE, ((1+i) / comet_length) ** 2.4)
        for i in range(comet_length)]

pos1 = 0
pos2 = 96//4

while True:
    evens.paste(comet1, pos1, wrap=True, reverse=False, others=0)
    pos1 = (pos1 + 1) % len(evens)

    odds.paste(comet2, pos2, wrap=True, reverse=True, others=0)
    pos2 = (pos2 - 1) % len(odds)
    pixels.show()

    m = ticks_ms()
    if m % 2000 > 1000:
        time.sleep(.02)
```
2022-11-11 07:54:33 -06:00
..
argcheck.c Re-use another message 2022-09-22 08:39:34 -05:00
asmarm.c Merge tag 'v1.16' 2021-06-18 10:54:19 -05:00
asmarm.h Merge tag 'v1.16' 2021-06-18 10:54:19 -05:00
asmbase.c Merge MicroPython 1.12 into CircuitPython 2021-05-03 14:01:18 -07:00
asmbase.h Merge MicroPython 1.12 into CircuitPython 2021-05-03 14:01:18 -07:00
asmthumb.c Merge tag 'v1.16' 2021-06-18 10:54:19 -05:00
asmthumb.h Merge tag 'v1.16' 2021-06-18 10:54:19 -05:00
asmx64.c py/asmx64: Support use of top 8 regs in src_r64 argument. 2021-05-20 23:43:25 +10:00
asmx64.h Merge MicroPython 1.13 into CircuitPython 2021-05-04 18:06:33 -07:00
asmx86.c Merge MicroPython 1.13 into CircuitPython 2021-05-04 18:06:33 -07:00
asmx86.h Merge MicroPython 1.13 into CircuitPython 2021-05-04 18:06:33 -07:00
asmxtensa.c Merge MicroPython 1.12 into CircuitPython 2021-05-03 14:01:18 -07:00
asmxtensa.h Merge MicroPython 1.13 into CircuitPython 2021-05-04 18:06:33 -07:00
bc0.h Merge MicroPython 1.13 into CircuitPython 2021-05-04 18:06:33 -07:00
bc.c Conditionalize LTO 2022-05-27 12:59:54 -07:00
bc.h Explicitly ignore unused variables (fixes #6158) 2022-03-15 22:33:10 -07:00
binary.c Conditionalize LTO 2022-05-27 12:59:54 -07:00
binary.h Merge MicroPython 1.12 into CircuitPython 2021-05-03 14:01:18 -07:00
builtin.h Merge tag 'v1.18' 2022-02-15 12:36:26 -06:00
builtinevex.c Conditionalize LTO 2022-05-27 12:59:54 -07:00
builtinhelp.c Conditionalize LTO 2022-05-27 12:59:54 -07:00
builtinimport.c Conditionalize LTO 2022-05-27 12:59:54 -07:00
circuitpy_defns.mk Add adafruit_pixelmap.PixelMap 2022-11-11 07:54:33 -06:00
circuitpy_mpconfig.h pico w: add ssl module 2022-10-05 13:12:43 -04:00
circuitpy_mpconfig.mk Add adafruit_pixelmap.PixelMap 2022-11-11 07:54:33 -06:00
compile.c Fix unix and pre-commit 2022-05-27 15:48:01 -07:00
compile.h Merge MicroPython 1.12 into CircuitPython 2021-05-03 14:01:18 -07:00
dynruntime.h Merge tag 'v1.18' 2022-02-15 12:36:26 -06:00
dynruntime.mk all: Remove MICROPY_OPT_CACHE_MAP_LOOKUP_IN_BYTECODE. 2021-09-16 16:04:03 +10:00
emit.h Merge MicroPython 1.12 into CircuitPython 2021-05-03 14:01:18 -07:00
emitbc.c Merge tag 'v1.18' 2022-02-15 12:36:26 -06:00
emitcommon.c Merge MicroPython 1.10 into CircuitPython 2021-04-21 15:59:17 -07:00
emitglue.c Uncomment or remove debugging changes 2022-07-08 12:53:25 -04:00
emitglue.h Merge MicroPython 1.12 into CircuitPython 2021-05-03 14:01:18 -07:00
emitinlinethumb.c Merge MicroPython 1.14 into CircuitPython 2021-05-11 15:07:40 -07:00
emitinlinextensa.c Merge MicroPython 1.14 into CircuitPython 2021-05-11 15:07:40 -07:00
emitnarm.c py/emitnative: Add support for return/break/continue in try and with. 2018-09-04 14:31:28 +10:00
emitnative.c Merge tag 'v1.18' 2022-02-15 12:36:26 -06:00
emitnthumb.c py/emitnative: Add support for return/break/continue in try and with. 2018-09-04 14:31:28 +10:00
emitnx64.c py/emitnative: Add support for return/break/continue in try and with. 2018-09-04 14:31:28 +10:00
emitnx86.c Merge MicroPython 1.12 into CircuitPython 2021-05-03 14:01:18 -07:00
emitnxtensa.c py/emitnative: Add support for return/break/continue in try and with. 2018-09-04 14:31:28 +10:00
emitnxtensawin.c Merge MicroPython 1.12 into CircuitPython 2021-05-03 14:01:18 -07:00
enum.c Conditionalize LTO 2022-05-27 12:59:54 -07:00
enum.h Initial broadcom port for Raspberry Pi 2021-11-22 14:54:44 -08:00
formatfloat.c py/formatfloat: Format all whole-number floats exactly. 2022-08-09 13:43:47 -04:00
formatfloat.h Add license to some obvious files. 2020-07-06 19:16:25 +01:00
frozenmod.c Merge tag 'v1.18' 2022-02-15 12:36:26 -06:00
frozenmod.h Merge tag 'v1.18' 2022-02-15 12:36:26 -06:00
gc_long_lived.c Initial broadcom port for Raspberry Pi 2021-11-22 14:54:44 -08:00
gc_long_lived.h Introduce a long lived section of the heap. 2018-01-24 10:33:46 -08:00
gc.c fix diagnostic when building unix port for tests 2022-06-27 09:49:00 -05:00
gc.h Add two stage reset for BLE 2022-05-12 13:20:44 -07:00
genlast.py genlast: Actually catch errors when preprocessing files 2022-02-17 08:36:29 -06:00
grammar.h Merge MicroPython 1.13 into CircuitPython 2021-05-04 18:06:33 -07:00
lexer.c Conditionalize LTO 2022-05-27 12:59:54 -07:00
lexer.h Merge tag 'v1.17' into merge-1.17 2021-10-15 08:20:54 -05:00
makecompresseddata.py py/makecompresseddata.py: Make compression deterministic. 2020-04-20 10:32:49 +10:00
makemoduledefs.py codeformat: Fix handling of ** 2021-04-30 15:30:13 -05:00
makeqstrdata.py Only check the savings if a word occurs at least twice 2022-06-02 21:25:28 +02:00
makeqstrdefs.py Merge tag 'v1.17' into merge-1.17 2021-10-15 08:20:54 -05:00
maketranslationdata.py Merge remote-tracking branch 'adafruit/main' into translate_header 2022-06-03 15:18:18 -07:00
makeversionhdr.py makeversionhdr should be unforgiving 2022-09-16 10:28:53 -05:00
malloc.c pico w: add ssl module 2022-10-05 13:12:43 -04:00
map.c Merge tag 'v1.18' 2022-02-15 12:36:26 -06:00
misc.h pico w: add ssl module 2022-10-05 13:12:43 -04:00
mkenv.mk Always use python3 2021-10-15 15:11:21 -05:00
mkrules.cmake py/mkrules.cmake: Set frozen preprocessor defs early. 2021-12-18 00:05:18 +11:00
mkrules.mk Fix unix and pre-commit 2022-05-27 15:48:01 -07:00
modarray.c Merge MicroPython v1.11 into CircuitPython 2021-04-26 15:47:41 -07:00
modbuiltins.c save about 112 bytes 2022-10-09 19:22:39 -04:00
modcmath.c Merge MicroPython 1.13 into CircuitPython 2021-05-04 18:06:33 -07:00
modcollections.c codeformat 2021-04-19 22:22:44 -07:00
modgc.c codeformat 2021-04-19 22:22:44 -07:00
modio.c Merge tag 'v1.18' 2022-02-15 12:36:26 -06:00
modmath.c Conditionalize LTO 2022-05-27 12:59:54 -07:00
modmicropython.c Conditionalize LTO 2022-05-27 12:59:54 -07:00
modstruct.c Conditionalize LTO 2022-05-27 12:59:54 -07:00
modsys.c Merge tag 'v1.18' 2022-02-15 12:36:26 -06:00
modthread.c Conditionalize LTO 2022-05-27 12:59:54 -07:00
moduerrno.c Conditionalize LTO 2022-05-27 12:59:54 -07:00
mpconfig.h Enable squeezing property storage in flash 2022-05-03 08:48:53 -05:00
mperrno.h Merge tag 'v1.17' into merge-1.17 2021-10-15 08:20:54 -05:00
mphal.h Merge MicroPython 1.14 into CircuitPython 2021-05-11 15:07:40 -07:00
mpprint.c Make %p include the 0x prefix 2021-08-29 11:36:29 -05:00
mpprint.h Merge tag 'v1.17' into merge-1.17 2021-10-15 08:20:54 -05:00
mpstate.c Add license to some obvious files. 2020-07-06 19:16:25 +01:00
mpstate.h pico w: add ssl module 2022-10-05 13:12:43 -04:00
mpthread.h Merge MicroPython 1.13 into CircuitPython 2021-05-04 18:06:33 -07:00
mpz.c Merge tag 'v1.18' 2022-02-15 12:36:26 -06:00
mpz.h Merge tag 'v1.18' 2022-02-15 12:36:26 -06:00
nativeglue.c Fix up all natmod examples 2021-05-08 20:17:16 -05:00
nativeglue.h Fix up all natmod examples 2021-05-08 20:17:16 -05:00
nlr.c codeformat 2021-04-19 22:22:44 -07:00
nlr.h Merge MicroPython v1.15 into CircuitPython 2021-05-12 17:51:42 -07:00
nlraarch64.c Merge tag 'v1.16' 2021-06-18 10:54:19 -05:00
nlrpowerpc.c Merge MicroPython 1.12 into CircuitPython 2021-05-03 14:01:18 -07:00
nlrsetjmp.c Add license to some obvious files. 2020-07-06 19:16:25 +01:00
nlrthumb.c Initial broadcom port for Raspberry Pi 2021-11-22 14:54:44 -08:00
nlrx64.c Merge tag 'v1.16' 2021-06-18 10:54:19 -05:00
nlrx86.c Merge MicroPython 1.13 into CircuitPython 2021-05-04 18:06:33 -07:00
nlrxtensa.c codeformat 2021-04-19 22:22:44 -07:00
obj.c Simplify argument checking to reduce translated strings 2022-11-07 12:37:11 -06:00
obj.h save about 112 bytes 2022-10-09 19:22:39 -04:00
objarray.c Conditionalize LTO 2022-05-27 12:59:54 -07:00
objarray.h Merge MicroPython 1.14 into CircuitPython 2021-05-11 15:07:40 -07:00
objattrtuple.c Rename EXTENDED_FIELDS -> MP_TYPE_EXTENDED_FIELDS 2021-07-12 06:57:59 -05:00
objbool.c Merge tag 'v1.17' into merge-1.17 2021-10-15 08:20:54 -05:00
objboundmeth.c Rename EXTENDED_FIELDS -> MP_TYPE_EXTENDED_FIELDS 2021-07-12 06:57:59 -05:00
objcell.c codeformat 2021-04-19 22:22:44 -07:00
objclosure.c Rename EXTENDED_FIELDS -> MP_TYPE_EXTENDED_FIELDS 2021-07-12 06:57:59 -05:00
objcomplex.c Conditionalize LTO 2022-05-27 12:59:54 -07:00
objdeque.c Conditionalize LTO 2022-05-27 12:59:54 -07:00
objdict.c Conditionalize LTO 2022-05-27 12:59:54 -07:00
objenumerate.c Merge tag 'v1.17' into merge-1.17 2021-10-15 08:20:54 -05:00
objexcept.c Don't crash when assigning attributes of the GeneratorExit const singleton 2022-10-22 11:37:34 -05:00
objexcept.h traceback: fix for crash on non-native exceptions 2021-12-15 12:29:21 +05:30
objfilter.c Merge tag 'v1.17' into merge-1.17 2021-10-15 08:20:54 -05:00
objfloat.c Conditionalize LTO 2022-05-27 12:59:54 -07:00
objfun.c Merge tag 'v1.17' into merge-1.17 2021-10-15 08:20:54 -05:00
objfun.h Merge tag 'v1.18' 2022-02-15 12:36:26 -06:00
objgenerator.c Implement scan, connect, ping 2022-09-28 10:06:33 -05:00
objgenerator.h Add license to some obvious files. 2020-07-06 19:16:25 +01:00
objgetitemiter.c Merge tag 'v1.17' into merge-1.17 2021-10-15 08:20:54 -05:00
objint_longlong.c Conditionalize LTO 2022-05-27 12:59:54 -07:00
objint_mpz.c Conditionalize LTO 2022-05-27 12:59:54 -07:00
objint.c Added non-keyword args to allowed_args 2022-07-06 07:22:45 -07:00
objint.h Merge MicroPython 1.13 into CircuitPython 2021-05-04 18:06:33 -07:00
objlist.c Conditionalize LTO 2022-05-27 12:59:54 -07:00
objlist.h Separate out mp_obj_list_insert for use in display.Group 2021-02-27 21:13:55 +01:00
objmap.c Merge tag 'v1.17' into merge-1.17 2021-10-15 08:20:54 -05:00
objmodule.c clean up py/objmodule.c for circuitpython 2022-02-24 15:33:12 -05:00
objmodule.h Merge tag 'v1.18' 2022-02-15 12:36:26 -06:00
objnamedtuple.c Conditionalize LTO 2022-05-27 12:59:54 -07:00
objnamedtuple.h Merge tag 'v1.17' into merge-1.17 2021-10-15 08:20:54 -05:00
objnone.c Rename EXTENDED_FIELDS -> MP_TYPE_EXTENDED_FIELDS 2021-07-12 06:57:59 -05:00
objobject.c Conditionalize LTO 2022-05-27 12:59:54 -07:00
objpolyiter.c Rename EXTENDED_FIELDS -> MP_TYPE_EXTENDED_FIELDS 2021-07-12 06:57:59 -05:00
objproperty.c Enable squeezing property storage in flash 2022-05-03 08:48:53 -05:00
objproperty.h Enable squeezing property storage in flash 2022-05-03 08:48:53 -05:00
objrange.c Conditionalize LTO 2022-05-27 12:59:54 -07:00
objreversed.c Merge tag 'v1.17' into merge-1.17 2021-10-15 08:20:54 -05:00
objset.c Conditionalize LTO 2022-05-27 12:59:54 -07:00
objsingleton.c Rename EXTENDED_FIELDS -> MP_TYPE_EXTENDED_FIELDS 2021-07-12 06:57:59 -05:00
objslice.c Conditionalize LTO 2022-05-27 12:59:54 -07:00
objstr.c Simplify argument checking to reduce translated strings 2022-11-07 12:37:11 -06:00
objstr.h Merge tag 'v1.17' into merge-1.17 2021-10-15 08:20:54 -05:00
objstringio.c Conditionalize LTO 2022-05-27 12:59:54 -07:00
objstringio.h Add license to some obvious files. 2020-07-06 19:16:25 +01:00
objstrunicode.c Conditionalize LTO 2022-05-27 12:59:54 -07:00
objtraceback.c objtraceback: merge with an existing message in objtype 2021-08-23 20:23:23 -05:00
objtraceback.h add traceback object 2021-08-04 12:10:57 +05:30
objtuple.c Conditionalize LTO 2022-05-27 12:59:54 -07:00
objtuple.h codeformat 2021-04-19 22:22:44 -07:00
objtype.c Simplify argument checking to reduce translated strings 2022-11-07 12:37:11 -06:00
objtype.h Merge tag 'v1.17' into merge-1.17 2021-10-15 08:20:54 -05:00
objzip.c Merge tag 'v1.17' into merge-1.17 2021-10-15 08:20:54 -05:00
opmethods.c Rename mp_type_binary_op -> mp_type_get_binary_op_slot 2021-07-12 07:03:52 -05:00
pairheap.c py/pairheap: Properly unlink node on pop and delete. 2020-03-26 01:21:04 +11:00
pairheap.h py/pairheap: Add helper function to initialise a new node. 2020-03-26 01:21:04 +11:00
parse.c Conditionalize LTO 2022-05-27 12:59:54 -07:00
parse.h Merge MicroPython 1.14 into CircuitPython 2021-05-11 15:07:40 -07:00
parsenum.c Conditionalize LTO 2022-05-27 12:59:54 -07:00
parsenum.h Add license to some obvious files. 2020-07-06 19:16:25 +01:00
parsenumbase.c codeformat 2021-04-19 22:22:44 -07:00
parsenumbase.h Add license to some obvious files. 2020-07-06 19:16:25 +01:00
persistentcode.c save about 112 bytes 2022-10-09 19:22:39 -04:00
persistentcode.h Merge tag 'v1.18' 2022-02-15 12:36:26 -06:00
profile.c Merge tag 'v1.18' 2022-02-15 12:36:26 -06:00
profile.h Merge MicroPython 1.12 into CircuitPython 2021-05-03 14:01:18 -07:00
proto.c Conditionalize LTO 2022-05-27 12:59:54 -07:00
proto.h Rename mp_type_protocol -> mp_type_get_protocol_slot 2021-07-12 07:04:04 -05:00
py.cmake add traceback object 2021-08-04 12:10:57 +05:30
py.mk Move translation .o to PY_CORE_O 2022-06-03 15:06:58 -07:00
pystack.c Merge tag 'v1.17' into merge-1.17 2021-10-15 08:20:54 -05:00
pystack.h Initial broadcom port for Raspberry Pi 2021-11-22 14:54:44 -08:00
qstr.c Conditionalize LTO 2022-05-27 12:59:54 -07:00
qstr.h Merge MicroPython 1.14 into CircuitPython 2021-05-11 15:07:40 -07:00
qstrdefs.h Merge tag 'v1.18' 2022-02-15 12:36:26 -06:00
reader.c Merge MicroPython 1.13 into CircuitPython 2021-05-04 18:06:33 -07:00
reader.h Add license to some obvious files. 2020-07-06 19:16:25 +01:00
repl.c restore a redundant NULL-comparison, it silences compiler diagnostics 2021-06-18 11:24:39 -05:00
repl.h Add license to some obvious files. 2020-07-06 19:16:25 +01:00
ringbuf.c ringbuf cleanup 2022-09-21 10:03:05 -04:00
ringbuf.h ringbuf cleanup 2022-09-21 10:03:05 -04:00
runtime0.h Merge MicroPython 1.12 into CircuitPython 2021-05-03 14:01:18 -07:00
runtime_utils.c WIP: after merge; before testing 2018-07-11 16:45:30 -04:00
runtime.c save about 112 bytes 2022-10-09 19:22:39 -04:00
runtime.h save about 112 bytes 2022-10-09 19:22:39 -04:00
scheduler.c refactor traceback handling 2021-11-10 20:23:33 +05:30
scope.c Merge MicroPython 1.14 into CircuitPython 2021-05-11 15:07:40 -07:00
scope.h Merge MicroPython 1.14 into CircuitPython 2021-05-11 15:07:40 -07:00
sequence.c Conditionalize LTO 2022-05-27 12:59:54 -07:00
showbc.c Merge tag 'v1.18' 2022-02-15 12:36:26 -06:00
smallint.c Add license to some obvious files. 2020-07-06 19:16:25 +01:00
smallint.h Merge tag 'v1.17' into merge-1.17 2021-10-15 08:20:54 -05:00
stackctrl.c codeformat 2021-04-19 22:22:44 -07:00
stackctrl.h Merge tag 'v1.16' 2021-06-18 10:54:19 -05:00
stream.c When reading data from a file into a str, check if it's utf-8 2022-08-12 08:25:27 -05:00
stream.h Move mp_get_stream non-inline 2021-05-05 11:00:35 -05:00
unicode.c Merge MicroPython 1.13 into CircuitPython 2021-05-04 18:06:33 -07:00
unicode.h Add license to some obvious files. 2020-07-06 19:16:25 +01:00
usermod.cmake rp2: Add support for USER_C_MODULES to CMake build system. 2021-03-31 00:26:01 +11:00
vm.c Conditionalize LTO 2022-05-27 12:59:54 -07:00
vmentrytable.h Merge MicroPython 1.14 into CircuitPython 2021-05-11 15:07:40 -07:00
vstr.c Merge MicroPython v1.11 into CircuitPython 2021-04-26 15:47:41 -07:00
warning.c Merge MicroPython v1.11 into CircuitPython 2021-04-26 15:47:41 -07:00