casacore的箭头绑定
项目描述
arcae实现了比成熟的python-casacore包更有限的子集功能。它绕过了python-casacore中的一些现有限制,从而提供了对CASA格式的安全、多线程访问,因此能够导出到Apache Arrow和Zarr等较新的本地云格式。
理由
casacore和Python绑定提供了对CASA表数据系统(CTDS)以及在该系统中创建的测量集的访问。截至casacore 3.5.0,CTDS存在以下限制:
从多个线程访问是不安全的。
python-casacore不释放全局解释器锁
解决这些问题的努力可能是一项重大工作,需要在整个CTDS系统中进行侵入性更改。
自CTDS开发以来,已经开发出Apache Arrow和Zarr等新的开源格式,这些格式适合表示射电天文学数据。
Apache Arrow项目定义了一种编程语言可移植的内存列存储格式。
将CTDS数据转换为Arrow相对简单,以下列出了某些限制。
很容易在不同的语言之间转换Arrow表。
一旦转换为Apache Arrow格式,数据就很容易存储在现代的云原生磁盘格式中,如Parquet和Zarr。
在C++层将CASA表格转换为Arrow可以避免全局解释器锁(GIL)。
对非线程安全CASA表格的访问仅限于包含单个线程的线程池。
这还允许我们用C++编写天文学例程,可能绕过CASA测量服务器中的线程安全和GIL问题。
限制
Arrow支持一维数组和嵌套结构。
固定形状的多维数据(即观测数据)目前表示为嵌套的FixedSizeListArray。
可变形状的多维数据(即子表数据)目前表示为嵌套的ListArray。
复杂数值表示为两个浮点数的额外嵌套的FixedSizeListArray。
目前,通过在Arrow数组上调用to_numpy来在上述数据之间进行转换并不是一件 trivial的事情(这里特意重复),但是从任一API重新解释底层数据缓冲区相对容易。这在getcol和putcol函数中是透明完成的(请参见下文的使用示例)。
未来,FixedShapeTensorArray和VariableShapeTensorArray将为表示多维数据提供更直观的结构。在Apache Arrow中支持复杂数值的第一类支持需要实现Arrow本身内的一个C++扩展类型。
一些其他边缘情况尚未实现,但经过一些思考可以实现。
具有无约束秩(ndim == -1)的列,其实际行具有不同的维度。实际具有相同秩的无约束秩列也得到照顾。
尚不能处理TpRecord列。最简单的方法是将这些行转换为JSON,并作为字符串存储。
尚不能处理TpQuantity列。可以将其表示为运行时参数化的Arrow DataType。
安装
为Linux和MacOSX提供二进制轮,适用于x86_64和arm64架构。
$ pip install arcae
用法
使用Arrow表格的示例用法
import json from pprint import pprint import arcae import pyarrow as pa import pyarrow.parquet as pq # Obtain (partial) Apache Arrow Table from a CASA Table casa_table = arcae.table("/path/to/measurementset.ms") arrow_table = casa_table.to_arrow() # read entire table arrow_table = casa_table.to_arrow(index=(slice(10, 20),) assert isinstance(arrow_table, pa.Table) # Print JSON-encoded Table and Column keywords pprint(json.loads(arrow_table.schema.metadata[b"__arcae_metadata__"])) pprint(json.loads(arrow_table.schema.field("DATA").metadata[b"__arcae_metadata__"])) pq.write_table(arrow_table, "measurementset.parquet")
从python-casacore复制了一些读取和写入功能,并增加了对一些NumPy高级索引的支持。
casa_table = arcae.table("/path/to/measurementset.ms", readonly=False) # Get rows 10 and 2, and channels 16 to 32, and all correlations data = casa_table.getcol("DATA", index=([10, 2], slice(16, 32), None) # Write some modified data back casa_table.putcol("DATA", data + 1*1j, index=([10, 2], slice(16, 32), None)
请参阅测试用例以获取更多使用案例。
将测量集导出到Arrow Parquet数据集
安装可选的applications扩展。
pip install arcae[applications]
然后,将可用的导出脚本
$ arcae export /path/to/the.ms --nrow 50000
$ tree output.arrow/
output.arrow/
├── ANTENNA
│ └── data0.parquet
├── DATA_DESCRIPTION
│ └── data0.parquet
├── FEED
│ └── data0.parquet
├── FIELD
│ └── data0.parquet
├── MAIN
│ └── FIELD_ID=0
│ └── PROCESSOR_ID=0
│ ├── DATA_DESC_ID=0
│ │ ├── data0.parquet
│ │ ├── data1.parquet
│ │ ├── data2.parquet
│ │ └── data3.parquet
│ ├── DATA_DESC_ID=1
│ │ ├── data0.parquet
│ │ ├── data1.parquet
│ │ ├── data2.parquet
│ │ └── data3.parquet
│ ├── DATA_DESC_ID=2
│ │ ├── data0.parquet
│ │ ├── data1.parquet
│ │ ├── data2.parquet
│ │ └── data3.parquet
│ └── DATA_DESC_ID=3
│ ├── data0.parquet
│ ├── data1.parquet
│ ├── data2.parquet
│ └── data3.parquet
├── OBSERVATION
│ └── data0.parquet
这些数据可以加载到Arrow数据集中
>>> import pyarrow as pa
>>> import pyarrow.dataset as pad
>>> main_ds = pad.dataset("output.arrow/MAIN")
>>> spw_ds = pad.dataset("output.arrow/SPECTRAL_WINDOW")
词源
名词:arca f (属格 arcae); 第一变位法 一个箱子,盒子,保险箱(用于存储物品的安全地方或形状相似的东西)
发音:ar-ki。
项目详情
arcade-0.2.5.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 8775383aa1a309f57f19daeb71d0ba5bc8f9074d2db945260c007316579725cb |
|
MD5 | 29846629e567f0dd78c8ae975ea3f31e |
|
BLAKE2b-256 | 5f616ebeecbe4c009c3699b1c06ad1cc775be45b264b5cc34e439c46f44e5c93 |
arcade-0.2.5-cp312-cp312-manylinux_2_28_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e9c06aa6ad4df7e7f5049fcc5b3ef0713846a50d479df6a60f2234827f6cb6bd |
|
MD5 | 638d54ba8de248071cbfc461cf447765 |
|
BLAKE2b-256 | 0407114c62e0037bb8b7f926163f95c52027a2121a9df1ffd283b87dc56eae8f |
arcade-0.2.5-cp312-cp312-manylinux_2_28_aarch64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e4876caa90da0a9f17a40b3950187444042ff5766ef3c4add07c12c42b8c4103 |
|
MD5 | 12f2f2d996d4aa9fd8667d9a9a953543 |
|
BLAKE2b-256 | 72cf210df26853486d4ba83cabca686edb77090005bae2d5985321ade342ba9b |
arcade-0.2.5-cp312-cp312-macosx_11_0_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b68a1bda21e141d809ddc414eeabdfd6e5b52bce8541ee7bcb4d70a9ed9011aa |
|
MD5 | 880c1bb7c2e16d9a666193a9e661b7ad |
|
BLAKE2b-256 | ba6085a84a9fd70f11fe3f3f3ef7e117f0ed5f6b6125ed17d1092980150f5614 |
arcade-0.2.5-cp312-cp312-macosx_11_0_arm64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d31c2dae23dbca6b1daa660efd3746e82bd38e748ae5cd141f3e902ab17c4665 |
|
MD5 | 0e9046b8d2e559b92630db4a189a5bca |
|
BLAKE2b-256 | c4f3c57530a2e665078199cfaf45e25ba6e9dcd6f05f827b8735aa3b38f558f1 |
arcade-0.2.5-cp311-cp311-manylinux_2_28_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 2fc90b3943232761fca717a124aeea825928f67fa1b221c279dac4874bf34f22 |
|
MD5 | a56f0a46a88be5aa66bad723998daae6 |
|
BLAKE2b-256 | 9b478959d55a4c25ef4307f85e6c3b85a729170cfe8da9fe12d8872d18bf48c4 |
arcade-0.2.5-cp311-cp311-manylinux_2_28_aarch64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 6c58e382f010dbee33b49abacf1d746f6a20e4310bc51d7d652dbdf358b945b0 |
|
MD5 | 33e765f6165cf15ec526840ce698d9f5 |
|
BLAKE2b-256 | 0b979baef37f6815b0ba722a61c91bd72d6b3a518de0b1b22bbd760180a7d434 |
arcade-0.2.5-cp311-cp311-macosx_11_0_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d00c04ab9aa065968229b1997b735f7c41c6d85d26c1c6a12efa67420dbaa93a |
|
MD5 | b0e083c71669d59b375b09060cf39764 |
|
BLAKE2b-256 | fde9078252fcc9a36ffa0ac6879e9f6923fbd975bb0706cee339fe1723ee013c |
arcade-0.2.5-cp311-cp311-macosx_11_0_arm64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | fa061b8efdccc2ab97679235f9ebc43f75bc02d2ca974b29af72e4d66b7e52e9 |
|
MD5 | 8b8d512969587cd6726d67690d2f84a9 |
|
BLAKE2b-256 | e1241087f411e8289f5f147374c36a6444eab554ebd27f9548503d5255959dd9 |
arcade-0.2.5-cp310-cp310-manylinux_2_28_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 9165dd319d3452181053ac9bee27b2fbd76b91a663c62282cb53c9e472603805 |
|
MD5 | d7bb8a1b94650fbf26b63557632c2a33 |
|
BLAKE2b-256 | fe8e8a219eeb505a3a794d8c28ff79db4e7e71728408e52e4568f2b47952e784 |
arcade-0.2.5-cp310-cp310-manylinux_2_28_aarch64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 9a6e9606cdae699d38136a0fb8b70b3f268b08698aa48a3ba24cff514a37d7a5 |
|
MD5 | 29701ac3673df38b1ebb531983ed4be8 |
|
BLAKE2b-256 | 00fdb76a28fdb71b02ca454a9ef2834faa37cbe8a7c6614e3f4298362b8ce6a4 |
哈希值 for arcae-0.2.5-cp310-cp310-macosx_11_0_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 040117f3d137435fcadb826d7c4fc0b7b0f67734cc2336ff69a5b5796414450a |
|
MD5 | a82e74933fcac7233e806f745a880d50 |
|
BLAKE2b-256 | 477cf9d1c76e83e8c9b9c45c9cb65422f5e2131dd55be2b58b1b64c800546efe |
哈希值 for arcae-0.2.5-cp310-cp310-macosx_11_0_arm64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1b2cc608342c7818afa4d46ccc8c08f4b35282900ff7b9eefebfe679905063ec |
|
MD5 | 9fd6338fc639fbaee663d7b3679d59a4 |
|
BLAKE2b-256 | 2f45f4e62ec5ec933bd6f26e5dc2519e450edb5924ac1405078a9c5575d5cf09 |