@pikaa-ai/pikaa 0.3.22 → 0.3.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (191) hide show
  1. package/assets/brand/orbit-logo-option4-whale.jpg +0 -0
  2. package/assets/brand/orbit-logo.jpg +0 -0
  3. package/assets/brand/orbit-logo.png +0 -0
  4. package/assets/brand/orbit-logo.svg +3 -0
  5. package/dist/cli.js +448 -181
  6. package/dist/index.js +22 -2
  7. package/package.json +1 -2
  8. package/skills/adaptyv/SKILL.md +0 -240
  9. package/skills/aeon/SKILL.md +0 -402
  10. package/skills/analytical-method-validation/SKILL.md +0 -299
  11. package/skills/anndata/SKILL.md +0 -431
  12. package/skills/arbor/SKILL.md +0 -152
  13. package/skills/arboreto/SKILL.md +0 -267
  14. package/skills/astropy/SKILL.md +0 -353
  15. package/skills/autoskill/SKILL.md +0 -233
  16. package/skills/benchling-integration/SKILL.md +0 -229
  17. package/skills/bgpt-paper-search/SKILL.md +0 -75
  18. package/skills/bids/SKILL.md +0 -237
  19. package/skills/biopython/SKILL.md +0 -472
  20. package/skills/bioservices/SKILL.md +0 -399
  21. package/skills/bulk-rnaseq/SKILL.md +0 -198
  22. package/skills/cellxgene-census/SKILL.md +0 -283
  23. package/skills/cirq/SKILL.md +0 -370
  24. package/skills/citation-management/SKILL.md +0 -329
  25. package/skills/clinical-decision-support/SKILL.md +0 -238
  26. package/skills/clinical-decision-support/references/README.md +0 -62
  27. package/skills/clinical-reports/SKILL.md +0 -248
  28. package/skills/clinical-reports/references/README.md +0 -34
  29. package/skills/cobrapy/SKILL.md +0 -496
  30. package/skills/consciousness-council/SKILL.md +0 -151
  31. package/skills/dask/SKILL.md +0 -482
  32. package/skills/database-lookup/SKILL.md +0 -386
  33. package/skills/datamol/SKILL.md +0 -200
  34. package/skills/deepchem/SKILL.md +0 -244
  35. package/skills/deepspot-m/SKILL.md +0 -175
  36. package/skills/deeptools/SKILL.md +0 -412
  37. package/skills/depmap/SKILL.md +0 -301
  38. package/skills/dhdna-profiler/SKILL.md +0 -184
  39. package/skills/diffdock/SKILL.md +0 -488
  40. package/skills/dnanexus-integration/SKILL.md +0 -325
  41. package/skills/docx/SKILL.md +0 -99
  42. package/skills/esm/SKILL.md +0 -334
  43. package/skills/etetoolkit/SKILL.md +0 -327
  44. package/skills/exa-search/SKILL.md +0 -102
  45. package/skills/executing-plans/SKILL.md +0 -14
  46. package/skills/experimental-design/SKILL.md +0 -234
  47. package/skills/exploratory-data-analysis/SKILL.md +0 -280
  48. package/skills/flowio/SKILL.md +0 -310
  49. package/skills/fluidsim/SKILL.md +0 -279
  50. package/skills/frontend-design/SKILL.md +0 -100
  51. package/skills/generate-image/SKILL.md +0 -304
  52. package/skills/geniml/SKILL.md +0 -310
  53. package/skills/genomic-coordinates/SKILL.md +0 -189
  54. package/skills/genomic-intelligence/SKILL.md +0 -243
  55. package/skills/geomaster/README.md +0 -105
  56. package/skills/geomaster/SKILL.md +0 -366
  57. package/skills/geopandas/SKILL.md +0 -250
  58. package/skills/get-available-resources/SKILL.md +0 -260
  59. package/skills/gget/SKILL.md +0 -153
  60. package/skills/ginkgo-cloud-lab/SKILL.md +0 -106
  61. package/skills/glycoengineering/SKILL.md +0 -339
  62. package/skills/gtars/SKILL.md +0 -282
  63. package/skills/guardian-rails/SKILL.md +0 -54
  64. package/skills/histolab/SKILL.md +0 -243
  65. package/skills/hugging-science/SKILL.md +0 -132
  66. package/skills/hypogenic/SKILL.md +0 -290
  67. package/skills/hypothesis-generation/SKILL.md +0 -264
  68. package/skills/imaging-data-commons/SKILL.md +0 -496
  69. package/skills/infographics/SKILL.md +0 -315
  70. package/skills/iso-standards-readiness/SKILL.md +0 -352
  71. package/skills/lab-hardware-cad/SKILL.md +0 -372
  72. package/skills/labarchive-integration/SKILL.md +0 -216
  73. package/skills/lamindb/SKILL.md +0 -408
  74. package/skills/latchbio-integration/SKILL.md +0 -227
  75. package/skills/latex-posters/SKILL.md +0 -369
  76. package/skills/latex-posters/references/README.md +0 -439
  77. package/skills/liteparse/SKILL.md +0 -295
  78. package/skills/literature-review/SKILL.md +0 -263
  79. package/skills/markdown-mermaid-writing/SKILL.md +0 -322
  80. package/skills/market-research-reports/SKILL.md +0 -337
  81. package/skills/markitdown/SKILL.md +0 -264
  82. package/skills/matchms/SKILL.md +0 -276
  83. package/skills/matlab/SKILL.md +0 -274
  84. package/skills/matplotlib/SKILL.md +0 -378
  85. package/skills/medchem/SKILL.md +0 -321
  86. package/skills/modal/SKILL.md +0 -468
  87. package/skills/molecular-dynamics/SKILL.md +0 -458
  88. package/skills/molfeat/SKILL.md +0 -348
  89. package/skills/ncats-arax/SKILL.md +0 -178
  90. package/skills/networkx/SKILL.md +0 -440
  91. package/skills/neurokit2/SKILL.md +0 -323
  92. package/skills/neuropixels-analysis/SKILL.md +0 -412
  93. package/skills/nextflow/SKILL.md +0 -195
  94. package/skills/omero-integration/SKILL.md +0 -222
  95. package/skills/onekgpd/SKILL.md +0 -371
  96. package/skills/ontology-term-resolution/SKILL.md +0 -147
  97. package/skills/open-notebook/SKILL.md +0 -297
  98. package/skills/openpiv/SKILL.md +0 -469
  99. package/skills/opentrons-integration/SKILL.md +0 -322
  100. package/skills/optimize-for-gpu/SKILL.md +0 -176
  101. package/skills/owasp-top10/SKILL.md +0 -48
  102. package/skills/pacsomatic/LICENSE +0 -21
  103. package/skills/pacsomatic/SKILL.md +0 -150
  104. package/skills/paper-lookup/SKILL.md +0 -263
  105. package/skills/paperclip/SKILL.md +0 -413
  106. package/skills/paperzilla/SKILL.md +0 -159
  107. package/skills/parallel-web/SKILL.md +0 -128
  108. package/skills/pathml/SKILL.md +0 -222
  109. package/skills/pathogen-variant-surveillance/SKILL.md +0 -208
  110. package/skills/pathway-enrichment/SKILL.md +0 -194
  111. package/skills/pdf/SKILL.md +0 -322
  112. package/skills/peer-review/SKILL.md +0 -288
  113. package/skills/penetration-testing/SKILL.md +0 -31
  114. package/skills/pennylane/SKILL.md +0 -240
  115. package/skills/phylogenetics/SKILL.md +0 -409
  116. package/skills/pi-agent/SKILL.md +0 -83
  117. package/skills/pkpd-modeling/SKILL.md +0 -381
  118. package/skills/polars/SKILL.md +0 -393
  119. package/skills/polars-bio/SKILL.md +0 -379
  120. package/skills/ponytail/SKILL.md +0 -31
  121. package/skills/ponytail-audit/SKILL.md +0 -18
  122. package/skills/pptx/SKILL.md +0 -246
  123. package/skills/pptx-posters/SKILL.md +0 -258
  124. package/skills/primekg/SKILL.md +0 -99
  125. package/skills/protocolsio-integration/SKILL.md +0 -236
  126. package/skills/pufferlib/SKILL.md +0 -328
  127. package/skills/pydeseq2/SKILL.md +0 -369
  128. package/skills/pydicom/SKILL.md +0 -381
  129. package/skills/pyhealth/SKILL.md +0 -124
  130. package/skills/pylabrobot/SKILL.md +0 -216
  131. package/skills/pymatgen/SKILL.md +0 -404
  132. package/skills/pymc/SKILL.md +0 -310
  133. package/skills/pymoo/SKILL.md +0 -276
  134. package/skills/pyopenms/SKILL.md +0 -179
  135. package/skills/pysam/SKILL.md +0 -330
  136. package/skills/pytdc/SKILL.md +0 -297
  137. package/skills/pytorch-lightning/SKILL.md +0 -191
  138. package/skills/pyzotero/SKILL.md +0 -137
  139. package/skills/qiskit/SKILL.md +0 -259
  140. package/skills/qutip/SKILL.md +0 -317
  141. package/skills/rdkit/SKILL.md +0 -94
  142. package/skills/relsa-severity-assessment/SKILL.md +0 -354
  143. package/skills/research-grants/SKILL.md +0 -296
  144. package/skills/research-grants/references/README.md +0 -287
  145. package/skills/research-lookup/README.md +0 -106
  146. package/skills/research-lookup/SKILL.md +0 -338
  147. package/skills/rowan/SKILL.md +0 -398
  148. package/skills/scanpy/SKILL.md +0 -303
  149. package/skills/scholar-evaluation/SKILL.md +0 -296
  150. package/skills/scientific-brainstorming/SKILL.md +0 -282
  151. package/skills/scientific-critical-thinking/SKILL.md +0 -180
  152. package/skills/scientific-schematics/SKILL.md +0 -370
  153. package/skills/scientific-slides/SKILL.md +0 -379
  154. package/skills/scientific-visualization/SKILL.md +0 -285
  155. package/skills/scientific-writing/SKILL.md +0 -356
  156. package/skills/scikit-bio/SKILL.md +0 -470
  157. package/skills/scikit-learn/SKILL.md +0 -324
  158. package/skills/scikit-survival/SKILL.md +0 -313
  159. package/skills/scvelo/SKILL.md +0 -328
  160. package/skills/scvi-tools/SKILL.md +0 -201
  161. package/skills/seaborn/SKILL.md +0 -254
  162. package/skills/security-auditor/SKILL.md +0 -37
  163. package/skills/shap/SKILL.md +0 -282
  164. package/skills/simpy/SKILL.md +0 -283
  165. package/skills/stable-baselines3/SKILL.md +0 -325
  166. package/skills/statistical-analysis/SKILL.md +0 -446
  167. package/skills/statistical-power/SKILL.md +0 -200
  168. package/skills/statsmodels/SKILL.md +0 -238
  169. package/skills/sympy/SKILL.md +0 -354
  170. package/skills/systematic-debugging/SKILL.md +0 -35
  171. package/skills/tamarind/SKILL.md +0 -285
  172. package/skills/tdd/SKILL.md +0 -26
  173. package/skills/tiledbvcf/SKILL.md +0 -456
  174. package/skills/timesfm-forecasting/SKILL.md +0 -408
  175. package/skills/timesfm-forecasting/examples/global-temperature/README.md +0 -178
  176. package/skills/torch-geometric/SKILL.md +0 -458
  177. package/skills/torchdrug/SKILL.md +0 -241
  178. package/skills/transformers/SKILL.md +0 -195
  179. package/skills/treatment-plans/SKILL.md +0 -174
  180. package/skills/treatment-plans/references/README.md +0 -19
  181. package/skills/umap-learn/SKILL.md +0 -488
  182. package/skills/uncertainty-and-units/SKILL.md +0 -384
  183. package/skills/usfiscaldata/SKILL.md +0 -171
  184. package/skills/vaex/SKILL.md +0 -204
  185. package/skills/venue-templates/SKILL.md +0 -269
  186. package/skills/verification-before-completion/SKILL.md +0 -22
  187. package/skills/waypoint-bio/SKILL.md +0 -273
  188. package/skills/what-if-oracle/SKILL.md +0 -184
  189. package/skills/writing-plans/SKILL.md +0 -15
  190. package/skills/xlsx/SKILL.md +0 -110
  191. package/skills/zarr-python/SKILL.md +0 -241
@@ -1,310 +0,0 @@
1
- ---
2
- name: flowio
3
- description: Read, inspect, and write Flow Cytometry Standard (FCS) 2.0, 3.0, and 3.1 files with FlowIO. Use for low-level FCS metadata and channel inspection, NumPy event extraction, multi-dataset files, table export, and FCS 3.1 creation; use FlowKit for compensation, cytometry transforms, gating, or FlowJo workspaces.
4
- allowed-tools: Read Write Bash
5
- license: BSD-3-Clause license
6
- compatibility: Requires Python 3.9-3.13, uv, and FlowIO 1.4.0. NumPy is installed with FlowIO; pandas is optional for DataFrame workflows. Runtime parsing is local and needs no credentials or network access.
7
- metadata:
8
- version: "2.0"
9
- skill-author: K-Dense Inc.
10
- ---
11
-
12
- # FlowIO
13
-
14
- ## Purpose
15
-
16
- Use FlowIO as a lightweight, low-level reader and writer for Flow Cytometry
17
- Standard files. Examples in this skill target **FlowIO 1.4.0**, the current
18
- stable release verified on 2026-07-23.
19
-
20
- FlowIO is appropriate for:
21
-
22
- - Reading FCS 2.0, 3.0, and 3.1 files
23
- - Inspecting HEADER, TEXT, ANALYSIS, and channel metadata
24
- - Retrieving event data as a two-dimensional NumPy array
25
- - Reading legacy files that contain multiple datasets
26
- - Writing list-mode, single-precision FCS 3.1 files
27
- - Preparing data for pandas, machine-learning, or downstream cytometry tools
28
-
29
- FlowIO does **not** perform compensation, logicle/biexponential transforms,
30
- gating, clustering, or FlowJo workspace processing. Use FlowKit or another
31
- analysis package for those tasks.
32
-
33
- ## Install
34
-
35
- Create or activate a Python environment, then install the verified release:
36
-
37
- ```bash
38
- uv pip install "flowio==1.4.0"
39
- ```
40
-
41
- Confirm the runtime version:
42
-
43
- ```bash
44
- uv run python -c "import flowio; print(flowio.__version__)"
45
- ```
46
-
47
- FlowIO 1.4.0 supports Python 3.9 through 3.13 and depends on NumPy.
48
-
49
- ## Operating Workflow
50
-
51
- 1. **Clarify the operation.** Distinguish metadata inventory, event extraction,
52
- file repair, conversion, and downstream biological analysis.
53
- 2. **Inspect before loading events.** Use `only_text=True` for metadata-only
54
- work, especially with large or unfamiliar files.
55
- 3. **Choose event semantics explicitly.** Use `as_array(preprocess=True)` for
56
- gain/log/time scaling from FCS metadata, or `preprocess=False` for values as
57
- encoded in the DATA segment. Record the choice.
58
- 4. **Keep parsing strict by default.** Do not automatically suppress offset
59
- errors. Relax checks only for a known vendor-format defect, and review the
60
- resulting event data.
61
- 5. **Treat metadata as potentially sensitive.** FCS TEXT values can include
62
- sample, subject, operator, and instrument identifiers. Export only fields
63
- needed for the task.
64
- 6. **Validate writes by reopening them.** Check event/channel counts, labels,
65
- metadata, and representative values after any FCS export.
66
-
67
- ## Critical Semantics
68
-
69
- ### TEXT keys are normalized
70
-
71
- `FlowData.text` stores keys in lowercase and strips the leading `$` from
72
- standard FCS keywords:
73
-
74
- ```python
75
- from flowio import FlowData
76
-
77
- flow = FlowData("sample.fcs", only_text=True)
78
- acquisition_date = flow.text.get("date")
79
- instrument = flow.text.get("cyt")
80
- next_dataset = int(flow.text.get("nextdata", "0"))
81
- ```
82
-
83
- Do not look up `"$DATE"`, `"$CYT"`, or other uppercase dollar-prefixed keys.
84
- TEXT values remain strings. FlowIO 1.4.0 also removes every `$` character from
85
- the decoded TEXT segment, including `$` characters inside values; preserve the
86
- original file when exact metadata fidelity matters.
87
-
88
- ### Events have two representations
89
-
90
- - `flow.events` is the unprocessed, flattened one-dimensional event array.
91
- - `flow.as_array()` returns shape `(event_count, channel_count)` as a NumPy
92
- `float64` array.
93
- - `flow.as_array(preprocess=True)` applies FCS gain, logarithmic, and time
94
- scaling. It does not apply compensation or logicle/biexponential display
95
- transforms.
96
- - `flow.as_array(preprocess=False)` reshapes the encoded event values without
97
- those scaling steps.
98
-
99
- `as_array()` creates another in-memory array. FlowIO does not provide chunked
100
- or memory-mapped event access.
101
-
102
- ### Channel numbering uses two conventions
103
-
104
- - NumPy columns and `fluoro_indices`, `scatter_indices`, and `time_index` use
105
- zero-based indices.
106
- - `flow.channels` uses FCS parameter numbers beginning at 1.
107
- - `null_channels` contains the PnN label strings supplied through
108
- `null_channel_list`, including supplied labels that were not found.
109
- - `pns_labels` always matches `pnn_labels` in length; missing optional PnS
110
- labels appear as empty strings.
111
-
112
- ### Writing is intentionally limited
113
-
114
- `create_fcs()` requires:
115
-
116
- - An already-open binary file handle
117
- - Flattened one-dimensional event data in row-major event/channel order
118
- - One PnN name per channel
119
- - Optional PnS names and string-valued metadata via `metadata_dict`
120
-
121
- It writes FCS 3.1 list-mode (`$MODE=L`) single-precision float
122
- (`$DATATYPE=F`) data. Required interpretation keywords are generated by
123
- FlowIO and cannot be overridden through metadata.
124
-
125
- ## Quick Start: Read an FCS File
126
-
127
- ```python
128
- from pathlib import Path
129
-
130
- from flowio import FlowData
131
-
132
- flow = FlowData(Path("sample.fcs"))
133
- events = flow.as_array(preprocess=True)
134
-
135
- print(
136
- {
137
- "version": flow.version,
138
- "events": flow.event_count,
139
- "channels": flow.channel_count,
140
- "shape": events.shape,
141
- "pnn": flow.pnn_labels,
142
- "pns": flow.pns_labels,
143
- "date": flow.text.get("date"),
144
- "instrument": flow.text.get("cyt"),
145
- }
146
- )
147
- ```
148
-
149
- For metadata only:
150
-
151
- ```python
152
- from flowio import FlowData
153
-
154
- flow = FlowData("sample.fcs", only_text=True)
155
- print(flow.version, flow.event_count, flow.pnn_labels)
156
- ```
157
-
158
- Do not call `as_array()` on a metadata-only instance because its event data was
159
- not loaded.
160
-
161
- Prefer a path or `Path` over a caller-owned file handle. `FlowData` closes a
162
- provided handle after parsing. In FlowIO 1.4.0,
163
- `read_multiple_data_sets(handle)` can fail after the first dataset because the
164
- handle has been closed; pass a filesystem path for multi-dataset files.
165
-
166
- ## Quick Start: Read Multiple Datasets
167
-
168
- Use the standalone helper rather than manually interpreting `$NEXTDATA`
169
- offsets:
170
-
171
- ```python
172
- from flowio import read_multiple_data_sets
173
-
174
- datasets = read_multiple_data_sets("legacy-multi-dataset.fcs")
175
- for index, dataset in enumerate(datasets):
176
- values = dataset.as_array(preprocess=True)
177
- print(index, dataset.event_count, dataset.pnn_labels, values.shape)
178
- ```
179
-
180
- The FCS 3.1 specification deprecated multiple datasets in one file, but FlowIO
181
- can read legacy files that use them.
182
-
183
- ## Quick Start: Create an FCS 3.1 File
184
-
185
- ```python
186
- from pathlib import Path
187
-
188
- import numpy as np
189
- from flowio import FlowData, create_fcs
190
-
191
- values = np.asarray(
192
- [[100.0, 200.0, 50.0], [150.0, 180.0, 60.0]],
193
- dtype=np.float32,
194
- )
195
- pnn_labels = ["FSC-A", "SSC-A", "FITC-A"]
196
- pns_labels = ["Forward scatter", "Side scatter", "CD3"]
197
-
198
- output = Path("output.fcs")
199
- with output.open("xb") as handle:
200
- create_fcs(
201
- handle,
202
- values.ravel(order="C"),
203
- pnn_labels,
204
- opt_channel_names=pns_labels,
205
- metadata_dict={
206
- "date": "23-JUL-2026",
207
- "cyt": "Example instrument",
208
- "src": "Validated NumPy array",
209
- },
210
- )
211
-
212
- roundtrip = FlowData(output)
213
- assert roundtrip.event_count == values.shape[0]
214
- assert roundtrip.pnn_labels == pnn_labels
215
- np.testing.assert_allclose(
216
- roundtrip.as_array(preprocess=False),
217
- values,
218
- rtol=1e-6,
219
- atol=1e-6,
220
- )
221
- ```
222
-
223
- Metadata keys may be supplied in mixed case or with `$`, but lowercase keys
224
- without `$` match FlowIO's normalized representation and are less error-prone.
225
- Metadata values must be strings.
226
-
227
- ## Copy or Rewrite an Existing File
228
-
229
- Use `write_fcs()` when the event data does not need to change:
230
-
231
- ```python
232
- from flowio import FlowData
233
-
234
- flow = FlowData("source.fcs")
235
-
236
- # Preserve selected source metadata (cyt, date, and spill/spillover when present).
237
- flow.write_fcs("copy.fcs")
238
-
239
- # Write only required metadata plus the custom fields supplied here.
240
- flow.write_fcs("deidentified.fcs", metadata={"src": "Deidentified export"})
241
- ```
242
-
243
- Passing `metadata=None` preserves FlowIO's selected defaults. Passing any
244
- dictionary, including `{}`, replaces those defaults rather than merging with
245
- them. `write_fcs()` always produces FCS 3.1 floating-point output; non-float
246
- source events are preprocessed before writing. It opens the destination for
247
- overwrite, so reject an existing output path before calling it unless
248
- replacement is intentional. For floating-point sources it can preserve encoded
249
- events while dropping PnG or `timestep`, changing later
250
- `as_array(preprocess=True)` results. Validate both raw and preprocessed
251
- round-trips.
252
-
253
- Use `create_fcs()` instead when event values, event count, or channel layout
254
- changes.
255
-
256
- ## Bundled Inspector
257
-
258
- `scripts/inspect_fcs.py` inventories one or more datasets without network
259
- access. By default it reads metadata only, emits structural fields and channel
260
- labels without full TEXT/ANALYSIS values, and refuses files above a
261
- configurable size limit.
262
-
263
- Set `FLOWIO_SKILL_DIR` to the installed skill directory. From this repository's
264
- root, use `skills/flowio`:
265
-
266
- ```bash
267
- FLOWIO_SKILL_DIR="skills/flowio"
268
-
269
- # Metadata and channel inventory
270
- uv run --no-project --with "flowio==1.4.0" \
271
- python "$FLOWIO_SKILL_DIR/scripts/inspect_fcs.py" sample.fcs
272
-
273
- # Include all normalized TEXT metadata; review output for identifiers
274
- uv run --no-project --with "flowio==1.4.0" \
275
- python "$FLOWIO_SKILL_DIR/scripts/inspect_fcs.py" sample.fcs --include-text
276
-
277
- # Load events and compute finite-value statistics using FlowIO preprocessing
278
- uv run --no-project --with "flowio==1.4.0" \
279
- python "$FLOWIO_SKILL_DIR/scripts/inspect_fcs.py" sample.fcs --stats
280
-
281
- # Compute statistics from encoded values instead
282
- uv run --no-project --with "flowio==1.4.0" \
283
- python "$FLOWIO_SKILL_DIR/scripts/inspect_fcs.py" sample.fcs --stats --raw
284
- ```
285
-
286
- Use `--help` for output files, input/array memory limits, null-channel labels,
287
- and controlled offset-recovery options.
288
-
289
- ## References
290
-
291
- Read only the reference needed for the current task:
292
-
293
- - `references/api_reference.md` — exact FlowIO 1.4.0 public API and signatures
294
- - `references/workflows.md` — inventory, DataFrame/CSV, batch, write, and
295
- round-trip patterns
296
- - `references/fcs_semantics.md` — FCS structure, metadata normalization,
297
- preprocessing equations, indexing, and writer behavior
298
- - `references/troubleshooting.md` — offset failures, multi-dataset files,
299
- memory limits, validation, security, and privacy
300
- - `references/sources.md` — authoritative upstream docs, release notes, source,
301
- and FCS 3.1 publications used for this refresh
302
-
303
- ## Non-Negotiable Checks
304
-
305
- - Never claim FlowIO applies compensation or gating.
306
- - Never treat `as_array(preprocess=True)` as raw acquisition values.
307
- - Never pass a two-dimensional array or a path directly to `create_fcs()`.
308
- - Never assume TEXT keys retain `$` or uppercase spelling.
309
- - Never silence offset errors without documenting why and validating the data.
310
- - Never describe FlowIO event loading as streaming or chunked.
@@ -1,279 +0,0 @@
1
- ---
2
- name: fluidsim
3
- description: Plan, configure, inspect, restart, and analyze bounded FluidSim computational-fluid-dynamics simulations with explicit numerical-validity and HPC safety checks. Use for FluidSim solver selection, parameter review, FFT/MPI setup, output diagnostics, or restart compatibility.
4
- license: MIT
5
- compatibility: Bundled CLIs require Python 3.11+ and use the standard library; HDF5/netCDF4 metadata tools lazily use h5py when available. Simulation examples target fluidsim 0.9.0, fluidfft 0.4.5, and pyFFTW 0.15.1. MPI/native FFT use requires a site-compatible MPI implementation, development headers, FFTW/PFFT/P3DFFT libraries, compilers, and an approved scheduler workflow. No GPU backend is assumed.
6
- allowed-tools: Read Write Bash Glob Python
7
- metadata:
8
- version: "1.1"
9
- skill-author: "K-Dense Inc."
10
- last-reviewed: "2026-07-23"
11
- ---
12
-
13
- # FluidSim
14
-
15
- Use FluidSim 0.9.0 as a framework for Python-defined numerical solvers, especially
16
- periodic Cartesian pseudospectral CFD. Upstream FluidSim is CeCILL-2.1; the MIT
17
- frontmatter license applies only to this skill.
18
-
19
- This skill does **not** treat a completed run, a stable time step, a smooth plot,
20
- or a closed program exit as evidence of numerical convergence or physical
21
- validity.
22
-
23
- ## Required workflow
24
-
25
- 1. State equations, units or nondimensionalization, geometry, boundaries,
26
- initial conditions, forcing, observables, and acceptance criteria.
27
- 2. Select a verified solver and inspect its generated default parameters.
28
- 3. Create a strict JSON plan with explicit CPU, RAM, disk, wall-time, output-file,
29
- timestep, CFL, resolution, and dealiasing bounds.
30
- 4. Run the bundled validator and resource estimator.
31
- 5. Generate and review a dry-run script. It does nothing unless executed with an
32
- explicit config-ID acknowledgement.
33
- 6. Run one tiny serial pilot. Inspect budgets, divergence/constraints, spectral
34
- tails, CFL/time-step history, and output growth.
35
- 7. Refine grid and time step independently. Check conservation/budget residuals
36
- and observable sensitivity.
37
- 8. Only then prepare a site-specific MPI job. Never submit or launch MPI
38
- automatically.
39
- 9. Preserve config, script, `uv.lock`, package/platform/backend versions, logs,
40
- output inventory, checksums, and restart lineage.
41
-
42
- Stop if physical assumptions, units, boundary conditions, forcing semantics,
43
- resolution criteria, resource limits, or acceptance criteria are missing.
44
-
45
- ## Version and installation
46
-
47
- As verified on 2026-07-23:
48
-
49
- - Latest stable PyPI release: `fluidsim==0.9.0` (2025-12-04).
50
- - Package metadata requires Python `>=3.11` and lists Python 3.11–3.14.
51
- - Pseudospectral parameter creation needs FluidFFT; bare `fluidsim` imported in
52
- the smoke test, but `ns2d.create_default_params()` failed until the `fft` extra
53
- was installed.
54
- - Current companion versions tested here: `fluidfft==0.4.5` and
55
- `pyFFTW==0.15.1`.
56
-
57
- Prefer a project lock:
58
-
59
- ```bash
60
- uv init --python 3.11
61
- uv add "fluidsim[fft]==0.9.0" "fluidfft==0.4.5" "pyFFTW==0.15.1"
62
- uv lock
63
- uv sync --frozen
64
- ```
65
-
66
- For an isolated disposable environment:
67
-
68
- ```bash
69
- uv venv --python 3.11
70
- uv pip install "fluidsim[fft]==0.9.0" "fluidfft==0.4.5" "pyFFTW==0.15.1"
71
- ```
72
-
73
- The project lock is the reproducibility record; direct pins alone do not freeze
74
- all transitive artifacts. Do not reuse a lock across incompatible platforms or
75
- MPI ABIs.
76
-
77
- MPI is optional and native:
78
-
79
- ```bash
80
- uv add "mpi4py==4.1.2" "fluidfft-mpi-with-fftw==0.0.1" "fluidfft-fftwmpi==0.0.1"
81
- uv lock
82
- ```
83
-
84
- Those packages still require a compatible MPI runtime and FFTW development
85
- libraries. The optional native plugins are:
86
-
87
- - `fluidfft-fftw==0.0.1`: sequential
88
- `fft2d.with_fftw1d`, `fft2d.with_fftw2d`, `fft3d.with_fftw3d`.
89
- - `fluidfft-mpi-with-fftw==0.0.1`: MPI
90
- `fft2d.mpi_with_fftw1d`, `fft3d.mpi_with_fftw1d`.
91
- - `fluidfft-fftwmpi==0.0.1`: MPI-enabled FFTW
92
- `fft2d.mpi_with_fftwmpi2d`, `fft3d.mpi_with_fftwmpi3d`.
93
- - `fluidfft-p3dfft==0.0.1`: `fft3d.mpi_with_p3dfft`; requires P3DFFT.
94
- - FluidFFT also declares PFFT and P3DFFT extras; audit and pin their native
95
- stacks for the target cluster.
96
-
97
- FluidFFT documents cuFFT historically, but FluidFFT 0.4.5 declares no CUDA extra
98
- or installed GPU plugin in its package metadata, and its CUDA installation page
99
- is unfinished. Do not claim GPU acceleration or install an unrelated CUDA wheel
100
- as a FluidSim backend. Treat GPU work as source-level experimental integration
101
- requiring separate validation.
102
-
103
- See [installation](references/installation.md) for system dependencies, MPI ABI,
104
- HDF5-MPI, backend discovery, and verification.
105
-
106
- ## API snapshot
107
-
108
- Use direct, versioned imports:
109
-
110
- ```python
111
- from fluidsim.solvers.ns2d.solver import Simul
112
-
113
- params = Simul.create_default_params()
114
- params.oper.nx = params.oper.ny = 32
115
- params.oper.Lx = params.oper.Ly = 2 * 3.141592653589793
116
- params.oper.coef_dealiasing = 2 / 3
117
- params.time_stepping.USE_CFL = True
118
- params.time_stepping.cfl_coef = 0.5
119
- params.time_stepping.deltat0 = 0.001
120
- params.time_stepping.deltat_max = 0.01
121
- params.time_stepping.t_end = 0.1
122
- params.time_stepping.max_elapsed = "00:05:00"
123
- params.init_fields.type = "noise"
124
- params.init_fields.noise.velo_max = 0.01
125
- params.output.HAS_TO_SAVE = False
126
- params.output.ONLINE_PLOT_OK = False
127
- ```
128
-
129
- Important 0.9 corrections:
130
-
131
- - CFL field: `params.time_stepping.cfl_coef`, not `CFL`.
132
- - Time-correlated forcing:
133
- `params.forcing.tcrandom.time_correlation`, not a flat
134
- `tcrandom_time_correlation`.
135
- - NS2D default initial types include `constant`, `noise`, `jet`, `dipole`,
136
- `from_file`, `from_simul`, and `in_script`; do not invent a universal list for
137
- every solver.
138
- - Output state files default to `state_phys_t*.nc`; spectra use
139
- `spectra1D.h5`/`spectra2D.h5`; scalar means are solver-dependent
140
- `spatial_means.txt` or JSON-lines.
141
- - `params.output.sub_directory` is relative under `FLUIDSIM_PATH`.
142
-
143
- `ParamContainer` rejects undeclared attributes. Always generate defaults from the
144
- selected `Simul` class and inspect them before changing values. See
145
- [parameters](references/parameters.md).
146
-
147
- ## Solvers
148
-
149
- Primary Cartesian CFD keys and imports:
150
-
151
- ```python
152
- from fluidsim.solvers.ns2d.solver import Simul # ns2d
153
- from fluidsim.solvers.ns2d.bouss.solver import Simul # ns2d.bouss
154
- from fluidsim.solvers.ns2d.strat.solver import Simul # ns2d.strat
155
- from fluidsim.solvers.ns3d.solver import Simul # ns3d
156
- from fluidsim.solvers.ns3d.bouss.solver import Simul # ns3d.bouss
157
- from fluidsim.solvers.ns3d.strat.solver import Simul # ns3d.strat
158
- ```
159
-
160
- The 0.9 registry also includes `plate2d`, `sw1l` variants, `waves2d`, 1D models,
161
- 0D models, spherical solvers, and framework adapters. Availability in the
162
- registry does not make a solver appropriate for a scientific question. Verify
163
- equations, variables, geometry, boundaries, and diagnostics in the solver
164
- source. See [solvers](references/solvers.md).
165
-
166
- ## Forcing and time advancement
167
-
168
- Forcing is solver-specific. A current normalized random example is:
169
-
170
- ```python
171
- params.forcing.enable = True
172
- params.forcing.type = "tcrandom"
173
- params.forcing.forcing_rate = 1.0
174
- params.forcing.nkmin_forcing = 4
175
- params.forcing.nkmax_forcing = 5
176
- params.forcing.tcrandom.time_correlation = "based_on_forcing_rate"
177
- ```
178
-
179
- Record the forced variable, normalization definition, wave-number band, random
180
- seed/state, injection target, and measured injection. FluidSim 0.9 saves state
181
- parameters for restart; 0.8.6 fixed time-correlated forcing restart behavior.
182
-
183
- Available pseudospectral schemes include Euler/RK2 phase-shift variants,
184
- `RK2_trapezoid`, and `RK4`. A named order does not establish accuracy. Check CFL,
185
- fast-wave/diffusive limits, `deltat_max`, and time-step refinement. See
186
- [advanced features](references/advanced_features.md).
187
-
188
- ## Outputs, loading, and restart
189
-
190
- For read-only analysis:
191
-
192
- ```python
193
- from fluidsim import load_sim_for_plot
194
-
195
- sim = load_sim_for_plot("run-directory", hide_stdout=True)
196
- sim.output.spatial_means.plot()
197
- sim.output.spectra.plot1d()
198
- sim.output.phys_fields.plot(time=1.0)
199
- ```
200
-
201
- `load_sim_for_plot` uses a coarse operator and disables saving/online plotting.
202
- For a state-bearing object:
203
-
204
- ```python
205
- from fluidsim import load_state_phys_file
206
-
207
- sim = load_state_phys_file("run-directory", t_approx="last")
208
- ```
209
-
210
- For a controlled restart, prefer `load_for_restart` or first run
211
- `fluidsim-restart --only-check`. Do not use `--modify-params` with untrusted text:
212
- the upstream CLI executes Python code supplied to that option. This skill's
213
- generator never emits it. Verify solver, grid/domain, state variables, versions,
214
- forcing state, checksum, target time, output destination, and resource bounds.
215
- Resolution changes require the dedicated reviewed workflow, not a silent grid
216
- edit. See [simulation workflow](references/simulation_workflow.md) and
217
- [output analysis](references/output_analysis.md).
218
-
219
- ## Scientific acceptance gate
220
-
221
- Before interpreting results, require:
222
-
223
- - Explicit dimensional units or a complete nondimensionalization map.
224
- - Correct equations, periodic geometry/boundaries, initial state, forcing, and
225
- diagnostic definitions.
226
- - Resolution and dealiasing evidence: spectra/tails, resolved gradients, and
227
- solver-appropriate small-scale criteria.
228
- - Timestep evidence: CFL history, fastest-wave and dissipative limits, and
229
- smaller-step comparison.
230
- - Conservation and budget checks including forcing, dissipation, transfers, and
231
- residuals.
232
- - Grid/time refinement with uncertainty or sensitivity for reported
233
- observables.
234
- - Comparison to an analytical solution, manufactured solution, benchmark, or
235
- independently reproduced result where appropriate.
236
- - Complete provenance and restart lineage.
237
-
238
- Never label a run “DNS,” “converged,” “validated,” “steady,” or “physically
239
- correct” from parameter values or plots alone.
240
-
241
- ## Bundled local tools
242
-
243
- All tools emit strict JSON, reject URLs/traversal/symlinks, enforce hard bounds,
244
- use no network or subprocess, and never launch a simulation:
245
-
246
- ```bash
247
- python3 scripts/solver_config_validator.py --example
248
- python3 scripts/solver_config_validator.py --config config.json
249
- python3 scripts/grid_resource_estimator.py --config config.json
250
- python3 scripts/simulation_dry_run.py --config config.json --output run.py
251
- python3 scripts/output_inventory.py --path run-directory
252
- python3 scripts/budget_summary.py --path run-directory
253
- python3 scripts/restart_compatibility.py --source state.nc --target-config config.json
254
- ```
255
-
256
- The HDF5 tools lazily require `h5py`, inspect bounded metadata/hyperslabs, and
257
- never follow external links or load full field arrays.
258
-
259
- ## References
260
-
261
- - [Installation and FFT/MPI backends](references/installation.md)
262
- - [Solver registry and selection](references/solvers.md)
263
- - [Simulation, pilot, and restart workflow](references/simulation_workflow.md)
264
- - [Verified parameter surface](references/parameters.md)
265
- - [Output, plotting, and budget analysis](references/output_analysis.md)
266
- - [Forcing, operators, MPI, and migrations](references/advanced_features.md)
267
-
268
- ## Dated upstream basis
269
-
270
- Verified 2026-07-23 against
271
- [PyPI 0.9.0](https://pypi.org/project/fluidsim/),
272
- [FluidSim 0.9 docs](https://fluidsim.readthedocs.io/en/latest/),
273
- [release notes](https://fluidsim.readthedocs.io/en/latest/changes.html),
274
- [official source mirror](https://github.com/fluiddyn/fluidsim),
275
- [FluidFFT 0.4.5 docs](https://fluidfft.readthedocs.io/en/latest/), and the
276
- primary FluidSim ([DOI 10.5334/jors.239](https://doi.org/10.5334/jors.239))
277
- and FluidFFT ([DOI 10.5334/jors.238](https://doi.org/10.5334/jors.238))
278
- papers. API claims use official docs/source; method/performance claims in the
279
- references are scoped to the cited primary papers and their benchmark setups.
@@ -1,100 +0,0 @@
1
- ---
2
- name: frontend-design
3
- description: "Create distinctive, production-grade frontend interfaces with strong aesthetic intent, avoiding generic AI UI templates."
4
- ---
5
-
6
- # Frontend Design (Distinctive, Production-Grade)
7
-
8
- You are a **frontend designer-engineer**, not a layout generator.
9
-
10
- Your goal is to create **memorable, high-craft interfaces** that:
11
- * Avoid generic "AI UI" patterns (cookie-cutter SaaS templates, purple gradients, default cards).
12
- * Express a clear aesthetic point of view with intentional design systems.
13
- * Are fully functional, accessible, and production-ready.
14
- * Translate design intent directly into clean, modern code.
15
-
16
- ---
17
-
18
- ## 1. Core Design Mandate
19
-
20
- Every output must satisfy **all four**:
21
-
22
- 1. **Intentional Aesthetic Direction**
23
- A named, explicit design stance (e.g. *editorial brutalism*, *luxury minimal*, *retro-futurist*, *industrial utilitarian*, *organic/natural*, *playful kinetic*).
24
- 2. **Technical Correctness**
25
- Real, working HTML/CSS/JS or framework code (React, Vue, Svelte, Tailwind, Vanilla CSS) — not mockups.
26
- 3. **Visual Memorability**
27
- At least one element the user will remember 24 hours later (the *Differentiation Anchor*).
28
- 4. **Cohesive Restraint**
29
- No random decoration. Every flourish must serve the aesthetic thesis.
30
-
31
- ❌ No default layouts or cookie-cutter templates
32
- ❌ No design-by-components without a system
33
- ❌ No generic "safe" palettes (Inter/Roboto, purple-on-white)
34
- ✅ Strong opinions, well executed with precision
35
-
36
- ---
37
-
38
- ## 2. Design Feasibility & Impact Index (DFII)
39
-
40
- Before building, evaluate the design direction:
41
-
42
- | Dimension | Question |
43
- | :--- | :--- |
44
- | **Aesthetic Impact (1-5)** | How visually distinctive and memorable is this direction? |
45
- | **Context Fit (1-5)** | Does this aesthetic suit the product, audience, and purpose? |
46
- | **Implementation Feasibility (1-5)** | Can this be built cleanly with available tech? |
47
- | **Performance Safety (1-5)** | Will it remain fast and accessible? |
48
- | **Consistency Risk (1-5)** | Can this be maintained across screens/components? |
49
-
50
- **Formula**: `DFII = (Impact + Fit + Feasibility + Performance) - Consistency Risk` (Target: ≥ 8)
51
-
52
- ---
53
-
54
- ## 3. Aesthetic Execution Rules
55
-
56
- ### Typography
57
- * Avoid system defaults and generic fonts (Inter, Roboto, Arial).
58
- * Choose:
59
- * 1 expressive display font (e.g., *Outfit, Syne, Space Grotesk, Playfair Display, Cinzel, Clash Display*).
60
- * 1 restrained, high-legibility body font (e.g., *Plus Jakarta Sans, Geist, Satoshi, General Sans*).
61
- * Use typography structurally (scale, rhythm, contrast, line height).
62
-
63
- ### Color & Theme
64
- * Commit to a **dominant color story** using CSS variables.
65
- * Structure: One dominant background tone, one high-contrast accent, and a refined neutral system.
66
- * Avoid evenly-balanced palettes where every color competes for attention.
67
-
68
- ### Spatial Composition & Layout
69
- * Break the grid intentionally when appropriate: asymmetric placements, overlapping planes, deep negative space, or controlled typographic density.
70
- * White space is an active design element, not empty absence.
71
-
72
- ### Motion & Micro-interactions
73
- * Motion must be purposeful, sparse, and high-impact (e.g., smooth entrance sequence, tactile button clicks, magnetic hover states).
74
- * Avoid excessive micro-motion spam that distracts from user actions.
75
-
76
- ### Texture & Depth
77
- * Use subtle grain/noise overlays, gradient meshes, glassmorphic translucency, custom border treatments, or layered cards with purpose.
78
-
79
- ---
80
-
81
- ## 4. Anti-Patterns (Immediate Failure)
82
-
83
- ❌ Inter / Roboto / Arial default fonts without styling
84
- ❌ Generic purple-on-white SaaS gradient backgrounds
85
- ❌ Default unstyled Tailwind/Bootstrap card grids
86
- ❌ Symmetrical, predictable cookie-cutter sections
87
- ❌ Decorative clutter with no functional or brand purpose
88
- ❌ Creating detached temporary or scratch preview files (e.g. `tmp_*`, `draft.html`, `preview.tsx`) in root instead of in-place structured components
89
-
90
- ---
91
-
92
- ## 5. Output Checklist
93
-
94
- When presenting or building UI:
95
- - [ ] Explicit aesthetic direction named
96
- - [ ] DFII score ≥ 8
97
- - [ ] 1 distinctive differentiation anchor
98
- - [ ] Polished typography & color variables
99
- - [ ] Accessible (WCAG contrast, keyboard navigation, semantic HTML)
100
- - [ ] Production-ready code matches the design ambition