Merge branch 'main' into esp32

This commit is contained in:
Scott Shawcroft 2022-07-13 15:30:53 -07:00 committed by GitHub
commit ac460dd1e1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
62 changed files with 2217 additions and 306 deletions

View File

@ -5,6 +5,7 @@
.. module:: hashlib .. module:: hashlib
:synopsis: hashing algorithms :synopsis: hashing algorithms
:noindex:
|see_cpython_module| :mod:`cpython:hashlib`. |see_cpython_module| :mod:`cpython:hashlib`.

View File

@ -286,6 +286,44 @@ not protected by basic auth in case the device is someone elses.
Only `GET` requests are supported and will return `405 Method Not Allowed` otherwise. Only `GET` requests are supported and will return `405 Method Not Allowed` otherwise.
#### `/cp/devices.json`
Returns information about other devices found on the network using MDNS.
* `total`: Total MDNS response count. May be more than in `devices` if internal limits were hit.
* `devices`: List of discovered devices.
* `hostname`: MDNS hostname
* `instance_name`: MDNS instance name. Defaults to human readable board name.
* `port`: Port of CircuitPython Web API
* `ip`: IP address
Example:
```sh
curl -v -L http://circuitpython.local/cp/devices.json
```
```json
{
"total": 1,
"devices": [
{
"hostname": "cpy-951032",
"instance_name": "Adafruit Feather ESP32-S2 TFT",
"port": 80,
"ip": "192.168.1.235"
}
]
}
```
#### `/cp/serial/`
Serves a basic serial terminal program when a `GET` request is received without the
`Upgrade: websocket` header. Otherwise the socket is upgraded to a WebSocket. See WebSockets below for more detail.
This is an authenticated endpoint in both modes.
#### `/cp/version.json` #### `/cp/version.json`
Returns information about the device. Returns information about the device.
@ -323,36 +361,6 @@ curl -v -L http://circuitpython.local/cp/version.json
} }
``` ```
#### `/cp/devices.json`
Returns information about other devices found on the network using MDNS.
* `total`: Total MDNS response count. May be more than in `devices` if internal limits were hit.
* `devices`: List of discovered devices.
* `hostname`: MDNS hostname
* `instance_name`: MDNS instance name. Defaults to human readable board name.
* `port`: Port of CircuitPython Web API
* `ip`: IP address
Example:
```sh
curl -v -L http://circuitpython.local/cp/devices.json
```
```json
{
"total": 1,
"devices": [
{
"hostname": "cpy-951032",
"instance_name": "Adafruit Feather ESP32-S2 TFT",
"port": 80,
"ip": "192.168.1.235"
}
]
}
```
### Static files ### Static files
* `/favicon.ico` - Blinka * `/favicon.ico` - Blinka
@ -361,4 +369,12 @@ curl -v -L http://circuitpython.local/cp/devices.json
### WebSocket ### WebSocket
Coming soon! The CircuitPython serial interactions are available over a WebSocket. A WebSocket begins as a
special HTTP request that gets upgraded to a WebSocket. Authentication happens before upgrading.
WebSockets are *not* bare sockets once upgraded. Instead they have their own framing format for data.
CircuitPython can handle PING and CLOSE opcodes. All others are treated as TEXT. Data to
CircuitPython is expected to be masked UTF-8, as the spec requires. Data from CircuitPython to the
client is unmasked. It is also unbuffered so the client will get a variety of frame sizes.
Only one WebSocket at a time is supported.

@ -1 +1 @@
Subproject commit 5d01882c41dbc4115bc94f0b61c093d5a6b812b6 Subproject commit 346c936e14c6ea3a8d3d65cb1fa46202dc92999d

@ -1 +1 @@
Subproject commit d890d23f4261722338280f284cc1640e22e50e14 Subproject commit 53f15602460329f69fef95498e6b8293aebb513a

View File

@ -2383,6 +2383,10 @@ msgstr "argumen harus berupa ndarrays"
msgid "array and index length must be equal" msgid "array and index length must be equal"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "array has too many dimensions"
msgstr ""
#: py/objarray.c shared-bindings/alarm/SleepMemory.c #: py/objarray.c shared-bindings/alarm/SleepMemory.c
#: shared-bindings/nvm/ByteArray.c #: shared-bindings/nvm/ByteArray.c
msgid "array/bytes required on right side" msgid "array/bytes required on right side"
@ -2750,6 +2754,10 @@ msgstr ""
msgid "convolve arguments must not be empty" msgid "convolve arguments must not be empty"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "corrupted file"
msgstr ""
#: extmod/ulab/code/numpy/poly.c #: extmod/ulab/code/numpy/poly.c
msgid "could not invert Vandermonde matrix" msgid "could not invert Vandermonde matrix"
msgstr "" msgstr ""
@ -2841,6 +2849,10 @@ msgstr ""
msgid "empty" msgid "empty"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "empty file"
msgstr ""
#: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c #: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c
msgid "empty heap" msgid "empty heap"
msgstr "heap kosong" msgstr "heap kosong"
@ -2944,7 +2956,7 @@ msgstr ""
msgid "first argument must be a tuple of ndarrays" msgid "first argument must be a tuple of ndarrays"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/vector.c #: extmod/ulab/code/numpy/transform.c extmod/ulab/code/numpy/vector.c
msgid "first argument must be an ndarray" msgid "first argument must be an ndarray"
msgstr "" msgstr ""
@ -3092,7 +3104,7 @@ msgstr ""
msgid "incorrect padding" msgid "incorrect padding"
msgstr "lapisan (padding) tidak benar" msgstr "lapisan (padding) tidak benar"
#: extmod/ulab/code/ndarray.c #: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/transform.c
msgid "index is out of bounds" msgid "index is out of bounds"
msgstr "" msgstr ""
@ -3159,6 +3171,10 @@ msgstr ""
msgid "input matrix is singular" msgid "input matrix is singular"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/create.c
msgid "input must be 1- or 2-d"
msgstr ""
#: extmod/ulab/code/numpy/carray/carray.c #: extmod/ulab/code/numpy/carray/carray.c
msgid "input must be a 1D ndarray" msgid "input must be a 1D ndarray"
msgstr "" msgstr ""
@ -3167,11 +3183,7 @@ msgstr ""
msgid "input must be a dense ndarray" msgid "input must be a dense ndarray"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/create.c #: extmod/ulab/code/user/user.c
msgid "input must be a tensor of rank 2"
msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/user/user.c
msgid "input must be an ndarray" msgid "input must be an ndarray"
msgstr "" msgstr ""
@ -3372,7 +3384,7 @@ msgid "max_length must be 0-%d when fixed_length is %s"
msgstr "" msgstr ""
#: extmod/ulab/code/ndarray.c #: extmod/ulab/code/ndarray.c
msgid "maximum number of dimensions is 4" msgid "maximum number of dimensions is "
msgstr "" msgstr ""
#: py/runtime.c #: py/runtime.c
@ -3621,7 +3633,7 @@ msgstr "panjang data string memiliki keganjilan (odd-length)"
msgid "off" msgid "off"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/utils/utils.c #: extmod/ulab/code/utils/utils.c
msgid "offset is too large" msgid "offset is too large"
msgstr "" msgstr ""
@ -3772,6 +3784,7 @@ msgid "pow() with 3 arguments requires integers"
msgstr "" msgstr ""
#: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h #: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h
#: ports/espressif/boards/lolin_c3_mini/mpconfigboard.h
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "pressing boot button at start up.\n" msgid "pressing boot button at start up.\n"
msgstr "" msgstr ""
@ -4207,6 +4220,14 @@ msgstr ""
msgid "unsupported types for %q: '%q', '%q'" msgid "unsupported types for %q: '%q', '%q'"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols is too high"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols keyword must be specified"
msgstr ""
#: py/objint.c #: py/objint.c
#, c-format #, c-format
msgid "value must fit in %d byte(s)" msgid "value must fit in %d byte(s)"
@ -4248,7 +4269,17 @@ msgstr "indeks sumbu salah"
msgid "wrong axis specified" msgid "wrong axis specified"
msgstr "sumbu yang ditentukan salah" msgstr "sumbu yang ditentukan salah"
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c #: extmod/ulab/code/numpy/io/io.c
msgid "wrong dtype"
msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong index type"
msgstr ""
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/create.c
#: extmod/ulab/code/numpy/io/io.c extmod/ulab/code/numpy/transform.c
#: extmod/ulab/code/numpy/vector.c
msgid "wrong input type" msgid "wrong input type"
msgstr "tipe input salah" msgstr "tipe input salah"
@ -4256,6 +4287,10 @@ msgstr "tipe input salah"
msgid "wrong length of condition array" msgid "wrong length of condition array"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong length of index array"
msgstr ""
#: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c #: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c
msgid "wrong number of arguments" msgid "wrong number of arguments"
msgstr "jumlah argumen salah" msgstr "jumlah argumen salah"

View File

@ -2199,6 +2199,10 @@ msgstr ""
msgid "Unsupported format" msgid "Unsupported format"
msgstr "" msgstr ""
#: shared-bindings/hashlib/__init__.c
msgid "Unsupported hash algorithm"
msgstr ""
#: ports/espressif/common-hal/dualbank/__init__.c #: ports/espressif/common-hal/dualbank/__init__.c
msgid "Update Failed" msgid "Update Failed"
msgstr "" msgstr ""
@ -2352,6 +2356,10 @@ msgstr ""
msgid "array and index length must be equal" msgid "array and index length must be equal"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "array has too many dimensions"
msgstr ""
#: py/objarray.c shared-bindings/alarm/SleepMemory.c #: py/objarray.c shared-bindings/alarm/SleepMemory.c
#: shared-bindings/nvm/ByteArray.c #: shared-bindings/nvm/ByteArray.c
msgid "array/bytes required on right side" msgid "array/bytes required on right side"
@ -2719,6 +2727,10 @@ msgstr ""
msgid "convolve arguments must not be empty" msgid "convolve arguments must not be empty"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "corrupted file"
msgstr ""
#: extmod/ulab/code/numpy/poly.c #: extmod/ulab/code/numpy/poly.c
msgid "could not invert Vandermonde matrix" msgid "could not invert Vandermonde matrix"
msgstr "" msgstr ""
@ -2810,6 +2822,10 @@ msgstr ""
msgid "empty" msgid "empty"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "empty file"
msgstr ""
#: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c #: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c
msgid "empty heap" msgid "empty heap"
msgstr "" msgstr ""
@ -2913,7 +2929,7 @@ msgstr ""
msgid "first argument must be a tuple of ndarrays" msgid "first argument must be a tuple of ndarrays"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/vector.c #: extmod/ulab/code/numpy/transform.c extmod/ulab/code/numpy/vector.c
msgid "first argument must be an ndarray" msgid "first argument must be an ndarray"
msgstr "" msgstr ""
@ -3061,7 +3077,7 @@ msgstr ""
msgid "incorrect padding" msgid "incorrect padding"
msgstr "" msgstr ""
#: extmod/ulab/code/ndarray.c #: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/transform.c
msgid "index is out of bounds" msgid "index is out of bounds"
msgstr "" msgstr ""
@ -3128,6 +3144,10 @@ msgstr ""
msgid "input matrix is singular" msgid "input matrix is singular"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/create.c
msgid "input must be 1- or 2-d"
msgstr ""
#: extmod/ulab/code/numpy/carray/carray.c #: extmod/ulab/code/numpy/carray/carray.c
msgid "input must be a 1D ndarray" msgid "input must be a 1D ndarray"
msgstr "" msgstr ""
@ -3136,11 +3156,7 @@ msgstr ""
msgid "input must be a dense ndarray" msgid "input must be a dense ndarray"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/create.c #: extmod/ulab/code/user/user.c
msgid "input must be a tensor of rank 2"
msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/user/user.c
msgid "input must be an ndarray" msgid "input must be an ndarray"
msgstr "" msgstr ""
@ -3341,7 +3357,7 @@ msgid "max_length must be 0-%d when fixed_length is %s"
msgstr "" msgstr ""
#: extmod/ulab/code/ndarray.c #: extmod/ulab/code/ndarray.c
msgid "maximum number of dimensions is 4" msgid "maximum number of dimensions is "
msgstr "" msgstr ""
#: py/runtime.c #: py/runtime.c
@ -3590,7 +3606,7 @@ msgstr ""
msgid "off" msgid "off"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/utils/utils.c #: extmod/ulab/code/utils/utils.c
msgid "offset is too large" msgid "offset is too large"
msgstr "" msgstr ""
@ -4180,6 +4196,14 @@ msgstr ""
msgid "unsupported types for %q: '%q', '%q'" msgid "unsupported types for %q: '%q', '%q'"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols is too high"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols keyword must be specified"
msgstr ""
#: py/objint.c #: py/objint.c
#, c-format #, c-format
msgid "value must fit in %d byte(s)" msgid "value must fit in %d byte(s)"
@ -4221,7 +4245,17 @@ msgstr ""
msgid "wrong axis specified" msgid "wrong axis specified"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c #: extmod/ulab/code/numpy/io/io.c
msgid "wrong dtype"
msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong index type"
msgstr ""
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/create.c
#: extmod/ulab/code/numpy/io/io.c extmod/ulab/code/numpy/transform.c
#: extmod/ulab/code/numpy/vector.c
msgid "wrong input type" msgid "wrong input type"
msgstr "" msgstr ""
@ -4229,6 +4263,10 @@ msgstr ""
msgid "wrong length of condition array" msgid "wrong length of condition array"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong length of index array"
msgstr ""
#: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c #: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c
msgid "wrong number of arguments" msgid "wrong number of arguments"
msgstr "" msgstr ""

View File

@ -2370,6 +2370,10 @@ msgstr ""
msgid "array and index length must be equal" msgid "array and index length must be equal"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "array has too many dimensions"
msgstr ""
#: py/objarray.c shared-bindings/alarm/SleepMemory.c #: py/objarray.c shared-bindings/alarm/SleepMemory.c
#: shared-bindings/nvm/ByteArray.c #: shared-bindings/nvm/ByteArray.c
msgid "array/bytes required on right side" msgid "array/bytes required on right side"
@ -2737,6 +2741,10 @@ msgstr ""
msgid "convolve arguments must not be empty" msgid "convolve arguments must not be empty"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "corrupted file"
msgstr ""
#: extmod/ulab/code/numpy/poly.c #: extmod/ulab/code/numpy/poly.c
msgid "could not invert Vandermonde matrix" msgid "could not invert Vandermonde matrix"
msgstr "" msgstr ""
@ -2828,6 +2836,10 @@ msgstr ""
msgid "empty" msgid "empty"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "empty file"
msgstr ""
#: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c #: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c
msgid "empty heap" msgid "empty heap"
msgstr "" msgstr ""
@ -2931,7 +2943,7 @@ msgstr ""
msgid "first argument must be a tuple of ndarrays" msgid "first argument must be a tuple of ndarrays"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/vector.c #: extmod/ulab/code/numpy/transform.c extmod/ulab/code/numpy/vector.c
msgid "first argument must be an ndarray" msgid "first argument must be an ndarray"
msgstr "" msgstr ""
@ -3079,7 +3091,7 @@ msgstr ""
msgid "incorrect padding" msgid "incorrect padding"
msgstr "" msgstr ""
#: extmod/ulab/code/ndarray.c #: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/transform.c
msgid "index is out of bounds" msgid "index is out of bounds"
msgstr "" msgstr ""
@ -3146,6 +3158,10 @@ msgstr ""
msgid "input matrix is singular" msgid "input matrix is singular"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/create.c
msgid "input must be 1- or 2-d"
msgstr ""
#: extmod/ulab/code/numpy/carray/carray.c #: extmod/ulab/code/numpy/carray/carray.c
msgid "input must be a 1D ndarray" msgid "input must be a 1D ndarray"
msgstr "" msgstr ""
@ -3154,11 +3170,7 @@ msgstr ""
msgid "input must be a dense ndarray" msgid "input must be a dense ndarray"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/create.c #: extmod/ulab/code/user/user.c
msgid "input must be a tensor of rank 2"
msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/user/user.c
msgid "input must be an ndarray" msgid "input must be an ndarray"
msgstr "" msgstr ""
@ -3359,7 +3371,7 @@ msgid "max_length must be 0-%d when fixed_length is %s"
msgstr "" msgstr ""
#: extmod/ulab/code/ndarray.c #: extmod/ulab/code/ndarray.c
msgid "maximum number of dimensions is 4" msgid "maximum number of dimensions is "
msgstr "" msgstr ""
#: py/runtime.c #: py/runtime.c
@ -3608,7 +3620,7 @@ msgstr ""
msgid "off" msgid "off"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/utils/utils.c #: extmod/ulab/code/utils/utils.c
msgid "offset is too large" msgid "offset is too large"
msgstr "" msgstr ""
@ -3758,6 +3770,7 @@ msgid "pow() with 3 arguments requires integers"
msgstr "" msgstr ""
#: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h #: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h
#: ports/espressif/boards/lolin_c3_mini/mpconfigboard.h
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "pressing boot button at start up.\n" msgid "pressing boot button at start up.\n"
msgstr "" msgstr ""
@ -4193,6 +4206,14 @@ msgstr ""
msgid "unsupported types for %q: '%q', '%q'" msgid "unsupported types for %q: '%q', '%q'"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols is too high"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols keyword must be specified"
msgstr ""
#: py/objint.c #: py/objint.c
#, c-format #, c-format
msgid "value must fit in %d byte(s)" msgid "value must fit in %d byte(s)"
@ -4234,7 +4255,17 @@ msgstr ""
msgid "wrong axis specified" msgid "wrong axis specified"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c #: extmod/ulab/code/numpy/io/io.c
msgid "wrong dtype"
msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong index type"
msgstr ""
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/create.c
#: extmod/ulab/code/numpy/io/io.c extmod/ulab/code/numpy/transform.c
#: extmod/ulab/code/numpy/vector.c
msgid "wrong input type" msgid "wrong input type"
msgstr "" msgstr ""
@ -4242,6 +4273,10 @@ msgstr ""
msgid "wrong length of condition array" msgid "wrong length of condition array"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong length of index array"
msgstr ""
#: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c #: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c
msgid "wrong number of arguments" msgid "wrong number of arguments"
msgstr "" msgstr ""

View File

@ -2422,6 +2422,10 @@ msgstr "Argumente müssen ndarrays sein"
msgid "array and index length must be equal" msgid "array and index length must be equal"
msgstr "Array- und Indexlänge müssen gleich sein" msgstr "Array- und Indexlänge müssen gleich sein"
#: extmod/ulab/code/numpy/io/io.c
msgid "array has too many dimensions"
msgstr ""
#: py/objarray.c shared-bindings/alarm/SleepMemory.c #: py/objarray.c shared-bindings/alarm/SleepMemory.c
#: shared-bindings/nvm/ByteArray.c #: shared-bindings/nvm/ByteArray.c
msgid "array/bytes required on right side" msgid "array/bytes required on right side"
@ -2799,6 +2803,10 @@ msgstr "Convolve-Argumente müssen ndarrays sein"
msgid "convolve arguments must not be empty" msgid "convolve arguments must not be empty"
msgstr "Convolve Argumente dürfen nicht leer sein" msgstr "Convolve Argumente dürfen nicht leer sein"
#: extmod/ulab/code/numpy/io/io.c
msgid "corrupted file"
msgstr ""
#: extmod/ulab/code/numpy/poly.c #: extmod/ulab/code/numpy/poly.c
msgid "could not invert Vandermonde matrix" msgid "could not invert Vandermonde matrix"
msgstr "Vandermonde-Matrix konnte nicht invertiert werden" msgstr "Vandermonde-Matrix konnte nicht invertiert werden"
@ -2892,6 +2900,10 @@ msgstr "dtype muss Float oder komplex sein"
msgid "empty" msgid "empty"
msgstr "leer" msgstr "leer"
#: extmod/ulab/code/numpy/io/io.c
msgid "empty file"
msgstr ""
#: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c #: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c
msgid "empty heap" msgid "empty heap"
msgstr "leerer heap" msgstr "leerer heap"
@ -2995,7 +3007,7 @@ msgstr "das erste Argument muss eine Funktion sein"
msgid "first argument must be a tuple of ndarrays" msgid "first argument must be a tuple of ndarrays"
msgstr "das erste Argument muss ein Tupel von ndarrays sein" msgstr "das erste Argument muss ein Tupel von ndarrays sein"
#: extmod/ulab/code/numpy/vector.c #: extmod/ulab/code/numpy/transform.c extmod/ulab/code/numpy/vector.c
msgid "first argument must be an ndarray" msgid "first argument must be an ndarray"
msgstr "Das erste Argument muss ein Ndarray sein" msgstr "Das erste Argument muss ein Ndarray sein"
@ -3145,7 +3157,7 @@ msgstr "unvollständiger Formatschlüssel"
msgid "incorrect padding" msgid "incorrect padding"
msgstr "padding ist inkorrekt" msgstr "padding ist inkorrekt"
#: extmod/ulab/code/ndarray.c #: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/transform.c
msgid "index is out of bounds" msgid "index is out of bounds"
msgstr "Index ist außerhalb der Grenzen" msgstr "Index ist außerhalb der Grenzen"
@ -3212,6 +3224,10 @@ msgstr "Eingabematrix ist asymmetrisch"
msgid "input matrix is singular" msgid "input matrix is singular"
msgstr "Eingabematrix ist singulär" msgstr "Eingabematrix ist singulär"
#: extmod/ulab/code/numpy/create.c
msgid "input must be 1- or 2-d"
msgstr ""
#: extmod/ulab/code/numpy/carray/carray.c #: extmod/ulab/code/numpy/carray/carray.c
msgid "input must be a 1D ndarray" msgid "input must be a 1D ndarray"
msgstr "Eingabe muss ein 1D ndarray sein" msgstr "Eingabe muss ein 1D ndarray sein"
@ -3220,11 +3236,7 @@ msgstr "Eingabe muss ein 1D ndarray sein"
msgid "input must be a dense ndarray" msgid "input must be a dense ndarray"
msgstr "Eingabe muss ein dichtes ndarray sein" msgstr "Eingabe muss ein dichtes ndarray sein"
#: extmod/ulab/code/numpy/create.c #: extmod/ulab/code/user/user.c
msgid "input must be a tensor of rank 2"
msgstr "Eingabe muss ein Tensor von Rang 2 sein"
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/user/user.c
msgid "input must be an ndarray" msgid "input must be an ndarray"
msgstr "Eingabe muss ein ndarray sein" msgstr "Eingabe muss ein ndarray sein"
@ -3431,8 +3443,8 @@ msgid "max_length must be 0-%d when fixed_length is %s"
msgstr "max_length muss 0-%d sein, wenn fixed_length %s ist" msgstr "max_length muss 0-%d sein, wenn fixed_length %s ist"
#: extmod/ulab/code/ndarray.c #: extmod/ulab/code/ndarray.c
msgid "maximum number of dimensions is 4" msgid "maximum number of dimensions is "
msgstr "die maximale Anzahl der Dimensionen beträgt 4" msgstr ""
#: py/runtime.c #: py/runtime.c
msgid "maximum recursion depth exceeded" msgid "maximum recursion depth exceeded"
@ -3681,7 +3693,7 @@ msgstr "String mit ungerader Länge"
msgid "off" msgid "off"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/utils/utils.c #: extmod/ulab/code/utils/utils.c
msgid "offset is too large" msgid "offset is too large"
msgstr "Offset ist zu groß" msgstr "Offset ist zu groß"
@ -3835,6 +3847,7 @@ msgid "pow() with 3 arguments requires integers"
msgstr "pow() mit 3 Argumenten erfordert Integer" msgstr "pow() mit 3 Argumenten erfordert Integer"
#: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h #: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h
#: ports/espressif/boards/lolin_c3_mini/mpconfigboard.h
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "pressing boot button at start up.\n" msgid "pressing boot button at start up.\n"
msgstr "Drücken der Boot-Taste beim Start.\n" msgstr "Drücken der Boot-Taste beim Start.\n"
@ -4275,6 +4288,14 @@ msgstr "nicht unterstützter Typ für Operator"
msgid "unsupported types for %q: '%q', '%q'" msgid "unsupported types for %q: '%q', '%q'"
msgstr "nicht unterstützte Typen für %q: '%q', '%q'" msgstr "nicht unterstützte Typen für %q: '%q', '%q'"
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols is too high"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols keyword must be specified"
msgstr ""
#: py/objint.c #: py/objint.c
#, c-format #, c-format
msgid "value must fit in %d byte(s)" msgid "value must fit in %d byte(s)"
@ -4316,7 +4337,17 @@ msgstr "falscher Achsenindex"
msgid "wrong axis specified" msgid "wrong axis specified"
msgstr "falsche Achse gewählt" msgstr "falsche Achse gewählt"
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c #: extmod/ulab/code/numpy/io/io.c
msgid "wrong dtype"
msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong index type"
msgstr "falscher Indextyp"
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/create.c
#: extmod/ulab/code/numpy/io/io.c extmod/ulab/code/numpy/transform.c
#: extmod/ulab/code/numpy/vector.c
msgid "wrong input type" msgid "wrong input type"
msgstr "falscher Eingabetyp" msgstr "falscher Eingabetyp"
@ -4324,6 +4355,10 @@ msgstr "falscher Eingabetyp"
msgid "wrong length of condition array" msgid "wrong length of condition array"
msgstr "falsche Länge des Array von Bedingungen" msgstr "falsche Länge des Array von Bedingungen"
#: extmod/ulab/code/numpy/transform.c
msgid "wrong length of index array"
msgstr ""
#: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c #: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c
msgid "wrong number of arguments" msgid "wrong number of arguments"
msgstr "falsche Anzahl an Argumenten" msgstr "falsche Anzahl an Argumenten"
@ -4368,6 +4403,12 @@ msgstr "zi muss eine Gleitkommazahl sein"
msgid "zi must be of shape (n_section, 2)" msgid "zi must be of shape (n_section, 2)"
msgstr "zi muss die Form (n_section, 2) haben" msgstr "zi muss die Form (n_section, 2) haben"
#~ msgid "input must be a tensor of rank 2"
#~ msgstr "Eingabe muss ein Tensor von Rang 2 sein"
#~ msgid "maximum number of dimensions is 4"
#~ msgstr "die maximale Anzahl der Dimensionen beträgt 4"
#~ msgid "Watchdog timer expired." #~ msgid "Watchdog timer expired."
#~ msgstr "Watchdog timer abgelaufen." #~ msgstr "Watchdog timer abgelaufen."
@ -5131,9 +5172,6 @@ msgstr "zi muss die Form (n_section, 2) haben"
#~ msgid "wrong argument type" #~ msgid "wrong argument type"
#~ msgstr "falscher Argumenttyp" #~ msgstr "falscher Argumenttyp"
#~ msgid "wrong index type"
#~ msgstr "falscher Indextyp"
#~ msgid "" #~ msgid ""
#~ "\n" #~ "\n"
#~ "To exit, please reset the board without " #~ "To exit, please reset the board without "

View File

@ -2352,6 +2352,10 @@ msgstr ""
msgid "array and index length must be equal" msgid "array and index length must be equal"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "array has too many dimensions"
msgstr ""
#: py/objarray.c shared-bindings/alarm/SleepMemory.c #: py/objarray.c shared-bindings/alarm/SleepMemory.c
#: shared-bindings/nvm/ByteArray.c #: shared-bindings/nvm/ByteArray.c
msgid "array/bytes required on right side" msgid "array/bytes required on right side"
@ -2719,6 +2723,10 @@ msgstr ""
msgid "convolve arguments must not be empty" msgid "convolve arguments must not be empty"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "corrupted file"
msgstr ""
#: extmod/ulab/code/numpy/poly.c #: extmod/ulab/code/numpy/poly.c
msgid "could not invert Vandermonde matrix" msgid "could not invert Vandermonde matrix"
msgstr "" msgstr ""
@ -2810,6 +2818,10 @@ msgstr ""
msgid "empty" msgid "empty"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "empty file"
msgstr ""
#: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c #: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c
msgid "empty heap" msgid "empty heap"
msgstr "" msgstr ""
@ -2913,7 +2925,7 @@ msgstr ""
msgid "first argument must be a tuple of ndarrays" msgid "first argument must be a tuple of ndarrays"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/vector.c #: extmod/ulab/code/numpy/transform.c extmod/ulab/code/numpy/vector.c
msgid "first argument must be an ndarray" msgid "first argument must be an ndarray"
msgstr "" msgstr ""
@ -3061,7 +3073,7 @@ msgstr ""
msgid "incorrect padding" msgid "incorrect padding"
msgstr "" msgstr ""
#: extmod/ulab/code/ndarray.c #: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/transform.c
msgid "index is out of bounds" msgid "index is out of bounds"
msgstr "" msgstr ""
@ -3128,6 +3140,10 @@ msgstr ""
msgid "input matrix is singular" msgid "input matrix is singular"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/create.c
msgid "input must be 1- or 2-d"
msgstr ""
#: extmod/ulab/code/numpy/carray/carray.c #: extmod/ulab/code/numpy/carray/carray.c
msgid "input must be a 1D ndarray" msgid "input must be a 1D ndarray"
msgstr "" msgstr ""
@ -3136,11 +3152,7 @@ msgstr ""
msgid "input must be a dense ndarray" msgid "input must be a dense ndarray"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/create.c #: extmod/ulab/code/user/user.c
msgid "input must be a tensor of rank 2"
msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/user/user.c
msgid "input must be an ndarray" msgid "input must be an ndarray"
msgstr "" msgstr ""
@ -3341,7 +3353,7 @@ msgid "max_length must be 0-%d when fixed_length is %s"
msgstr "" msgstr ""
#: extmod/ulab/code/ndarray.c #: extmod/ulab/code/ndarray.c
msgid "maximum number of dimensions is 4" msgid "maximum number of dimensions is "
msgstr "" msgstr ""
#: py/runtime.c #: py/runtime.c
@ -3590,7 +3602,7 @@ msgstr ""
msgid "off" msgid "off"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/utils/utils.c #: extmod/ulab/code/utils/utils.c
msgid "offset is too large" msgid "offset is too large"
msgstr "" msgstr ""
@ -3740,6 +3752,7 @@ msgid "pow() with 3 arguments requires integers"
msgstr "" msgstr ""
#: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h #: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h
#: ports/espressif/boards/lolin_c3_mini/mpconfigboard.h
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "pressing boot button at start up.\n" msgid "pressing boot button at start up.\n"
msgstr "" msgstr ""
@ -4175,6 +4188,14 @@ msgstr ""
msgid "unsupported types for %q: '%q', '%q'" msgid "unsupported types for %q: '%q', '%q'"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols is too high"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols keyword must be specified"
msgstr ""
#: py/objint.c #: py/objint.c
#, c-format #, c-format
msgid "value must fit in %d byte(s)" msgid "value must fit in %d byte(s)"
@ -4216,7 +4237,17 @@ msgstr ""
msgid "wrong axis specified" msgid "wrong axis specified"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c #: extmod/ulab/code/numpy/io/io.c
msgid "wrong dtype"
msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong index type"
msgstr ""
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/create.c
#: extmod/ulab/code/numpy/io/io.c extmod/ulab/code/numpy/transform.c
#: extmod/ulab/code/numpy/vector.c
msgid "wrong input type" msgid "wrong input type"
msgstr "" msgstr ""
@ -4224,6 +4255,10 @@ msgstr ""
msgid "wrong length of condition array" msgid "wrong length of condition array"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong length of index array"
msgstr ""
#: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c #: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c
msgid "wrong number of arguments" msgid "wrong number of arguments"
msgstr "" msgstr ""

View File

@ -2386,6 +2386,10 @@ msgstr "arguments must be ndarrays"
msgid "array and index length must be equal" msgid "array and index length must be equal"
msgstr "array and index length must be equal" msgstr "array and index length must be equal"
#: extmod/ulab/code/numpy/io/io.c
msgid "array has too many dimensions"
msgstr ""
#: py/objarray.c shared-bindings/alarm/SleepMemory.c #: py/objarray.c shared-bindings/alarm/SleepMemory.c
#: shared-bindings/nvm/ByteArray.c #: shared-bindings/nvm/ByteArray.c
msgid "array/bytes required on right side" msgid "array/bytes required on right side"
@ -2755,6 +2759,10 @@ msgstr "convolve arguments must be ndarrays"
msgid "convolve arguments must not be empty" msgid "convolve arguments must not be empty"
msgstr "convolve arguments must not be empty" msgstr "convolve arguments must not be empty"
#: extmod/ulab/code/numpy/io/io.c
msgid "corrupted file"
msgstr ""
#: extmod/ulab/code/numpy/poly.c #: extmod/ulab/code/numpy/poly.c
msgid "could not invert Vandermonde matrix" msgid "could not invert Vandermonde matrix"
msgstr "could not invert Vandermonde matrix" msgstr "could not invert Vandermonde matrix"
@ -2847,6 +2855,10 @@ msgstr ""
msgid "empty" msgid "empty"
msgstr "empty" msgstr "empty"
#: extmod/ulab/code/numpy/io/io.c
msgid "empty file"
msgstr ""
#: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c #: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c
msgid "empty heap" msgid "empty heap"
msgstr "empty heap" msgstr "empty heap"
@ -2950,7 +2962,7 @@ msgstr "first argument must be a function"
msgid "first argument must be a tuple of ndarrays" msgid "first argument must be a tuple of ndarrays"
msgstr "first argument must be a tuple of ndarrays" msgstr "first argument must be a tuple of ndarrays"
#: extmod/ulab/code/numpy/vector.c #: extmod/ulab/code/numpy/transform.c extmod/ulab/code/numpy/vector.c
msgid "first argument must be an ndarray" msgid "first argument must be an ndarray"
msgstr "first argument must be an ndarray" msgstr "first argument must be an ndarray"
@ -3098,7 +3110,7 @@ msgstr "incomplete format key"
msgid "incorrect padding" msgid "incorrect padding"
msgstr "incorrect padding" msgstr "incorrect padding"
#: extmod/ulab/code/ndarray.c #: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/transform.c
msgid "index is out of bounds" msgid "index is out of bounds"
msgstr "index is out of bounds" msgstr "index is out of bounds"
@ -3165,6 +3177,10 @@ msgstr "input matrix is asymmetric"
msgid "input matrix is singular" msgid "input matrix is singular"
msgstr "input matrix is singular" msgstr "input matrix is singular"
#: extmod/ulab/code/numpy/create.c
msgid "input must be 1- or 2-d"
msgstr ""
#: extmod/ulab/code/numpy/carray/carray.c #: extmod/ulab/code/numpy/carray/carray.c
msgid "input must be a 1D ndarray" msgid "input must be a 1D ndarray"
msgstr "" msgstr ""
@ -3173,11 +3189,7 @@ msgstr ""
msgid "input must be a dense ndarray" msgid "input must be a dense ndarray"
msgstr "input must be a dense ndarray" msgstr "input must be a dense ndarray"
#: extmod/ulab/code/numpy/create.c #: extmod/ulab/code/user/user.c
msgid "input must be a tensor of rank 2"
msgstr "input must be a tensor of rank 2"
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/user/user.c
msgid "input must be an ndarray" msgid "input must be an ndarray"
msgstr "input must be an ndarray" msgstr "input must be an ndarray"
@ -3378,8 +3390,8 @@ msgid "max_length must be 0-%d when fixed_length is %s"
msgstr "max_length must be 0-%d when fixed_length is %s" msgstr "max_length must be 0-%d when fixed_length is %s"
#: extmod/ulab/code/ndarray.c #: extmod/ulab/code/ndarray.c
msgid "maximum number of dimensions is 4" msgid "maximum number of dimensions is "
msgstr "maximum number of dimensions is 4" msgstr ""
#: py/runtime.c #: py/runtime.c
msgid "maximum recursion depth exceeded" msgid "maximum recursion depth exceeded"
@ -3627,7 +3639,7 @@ msgstr "odd-length string"
msgid "off" msgid "off"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/utils/utils.c #: extmod/ulab/code/utils/utils.c
msgid "offset is too large" msgid "offset is too large"
msgstr "offset is too large" msgstr "offset is too large"
@ -3777,6 +3789,7 @@ msgid "pow() with 3 arguments requires integers"
msgstr "pow() with 3 arguments requires integers" msgstr "pow() with 3 arguments requires integers"
#: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h #: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h
#: ports/espressif/boards/lolin_c3_mini/mpconfigboard.h
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "pressing boot button at start up.\n" msgid "pressing boot button at start up.\n"
msgstr "pressing boot button at start up.\n" msgstr "pressing boot button at start up.\n"
@ -4214,6 +4227,14 @@ msgstr "unsupported type for operator"
msgid "unsupported types for %q: '%q', '%q'" msgid "unsupported types for %q: '%q', '%q'"
msgstr "unsupported types for %q: '%q', '%q'" msgstr "unsupported types for %q: '%q', '%q'"
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols is too high"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols keyword must be specified"
msgstr ""
#: py/objint.c #: py/objint.c
#, c-format #, c-format
msgid "value must fit in %d byte(s)" msgid "value must fit in %d byte(s)"
@ -4255,7 +4276,17 @@ msgstr "wrong axis index"
msgid "wrong axis specified" msgid "wrong axis specified"
msgstr "wrong axis specified" msgstr "wrong axis specified"
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c #: extmod/ulab/code/numpy/io/io.c
msgid "wrong dtype"
msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong index type"
msgstr ""
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/create.c
#: extmod/ulab/code/numpy/io/io.c extmod/ulab/code/numpy/transform.c
#: extmod/ulab/code/numpy/vector.c
msgid "wrong input type" msgid "wrong input type"
msgstr "wrong input type" msgstr "wrong input type"
@ -4263,6 +4294,10 @@ msgstr "wrong input type"
msgid "wrong length of condition array" msgid "wrong length of condition array"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong length of index array"
msgstr ""
#: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c #: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c
msgid "wrong number of arguments" msgid "wrong number of arguments"
msgstr "wrong number of arguments" msgstr "wrong number of arguments"
@ -4307,6 +4342,12 @@ msgstr "zi must be of float type"
msgid "zi must be of shape (n_section, 2)" msgid "zi must be of shape (n_section, 2)"
msgstr "zi must be of shape (n_section, 2)" msgstr "zi must be of shape (n_section, 2)"
#~ msgid "input must be a tensor of rank 2"
#~ msgstr "input must be a tensor of rank 2"
#~ msgid "maximum number of dimensions is 4"
#~ msgstr "maximum number of dimensions is 4"
#~ msgid "Watchdog timer expired." #~ msgid "Watchdog timer expired."
#~ msgstr "WatchDog timer expired." #~ msgstr "WatchDog timer expired."

View File

@ -2419,6 +2419,10 @@ msgstr "argumentos deben ser ndarrays"
msgid "array and index length must be equal" msgid "array and index length must be equal"
msgstr "Longitud del array e índice tienen que ser iguales" msgstr "Longitud del array e índice tienen que ser iguales"
#: extmod/ulab/code/numpy/io/io.c
msgid "array has too many dimensions"
msgstr ""
#: py/objarray.c shared-bindings/alarm/SleepMemory.c #: py/objarray.c shared-bindings/alarm/SleepMemory.c
#: shared-bindings/nvm/ByteArray.c #: shared-bindings/nvm/ByteArray.c
msgid "array/bytes required on right side" msgid "array/bytes required on right side"
@ -2791,6 +2795,10 @@ msgstr "los argumentos para convolve deben ser ndarrays"
msgid "convolve arguments must not be empty" msgid "convolve arguments must not be empty"
msgstr "los argumentos para convolve no deben estar vacíos" msgstr "los argumentos para convolve no deben estar vacíos"
#: extmod/ulab/code/numpy/io/io.c
msgid "corrupted file"
msgstr ""
#: extmod/ulab/code/numpy/poly.c #: extmod/ulab/code/numpy/poly.c
msgid "could not invert Vandermonde matrix" msgid "could not invert Vandermonde matrix"
msgstr "no se pudo invertir la matriz de Vandermonde" msgstr "no se pudo invertir la matriz de Vandermonde"
@ -2884,6 +2892,10 @@ msgstr ""
msgid "empty" msgid "empty"
msgstr "vacío" msgstr "vacío"
#: extmod/ulab/code/numpy/io/io.c
msgid "empty file"
msgstr ""
#: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c #: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c
msgid "empty heap" msgid "empty heap"
msgstr "heap vacío" msgstr "heap vacío"
@ -2987,7 +2999,7 @@ msgstr "el primer argumento debe ser una función"
msgid "first argument must be a tuple of ndarrays" msgid "first argument must be a tuple of ndarrays"
msgstr "Primer argumento tiene que ser una tupla de ndarrays" msgstr "Primer argumento tiene que ser una tupla de ndarrays"
#: extmod/ulab/code/numpy/vector.c #: extmod/ulab/code/numpy/transform.c extmod/ulab/code/numpy/vector.c
msgid "first argument must be an ndarray" msgid "first argument must be an ndarray"
msgstr "el primer argumento debe ser ndarray" msgstr "el primer argumento debe ser ndarray"
@ -3135,7 +3147,7 @@ msgstr "formato de llave incompleto"
msgid "incorrect padding" msgid "incorrect padding"
msgstr "relleno (padding) incorrecto" msgstr "relleno (padding) incorrecto"
#: extmod/ulab/code/ndarray.c #: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/transform.c
msgid "index is out of bounds" msgid "index is out of bounds"
msgstr "el índice está fuera de límites" msgstr "el índice está fuera de límites"
@ -3202,6 +3214,10 @@ msgstr "la matriz de entrada es asimétrica"
msgid "input matrix is singular" msgid "input matrix is singular"
msgstr "la matriz de entrada es singular" msgstr "la matriz de entrada es singular"
#: extmod/ulab/code/numpy/create.c
msgid "input must be 1- or 2-d"
msgstr ""
#: extmod/ulab/code/numpy/carray/carray.c #: extmod/ulab/code/numpy/carray/carray.c
msgid "input must be a 1D ndarray" msgid "input must be a 1D ndarray"
msgstr "" msgstr ""
@ -3210,11 +3226,7 @@ msgstr ""
msgid "input must be a dense ndarray" msgid "input must be a dense ndarray"
msgstr "Entrada tiene que ser un ndarray denso" msgstr "Entrada tiene que ser un ndarray denso"
#: extmod/ulab/code/numpy/create.c #: extmod/ulab/code/user/user.c
msgid "input must be a tensor of rank 2"
msgstr "Entrada tiene que ser un tensor de rango 2"
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/user/user.c
msgid "input must be an ndarray" msgid "input must be an ndarray"
msgstr "Entrada tiene que ser un ndarray" msgstr "Entrada tiene que ser un ndarray"
@ -3418,8 +3430,8 @@ msgid "max_length must be 0-%d when fixed_length is %s"
msgstr "max_length debe ser 0-%d cuando fixed_length es %s" msgstr "max_length debe ser 0-%d cuando fixed_length es %s"
#: extmod/ulab/code/ndarray.c #: extmod/ulab/code/ndarray.c
msgid "maximum number of dimensions is 4" msgid "maximum number of dimensions is "
msgstr "Máximo número de dimensiones es 4" msgstr ""
#: py/runtime.c #: py/runtime.c
msgid "maximum recursion depth exceeded" msgid "maximum recursion depth exceeded"
@ -3671,7 +3683,7 @@ msgstr "string de longitud impar"
msgid "off" msgid "off"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/utils/utils.c #: extmod/ulab/code/utils/utils.c
msgid "offset is too large" msgid "offset is too large"
msgstr "offset es demasiado grande" msgstr "offset es demasiado grande"
@ -3821,6 +3833,7 @@ msgid "pow() with 3 arguments requires integers"
msgstr "pow() con 3 argumentos requiere enteros" msgstr "pow() con 3 argumentos requiere enteros"
#: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h #: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h
#: ports/espressif/boards/lolin_c3_mini/mpconfigboard.h
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "pressing boot button at start up.\n" msgid "pressing boot button at start up.\n"
msgstr "presionando botón de arranque al inicio.\n" msgstr "presionando botón de arranque al inicio.\n"
@ -4259,6 +4272,14 @@ msgstr "tipo de operador no soportado"
msgid "unsupported types for %q: '%q', '%q'" msgid "unsupported types for %q: '%q', '%q'"
msgstr "tipos no soportados para %q: '%q', '%q'" msgstr "tipos no soportados para %q: '%q', '%q'"
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols is too high"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols keyword must be specified"
msgstr ""
#: py/objint.c #: py/objint.c
#, c-format #, c-format
msgid "value must fit in %d byte(s)" msgid "value must fit in %d byte(s)"
@ -4300,7 +4321,17 @@ msgstr "indice de eje erróneo"
msgid "wrong axis specified" msgid "wrong axis specified"
msgstr "eje especificado erróneo" msgstr "eje especificado erróneo"
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c #: extmod/ulab/code/numpy/io/io.c
msgid "wrong dtype"
msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong index type"
msgstr "tipo de índice incorrecto"
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/create.c
#: extmod/ulab/code/numpy/io/io.c extmod/ulab/code/numpy/transform.c
#: extmod/ulab/code/numpy/vector.c
msgid "wrong input type" msgid "wrong input type"
msgstr "tipo de entrada incorrecta" msgstr "tipo de entrada incorrecta"
@ -4308,6 +4339,10 @@ msgstr "tipo de entrada incorrecta"
msgid "wrong length of condition array" msgid "wrong length of condition array"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong length of index array"
msgstr ""
#: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c #: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c
msgid "wrong number of arguments" msgid "wrong number of arguments"
msgstr "numero erroneo de argumentos" msgstr "numero erroneo de argumentos"
@ -4352,6 +4387,12 @@ msgstr "zi debe ser de tipo flotante"
msgid "zi must be of shape (n_section, 2)" msgid "zi must be of shape (n_section, 2)"
msgstr "zi debe ser una forma (n_section,2)" msgstr "zi debe ser una forma (n_section,2)"
#~ msgid "input must be a tensor of rank 2"
#~ msgstr "Entrada tiene que ser un tensor de rango 2"
#~ msgid "maximum number of dimensions is 4"
#~ msgstr "Máximo número de dimensiones es 4"
#~ msgid "Watchdog timer expired." #~ msgid "Watchdog timer expired."
#~ msgstr "Temporizador de perro guardián expirado." #~ msgstr "Temporizador de perro guardián expirado."
@ -5210,9 +5251,6 @@ msgstr "zi debe ser una forma (n_section,2)"
#~ msgid "wrong argument type" #~ msgid "wrong argument type"
#~ msgstr "tipo de argumento incorrecto" #~ msgstr "tipo de argumento incorrecto"
#~ msgid "wrong index type"
#~ msgstr "tipo de índice incorrecto"
#~ msgid "specify size or data, but not both" #~ msgid "specify size or data, but not both"
#~ msgstr "especifique o tamaño o datos, pero no ambos" #~ msgstr "especifique o tamaño o datos, pero no ambos"

View File

@ -2372,6 +2372,10 @@ msgstr ""
msgid "array and index length must be equal" msgid "array and index length must be equal"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "array has too many dimensions"
msgstr ""
#: py/objarray.c shared-bindings/alarm/SleepMemory.c #: py/objarray.c shared-bindings/alarm/SleepMemory.c
#: shared-bindings/nvm/ByteArray.c #: shared-bindings/nvm/ByteArray.c
msgid "array/bytes required on right side" msgid "array/bytes required on right side"
@ -2746,6 +2750,10 @@ msgstr ""
msgid "convolve arguments must not be empty" msgid "convolve arguments must not be empty"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "corrupted file"
msgstr ""
#: extmod/ulab/code/numpy/poly.c #: extmod/ulab/code/numpy/poly.c
msgid "could not invert Vandermonde matrix" msgid "could not invert Vandermonde matrix"
msgstr "" msgstr ""
@ -2841,6 +2849,10 @@ msgstr ""
msgid "empty" msgid "empty"
msgstr "walang laman" msgstr "walang laman"
#: extmod/ulab/code/numpy/io/io.c
msgid "empty file"
msgstr ""
#: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c #: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c
msgid "empty heap" msgid "empty heap"
msgstr "walang laman ang heap" msgstr "walang laman ang heap"
@ -2945,7 +2957,7 @@ msgstr ""
msgid "first argument must be a tuple of ndarrays" msgid "first argument must be a tuple of ndarrays"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/vector.c #: extmod/ulab/code/numpy/transform.c extmod/ulab/code/numpy/vector.c
msgid "first argument must be an ndarray" msgid "first argument must be an ndarray"
msgstr "" msgstr ""
@ -3094,7 +3106,7 @@ msgstr "hindi kumpleto ang format key"
msgid "incorrect padding" msgid "incorrect padding"
msgstr "mali ang padding" msgstr "mali ang padding"
#: extmod/ulab/code/ndarray.c #: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/transform.c
msgid "index is out of bounds" msgid "index is out of bounds"
msgstr "" msgstr ""
@ -3161,6 +3173,10 @@ msgstr ""
msgid "input matrix is singular" msgid "input matrix is singular"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/create.c
msgid "input must be 1- or 2-d"
msgstr ""
#: extmod/ulab/code/numpy/carray/carray.c #: extmod/ulab/code/numpy/carray/carray.c
msgid "input must be a 1D ndarray" msgid "input must be a 1D ndarray"
msgstr "" msgstr ""
@ -3169,11 +3185,7 @@ msgstr ""
msgid "input must be a dense ndarray" msgid "input must be a dense ndarray"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/create.c #: extmod/ulab/code/user/user.c
msgid "input must be a tensor of rank 2"
msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/user/user.c
msgid "input must be an ndarray" msgid "input must be an ndarray"
msgstr "" msgstr ""
@ -3378,7 +3390,7 @@ msgid "max_length must be 0-%d when fixed_length is %s"
msgstr "" msgstr ""
#: extmod/ulab/code/ndarray.c #: extmod/ulab/code/ndarray.c
msgid "maximum number of dimensions is 4" msgid "maximum number of dimensions is "
msgstr "" msgstr ""
#: py/runtime.c #: py/runtime.c
@ -3627,7 +3639,7 @@ msgstr "odd-length string"
msgid "off" msgid "off"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/utils/utils.c #: extmod/ulab/code/utils/utils.c
msgid "offset is too large" msgid "offset is too large"
msgstr "" msgstr ""
@ -3779,6 +3791,7 @@ msgid "pow() with 3 arguments requires integers"
msgstr "pow() na may 3 argumento kailangan ng integers" msgstr "pow() na may 3 argumento kailangan ng integers"
#: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h #: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h
#: ports/espressif/boards/lolin_c3_mini/mpconfigboard.h
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "pressing boot button at start up.\n" msgid "pressing boot button at start up.\n"
msgstr "" msgstr ""
@ -4217,6 +4230,14 @@ msgstr "hindi sinusuportahang type para sa operator"
msgid "unsupported types for %q: '%q', '%q'" msgid "unsupported types for %q: '%q', '%q'"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols is too high"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols keyword must be specified"
msgstr ""
#: py/objint.c #: py/objint.c
#, c-format #, c-format
msgid "value must fit in %d byte(s)" msgid "value must fit in %d byte(s)"
@ -4258,7 +4279,17 @@ msgstr ""
msgid "wrong axis specified" msgid "wrong axis specified"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c #: extmod/ulab/code/numpy/io/io.c
msgid "wrong dtype"
msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong index type"
msgstr ""
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/create.c
#: extmod/ulab/code/numpy/io/io.c extmod/ulab/code/numpy/transform.c
#: extmod/ulab/code/numpy/vector.c
msgid "wrong input type" msgid "wrong input type"
msgstr "" msgstr ""
@ -4266,6 +4297,10 @@ msgstr ""
msgid "wrong length of condition array" msgid "wrong length of condition array"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong length of index array"
msgstr ""
#: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c #: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c
msgid "wrong number of arguments" msgid "wrong number of arguments"
msgstr "mali ang bilang ng argumento" msgstr "mali ang bilang ng argumento"

View File

@ -2453,6 +2453,10 @@ msgstr "les paramètres doivent être des ndarrays"
msgid "array and index length must be equal" msgid "array and index length must be equal"
msgstr "la taille de la matrice et de l'index doivent être égaux" msgstr "la taille de la matrice et de l'index doivent être égaux"
#: extmod/ulab/code/numpy/io/io.c
msgid "array has too many dimensions"
msgstr ""
#: py/objarray.c shared-bindings/alarm/SleepMemory.c #: py/objarray.c shared-bindings/alarm/SleepMemory.c
#: shared-bindings/nvm/ByteArray.c #: shared-bindings/nvm/ByteArray.c
msgid "array/bytes required on right side" msgid "array/bytes required on right side"
@ -2830,6 +2834,10 @@ msgstr "les paramêtres pour convolve doivent être des ndarrays"
msgid "convolve arguments must not be empty" msgid "convolve arguments must not be empty"
msgstr "les arguments convolve ne doivent pas être vides" msgstr "les arguments convolve ne doivent pas être vides"
#: extmod/ulab/code/numpy/io/io.c
msgid "corrupted file"
msgstr ""
#: extmod/ulab/code/numpy/poly.c #: extmod/ulab/code/numpy/poly.c
msgid "could not invert Vandermonde matrix" msgid "could not invert Vandermonde matrix"
msgstr "n'a pas pu inverser la matrice Vandermonde" msgstr "n'a pas pu inverser la matrice Vandermonde"
@ -2924,6 +2932,10 @@ msgstr "le dtype doit être un flottant, ou un complexe"
msgid "empty" msgid "empty"
msgstr "vide" msgstr "vide"
#: extmod/ulab/code/numpy/io/io.c
msgid "empty file"
msgstr ""
#: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c #: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c
msgid "empty heap" msgid "empty heap"
msgstr "tas vide" msgstr "tas vide"
@ -3027,7 +3039,7 @@ msgstr "le premier argument doit être une fonction"
msgid "first argument must be a tuple of ndarrays" msgid "first argument must be a tuple of ndarrays"
msgstr "le premier paramêtre doit être un tuple de ndarrays" msgstr "le premier paramêtre doit être un tuple de ndarrays"
#: extmod/ulab/code/numpy/vector.c #: extmod/ulab/code/numpy/transform.c extmod/ulab/code/numpy/vector.c
msgid "first argument must be an ndarray" msgid "first argument must be an ndarray"
msgstr "le premier paramêtre doit être un ndarray" msgstr "le premier paramêtre doit être un ndarray"
@ -3175,7 +3187,7 @@ msgstr "clé de format incomplète"
msgid "incorrect padding" msgid "incorrect padding"
msgstr "espacement incorrect" msgstr "espacement incorrect"
#: extmod/ulab/code/ndarray.c #: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/transform.c
msgid "index is out of bounds" msgid "index is out of bounds"
msgstr "l'index est hors limites" msgstr "l'index est hors limites"
@ -3243,6 +3255,10 @@ msgstr "la matrice d'entrée est asymétrique"
msgid "input matrix is singular" msgid "input matrix is singular"
msgstr "la matrice d'entrée est singulière" msgstr "la matrice d'entrée est singulière"
#: extmod/ulab/code/numpy/create.c
msgid "input must be 1- or 2-d"
msgstr ""
#: extmod/ulab/code/numpy/carray/carray.c #: extmod/ulab/code/numpy/carray/carray.c
msgid "input must be a 1D ndarray" msgid "input must be a 1D ndarray"
msgstr "l'entrée doit être un ndarray 1D" msgstr "l'entrée doit être un ndarray 1D"
@ -3251,11 +3267,7 @@ msgstr "l'entrée doit être un ndarray 1D"
msgid "input must be a dense ndarray" msgid "input must be a dense ndarray"
msgstr "l'entrée doit être un ndarray dense" msgstr "l'entrée doit être un ndarray dense"
#: extmod/ulab/code/numpy/create.c #: extmod/ulab/code/user/user.c
msgid "input must be a tensor of rank 2"
msgstr "l'entrée doit être un tenseur de rang 2"
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/user/user.c
msgid "input must be an ndarray" msgid "input must be an ndarray"
msgstr "l'entrée doit être un ndarray" msgstr "l'entrée doit être un ndarray"
@ -3462,8 +3474,8 @@ msgid "max_length must be 0-%d when fixed_length is %s"
msgstr "max_length doit être 0-%d lorsque fixed_length est %s" msgstr "max_length doit être 0-%d lorsque fixed_length est %s"
#: extmod/ulab/code/ndarray.c #: extmod/ulab/code/ndarray.c
msgid "maximum number of dimensions is 4" msgid "maximum number of dimensions is "
msgstr "nombre maximal de dimensions est 4" msgstr ""
#: py/runtime.c #: py/runtime.c
msgid "maximum recursion depth exceeded" msgid "maximum recursion depth exceeded"
@ -3713,7 +3725,7 @@ msgstr "chaîne de longueur impaire"
msgid "off" msgid "off"
msgstr "inactif" msgstr "inactif"
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/utils/utils.c #: extmod/ulab/code/utils/utils.c
msgid "offset is too large" msgid "offset is too large"
msgstr "offset est trop large" msgstr "offset est trop large"
@ -3866,6 +3878,7 @@ msgid "pow() with 3 arguments requires integers"
msgstr "pow() avec 3 arguments nécessite des entiers" msgstr "pow() avec 3 arguments nécessite des entiers"
#: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h #: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h
#: ports/espressif/boards/lolin_c3_mini/mpconfigboard.h
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "pressing boot button at start up.\n" msgid "pressing boot button at start up.\n"
msgstr "bouton boot appuyé lors du démarrage.\n" msgstr "bouton boot appuyé lors du démarrage.\n"
@ -4304,6 +4317,14 @@ msgstr "type non supporté pour l'opérateur"
msgid "unsupported types for %q: '%q', '%q'" msgid "unsupported types for %q: '%q', '%q'"
msgstr "types non supportés pour %q: '%q', '%q'" msgstr "types non supportés pour %q: '%q', '%q'"
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols is too high"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols keyword must be specified"
msgstr ""
#: py/objint.c #: py/objint.c
#, c-format #, c-format
msgid "value must fit in %d byte(s)" msgid "value must fit in %d byte(s)"
@ -4345,7 +4366,17 @@ msgstr "index d'axe incorrecte"
msgid "wrong axis specified" msgid "wrong axis specified"
msgstr "axe incorrecte spécifiée" msgstr "axe incorrecte spécifiée"
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c #: extmod/ulab/code/numpy/io/io.c
msgid "wrong dtype"
msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong index type"
msgstr "type d'index incorrect"
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/create.c
#: extmod/ulab/code/numpy/io/io.c extmod/ulab/code/numpy/transform.c
#: extmod/ulab/code/numpy/vector.c
msgid "wrong input type" msgid "wrong input type"
msgstr "type d'entrée incorrect" msgstr "type d'entrée incorrect"
@ -4353,6 +4384,10 @@ msgstr "type d'entrée incorrect"
msgid "wrong length of condition array" msgid "wrong length of condition array"
msgstr "mauvaise taille du tableau de condition" msgstr "mauvaise taille du tableau de condition"
#: extmod/ulab/code/numpy/transform.c
msgid "wrong length of index array"
msgstr ""
#: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c #: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c
msgid "wrong number of arguments" msgid "wrong number of arguments"
msgstr "mauvais nombres d'arguments" msgstr "mauvais nombres d'arguments"
@ -4397,6 +4432,12 @@ msgstr "zi doit être de type float"
msgid "zi must be of shape (n_section, 2)" msgid "zi must be of shape (n_section, 2)"
msgstr "zi doit être de forme (n_section, 2)" msgstr "zi doit être de forme (n_section, 2)"
#~ msgid "input must be a tensor of rank 2"
#~ msgstr "l'entrée doit être un tenseur de rang 2"
#~ msgid "maximum number of dimensions is 4"
#~ msgstr "nombre maximal de dimensions est 4"
#~ msgid "Watchdog timer expired." #~ msgid "Watchdog timer expired."
#~ msgstr "Le minuteur Watchdog a expiré." #~ msgstr "Le minuteur Watchdog a expiré."
@ -5270,9 +5311,6 @@ msgstr "zi doit être de forme (n_section, 2)"
#~ msgid "wrong argument type" #~ msgid "wrong argument type"
#~ msgstr "type d'argument incorrect" #~ msgstr "type d'argument incorrect"
#~ msgid "wrong index type"
#~ msgstr "type d'index incorrect"
#~ msgid "Must provide SCK pin" #~ msgid "Must provide SCK pin"
#~ msgstr "Vous devez fournir un code PIN SCK" #~ msgstr "Vous devez fournir un code PIN SCK"

View File

@ -2352,6 +2352,10 @@ msgstr ""
msgid "array and index length must be equal" msgid "array and index length must be equal"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "array has too many dimensions"
msgstr ""
#: py/objarray.c shared-bindings/alarm/SleepMemory.c #: py/objarray.c shared-bindings/alarm/SleepMemory.c
#: shared-bindings/nvm/ByteArray.c #: shared-bindings/nvm/ByteArray.c
msgid "array/bytes required on right side" msgid "array/bytes required on right side"
@ -2719,6 +2723,10 @@ msgstr ""
msgid "convolve arguments must not be empty" msgid "convolve arguments must not be empty"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "corrupted file"
msgstr ""
#: extmod/ulab/code/numpy/poly.c #: extmod/ulab/code/numpy/poly.c
msgid "could not invert Vandermonde matrix" msgid "could not invert Vandermonde matrix"
msgstr "" msgstr ""
@ -2810,6 +2818,10 @@ msgstr ""
msgid "empty" msgid "empty"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "empty file"
msgstr ""
#: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c #: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c
msgid "empty heap" msgid "empty heap"
msgstr "" msgstr ""
@ -2913,7 +2925,7 @@ msgstr ""
msgid "first argument must be a tuple of ndarrays" msgid "first argument must be a tuple of ndarrays"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/vector.c #: extmod/ulab/code/numpy/transform.c extmod/ulab/code/numpy/vector.c
msgid "first argument must be an ndarray" msgid "first argument must be an ndarray"
msgstr "" msgstr ""
@ -3061,7 +3073,7 @@ msgstr ""
msgid "incorrect padding" msgid "incorrect padding"
msgstr "" msgstr ""
#: extmod/ulab/code/ndarray.c #: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/transform.c
msgid "index is out of bounds" msgid "index is out of bounds"
msgstr "" msgstr ""
@ -3128,6 +3140,10 @@ msgstr ""
msgid "input matrix is singular" msgid "input matrix is singular"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/create.c
msgid "input must be 1- or 2-d"
msgstr ""
#: extmod/ulab/code/numpy/carray/carray.c #: extmod/ulab/code/numpy/carray/carray.c
msgid "input must be a 1D ndarray" msgid "input must be a 1D ndarray"
msgstr "" msgstr ""
@ -3136,11 +3152,7 @@ msgstr ""
msgid "input must be a dense ndarray" msgid "input must be a dense ndarray"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/create.c #: extmod/ulab/code/user/user.c
msgid "input must be a tensor of rank 2"
msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/user/user.c
msgid "input must be an ndarray" msgid "input must be an ndarray"
msgstr "" msgstr ""
@ -3341,7 +3353,7 @@ msgid "max_length must be 0-%d when fixed_length is %s"
msgstr "" msgstr ""
#: extmod/ulab/code/ndarray.c #: extmod/ulab/code/ndarray.c
msgid "maximum number of dimensions is 4" msgid "maximum number of dimensions is "
msgstr "" msgstr ""
#: py/runtime.c #: py/runtime.c
@ -3590,7 +3602,7 @@ msgstr ""
msgid "off" msgid "off"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/utils/utils.c #: extmod/ulab/code/utils/utils.c
msgid "offset is too large" msgid "offset is too large"
msgstr "" msgstr ""
@ -3740,6 +3752,7 @@ msgid "pow() with 3 arguments requires integers"
msgstr "" msgstr ""
#: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h #: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h
#: ports/espressif/boards/lolin_c3_mini/mpconfigboard.h
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "pressing boot button at start up.\n" msgid "pressing boot button at start up.\n"
msgstr "" msgstr ""
@ -4175,6 +4188,14 @@ msgstr ""
msgid "unsupported types for %q: '%q', '%q'" msgid "unsupported types for %q: '%q', '%q'"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols is too high"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols keyword must be specified"
msgstr ""
#: py/objint.c #: py/objint.c
#, c-format #, c-format
msgid "value must fit in %d byte(s)" msgid "value must fit in %d byte(s)"
@ -4216,7 +4237,17 @@ msgstr ""
msgid "wrong axis specified" msgid "wrong axis specified"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c #: extmod/ulab/code/numpy/io/io.c
msgid "wrong dtype"
msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong index type"
msgstr ""
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/create.c
#: extmod/ulab/code/numpy/io/io.c extmod/ulab/code/numpy/transform.c
#: extmod/ulab/code/numpy/vector.c
msgid "wrong input type" msgid "wrong input type"
msgstr "" msgstr ""
@ -4224,6 +4255,10 @@ msgstr ""
msgid "wrong length of condition array" msgid "wrong length of condition array"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong length of index array"
msgstr ""
#: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c #: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c
msgid "wrong number of arguments" msgid "wrong number of arguments"
msgstr "" msgstr ""

View File

@ -2382,6 +2382,10 @@ msgstr ""
msgid "array and index length must be equal" msgid "array and index length must be equal"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "array has too many dimensions"
msgstr ""
#: py/objarray.c shared-bindings/alarm/SleepMemory.c #: py/objarray.c shared-bindings/alarm/SleepMemory.c
#: shared-bindings/nvm/ByteArray.c #: shared-bindings/nvm/ByteArray.c
msgid "array/bytes required on right side" msgid "array/bytes required on right side"
@ -2755,6 +2759,10 @@ msgstr ""
msgid "convolve arguments must not be empty" msgid "convolve arguments must not be empty"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "corrupted file"
msgstr ""
#: extmod/ulab/code/numpy/poly.c #: extmod/ulab/code/numpy/poly.c
msgid "could not invert Vandermonde matrix" msgid "could not invert Vandermonde matrix"
msgstr "" msgstr ""
@ -2849,6 +2857,10 @@ msgstr ""
msgid "empty" msgid "empty"
msgstr "vuoto" msgstr "vuoto"
#: extmod/ulab/code/numpy/io/io.c
msgid "empty file"
msgstr ""
#: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c #: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c
msgid "empty heap" msgid "empty heap"
msgstr "heap vuoto" msgstr "heap vuoto"
@ -2953,7 +2965,7 @@ msgstr ""
msgid "first argument must be a tuple of ndarrays" msgid "first argument must be a tuple of ndarrays"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/vector.c #: extmod/ulab/code/numpy/transform.c extmod/ulab/code/numpy/vector.c
msgid "first argument must be an ndarray" msgid "first argument must be an ndarray"
msgstr "" msgstr ""
@ -3102,7 +3114,7 @@ msgstr ""
msgid "incorrect padding" msgid "incorrect padding"
msgstr "padding incorretto" msgstr "padding incorretto"
#: extmod/ulab/code/ndarray.c #: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/transform.c
msgid "index is out of bounds" msgid "index is out of bounds"
msgstr "" msgstr ""
@ -3169,6 +3181,10 @@ msgstr ""
msgid "input matrix is singular" msgid "input matrix is singular"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/create.c
msgid "input must be 1- or 2-d"
msgstr ""
#: extmod/ulab/code/numpy/carray/carray.c #: extmod/ulab/code/numpy/carray/carray.c
msgid "input must be a 1D ndarray" msgid "input must be a 1D ndarray"
msgstr "" msgstr ""
@ -3177,11 +3193,7 @@ msgstr ""
msgid "input must be a dense ndarray" msgid "input must be a dense ndarray"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/create.c #: extmod/ulab/code/user/user.c
msgid "input must be a tensor of rank 2"
msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/user/user.c
msgid "input must be an ndarray" msgid "input must be an ndarray"
msgstr "" msgstr ""
@ -3387,7 +3399,7 @@ msgid "max_length must be 0-%d when fixed_length is %s"
msgstr "" msgstr ""
#: extmod/ulab/code/ndarray.c #: extmod/ulab/code/ndarray.c
msgid "maximum number of dimensions is 4" msgid "maximum number of dimensions is "
msgstr "" msgstr ""
#: py/runtime.c #: py/runtime.c
@ -3638,7 +3650,7 @@ msgstr "stringa di lunghezza dispari"
msgid "off" msgid "off"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/utils/utils.c #: extmod/ulab/code/utils/utils.c
msgid "offset is too large" msgid "offset is too large"
msgstr "" msgstr ""
@ -3792,6 +3804,7 @@ msgid "pow() with 3 arguments requires integers"
msgstr "pow() con 3 argomenti richiede interi" msgstr "pow() con 3 argomenti richiede interi"
#: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h #: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h
#: ports/espressif/boards/lolin_c3_mini/mpconfigboard.h
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "pressing boot button at start up.\n" msgid "pressing boot button at start up.\n"
msgstr "" msgstr ""
@ -4230,6 +4243,14 @@ msgstr "tipo non supportato per l'operando"
msgid "unsupported types for %q: '%q', '%q'" msgid "unsupported types for %q: '%q', '%q'"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols is too high"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols keyword must be specified"
msgstr ""
#: py/objint.c #: py/objint.c
#, c-format #, c-format
msgid "value must fit in %d byte(s)" msgid "value must fit in %d byte(s)"
@ -4271,7 +4292,17 @@ msgstr ""
msgid "wrong axis specified" msgid "wrong axis specified"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c #: extmod/ulab/code/numpy/io/io.c
msgid "wrong dtype"
msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong index type"
msgstr ""
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/create.c
#: extmod/ulab/code/numpy/io/io.c extmod/ulab/code/numpy/transform.c
#: extmod/ulab/code/numpy/vector.c
msgid "wrong input type" msgid "wrong input type"
msgstr "" msgstr ""
@ -4279,6 +4310,10 @@ msgstr ""
msgid "wrong length of condition array" msgid "wrong length of condition array"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong length of index array"
msgstr ""
#: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c #: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c
msgid "wrong number of arguments" msgid "wrong number of arguments"
msgstr "numero di argomenti errato" msgstr "numero di argomenti errato"

View File

@ -2366,6 +2366,10 @@ msgstr "引数はndarrayでなければなりません"
msgid "array and index length must be equal" msgid "array and index length must be equal"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "array has too many dimensions"
msgstr ""
#: py/objarray.c shared-bindings/alarm/SleepMemory.c #: py/objarray.c shared-bindings/alarm/SleepMemory.c
#: shared-bindings/nvm/ByteArray.c #: shared-bindings/nvm/ByteArray.c
msgid "array/bytes required on right side" msgid "array/bytes required on right side"
@ -2735,6 +2739,10 @@ msgstr "convolve引数はndarrayでなければなりません"
msgid "convolve arguments must not be empty" msgid "convolve arguments must not be empty"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "corrupted file"
msgstr ""
#: extmod/ulab/code/numpy/poly.c #: extmod/ulab/code/numpy/poly.c
msgid "could not invert Vandermonde matrix" msgid "could not invert Vandermonde matrix"
msgstr "ヴァンデルモンド行列の逆行列を求められません" msgstr "ヴァンデルモンド行列の逆行列を求められません"
@ -2828,6 +2836,10 @@ msgstr ""
msgid "empty" msgid "empty"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "empty file"
msgstr ""
#: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c #: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c
msgid "empty heap" msgid "empty heap"
msgstr "" msgstr ""
@ -2931,7 +2943,7 @@ msgstr "1つ目の引数は関数でなければなりません"
msgid "first argument must be a tuple of ndarrays" msgid "first argument must be a tuple of ndarrays"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/vector.c #: extmod/ulab/code/numpy/transform.c extmod/ulab/code/numpy/vector.c
msgid "first argument must be an ndarray" msgid "first argument must be an ndarray"
msgstr "1つ目の引数はndarrayでなければなりません" msgstr "1つ目の引数はndarrayでなければなりません"
@ -3079,7 +3091,7 @@ msgstr ""
msgid "incorrect padding" msgid "incorrect padding"
msgstr "" msgstr ""
#: extmod/ulab/code/ndarray.c #: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/transform.c
msgid "index is out of bounds" msgid "index is out of bounds"
msgstr "" msgstr ""
@ -3147,6 +3159,10 @@ msgstr "入力行列が非対称"
msgid "input matrix is singular" msgid "input matrix is singular"
msgstr "入力が非正則行列" msgstr "入力が非正則行列"
#: extmod/ulab/code/numpy/create.c
msgid "input must be 1- or 2-d"
msgstr ""
#: extmod/ulab/code/numpy/carray/carray.c #: extmod/ulab/code/numpy/carray/carray.c
msgid "input must be a 1D ndarray" msgid "input must be a 1D ndarray"
msgstr "" msgstr ""
@ -3155,11 +3171,7 @@ msgstr ""
msgid "input must be a dense ndarray" msgid "input must be a dense ndarray"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/create.c #: extmod/ulab/code/user/user.c
msgid "input must be a tensor of rank 2"
msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/user/user.c
msgid "input must be an ndarray" msgid "input must be an ndarray"
msgstr "" msgstr ""
@ -3360,7 +3372,7 @@ msgid "max_length must be 0-%d when fixed_length is %s"
msgstr "" msgstr ""
#: extmod/ulab/code/ndarray.c #: extmod/ulab/code/ndarray.c
msgid "maximum number of dimensions is 4" msgid "maximum number of dimensions is "
msgstr "" msgstr ""
#: py/runtime.c #: py/runtime.c
@ -3609,7 +3621,7 @@ msgstr "奇数長の文字列"
msgid "off" msgid "off"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/utils/utils.c #: extmod/ulab/code/utils/utils.c
msgid "offset is too large" msgid "offset is too large"
msgstr "" msgstr ""
@ -3761,6 +3773,7 @@ msgid "pow() with 3 arguments requires integers"
msgstr "pow()の第3引数には整数が必要" msgstr "pow()の第3引数には整数が必要"
#: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h #: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h
#: ports/espressif/boards/lolin_c3_mini/mpconfigboard.h
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "pressing boot button at start up.\n" msgid "pressing boot button at start up.\n"
msgstr "" msgstr ""
@ -4197,6 +4210,14 @@ msgstr "演算子が対応していない型"
msgid "unsupported types for %q: '%q', '%q'" msgid "unsupported types for %q: '%q', '%q'"
msgstr "%q が対応していない型: '%q', '%q'" msgstr "%q が対応していない型: '%q', '%q'"
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols is too high"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols keyword must be specified"
msgstr ""
#: py/objint.c #: py/objint.c
#, c-format #, c-format
msgid "value must fit in %d byte(s)" msgid "value must fit in %d byte(s)"
@ -4238,7 +4259,17 @@ msgstr ""
msgid "wrong axis specified" msgid "wrong axis specified"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c #: extmod/ulab/code/numpy/io/io.c
msgid "wrong dtype"
msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong index type"
msgstr "インデクスの型が不正"
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/create.c
#: extmod/ulab/code/numpy/io/io.c extmod/ulab/code/numpy/transform.c
#: extmod/ulab/code/numpy/vector.c
msgid "wrong input type" msgid "wrong input type"
msgstr "" msgstr ""
@ -4246,6 +4277,10 @@ msgstr ""
msgid "wrong length of condition array" msgid "wrong length of condition array"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong length of index array"
msgstr ""
#: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c #: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c
msgid "wrong number of arguments" msgid "wrong number of arguments"
msgstr "" msgstr ""
@ -4832,9 +4867,6 @@ msgstr ""
#~ msgid "wrong argument type" #~ msgid "wrong argument type"
#~ msgstr "引数の型が不正" #~ msgstr "引数の型が不正"
#~ msgid "wrong index type"
#~ msgstr "インデクスの型が不正"
#~ msgid "Must provide SCK pin" #~ msgid "Must provide SCK pin"
#~ msgstr "SCKピンが必要" #~ msgstr "SCKピンが必要"

View File

@ -2356,6 +2356,10 @@ msgstr ""
msgid "array and index length must be equal" msgid "array and index length must be equal"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "array has too many dimensions"
msgstr ""
#: py/objarray.c shared-bindings/alarm/SleepMemory.c #: py/objarray.c shared-bindings/alarm/SleepMemory.c
#: shared-bindings/nvm/ByteArray.c #: shared-bindings/nvm/ByteArray.c
msgid "array/bytes required on right side" msgid "array/bytes required on right side"
@ -2723,6 +2727,10 @@ msgstr ""
msgid "convolve arguments must not be empty" msgid "convolve arguments must not be empty"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "corrupted file"
msgstr ""
#: extmod/ulab/code/numpy/poly.c #: extmod/ulab/code/numpy/poly.c
msgid "could not invert Vandermonde matrix" msgid "could not invert Vandermonde matrix"
msgstr "" msgstr ""
@ -2814,6 +2822,10 @@ msgstr ""
msgid "empty" msgid "empty"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "empty file"
msgstr ""
#: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c #: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c
msgid "empty heap" msgid "empty heap"
msgstr "" msgstr ""
@ -2917,7 +2929,7 @@ msgstr ""
msgid "first argument must be a tuple of ndarrays" msgid "first argument must be a tuple of ndarrays"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/vector.c #: extmod/ulab/code/numpy/transform.c extmod/ulab/code/numpy/vector.c
msgid "first argument must be an ndarray" msgid "first argument must be an ndarray"
msgstr "" msgstr ""
@ -3065,7 +3077,7 @@ msgstr ""
msgid "incorrect padding" msgid "incorrect padding"
msgstr "" msgstr ""
#: extmod/ulab/code/ndarray.c #: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/transform.c
msgid "index is out of bounds" msgid "index is out of bounds"
msgstr "" msgstr ""
@ -3132,6 +3144,10 @@ msgstr ""
msgid "input matrix is singular" msgid "input matrix is singular"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/create.c
msgid "input must be 1- or 2-d"
msgstr ""
#: extmod/ulab/code/numpy/carray/carray.c #: extmod/ulab/code/numpy/carray/carray.c
msgid "input must be a 1D ndarray" msgid "input must be a 1D ndarray"
msgstr "" msgstr ""
@ -3140,11 +3156,7 @@ msgstr ""
msgid "input must be a dense ndarray" msgid "input must be a dense ndarray"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/create.c #: extmod/ulab/code/user/user.c
msgid "input must be a tensor of rank 2"
msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/user/user.c
msgid "input must be an ndarray" msgid "input must be an ndarray"
msgstr "" msgstr ""
@ -3345,7 +3357,7 @@ msgid "max_length must be 0-%d when fixed_length is %s"
msgstr "" msgstr ""
#: extmod/ulab/code/ndarray.c #: extmod/ulab/code/ndarray.c
msgid "maximum number of dimensions is 4" msgid "maximum number of dimensions is "
msgstr "" msgstr ""
#: py/runtime.c #: py/runtime.c
@ -3594,7 +3606,7 @@ msgstr ""
msgid "off" msgid "off"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/utils/utils.c #: extmod/ulab/code/utils/utils.c
msgid "offset is too large" msgid "offset is too large"
msgstr "" msgstr ""
@ -3744,6 +3756,7 @@ msgid "pow() with 3 arguments requires integers"
msgstr "" msgstr ""
#: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h #: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h
#: ports/espressif/boards/lolin_c3_mini/mpconfigboard.h
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "pressing boot button at start up.\n" msgid "pressing boot button at start up.\n"
msgstr "" msgstr ""
@ -4179,6 +4192,14 @@ msgstr ""
msgid "unsupported types for %q: '%q', '%q'" msgid "unsupported types for %q: '%q', '%q'"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols is too high"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols keyword must be specified"
msgstr ""
#: py/objint.c #: py/objint.c
#, c-format #, c-format
msgid "value must fit in %d byte(s)" msgid "value must fit in %d byte(s)"
@ -4220,7 +4241,17 @@ msgstr ""
msgid "wrong axis specified" msgid "wrong axis specified"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c #: extmod/ulab/code/numpy/io/io.c
msgid "wrong dtype"
msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong index type"
msgstr ""
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/create.c
#: extmod/ulab/code/numpy/io/io.c extmod/ulab/code/numpy/transform.c
#: extmod/ulab/code/numpy/vector.c
msgid "wrong input type" msgid "wrong input type"
msgstr "" msgstr ""
@ -4228,6 +4259,10 @@ msgstr ""
msgid "wrong length of condition array" msgid "wrong length of condition array"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong length of index array"
msgstr ""
#: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c #: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c
msgid "wrong number of arguments" msgid "wrong number of arguments"
msgstr "" msgstr ""

View File

@ -2382,6 +2382,10 @@ msgstr "argumenten moeten ndarrays zijn"
msgid "array and index length must be equal" msgid "array and index length must be equal"
msgstr "array en indexlengte moeten gelijk zijn" msgstr "array en indexlengte moeten gelijk zijn"
#: extmod/ulab/code/numpy/io/io.c
msgid "array has too many dimensions"
msgstr ""
#: py/objarray.c shared-bindings/alarm/SleepMemory.c #: py/objarray.c shared-bindings/alarm/SleepMemory.c
#: shared-bindings/nvm/ByteArray.c #: shared-bindings/nvm/ByteArray.c
msgid "array/bytes required on right side" msgid "array/bytes required on right side"
@ -2750,6 +2754,10 @@ msgstr "convolutie argumenten moeten ndarrays zijn"
msgid "convolve arguments must not be empty" msgid "convolve arguments must not be empty"
msgstr "convolutie argumenten mogen niet leeg zijn" msgstr "convolutie argumenten mogen niet leeg zijn"
#: extmod/ulab/code/numpy/io/io.c
msgid "corrupted file"
msgstr ""
#: extmod/ulab/code/numpy/poly.c #: extmod/ulab/code/numpy/poly.c
msgid "could not invert Vandermonde matrix" msgid "could not invert Vandermonde matrix"
msgstr "kon de Vandermonde matrix niet omkeren" msgstr "kon de Vandermonde matrix niet omkeren"
@ -2843,6 +2851,10 @@ msgstr ""
msgid "empty" msgid "empty"
msgstr "leeg" msgstr "leeg"
#: extmod/ulab/code/numpy/io/io.c
msgid "empty file"
msgstr ""
#: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c #: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c
msgid "empty heap" msgid "empty heap"
msgstr "lege heap" msgstr "lege heap"
@ -2946,7 +2958,7 @@ msgstr "eerste argument moet een functie zijn"
msgid "first argument must be a tuple of ndarrays" msgid "first argument must be a tuple of ndarrays"
msgstr "eerste argument moet een tupel van ndarrays zijn" msgstr "eerste argument moet een tupel van ndarrays zijn"
#: extmod/ulab/code/numpy/vector.c #: extmod/ulab/code/numpy/transform.c extmod/ulab/code/numpy/vector.c
msgid "first argument must be an ndarray" msgid "first argument must be an ndarray"
msgstr "eerst argument moet een ndarray zijn" msgstr "eerst argument moet een ndarray zijn"
@ -3095,7 +3107,7 @@ msgstr "incomplete formaatsleutel"
msgid "incorrect padding" msgid "incorrect padding"
msgstr "vulling (padding) is onjuist" msgstr "vulling (padding) is onjuist"
#: extmod/ulab/code/ndarray.c #: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/transform.c
msgid "index is out of bounds" msgid "index is out of bounds"
msgstr "index is buiten bereik" msgstr "index is buiten bereik"
@ -3162,6 +3174,10 @@ msgstr "invoermatrix is asymmetrisch"
msgid "input matrix is singular" msgid "input matrix is singular"
msgstr "invoermatrix is singulier" msgstr "invoermatrix is singulier"
#: extmod/ulab/code/numpy/create.c
msgid "input must be 1- or 2-d"
msgstr ""
#: extmod/ulab/code/numpy/carray/carray.c #: extmod/ulab/code/numpy/carray/carray.c
msgid "input must be a 1D ndarray" msgid "input must be a 1D ndarray"
msgstr "" msgstr ""
@ -3170,11 +3186,7 @@ msgstr ""
msgid "input must be a dense ndarray" msgid "input must be a dense ndarray"
msgstr "invoer moet een gesloten ndarray zijn" msgstr "invoer moet een gesloten ndarray zijn"
#: extmod/ulab/code/numpy/create.c #: extmod/ulab/code/user/user.c
msgid "input must be a tensor of rank 2"
msgstr "invoer moet een tensor van rang 2 zijn"
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/user/user.c
msgid "input must be an ndarray" msgid "input must be an ndarray"
msgstr "invoer moet een ndarray zijn" msgstr "invoer moet een ndarray zijn"
@ -3378,8 +3390,8 @@ msgid "max_length must be 0-%d when fixed_length is %s"
msgstr "max_length moet 0-%d zijn als fixed_length %s is" msgstr "max_length moet 0-%d zijn als fixed_length %s is"
#: extmod/ulab/code/ndarray.c #: extmod/ulab/code/ndarray.c
msgid "maximum number of dimensions is 4" msgid "maximum number of dimensions is "
msgstr "maximaal aantal dimensies is 4" msgstr ""
#: py/runtime.c #: py/runtime.c
msgid "maximum recursion depth exceeded" msgid "maximum recursion depth exceeded"
@ -3627,7 +3639,7 @@ msgstr "string met oneven lengte"
msgid "off" msgid "off"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/utils/utils.c #: extmod/ulab/code/utils/utils.c
msgid "offset is too large" msgid "offset is too large"
msgstr "compensatie is te groot" msgstr "compensatie is te groot"
@ -3777,6 +3789,7 @@ msgid "pow() with 3 arguments requires integers"
msgstr "pow() met 3 argumenten vereist integers" msgstr "pow() met 3 argumenten vereist integers"
#: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h #: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h
#: ports/espressif/boards/lolin_c3_mini/mpconfigboard.h
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "pressing boot button at start up.\n" msgid "pressing boot button at start up.\n"
msgstr "druk bootknop in bij opstarten.\n" msgstr "druk bootknop in bij opstarten.\n"
@ -4214,6 +4227,14 @@ msgstr "niet ondersteund type voor operator"
msgid "unsupported types for %q: '%q', '%q'" msgid "unsupported types for %q: '%q', '%q'"
msgstr "niet ondersteunde types voor %q: '%q', '%q'" msgstr "niet ondersteunde types voor %q: '%q', '%q'"
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols is too high"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols keyword must be specified"
msgstr ""
#: py/objint.c #: py/objint.c
#, c-format #, c-format
msgid "value must fit in %d byte(s)" msgid "value must fit in %d byte(s)"
@ -4255,7 +4276,17 @@ msgstr "foute index voor as"
msgid "wrong axis specified" msgid "wrong axis specified"
msgstr "onjuiste as gespecificeerd" msgstr "onjuiste as gespecificeerd"
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c #: extmod/ulab/code/numpy/io/io.c
msgid "wrong dtype"
msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong index type"
msgstr "onjuist indextype"
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/create.c
#: extmod/ulab/code/numpy/io/io.c extmod/ulab/code/numpy/transform.c
#: extmod/ulab/code/numpy/vector.c
msgid "wrong input type" msgid "wrong input type"
msgstr "onjuist invoertype" msgstr "onjuist invoertype"
@ -4263,6 +4294,10 @@ msgstr "onjuist invoertype"
msgid "wrong length of condition array" msgid "wrong length of condition array"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong length of index array"
msgstr ""
#: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c #: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c
msgid "wrong number of arguments" msgid "wrong number of arguments"
msgstr "onjuist aantal argumenten" msgstr "onjuist aantal argumenten"
@ -4307,6 +4342,12 @@ msgstr "zi moet van type float zijn"
msgid "zi must be of shape (n_section, 2)" msgid "zi must be of shape (n_section, 2)"
msgstr "zi moet vorm (n_section, 2) hebben" msgstr "zi moet vorm (n_section, 2) hebben"
#~ msgid "input must be a tensor of rank 2"
#~ msgstr "invoer moet een tensor van rang 2 zijn"
#~ msgid "maximum number of dimensions is 4"
#~ msgstr "maximaal aantal dimensies is 4"
#~ msgid "Watchdog timer expired." #~ msgid "Watchdog timer expired."
#~ msgstr "Watchdog-timer verstreken." #~ msgstr "Watchdog-timer verstreken."
@ -5037,9 +5078,6 @@ msgstr "zi moet vorm (n_section, 2) hebben"
#~ msgid "wrong argument type" #~ msgid "wrong argument type"
#~ msgstr "onjuist argumenttype" #~ msgstr "onjuist argumenttype"
#~ msgid "wrong index type"
#~ msgstr "onjuist indextype"
#~ msgid "Must provide SCK pin" #~ msgid "Must provide SCK pin"
#~ msgstr "SCK pin moet opgegeven worden" #~ msgstr "SCK pin moet opgegeven worden"

View File

@ -2363,6 +2363,10 @@ msgstr ""
msgid "array and index length must be equal" msgid "array and index length must be equal"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "array has too many dimensions"
msgstr ""
#: py/objarray.c shared-bindings/alarm/SleepMemory.c #: py/objarray.c shared-bindings/alarm/SleepMemory.c
#: shared-bindings/nvm/ByteArray.c #: shared-bindings/nvm/ByteArray.c
msgid "array/bytes required on right side" msgid "array/bytes required on right side"
@ -2730,6 +2734,10 @@ msgstr ""
msgid "convolve arguments must not be empty" msgid "convolve arguments must not be empty"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "corrupted file"
msgstr ""
#: extmod/ulab/code/numpy/poly.c #: extmod/ulab/code/numpy/poly.c
msgid "could not invert Vandermonde matrix" msgid "could not invert Vandermonde matrix"
msgstr "" msgstr ""
@ -2822,6 +2830,10 @@ msgstr ""
msgid "empty" msgid "empty"
msgstr "puste" msgstr "puste"
#: extmod/ulab/code/numpy/io/io.c
msgid "empty file"
msgstr ""
#: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c #: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c
msgid "empty heap" msgid "empty heap"
msgstr "pusta sterta" msgstr "pusta sterta"
@ -2925,7 +2937,7 @@ msgstr "pierwszy argument musi być funkcją"
msgid "first argument must be a tuple of ndarrays" msgid "first argument must be a tuple of ndarrays"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/vector.c #: extmod/ulab/code/numpy/transform.c extmod/ulab/code/numpy/vector.c
msgid "first argument must be an ndarray" msgid "first argument must be an ndarray"
msgstr "" msgstr ""
@ -3073,7 +3085,7 @@ msgstr "niepełny klucz formatu"
msgid "incorrect padding" msgid "incorrect padding"
msgstr "złe wypełnienie" msgstr "złe wypełnienie"
#: extmod/ulab/code/ndarray.c #: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/transform.c
msgid "index is out of bounds" msgid "index is out of bounds"
msgstr "indeks jest poza zakresem" msgstr "indeks jest poza zakresem"
@ -3140,6 +3152,10 @@ msgstr ""
msgid "input matrix is singular" msgid "input matrix is singular"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/create.c
msgid "input must be 1- or 2-d"
msgstr ""
#: extmod/ulab/code/numpy/carray/carray.c #: extmod/ulab/code/numpy/carray/carray.c
msgid "input must be a 1D ndarray" msgid "input must be a 1D ndarray"
msgstr "" msgstr ""
@ -3148,11 +3164,7 @@ msgstr ""
msgid "input must be a dense ndarray" msgid "input must be a dense ndarray"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/create.c #: extmod/ulab/code/user/user.c
msgid "input must be a tensor of rank 2"
msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/user/user.c
msgid "input must be an ndarray" msgid "input must be an ndarray"
msgstr "" msgstr ""
@ -3353,7 +3365,7 @@ msgid "max_length must be 0-%d when fixed_length is %s"
msgstr "" msgstr ""
#: extmod/ulab/code/ndarray.c #: extmod/ulab/code/ndarray.c
msgid "maximum number of dimensions is 4" msgid "maximum number of dimensions is "
msgstr "" msgstr ""
#: py/runtime.c #: py/runtime.c
@ -3602,7 +3614,7 @@ msgstr "łańcuch o nieparzystej długości"
msgid "off" msgid "off"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/utils/utils.c #: extmod/ulab/code/utils/utils.c
msgid "offset is too large" msgid "offset is too large"
msgstr "" msgstr ""
@ -3753,6 +3765,7 @@ msgid "pow() with 3 arguments requires integers"
msgstr "trzyargumentowe pow() wymaga liczb całkowitych" msgstr "trzyargumentowe pow() wymaga liczb całkowitych"
#: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h #: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h
#: ports/espressif/boards/lolin_c3_mini/mpconfigboard.h
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "pressing boot button at start up.\n" msgid "pressing boot button at start up.\n"
msgstr "" msgstr ""
@ -4189,6 +4202,14 @@ msgstr "zły typ dla operatora"
msgid "unsupported types for %q: '%q', '%q'" msgid "unsupported types for %q: '%q', '%q'"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols is too high"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols keyword must be specified"
msgstr ""
#: py/objint.c #: py/objint.c
#, c-format #, c-format
msgid "value must fit in %d byte(s)" msgid "value must fit in %d byte(s)"
@ -4230,7 +4251,17 @@ msgstr ""
msgid "wrong axis specified" msgid "wrong axis specified"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c #: extmod/ulab/code/numpy/io/io.c
msgid "wrong dtype"
msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong index type"
msgstr "zły typ indeksu"
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/create.c
#: extmod/ulab/code/numpy/io/io.c extmod/ulab/code/numpy/transform.c
#: extmod/ulab/code/numpy/vector.c
msgid "wrong input type" msgid "wrong input type"
msgstr "nieprawidłowy typ wejścia" msgstr "nieprawidłowy typ wejścia"
@ -4238,6 +4269,10 @@ msgstr "nieprawidłowy typ wejścia"
msgid "wrong length of condition array" msgid "wrong length of condition array"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong length of index array"
msgstr ""
#: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c #: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c
msgid "wrong number of arguments" msgid "wrong number of arguments"
msgstr "zła liczba argumentów" msgstr "zła liczba argumentów"
@ -4747,9 +4782,6 @@ msgstr ""
#~ msgid "wrong argument type" #~ msgid "wrong argument type"
#~ msgstr "zły typ argumentu" #~ msgstr "zły typ argumentu"
#~ msgid "wrong index type"
#~ msgstr "zły typ indeksu"
#~ msgid "Must provide SCK pin" #~ msgid "Must provide SCK pin"
#~ msgstr "Należy podać pin SCK" #~ msgstr "Należy podać pin SCK"

View File

@ -6,7 +6,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-01-04 12:55-0600\n" "POT-Creation-Date: 2021-01-04 12:55-0600\n"
"PO-Revision-Date: 2022-07-03 00:22+0000\n" "PO-Revision-Date: 2022-07-12 13:10+0000\n"
"Last-Translator: Wellington Terumi Uemura <wellingtonuemura@gmail.com>\n" "Last-Translator: Wellington Terumi Uemura <wellingtonuemura@gmail.com>\n"
"Language-Team: \n" "Language-Team: \n"
"Language: pt_BR\n" "Language: pt_BR\n"
@ -14,7 +14,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n" "Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 4.13.1-dev\n" "X-Generator: Weblate 4.14-dev\n"
#: main.c #: main.c
msgid "" msgid ""
@ -2435,6 +2435,10 @@ msgstr "os argumentos devem ser ndarrays"
msgid "array and index length must be equal" msgid "array and index length must be equal"
msgstr "a matriz e comprimento do índice devem ser iguais" msgstr "a matriz e comprimento do índice devem ser iguais"
#: extmod/ulab/code/numpy/io/io.c
msgid "array has too many dimensions"
msgstr "a matriz possui muitas dimensões"
#: py/objarray.c shared-bindings/alarm/SleepMemory.c #: py/objarray.c shared-bindings/alarm/SleepMemory.c
#: shared-bindings/nvm/ByteArray.c #: shared-bindings/nvm/ByteArray.c
msgid "array/bytes required on right side" msgid "array/bytes required on right side"
@ -2808,6 +2812,10 @@ msgstr "os argumentos convolutivos devem ser ndarrays"
msgid "convolve arguments must not be empty" msgid "convolve arguments must not be empty"
msgstr "os argumentos convolutivos não devem estar vazios" msgstr "os argumentos convolutivos não devem estar vazios"
#: extmod/ulab/code/numpy/io/io.c
msgid "corrupted file"
msgstr "arquivo corrompido"
#: extmod/ulab/code/numpy/poly.c #: extmod/ulab/code/numpy/poly.c
msgid "could not invert Vandermonde matrix" msgid "could not invert Vandermonde matrix"
msgstr "não foi possível inverter a matriz Vandermonde" msgstr "não foi possível inverter a matriz Vandermonde"
@ -2902,6 +2910,10 @@ msgstr "dtype deve ser flutuante ou complexo"
msgid "empty" msgid "empty"
msgstr "vazio" msgstr "vazio"
#: extmod/ulab/code/numpy/io/io.c
msgid "empty file"
msgstr "arquivo vazio"
#: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c #: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c
msgid "empty heap" msgid "empty heap"
msgstr "a área de alocação dinâmica de variáveis (heap) está vazia" msgstr "a área de alocação dinâmica de variáveis (heap) está vazia"
@ -3005,7 +3017,7 @@ msgstr "o primeiro argumento deve ser uma função"
msgid "first argument must be a tuple of ndarrays" msgid "first argument must be a tuple of ndarrays"
msgstr "o primeiro argumento deve ser um tuple de ndarrays" msgstr "o primeiro argumento deve ser um tuple de ndarrays"
#: extmod/ulab/code/numpy/vector.c #: extmod/ulab/code/numpy/transform.c extmod/ulab/code/numpy/vector.c
msgid "first argument must be an ndarray" msgid "first argument must be an ndarray"
msgstr "o primeiro argumento deve ser um ndarray" msgstr "o primeiro argumento deve ser um ndarray"
@ -3153,7 +3165,7 @@ msgstr "a chave do formato está incompleto"
msgid "incorrect padding" msgid "incorrect padding"
msgstr "preenchimento incorreto" msgstr "preenchimento incorreto"
#: extmod/ulab/code/ndarray.c #: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/transform.c
msgid "index is out of bounds" msgid "index is out of bounds"
msgstr "o índice está fora dos limites" msgstr "o índice está fora dos limites"
@ -3221,6 +3233,10 @@ msgstr "a matriz da entrada é assimétrica"
msgid "input matrix is singular" msgid "input matrix is singular"
msgstr "a matriz da entrada é singular" msgstr "a matriz da entrada é singular"
#: extmod/ulab/code/numpy/create.c
msgid "input must be 1- or 2-d"
msgstr "a entrada deve ser 1- ou 2-d"
#: extmod/ulab/code/numpy/carray/carray.c #: extmod/ulab/code/numpy/carray/carray.c
msgid "input must be a 1D ndarray" msgid "input must be a 1D ndarray"
msgstr "a entrada deve ser um 1D ndarray" msgstr "a entrada deve ser um 1D ndarray"
@ -3229,11 +3245,7 @@ msgstr "a entrada deve ser um 1D ndarray"
msgid "input must be a dense ndarray" msgid "input must be a dense ndarray"
msgstr "a entrada deve ser um ndarray denso" msgstr "a entrada deve ser um ndarray denso"
#: extmod/ulab/code/numpy/create.c #: extmod/ulab/code/user/user.c
msgid "input must be a tensor of rank 2"
msgstr "a entrada dos dados deve ser um tensor de nível 2"
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/user/user.c
msgid "input must be an ndarray" msgid "input must be an ndarray"
msgstr "a entrada deve ser um ndarray" msgstr "a entrada deve ser um ndarray"
@ -3437,8 +3449,8 @@ msgid "max_length must be 0-%d when fixed_length is %s"
msgstr "o max_length deve ser 0-%d quando Fixed_length for %s" msgstr "o max_length deve ser 0-%d quando Fixed_length for %s"
#: extmod/ulab/code/ndarray.c #: extmod/ulab/code/ndarray.c
msgid "maximum number of dimensions is 4" msgid "maximum number of dimensions is "
msgstr "O número máximo de dimensões são 4" msgstr "a quantidade máxima de dimensões é "
#: py/runtime.c #: py/runtime.c
msgid "maximum recursion depth exceeded" msgid "maximum recursion depth exceeded"
@ -3688,7 +3700,7 @@ msgstr "sequência com comprimento ímpar"
msgid "off" msgid "off"
msgstr "desligado" msgstr "desligado"
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/utils/utils.c #: extmod/ulab/code/utils/utils.c
msgid "offset is too large" msgid "offset is too large"
msgstr "o offset é muito grande" msgstr "o offset é muito grande"
@ -3843,6 +3855,7 @@ msgid "pow() with 3 arguments requires integers"
msgstr "o pow() com 3 argumentos requer números inteiros" msgstr "o pow() com 3 argumentos requer números inteiros"
#: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h #: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h
#: ports/espressif/boards/lolin_c3_mini/mpconfigboard.h
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "pressing boot button at start up.\n" msgid "pressing boot button at start up.\n"
msgstr "pressionando o botão de boot na inicialização.\n" msgstr "pressionando o botão de boot na inicialização.\n"
@ -4280,6 +4293,14 @@ msgstr "tipo não compatível para o operador"
msgid "unsupported types for %q: '%q', '%q'" msgid "unsupported types for %q: '%q', '%q'"
msgstr "tipo sem suporte para %q: '%q', '%q'" msgstr "tipo sem suporte para %q: '%q', '%q'"
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols is too high"
msgstr "usecols é muito alto"
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols keyword must be specified"
msgstr "palavra-chave para o usecols deve ser definida"
#: py/objint.c #: py/objint.c
#, c-format #, c-format
msgid "value must fit in %d byte(s)" msgid "value must fit in %d byte(s)"
@ -4321,7 +4342,17 @@ msgstr "índice do eixo errado"
msgid "wrong axis specified" msgid "wrong axis specified"
msgstr "um eixo errado foi definido" msgstr "um eixo errado foi definido"
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c #: extmod/ulab/code/numpy/io/io.c
msgid "wrong dtype"
msgstr "dtype errado"
#: extmod/ulab/code/numpy/transform.c
msgid "wrong index type"
msgstr "tipo do índice errado"
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/create.c
#: extmod/ulab/code/numpy/io/io.c extmod/ulab/code/numpy/transform.c
#: extmod/ulab/code/numpy/vector.c
msgid "wrong input type" msgid "wrong input type"
msgstr "tipo da entrada incorreta" msgstr "tipo da entrada incorreta"
@ -4329,6 +4360,10 @@ msgstr "tipo da entrada incorreta"
msgid "wrong length of condition array" msgid "wrong length of condition array"
msgstr "comprimento errado na condição da matriz" msgstr "comprimento errado na condição da matriz"
#: extmod/ulab/code/numpy/transform.c
msgid "wrong length of index array"
msgstr "comprimento errado do índice da matriz"
#: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c #: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c
msgid "wrong number of arguments" msgid "wrong number of arguments"
msgstr "quantidade errada dos argumentos" msgstr "quantidade errada dos argumentos"
@ -4373,6 +4408,12 @@ msgstr "zi deve ser de um tipo float"
msgid "zi must be of shape (n_section, 2)" msgid "zi must be of shape (n_section, 2)"
msgstr "zi deve estar na forma (n_section, 2)" msgstr "zi deve estar na forma (n_section, 2)"
#~ msgid "input must be a tensor of rank 2"
#~ msgstr "a entrada dos dados deve ser um tensor de nível 2"
#~ msgid "maximum number of dimensions is 4"
#~ msgstr "O número máximo de dimensões são 4"
#~ msgid "Watchdog timer expired." #~ msgid "Watchdog timer expired."
#~ msgstr "O temporizador Watchdog expirou." #~ msgstr "O temporizador Watchdog expirou."
@ -5295,9 +5336,6 @@ msgstr "zi deve estar na forma (n_section, 2)"
#~ msgid "wrong argument type" #~ msgid "wrong argument type"
#~ msgstr "tipo do argumento errado" #~ msgstr "tipo do argumento errado"
#~ msgid "wrong index type"
#~ msgstr "tipo do índice errado"
#~ msgid "specify size or data, but not both" #~ msgid "specify size or data, but not both"
#~ msgstr "defina o tamanho ou os dados, porém não ambos" #~ msgstr "defina o tamanho ou os dados, porém não ambos"

View File

@ -2401,6 +2401,10 @@ msgstr ""
msgid "array and index length must be equal" msgid "array and index length must be equal"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "array has too many dimensions"
msgstr ""
#: py/objarray.c shared-bindings/alarm/SleepMemory.c #: py/objarray.c shared-bindings/alarm/SleepMemory.c
#: shared-bindings/nvm/ByteArray.c #: shared-bindings/nvm/ByteArray.c
msgid "array/bytes required on right side" msgid "array/bytes required on right side"
@ -2768,6 +2772,10 @@ msgstr ""
msgid "convolve arguments must not be empty" msgid "convolve arguments must not be empty"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "corrupted file"
msgstr ""
#: extmod/ulab/code/numpy/poly.c #: extmod/ulab/code/numpy/poly.c
msgid "could not invert Vandermonde matrix" msgid "could not invert Vandermonde matrix"
msgstr "" msgstr ""
@ -2859,6 +2867,10 @@ msgstr ""
msgid "empty" msgid "empty"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "empty file"
msgstr ""
#: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c #: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c
msgid "empty heap" msgid "empty heap"
msgstr "" msgstr ""
@ -2962,7 +2974,7 @@ msgstr ""
msgid "first argument must be a tuple of ndarrays" msgid "first argument must be a tuple of ndarrays"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/vector.c #: extmod/ulab/code/numpy/transform.c extmod/ulab/code/numpy/vector.c
msgid "first argument must be an ndarray" msgid "first argument must be an ndarray"
msgstr "" msgstr ""
@ -3110,7 +3122,7 @@ msgstr ""
msgid "incorrect padding" msgid "incorrect padding"
msgstr "" msgstr ""
#: extmod/ulab/code/ndarray.c #: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/transform.c
msgid "index is out of bounds" msgid "index is out of bounds"
msgstr "" msgstr ""
@ -3177,6 +3189,10 @@ msgstr ""
msgid "input matrix is singular" msgid "input matrix is singular"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/create.c
msgid "input must be 1- or 2-d"
msgstr ""
#: extmod/ulab/code/numpy/carray/carray.c #: extmod/ulab/code/numpy/carray/carray.c
msgid "input must be a 1D ndarray" msgid "input must be a 1D ndarray"
msgstr "" msgstr ""
@ -3185,11 +3201,7 @@ msgstr ""
msgid "input must be a dense ndarray" msgid "input must be a dense ndarray"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/create.c #: extmod/ulab/code/user/user.c
msgid "input must be a tensor of rank 2"
msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/user/user.c
msgid "input must be an ndarray" msgid "input must be an ndarray"
msgstr "" msgstr ""
@ -3390,7 +3402,7 @@ msgid "max_length must be 0-%d when fixed_length is %s"
msgstr "" msgstr ""
#: extmod/ulab/code/ndarray.c #: extmod/ulab/code/ndarray.c
msgid "maximum number of dimensions is 4" msgid "maximum number of dimensions is "
msgstr "" msgstr ""
#: py/runtime.c #: py/runtime.c
@ -3639,7 +3651,7 @@ msgstr ""
msgid "off" msgid "off"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/utils/utils.c #: extmod/ulab/code/utils/utils.c
msgid "offset is too large" msgid "offset is too large"
msgstr "" msgstr ""
@ -3789,6 +3801,7 @@ msgid "pow() with 3 arguments requires integers"
msgstr "" msgstr ""
#: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h #: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h
#: ports/espressif/boards/lolin_c3_mini/mpconfigboard.h
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "pressing boot button at start up.\n" msgid "pressing boot button at start up.\n"
msgstr "" msgstr ""
@ -4224,6 +4237,14 @@ msgstr ""
msgid "unsupported types for %q: '%q', '%q'" msgid "unsupported types for %q: '%q', '%q'"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols is too high"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols keyword must be specified"
msgstr ""
#: py/objint.c #: py/objint.c
#, c-format #, c-format
msgid "value must fit in %d byte(s)" msgid "value must fit in %d byte(s)"
@ -4265,7 +4286,17 @@ msgstr ""
msgid "wrong axis specified" msgid "wrong axis specified"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c #: extmod/ulab/code/numpy/io/io.c
msgid "wrong dtype"
msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong index type"
msgstr ""
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/create.c
#: extmod/ulab/code/numpy/io/io.c extmod/ulab/code/numpy/transform.c
#: extmod/ulab/code/numpy/vector.c
msgid "wrong input type" msgid "wrong input type"
msgstr "" msgstr ""
@ -4273,6 +4304,10 @@ msgstr ""
msgid "wrong length of condition array" msgid "wrong length of condition array"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong length of index array"
msgstr ""
#: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c #: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c
msgid "wrong number of arguments" msgid "wrong number of arguments"
msgstr "" msgstr ""

View File

@ -6,7 +6,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-01-04 12:55-0600\n" "POT-Creation-Date: 2021-01-04 12:55-0600\n"
"PO-Revision-Date: 2022-07-01 17:46+0000\n" "PO-Revision-Date: 2022-07-12 13:10+0000\n"
"Last-Translator: Jonny Bergdahl <jonny@bergdahl.it>\n" "Last-Translator: Jonny Bergdahl <jonny@bergdahl.it>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
"Language: sv\n" "Language: sv\n"
@ -14,7 +14,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n" "Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.13.1-dev\n" "X-Generator: Weblate 4.14-dev\n"
#: main.c #: main.c
msgid "" msgid ""
@ -2405,6 +2405,10 @@ msgstr "argumenten måste vara ndarray"
msgid "array and index length must be equal" msgid "array and index length must be equal"
msgstr "array och indexlängd måste vara lika" msgstr "array och indexlängd måste vara lika"
#: extmod/ulab/code/numpy/io/io.c
msgid "array has too many dimensions"
msgstr "array har för många dimensioner"
#: py/objarray.c shared-bindings/alarm/SleepMemory.c #: py/objarray.c shared-bindings/alarm/SleepMemory.c
#: shared-bindings/nvm/ByteArray.c #: shared-bindings/nvm/ByteArray.c
msgid "array/bytes required on right side" msgid "array/bytes required on right side"
@ -2774,6 +2778,10 @@ msgstr "Argumenten convolve måste vara ndarray:er"
msgid "convolve arguments must not be empty" msgid "convolve arguments must not be empty"
msgstr "Argumenten convolve kan inte vara tomma" msgstr "Argumenten convolve kan inte vara tomma"
#: extmod/ulab/code/numpy/io/io.c
msgid "corrupted file"
msgstr "korrupt fil"
#: extmod/ulab/code/numpy/poly.c #: extmod/ulab/code/numpy/poly.c
msgid "could not invert Vandermonde matrix" msgid "could not invert Vandermonde matrix"
msgstr "kan inte invertera Vandermonde-matris" msgstr "kan inte invertera Vandermonde-matris"
@ -2868,6 +2876,10 @@ msgstr "dtype måste vara float eller complex"
msgid "empty" msgid "empty"
msgstr "tom" msgstr "tom"
#: extmod/ulab/code/numpy/io/io.c
msgid "empty file"
msgstr "tom fil"
#: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c #: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c
msgid "empty heap" msgid "empty heap"
msgstr "tom heap" msgstr "tom heap"
@ -2971,7 +2983,7 @@ msgstr "första argumentet måste vara en funktion"
msgid "first argument must be a tuple of ndarrays" msgid "first argument must be a tuple of ndarrays"
msgstr "första argumentet måste vara en tupel av ndarray" msgstr "första argumentet måste vara en tupel av ndarray"
#: extmod/ulab/code/numpy/vector.c #: extmod/ulab/code/numpy/transform.c extmod/ulab/code/numpy/vector.c
msgid "first argument must be an ndarray" msgid "first argument must be an ndarray"
msgstr "första argumentet måste vara en ndarray" msgstr "första argumentet måste vara en ndarray"
@ -3119,7 +3131,7 @@ msgstr "ofullständig formatnyckel"
msgid "incorrect padding" msgid "incorrect padding"
msgstr "felaktig utfyllnad" msgstr "felaktig utfyllnad"
#: extmod/ulab/code/ndarray.c #: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/transform.c
msgid "index is out of bounds" msgid "index is out of bounds"
msgstr "index är utanför gränserna" msgstr "index är utanför gränserna"
@ -3186,6 +3198,10 @@ msgstr "indatamatrisen är asymmetrisk"
msgid "input matrix is singular" msgid "input matrix is singular"
msgstr "indatamatrisen är singulär" msgstr "indatamatrisen är singulär"
#: extmod/ulab/code/numpy/create.c
msgid "input must be 1- or 2-d"
msgstr "input måste vara 1- eller 2-d"
#: extmod/ulab/code/numpy/carray/carray.c #: extmod/ulab/code/numpy/carray/carray.c
msgid "input must be a 1D ndarray" msgid "input must be a 1D ndarray"
msgstr "indata måste vara en 1D ndarray" msgstr "indata måste vara en 1D ndarray"
@ -3194,11 +3210,7 @@ msgstr "indata måste vara en 1D ndarray"
msgid "input must be a dense ndarray" msgid "input must be a dense ndarray"
msgstr "indata måste vara en dense ndarray" msgstr "indata måste vara en dense ndarray"
#: extmod/ulab/code/numpy/create.c #: extmod/ulab/code/user/user.c
msgid "input must be a tensor of rank 2"
msgstr "indata måste vara en tensor av rank 2"
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/user/user.c
msgid "input must be an ndarray" msgid "input must be an ndarray"
msgstr "indata måste vara en ndarray" msgstr "indata måste vara en ndarray"
@ -3402,8 +3414,8 @@ msgid "max_length must be 0-%d when fixed_length is %s"
msgstr "max_length måste vara 0-%d när fixed_length är %s" msgstr "max_length måste vara 0-%d när fixed_length är %s"
#: extmod/ulab/code/ndarray.c #: extmod/ulab/code/ndarray.c
msgid "maximum number of dimensions is 4" msgid "maximum number of dimensions is "
msgstr "maximalt antal dimensioner är 4" msgstr "maximalt antal dimensioner är "
#: py/runtime.c #: py/runtime.c
msgid "maximum recursion depth exceeded" msgid "maximum recursion depth exceeded"
@ -3651,7 +3663,7 @@ msgstr "sträng har udda längd"
msgid "off" msgid "off"
msgstr "av" msgstr "av"
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/utils/utils.c #: extmod/ulab/code/utils/utils.c
msgid "offset is too large" msgid "offset is too large"
msgstr "offset är för stor" msgstr "offset är för stor"
@ -3802,6 +3814,7 @@ msgid "pow() with 3 arguments requires integers"
msgstr "pow() med 3 argument kräver heltal" msgstr "pow() med 3 argument kräver heltal"
#: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h #: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h
#: ports/espressif/boards/lolin_c3_mini/mpconfigboard.h
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "pressing boot button at start up.\n" msgid "pressing boot button at start up.\n"
msgstr "trycka på startknappen vid start.\n" msgstr "trycka på startknappen vid start.\n"
@ -4239,6 +4252,14 @@ msgstr "typ stöds inte för operatören"
msgid "unsupported types for %q: '%q', '%q'" msgid "unsupported types for %q: '%q', '%q'"
msgstr "typen %q stöder inte '%q', '%q'" msgstr "typen %q stöder inte '%q', '%q'"
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols is too high"
msgstr "usecols är för hög"
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols keyword must be specified"
msgstr "nyckelordet usecols måste anges"
#: py/objint.c #: py/objint.c
#, c-format #, c-format
msgid "value must fit in %d byte(s)" msgid "value must fit in %d byte(s)"
@ -4280,7 +4301,17 @@ msgstr "fel axelindex"
msgid "wrong axis specified" msgid "wrong axis specified"
msgstr "fel axel angiven" msgstr "fel axel angiven"
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c #: extmod/ulab/code/numpy/io/io.c
msgid "wrong dtype"
msgstr "fel dtype"
#: extmod/ulab/code/numpy/transform.c
msgid "wrong index type"
msgstr "fel indextyp"
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/create.c
#: extmod/ulab/code/numpy/io/io.c extmod/ulab/code/numpy/transform.c
#: extmod/ulab/code/numpy/vector.c
msgid "wrong input type" msgid "wrong input type"
msgstr "fel indatatyp" msgstr "fel indatatyp"
@ -4288,6 +4319,10 @@ msgstr "fel indatatyp"
msgid "wrong length of condition array" msgid "wrong length of condition array"
msgstr "fel längd på villkorsmatrisen" msgstr "fel längd på villkorsmatrisen"
#: extmod/ulab/code/numpy/transform.c
msgid "wrong length of index array"
msgstr "fel längd av index array"
#: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c #: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c
msgid "wrong number of arguments" msgid "wrong number of arguments"
msgstr "fel antal argument" msgstr "fel antal argument"
@ -4332,6 +4367,12 @@ msgstr "zi måste vara av typ float"
msgid "zi must be of shape (n_section, 2)" msgid "zi must be of shape (n_section, 2)"
msgstr "zi måste vara i formen (n_section, 2)" msgstr "zi måste vara i formen (n_section, 2)"
#~ msgid "input must be a tensor of rank 2"
#~ msgstr "indata måste vara en tensor av rank 2"
#~ msgid "maximum number of dimensions is 4"
#~ msgstr "maximalt antal dimensioner är 4"
#~ msgid "Watchdog timer expired." #~ msgid "Watchdog timer expired."
#~ msgstr "Watchdog-timern har löpt ut." #~ msgstr "Watchdog-timern har löpt ut."
@ -5236,9 +5277,6 @@ msgstr "zi måste vara i formen (n_section, 2)"
#~ msgid "wrong argument type" #~ msgid "wrong argument type"
#~ msgstr "fel typ av argument" #~ msgstr "fel typ av argument"
#~ msgid "wrong index type"
#~ msgstr "fel indextyp"
#~ msgid "specify size or data, but not both" #~ msgid "specify size or data, but not both"
#~ msgstr "ange storlek eller data, men inte båda" #~ msgstr "ange storlek eller data, men inte båda"

View File

@ -2372,6 +2372,10 @@ msgstr ""
msgid "array and index length must be equal" msgid "array and index length must be equal"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "array has too many dimensions"
msgstr ""
#: py/objarray.c shared-bindings/alarm/SleepMemory.c #: py/objarray.c shared-bindings/alarm/SleepMemory.c
#: shared-bindings/nvm/ByteArray.c #: shared-bindings/nvm/ByteArray.c
msgid "array/bytes required on right side" msgid "array/bytes required on right side"
@ -2739,6 +2743,10 @@ msgstr ""
msgid "convolve arguments must not be empty" msgid "convolve arguments must not be empty"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "corrupted file"
msgstr ""
#: extmod/ulab/code/numpy/poly.c #: extmod/ulab/code/numpy/poly.c
msgid "could not invert Vandermonde matrix" msgid "could not invert Vandermonde matrix"
msgstr "" msgstr ""
@ -2830,6 +2838,10 @@ msgstr ""
msgid "empty" msgid "empty"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "empty file"
msgstr ""
#: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c #: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c
msgid "empty heap" msgid "empty heap"
msgstr "" msgstr ""
@ -2933,7 +2945,7 @@ msgstr ""
msgid "first argument must be a tuple of ndarrays" msgid "first argument must be a tuple of ndarrays"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/vector.c #: extmod/ulab/code/numpy/transform.c extmod/ulab/code/numpy/vector.c
msgid "first argument must be an ndarray" msgid "first argument must be an ndarray"
msgstr "" msgstr ""
@ -3081,7 +3093,7 @@ msgstr ""
msgid "incorrect padding" msgid "incorrect padding"
msgstr "" msgstr ""
#: extmod/ulab/code/ndarray.c #: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/transform.c
msgid "index is out of bounds" msgid "index is out of bounds"
msgstr "" msgstr ""
@ -3148,6 +3160,10 @@ msgstr ""
msgid "input matrix is singular" msgid "input matrix is singular"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/create.c
msgid "input must be 1- or 2-d"
msgstr ""
#: extmod/ulab/code/numpy/carray/carray.c #: extmod/ulab/code/numpy/carray/carray.c
msgid "input must be a 1D ndarray" msgid "input must be a 1D ndarray"
msgstr "" msgstr ""
@ -3156,11 +3172,7 @@ msgstr ""
msgid "input must be a dense ndarray" msgid "input must be a dense ndarray"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/create.c #: extmod/ulab/code/user/user.c
msgid "input must be a tensor of rank 2"
msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/user/user.c
msgid "input must be an ndarray" msgid "input must be an ndarray"
msgstr "" msgstr ""
@ -3361,7 +3373,7 @@ msgid "max_length must be 0-%d when fixed_length is %s"
msgstr "" msgstr ""
#: extmod/ulab/code/ndarray.c #: extmod/ulab/code/ndarray.c
msgid "maximum number of dimensions is 4" msgid "maximum number of dimensions is "
msgstr "" msgstr ""
#: py/runtime.c #: py/runtime.c
@ -3610,7 +3622,7 @@ msgstr ""
msgid "off" msgid "off"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/utils/utils.c #: extmod/ulab/code/utils/utils.c
msgid "offset is too large" msgid "offset is too large"
msgstr "" msgstr ""
@ -3760,6 +3772,7 @@ msgid "pow() with 3 arguments requires integers"
msgstr "" msgstr ""
#: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h #: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h
#: ports/espressif/boards/lolin_c3_mini/mpconfigboard.h
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "pressing boot button at start up.\n" msgid "pressing boot button at start up.\n"
msgstr "" msgstr ""
@ -4195,6 +4208,14 @@ msgstr ""
msgid "unsupported types for %q: '%q', '%q'" msgid "unsupported types for %q: '%q', '%q'"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols is too high"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols keyword must be specified"
msgstr ""
#: py/objint.c #: py/objint.c
#, c-format #, c-format
msgid "value must fit in %d byte(s)" msgid "value must fit in %d byte(s)"
@ -4236,7 +4257,17 @@ msgstr ""
msgid "wrong axis specified" msgid "wrong axis specified"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c #: extmod/ulab/code/numpy/io/io.c
msgid "wrong dtype"
msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong index type"
msgstr ""
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/create.c
#: extmod/ulab/code/numpy/io/io.c extmod/ulab/code/numpy/transform.c
#: extmod/ulab/code/numpy/vector.c
msgid "wrong input type" msgid "wrong input type"
msgstr "" msgstr ""
@ -4244,6 +4275,10 @@ msgstr ""
msgid "wrong length of condition array" msgid "wrong length of condition array"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong length of index array"
msgstr ""
#: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c #: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c
msgid "wrong number of arguments" msgid "wrong number of arguments"
msgstr "" msgstr ""

View File

@ -2416,6 +2416,10 @@ msgstr "cānshù bìxū shì ndarrays"
msgid "array and index length must be equal" msgid "array and index length must be equal"
msgstr "shù zǔ hé suǒ yǐn cháng dù bì xū xiāng děng" msgstr "shù zǔ hé suǒ yǐn cháng dù bì xū xiāng děng"
#: extmod/ulab/code/numpy/io/io.c
msgid "array has too many dimensions"
msgstr ""
#: py/objarray.c shared-bindings/alarm/SleepMemory.c #: py/objarray.c shared-bindings/alarm/SleepMemory.c
#: shared-bindings/nvm/ByteArray.c #: shared-bindings/nvm/ByteArray.c
msgid "array/bytes required on right side" msgid "array/bytes required on right side"
@ -2787,6 +2791,10 @@ msgstr "juàn jī cānshù bìxū shì ndarrays"
msgid "convolve arguments must not be empty" msgid "convolve arguments must not be empty"
msgstr "juàn jī cān shǔ bùnéng wéi kōng" msgstr "juàn jī cān shǔ bùnéng wéi kōng"
#: extmod/ulab/code/numpy/io/io.c
msgid "corrupted file"
msgstr ""
#: extmod/ulab/code/numpy/poly.c #: extmod/ulab/code/numpy/poly.c
msgid "could not invert Vandermonde matrix" msgid "could not invert Vandermonde matrix"
msgstr "wúfǎ fǎn zhuǎn fàndéméng dé jǔzhèn" msgstr "wúfǎ fǎn zhuǎn fàndéméng dé jǔzhèn"
@ -2880,6 +2888,10 @@ msgstr "dtype bì xū shì fú diǎn xíng huò fù shù"
msgid "empty" msgid "empty"
msgstr "kòngxián" msgstr "kòngxián"
#: extmod/ulab/code/numpy/io/io.c
msgid "empty file"
msgstr ""
#: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c #: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c
msgid "empty heap" msgid "empty heap"
msgstr "kōng yīn yīnxiào" msgstr "kōng yīn yīnxiào"
@ -2983,7 +2995,7 @@ msgstr "dì yīgè cānshù bìxū shì yī gè hánshù"
msgid "first argument must be a tuple of ndarrays" msgid "first argument must be a tuple of ndarrays"
msgstr "dì yī gè cān shù bì xū shì yí gè yuán zǔ ndarrays" msgstr "dì yī gè cān shù bì xū shì yí gè yuán zǔ ndarrays"
#: extmod/ulab/code/numpy/vector.c #: extmod/ulab/code/numpy/transform.c extmod/ulab/code/numpy/vector.c
msgid "first argument must be an ndarray" msgid "first argument must be an ndarray"
msgstr "dì yī gè cānshù bìxū shì ndarray" msgstr "dì yī gè cānshù bìxū shì ndarray"
@ -3131,7 +3143,7 @@ msgstr "géshì bù wánzhěng de mì yào"
msgid "incorrect padding" msgid "incorrect padding"
msgstr "bù zhèngquè de tiánchōng" msgstr "bù zhèngquè de tiánchōng"
#: extmod/ulab/code/ndarray.c #: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/transform.c
msgid "index is out of bounds" msgid "index is out of bounds"
msgstr "suǒyǐn chāochū fànwéi" msgstr "suǒyǐn chāochū fànwéi"
@ -3198,6 +3210,10 @@ msgstr "shūrù jǔzhèn bù duìchèn"
msgid "input matrix is singular" msgid "input matrix is singular"
msgstr "shūrù jǔzhèn shì qíyì de" msgstr "shūrù jǔzhèn shì qíyì de"
#: extmod/ulab/code/numpy/create.c
msgid "input must be 1- or 2-d"
msgstr ""
#: extmod/ulab/code/numpy/carray/carray.c #: extmod/ulab/code/numpy/carray/carray.c
msgid "input must be a 1D ndarray" msgid "input must be a 1D ndarray"
msgstr "shū rù bì xū shì 1D ndarray" msgstr "shū rù bì xū shì 1D ndarray"
@ -3206,11 +3222,7 @@ msgstr "shū rù bì xū shì 1D ndarray"
msgid "input must be a dense ndarray" msgid "input must be a dense ndarray"
msgstr "shū rù bì xū shì mì jí de ndarray" msgstr "shū rù bì xū shì mì jí de ndarray"
#: extmod/ulab/code/numpy/create.c #: extmod/ulab/code/user/user.c
msgid "input must be a tensor of rank 2"
msgstr "shū rù bì xū shì děng jí 2 de zhāng liàng"
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/user/user.c
msgid "input must be an ndarray" msgid "input must be an ndarray"
msgstr "shū rù bì xū shì ndarray" msgstr "shū rù bì xū shì ndarray"
@ -3412,8 +3424,8 @@ msgid "max_length must be 0-%d when fixed_length is %s"
msgstr "dāng fixed_length de zhí wéi %s shí, max_length bì xū wéi 0-%d" msgstr "dāng fixed_length de zhí wéi %s shí, max_length bì xū wéi 0-%d"
#: extmod/ulab/code/ndarray.c #: extmod/ulab/code/ndarray.c
msgid "maximum number of dimensions is 4" msgid "maximum number of dimensions is "
msgstr "zuì dà chǐ cùn shù wéi 4" msgstr ""
#: py/runtime.c #: py/runtime.c
msgid "maximum recursion depth exceeded" msgid "maximum recursion depth exceeded"
@ -3661,7 +3673,7 @@ msgstr "jīshù zìfú chuàn"
msgid "off" msgid "off"
msgstr "" msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/utils/utils.c #: extmod/ulab/code/utils/utils.c
msgid "offset is too large" msgid "offset is too large"
msgstr "piān yí tài dà" msgstr "piān yí tài dà"
@ -3811,6 +3823,7 @@ msgid "pow() with 3 arguments requires integers"
msgstr "pow() yǒu 3 cānshù xūyào zhěngshù" msgstr "pow() yǒu 3 cānshù xūyào zhěngshù"
#: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h #: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h
#: ports/espressif/boards/lolin_c3_mini/mpconfigboard.h
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "pressing boot button at start up.\n" msgid "pressing boot button at start up.\n"
msgstr "Zài qǐdòng shí àn qǐdòng ànniǔ.\n" msgstr "Zài qǐdòng shí àn qǐdòng ànniǔ.\n"
@ -4251,6 +4264,14 @@ msgstr "bù zhīchí de cāozuò zhě lèixíng"
msgid "unsupported types for %q: '%q', '%q'" msgid "unsupported types for %q: '%q', '%q'"
msgstr "%q bù zhīchí de lèixíng: '%q', '%q'" msgstr "%q bù zhīchí de lèixíng: '%q', '%q'"
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols is too high"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols keyword must be specified"
msgstr ""
#: py/objint.c #: py/objint.c
#, c-format #, c-format
msgid "value must fit in %d byte(s)" msgid "value must fit in %d byte(s)"
@ -4292,7 +4313,17 @@ msgstr "cuò wù de zhóu suǒ yǐn"
msgid "wrong axis specified" msgid "wrong axis specified"
msgstr "zhǐ dìng de zhóu cuò wù" msgstr "zhǐ dìng de zhóu cuò wù"
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c #: extmod/ulab/code/numpy/io/io.c
msgid "wrong dtype"
msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong index type"
msgstr "cuòwù de suǒyǐn lèixíng"
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/create.c
#: extmod/ulab/code/numpy/io/io.c extmod/ulab/code/numpy/transform.c
#: extmod/ulab/code/numpy/vector.c
msgid "wrong input type" msgid "wrong input type"
msgstr "shūrù lèixíng cuòwù" msgstr "shūrù lèixíng cuòwù"
@ -4300,6 +4331,10 @@ msgstr "shūrù lèixíng cuòwù"
msgid "wrong length of condition array" msgid "wrong length of condition array"
msgstr "tiáo jiàn shù zǔ de cháng dù cuò wù" msgstr "tiáo jiàn shù zǔ de cháng dù cuò wù"
#: extmod/ulab/code/numpy/transform.c
msgid "wrong length of index array"
msgstr ""
#: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c #: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c
msgid "wrong number of arguments" msgid "wrong number of arguments"
msgstr "cānshù shù cuòwù" msgstr "cānshù shù cuòwù"
@ -4344,6 +4379,12 @@ msgstr "zi bìxū wèi fú diǎn xíng"
msgid "zi must be of shape (n_section, 2)" msgid "zi must be of shape (n_section, 2)"
msgstr "zi bìxū jùyǒu xíngzhuàng (n_section,2)" msgstr "zi bìxū jùyǒu xíngzhuàng (n_section,2)"
#~ msgid "input must be a tensor of rank 2"
#~ msgstr "shū rù bì xū shì děng jí 2 de zhāng liàng"
#~ msgid "maximum number of dimensions is 4"
#~ msgstr "zuì dà chǐ cùn shù wéi 4"
#~ msgid "Watchdog timer expired." #~ msgid "Watchdog timer expired."
#~ msgstr "Kān mén gǒu dìngshí qì yǐ guòqí." #~ msgstr "Kān mén gǒu dìngshí qì yǐ guòqí."
@ -5214,9 +5255,6 @@ msgstr "zi bìxū jùyǒu xíngzhuàng (n_section,2)"
#~ msgid "wrong argument type" #~ msgid "wrong argument type"
#~ msgstr "cuòwù de cānshù lèixíng" #~ msgstr "cuòwù de cānshù lèixíng"
#~ msgid "wrong index type"
#~ msgstr "cuòwù de suǒyǐn lèixíng"
#~ msgid "Must provide SCK pin" #~ msgid "Must provide SCK pin"
#~ msgstr "bì xū tí gòng SCK yǐn jiǎo" #~ msgstr "bì xū tí gòng SCK yǐn jiǎo"

View File

@ -13,6 +13,8 @@ LONGINT_IMPL = MPZ
CIRCUITPY_LTO_PARTITION = one CIRCUITPY_LTO_PARTITION = one
CIRCUITPY_AESIO = 0 CIRCUITPY_AESIO = 0
CIRCUITPY_FLOPPYIO = 0
CIRCUITPY_GIFIO = 0
CIRCUITPY_ONEWIREIO = 0 CIRCUITPY_ONEWIREIO = 0
CIRCUITPY_PARALLELDISPLAY = 0 CIRCUITPY_PARALLELDISPLAY = 0
CIRCUITPY_SDCARDIO = 0 CIRCUITPY_SDCARDIO = 0

View File

@ -1,12 +1,12 @@
# Select the board to build for. # Select the board to build for.
BOARD=raspberrypi_pi4 BOARD?=raspberrypi_pi4b
ifeq ($(BOARD),) ifeq ($(BOARD),)
$(error You must provide a BOARD parameter) $(error You must provide a BOARD parameter)
else else
ifeq ($(wildcard boards/$(BOARD)/.),) ifeq ($(wildcard boards/$(BOARD)/.),)
$(error Invalid BOARD specified) $(error Invalid BOARD "$(BOARD)" specified)
endif endif
endif endif
# If the build directory is not given, make it reflect the board name. # If the build directory is not given, make it reflect the board name.

View File

@ -0,0 +1,110 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2020 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include "supervisor/board.h"
#include "mpconfigboard.h"
#include "shared-bindings/microcontroller/Pin.h"
#include "shared-bindings/busio/SPI.h"
#include "shared-bindings/displayio/FourWire.h"
#include "shared-module/displayio/__init__.h"
#include "shared-module/displayio/mipi_constants.h"
uint8_t display_init_sequence[] = {
0x01, 0x80, 0x96, // _SWRESET and Delay 150ms
0x11, 0x80, 0xFF, // _SLPOUT and Delay 500ms
0x3A, 0x81, 0x55, 0x0A, // _COLMOD and Delay 10ms
0x21, 0x80, 0x0A, // _INVON
0x13, 0x80, 0x0A, // _NORON and Delay 10ms
0x36, 0x01, 0xA0, // _MADCTL
0x29, 0x80, 0xFF, // _DISPON and Delay 500ms
};
void board_init(void) {
busio_spi_obj_t *spi = &displays[0].fourwire_bus.inline_bus;
common_hal_busio_spi_construct(spi, &pin_GPIO7, &pin_GPIO6, NULL, false);
common_hal_busio_spi_never_reset(spi);
displayio_fourwire_obj_t *bus = &displays[0].fourwire_bus;
bus->base.type = &displayio_fourwire_type;
common_hal_displayio_fourwire_construct(bus,
spi,
&pin_GPIO4, // TFT_DC Command or data
&pin_GPIO5, // TFT_CS Chip select
&pin_GPIO48, // TFT_RST Reset
60000000, // Baudrate
0, // Polarity
0); // Phase
displayio_display_obj_t *display = &displays[0].display;
display->base.type = &displayio_display_type;
common_hal_displayio_display_construct(display,
bus,
320, // Width
240, // Height
0, // column start
0, // row start
0, // rotation
16, // Color depth
false, // Grayscale
false, // pixels in a byte share a row. Only valid for depths < 8
1, // bytes per cell. Only valid for depths < 8
false, // reverse_pixels_in_byte. Only valid for depths < 8
true, // reverse_pixels_in_word
MIPI_COMMAND_SET_COLUMN_ADDRESS, // Set column command
MIPI_COMMAND_SET_PAGE_ADDRESS, // Set row command
MIPI_COMMAND_WRITE_MEMORY_START, // Write memory command
display_init_sequence,
sizeof(display_init_sequence),
&pin_GPIO45, // backlight pin
NO_BRIGHTNESS_COMMAND,
1.0f, // brightness (ignored)
true, // auto_brightness
false, // single_byte_bounds
false, // data_as_commands
true, // auto_refresh
60, // native_frames_per_second
false, // backlight_on_high
false, // SH1107_addressing
50000); // backlight pwm frequency
// Debug UART
#ifdef DEBUG
common_hal_never_reset_pin(&pin_GPIO43);
common_hal_never_reset_pin(&pin_GPIO44);
#endif
}
bool board_requests_safe_mode(void) {
return false;
}
void reset_board(void) {
}
void board_deinit(void) {
}

View File

@ -0,0 +1,30 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2019 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
// Micropython setup
#define MICROPY_HW_BOARD_NAME "ESP32-S3-Box-Lite"
#define MICROPY_HW_MCU_NAME "ESP32S3"

View File

@ -0,0 +1,17 @@
USB_VID = 0x303A
USB_PID = 0x700D
USB_PRODUCT = "ESP32-S3-Box-Lite"
USB_MANUFACTURER = "Espressif"
IDF_TARGET = esp32s3
INTERNAL_FLASH_FILESYSTEM = 1
LONGINT_IMPL = MPZ
# The default queue depth of 16 overflows on release builds,
# so increase it to 32.
CFLAGS += -DCFG_TUD_TASK_QUEUE_SZ=32
CIRCUITPY_ESP_FLASH_MODE=dio
CIRCUITPY_ESP_FLASH_FREQ=40m
CIRCUITPY_ESP_FLASH_SIZE=16MB

View File

@ -0,0 +1,67 @@
#include "shared-bindings/board/__init__.h"
#include "shared-module/displayio/__init__.h"
STATIC const mp_rom_map_elem_t board_module_globals_table[] = {
CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS
// First PMOD connector
{ MP_ROM_QSTR(MP_QSTR_G9), MP_ROM_PTR(&pin_GPIO9) },
{ MP_ROM_QSTR(MP_QSTR_U0TXD), MP_ROM_PTR(&pin_GPIO43) },
{ MP_ROM_QSTR(MP_QSTR_G43), MP_ROM_PTR(&pin_GPIO43) },
{ MP_ROM_QSTR(MP_QSTR_U0RXD), MP_ROM_PTR(&pin_GPIO44) },
{ MP_ROM_QSTR(MP_QSTR_G44), MP_ROM_PTR(&pin_GPIO44) },
{ MP_ROM_QSTR(MP_QSTR_CS), MP_ROM_PTR(&pin_GPIO10) },
{ MP_ROM_QSTR(MP_QSTR_G10), MP_ROM_PTR(&pin_GPIO10) },
{ MP_ROM_QSTR(MP_QSTR_MOSI), MP_ROM_PTR(&pin_GPIO11) },
{ MP_ROM_QSTR(MP_QSTR_G11), MP_ROM_PTR(&pin_GPIO11) },
{ MP_ROM_QSTR(MP_QSTR_MISO), MP_ROM_PTR(&pin_GPIO13) },
{ MP_ROM_QSTR(MP_QSTR_G13), MP_ROM_PTR(&pin_GPIO13) },
{ MP_ROM_QSTR(MP_QSTR_CLK), MP_ROM_PTR(&pin_GPIO12) },
{ MP_ROM_QSTR(MP_QSTR_G12), MP_ROM_PTR(&pin_GPIO12) },
{ MP_ROM_QSTR(MP_QSTR_G14), MP_ROM_PTR(&pin_GPIO14) },
// Second PMOD connector
{ MP_ROM_QSTR(MP_QSTR_G38), MP_ROM_PTR(&pin_GPIO38) },
{ MP_ROM_QSTR(MP_QSTR_G39), MP_ROM_PTR(&pin_GPIO39) },
{ MP_ROM_QSTR(MP_QSTR_SCL2), MP_ROM_PTR(&pin_GPIO40) },
{ MP_ROM_QSTR(MP_QSTR_G40), MP_ROM_PTR(&pin_GPIO40) },
{ MP_ROM_QSTR(MP_QSTR_SDA2), MP_ROM_PTR(&pin_GPIO41) },
{ MP_ROM_QSTR(MP_QSTR_G41), MP_ROM_PTR(&pin_GPIO41) },
{ MP_ROM_QSTR(MP_QSTR_G42), MP_ROM_PTR(&pin_GPIO42) },
{ MP_ROM_QSTR(MP_QSTR_G21), MP_ROM_PTR(&pin_GPIO21) },
// LCD & touchscreen
{ MP_ROM_QSTR(MP_QSTR_LCD_DC), MP_ROM_PTR(&pin_GPIO4) },
{ MP_ROM_QSTR(MP_QSTR_LCD_CS), MP_ROM_PTR(&pin_GPIO5) },
{ MP_ROM_QSTR(MP_QSTR_LCD_MOSI), MP_ROM_PTR(&pin_GPIO6) },
{ MP_ROM_QSTR(MP_QSTR_LCD_SCK), MP_ROM_PTR(&pin_GPIO7) },
{ MP_ROM_QSTR(MP_QSTR_LCD_RST), MP_ROM_PTR(&pin_GPIO48) },
{ MP_ROM_QSTR(MP_QSTR_LCD_CTRL), MP_ROM_PTR(&pin_GPIO45) },
{ MP_ROM_QSTR(MP_QSTR_CTP_INT), MP_ROM_PTR(&pin_GPIO3) },
// Audio
{ MP_ROM_QSTR(MP_QSTR_I2S_ADC_SDOUT), MP_ROM_PTR(&pin_GPIO16) },
{ MP_ROM_QSTR(MP_QSTR_I2S_MCLK), MP_ROM_PTR(&pin_GPIO2) },
{ MP_ROM_QSTR(MP_QSTR_I2S_SCLK), MP_ROM_PTR(&pin_GPIO17) },
{ MP_ROM_QSTR(MP_QSTR_I2S_LRCK), MP_ROM_PTR(&pin_GPIO47) },
{ MP_ROM_QSTR(MP_QSTR_I2S_CODEC_DSDIN), MP_ROM_PTR(&pin_GPIO15) },
{ MP_ROM_QSTR(MP_QSTR_PA_CTRL), MP_ROM_PTR(&pin_GPIO46) },
{ MP_ROM_QSTR(MP_QSTR_MUTE_STATUS), MP_ROM_PTR(&pin_GPIO1) },
// Internal I2C bus
{ MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_GPIO8) },
{ MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_GPIO18) },
// boot button, also usable as a software button
{ MP_ROM_QSTR(MP_QSTR_BOOT), MP_ROM_PTR(&pin_GPIO0) },
{ MP_ROM_QSTR(MP_QSTR_DISPLAY), MP_ROM_PTR(&displays[0].display)}
};
MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table);

View File

@ -0,0 +1,37 @@
CONFIG_ESP32S3_SPIRAM_SUPPORT=y
#
# SPI RAM config
#
# CONFIG_SPIRAM_MODE_QUAD is not set
CONFIG_SPIRAM_MODE_OCT=y
CONFIG_SPIRAM_TYPE_AUTO=y
# CONFIG_SPIRAM_TYPE_ESPPSRAM64 is not set
CONFIG_SPIRAM_SIZE=-1
# end of SPI RAM config
CONFIG_DEFAULT_PSRAM_CLK_IO=30
#
# PSRAM Clock and CS IO for ESP32S3
#
CONFIG_DEFAULT_PSRAM_CS_IO=26
# end of PSRAM Clock and CS IO for ESP32S3
# CONFIG_SPIRAM_FETCH_INSTRUCTIONS is not set
# CONFIG_SPIRAM_RODATA is not set
CONFIG_SPIRAM_SPEED_80M=y
# CONFIG_SPIRAM_SPEED_40M is not set
CONFIG_SPIRAM=y
CONFIG_SPIRAM_BOOT_INIT=y
# CONFIG_SPIRAM_IGNORE_NOTFOUND is not set
# CONFIG_SPIRAM_USE_MEMMAP is not set
# CONFIG_SPIRAM_USE_CAPS_ALLOC is not set
CONFIG_SPIRAM_USE_MALLOC=y
CONFIG_SPIRAM_MEMTEST=y
CONFIG_SPIRAM_MALLOC_ALWAYSINTERNAL=16384
# CONFIG_SPIRAM_TRY_ALLOCATE_WIFI_LWIP is not set
CONFIG_SPIRAM_MALLOC_RESERVE_INTERNAL=32768
#
# LWIP
#
CONFIG_LWIP_LOCAL_HOSTNAME="espressif-esp32s3"
# end of LWIP

View File

@ -0,0 +1,57 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2022 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include "shared-bindings/hashlib/Hash.h"
#include "components/mbedtls/mbedtls/include/mbedtls/ssl.h"
void common_hal_hashlib_hash_update(hashlib_hash_obj_t *self, const uint8_t *data, size_t datalen) {
if (self->hash_type == MBEDTLS_SSL_HASH_SHA1) {
mbedtls_sha1_update_ret(&self->sha1, data, datalen);
return;
}
}
void common_hal_hashlib_hash_digest(hashlib_hash_obj_t *self, uint8_t *data, size_t datalen) {
if (datalen < common_hal_hashlib_hash_get_digest_size(self)) {
return;
}
if (self->hash_type == MBEDTLS_SSL_HASH_SHA1) {
// We copy the sha1 state so we can continue to update if needed or get
// the digest a second time.
mbedtls_sha1_context copy;
mbedtls_sha1_clone(&copy, &self->sha1);
mbedtls_sha1_finish_ret(&self->sha1, data);
mbedtls_sha1_clone(&self->sha1, &copy);
}
}
size_t common_hal_hashlib_hash_get_digest_size(hashlib_hash_obj_t *self) {
if (self->hash_type == MBEDTLS_SSL_HASH_SHA1) {
return 20;
}
return 0;
}

View File

@ -0,0 +1,41 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2022 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#ifndef MICROPY_INCLUDED_ESPRESSIF_COMMON_HAL_HASHLIB_HASH_H
#define MICROPY_INCLUDED_ESPRESSIF_COMMON_HAL_HASHLIB_HASH_H
#include "components/mbedtls/mbedtls/include/mbedtls/sha1.h"
typedef struct {
mp_obj_base_t base;
union {
mbedtls_sha1_context sha1;
};
// Of MBEDTLS_SSL_HASH_*
uint8_t hash_type;
} hashlib_hash_obj_t;
#endif // MICROPY_INCLUDED_ESPRESSIF_COMMON_HAL_HASHLIB_HASH_H

View File

@ -0,0 +1,40 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2022 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include "shared-bindings/hashlib/__init__.h"
#include "components/mbedtls/mbedtls/include/mbedtls/ssl.h"
bool common_hal_hashlib_new(hashlib_hash_obj_t *self, const char *algorithm) {
if (strcmp(algorithm, "sha1") == 0) {
self->hash_type = MBEDTLS_SSL_HASH_SHA1;
mbedtls_sha1_init(&self->sha1);
mbedtls_sha1_starts_ret(&self->sha1);
return true;
}
return false;
}

View File

@ -139,14 +139,14 @@ void common_hal_wifi_radio_set_mac_address(wifi_radio_obj_t *self, const uint8_t
esp_wifi_set_mac(ESP_IF_WIFI_STA, mac); esp_wifi_set_mac(ESP_IF_WIFI_STA, mac);
} }
uint8_t common_hal_wifi_radio_get_tx_power(wifi_radio_obj_t *self) { mp_float_t common_hal_wifi_radio_get_tx_power(wifi_radio_obj_t *self) {
int8_t tx_power; int8_t tx_power;
esp_wifi_get_max_tx_power(&tx_power); esp_wifi_get_max_tx_power(&tx_power);
return tx_power / 4; return tx_power / 4.0f;
} }
void common_hal_wifi_radio_set_tx_power(wifi_radio_obj_t *self, const uint8_t tx_power) { void common_hal_wifi_radio_set_tx_power(wifi_radio_obj_t *self, const mp_float_t tx_power) {
esp_wifi_set_max_tx_power(tx_power * 4); esp_wifi_set_max_tx_power(tx_power * 4.0f);
} }
mp_obj_t common_hal_wifi_radio_get_mac_address_ap(wifi_radio_obj_t *self) { mp_obj_t common_hal_wifi_radio_get_mac_address_ap(wifi_radio_obj_t *self) {

View File

@ -19,6 +19,7 @@ CIRCUITPY_COUNTIO ?= 1
CIRCUITPY_DUALBANK ?= 1 CIRCUITPY_DUALBANK ?= 1
CIRCUITPY_FRAMEBUFFERIO ?= 1 CIRCUITPY_FRAMEBUFFERIO ?= 1
CIRCUITPY_FREQUENCYIO ?= 1 CIRCUITPY_FREQUENCYIO ?= 1
CIRCUITPY_HASHLIB ?= 1
CIRCUITPY_IMAGECAPTURE ?= 1 CIRCUITPY_IMAGECAPTURE ?= 1
CIRCUITPY_I2CPERIPHERAL ?= 1 CIRCUITPY_I2CPERIPHERAL ?= 1
CIRCUITPY_RGBMATRIX ?= 1 CIRCUITPY_RGBMATRIX ?= 1

View File

@ -1,2 +1,4 @@
#define MICROPY_HW_BOARD_NAME "ELECFREAKS PICO:ED" #define MICROPY_HW_BOARD_NAME "ELECFREAKS PICO:ED"
#define MICROPY_HW_MCU_NAME "rp2040" #define MICROPY_HW_MCU_NAME "rp2040"
#define MICROPY_HW_LED_STATUS (&pin_GPIO25)

View File

@ -311,7 +311,7 @@ uint32_t common_hal_busio_uart_rx_characters_available(busio_uart_obj_t *self) {
// The UART only interrupts after a threshold so make sure to copy anything // The UART only interrupts after a threshold so make sure to copy anything
// out of its FIFO before measuring how many bytes we've received. // out of its FIFO before measuring how many bytes we've received.
_copy_into_ringbuf(&self->ringbuf, self->uart); _copy_into_ringbuf(&self->ringbuf, self->uart);
irq_set_enabled(self->uart_irq_id, false); irq_set_enabled(self->uart_irq_id, true);
return ringbuf_num_filled(&self->ringbuf); return ringbuf_num_filled(&self->ringbuf);
} }

View File

@ -8,6 +8,9 @@ ifeq ($(MCU_VARIANT),$(filter $(MCU_VARIANT),STM32F405xx STM32F407xx))
CIRCUITPY_SDIOIO ?= 1 CIRCUITPY_SDIOIO ?= 1
# Number of USB endpoint pairs. # Number of USB endpoint pairs.
USB_NUM_ENDPOINT_PAIRS = 4 USB_NUM_ENDPOINT_PAIRS = 4
endif
ifeq ($(MCU_VARIANT),STM32F407xx)
UF2_FAMILY_ID ?= 0x6d0922fa UF2_FAMILY_ID ?= 0x6d0922fa
endif endif

View File

@ -207,6 +207,9 @@ endif
ifeq ($(CIRCUITPY_GNSS),1) ifeq ($(CIRCUITPY_GNSS),1)
SRC_PATTERNS += gnss/% SRC_PATTERNS += gnss/%
endif endif
ifeq ($(CIRCUITPY_HASHLIB),1)
SRC_PATTERNS += hashlib/%
endif
ifeq ($(CIRCUITPY_I2CPERIPHERAL),1) ifeq ($(CIRCUITPY_I2CPERIPHERAL),1)
SRC_PATTERNS += i2cperipheral/% SRC_PATTERNS += i2cperipheral/%
endif endif
@ -419,6 +422,8 @@ SRC_COMMON_HAL_ALL = \
gnss/GNSS.c \ gnss/GNSS.c \
gnss/PositionFix.c \ gnss/PositionFix.c \
gnss/SatelliteSystem.c \ gnss/SatelliteSystem.c \
hashlib/__init__.c \
hashlib/Hash.c \
i2cperipheral/I2CPeripheral.c \ i2cperipheral/I2CPeripheral.c \
i2cperipheral/__init__.c \ i2cperipheral/__init__.c \
microcontroller/Pin.c \ microcontroller/Pin.c \

View File

@ -230,7 +230,7 @@ CIRCUITPY_GETPASS ?= $(CIRCUITPY_FULL_BUILD)
CFLAGS += -DCIRCUITPY_GETPASS=$(CIRCUITPY_GETPASS) CFLAGS += -DCIRCUITPY_GETPASS=$(CIRCUITPY_GETPASS)
ifeq ($(CIRCUITPY_DISPLAYIO),1) ifeq ($(CIRCUITPY_DISPLAYIO),1)
CIRCUITPY_GIFIO ?= $(CIRCUITPY_FULL_BUILD) CIRCUITPY_GIFIO ?= $(CIRCUITPY_CAMERA)
else else
CIRCUITPY_GIFIO ?= 0 CIRCUITPY_GIFIO ?= 0
endif endif
@ -239,6 +239,9 @@ CFLAGS += -DCIRCUITPY_GIFIO=$(CIRCUITPY_GIFIO)
CIRCUITPY_GNSS ?= 0 CIRCUITPY_GNSS ?= 0
CFLAGS += -DCIRCUITPY_GNSS=$(CIRCUITPY_GNSS) CFLAGS += -DCIRCUITPY_GNSS=$(CIRCUITPY_GNSS)
CIRCUITPY_HASHLIB ?= $(CIRCUITPY_WEB_WORKFLOW)
CFLAGS += -DCIRCUITPY_HASHLIB=$(CIRCUITPY_HASHLIB)
CIRCUITPY_I2CPERIPHERAL ?= $(CIRCUITPY_FULL_BUILD) CIRCUITPY_I2CPERIPHERAL ?= $(CIRCUITPY_FULL_BUILD)
CFLAGS += -DCIRCUITPY_I2CPERIPHERAL=$(CIRCUITPY_I2CPERIPHERAL) CFLAGS += -DCIRCUITPY_I2CPERIPHERAL=$(CIRCUITPY_I2CPERIPHERAL)

View File

@ -26,3 +26,7 @@ pyelftools
# for stubs and annotations # for stubs and annotations
adafruit-circuitpython-typing adafruit-circuitpython-typing
# for web workflow minify
minify_html
jsmin

View File

@ -0,0 +1,96 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2022 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include "shared-bindings/hashlib/Hash.h"
#include "py/obj.h"
#include "py/objproperty.h"
#include "py/objstr.h"
#include "py/runtime.h"
//| class Hash:
//| """In progress hash algorithm. This object is always created by a `hashlib.new()`. It has no
//| user-visible constructor."""
//|
//| digest_size: int
//| """Digest size in bytes"""
//|
STATIC mp_obj_t hashlib_hash_get_digest_size(mp_obj_t self_in) {
mp_check_self(mp_obj_is_type(self_in, &hashlib_hash_type));
hashlib_hash_obj_t *self = MP_OBJ_TO_PTR(self_in);
return MP_OBJ_NEW_SMALL_INT(common_hal_hashlib_hash_get_digest_size(self));
}
MP_PROPERTY_GETTER(hashlib_hash_digest_size_obj, hashlib_hash_get_digest_size);
//| def update(self, data: ReadableBuffer) -> None:
//| """Update the hash with the given bytes.
//|
//| :param ~circuitpython_typing.ReadableBuffer data: Update the hash from data in this buffer"""
//| ...
//|
mp_obj_t hashlib_hash_update(mp_obj_t self_in, mp_obj_t buf_in) {
mp_check_self(mp_obj_is_type(self_in, &hashlib_hash_type));
hashlib_hash_obj_t *self = MP_OBJ_TO_PTR(self_in);
mp_buffer_info_t bufinfo;
mp_get_buffer_raise(buf_in, &bufinfo, MP_BUFFER_READ);
common_hal_hashlib_hash_update(self, bufinfo.buf, bufinfo.len);
return mp_const_none;
}
STATIC MP_DEFINE_CONST_FUN_OBJ_2(hashlib_hash_update_obj, hashlib_hash_update);
//| def digest(self) -> bytes:
//| """Returns the current digest as bytes() with a length of `hashlib.Hash.digest_size`."""
//| ...
//|
STATIC mp_obj_t hashlib_hash_digest(mp_obj_t self_in) {
mp_check_self(mp_obj_is_type(self_in, &hashlib_hash_type));
hashlib_hash_obj_t *self = MP_OBJ_TO_PTR(self_in);
size_t size = common_hal_hashlib_hash_get_digest_size(self);
mp_obj_t obj = mp_obj_new_bytes_of_zeros(size);
mp_obj_str_t *o = MP_OBJ_TO_PTR(obj);
common_hal_hashlib_hash_digest(self, (uint8_t *)o->data, size);
return obj;
}
STATIC MP_DEFINE_CONST_FUN_OBJ_1(hashlib_hash_digest_obj, hashlib_hash_digest);
STATIC const mp_rom_map_elem_t hashlib_hash_locals_dict_table[] = {
{ MP_ROM_QSTR(MP_QSTR_digest_size), MP_ROM_PTR(&hashlib_hash_digest_size_obj) },
{ MP_ROM_QSTR(MP_QSTR_update), MP_ROM_PTR(&hashlib_hash_update_obj) },
{ MP_ROM_QSTR(MP_QSTR_digest), MP_ROM_PTR(&hashlib_hash_digest_obj) },
};
STATIC MP_DEFINE_CONST_DICT(hashlib_hash_locals_dict, hashlib_hash_locals_dict_table);
const mp_obj_type_t hashlib_hash_type = {
{ &mp_type_type },
.name = MP_QSTR_Hash,
.locals_dict = (mp_obj_dict_t *)&hashlib_hash_locals_dict,
};

View File

@ -0,0 +1,43 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2022 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#ifndef MICROPY_INCLUDED_SHARED_BINDINGS_HASHLIB_HASH_H
#define MICROPY_INCLUDED_SHARED_BINDINGS_HASHLIB_HASH_H
#include "py/obj.h"
#include "common-hal/hashlib/Hash.h"
extern const mp_obj_type_t hashlib_hash_type;
// So that new can call it when given data.
mp_obj_t hashlib_hash_update(mp_obj_t self_in, mp_obj_t buf_in);
void common_hal_hashlib_hash_update(hashlib_hash_obj_t *self, const uint8_t *data, size_t datalen);
void common_hal_hashlib_hash_digest(hashlib_hash_obj_t *self, uint8_t *data, size_t datalen);
size_t common_hal_hashlib_hash_get_digest_size(hashlib_hash_obj_t *self);
#endif // MICROPY_INCLUDED_SHARED_BINDINGS_HASHLIB_HASH_H

View File

@ -0,0 +1,90 @@
/*
* This file is part of the Micro Python project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2022 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include <string.h>
#include "py/obj.h"
#include "py/mpconfig.h"
#include "py/runtime.h"
#include "shared-bindings/hashlib/__init__.h"
#include "shared-bindings/hashlib/Hash.h"
#include "supervisor/shared/translate/translate.h"
//| """Hashing related functions
//|
//| |see_cpython_module| :mod:`cpython:hashlib`.
//| """
//|
//| def new(name, data=b"") -> hashlib.Hash:
//| """Returns a Hash object setup for the named algorithm. Raises ValueError when the named
//| algorithm is unsupported.
//|
//| :return: a hash object for the given algorithm
//| :rtype: hashlib.Hash"""
//| ...
//|
STATIC mp_obj_t hashlib_new(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
enum { ARG_name, ARG_data };
static const mp_arg_t allowed_args[] = {
{ MP_QSTR_name, MP_ARG_REQUIRED | MP_ARG_OBJ },
{ MP_QSTR_data, MP_ARG_OBJ, {.u_obj = mp_const_none} },
};
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
const char *algorithm = mp_obj_str_get_str(args[ARG_name].u_obj);
hashlib_hash_obj_t *self = m_new_obj(hashlib_hash_obj_t);
self->base.type = &hashlib_hash_type;
if (!common_hal_hashlib_new(self, algorithm)) {
mp_raise_ValueError(translate("Unsupported hash algorithm"));
}
if (args[ARG_data].u_obj != mp_const_none) {
hashlib_hash_update(self, args[ARG_data].u_obj);
}
return self;
}
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(hashlib_new_obj, 1, hashlib_new);
STATIC const mp_rom_map_elem_t hashlib_module_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_hashlib) },
{ MP_ROM_QSTR(MP_QSTR_new), MP_ROM_PTR(&hashlib_new_obj) },
// Hash is deliberately omitted here because CPython doesn't expose the
// object on `hashlib` only the internal `_hashlib`.
};
STATIC MP_DEFINE_CONST_DICT(hashlib_module_globals, hashlib_module_globals_table);
const mp_obj_module_t hashlib_module = {
.base = { &mp_type_module },
.globals = (mp_obj_dict_t *)&hashlib_module_globals,
};
MP_REGISTER_MODULE(MP_QSTR_hashlib, hashlib_module, CIRCUITPY_HASHLIB);

View File

@ -0,0 +1,36 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2022 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#ifndef MICROPY_INCLUDED_SHARED_BINDINGS_HASHLIB___INIT___H
#define MICROPY_INCLUDED_SHARED_BINDINGS_HASHLIB___INIT___H
#include <stdbool.h>
#include "shared-bindings/hashlib/Hash.h"
bool common_hal_hashlib_new(hashlib_hash_obj_t *self, const char *algorithm);
#endif // MICROPY_INCLUDED_SHARED_BINDINGS_HASHLIB___INIT___H

View File

@ -86,6 +86,9 @@ const mp_obj_property_t keypad_generic_events_obj = {
//| connected independently to individual pins, //| connected independently to individual pins,
//| connected to a shift register, //| connected to a shift register,
//| or connected in a row-and-column matrix. //| or connected in a row-and-column matrix.
//|
//| For more information about working with the `keypad` module in CircuitPython,
//| see `this Learn guide <https://learn.adafruit.com/key-pad-matrix-scanning-in-circuitpython>`_.
//| """ //| """
//| //|

View File

@ -41,6 +41,9 @@
//| //|
//| Not implemented: 64-bit int, uint, float. //| Not implemented: 64-bit int, uint, float.
//| //|
//| For more information about working with msgpack,
//| see `the CPython Library Documentation <https://msgpack-python.readthedocs.io/en/latest/?badge=latest>`_.
//|
//| Example 1:: //| Example 1::
//| //|
//| import msgpack //| import msgpack

View File

@ -31,9 +31,12 @@
#include "shared-bindings/sharpdisplay/SharpMemoryFramebuffer.h" #include "shared-bindings/sharpdisplay/SharpMemoryFramebuffer.h"
//| """Support for Sharp Memory Display framebuffers""" //| """Support for Sharp Memory Display framebuffers
//|
//| For more information about working with Sharp Memory Displays,
//| see `this Learn guide <https://learn.adafruit.com/adafruit-sharp-memory-display-breakout/circuitpython-displayio-setup>`_.
//| """
//| //|
STATIC const mp_rom_map_elem_t sharpdisplay_module_globals_table[] = { STATIC const mp_rom_map_elem_t sharpdisplay_module_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_sharpdisplay) }, { MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_sharpdisplay) },
{ MP_ROM_QSTR(MP_QSTR_SharpMemoryFramebuffer), MP_ROM_PTR(&sharpdisplay_framebuffer_type) }, { MP_ROM_QSTR(MP_QSTR_SharpMemoryFramebuffer), MP_ROM_PTR(&sharpdisplay_framebuffer_type) },

View File

@ -45,7 +45,10 @@
//| call :py:meth:`!deinit` or use a context manager. See //| call :py:meth:`!deinit` or use a context manager. See
//| :ref:`lifetime-and-contextmanagers` for more info. //| :ref:`lifetime-and-contextmanagers` for more info.
//| //|
//| For example:: //| For more information about working with the `touchio` module in CircuitPython,
//| see `this Learn guide page <https://learn.adafruit.com/circuitpython-essentials/circuitpython-cap-touch>`_.
//|
//| Example::
//| //|
//| import touchio //| import touchio
//| from board import * //| from board import *

View File

@ -138,17 +138,17 @@ MP_PROPERTY_GETSET(wifi_radio_mac_address_obj,
(mp_obj_t)&wifi_radio_get_mac_address_obj, (mp_obj_t)&wifi_radio_get_mac_address_obj,
(mp_obj_t)&wifi_radio_set_mac_address_obj); (mp_obj_t)&wifi_radio_set_mac_address_obj);
//| tx_power: int //| tx_power: float
//| """Wifi transmission power, in dBm.""" //| """Wifi transmission power, in dBm."""
//| //|
STATIC mp_obj_t wifi_radio_get_tx_power(mp_obj_t self_in) { STATIC mp_obj_t wifi_radio_get_tx_power(mp_obj_t self_in) {
wifi_radio_obj_t *self = MP_OBJ_TO_PTR(self_in); wifi_radio_obj_t *self = MP_OBJ_TO_PTR(self_in);
return mp_obj_new_int(common_hal_wifi_radio_get_tx_power(self)); return mp_obj_new_float(common_hal_wifi_radio_get_tx_power(self));
} }
MP_DEFINE_CONST_FUN_OBJ_1(wifi_radio_get_tx_power_obj, wifi_radio_get_tx_power); MP_DEFINE_CONST_FUN_OBJ_1(wifi_radio_get_tx_power_obj, wifi_radio_get_tx_power);
STATIC mp_obj_t wifi_radio_set_tx_power(mp_obj_t self_in, mp_obj_t tx_power_in) { STATIC mp_obj_t wifi_radio_set_tx_power(mp_obj_t self_in, mp_obj_t tx_power_in) {
mp_int_t tx_power = mp_obj_get_int(tx_power_in); mp_float_t tx_power = mp_obj_get_float(tx_power_in);
wifi_radio_obj_t *self = MP_OBJ_TO_PTR(self_in); wifi_radio_obj_t *self = MP_OBJ_TO_PTR(self_in);
common_hal_wifi_radio_set_tx_power(self, tx_power); common_hal_wifi_radio_set_tx_power(self, tx_power);
return mp_const_none; return mp_const_none;

View File

@ -82,8 +82,8 @@ extern void common_hal_wifi_radio_set_mac_address(wifi_radio_obj_t *self, const
extern mp_obj_t common_hal_wifi_radio_get_mac_address_ap(wifi_radio_obj_t *self); extern mp_obj_t common_hal_wifi_radio_get_mac_address_ap(wifi_radio_obj_t *self);
extern void common_hal_wifi_radio_set_mac_address_ap(wifi_radio_obj_t *self, const uint8_t *mac); extern void common_hal_wifi_radio_set_mac_address_ap(wifi_radio_obj_t *self, const uint8_t *mac);
extern uint8_t common_hal_wifi_radio_get_tx_power(wifi_radio_obj_t *self); extern mp_float_t common_hal_wifi_radio_get_tx_power(wifi_radio_obj_t *self);
extern void common_hal_wifi_radio_set_tx_power(wifi_radio_obj_t *self, const uint8_t power); extern void common_hal_wifi_radio_set_tx_power(wifi_radio_obj_t *self, const mp_float_t power);
extern mp_obj_t common_hal_wifi_radio_start_scanning_networks(wifi_radio_obj_t *self); extern mp_obj_t common_hal_wifi_radio_start_scanning_networks(wifi_radio_obj_t *self);
extern void common_hal_wifi_radio_stop_scanning_networks(wifi_radio_obj_t *self); extern void common_hal_wifi_radio_stop_scanning_networks(wifi_radio_obj_t *self);

View File

@ -45,6 +45,10 @@
#include "tusb.h" #include "tusb.h"
#endif #endif
#if CIRCUITPY_WEB_WORKFLOW
#include "supervisor/shared/web_workflow/websocket.h"
#endif
#if CIRCUITPY_CONSOLE_UART #if CIRCUITPY_CONSOLE_UART
#include "py/mpprint.h" #include "py/mpprint.h"
#include "shared-bindings/busio/UART.h" #include "shared-bindings/busio/UART.h"
@ -164,6 +168,13 @@ bool serial_connected(void) {
} }
#endif #endif
#if CIRCUITPY_WEB_WORKFLOW
if (websocket_connected()) {
return true;
}
#endif
if (port_serial_connected()) { if (port_serial_connected()) {
return true; return true;
} }
@ -194,6 +205,12 @@ char serial_read(void) {
} }
#endif #endif
#if CIRCUITPY_WEB_WORKFLOW
if (websocket_available()) {
return websocket_read_char();
}
#endif
#if CIRCUITPY_USB_CDC #if CIRCUITPY_USB_CDC
if (!usb_cdc_console_enabled()) { if (!usb_cdc_console_enabled()) {
return -1; return -1;
@ -228,6 +245,12 @@ bool serial_bytes_available(void) {
} }
#endif #endif
#if CIRCUITPY_WEB_WORKFLOW
if (websocket_available()) {
return true;
}
#endif
#if CIRCUITPY_USB_CDC #if CIRCUITPY_USB_CDC
if (usb_cdc_console_enabled() && tud_cdc_available() > 0) { if (usb_cdc_console_enabled() && tud_cdc_available() > 0) {
return true; return true;
@ -270,6 +293,10 @@ void serial_write_substring(const char *text, uint32_t length) {
ble_serial_write(text, length); ble_serial_write(text, length);
#endif #endif
#if CIRCUITPY_WEB_WORKFLOW
websocket_write(text, length);
#endif
#if CIRCUITPY_USB_CDC #if CIRCUITPY_USB_CDC
if (!usb_cdc_console_enabled()) { if (!usb_cdc_console_enabled()) {
return; return;

View File

@ -0,0 +1,24 @@
<!DOCTYPE html>
<html style="height: 100%;">
<head>
<title>Simple client</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="/serial.js" defer=true></script>
</head>
<body style="flex-direction: column; display: flex; height: 100%; width: 100%; margin: 0; font-size: 1rem;">
<div style="flex: auto; display: flex; overflow: auto; flex-direction: column;">
<pre id="log" style="margin:0; margin-top: auto;"></pre>
<span style="height: 1px;"></span>
</div>
<div id="controls" style="flex: none; display: flex;">
<fieldset style="display: inline-block; padding: 0;">
<legend>Ctrl</legend>
<button id="c">C</button>
<button id="d">D</button>
</fieldset>
<textarea id="input" rows="1" spellcheck="false" wrap="off" style="resize: none; flex: auto; font-size: 1rem;" autocapitalize="none" autocomplete="off" autocorrect="off"></textarea>
<button onclick="onSubmit(); return false;">Send</button>
</div>
</body>
</html>

View File

@ -0,0 +1,81 @@
var ws;
var input = document.getElementById("input");
input.value = "";
var title = document.querySelector("title");
var log = document.getElementById("log");
function set_enabled(enabled) {
input.disabled = !enabled;
var buttons = document.querySelectorAll("button");
for (button of buttons) {
button.disabled = !enabled;
}
}
set_enabled(false);
function onSubmit() {
ws.send("\r");
input.value = "";
input.focus();
}
ws = new WebSocket("ws://" + window.location.host + "/cp/serial/");
ws.onopen = function() {
set_enabled(true);
};
var setting_title = false;
var encoder = new TextEncoder();
var left_count = 0;
ws.onmessage = function(e) {
if (e.data == "\x1b]0;") {
setting_title = true;
title.textContent = "";
} else if (e.data == "\x1b\\") {
setting_title = false;
} else if (setting_title) {
title.textContent += e.data;
} else if (e.data == "\b") {
left_count += 1;
} else if (e.data == "\x1b[K") { // Clear line
log.textContent = log.textContent.slice(0, -left_count);
left_count = 0;
} else {
log.textContent += e.data;
}
document.querySelector("span").scrollIntoView();
};
ws.onclose = function() {
set_enabled(false);
};
ws.onerror = function(e) {
set_enabled(false);
};
input.addEventListener("beforeinput", function(e) {
if (e.inputType == "insertLineBreak") {
ws.send("\r");
input.value = "";
input.focus();
e.preventDefault();
} else if (e.inputType == "insertText") {
ws.send(e.data);
} else if (e.inputType == "deleteContentBackward") {
ws.send("\b");
}
});
let ctrl_c = document.querySelector("#c");
ctrl_c.onclick = function() {
ws.send("\x03");
}
let ctrl_d = document.querySelector("#d");
ctrl_d.onclick = function() {
ws.send("\x04");
}

View File

@ -3,11 +3,12 @@
<head> <head>
<title>CircuitPython</title> <title>CircuitPython</title>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="/welcome.js" defer=true></script>
</head> </head>
<script src="/welcome.js" defer=true></script>
<body> <body>
<h1><a href="/"><img src="/favicon.ico"/></a>&nbsp;Welcome!</h1> <h1><a href="/"><img src="/favicon.ico"/></a>&nbsp;Welcome!</h1>
Welcome to CircuitPython's Web API. Go to the <a href="/fs/">file browser</a> to work with files in the CIRCUITPY drive. Make sure you've set <code>CIRCUITPY_WEB_API_PASSWORD='somepassword'</code> in <code>/.env</code>. Provide the password when the browser prompts for it. Leave the username blank. Welcome to CircuitPython's Web API. Go to the <a href="/fs/">file browser</a> to work with files in the CIRCUITPY drive. Go to the <a href="/cp/serial/">serial terminal</a> to see code output and interact with the REPL. Make sure you've set <code>CIRCUITPY_WEB_API_PASSWORD='somepassword'</code> in <code>/.env</code>. Provide the password when the browser prompts for it. Leave the username blank.
<h2>Device Info</h2> <h2>Device Info</h2>
Board: <a id="board"></a><br> Board: <a id="board"></a><br>
Version: <span id="version"></span><br> Version: <span id="version"></span><br>

View File

@ -39,8 +39,11 @@
#include "supervisor/shared/reload.h" #include "supervisor/shared/reload.h"
#include "supervisor/shared/translate/translate.h" #include "supervisor/shared/translate/translate.h"
#include "supervisor/shared/web_workflow/web_workflow.h" #include "supervisor/shared/web_workflow/web_workflow.h"
#include "supervisor/shared/web_workflow/websocket.h"
#include "supervisor/usb.h" #include "supervisor/usb.h"
#include "shared-bindings/hashlib/__init__.h"
#include "shared-bindings/hashlib/Hash.h"
#include "shared-bindings/mdns/RemoteService.h" #include "shared-bindings/mdns/RemoteService.h"
#include "shared-bindings/mdns/Server.h" #include "shared-bindings/mdns/Server.h"
#include "shared-bindings/socketpool/__init__.h" #include "shared-bindings/socketpool/__init__.h"
@ -86,6 +89,10 @@ typedef struct {
bool authenticated; bool authenticated;
bool expect; bool expect;
bool json; bool json;
bool websocket;
uint32_t websocket_version;
// RFC6455 for websockets says this header should be 24 base64 characters long.
char websocket_key[24 + 1];
} _request; } _request;
static wifi_radio_error_t wifi_status = WIFI_RADIO_ERROR_NONE; static wifi_radio_error_t wifi_status = WIFI_RADIO_ERROR_NONE;
@ -256,20 +263,19 @@ void supervisor_start_web_workflow(void) {
active.num = -1; active.num = -1;
active.connected = false; active.connected = false;
websocket_init();
// TODO: // TODO:
// GET /cp/serial.txt // GET /cp/serial.txt
// - Most recent 1k of serial output. // - Most recent 1k of serial output.
// GET /edit/ // GET /edit/
// - Super basic editor // - Super basic editor
// GET /ws/circuitpython
// GET /ws/user
// - WebSockets
#endif #endif
} }
static void _send_raw(socketpool_socket_obj_t *socket, const uint8_t *buf, int len) { static void _send_raw(socketpool_socket_obj_t *socket, const uint8_t *buf, int len) {
int sent = -EAGAIN; int sent = -EAGAIN;
while (sent == -EAGAIN) { while (sent == -EAGAIN && common_hal_socketpool_socket_get_connected(socket)) {
sent = socketpool_socket_send(socket, buf, len); sent = socketpool_socket_send(socket, buf, len);
} }
if (sent < len) { if (sent < len) {
@ -516,7 +522,14 @@ static void _reply_redirect(socketpool_socket_obj_t *socket, _request *request,
"HTTP/1.1 301 Moved Permanently\r\n", "HTTP/1.1 301 Moved Permanently\r\n",
"Connection: close\r\n", "Connection: close\r\n",
"Content-Length: 0\r\n", "Content-Length: 0\r\n",
"Location: http://", hostname, ".local", path, "\r\n", NULL); "Location: ", NULL);
if (request->websocket) {
_send_str(socket, "ws");
} else {
_send_str(socket, "http");
}
_send_strs(socket, "://", hostname, ".local", path, "\r\n", NULL);
_cors_header(socket, request); _cors_header(socket, request);
_send_str(socket, "\r\n"); _send_str(socket, "\r\n");
} }
@ -826,6 +839,8 @@ STATIC_FILE(directory_html);
STATIC_FILE(directory_js); STATIC_FILE(directory_js);
STATIC_FILE(welcome_html); STATIC_FILE(welcome_html);
STATIC_FILE(welcome_js); STATIC_FILE(welcome_js);
STATIC_FILE(serial_html);
STATIC_FILE(serial_js);
STATIC_FILE(blinka_16x16_ico); STATIC_FILE(blinka_16x16_ico);
static void _reply_static(socketpool_socket_obj_t *socket, _request *request, const uint8_t *response, size_t response_len, const char *content_type) { static void _reply_static(socketpool_socket_obj_t *socket, _request *request, const uint8_t *response, size_t response_len, const char *content_type) {
@ -844,10 +859,34 @@ static void _reply_static(socketpool_socket_obj_t *socket, _request *request, co
#define _REPLY_STATIC(socket, request, filename) _reply_static(socket, request, filename, filename##_length, filename##_content_type) #define _REPLY_STATIC(socket, request, filename) _reply_static(socket, request, filename, filename##_length, filename##_content_type)
static void _reply_websocket_upgrade(socketpool_socket_obj_t *socket, _request *request) {
// Compute accept key
hashlib_hash_obj_t hash;
common_hal_hashlib_new(&hash, "sha1");
common_hal_hashlib_hash_update(&hash, (const uint8_t *)request->websocket_key, strlen(request->websocket_key));
const char *magic_string = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
common_hal_hashlib_hash_update(&hash, (const uint8_t *)magic_string, strlen(magic_string));
size_t digest_size = common_hal_hashlib_hash_get_digest_size(&hash);
size_t encoded_size = (digest_size + 1) * 4 / 3 + 1;
uint8_t encoded_accept[encoded_size];
common_hal_hashlib_hash_digest(&hash, encoded_accept, sizeof(encoded_accept));
_base64_in_place((char *)encoded_accept, digest_size, encoded_size);
// Reply with upgrade
_send_strs(socket, "HTTP/1.1 101 Switching Protocols\r\n",
"Upgrade: websocket\r\n",
"Connection: Upgrade\r\n",
"Sec-WebSocket-Accept: ", encoded_accept, "\r\n",
"\r\n", NULL);
websocket_handoff(socket);
// socket is now closed and "disconnected".
}
static bool _reply(socketpool_socket_obj_t *socket, _request *request) { static bool _reply(socketpool_socket_obj_t *socket, _request *request) {
if (request->redirect) { if (request->redirect) {
_reply_redirect(socket, request, request->path); _reply_redirect(socket, request, request->path);
} else if (strlen(request->origin) > 0 && !_origin_ok(request->origin)) { } else if (strlen(request->origin) > 0 && !_origin_ok(request->origin)) {
ESP_LOGE(TAG, "bad origin %s", request->origin);
_reply_forbidden(socket, request); _reply_forbidden(socket, request);
} else if (memcmp(request->path, "/fs/", 4) == 0) { } else if (memcmp(request->path, "/fs/", 4) == 0) {
if (!request->authenticated) { if (!request->authenticated) {
@ -980,6 +1019,20 @@ static bool _reply(socketpool_socket_obj_t *socket, _request *request) {
_reply_with_devices_json(socket, request); _reply_with_devices_json(socket, request);
} else if (strcmp(path, "/version.json") == 0) { } else if (strcmp(path, "/version.json") == 0) {
_reply_with_version_json(socket, request); _reply_with_version_json(socket, request);
} else if (strcmp(path, "/serial/") == 0) {
if (!request->authenticated) {
if (_api_password[0] != '\0') {
_reply_unauthorized(socket, request);
} else {
_reply_forbidden(socket, request);
}
} else if (request->websocket) {
_reply_websocket_upgrade(socket, request);
} else {
_REPLY_STATIC(socket, request, serial_html);
}
} else {
_reply_missing(socket, request);
} }
} else if (strcmp(request->method, "GET") != 0) { } else if (strcmp(request->method, "GET") != 0) {
_reply_method_not_allowed(socket, request); _reply_method_not_allowed(socket, request);
@ -992,6 +1045,8 @@ static bool _reply(socketpool_socket_obj_t *socket, _request *request) {
_REPLY_STATIC(socket, request, directory_js); _REPLY_STATIC(socket, request, directory_js);
} else if (strcmp(request->path, "/welcome.js") == 0) { } else if (strcmp(request->path, "/welcome.js") == 0) {
_REPLY_STATIC(socket, request, welcome_js); _REPLY_STATIC(socket, request, welcome_js);
} else if (strcmp(request->path, "/serial.js") == 0) {
_REPLY_STATIC(socket, request, serial_js);
} else if (strcmp(request->path, "/favicon.ico") == 0) { } else if (strcmp(request->path, "/favicon.ico") == 0) {
// TODO: Autogenerate this based on the blinka bitmap and change the // TODO: Autogenerate this based on the blinka bitmap and change the
// palette based on MAC address. // palette based on MAC address.
@ -1015,6 +1070,7 @@ static void _reset_request(_request *request) {
request->authenticated = false; request->authenticated = false;
request->expect = false; request->expect = false;
request->json = false; request->json = false;
request->websocket = false;
} }
static void _process_request(socketpool_socket_obj_t *socket, _request *request) { static void _process_request(socketpool_socket_obj_t *socket, _request *request) {
@ -1111,6 +1167,13 @@ static void _process_request(socketpool_socket_obj_t *socket, _request *request)
strcpy(request->origin, request->header_value); strcpy(request->origin, request->header_value);
} else if (strcmp(request->header_key, "X-Timestamp") == 0) { } else if (strcmp(request->header_key, "X-Timestamp") == 0) {
request->timestamp_ms = strtoull(request->header_value, NULL, 10); request->timestamp_ms = strtoull(request->header_value, NULL, 10);
} else if (strcmp(request->header_key, "Upgrade") == 0) {
request->websocket = strcmp(request->header_value, "websocket") == 0;
} else if (strcmp(request->header_key, "Sec-WebSocket-Version") == 0) {
request->websocket_version = strtoul(request->header_value, NULL, 10);
} else if (strcmp(request->header_key, "Sec-WebSocket-Key") == 0 &&
strlen(request->header_value) == 24) {
strcpy(request->websocket_key, request->header_value);
} }
ESP_LOGI(TAG, "Header %s %s", request->header_key, request->header_value); ESP_LOGI(TAG, "Header %s %s", request->header_key, request->header_value);
} else if (request->offset > sizeof(request->header_value) - 1) { } else if (request->offset > sizeof(request->header_value) - 1) {

View File

@ -0,0 +1,234 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2022 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include "supervisor/shared/web_workflow/websocket.h"
// TODO: Remove ESP specific stuff. For now, it is useful as we refine the server.
#include "esp_log.h"
typedef struct {
socketpool_socket_obj_t socket;
uint8_t opcode;
uint8_t frame_len;
uint8_t payload_len_size;
bool masked;
bool closed;
uint8_t mask[4];
int frame_index;
size_t payload_remaining;
} _websocket;
static _websocket cp_serial;
static const char *TAG = "CP websocket";
void websocket_init(void) {
cp_serial.socket.num = -1;
cp_serial.socket.connected = false;
}
void websocket_handoff(socketpool_socket_obj_t *socket) {
cp_serial.socket = *socket;
cp_serial.closed = false;
cp_serial.opcode = 0;
cp_serial.frame_index = 0;
cp_serial.frame_len = 2;
// Mark the original socket object as closed without telling the lower level.
socket->connected = false;
socket->num = -1;
}
bool websocket_connected(void) {
return !cp_serial.closed && common_hal_socketpool_socket_get_connected(&cp_serial.socket);
}
static bool _read_byte(uint8_t *c) {
int len = socketpool_socket_recv_into(&cp_serial.socket, c, 1);
if (len != 1) {
if (len != -EAGAIN) {
ESP_LOGE(TAG, "recv error %d", len);
}
return false;
}
return true;
}
static void _send_raw(socketpool_socket_obj_t *socket, const uint8_t *buf, int len) {
int sent = -EAGAIN;
while (sent == -EAGAIN) {
sent = socketpool_socket_send(socket, buf, len);
}
if (sent < len) {
ESP_LOGE(TAG, "short send on %d err %d len %d", socket->num, sent, len);
}
}
static void _read_next_frame_header(void) {
uint8_t h;
if (cp_serial.frame_index == 0 && _read_byte(&h)) {
cp_serial.frame_index++;
cp_serial.opcode = h & 0xf;
}
if (cp_serial.frame_index == 1 && _read_byte(&h)) {
cp_serial.frame_index++;
uint8_t len = h & 0xf;
cp_serial.masked = (h >> 7) == 1;
if (len <= 125) {
cp_serial.payload_remaining = len;
cp_serial.payload_len_size = 0;
} else if (len == 126) { // 16 bit length
cp_serial.payload_len_size = 2;
} else if (len == 127) { // 64 bit length
cp_serial.payload_len_size = 8;
}
cp_serial.frame_len = 2 + cp_serial.payload_len_size;
if (cp_serial.masked) {
cp_serial.frame_len += 4;
}
}
while (cp_serial.frame_index >= 2 &&
cp_serial.frame_index < (cp_serial.payload_len_size + 2) &&
_read_byte(&h)) {
cp_serial.frame_index++;
cp_serial.payload_remaining = cp_serial.payload_remaining << 8 | h;
}
int mask_start = cp_serial.payload_len_size + 2;
while (cp_serial.frame_index >= mask_start &&
cp_serial.frame_index < cp_serial.frame_len &&
_read_byte(&h)) {
size_t mask_offset = cp_serial.frame_index - mask_start;
cp_serial.mask[mask_offset] = h;
cp_serial.frame_index++;
}
// Reply to PINGs and CLOSE.
while ((cp_serial.opcode == 0x8 ||
cp_serial.opcode == 0x9) &&
cp_serial.frame_index >= cp_serial.frame_len) {
if (cp_serial.frame_index == cp_serial.frame_len) {
uint8_t opcode = 0x8; // CLOSE
if (cp_serial.opcode == 0x9) {
opcode = 0xA; // PONG
} else {
// Set the TCP socket to send immediately so that we send the payload back before
// closing the connection.
int nodelay = 1;
lwip_setsockopt(cp_serial.socket.num, IPPROTO_TCP, TCP_NODELAY, &nodelay, sizeof(nodelay));
}
uint8_t frame_header[2];
frame_header[0] = 1 << 7 | opcode;
if (cp_serial.payload_remaining > 125) {
ESP_LOGE(TAG, "CLOSE or PING has long payload");
}
frame_header[1] = cp_serial.payload_remaining;
_send_raw(&cp_serial.socket, (const uint8_t *)frame_header, 2);
}
if (cp_serial.payload_remaining > 0 && _read_byte(&h)) {
// Send the payload back to the client.
cp_serial.frame_index++;
cp_serial.payload_remaining--;
_send_raw(&cp_serial.socket, &h, 1);
}
if (cp_serial.payload_remaining == 0) {
cp_serial.frame_index = 0;
if (cp_serial.opcode == 0x8) {
cp_serial.closed = true;
common_hal_socketpool_socket_close(&cp_serial.socket);
}
}
}
}
static bool _read_next_payload_byte(uint8_t *c) {
_read_next_frame_header();
if (cp_serial.opcode == 0x1 &&
cp_serial.frame_index >= cp_serial.frame_len &&
cp_serial.payload_remaining > 0) {
if (_read_byte(c)) {
uint8_t mask_offset = (cp_serial.frame_index - cp_serial.frame_len) % 4;
*c ^= cp_serial.mask[mask_offset];
cp_serial.frame_index++;
cp_serial.payload_remaining--;
if (cp_serial.payload_remaining == 0) {
cp_serial.frame_index = 0;
}
return true;
}
}
return false;
}
bool websocket_available(void) {
if (!websocket_connected()) {
return false;
}
_read_next_frame_header();
return cp_serial.payload_remaining > 0 && cp_serial.frame_index >= cp_serial.frame_len;
}
char websocket_read_char(void) {
uint8_t c;
_read_next_payload_byte(&c);
return c;
}
static void _websocket_send(_websocket *ws, const char *text, size_t len) {
if (!websocket_connected()) {
return;
}
uint32_t opcode = 1;
uint8_t frame_header[2];
frame_header[0] = 1 << 7 | opcode;
uint8_t payload_len;
if (len <= 125) {
payload_len = len;
} else if (len < (1 << 16)) {
payload_len = 126;
} else {
payload_len = 127;
}
frame_header[1] = payload_len;
_send_raw(&ws->socket, (const uint8_t *)frame_header, 2);
if (payload_len == 126) {
_send_raw(&ws->socket, (const uint8_t *)&len, 2);
} else if (payload_len == 127) {
uint32_t zero = 0;
// 64 bits where top four bytes are zero.
_send_raw(&ws->socket, (const uint8_t *)&zero, 4);
_send_raw(&ws->socket, (const uint8_t *)&len, 4);
}
_send_raw(&ws->socket, (const uint8_t *)text, len);
char copy[len];
memcpy(copy, text, len);
copy[len] = '\0';
}
void websocket_write(const char *text, size_t len) {
_websocket_send(&cp_serial, text, len);
}

View File

@ -0,0 +1,38 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2022 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#pragma once
#include <stdbool.h>
#include "shared-bindings/socketpool/Socket.h"
void websocket_init(void);
void websocket_handoff(socketpool_socket_obj_t *socket);
bool websocket_connected(void);
bool websocket_available(void);
char websocket_read_char(void);
void websocket_write(const char *text, size_t len);

View File

@ -168,8 +168,8 @@ $(BUILD)/autogen_web_workflow_static.c: ../../tools/gen_web_workflow_static.py $
$(STATIC_RESOURCES) $(STATIC_RESOURCES)
ifeq ($(CIRCUITPY_WEB_WORKFLOW),1) ifeq ($(CIRCUITPY_WEB_WORKFLOW),1)
SRC_SUPERVISOR += supervisor/shared/web_workflow/web_workflow.c SRC_SUPERVISOR += supervisor/shared/web_workflow/web_workflow.c \
supervisor/shared/web_workflow/websocket.c
SRC_SUPERVISOR += $(BUILD)/autogen_web_workflow_static.c SRC_SUPERVISOR += $(BUILD)/autogen_web_workflow_static.c
endif endif

View File

@ -38,12 +38,12 @@ hashlib json math qrio
rainbowio re sys termios rainbowio re sys termios
traceback ubinascii uctypes uerrno traceback ubinascii uctypes uerrno
uheapq uio ujson ulab uheapq uio ujson ulab
ulab.fft ulab.linalg ulab.numpy ulab.scipy ulab.numpy ulab.numpy.fft ulab.numpy.linalg
ulab.scipy.linalg ulab.scipy.optimize ulab.scipy ulab.scipy.linalg
ulab.scipy.signal ulab.scipy.special ulab.scipy.optimize ulab.scipy.signal
ulab.utils uos urandom ure ulab.scipy.special ulab.utils uos
uselect ustruct utime utimeq urandom ure uselect ustruct
uzlib zlib utime utimeq uzlib zlib
ime ime
utime utimeq utime utimeq

View File

@ -4,6 +4,8 @@
import argparse import argparse
import gzip import gzip
import minify_html
import jsmin
import mimetypes import mimetypes
import pathlib import pathlib
@ -24,6 +26,10 @@ for f in args.files:
variable = path.name.replace(".", "_") variable = path.name.replace(".", "_")
uncompressed = f.read() uncompressed = f.read()
ulen = len(uncompressed) ulen = len(uncompressed)
if f.name.endswith(".html"):
uncompressed = minify_html.minify(uncompressed.decode("utf-8")).encode("utf-8")
elif f.name.endswith(".js"):
uncompressed = jsmin.jsmin(uncompressed.decode("utf-8")).encode("utf-8")
compressed = gzip.compress(uncompressed) compressed = gzip.compress(uncompressed)
clen = len(compressed) clen = len(compressed)
compressed = ", ".join([hex(x) for x in compressed]) compressed = ", ".join([hex(x) for x in compressed])