{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/enabling-efficient-equivariant-operations-in","title":"Enabling Efficient Equivariant Operations in the Fourier Basis via Gaunt Tensor Products","arxiv_id":"2401.10216","date":"2024-01-18","proceeding":null,"authors":["Shengjie Luo","Tianlang Chen","Aditi S. Krishnapriyan"],"abstract":"Developing equivariant neural networks for the E(3) group plays an important role in modeling 3D data across real-world applications. Enforcing this equivariance primarily involves the tensor products of irreducible representations (irreps). However, the computational complexity of such operations increases significantly as higher-order tensors are used. In this work, we propose a systematic approach to substantially accelerate the computation of the tensor products of irreps. We mathematically connect the commonly used Clebsch-Gordan coefficients to the Gaunt coefficients, which are integrals of products of three spherical harmonics. Through Gaunt coefficients, the tensor product of irreps becomes equivalent to the multiplication between spherical functions represented by spherical harmonics. This perspective further allows us to change the basis for the equivariant operations from spherical harmonics to a 2D Fourier basis. Consequently, the multiplication between spherical functions represented by a 2D Fourier basis can be efficiently computed via the convolution theorem and Fast Fourier Transforms. This transformation reduces the complexity of full tensor products of irreps from $\\mathcal{O}(L^6)$ to $\\mathcal{O}(L^3)$, where $L$ is the max degree of irreps. Leveraging this approach, we introduce the Gaunt Tensor Product, which serves as a new method to construct efficient equivariant operations across different model architectures. Our experiments on the Open Catalyst Project and 3BPA datasets demonstrate both the increased efficiency and improved performance of our approach.","url_abs":"https://arxiv.org/abs/2401.10216v2","url_pdf":"https://arxiv.org/pdf/2401.10216v2.pdf","source":{"archive":"pwc-archive (Hugging Face), CC BY-SA 4.0","snapshot":"2025-07-28","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","row_kind":"abstracts"},"code_links":[{"paper_slug":"enabling-efficient-equivariant-operations-in","repo_url":"https://github.com/lsj2408/gaunt-tensor-product","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"jax","reach":{"status":"ok","spdx":"Apache-2.0"}}],"tasks":[],"methods":[{"method_slug":"convolution","method_name":"Convolution"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"syntology_url":null,"atlas_url":"https://app.syntology.ai/?focus=2401.10216","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2401.10216"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"provenance":"deterministic:regex_extraction","url":"https://github.com/lsj2408/Gaunt-Tensor-Product","reach":{"status":"ok","spdx":"Apache-2.0"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/lsj2408/gaunt-tensor-product","reach":{"status":"ok","spdx":"Apache-2.0"}}],"summary":{"ran":15,"ran_violates":4,"ran_honours":1,"unverified":4},"by_repo_kind":{"official":{"samples":23,"ran":19,"repositories":1},"community":{"samples":1,"ran":1,"repositories":1}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":1,"samples":[{"code_sha256_prefix":"a0b88a548830cf98","entry":"ClebschGordan","repo":"lsj2408/gaunt-tensor-product","repo_kind":"official","path":"force-field-modeling-3bpa/MACE/LieCG/CG_coefficients/CG_rot.py","file_url":"https://github.com/lsj2408/gaunt-tensor-product/blob/HEAD/force-field-modeling-3bpa/MACE/LieCG/CG_coefficients/CG_rot.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"a0b88a548830cf98"}},{"code_sha256_prefix":"05fbb48f432304eb","entry":"FFT","repo":"lsj2408/Gaunt-Tensor-Product","repo_kind":"official","path":"efficiency-comparison/fft.py","file_url":"https://github.com/lsj2408/Gaunt-Tensor-Product/blob/HEAD/efficiency-comparison/fft.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"05fbb48f432304eb"}},{"code_sha256_prefix":"ce1ffb6956fa7c7b","entry":"FFT_batch_channel","repo":"lsj2408/Gaunt-Tensor-Product","repo_kind":"official","path":"efficiency-comparison/fft.py","file_url":"https://github.com/lsj2408/Gaunt-Tensor-Product/blob/HEAD/efficiency-comparison/fft.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"ce1ffb6956fa7c7b"}},{"code_sha256_prefix":"f18e28a7c0cf9e04","entry":"FFT_channel","repo":"lsj2408/Gaunt-Tensor-Product","repo_kind":"official","path":"efficiency-comparison/fft.py","file_url":"https://github.com/lsj2408/Gaunt-Tensor-Product/blob/HEAD/efficiency-comparison/fft.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"f18e28a7c0cf9e04"}},{"code_sha256_prefix":"5a51dad6fe773f9c","entry":"Rot3DCoeffs","repo":"lsj2408/gaunt-tensor-product","repo_kind":"official","path":"force-field-modeling-3bpa/MACE/LieCG/CG_coefficients/CG_rot.py","file_url":"https://github.com/lsj2408/gaunt-tensor-product/blob/HEAD/force-field-modeling-3bpa/MACE/LieCG/CG_coefficients/CG_rot.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"5a51dad6fe773f9c"}},{"code_sha256_prefix":"e8488725c2821c4e","entry":"cg_conditions","repo":"lsj2408/gaunt-tensor-product","repo_kind":"official","path":"force-field-modeling-3bpa/MACE/LieCG/CG_coefficients/CG_rot.py","file_url":"https://github.com/lsj2408/gaunt-tensor-product/blob/HEAD/force-field-modeling-3bpa/MACE/LieCG/CG_coefficients/CG_rot.py","link_basis":"first_harvest_node","language":"python","status":"ran_violates","verification_level":1,"contract_check":"VIOLATES","metamorphic_tier":"deterministic","behaviour_fingerprint":true,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"e8488725c2821c4e"}},{"code_sha256_prefix":"1d1c344056d67391","entry":"cg_l_condition","repo":"lsj2408/gaunt-tensor-product","repo_kind":"official","path":"force-field-modeling-3bpa/MACE/LieCG/CG_coefficients/CG_rot.py","file_url":"https://github.com/lsj2408/gaunt-tensor-product/blob/HEAD/force-field-modeling-3bpa/MACE/LieCG/CG_coefficients/CG_rot.py","link_basis":"first_harvest_node","language":"python","status":"ran_violates","verification_level":1,"contract_check":"VIOLATES","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"1d1c344056d67391"}},{"code_sha256_prefix":"c6a6415c93989edb","entry":"cg_m_condition","repo":"lsj2408/gaunt-tensor-product","repo_kind":"official","path":"force-field-modeling-3bpa/MACE/LieCG/CG_coefficients/CG_rot.py","file_url":"https://github.com/lsj2408/gaunt-tensor-product/blob/HEAD/force-field-modeling-3bpa/MACE/LieCG/CG_coefficients/CG_rot.py","link_basis":"first_harvest_node","language":"python","status":"ran_violates","verification_level":1,"contract_check":"VIOLATES","metamorphic_tier":"deterministic","behaviour_fingerprint":true,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"c6a6415c93989edb"}},{"code_sha256_prefix":"2ceb0025f1a3db12","entry":"clebschgordan","repo":"lsj2408/gaunt-tensor-product","repo_kind":"official","path":"force-field-modeling-3bpa/MACE/LieCG/CG_coefficients/CG_rot.py","file_url":"https://github.com/lsj2408/gaunt-tensor-product/blob/HEAD/force-field-modeling-3bpa/MACE/LieCG/CG_coefficients/CG_rot.py","link_basis":"first_harvest_node","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"well_formed","behaviour_fingerprint":true,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"2ceb0025f1a3db12"}},{"code_sha256_prefix":"ad67339b74a878f4","entry":"coco_filter","repo":"lsj2408/Gaunt-Tensor-Product","repo_kind":"official","path":"force-field-modeling-3bpa/MACE/LieCG/CG_coefficients/CG_rot.py","file_url":"https://github.com/lsj2408/Gaunt-Tensor-Product/blob/HEAD/force-field-modeling-3bpa/MACE/LieCG/CG_coefficients/CG_rot.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"ad67339b74a878f4"}},{"code_sha256_prefix":"629660a18e55d63e","entry":"coco_filter2","repo":"lsj2408/Gaunt-Tensor-Product","repo_kind":"official","path":"force-field-modeling-3bpa/MACE/LieCG/CG_coefficients/CG_rot.py","file_url":"https://github.com/lsj2408/Gaunt-Tensor-Product/blob/HEAD/force-field-modeling-3bpa/MACE/LieCG/CG_coefficients/CG_rot.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"629660a18e55d63e"}},{"code_sha256_prefix":"662f5627f0873e13","entry":"create_Jx","repo":"lsj2408/Gaunt-Tensor-Product","repo_kind":"official","path":"force-field-modeling-3bpa/MACE/LieCG/Lie_groups/Rotations.py","file_url":"https://github.com/lsj2408/Gaunt-Tensor-Product/blob/HEAD/force-field-modeling-3bpa/MACE/LieCG/Lie_groups/Rotations.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"662f5627f0873e13"}},{"code_sha256_prefix":"67bb14caad016db4","entry":"create_Jy","repo":"lsj2408/Gaunt-Tensor-Product","repo_kind":"official","path":"force-field-modeling-3bpa/MACE/LieCG/Lie_groups/Rotations.py","file_url":"https://github.com/lsj2408/Gaunt-Tensor-Product/blob/HEAD/force-field-modeling-3bpa/MACE/LieCG/Lie_groups/Rotations.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"67bb14caad016db4"}},{"code_sha256_prefix":"74dca1841d91deed","entry":"f2sh","repo":"lsj2408/Gaunt-Tensor-Product","repo_kind":"official","path":"efficiency-comparison/f2sh.py","file_url":"https://github.com/lsj2408/Gaunt-Tensor-Product/blob/HEAD/efficiency-comparison/f2sh.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"74dca1841d91deed"}},{"code_sha256_prefix":"055b503cdc6b0c1b","entry":"f2sh_batch_channel","repo":"lsj2408/Gaunt-Tensor-Product","repo_kind":"official","path":"efficiency-comparison/f2sh.py","file_url":"https://github.com/lsj2408/Gaunt-Tensor-Product/blob/HEAD/efficiency-comparison/f2sh.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"055b503cdc6b0c1b"}},{"code_sha256_prefix":"8c4389223f782822","entry":"f2sh_channel","repo":"lsj2408/Gaunt-Tensor-Product","repo_kind":"official","path":"efficiency-comparison/f2sh.py","file_url":"https://github.com/lsj2408/Gaunt-Tensor-Product/blob/HEAD/efficiency-comparison/f2sh.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"8c4389223f782822"}},{"code_sha256_prefix":"27dc61986a394a2a","entry":"sh2f","repo":"lsj2408/Gaunt-Tensor-Product","repo_kind":"official","path":"efficiency-comparison/sh2f.py","file_url":"https://github.com/lsj2408/Gaunt-Tensor-Product/blob/HEAD/efficiency-comparison/sh2f.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"27dc61986a394a2a"}},{"code_sha256_prefix":"31a695005a03793b","entry":"sh2f_batch_channel","repo":"lsj2408/Gaunt-Tensor-Product","repo_kind":"official","path":"efficiency-comparison/sh2f.py","file_url":"https://github.com/lsj2408/Gaunt-Tensor-Product/blob/HEAD/efficiency-comparison/sh2f.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"31a695005a03793b"}},{"code_sha256_prefix":"d382cba70545c430","entry":"sh2f_channel","repo":"lsj2408/Gaunt-Tensor-Product","repo_kind":"official","path":"efficiency-comparison/sh2f.py","file_url":"https://github.com/lsj2408/Gaunt-Tensor-Product/blob/HEAD/efficiency-comparison/sh2f.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"d382cba70545c430"}},{"code_sha256_prefix":"440a098dda4f24f0","entry":"t_or_f","repo":"e3nn/e3nn","repo_kind":"community","path":"examples/tensor_product_benchmark.py","file_url":"https://github.com/e3nn/e3nn/blob/HEAD/examples/tensor_product_benchmark.py","link_basis":"first_harvest_node","language":"python","status":"ran_violates","verification_level":1,"contract_check":"VIOLATES","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"440a098dda4f24f0"}},{"code_sha256_prefix":"cee2ed5ee0d679ee","entry":"U_matrix_real","repo":"lsj2408/Gaunt-Tensor-Product","repo_kind":"official","path":"force-field-modeling-3bpa/MACE/LieCG/CG_coefficients/CG_rot_real.py","file_url":"https://github.com/lsj2408/Gaunt-Tensor-Product/blob/HEAD/force-field-modeling-3bpa/MACE/LieCG/CG_coefficients/CG_rot_real.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"cee2ed5ee0d679ee"}},{"code_sha256_prefix":"ae70e599fd8a7ff6","entry":"create_J","repo":"lsj2408/Gaunt-Tensor-Product","repo_kind":"official","path":"force-field-modeling-3bpa/MACE/LieCG/Lie_groups/Rotations.py","file_url":"https://github.com/lsj2408/Gaunt-Tensor-Product/blob/HEAD/force-field-modeling-3bpa/MACE/LieCG/Lie_groups/Rotations.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"ae70e599fd8a7ff6"}},{"code_sha256_prefix":"3ded1daa0770bc97","entry":"linear_out_irreps","repo":"lsj2408/Gaunt-Tensor-Product","repo_kind":"official","path":"force-field-modeling-3bpa/MACE/MACE/modules/irreps_tools.py","file_url":"https://github.com/lsj2408/Gaunt-Tensor-Product/blob/HEAD/force-field-modeling-3bpa/MACE/MACE/modules/irreps_tools.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"3ded1daa0770bc97"}},{"code_sha256_prefix":"18d9a7b0f17155e6","entry":"tp_out_irreps_with_instructions","repo":"lsj2408/Gaunt-Tensor-Product","repo_kind":"official","path":"force-field-modeling-3bpa/MACE/MACE/modules/irreps_tools.py","file_url":"https://github.com/lsj2408/Gaunt-Tensor-Product/blob/HEAD/force-field-modeling-3bpa/MACE/MACE/modules/irreps_tools.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"18d9a7b0f17155e6"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}