#binary-representation #parser #assignment #save #redistricting

bin+lib pcompress

实验性、高效且性能良好的区域划分计划二进制表示

2 个稳定版本

1.0.7 2022年4月1日
1.0.6 2021年10月30日
1.0.2 2021年9月23日
1.0.0 2021年8月29日
0.1.1 2021年8月25日

#187 in 压缩

每月37次下载
用于 binary-ensemble

MIT 许可证

110KB
255

pcompress

以前,很难从 GerryChain PythonGerryChain Julia 存储马尔可夫链蒙特卡洛运行的每个步骤的状态。此存储库生成分区/区域划分分配的有效、可流式传输的中间二进制表示,使得生成的计划可以即时保存(和分析)。每一步表示为与前一步的差分,从而显著减少了每步的磁盘使用量。然后使用 LZMA2(通过 XZ)压缩中间表示。

使用 pcompress,您可以以通用便携式格式保存/回放 MCMC 运行,使我们的当前用例得以实现,例如

  • 积极在各个状态下运行 MCMC,然后在更高的速度下回放(例如,在国会级别为 10-30 倍),以实现快速的分析周转时间
  • 利用 GerryChain Julia(或 frcw.rs)的速度,同时使用丰富的 GerryChain Python 分析工具
  • 使用 pcompress 的互操作性功能比较各种 MCMC 实现(Julia、Rust 和 Python)
  • 保存 MCMC 运行以实现实验的简单、精确可重复性
  • 等等。

pcompress 目前在 MGGG 中用于驱动我们几乎所有 MCMC/集成分析,以提供快速的分析周转时间并确保可重复性。

性能

这些数据来自在实验室会议中宣布 pcompress 的初始公告。请注意,这些指标可能略有过时——您可能会看到更好的实际性能。此外,这些指标未考虑更新器/评分开销(因为这取决于用户的代码)。

performance stats

给出的上限是为了提供一个估计,说明如果进一步优化并实现分片,pcompress 的速度可以达到多快。

安装

cargo install pcompress
pip install pcompress

Python 使用(与 GerryChain 一起)

请注意,chain 是一个普通的马尔可夫链对象,而 graph 是一个普通的 GerryChain 图。

录制

from pcompress import Record

for partition in Record(chain, "pa-run.chain"):
    # normal chain stuff here

回放

from pcompress import Record

for partition in Replay(graph, "pa-run.chain", updaters=my_updaters):
   # normal chain stuff here

有关 GerryChain Python 的更多示例,请参阅 此处

许可证和致谢

pcompressMax Fan 编写和维护,并采用 AGPLv3 许可协议。如果您想贡献,PR 总是受欢迎的。

依赖项

~3.5MB
~64K SLoC