@@ -339,17 +339,89 @@ impl<'treeseq> Tree<'treeseq> {
339339 X
340340 }
341341
342- pub fn left_sample_array ( & self ) {
343- X
342+ /// # Failing examples
343+ ///
344+ /// An error will be returned if ['crate::TreeFlags::SAMPLE_LISTS`] is not used:
345+ ///
346+ /// ```should_panic
347+ /// use streaming_iterator::StreamingIterator;
348+ /// let tables = tskit::TableCollection::new(1.).unwrap();
349+ /// let treeseq =
350+ /// tables.tree_sequence(tskit::TreeSequenceFlags::BUILD_INDEXES).unwrap();
351+ /// let mut tree_iter = treeseq.tree_iterator(tskit::TreeFlags::default()).unwrap(); // Error
352+ /// while let Some(tree) = tree_iter.next() {
353+ /// let l = tree.left_sample_array().unwrap();
354+ /// for _ in l {}
355+ /// }
356+ /// ```
357+ ///
358+ /// The lifetime of the slice is tied to the parent object:
359+ ///
360+ /// ```compile_fail
361+ /// use streaming_iterator::StreamingIterator;
362+ /// let tables = tskit::TableCollection::new(1.).unwrap();
363+ /// let treeseq =
364+ /// tables.tree_sequence(tskit::TreeSequenceFlags::BUILD_INDEXES).unwrap();
365+ /// let mut tree_iter = treeseq.tree_iterator(tskit::TreeFlags::SAMPLE_LISTS).unwrap();
366+ /// while let Some(tree) = tree_iter.next() {
367+ /// let l = tree.left_sample_array().unwrap();
368+ /// drop(tree_iter);
369+ /// for _ in l {} // Error
370+ /// }
371+ /// ```
372+ pub fn left_sample_array ( & self ) -> Result < & [ NodeId ] , TskitError > {
373+ self . inner . left_sample_array ( )
344374 }
345375
346- pub fn right_sample_array ( & self ) {
347- x
376+ /// # Failing examples
377+ ///
378+ /// An error will be returned if ['crate::TreeFlags::SAMPLE_LISTS`] is not used:
379+ ///
380+ /// ```should_panic
381+ /// use streaming_iterator::StreamingIterator;
382+ /// let tables = tskit::TableCollection::new(1.).unwrap();
383+ /// let treeseq =
384+ /// tables.tree_sequence(tskit::TreeSequenceFlags::BUILD_INDEXES).unwrap();
385+ /// let mut tree_iter = treeseq.tree_iterator(tskit::TreeFlags::default()).unwrap(); // ERROR
386+ /// while let Some(tree) = tree_iter.next() {
387+ /// let r = tree.right_sample_array().unwrap();
388+ /// for _ in r {}
389+ /// }
390+ /// ```
391+ ///
392+ /// The lifetime of the slice is tied to the parent object:
393+ ///
394+ /// ```compile_fail
395+ /// use streaming_iterator::StreamingIterator;
396+ /// let tables = tskit::TableCollection::new(1.).unwrap();
397+ /// let treeseq =
398+ /// tables.tree_sequence(tskit::TreeSequenceFlags::BUILD_INDEXES).unwrap();
399+ /// let mut tree_iter = treeseq.tree_iterator(tskit::TreeFlags::SAMPLE_LISTS).unwrap();
400+ /// while let Some(tree) = tree_iter.next() {
401+ /// let r = tree.right_sample_array().unwrap();
402+ /// drop(tree_iter);
403+ /// for _ in r {} // ERROR
404+ /// }
405+ /// ```
406+ pub fn right_sample_array ( & self ) -> Result < & [ NodeId ] , TskitError > {
407+ self . inner . right_sample_array ( )
348408 }
349409
350- left_sample
351- right_sample
352- kc_distance
410+ /// Calculate the average Kendall-Colijn (`K-C`) distance between
411+ /// pairs of trees whose intervals overlap.
412+ ///
413+ /// # Note
414+ ///
415+ /// * [Citation](https://doi.org/10.1093/molbev/msw124)
416+ ///
417+ /// # Parameters
418+ ///
419+ /// * `lambda` specifies the relative weight of topology and branch length.
420+ /// If `lambda` is 0, we only consider topology.
421+ /// If `lambda` is 1, we only consider branch lengths.
422+ pub fn kc_distance ( & self , other : & Self , lambda : f64 ) -> Result < f64 , TskitError > {
423+ self . inner . kc_distance ( & other. inner , lambda)
424+ }
353425}
354426
355427impl < ' ts > streaming_iterator:: StreamingIterator for Tree < ' ts > {
0 commit comments