Skip to main content

Python library for RAD Embeddings, provably correct latent DFA representations.

Project description

Rad Embeddings Logo

This repo contains a JAX implementation of RAD embeddings, see project webpage for more information.

Installation

Install using pip.

pip install rad-embeddings

Usage

Instantiate a pretrained encoder.

from rad_embeddings import Encoder

encoder = Encoder() # Loads a pretrained DFA encoder with default parameters: handles at most 10-state DFAs with 10-token alphabets

Use DFAx to sample DFAs.

import jax
from dfax.samplers import ReachSampler, ReachAvoidSampler, RADSampler

sampler = RADSampler()
key = jax.random.PRNGKey(42)

key, subkey = jax.random.split(key)
dfax = sampler.sample(subkey)

Pass the DFA to the encoder to get its embedding — both DFAx and DFA objects are supported.

from dfax import dfax2dfa

rad_embed_from_dfax = encoder(dfax)
rad_embed_from_dfa = encoder(dfax2dfa(dfax)) # Returns the same embedding

Compute bisimulation distance between two DFA embeddings.

key, subkey = jax.random.split(key)
dfax_l = sampler.sample(subkey)
rad_l = encoder(dfax_l)

key, subkey = jax.random.split(key)
dfax_r = sampler.sample(subkey)
rad_r = encoder(dfax_r)

distance = encoder.distance(rad_l, rad_r)

Solve a one-step bisimulation problem.

from dfax import DFAx
import jax.numpy as jnp

# Reach token 1 and then token 2 while avoding token 9
dfa_l = DFAx.create(
	start = 0,
	transitions = jnp.array([
		[0, 1, 0, 0, 0, 0, 0, 0, 0, 3],
		[1, 1, 2, 1, 1, 1, 1, 1, 1, 3],
		[2, 2, 2, 2, 2, 2, 2, 2, 2, 2],
		[3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
		[4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
	]),
	labels = jnp.array([False, False, True, False, False])
)

# Reach token 9
dfa_r = DFAx.create(
	start = 0,
	transitions = jnp.array([
		[0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
		[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
		[2, 2, 2, 2, 2, 2, 2, 2, 2, 2],
		[3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
		[4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
	]),
	labels = jnp.array([False, True, False, False, False])
)

distinguishing_action = encoder.solve(dfa_l, dfa_r) # Returns 1 as token 1 is the one-step distinguishing action

See train and test scripts for more.

Citation

Please cite the following papers if you use RAD Embeddings in your work.

@inproceedings{DBLP:conf/nips/YalcinkayaLVS24,
  author       = {Beyazit Yalcinkaya and
                  Niklas Lauffer and
                  Marcell Vazquez{-}Chanlatte and
                  Sanjit A. Seshia},
  title        = {Compositional Automata Embeddings for Goal-Conditioned Reinforcement
                  Learning},
  booktitle    = {NeurIPS},
  year         = {2024}
}
@inproceedings{DBLP:conf/neus/YalcinkayaLVS25,
  author       = {Beyazit Yalcinkaya and
                  Niklas Lauffer and
                  Marcell Vazquez{-}Chanlatte and
                  Sanjit A. Seshia},
  title        = {Provably Correct Automata Embeddings for Optimal Automata-Conditioned
                  Reinforcement Learning},
  booktitle    = {NeuS},
  series       = {Proceedings of Machine Learning Research},
  volume       = {288},
  pages        = {661--675},
  publisher    = {{PMLR}},
  year         = {2025}
}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

rad_embeddings-0.2.2.tar.gz (3.2 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

rad_embeddings-0.2.2-py3-none-any.whl (3.1 MB view details)

Uploaded Python 3

File details

Details for the file rad_embeddings-0.2.2.tar.gz.

File metadata

  • Download URL: rad_embeddings-0.2.2.tar.gz
  • Upload date:
  • Size: 3.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.5.18

File hashes

Hashes for rad_embeddings-0.2.2.tar.gz
Algorithm Hash digest
SHA256 8f7f153412cb2918677fa5b5f1bbc11eb0107ac1d5755a74ded4747463f0c106
MD5 a032b345f69de61d4543d4195a0eedb9
BLAKE2b-256 19e176fb4ce7e64438899f959f5c5c223da811bd231ca670a7bc17d4348afb5e

See more details on using hashes here.

File details

Details for the file rad_embeddings-0.2.2-py3-none-any.whl.

File metadata

File hashes

Hashes for rad_embeddings-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 dfbd55238ec30bf4f37f5d790ca7d47337dffa8e3f0c591c644925b1a7abb8d5
MD5 20a7cac9d07527f64110b5f761e79598
BLAKE2b-256 16a027dd480d286a7d3a903c2b27538669959527012c7282367bd5aed5c12194

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page