tutorials icon indicating copy to clipboard operation
tutorials copied to clipboard

Tutorials for tskit in other languages (C & Rust)

Open hyanwong opened this issue 4 years ago • 7 comments

We have a fully functional short tskit & R tutorial. I wonder if it's worth having a part of the tutorials book on other languages and include a (short) C example and a Rust example? I'm guessing @molpopgen would be the one to do this, if he has any time.

hyanwong avatar Jun 24 '21 16:06 hyanwong

Certainly a C one would be nice. We can adapt some of the content in the C API page.

jeromekelleher avatar Jun 24 '21 16:06 jeromekelleher

Hah, for a moment I thought this meant eg in spanish, and wondered why the first spanish tutorial would be about rust.

petrelharp avatar Jun 24 '21 16:06 petrelharp

Cierto en Espagnol. Moi je peux traduire en Français si vous voulez :)

hyanwong avatar Jun 24 '21 16:06 hyanwong

I can do one for the rust interface. Unfortunately (IMO) I think it has to be a notebook rather than myst-md. The way one specifies the dependencies for a rust notebook is not allowed in the markdown. I've know this for a while but haven't had the time to figure out where to file the issue (jupyter-book or the rust kernel authors, or both, or neither).

This is low on the short-term priority list, though.

molpopgen avatar Jun 24 '21 18:06 molpopgen

This is low on the short-term priority list, though.

Yes, absolutely. I only opened this issue so as not to forget it. We could either leave it as an open issue or make a tutorial stub and just fill it with a "todo"

hyanwong avatar Jun 24 '21 20:06 hyanwong

To follow up on this (which some recent Slack posts reminded me of): a literate tutorial for tskit-rust is unlikely unless we start using RMarkdown/knitr. I recently closed a PR based on mdbook due to the amount of work required. The current goal is to get a working example for all elements of the public API. An example is here and the next release will have many more. But it is slow to get it all done.

~~EDIT: sigh, it looks like Rmd/rextendr are still tricky to get working.~~

molpopgen avatar Jul 11 '22 15:07 molpopgen

For posterity:

---
title: "tskit-rust tutorial"
author: Kevin Thornton / tskit-developers
output: html_document
---

```{r, echo=FALSE}
library(rextendr)
```

# Adding a node to a `TableCollection`.

```{extendr engine.opts = list(dependencies = list(`tskit` = "0.9.0"))}
let mut tables = tskit::TableCollection::new(100.0).unwrap();

// Node flags, birth time, population id, individual id
let node_id = tables.add_node(0, 0.0, tskit::PopulationId::NULL, tskit::IndividualId::NULL).unwrap();

// The type tskit::NodeId can be compared to i32
assert_eq!(node_id, 0);
```

molpopgen avatar Jul 11 '22 15:07 molpopgen