Transpilation support

This page is measured, not written

python -m tests.transpile.support_matrix calls quivers.transpile.transpile once per (program, backend) pair and writes this file from the outcomes. Every refusal quoted below is the runtime's own message, copied verbatim from the UnsupportedConstruct it raised. A drift test regenerates the page and fails when the result differs from what is committed.

transpile(module, target=...) has 11 registered backends. Given a program it either returns target source bytes or raises UnsupportedConstruct naming the constructs it cannot represent. This page records which of the two happens, for the 46 programs of the examples gallery and for 46 construct fixtures, each isolating a single QVR surface construct.

Support is thus stated as a refusal boundary rather than as a feature list. A construct no backend accepts is a limit of the export surface itself, and reaching any target means writing the model differently; a construct one backend alone refuses is a limit of that target, and another target may take the program unchanged. Sections 2 and 3 separate the two, since the remedies differ.

Refusals are grouped by construct, not by program: the heading of each group is the identifier prefix of the reported UnsupportedConstruct.kinds, which is what a reader asking whether a feature of their own model is supported wants to match on.

What this page does not cover is whether a rendered program's density agrees with QVR's own. That is the subject of the transpilation-correctness contract, which states the evidence available for the programs that do render, and of the transpilation architecture, which describes how a program reaches a target at all.

Coverage at a glance

Backend Gallery programs Constructs
bugs 25 / 46 38 / 46
church 23 / 46 41 / 46
edward2 31 / 46 41 / 46
gen 29 / 46 40 / 46
jags 29 / 46 38 / 46
numpyro 32 / 46 43 / 46
pymc 31 / 46 41 / 46
pyro 32 / 46 43 / 46
stan 31 / 46 39 / 46
turing 31 / 46 41 / 46
webppl 32 / 46 41 / 46

Each backend links to its transpilation-correctness page, which documents the structure it emits, the parameter conversions it applies, and the evidence exercised for it.

1. Can this backend take my program?

yes means transpile returned bytes; no means it raised UnsupportedConstruct. Sections 2 and 3 give the reason behind every no.

Program bugs church edward2 gen jags numpyro pymc pyro stan turing webppl
ar1 yes yes yes yes yes yes yes yes yes yes yes
bayesian_regression yes yes yes yes yes yes yes yes yes yes yes
beta_binomial_ab_test no no yes yes yes yes yes yes yes yes yes
beta_regression yes yes yes yes yes yes yes yes yes yes yes
bidirectional_rnn_lm no no no no no no no no no no no
bnn no no no no no no no no no no no
ccg yes yes yes yes yes yes yes yes yes yes yes
changepoint yes yes yes yes yes yes yes yes yes yes yes
continuous_hmm yes yes yes yes yes yes yes yes yes yes yes
custom_rules yes yes yes yes yes yes yes yes yes yes yes
deep_markov no no no no no no no no no no no
factor_analysis yes yes yes yes yes yes yes yes yes yes yes
gamma_regression yes yes yes yes yes yes yes yes yes yes yes
gru_lm no no no no no no no no no no no
half_student_t_hierarchical yes no yes yes yes yes yes yes yes yes yes
hmm no no no no no yes no yes yes no yes
horseshoe_regression yes yes yes yes yes yes yes yes yes yes yes
irt_2pl yes yes yes yes yes yes yes yes yes yes yes
kumaraswamy_bounded_outcome no no yes yes yes yes yes yes yes yes yes
lda yes yes yes no yes yes yes yes yes yes yes
linear_gaussian_ssm yes yes yes yes yes yes yes yes yes yes yes
lkj_cholesky_correlation no no yes yes no yes yes yes yes yes yes
logistic_noise_regression yes no yes yes yes yes yes yes yes yes yes
lstm_lm no no no no no no no no no no no
mixture_model no no yes yes yes yes yes yes yes yes yes
montague_nli no yes yes yes no yes yes yes no yes yes
multimodal_tlg yes yes yes yes yes yes yes yes yes yes yes
negbin_regression yes yes yes yes yes yes yes yes yes yes yes
parametric_pooling no no no no no no no no no no no
pcfg yes yes yes yes yes yes yes yes yes yes yes
pmcfg yes yes yes yes yes yes yes yes yes yes yes
pmf no no no no no no no no no no no
ppca yes yes yes yes yes yes yes yes yes yes yes
quantifier_scope yes yes yes yes yes yes yes yes yes yes yes
schema_chart_parser no no no no no no no no no no no
seq2seq no no no no no no no no no no no
stochastic_volatility yes yes yes yes yes yes yes yes yes yes yes
survival_weibull yes yes yes yes yes yes yes yes yes yes yes
tensor_contraction no no no no no no no no no no no
term_autoencoder no no no no no no no no no no no
transformer_lm no no no no no no no no no no no
tree_categorical yes no yes yes yes yes yes yes yes yes yes
type_logical yes yes yes yes yes yes yes yes yes yes yes
vae no no no no no no no no no no no
vanilla_rnn_lm no no no no no no no no no no no
zip_regression no no yes no yes yes yes yes yes yes yes

1.2 Constructs

One minimal program per surface construct, so a no here isolates the construct rather than the model that used it.

1.2.1 Declarations

Program bugs church edward2 gen jags numpyro pymc pyro stan turing webppl
statements/bundle_decl yes yes yes yes yes yes yes yes yes yes yes
statements/category_decl yes yes yes yes yes yes yes yes yes yes yes
statements/composition_decl yes yes yes yes yes yes yes yes yes yes yes
statements/contraction_decl yes yes yes yes yes yes yes yes yes yes yes
statements/decoder_decl no no no no no yes no yes no no no
statements/deduction_decl yes yes yes yes yes yes yes yes yes yes yes
statements/encoder_decl no no no no no yes no yes no no no
statements/export_decl yes yes yes yes yes yes yes yes yes yes yes
statements/let_decl yes yes yes yes yes yes yes yes yes yes yes
statements/loss_decl no no no no no no no no no no no
statements/morphism_decl_init_family yes yes yes yes yes yes yes yes yes yes yes
statements/object_decl_finset yes yes yes yes yes yes yes yes yes yes yes
statements/object_decl_real yes yes yes yes yes yes yes yes yes yes yes
statements/program_decl_scalar yes yes yes yes yes yes yes yes yes yes yes
statements/rule_decl yes yes yes yes yes yes yes yes yes yes yes
statements/schema_decl yes yes yes yes yes yes yes yes yes yes yes
statements/signature_decl yes yes yes yes yes yes yes yes yes yes yes

1.2.2 Program steps

Program bugs church edward2 gen jags numpyro pymc pyro stan turing webppl
steps/let_step yes yes yes yes yes yes yes yes yes yes yes
steps/marginalize_step yes yes yes no yes yes yes yes yes yes yes
steps/observe_step yes yes yes yes yes yes yes yes yes yes yes
steps/return_step yes yes yes yes yes yes yes yes yes yes yes
steps/sample_step yes yes yes yes yes yes yes yes yes yes yes
steps/score_step yes yes yes yes yes yes yes yes yes yes yes

1.2.3 Let-expressions

Program bugs church edward2 gen jags numpyro pymc pyro stan turing webppl
let_expressions/let_expr_binop yes yes yes yes yes yes yes yes yes yes yes
let_expressions/let_expr_call yes yes yes yes yes yes yes yes yes yes yes
let_expressions/let_expr_factor yes yes yes yes yes yes yes yes yes yes yes
let_expressions/let_expr_index yes yes yes yes yes yes yes yes yes yes yes
let_expressions/let_expr_lambda no yes yes yes no yes yes yes no yes yes
let_expressions/let_expr_list yes yes yes yes yes yes yes yes yes yes yes
let_expressions/let_expr_literal yes yes yes yes yes yes yes yes yes yes yes
let_expressions/let_expr_method_call no yes yes yes no yes yes yes no yes yes
let_expressions/let_expr_string yes yes yes yes yes yes yes yes yes yes yes
let_expressions/let_expr_unary yes yes yes yes yes yes yes yes yes yes yes
let_expressions/let_expr_var yes yes yes yes yes yes yes yes yes yes yes

1.2.4 Option values

Program bugs church edward2 gen jags numpyro pymc pyro stan turing webppl
options/option_call no no no no no no no no no no no
options/option_flag yes yes yes yes yes yes yes yes yes yes yes
options/option_list yes yes yes yes yes yes yes yes yes yes yes
options/option_name yes yes yes yes yes yes yes yes yes yes yes
options/option_number yes yes yes yes yes yes yes yes yes yes yes
options/option_string no no no no no no no no no no no

1.2.5 Axis specifications

Program bugs church edward2 gen jags numpyro pymc pyro stan turing webppl
axes/gp_event_axis yes yes yes yes yes yes yes yes yes yes yes
axes/matrix_kronecker no yes yes yes no yes yes yes yes yes yes
axes/scalar_iid_plate yes yes yes yes yes yes yes yes yes yes yes
axes/scalar_implicit yes yes yes yes yes yes yes yes yes yes yes
axes/vector_event_axis yes yes yes yes yes yes yes yes yes yes yes
axes/vector_over_iid yes yes yes yes yes yes yes yes yes yes yes

2. What no backend supports

Each construct below is refused by all 11 backends, so it marks the boundary of what QVR exports at all rather than a gap in one target. Reaching a target means writing the model differently, not switching language.

bundle_decl, schema_decl

Refused for: schema_chart_parser.

Reported kinds:

bundle_decl
schema_decl

Each backend words it differently; this is bugs's. bugs on schema_chart_parser reports:

bugs cannot transpile this program:
  - the module's `bundle_decl` declaration binds a name to a tuple of `schema` references, so a parser or a chart fold can splice the whole set in at once. It is a compile-time set of grammar rules. A probabilistic-programming target has statements for declaring data and parameters, drawing a variable from a distribution, and adding a term to the log density; BUGS has none for a first-class, nameable set of grammar rules. This module also declares no `program`, so there is no probabilistic program here to transpile in its place. A rule bundle has no counterpart to emit. Parse in quivers and transpile a `program` over the resulting chart weights, or pass the parse in as observed data.
  - the module's `schema_decl` declaration declares a morphism schema: a family of morphisms quantified over type parameters, instantiated at concrete objects wherever it is used. A probabilistic-programming target has statements for declaring data and parameters, drawing a variable from a distribution, and adding a term to the log density; BUGS has none for a declaration quantified over type parameters: its variables and distributions are all at concrete shapes. This module also declares no `program`, so there is no probabilistic program here to transpile in its place. Instantiate the schema at the concrete objects you want and write the result as a `morphism` or a `program` step, which does have a target form.

composition_decl

Refused for: pmf.

Reported kinds:

composition_decl

Each backend words it differently; this is bugs's. bugs on pmf reports:

the module's `composition_decl` declaration declares a composition rule: the algebra (its `tensor_op`, `join`, `unit` and `zero`) that says how morphism scores combine when morphisms are composed. It is structure over the whole module, not a random variable and not a step. A probabilistic-programming target has statements for declaring data and parameters, drawing a variable from a distribution, and adding a term to the log density; BUGS has none for declaring the algebra a category composes in. This module also declares no `program`, so there is no probabilistic program here to transpile in its place. A composition rule has no counterpart to emit. Add a `program ... :` block to the module and the rule is carried as module metadata while that program is transpiled; to run the rule itself, evaluate the module in quivers, which is where composition rules have meaning.

composition_decl, contraction_decl

Refused for: tensor_contraction.

Reported kinds:

composition_decl
contraction_decl

Each backend words it differently; this is bugs's. bugs on tensor_contraction reports:

bugs cannot transpile this program:
  - the module's `composition_decl` declaration declares a composition rule: the algebra (its `tensor_op`, `join`, `unit` and `zero`) that says how morphism scores combine when morphisms are composed. It is structure over the whole module, not a random variable and not a step. A probabilistic-programming target has statements for declaring data and parameters, drawing a variable from a distribution, and adding a term to the log density; BUGS has none for declaring the algebra a category composes in. This module also declares no `program`, so there is no probabilistic program here to transpile in its place. A composition rule has no counterpart to emit. Add a `program ... :` block to the module and the rule is carried as module metadata while that program is transpiled; to run the rule itself, evaluate the module in quivers, which is where composition rules have meaning.
  - the module's `contraction_decl` declaration declares a contraction: a morphism built by folding several input morphisms together over their shared axes, with the product and sum of the fold taken from the `rule=` composition rule it names. Its meaning lives entirely in that algebra. A probabilistic-programming target has statements for declaring data and parameters, drawing a variable from a distribution, and adding a term to the log density; BUGS has none for a morphism defined by contracting other morphisms over an algebra's fold. This module also declares no `program`, so there is no probabilistic program here to transpile in its place. A contraction has no counterpart to emit. Write the quantities you want scored as explicit `sample` / `observe` steps of a `program ... :` block, or evaluate the contraction in quivers and pass its result in as data.

family:school_effects

Refused for: parametric_pooling.

Reported kinds:

family:school_effects

Every backend reports it in the same words. bugs on parametric_pooling reports:

no transpile target can transpile this program:
  - no transpile target has `school_effects` distribution: the family registry contains no matching target distribution. Pick a family this target supports, or write the density you want as an explicit `score` step.
  - no transpile target can transpile this program. The refusal is tagged `sample / observe step references 'school_effects' which is neither a family in the registry, a declared morphism, nor a let-bound name`, which has no explanation registered yet; please report it.

loss_decl

Refused for: options/option_call, options/option_string, statements/loss_decl.

Reported kinds:

loss_decl

Each backend words it differently; this is bugs's. bugs on options/option_call reports:

the module's `loss_decl` declaration declares a training objective attached to a program, a deduction, an encoder or a decoder. A loss is something an optimiser minimises, not a term of the model's density. A probabilistic-programming target has statements for declaring data and parameters, drawing a variable from a distribution, and adding a term to the log density; BUGS has none for an optimisation objective separate from the joint it scores. This module also declares no `program`, so there is no probabilistic program here to transpile in its place. If the term belongs in the density, write it as a `score` step inside the program; if it is an optimiser objective, keep it in quivers, which is where training happens.

loss_decl, signature_decl

Refused for: term_autoencoder.

Reported kinds:

loss_decl
signature_decl

Each backend words it differently; this is bugs's. bugs on term_autoencoder reports:

bugs cannot transpile this program:
  - the module's `decoder_decl` declaration declares a neural decoder over a `signature`. Its weights are model-internal: they appear in neither the wire form nor the sample sites. A probabilistic-programming target has statements for declaring data and parameters, drawing a variable from a distribution, and adding a term to the log density; BUGS has none for a network whose weights are not themselves sites. This module also declares no `program`, so there is no probabilistic program here to transpile in its place. Express the network as explicit sampled weights and a deterministic forward pass, so every weight is a site the target can emit.
  - the module's `encoder_decl` declaration declares a neural encoder over a `signature`. Its weights are model-internal: they appear in neither the wire form nor the sample sites. A probabilistic-programming target has statements for declaring data and parameters, drawing a variable from a distribution, and adding a term to the log density; BUGS has none for a network whose weights are not themselves sites. This module also declares no `program`, so there is no probabilistic program here to transpile in its place. Express the network as explicit sampled weights and a deterministic forward pass, so every weight is a site the target can emit.
  - the module's `loss_decl` declaration declares a training objective attached to a program, a deduction, an encoder or a decoder. A loss is something an optimiser minimises, not a term of the model's density. A probabilistic-programming target has statements for declaring data and parameters, drawing a variable from a distribution, and adding a term to the log density; BUGS has none for an optimisation objective separate from the joint it scores. This module also declares no `program`, so there is no probabilistic program here to transpile in its place. If the term belongs in the density, write it as a `score` step inside the program; if it is an optimiser objective, keep it in quivers, which is where training happens.
  - the module's `signature_decl` declaration declares a term signature: the sorts, constructors and binders of an algebraic term language. A probabilistic-programming target has statements for declaring data and parameters, drawing a variable from a distribution, and adding a term to the log density; BUGS has none for an algebraic term signature: sorts and constructors are not things its model block can declare. This module also declares no `program`, so there is no probabilistic program here to transpile in its place. A term signature has no counterpart to emit. Encode the terms you need as indices into a declared finite object and score those with an ordinary family.

param-source:mlp

Refused for: bnn, deep_markov, seq2seq, transformer_lm, vae.

Reported kinds:

param-source:mlp

Every backend reports it in the same words. bugs on bnn reports:

no transpile target can transpile this program:
  - no transpile target can transpile this program. The refusal is tagged `morphism 'net' draws its parameters from a 'mlp' network. The network's weights are model-internal and appear in neither the wire form nor the sample sites, so no backend can reconstruct the mean the morphism computes at line 33. Express the network as explicit sampled weights and a deterministic forward pass, or write the step as a `sample` / `observe` against a closed-form family.`, which has no explanation registered yet; please report it.
  - a morphism draws its parameters from a `mlp` network, whose weights are not sites the program declares, so no target can reconstruct the parameter it computes. Express the network as explicit sampled weights and a deterministic forward pass, or write the step as a `sample` / `observe` against a closed-form family.

scan:no-lowering:fwd_cell

Refused for: bidirectional_rnn_lm.

Reported kinds:

scan:no-lowering:fwd_cell

Every backend reports it in the same words. bugs on bidirectional_rnn_lm reports:

`scan(fwd_cell)` threads `fwd_cell` across the positions of a sequence, so it denotes one draw per position over intermediate states the program never names. Writing that out needs a loop whose bound is the sequence length and one sample site per position, and the sequence axis is not an object this module declares: it arrives with the data, so there is no extent to size the loop from and no name to bind the per-position states to. Write the recurrence as a program over a declared axis, giving each position its own `sample` step, or unroll the chain into one `sample` per step.

scan:no-lowering:gru_cell

Refused for: gru_lm.

Reported kinds:

scan:no-lowering:gru_cell

Every backend reports it in the same words. bugs on gru_lm reports:

`scan(gru_cell)` threads `gru_cell` across the positions of a sequence, so it denotes one draw per position over intermediate states the program never names. Writing that out needs a loop whose bound is the sequence length and one sample site per position, and the sequence axis is not an object this module declares: it arrives with the data, so there is no extent to size the loop from and no name to bind the per-position states to. Write the recurrence as a program over a declared axis, giving each position its own `sample` step, or unroll the chain into one `sample` per step.

scan:no-lowering:lstm_cell

Refused for: lstm_lm.

Reported kinds:

scan:no-lowering:lstm_cell

Every backend reports it in the same words. bugs on lstm_lm reports:

`scan(lstm_cell)` threads `lstm_cell` across the positions of a sequence, so it denotes one draw per position over intermediate states the program never names. Writing that out needs a loop whose bound is the sequence length and one sample site per position, and the sequence axis is not an object this module declares: it arrives with the data, so there is no extent to size the loop from and no name to bind the per-position states to. Write the recurrence as a program over a declared axis, giving each position its own `sample` step, or unroll the chain into one `sample` per step.

scan:no-lowering:rnn_cell

Refused for: vanilla_rnn_lm.

Reported kinds:

scan:no-lowering:rnn_cell

Every backend reports it in the same words. bugs on vanilla_rnn_lm reports:

`scan(rnn_cell)` threads `rnn_cell` across the positions of a sequence, so it denotes one draw per position over intermediate states the program never names. Writing that out needs a loop whose bound is the sequence length and one sample site per position, and the sequence axis is not an object this module declares: it arrives with the data, so there is no extent to size the loop from and no name to bind the per-position states to. Write the recurrence as a program over a declared axis, giving each position its own `sample` step, or unroll the chain into one `sample` per step.

3. What each backend alone refuses

These are target gaps rather than language gaps: another backend renders the same program. Each quoted message is the one that backend raises, including whatever alternative it offers.

bugs

Every program below renders on at least one other backend and is refused here.

decoder_decl, encoder_decl

Refused for: statements/decoder_decl.

Renders on: numpyro, pyro.

Reported kinds:

decoder_decl
encoder_decl

bugs on statements/decoder_decl reports:

bugs cannot transpile this program:
  - the module's `decoder_decl` declaration declares a neural decoder over a `signature`. Its weights are model-internal: they appear in neither the wire form nor the sample sites. A probabilistic-programming target has statements for declaring data and parameters, drawing a variable from a distribution, and adding a term to the log density; BUGS has none for a network whose weights are not themselves sites. This module also declares no `program`, so there is no probabilistic program here to transpile in its place. Express the network as explicit sampled weights and a deterministic forward pass, so every weight is a site the target can emit.
  - the module's `encoder_decl` declaration declares a neural encoder over a `signature`. Its weights are model-internal: they appear in neither the wire form nor the sample sites. A probabilistic-programming target has statements for declaring data and parameters, drawing a variable from a distribution, and adding a term to the log density; BUGS has none for a network whose weights are not themselves sites. This module also declares no `program`, so there is no probabilistic program here to transpile in its place. Express the network as explicit sampled weights and a deterministic forward pass, so every weight is a site the target can emit.

encoder_decl

Refused for: statements/encoder_decl.

Renders on: numpyro, pyro.

Reported kinds:

encoder_decl

bugs on statements/encoder_decl reports:

the module's `encoder_decl` declaration declares a neural encoder over a `signature`. Its weights are model-internal: they appear in neither the wire form nor the sample sites. A probabilistic-programming target has statements for declaring data and parameters, drawing a variable from a distribution, and adding a term to the log density; BUGS has none for a network whose weights are not themselves sites. This module also declares no `program`, so there is no probabilistic program here to transpile in its place. Express the network as explicit sampled weights and a deterministic forward pass, so every weight is a site the target can emit.

family:BetaBinomial:no-bugs-distribution

Refused for: beta_binomial_ab_test.

Renders on: edward2, gen, jags, numpyro, pymc, pyro, stan, turing, webppl.

Reported kinds:

family:BetaBinomial:no-bugs-distribution: the BUGS distribution catalogue has no beta-binomial, and the zeros trick that would write its closed-form marginal into the joint needs a data-bound carrier the BUGS language cannot declare (it has no `data { ... }` block)

bugs on beta_binomial_ab_test reports:

bugs cannot score a draw from `BetaBinomial`: the BUGS distribution catalogue has no beta-binomial, and the zeros trick that would write its closed-form marginal into the joint needs a data-bound carrier the BUGS language cannot declare (it has no `data { ... }` block)

family:ContinuousBernoulli:no-free-density-term

Refused for: zip_regression.

Renders on: edward2, jags, numpyro, pymc, pyro, stan, turing, webppl.

Reported kinds:

family:ContinuousBernoulli:no-free-density-term: the density is elementary in `log` and `abs`, but adding a written-out density to the joint needs a free log-density term the language has no statement for

bugs on zip_regression reports:

bugs cannot score a draw from `ContinuousBernoulli`: the density is elementary in `log` and `abs`, but adding a written-out density to the joint needs a free log-density term the language has no statement for

family:Kumaraswamy:no-free-density-term

Refused for: kumaraswamy_bounded_outcome.

Renders on: edward2, gen, jags, numpyro, pymc, pyro, stan, turing, webppl.

Reported kinds:

family:Kumaraswamy:no-free-density-term: the density is elementary in `log` and `pow`, but adding a written-out density to the joint needs a free log-density term the language has no statement for

bugs on kumaraswamy_bounded_outcome reports:

bugs cannot score a draw from `Kumaraswamy`: the density is elementary in `log` and `pow`, but adding a written-out density to the joint needs a free log-density term the language has no statement for

family:LKJCholesky

Refused for: lkj_cholesky_correlation.

Renders on: edward2, gen, numpyro, pymc, pyro, stan, turing, webppl.

Reported kinds:

family:LKJCholesky: no BUGS target name

bugs on lkj_cholesky_correlation reports:

bugs cannot score a draw from `LKJCholesky`: no BUGS target name

family:MatrixNormal

Refused for: axes/matrix_kronecker.

Renders on: church, edward2, gen, numpyro, pymc, pyro, stan, turing, webppl.

Reported kinds:

family:MatrixNormal: no BUGS target name

bugs on axes/matrix_kronecker reports:

bugs cannot score a draw from `MatrixNormal`: no BUGS target name

family:MixtureNormal:no-free-density-term

Refused for: mixture_model.

Renders on: edward2, gen, jags, numpyro, pymc, pyro, stan, turing, webppl.

Reported kinds:

family:MixtureNormal:no-free-density-term: a finite mixture is an explicit weighted density in the BUGS function library, but adding one to the joint needs a free log-density term the language has no statement for

bugs on mixture_model reports:

bugs cannot score a draw from `MixtureNormal`: a finite mixture is an explicit weighted density in the BUGS function library, but adding one to the joint needs a free log-density term the language has no statement for

let-expr:LetExprLambda:bugs

Refused for: let_expressions/let_expr_lambda.

Renders on: church, edward2, gen, numpyro, pymc, pyro, turing, webppl.

Reported kinds:

let-expr:LetExprLambda:bugs: BUGS / JAGS have no anonymous function syntax

bugs on let_expressions/let_expr_lambda reports:

bugs-helper has no anonymous-function syntax in a model-body expression, so a `param -> body` lambda in a `let` has no form to take. Inline the lambda's body at its use site.: BUGS / JAGS have no anonymous function syntax

let-expr:LetExprMethodCall:bugs

Refused for: let_expressions/let_expr_method_call, montague_nli.

Renders on: church, edward2, gen, numpyro, pymc, pyro, turing, webppl.

Reported kinds:

let-expr:LetExprMethodCall:bugs: BUGS / JAGS have no method-dispatch syntax; the chart-parser deduction graft that would supply the called function is also impossible because BUGS forbids user-defined model-body functions and JAGS exposes them only through compiled C++ modules linked at startup, not inline

bugs on let_expressions/let_expr_method_call reports:

bugs-helper has no method-dispatch syntax, so a `receiver.method(...)` call in a `let` has no form to take. Rewrite the call as a plain function of its arguments, or compute it in quivers and pass the result in as data.: BUGS / JAGS have no method-dispatch syntax; the chart-parser deduction graft that would supply the called function is also impossible because BUGS forbids user-defined model-body functions and JAGS exposes them only through compiled C++ modules linked at startup, not inline

marginalize:ungrouped-over-plate:state

Refused for: hmm.

Renders on: numpyro, pyro, stan, webppl.

Reported kinds:

marginalize:ungrouped-over-plate:state

bugs on hmm reports:

`marginalize state` carries no index and no `over =` clause, so it declares one latent and every row of the plated `observe` inside it is conditioned on that single draw. Its density thus accumulates the body's rows and reduces over the latent once, and BUGS scores the rows the other way round, giving each its own draw. That is a different measure, not a different base measure, so it is refused rather than emitted. Give the latent the plate its rows share (`marginalize state : A`) or a grouping `over =` clause, either of which this target does emit correctly.

church

Every program below renders on at least one other backend and is refused here.

decoder_decl, encoder_decl

Refused for: statements/decoder_decl.

Renders on: numpyro, pyro.

Reported kinds:

decoder_decl
encoder_decl

church on statements/decoder_decl reports:

church cannot transpile this program:
  - the module's `decoder_decl` declaration declares a neural decoder over a `signature`. Its weights are model-internal: they appear in neither the wire form nor the sample sites. A probabilistic-programming target has statements for declaring data and parameters, drawing a variable from a distribution, and adding a term to the log density; Church has none for a network whose weights are not themselves sites. This module also declares no `program`, so there is no probabilistic program here to transpile in its place. Express the network as explicit sampled weights and a deterministic forward pass, so every weight is a site the target can emit.
  - the module's `encoder_decl` declaration declares a neural encoder over a `signature`. Its weights are model-internal: they appear in neither the wire form nor the sample sites. A probabilistic-programming target has statements for declaring data and parameters, drawing a variable from a distribution, and adding a term to the log density; Church has none for a network whose weights are not themselves sites. This module also declares no `program`, so there is no probabilistic program here to transpile in its place. Express the network as explicit sampled weights and a deterministic forward pass, so every weight is a site the target can emit.

encoder_decl

Refused for: statements/encoder_decl.

Renders on: numpyro, pyro.

Reported kinds:

encoder_decl

church on statements/encoder_decl reports:

the module's `encoder_decl` declaration declares a neural encoder over a `signature`. Its weights are model-internal: they appear in neither the wire form nor the sample sites. A probabilistic-programming target has statements for declaring data and parameters, drawing a variable from a distribution, and adding a term to the log density; Church has none for a network whose weights are not themselves sites. This module also declares no `program`, so there is no probabilistic program here to transpile in its place. Express the network as explicit sampled weights and a deterministic forward pass, so every weight is a site the target can emit.

family:BetaBinomial:no-church-target

Refused for: beta_binomial_ab_test.

Renders on: edward2, gen, jags, numpyro, pymc, pyro, stan, turing, webppl.

Reported kinds:

family:BetaBinomial:no-church-target

church on beta_binomial_ab_test reports:

church has no `BetaBinomial` distribution. Pick a family this target supports, or write the density you want as an explicit `score` step.

family:ContinuousBernoulli:no-church-target

Refused for: zip_regression.

Renders on: edward2, jags, numpyro, pymc, pyro, stan, turing, webppl.

Reported kinds:

family:ContinuousBernoulli:no-church-target

church on zip_regression reports:

church has no `ContinuousBernoulli` distribution. Pick a family this target supports, or write the density you want as an explicit `score` step.

family:HalfStudentT:no-church-target

Refused for: half_student_t_hierarchical.

Renders on: bugs, edward2, gen, jags, numpyro, pymc, pyro, stan, turing, webppl.

Reported kinds:

family:HalfStudentT:no-church-target

church on half_student_t_hierarchical reports:

church has no `HalfStudentT` distribution. Pick a family this target supports, or write the density you want as an explicit `score` step.

family:Kumaraswamy:no-church-target

Refused for: kumaraswamy_bounded_outcome.

Renders on: edward2, gen, jags, numpyro, pymc, pyro, stan, turing, webppl.

Reported kinds:

family:Kumaraswamy:no-church-target

church on kumaraswamy_bounded_outcome reports:

church has no `Kumaraswamy` distribution. Pick a family this target supports, or write the density you want as an explicit `score` step.

family:LKJCholesky:no-church-target

Refused for: lkj_cholesky_correlation.

Renders on: edward2, gen, numpyro, pymc, pyro, stan, turing, webppl.

Reported kinds:

family:LKJCholesky:no-church-target

church on lkj_cholesky_correlation reports:

church has no `LKJCholesky` distribution. Pick a family this target supports, or write the density you want as an explicit `score` step.

family:Logistic:no-church-target

Refused for: logistic_noise_regression.

Renders on: bugs, edward2, gen, jags, numpyro, pymc, pyro, stan, turing, webppl.

Reported kinds:

family:Logistic:no-church-target

church on logistic_noise_regression reports:

church has no `Logistic` distribution. Pick a family this target supports, or write the density you want as an explicit `score` step.

family:MixtureNormal:no-church-target

Refused for: mixture_model.

Renders on: edward2, gen, jags, numpyro, pymc, pyro, stan, turing, webppl.

Reported kinds:

family:MixtureNormal:no-church-target

church on mixture_model reports:

church has no `MixtureNormal` distribution. Pick a family this target supports, or write the density you want as an explicit `score` step.

let-expr:LetExprFactor:multi-axis-body

Refused for: tree_categorical.

Renders on: bugs, edward2, gen, jags, numpyro, pymc, pyro, stan, turing, webppl.

Reported kinds:

let-expr:LetExprFactor:multi-axis-body

church on tree_categorical reports:

a `factor` whose body ranges over more than one axis has no scheme-helper expression form: the product would have to be built by nested loops over a named array, and a `let` lowered to one expression has nowhere to put it. Split the factor into one per axis, or move the product into a plated `score` step.

marginalize:ungrouped-over-plate:state

Refused for: hmm.

Renders on: numpyro, pyro, stan, webppl.

Reported kinds:

marginalize:ungrouped-over-plate:state

church on hmm reports:

`marginalize state` carries no index and no `over =` clause, so it declares one latent and every row of the plated `observe` inside it is conditioned on that single draw. Its density thus accumulates the body's rows and reduces over the latent once, and Church scores the rows the other way round, giving each its own draw. That is a different measure, not a different base measure, so it is refused rather than emitted. Give the latent the plate its rows share (`marginalize state : A`) or a grouping `over =` clause, either of which this target does emit correctly.

edward2

Every program below renders on at least one other backend and is refused here.

decoder_decl, encoder_decl

Refused for: statements/decoder_decl.

Renders on: numpyro, pyro.

Reported kinds:

decoder_decl
encoder_decl

edward2 on statements/decoder_decl reports:

edward2 cannot transpile this program:
  - the module's `decoder_decl` declaration declares a neural decoder over a `signature`. Its weights are model-internal: they appear in neither the wire form nor the sample sites. A probabilistic-programming target has statements for declaring data and parameters, drawing a variable from a distribution, and adding a term to the log density; Edward2 has none for a network whose weights are not themselves sites. This module also declares no `program`, so there is no probabilistic program here to transpile in its place. Express the network as explicit sampled weights and a deterministic forward pass, so every weight is a site the target can emit.
  - the module's `encoder_decl` declaration declares a neural encoder over a `signature`. Its weights are model-internal: they appear in neither the wire form nor the sample sites. A probabilistic-programming target has statements for declaring data and parameters, drawing a variable from a distribution, and adding a term to the log density; Edward2 has none for a network whose weights are not themselves sites. This module also declares no `program`, so there is no probabilistic program here to transpile in its place. Express the network as explicit sampled weights and a deterministic forward pass, so every weight is a site the target can emit.

encoder_decl

Refused for: statements/encoder_decl.

Renders on: numpyro, pyro.

Reported kinds:

encoder_decl

edward2 on statements/encoder_decl reports:

the module's `encoder_decl` declaration declares a neural encoder over a `signature`. Its weights are model-internal: they appear in neither the wire form nor the sample sites. A probabilistic-programming target has statements for declaring data and parameters, drawing a variable from a distribution, and adding a term to the log density; Edward2 has none for a network whose weights are not themselves sites. This module also declares no `program`, so there is no probabilistic program here to transpile in its place. Express the network as explicit sampled weights and a deterministic forward pass, so every weight is a site the target can emit.

marginalize:ungrouped-over-plate:state

Refused for: hmm.

Renders on: numpyro, pyro, stan, webppl.

Reported kinds:

marginalize:ungrouped-over-plate:state

edward2 on hmm reports:

`marginalize state` carries no index and no `over =` clause, so it declares one latent and every row of the plated `observe` inside it is conditioned on that single draw. Its density thus accumulates the body's rows and reduces over the latent once, and Edward2 scores the rows the other way round, giving each its own draw. That is a different measure, not a different base measure, so it is refused rather than emitted. Give the latent the plate its rows share (`marginalize state : A`) or a grouping `over =` clause, either of which this target does emit correctly.

gen

Every program below renders on at least one other backend and is refused here.

decoder_decl, encoder_decl

Refused for: statements/decoder_decl.

Renders on: numpyro, pyro.

Reported kinds:

decoder_decl
encoder_decl

gen on statements/decoder_decl reports:

gen cannot transpile this program:
  - the module's `decoder_decl` declaration declares a neural decoder over a `signature`. Its weights are model-internal: they appear in neither the wire form nor the sample sites. A probabilistic-programming target has statements for declaring data and parameters, drawing a variable from a distribution, and adding a term to the log density; Gen.jl has none for a network whose weights are not themselves sites. This module also declares no `program`, so there is no probabilistic program here to transpile in its place. Express the network as explicit sampled weights and a deterministic forward pass, so every weight is a site the target can emit.
  - the module's `encoder_decl` declaration declares a neural encoder over a `signature`. Its weights are model-internal: they appear in neither the wire form nor the sample sites. A probabilistic-programming target has statements for declaring data and parameters, drawing a variable from a distribution, and adding a term to the log density; Gen.jl has none for a network whose weights are not themselves sites. This module also declares no `program`, so there is no probabilistic program here to transpile in its place. Express the network as explicit sampled weights and a deterministic forward pass, so every weight is a site the target can emit.

encoder_decl

Refused for: statements/encoder_decl.

Renders on: numpyro, pyro.

Reported kinds:

encoder_decl

gen on statements/encoder_decl reports:

the module's `encoder_decl` declaration declares a neural encoder over a `signature`. Its weights are model-internal: they appear in neither the wire form nor the sample sites. A probabilistic-programming target has statements for declaring data and parameters, drawing a variable from a distribution, and adding a term to the log density; Gen.jl has none for a network whose weights are not themselves sites. This module also declares no `program`, so there is no probabilistic program here to transpile in its place. Express the network as explicit sampled weights and a deterministic forward pass, so every weight is a site the target can emit.

marginalize:no-log-weight:cls

Refused for: steps/marginalize_step.

Renders on: bugs, church, edward2, jags, numpyro, pymc, pyro, stan, turing, webppl.

Reported kinds:

marginalize:no-log-weight:cls

gen on steps/marginalize_step reports:

`marginalize cls` denotes the integral of the block's measure over the latent, and Gen.jl has no way to add a free log-density term to a trace: every address it scores must be one it drew. Emitting the draw instead would denote a measure on the product of the latent's support with the block's, which is a larger space than the program's and differs from it by an amount that moves with the data. Draw the latent explicitly with `sample` if that is the model you want, or score the block on a target that carries a log-weight primitive.

marginalize:no-log-weight:state

Refused for: hmm.

Renders on: numpyro, pyro, stan, webppl.

Reported kinds:

marginalize:no-log-weight:state

gen on hmm reports:

`marginalize state` denotes the integral of the block's measure over the latent, and Gen.jl has no way to add a free log-density term to a trace: every address it scores must be one it drew. Emitting the draw instead would denote a measure on the product of the latent's support with the block's, which is a larger space than the program's and differs from it by an amount that moves with the data. Draw the latent explicitly with `sample` if that is the model you want, or score the block on a target that carries a log-weight primitive.

marginalize:no-log-weight:z

Refused for: lda, zip_regression.

Renders on: edward2, jags, numpyro, pymc, pyro, stan, turing, webppl.

Reported kinds:

marginalize:no-log-weight:z

gen on lda reports:

`marginalize z` denotes the integral of the block's measure over the latent, and Gen.jl has no way to add a free log-density term to a trace: every address it scores must be one it drew. Emitting the draw instead would denote a measure on the product of the latent's support with the block's, which is a larger space than the program's and differs from it by an amount that moves with the data. Draw the latent explicitly with `sample` if that is the model you want, or score the block on a target that carries a log-weight primitive.

jags

Every program below renders on at least one other backend and is refused here.

decoder_decl, encoder_decl

Refused for: statements/decoder_decl.

Renders on: numpyro, pyro.

Reported kinds:

decoder_decl
encoder_decl

jags on statements/decoder_decl reports:

jags cannot transpile this program:
  - the module's `decoder_decl` declaration declares a neural decoder over a `signature`. Its weights are model-internal: they appear in neither the wire form nor the sample sites. A probabilistic-programming target has statements for declaring data and parameters, drawing a variable from a distribution, and adding a term to the log density; JAGS has none for a network whose weights are not themselves sites. This module also declares no `program`, so there is no probabilistic program here to transpile in its place. Express the network as explicit sampled weights and a deterministic forward pass, so every weight is a site the target can emit.
  - the module's `encoder_decl` declaration declares a neural encoder over a `signature`. Its weights are model-internal: they appear in neither the wire form nor the sample sites. A probabilistic-programming target has statements for declaring data and parameters, drawing a variable from a distribution, and adding a term to the log density; JAGS has none for a network whose weights are not themselves sites. This module also declares no `program`, so there is no probabilistic program here to transpile in its place. Express the network as explicit sampled weights and a deterministic forward pass, so every weight is a site the target can emit.

encoder_decl

Refused for: statements/encoder_decl.

Renders on: numpyro, pyro.

Reported kinds:

encoder_decl

jags on statements/encoder_decl reports:

the module's `encoder_decl` declaration declares a neural encoder over a `signature`. Its weights are model-internal: they appear in neither the wire form nor the sample sites. A probabilistic-programming target has statements for declaring data and parameters, drawing a variable from a distribution, and adding a term to the log density; JAGS has none for a network whose weights are not themselves sites. This module also declares no `program`, so there is no probabilistic program here to transpile in its place. Express the network as explicit sampled weights and a deterministic forward pass, so every weight is a site the target can emit.

family:no-target-name:LKJCholesky

Refused for: lkj_cholesky_correlation.

Renders on: edward2, gen, numpyro, pymc, pyro, stan, turing, webppl.

Reported kinds:

family:no-target-name:LKJCholesky

jags on lkj_cholesky_correlation reports:

jags has no `LKJCholesky` distribution. Pick a family this target supports, or write the density you want as an explicit `score` step.

family:no-target-name:MatrixNormal

Refused for: axes/matrix_kronecker.

Renders on: church, edward2, gen, numpyro, pymc, pyro, stan, turing, webppl.

Reported kinds:

family:no-target-name:MatrixNormal

jags on axes/matrix_kronecker reports:

jags has no `MatrixNormal` distribution. Pick a family this target supports, or write the density you want as an explicit `score` step.

let-expr:LetExprLambda:jags

Refused for: let_expressions/let_expr_lambda.

Renders on: church, edward2, gen, numpyro, pymc, pyro, turing, webppl.

Reported kinds:

let-expr:LetExprLambda:jags: BUGS / JAGS have no anonymous function syntax

jags on let_expressions/let_expr_lambda reports:

jags-helper has no anonymous-function syntax in a model-body expression, so a `param -> body` lambda in a `let` has no form to take. Inline the lambda's body at its use site.: BUGS / JAGS have no anonymous function syntax

let-expr:LetExprMethodCall:jags

Refused for: let_expressions/let_expr_method_call, montague_nli.

Renders on: church, edward2, gen, numpyro, pymc, pyro, turing, webppl.

Reported kinds:

let-expr:LetExprMethodCall:jags: BUGS / JAGS have no method-dispatch syntax; the chart-parser deduction graft that would supply the called function is also impossible because BUGS forbids user-defined model-body functions and JAGS exposes them only through compiled C++ modules linked at startup, not inline

jags on let_expressions/let_expr_method_call reports:

jags-helper has no method-dispatch syntax, so a `receiver.method(...)` call in a `let` has no form to take. Rewrite the call as a plain function of its arguments, or compute it in quivers and pass the result in as data.: BUGS / JAGS have no method-dispatch syntax; the chart-parser deduction graft that would supply the called function is also impossible because BUGS forbids user-defined model-body functions and JAGS exposes them only through compiled C++ modules linked at startup, not inline

marginalize:ungrouped-over-plate:state

Refused for: hmm.

Renders on: numpyro, pyro, stan, webppl.

Reported kinds:

marginalize:ungrouped-over-plate:state

jags on hmm reports:

`marginalize state` carries no index and no `over =` clause, so it declares one latent and every row of the plated `observe` inside it is conditioned on that single draw. Its density thus accumulates the body's rows and reduces over the latent once, and JAGS scores the rows the other way round, giving each its own draw. That is a different measure, not a different base measure, so it is refused rather than emitted. Give the latent the plate its rows share (`marginalize state : A`) or a grouping `over =` clause, either of which this target does emit correctly.

numpyro

numpyro renders every program any other backend renders. Its remaining refusals are the language-level gaps of section 2.

pymc

Every program below renders on at least one other backend and is refused here.

decoder_decl, encoder_decl

Refused for: statements/decoder_decl.

Renders on: numpyro, pyro.

Reported kinds:

decoder_decl
encoder_decl

pymc on statements/decoder_decl reports:

pymc cannot transpile this program:
  - the module's `decoder_decl` declaration declares a neural decoder over a `signature`. Its weights are model-internal: they appear in neither the wire form nor the sample sites. A probabilistic-programming target has statements for declaring data and parameters, drawing a variable from a distribution, and adding a term to the log density; PyMC has none for a network whose weights are not themselves sites. This module also declares no `program`, so there is no probabilistic program here to transpile in its place. Express the network as explicit sampled weights and a deterministic forward pass, so every weight is a site the target can emit.
  - the module's `encoder_decl` declaration declares a neural encoder over a `signature`. Its weights are model-internal: they appear in neither the wire form nor the sample sites. A probabilistic-programming target has statements for declaring data and parameters, drawing a variable from a distribution, and adding a term to the log density; PyMC has none for a network whose weights are not themselves sites. This module also declares no `program`, so there is no probabilistic program here to transpile in its place. Express the network as explicit sampled weights and a deterministic forward pass, so every weight is a site the target can emit.

encoder_decl

Refused for: statements/encoder_decl.

Renders on: numpyro, pyro.

Reported kinds:

encoder_decl

pymc on statements/encoder_decl reports:

the module's `encoder_decl` declaration declares a neural encoder over a `signature`. Its weights are model-internal: they appear in neither the wire form nor the sample sites. A probabilistic-programming target has statements for declaring data and parameters, drawing a variable from a distribution, and adding a term to the log density; PyMC has none for a network whose weights are not themselves sites. This module also declares no `program`, so there is no probabilistic program here to transpile in its place. Express the network as explicit sampled weights and a deterministic forward pass, so every weight is a site the target can emit.

marginalize:ungrouped-over-plate:state

Refused for: hmm.

Renders on: numpyro, pyro, stan, webppl.

Reported kinds:

marginalize:ungrouped-over-plate:state

pymc on hmm reports:

`marginalize state` carries no index and no `over =` clause, so it declares one latent and every row of the plated `observe` inside it is conditioned on that single draw. Its density thus accumulates the body's rows and reduces over the latent once, and PyMC scores the rows the other way round, giving each its own draw. That is a different measure, not a different base measure, so it is refused rather than emitted. Give the latent the plate its rows share (`marginalize state : A`) or a grouping `over =` clause, either of which this target does emit correctly.

pyro

pyro renders every program any other backend renders. Its remaining refusals are the language-level gaps of section 2.

stan

Every program below renders on at least one other backend and is refused here.

decoder_decl, encoder_decl

Refused for: statements/decoder_decl.

Renders on: numpyro, pyro.

Reported kinds:

decoder_decl
encoder_decl

stan on statements/decoder_decl reports:

stan cannot transpile this program:
  - the module's `decoder_decl` declaration declares a neural decoder over a `signature`. Its weights are model-internal: they appear in neither the wire form nor the sample sites. A probabilistic-programming target has statements for declaring data and parameters, drawing a variable from a distribution, and adding a term to the log density; Stan has none for a network whose weights are not themselves sites. This module also declares no `program`, so there is no probabilistic program here to transpile in its place. Express the network as explicit sampled weights and a deterministic forward pass, so every weight is a site the target can emit.
  - the module's `encoder_decl` declaration declares a neural encoder over a `signature`. Its weights are model-internal: they appear in neither the wire form nor the sample sites. A probabilistic-programming target has statements for declaring data and parameters, drawing a variable from a distribution, and adding a term to the log density; Stan has none for a network whose weights are not themselves sites. This module also declares no `program`, so there is no probabilistic program here to transpile in its place. Express the network as explicit sampled weights and a deterministic forward pass, so every weight is a site the target can emit.

encoder_decl

Refused for: statements/encoder_decl.

Renders on: numpyro, pyro.

Reported kinds:

encoder_decl

stan on statements/encoder_decl reports:

the module's `encoder_decl` declaration declares a neural encoder over a `signature`. Its weights are model-internal: they appear in neither the wire form nor the sample sites. A probabilistic-programming target has statements for declaring data and parameters, drawing a variable from a distribution, and adding a term to the log density; Stan has none for a network whose weights are not themselves sites. This module also declares no `program`, so there is no probabilistic program here to transpile in its place. Express the network as explicit sampled weights and a deterministic forward pass, so every weight is a site the target can emit.

let-expr:LetExprLambda

Refused for: let_expressions/let_expr_lambda.

Renders on: church, edward2, gen, numpyro, pymc, pyro, turing, webppl.

Reported kinds:

let-expr:LetExprLambda: Stan has no anonymous function syntax in user-program expression position

stan on let_expressions/let_expr_lambda reports:

stan-helper has no anonymous-function syntax in a model-body expression, so a `param -> body` lambda in a `let` has no form to take. Inline the lambda's body at its use site.: Stan has no anonymous function syntax in user-program expression position

let-expr:LetExprMethodCall:stan

Refused for: let_expressions/let_expr_method_call, montague_nli.

Renders on: church, edward2, gen, numpyro, pymc, pyro, turing, webppl.

Reported kinds:

let-expr:LetExprMethodCall:stan: Stan has no method dispatch syntax; the chart-parser deduction graft that would supply the called function as a Stan `functions { ... }` block requires (a) plumbing `DeductionDecl` through the IR (currently dropped by `CATEGORICAL_METADATA_IGNORABLE`), and (b) a token-sequence input shape (the fixture's `sentence : Real` is a scalar)

stan on let_expressions/let_expr_method_call reports:

stan-helper has no method-dispatch syntax, so a `receiver.method(...)` call in a `let` has no form to take. Rewrite the call as a plain function of its arguments, or compute it in quivers and pass the result in as data.: Stan has no method dispatch syntax; the chart-parser deduction graft that would supply the called function as a Stan `functions { ... }` block requires (a) plumbing `DeductionDecl` through the IR (currently dropped by `CATEGORICAL_METADATA_IGNORABLE`), and (b) a token-sequence input shape (the fixture's `sentence : Real` is a scalar)

turing

Every program below renders on at least one other backend and is refused here.

decoder_decl, encoder_decl

Refused for: statements/decoder_decl.

Renders on: numpyro, pyro.

Reported kinds:

decoder_decl
encoder_decl

turing on statements/decoder_decl reports:

turing cannot transpile this program:
  - the module's `decoder_decl` declaration declares a neural decoder over a `signature`. Its weights are model-internal: they appear in neither the wire form nor the sample sites. A probabilistic-programming target has statements for declaring data and parameters, drawing a variable from a distribution, and adding a term to the log density; Turing.jl has none for a network whose weights are not themselves sites. This module also declares no `program`, so there is no probabilistic program here to transpile in its place. Express the network as explicit sampled weights and a deterministic forward pass, so every weight is a site the target can emit.
  - the module's `encoder_decl` declaration declares a neural encoder over a `signature`. Its weights are model-internal: they appear in neither the wire form nor the sample sites. A probabilistic-programming target has statements for declaring data and parameters, drawing a variable from a distribution, and adding a term to the log density; Turing.jl has none for a network whose weights are not themselves sites. This module also declares no `program`, so there is no probabilistic program here to transpile in its place. Express the network as explicit sampled weights and a deterministic forward pass, so every weight is a site the target can emit.

encoder_decl

Refused for: statements/encoder_decl.

Renders on: numpyro, pyro.

Reported kinds:

encoder_decl

turing on statements/encoder_decl reports:

the module's `encoder_decl` declaration declares a neural encoder over a `signature`. Its weights are model-internal: they appear in neither the wire form nor the sample sites. A probabilistic-programming target has statements for declaring data and parameters, drawing a variable from a distribution, and adding a term to the log density; Turing.jl has none for a network whose weights are not themselves sites. This module also declares no `program`, so there is no probabilistic program here to transpile in its place. Express the network as explicit sampled weights and a deterministic forward pass, so every weight is a site the target can emit.

marginalize:ungrouped-over-plate:state

Refused for: hmm.

Renders on: numpyro, pyro, stan, webppl.

Reported kinds:

marginalize:ungrouped-over-plate:state

turing on hmm reports:

`marginalize state` carries no index and no `over =` clause, so it declares one latent and every row of the plated `observe` inside it is conditioned on that single draw. Its density thus accumulates the body's rows and reduces over the latent once, and Turing.jl scores the rows the other way round, giving each its own draw. That is a different measure, not a different base measure, so it is refused rather than emitted. Give the latent the plate its rows share (`marginalize state : A`) or a grouping `over =` clause, either of which this target does emit correctly.

webppl

Every program below renders on at least one other backend and is refused here.

decoder_decl, encoder_decl

Refused for: statements/decoder_decl.

Renders on: numpyro, pyro.

Reported kinds:

decoder_decl
encoder_decl

webppl on statements/decoder_decl reports:

webppl cannot transpile this program:
  - the module's `decoder_decl` declaration declares a neural decoder over a `signature`. Its weights are model-internal: they appear in neither the wire form nor the sample sites. A probabilistic-programming target has statements for declaring data and parameters, drawing a variable from a distribution, and adding a term to the log density; WebPPL has none for a network whose weights are not themselves sites. This module also declares no `program`, so there is no probabilistic program here to transpile in its place. Express the network as explicit sampled weights and a deterministic forward pass, so every weight is a site the target can emit.
  - the module's `encoder_decl` declaration declares a neural encoder over a `signature`. Its weights are model-internal: they appear in neither the wire form nor the sample sites. A probabilistic-programming target has statements for declaring data and parameters, drawing a variable from a distribution, and adding a term to the log density; WebPPL has none for a network whose weights are not themselves sites. This module also declares no `program`, so there is no probabilistic program here to transpile in its place. Express the network as explicit sampled weights and a deterministic forward pass, so every weight is a site the target can emit.

encoder_decl

Refused for: statements/encoder_decl.

Renders on: numpyro, pyro.

Reported kinds:

encoder_decl

webppl on statements/encoder_decl reports:

the module's `encoder_decl` declaration declares a neural encoder over a `signature`. Its weights are model-internal: they appear in neither the wire form nor the sample sites. A probabilistic-programming target has statements for declaring data and parameters, drawing a variable from a distribution, and adding a term to the log density; WebPPL has none for a network whose weights are not themselves sites. This module also declares no `program`, so there is no probabilistic program here to transpile in its place. Express the network as explicit sampled weights and a deterministic forward pass, so every weight is a site the target can emit.