What is the purpose of Block classes?

I see that there are BlockCTArray, BlockPTArray, BlockFHETensor classes in the Git repo. The classes don’t seem to have an implementation. I was wondering if what the purpose of these classes will be?

I’m working on a project that uses a series of large matrix multiplications. Since CTArray requires the number of elements in a matrix to be less than or equal to slot_count, I would have to increase slot count to at least the largest matrix dimension squared. With a matrix of size 1024x768, I would need slot_count=2^20. This would use up an extraordinary amount of memory.

I’ve been working on ways to split up matrices into smaller ciphertexts to avoid needing such a high slot count. If this is the intended direction for the Block classes, I’d be happy to contribute.

We use these classes to implement support for large matrix arithmetic. Given a fixed ring dimension, if a matrix requires more slots than a ciphertext can provide, the large matrix arithmetic backend automatically packs it into smaller ciphertext blocks. This enables users to work with large matrices without increasing the ring dimension.

We will release this version soon, and we would be happy to receive your feedback once it is available.

I briefly looked at the dev branch. It looks like these blocks are for large 2D matrices only. Is there any intention to support higher dimension tensors in the future?