cli package

The main idea of this package is to emulate the terminal, but doing all of that inside Python itself. So this bash statement:

cat file.txt | head -5 > headerFile.txt

Turns into this statement:

cat("file.txt") | head(5) > file("headerFile.txt")

Here, “cat”, “head” and “file” are all classes extended from BaseCli. All of them implements the “reverse or” operation, or __ror__. Essentially, these 2 statements are equivalent:

3 | obj
obj.__ror__(3)

Also, a lot of these tools assume that we are operating on a table. So this table:

col1

col2

col3

1

2

3

4

5

6

Is equivalent to this list:

["col1\tcol2\tcol3", "1\t2\t3", "4\t5\t6"]

Essentially, each row is a single string, and elements in a row are separated by a delimiter. You can set the default delimiter using bioinfoSettings like this:

bioinfoSettings["defaultDelim"] = ","

Also, the expected way to use these tools is to import everything directly into the current environment, like this:

from k1lib.bioinfo.cli import *

Besides operating on string iterators alone, this package can also be extra meta, and operate on streams of strings, or streams of streams of anything. I think this is one of the most powerful concept of the cli workflow. If this interests you, check over this:

Submodules

bio module

This is for functions that are actually biology-related

k1lib.bioinfo.cli.bio.go(term: int)[source]

Looks up a GO term

class k1lib.bioinfo.cli.bio.transcribe[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

Transcribes (DNA -> RNA) incoming rows

__ror__(it: Iterator[str])[source]
class k1lib.bioinfo.cli.bio.translate(length: int = 0)[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

__init__(length: int = 0)[source]

Translates incoming rows.

Parameters

length – 0 for short (L), 1 for med (Leu), 2 for long (Leucine)

__ror__(it: Iterator[str])[source]
class k1lib.bioinfo.cli.bio.medAa[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

Converts short aa sequence to medium one

__ror__(it: Iterator[str])[source]
class k1lib.bioinfo.cli.bio.longAa[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

Converts short aa sequence to long one

__ror__(it: Iterator[str])[source]

entrez module

This module is not really fleshed out, not that useful/elegant, and I just use cmd instead

k1lib.bioinfo.cli.entrez.esearch(db: str = 'nucleotide', query: str = 'PRJNA257197')[source]
k1lib.bioinfo.cli.entrez.efetch(db: Optional[str] = None, ids: Optional[Union[str, List[str]]] = None, format: Optional[str] = None)[source]

mgi module

class k1lib.bioinfo.cli.mgi.batch(headless=True)[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

Queries MGI database, convert list of genes to MGI ids

__init__(headless=True)[source]
Parameters

headless – whether to run this operation headless, or actually display the browser

__ror__(it: List[str])[source]

filt module

This is for functions that cuts out specific parts of the table

class k1lib.bioinfo.cli.filt.filt(predicate: Callable[[str], bool], column: int = 0, delim: Optional[str] = None)[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

__init__(predicate: Callable[[str], bool], column: int = 0, delim: Optional[str] = None)[source]

Filters out lines.

Parameters

column

  • if integer, then predicate(line.split(delim)[column])

  • if None, then predicate(line)

__ror__(it: Iterator[str])[source]
__invert__()[source]

Negate the condition

class k1lib.bioinfo.cli.filt.isValue(value, column: int = 0, delim: Optional[str] = None)[source]

Bases: k1lib.bioinfo.cli.filt.filt

__init__(value, column: int = 0, delim: Optional[str] = None)[source]

Filters out lines’ column that is different from the given value

class k1lib.bioinfo.cli.filt.inside(values: Set[Any], column: int = 0, delim: Optional[str] = None)[source]

Bases: k1lib.bioinfo.cli.filt.filt

__init__(values: Set[Any], column: int = 0, delim: Optional[str] = None)[source]

Filters out lines’ column that is not in the specified set

class k1lib.bioinfo.cli.filt.nonEmptyStream[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

Filters out streams that have no rows

__ror__(streams: Iterator[Iterator[Any]])Iterator[Iterator[Any]][source]
class k1lib.bioinfo.cli.filt.startswith(s: str, column: int = 0, delim: Optional[str] = None)[source]

Bases: k1lib.bioinfo.cli.filt.filt

__init__(s: str, column: int = 0, delim: Optional[str] = None)[source]

Filters out lines’ column that don’t start with s

class k1lib.bioinfo.cli.filt.endswith(s: str, column: int = 0, delim: Optional[str] = None)[source]

Bases: k1lib.bioinfo.cli.filt.filt

class k1lib.bioinfo.cli.filt.isNumeric(column: Optional[int] = None, delim: Optional[str] = None)[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

__init__(column: Optional[int] = None, delim: Optional[str] = None)[source]

Filters out a line if that column is not a number

__ror__(it: Iterator[str])[source]
class k1lib.bioinfo.cli.filt.inRange(min: Optional[float] = None, max: Optional[float] = None, column: Optional[int] = None, delim: Optional[str] = None)[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

__init__(min: Optional[float] = None, max: Optional[float] = None, column: Optional[int] = None, delim: Optional[str] = None)[source]

Checks whether a column is in range or not

__ror__(it: Iterator[str])[source]
class k1lib.bioinfo.cli.filt.head(n: int = 10)[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

__init__(n: int = 10)[source]

Only outputs first {n} lines, preferable over row()[:n]

__ror__(it: Iterator[str])[source]
class k1lib.bioinfo.cli.filt.nhead(n: int = 1)[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

__init__(n: int = 1)[source]

Only outputs after first {n} lines, preferable over row()[n:]

__ror__(it: Iterator[str])[source]
class k1lib.bioinfo.cli.filt.columns(*columns: Union[int, slice, List[int]], delim: Optional[str] = None)[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

__init__(*columns: Union[int, slice, List[int]], delim: Optional[str] = None)[source]

Cuts out specific columns, separated by delim

__ror__(it: Iterator[str])[source]
k1lib.bioinfo.cli.filt.cut

alias of k1lib.bioinfo.cli.filt.columns

class k1lib.bioinfo.cli.filt.rows(*rows)[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

__init__(*rows)[source]

Cuts out specific rows. Can do rows()[5:10] to get rows 5 to 10

__ror__(it: Iterator[str])[source]
class k1lib.bioinfo.cli.filt.every(length: int, offset: int = 0)[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

__init__(length: int, offset: int = 0)[source]

Get lines every length, starting at a specific offset

__ror__(it: Iterator[str])[source]
class k1lib.bioinfo.cli.filt.intersection[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

Returns the intersection of multiple streams. Example:

[[1, 2, 3, 4, 5], [7, 2, 4, 6, 5]] | intersection() # will return set([2, 4, 5])
__ror__(its: Iterator[Iterator[Any]])Set[Any][source]

grep module

class k1lib.bioinfo.cli.grep.grep(pattern: str, before: int = 0, after: int = 0, singleLine: bool = False, delim: Optional[str] = None)[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

__init__(pattern: str, before: int = 0, after: int = 0, singleLine: bool = False, delim: Optional[str] = None)[source]

Find lines that has the specified pattern.

Parameters
  • pattern – regex pattern to search for in a line

  • before – lines before the hit. Outputs independent lines

  • after – lines after the hit. Outputs independent lines

  • singleLine – change to True, to bunch before and after lines to a single line

  • delim – the delimiter in between sections if singleLine is True

__ror__(it: Iterator[str])[source]
class k1lib.bioinfo.cli.grep.grepTemplate(pattern: str, template: str)[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

__init__(pattern: str, template: str)[source]

Searches over all lines, pick out the match, and expands it to the templateand yields

__ror__(it: Iterator[str])[source]

init module

cli.bioinfoSettings = {'defaultDelim': '\t', 'defaultIndent': '  ', 'lookupImgs': True, 'oboFile': None, 'strict': False}

Main settings of k1lib.bioinfo.cli. When using:

from k1lib.bioinfo.cli import *

…you can just set the settings like this:

bioinfoSettings["defaultIndent"] = "\t"

There are a few settings:

  • defaultDelim: default delimiter used in-between columns when creating tables

  • defaultIndent: default indent used for displaying nested structures

  • lookupImgs: whether to automatically look up images when exploring something

  • oboFile: gene ontology obo file location

  • strict: whether strict mode is on. Turning it on can help you debug stuff, but could also be a pain to work with

k1lib.bioinfo.cli.init.patchDefaultDelim(s: str)[source]
Parameters

s

  • if not None, returns self

  • else returns the default delimiter in settings

k1lib.bioinfo.cli.init.patchDefaultIndent(s: str)[source]
Parameters

s

  • if not None, returns self

  • else returns the default indent character in settings

class k1lib.bioinfo.cli.init.BaseCli[source]

Bases: object

all()k1lib.bioinfo.cli.init.BaseCli[source]

Applies this BaseCli to all incoming streams

f()[source]

Creates a normal function \(f(x)\) which is equivalent to x | self.

class k1lib.bioinfo.cli.init.serial(*clis: List[k1lib.bioinfo.cli.init.BaseCli])[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

__init__(*clis: List[k1lib.bioinfo.cli.init.BaseCli])[source]

Merges clis into 1, feeding end to end. Used in chaining clis together without a prime iterator. Meaning, without this, stuff like this fails to run:

[1, 2] | a() | b() # runs
c = a() | b(); [1, 2] | c # doesn't run if this class doesn't exist
__ror__(it: Iterator[Any])Iterator[Any][source]
class k1lib.bioinfo.cli.init.oneToMany(*clis: List[k1lib.bioinfo.cli.init.BaseCli])[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

__init__(*clis: List[k1lib.bioinfo.cli.init.BaseCli])[source]

Duplicates 1 stream into multiple streams, each for a cli in the list. Used in the “a & b” joining operator

__ror__(it: Iterator[Any])Iterator[Iterator[Any]][source]
class k1lib.bioinfo.cli.init.manyToMany(cli)[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

__init__(cli)[source]

Applies multiple streams to a single cli. Used in the “a.all()” operator.

__ror__(it: Iterator[Iterator[Any]])Iterator[Iterator[Any]][source]
class k1lib.bioinfo.cli.init.manyToManySpecific(*clis: List[k1lib.bioinfo.cli.init.BaseCli])[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

__init__(*clis: List[k1lib.bioinfo.cli.init.BaseCli])[source]

Applies multiple streams to multiple clis independently. Used in the “a + b” joining operator

__ror__(its: Iterator[Any])Iterator[Any][source]

input module

k1lib.bioinfo.cli.input.cat(fileName: Optional[str] = None)[source]

Reads a file line by line.

Parameters

fileName – if None, then return a BaseCli that accepts a file name and outputs Iterator[str]

class k1lib.bioinfo.cli.input.cats[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

Like cat(), but opens multiple files at once, returning streams. Looks something like this:

apply(lambda s: cat(s))
__ror__(fileNames: Iterator[str])Iterator[Iterator[str]][source]
k1lib.bioinfo.cli.input.curl(url: str)Iterator[str][source]

Gets file from url

k1lib.bioinfo.cli.input.wget(url: str, fileName: Optional[str] = None)[source]

Downloads a file

Parameters
  • url – The url of the file

  • fileName – if None, then tries to infer it from the url

class k1lib.bioinfo.cli.input.cmd(cmd: str)[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

__init__(cmd: str)[source]

Runs a command, and returns the output line by line.

property err

Error from the last command

__ror__(it: Optional[Iterator[str]])Iterator[str][source]

Pipes in lines of input, or if there’s nothing to pass, then pass None

k1lib.bioinfo.cli.input.requireCli(cliTool: str)[source]

Searches for a particular cli tool (eg. “ls”), throws ImportError if not found, else do nothing

kcsv module

This module is for dealing with csv stuff

k1lib.bioinfo.cli.kcsv.cat(file: str, delim: Optional[str] = None)Iterator[str][source]

Opens a csv file, and turns them into nice row elements, separated by delim

kxml module

This module is for dealing with xml stuff

class k1lib.bioinfo.cli.kxml.node[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

Turns lines into a single node

__ror__(it: Iterator[str])Iterator[xml.etree.ElementTree.Element][source]
class k1lib.bioinfo.cli.kxml.maxDepth(depth: Optional[int] = None, copy: bool = True)[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

__init__(depth: Optional[int] = None, copy: bool = True)[source]

Filters out too deep nodes

Parameters
  • depth – max depth to include in

  • copy – whether to limit the nodes itself, or limit a copy

__ror__(nodes: Iterator[xml.etree.ElementTree.Element])Iterator[xml.etree.ElementTree.Element][source]
class k1lib.bioinfo.cli.kxml.tag(tag: str)[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

__init__(tag: str)[source]

Finds all tags that have a particular name. If found, then don’t search deeper

__ror__(nodes: Iterator[xml.etree.ElementTree.Element])Iterator[xml.etree.ElementTree.Element][source]
class k1lib.bioinfo.cli.kxml.pretty(indent: Optional[str] = None)[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

__ror__(it: Iterator[xml.etree.ElementTree.Element])Iterator[str][source]
class k1lib.bioinfo.cli.kxml.display(depth: int = 3, lines: int = 20)[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

__init__(depth: int = 3, lines: int = 20)[source]

Convenience method for getting head, make it pretty and print it out

__ror__(it: Iterator[xml.etree.ElementTree.Element], lines=10)[source]

modifier module

This is for quick modifiers, think of them as changing formats

class k1lib.bioinfo.cli.modifier.lstrip(char: Optional[str] = None)[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

Strips left of every line

__ror__(it: Iterator[str])[source]
class k1lib.bioinfo.cli.modifier.rstrip(char: Optional[str] = None)[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

Strips right of every line

__ror__(it: Iterator[str])[source]
class k1lib.bioinfo.cli.modifier.strip(char: Optional[str] = None)[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

Strips both sides of every line

__ror__(it: Iterator[str])[source]
class k1lib.bioinfo.cli.modifier.apply(f: Callable[[str], str])[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

__init__(f: Callable[[str], str])[source]

Applies a function f to every line

__ror__(it: Iterator[str])[source]
class k1lib.bioinfo.cli.modifier.upper[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

Make all characters uppercase

__ror__(it: Iterator[str])[source]
class k1lib.bioinfo.cli.modifier.lower[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

Make all characters lowercase

__ror__(it: Iterator[str])[source]
class k1lib.bioinfo.cli.modifier.replace(s: str, target: Optional[str] = None)[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

__init__(s: str, target: Optional[str] = None)[source]

Replaces substring s with target for each line

__ror__(it: Iterator[str])[source]
class k1lib.bioinfo.cli.modifier.remove(s: str)[source]

Bases: k1lib.bioinfo.cli.modifier.replace

__init__(s: str)[source]

Removes a specific substring in each line

class k1lib.bioinfo.cli.modifier.sort(column: int = 0, reverse=False, numeric=True, delim: Optional[str] = None)[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

__init__(column: int = 0, reverse=False, numeric=True, delim: Optional[str] = None)[source]

Sorts all lines based on a specific column.

Parameters
  • reverse – False for smaller to bigger, True for bigger to smaller

  • numeric – whether to treat column as float

  • delim – delimiter that separates columns

__ror__(it: Iterator[str])[source]
__invert__()[source]

Creates a clone that has the opposite sort order

output module

For operations that feel like the termination

class k1lib.bioinfo.cli.output.file(fileName: str)[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

__ror__(it: Iterator[str])None[source]
class k1lib.bioinfo.cli.output.pretty(delim: Optional[str] = None)[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

__init__(delim: Optional[str] = None)[source]

Pretty prints a table

__ror__(it: Iterator[str])[source]
class k1lib.bioinfo.cli.output.display(lines: int = 10, delim: Optional[str] = None)[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

__init__(lines: int = 10, delim: Optional[str] = None)[source]

Convenience method for getting head, make it pretty and print it out

__ror__(it: Iterator[str], lines=10)[source]

sam module

This is for functions that are .sam or .bam related

k1lib.bioinfo.cli.sam.cat(bamFile: str)[source]

Get sam file outputs from bam file

class k1lib.bioinfo.cli.sam.header(long=True)[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

__init__(long=True)[source]

Adds a header to the table.

Parameters

long – whether to use a long descriptive header, or a short one

__ror__(it)[source]
class k1lib.bioinfo.cli.sam.quality(log=True)[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

__init__(log=True)[source]

Get numeric quality of sequence.

Parameters

log – whether to use log scale (0 -> 40), or linear scale (1 -> 0.0001)

__ror__(line)[source]

structural module

This is for functions that sort of changes the table structure in a dramatic way. They’re the core transformations

class k1lib.bioinfo.cli.structural.joinColumns(delim: Optional[str] = None, sep: bool = False)[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

__init__(delim: Optional[str] = None, sep: bool = False)[source]

Join multiple columns and loop through all rows

Parameters

sep – if True, don’t join row elements into a list, and keep them separate in a tuple

__ror__(it: Iterator[Iterator[str]])[source]
class k1lib.bioinfo.cli.structural.joinRows[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

Join multiple stream of rows

__ror__(streams: Iterator[Iterator[Any]])Iterator[Any][source]
k1lib.bioinfo.cli.structural.joinStreams

alias of k1lib.bioinfo.cli.structural.joinRows

class k1lib.bioinfo.cli.structural.splitColumns(delim: Optional[str] = None)[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

__init__(delim: Optional[str] = None)[source]

Splits lines into multiple columns, and return the columns individually

__ror__(it)[source]
class k1lib.bioinfo.cli.structural.insertRow(*columns: Union[List[str], str], delim: Optional[str] = None)[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

__init__(*columns: Union[List[str], str], delim: Optional[str] = None)[source]

Inserts a row right before everything else

__ror__(it: Iterator[str])[source]
k1lib.bioinfo.cli.structural.insertIdColumn(begin=True, delim: Optional[str] = None)[source]

Inserts an id column at the beginning (or end)

class k1lib.bioinfo.cli.structural.toDict(keyF: Optional[Callable[[Any], str]] = None, valueF: Optional[Callable[[Any], Any]] = None)[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

__init__(keyF: Optional[Callable[[Any], str]] = None, valueF: Optional[Callable[[Any], Any]] = None)[source]

Transform an incoming stream into a dict using a function for values. Example:

names = ["wanda", "vision", "loki", "mobius"]
names | toDict(valueF=lambda s: len(s)) # will return {"wanda": 5, "vision": 6, ...}
names | toDict(lambda s: s.title(), lambda s: len(s)) # will return {"Wanda": 5, "Vision": 6, ...}
__ror__(keys: Iterator[str])[source]
class k1lib.bioinfo.cli.structural.split(delim: Optional[str] = None, idx: Optional[int] = None)[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

__init__(delim: Optional[str] = None, idx: Optional[int] = None)[source]

Splits each line using a delimiter, and outputs the parts as a separate line.

Parameters

idx – if available, only outputs the element at that index

__ror__(it: Iterator[str])[source]
class k1lib.bioinfo.cli.structural.count(delim: Optional[str] = None)[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

__init__(delim: Optional[str] = None)[source]

Finds unique elements and returns a generator of “{value} {key}”.

__ror__(it: Iterator[str])[source]
class k1lib.bioinfo.cli.structural.permute(permutations: List[int], delim: Optional[str] = None)[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

__init__(permutations: List[int], delim: Optional[str] = None)[source]

Permutes the columns. Acts like torch.permute(…)

__ror__(it: Iterator[str])[source]
class k1lib.bioinfo.cli.structural.accumulate(column: int = 0, avg=False, delim: Optional[str] = None)[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

__init__(column: int = 0, avg=False, delim: Optional[str] = None)[source]

Groups lines that have the same line.split(delim)[column], and add together all other columns, assuming they’re floats

Args:

column: common column to accumulate avg: calculate average values instead of sum delim: specify delimiter between columns

__ror__(it: Iterator[str])[source]
class k1lib.bioinfo.cli.structural.AA_(*idxs: List[int], wraps=False)[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

__init__(*idxs: List[int], wraps=False)[source]

Returns 2 streams, one that has the selected element, and the other the rest. Example:

[1, 5, 6, 3, 7] | AA_(1) # will return [5, [1, 6, 3, 7]]

You can also put multiple indexes through:

[1, 5, 6] | AA_(0, 2) # will return [[1, [5, 6]], [6, [1, 5]]]

If you put None in, then all indexes will be sliced:

[1, 5, 6] | AA_(0, 2)

# will return:
# [[1, [5, 6]],
#  [5, [1, 6]],
#  [6, [1, 5]]]

As for why the strange name, think of this operation as “AĀ”. In statistics, say you have a set “A”, then “not A” is commonly written as A with an overline “Ā”. So “AA_” represents “AĀ”, and that it first returns the selection A first.

Parameters

wraps – if True, then the first example will return [[5, [1, 6, 3, 7]]] instead, so that A has the same signature as Ā

__ror__(it: List[Any])List[List[List[Any]]][source]
class k1lib.bioinfo.cli.structural.infinite[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

Takes in a stream and yields an infinite amount of them. Example:

# returns [[1, 2, 3], [1, 2, 3], [1, 2, 3]]
[1, 2, 3] | infinite() | head(3) | toList()
__ror__(it: Iterator[Any])Iterator[Iterator[Any]][source]

utils module

This is for all short utilities that has the boilerplate feeling

class k1lib.bioinfo.cli.utils.size(idx=None, delim: Optional[str] = None)[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

__init__(idx=None, delim: Optional[str] = None)[source]

Returns number of rows and columns in the input.

Parameters

idx – if idx is None return (rows, columns). If 0 or 1, then rows or columns

__ror__(it: Iterator[str])[source]
k1lib.bioinfo.cli.utils.shape

alias of k1lib.bioinfo.cli.utils.size

class k1lib.bioinfo.cli.utils.item[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

Returns the first row

__ror__(it: Iterator[str])[source]
class k1lib.bioinfo.cli.utils.identity[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

Yields whatever the input is. Useful for multiple streams

__ror__(it: Iterator[Any])[source]
class k1lib.bioinfo.cli.utils.toInt[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

Converts every row into an integer. Excludes non numbers if not in strict mode.

__ror__(it: Iterator[str])Iterator[int][source]
class k1lib.bioinfo.cli.utils.toFloat[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

Converts every row into a float. Excludes non numbers if not in strict mode.

__ror__(it: Iterator[str])Iterator[float][source]
class k1lib.bioinfo.cli.utils.toStr[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

__init__()[source]

Converts every line (possibly just a number) to a string.

__ror__(it: Iterator[str])[source]
class k1lib.bioinfo.cli.utils.to1Str(delim: Optional[str] = None)[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

__init__(delim: Optional[str] = None)[source]

Merges all strings into 1, with delim in the middle

__ror__(it: Iterator[str])[source]
class k1lib.bioinfo.cli.utils.toNumpy[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

Converts generator to numpy array

__ror__(it: Iterator[float])[source]
class k1lib.bioinfo.cli.utils.toList[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

Converts generator to list. list would do the same, but this is just to maintain the style

__ror__(it: Iterator[Any])List[Any][source]
class k1lib.bioinfo.cli.utils.wrapList[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

Wraps inputs inside a list

__ror__(it: Any)List[Any][source]
class k1lib.bioinfo.cli.utils.toSet[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

Converts generator to set. set would do the same, but this is just to maintain the style

__ror__(it: Iterator[Any])Set[Any][source]
class k1lib.bioinfo.cli.utils.toIter[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

Converts object to iterator. iter() would do the same, but this is just to maintain the style

__ror__(it)Iterator[Any][source]
class k1lib.bioinfo.cli.utils.toRange[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

Returns iter(range(len(it))), effectively

__ror__(it: Iterator[Any])Iterator[int][source]
class k1lib.bioinfo.cli.utils.equals[source]

Bases: object

Checks if all incoming columns/streams are identical

__ror__(streams: Iterator[Iterator[str]])[source]
class k1lib.bioinfo.cli.utils.reverse[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

Prints last line first, first line last

__ror__(it: Iterator[str])List[str][source]
class k1lib.bioinfo.cli.utils.ignore[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

Just executes everything, ignoring the output

__ror__(it: Iterator[Any])[source]
class k1lib.bioinfo.cli.utils.avg[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

Calculates average of list of numbers

__ror__(it: Iterator[float])[source]
k1lib.bioinfo.cli.utils.headerIdx(delim: Optional[str] = None)[source]

Cuts out first line, put an index column next to it, and prints it out. Useful when you want to know what your column’s index is to cut it out.

class k1lib.bioinfo.cli.utils.dereference[source]

Bases: k1lib.bioinfo.cli.init.BaseCli

Recursively converts any iterator into a list. Only str, numbers.Number are not converted. Example:

iter(range(5)) # returns something like "<range_iterator at 0x7fa8c52ca870>"
iter(range(5)) | deference() # returns [0, 1, 2, 3, 4]
__ror__(it: Iterator[Any])List[Any][source]