Skip to content

Commit cb13ecc

Browse files
Merge pull request #1948 from ArmDeveloperEcosystem/main
Production update
2 parents 1c7d65a + c3bba36 commit cb13ecc

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

75 files changed

+2348
-237
lines changed
Lines changed: 190 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,190 @@
1+
name: Update Roadmap Date
2+
3+
on:
4+
pull_request_target:
5+
types: [labeled]
6+
7+
jobs:
8+
update-roadmap-dates:
9+
runs-on: ubuntu-latest
10+
if: |
11+
github.event.label.name == 'awaiting_tech_review' ||
12+
github.event.label.name == 'publish'
13+
14+
permissions:
15+
contents: read
16+
pull-requests: read
17+
repository-projects: write
18+
19+
steps:
20+
- name: Checkout repository
21+
uses: actions/checkout@v3
22+
23+
- name: Setup Node.js
24+
uses: actions/setup-node@v3
25+
with:
26+
node-version: '18.x'
27+
28+
- name: Install Octokit
29+
run: npm install @octokit/rest
30+
31+
- name: Update Project Board Dates
32+
uses: actions/github-script@v6
33+
with:
34+
github-token: ${{ secrets.PROJECT_TOKEN }}
35+
script: |
36+
const octokit = github;
37+
38+
const projectNumber = 4;
39+
const orgLogin = 'ArmDeveloperEcosystem';
40+
const prNumber = context.payload.pull_request.number;
41+
const labelName = context.payload.label.name;
42+
43+
async function getProjectItemForPR() {
44+
const projectQuery = `
45+
query {
46+
organization(login: "${orgLogin}") {
47+
projectV2(number: ${projectNumber}) {
48+
id
49+
}
50+
}
51+
}
52+
`;
53+
const projectResponse = await octokit.graphql(projectQuery);
54+
const project = projectResponse.organization?.projectV2;
55+
if (!project) throw new Error("Project not found for organization.");
56+
const projectId = project.id;
57+
58+
let cursor = null;
59+
let itemId = null;
60+
do {
61+
const prQuery = `
62+
query($after: String) {
63+
organization(login: "${orgLogin}") {
64+
projectV2(number: ${projectNumber}) {
65+
items(first: 100, after: $after) {
66+
nodes {
67+
id
68+
content {
69+
... on PullRequest {
70+
number
71+
repository {
72+
name
73+
}
74+
}
75+
}
76+
}
77+
pageInfo {
78+
hasNextPage
79+
endCursor
80+
}
81+
}
82+
}
83+
}
84+
}
85+
`;
86+
const prResponse = await octokit.graphql(prQuery, { after: cursor });
87+
const items = prResponse.organization.projectV2.items.nodes;
88+
89+
const foundItem = items.find(item =>
90+
item.content &&
91+
item.content.number === prNumber &&
92+
item.content.repository.name === context.repo.repo
93+
);
94+
95+
if (foundItem) {
96+
itemId = foundItem.id;
97+
break;
98+
}
99+
100+
cursor = prResponse.organization.projectV2.items.pageInfo.endCursor;
101+
} while (cursor);
102+
103+
return { projectId, itemId };
104+
}
105+
106+
async function getFieldId(projectId, fieldName) {
107+
const fieldsQuery = `
108+
query {
109+
node(id: "${projectId}") {
110+
... on ProjectV2 {
111+
fields(first: 50) {
112+
nodes {
113+
... on ProjectV2Field {
114+
id
115+
name
116+
dataType
117+
}
118+
}
119+
}
120+
}
121+
}
122+
}
123+
`;
124+
125+
const fieldsResponse = await octokit.graphql(fieldsQuery);
126+
const fields = fieldsResponse.node?.fields?.nodes || [];
127+
const field = fields.find(f => f.name === fieldName && f.dataType === 'DATE');
128+
129+
return field ? field.id : null;
130+
}
131+
132+
async function updateDateField(projectId, itemId, fieldId, date) {
133+
const mutation = `
134+
mutation {
135+
updateProjectV2ItemFieldValue(
136+
input: {
137+
projectId: "${projectId}"
138+
itemId: "${itemId}"
139+
fieldId: "${fieldId}"
140+
value: { date: "${date}" }
141+
}
142+
) {
143+
projectV2Item {
144+
id
145+
}
146+
}
147+
}
148+
`;
149+
150+
const result = await octokit.graphql(mutation);
151+
console.log('Mutation result:', result);
152+
return result;
153+
}
154+
155+
async function main() {
156+
try {
157+
const { projectId, itemId } = await getProjectItemForPR();
158+
if (!itemId) {
159+
console.log('PR not found in project board');
160+
return;
161+
}
162+
163+
const today = new Date().toISOString().split('T')[0];
164+
165+
if (labelName === 'awaiting_tech_review') {
166+
const startDateFieldId = await getFieldId(projectId, 'Start Date');
167+
if (startDateFieldId) {
168+
await updateDateField(projectId, itemId, startDateFieldId, today);
169+
console.log('Updated Start Date to', today);
170+
} else {
171+
console.log('Start Date field not found');
172+
}
173+
} else if (labelName === 'publish') {
174+
const endDateFieldId = await getFieldId(projectId, 'Publish Date');
175+
if (endDateFieldId) {
176+
await updateDateField(projectId, itemId, endDateFieldId, today);
177+
console.log('Updated Publish Date to', today);
178+
} else {
179+
console.log('Publish Date field not found');
180+
}
181+
} else {
182+
console.log('No action taken for label:', labelName);
183+
}
184+
} catch (error) {
185+
console.error('Error updating project board:', error);
186+
core.setFailed(`Error updating project board: ${error.message}`);
187+
}
188+
}
189+
190+
main();

.wordlist.txt

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4080,4 +4080,42 @@ DB's
40804080
FFT's
40814081
IoT's
40824082
NumPy's
4083-
SendGrid's
4083+
SendGrid's
4084+
AEMv
4085+
AEx
4086+
BusyBox
4087+
CTX
4088+
FastMCP
4089+
HW
4090+
LLVM's
4091+
LiveHDR
4092+
PCI
4093+
PSCI
4094+
Pixmap
4095+
PyPi
4096+
Qixiang
4097+
REGS
4098+
RevC
4099+
SMMU
4100+
SMP
4101+
Strided
4102+
TTS
4103+
Wix’s
4104+
Xu
4105+
aemfvp
4106+
convolve
4107+
deps
4108+
dotenv
4109+
fastmcp
4110+
ipykernel
4111+
jlowin
4112+
libomp
4113+
lockfile
4114+
lockfiles
4115+
mk
4116+
multimodal
4117+
ngrok’s
4118+
precomputed
4119+
pyproject
4120+
toml
4121+
virtualenv

content/learning-paths/embedded-and-microcontrollers/_index.md

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,14 @@ maintopic: true
1111
operatingsystems_filter:
1212
- Android: 1
1313
- Baremetal: 29
14-
- Linux: 26
14+
- Linux: 27
1515
- macOS: 6
1616
- RTOS: 9
1717
- Windows: 4
1818
subjects_filter:
1919
- CI-CD: 5
2020
- Containers and Virtualization: 6
21-
- Embedded Linux: 3
21+
- Embedded Linux: 4
2222
- Libraries: 3
2323
- ML: 12
2424
- Performance and Architecture: 21
@@ -32,11 +32,12 @@ tools_software_languages_filter:
3232
- Arm Compiler for Embedded: 7
3333
- Arm Compiler for Linux: 1
3434
- Arm Compute Library: 1
35-
- Arm Development Studio: 7
35+
- Arm Development Studio: 8
3636
- Arm Fast Models: 4
3737
- Arm Virtual Hardware: 10
38+
- Assembly: 1
3839
- AVH: 1
39-
- C: 2
40+
- C: 3
4041
- C/C++: 1
4142
- ChatGPT: 1
4243
- Clang: 1
@@ -70,6 +71,7 @@ tools_software_languages_filter:
7071
- MPS3: 1
7172
- MXNet: 1
7273
- Neon: 1
74+
- NumPy: 1
7375
- Paddle: 1
7476
- Porcupine: 1
7577
- Python: 5
@@ -88,7 +90,6 @@ tools_software_languages_filter:
8890
- TrustZone: 2
8991
- TVMC: 1
9092
- vcpkg: 1
91-
- VS Code: 1
9293
- Yocto Linux: 1
9394
- Zephyr: 1
9495
weight: 5

content/learning-paths/embedded-and-microcontrollers/cmsisdsp-dev-with-python/_index.md

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,21 @@
11
---
2-
title: Getting Started with CMSIS-DSP Using Python
2+
title: Getting started with CMSIS-DSP using Python
33

4-
minutes_to_complete: 30
4+
minutes_to_complete: 45
55

6-
draft: true
7-
cascade:
8-
draft: true
6+
who_is_this_for: This is an advanced topic for developers looking to integrate the CMSIS-DSP library into their applications using Python.
97

10-
who_is_this_for: Developers who want to learn how the CMSIS-DSP package can be integrated into their applications
118

129
learning_objectives:
13-
- Understand how to use the CMSIS-DSP Python package
14-
- Understand how the Python implementation maps to the C implementation
15-
- Develop a complex application using CMSIS-DSP
10+
- Use the CMSIS-DSP Python package to prototype DSP algorithms.
11+
- Understand how the Python API maps to the C implementation.
12+
- Build and port a complex DSP application using CMSIS-DSP.
1613

1714
prerequisites:
18-
- Some familiarity with Python and DSP programming
19-
- Knowledge of C
20-
- Some familiarity with CMSIS-DSP
21-
- Python installed on your system
15+
- Familiarity with Python and digital signal processing concepts.
16+
- Working knowledge of C.
17+
- Prior exposure to CMSIS-DSP.
18+
- Python installed on your machine.
2219

2320
author: Christophe Favergeon
2421

@@ -33,27 +30,27 @@ tools_software_languages:
3330
- Python
3431
- C
3532
- Jupyter Notebook
36-
- numpy
33+
- NumPy
3734
operatingsystems:
3835
- Linux
3936
- Windows
4037
- macOS
4138

4239
further_reading:
4340
- resource:
44-
title: Biquad filters with CMSIS-DSP Python package
41+
title: Biquad Filters with CMSIS-DSP Python Package
4542
link: https://developer.arm.com/documentation/102463/latest/
4643
type: documentation
4744
- resource:
48-
title: CMSIS-DSP library
45+
title: CMSIS-DSP Library (GitHub)
4946
link: https://github.com/ARM-software/CMSIS-DSP
5047
type: Open-source project
5148
- resource:
52-
title: CMSIS-DSP python package
49+
title: CMSIS-DSP Python Package (PyPi)
5350
link: https://pypi.org/project/cmsisdsp/
5451
type: Open-source project
5552
- resource:
56-
title: CMSIS-DSP Python package examples and tests
53+
title: CMSIS-DSP Python Package Examples and Tests
5754
link: https://github.com/ARM-software/CMSIS-DSP/tree/main/PythonWrapper/examples
5855
type: Open-source project
5956
- resource:

content/learning-paths/embedded-and-microcontrollers/cmsisdsp-dev-with-python/how-to-1.md

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,23 @@ layout: learningpathall
88

99
## What is CMSIS-DSP?
1010

11-
CMSIS-DSP is a general-purpose compute library with a focus on DSP. It was initially developed for Cortex-M processors and has recently been upgraded to also support Cortex-A.
11+
CMSIS-DSP is a general-purpose computation library focused on digital signal processing (DSP).
1212

13-
On each processor, CMSIS-DSP is optimized for the architecture: DSP extensions on M4 and M7; Helium on M55 and M85; Neon on A55, etc.
13+
Originally developed for Cortex-M processors, it now also supports Cortex-A.
1414

15-
## What is the CMSIS-DSP Python package?
15+
The library is optimized for each architecture:
16+
17+
- DSP extensions on Cortex-M4 and M7.
18+
- Helium on M55 and M85.
19+
- Neon on Cortex-A55 and other Cortex-A cores.
1620

17-
The CMSIS-DSP Python package is a Python API for CMSIS-DSP. Its goal is to make it easier to develop a C solution using CMSIS-DSP by decreasing the gap between a design environment like Python and the final C implementation.
21+
## What is the CMSIS-DSP Python package?
22+
23+
The CMSIS-DSP Python package provides a Python API for CMSIS-DSP. Its goal is to make it easier to develop a C solution using CMSIS-DSP by bridging the gap between a Python-based design environment and a final C implementation.
1824

19-
For this reason, the Python API is as close as possible to the C one.
25+
The API is designed to closely mirror the C version in both function and structure.
2026

21-
Fixed-point arithmetic is rarely provided by Python packages, which generally focus on floating-point operations. The CMSIS-DSP Python package provides the same fixed-point arithmetic functions as the C version: Q31, Q15 and Q7. The package also provides floating-point functions and will also support half-precision floats in the future, like the C API.
27+
Fixed-point arithmetic is rarely supported by Python libraries, which generally focus on floating-point operations. The CMSIS-DSP Python package includes the same fixed-point arithmetic functions as the C version: Q31, Q15 and Q7. Support for half-precision floats will be added in a future release, matching the C API.
2228

23-
Finally, the CMSIS-DSP Python package is compatible with NumPy and can be used with all other scientific and AI Python packages such as SciPy and PyTorch.
29+
The package is compatible with NumPy and integrates well with scientific and AI libraries such as SciPy and PyTorch.
2430

0 commit comments

Comments
 (0)