{"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/ocdaf-ordered-causal-discovery-with","title":"Order-based Structure Learning with Normalizing Flows","arxiv_id":"2308.07480","date":"2023-08-14","proceeding":null,"authors":["Hamidreza Kamkari","Vahid Balazadeh","Vahid Zehtab","Rahul G. Krishnan"],"abstract":"Estimating the causal structure of observational data is a challenging combinatorial search problem that scales super-exponentially with graph size. Existing methods use continuous relaxations to make this problem computationally tractable but often restrict the data-generating process to additive noise models (ANMs) through explicit or implicit assumptions. We present Order-based Structure Learning with Normalizing Flows (OSLow), a framework that relaxes these assumptions using autoregressive normalizing flows. We leverage the insight that searching over topological orderings is a natural way to enforce acyclicity in structure discovery and propose a novel, differentiable permutation learning method to find such orderings. Through extensive experiments on synthetic and real-world data, we demonstrate that OSLow outperforms prior baselines and improves performance on the observational Sachs and SynTReN datasets as measured by structural hamming distance and structural intervention distance, highlighting the importance of relaxing the ANM assumption made by existing methods.","url_abs":"https://arxiv.org/abs/2308.07480v2","url_pdf":"https://arxiv.org/pdf/2308.07480v2.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":"ocdaf-ordered-causal-discovery-with","repo_url":"https://github.com/hamidrezakmk/oslow","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":null},{"paper_slug":"ocdaf-ordered-causal-discovery-with","repo_url":"https://github.com/vahidzee/ocdaf","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":0,"framework":"pytorch","reach":null}],"tasks":[{"task_slug":"causal-discovery","task_name":"Causal Discovery"}],"methods":[{"method_slug":"normalizing-flows","method_name":"Normalizing Flows"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2308.07480","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2308.07480"}},"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":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/hamidrezakmk/oslow","reach":null},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/vahidzee/ocdaf","reach":null}],"summary":{"ran_fixture":1,"ran_honours":2,"ran_draft_wrong":1,"unverified":1},"by_repo_kind":{"official":{"samples":5,"ran":4,"repositories":2}},"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":0,"samples":[{"code_sha256_prefix":"a86ab79ff7c3ca42","entry":"full_DAG","repo":"vahidzee/ocdaf","repo_kind":"official","path":"prune.py","file_url":"https://github.com/vahidzee/ocdaf/blob/HEAD/prune.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"well_formed","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"a86ab79ff7c3ca42"}},{"code_sha256_prefix":"5ce748f2fb1fa0a7","entry":"get_permutations","repo":"hamidrezakmk/oslow","repo_kind":"official","path":"ensemble.py","file_url":"https://github.com/hamidrezakmk/oslow/blob/HEAD/ensemble.py","link_basis":"first_harvest_node","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"well_formed","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"5ce748f2fb1fa0a7"}},{"code_sha256_prefix":"6862bc3d544ccf01","entry":"get_torch_distribution","repo":"hamidrezakmk/oslow","repo_kind":"official","path":"ensemble.py","file_url":"https://github.com/hamidrezakmk/oslow/blob/HEAD/ensemble.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"6862bc3d544ccf01"}},{"code_sha256_prefix":"be5d8127b2e7a39c","entry":"get_torch_distribution_args","repo":"hamidrezakmk/oslow","repo_kind":"official","path":"ensemble.py","file_url":"https://github.com/hamidrezakmk/oslow/blob/HEAD/ensemble.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":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"be5d8127b2e7a39c"}},{"code_sha256_prefix":"f18288f86a791db3","entry":"get_data_config","repo":"vahidzee/ocdaf","repo_kind":"official","path":"prune.py","file_url":"https://github.com/vahidzee/ocdaf/blob/HEAD/prune.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"f18288f86a791db3"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}