Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
bussilabbot committed Oct 17, 2024
0 parents commit a4b6e7d
Show file tree
Hide file tree
Showing 24 changed files with 37,086 additions and 0 deletions.
Empty file added .nojekyll
Empty file.
13 changes: 13 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
Precompiled manual for py-bussilab
-------------------------------

This repository hosts a precompiled manual for py-bussilab
git revision [191f1c7](https://github.com/bussilab/py-bussilab/commit/191f1c7).

To browse the manual you should go [here](http://bussilab.github.io/doc-py-bussilab).

You can also download a full copy of the manual for offline access
at [this link](http://github.com/bussilab/doc-py-bussilab/archive/master.zip).

This manual has been compiled on [GitHub Actions](https://github.com/bussilab/py-bussilab/actions) on Thu Oct 17 15:40:29 UTC 2024.

Binary file added bussilab.pdf
Binary file not shown.
559 changes: 559 additions & 0 deletions bussilab/ann.html

Large diffs are not rendered by default.

200 changes: 200 additions & 0 deletions bussilab/cli.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,200 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1">
<meta name="generator" content="pdoc3 0.11.1">
<title>bussilab.cli API documentation</title>
<meta name="description" content="Tools to implement the command line interface
">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/13.0.0/sanitize.min.css" integrity="sha512-y1dtMcuvtTMJc1yPgEqF0ZjQbhnc/bFhyvIyVNb9Zk5mIGtqVaAB1Ttl28su8AvFMOY0EwRbAe+HCLqj6W7/KA==" crossorigin>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/13.0.0/typography.min.css" integrity="sha512-Y1DYSb995BAfxobCkKepB1BqJJTPrOp3zPL74AWFugHHmmdcvO+C48WLrUOlhGMc0QG7AE3f7gmvvcrmX2fDoA==" crossorigin>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/default.min.css" crossorigin>
<style>:root{--highlight-color:#fe9}.flex{display:flex !important}body{line-height:1.5em}#content{padding:20px}#sidebar{padding:1.5em;overflow:hidden}#sidebar > *:last-child{margin-bottom:2cm}.http-server-breadcrumbs{font-size:130%;margin:0 0 15px 0}#footer{font-size:.75em;padding:5px 30px;border-top:1px solid #ddd;text-align:right}#footer p{margin:0 0 0 1em;display:inline-block}#footer p:last-child{margin-right:30px}h1,h2,h3,h4,h5{font-weight:300}h1{font-size:2.5em;line-height:1.1em}h2{font-size:1.75em;margin:2em 0 .50em 0}h3{font-size:1.4em;margin:1.6em 0 .7em 0}h4{margin:0;font-size:105%}h1:target,h2:target,h3:target,h4:target,h5:target,h6:target{background:var(--highlight-color);padding:.2em 0}a{color:#058;text-decoration:none;transition:color .2s ease-in-out}a:visited{color:#503}a:hover{color:#b62}.title code{font-weight:bold}h2[id^="header-"]{margin-top:2em}.ident{color:#900;font-weight:bold}pre code{font-size:.8em;line-height:1.4em;padding:1em;display:block}code{background:#f3f3f3;font-family:"DejaVu Sans Mono",monospace;padding:1px 4px;overflow-wrap:break-word}h1 code{background:transparent}pre{border-top:1px solid #ccc;border-bottom:1px solid #ccc;margin:1em 0}#http-server-module-list{display:flex;flex-flow:column}#http-server-module-list div{display:flex}#http-server-module-list dt{min-width:10%}#http-server-module-list p{margin-top:0}.toc ul,#index{list-style-type:none;margin:0;padding:0}#index code{background:transparent}#index h3{border-bottom:1px solid #ddd}#index ul{padding:0}#index h4{margin-top:.6em;font-weight:bold}@media (min-width:200ex){#index .two-column{column-count:2}}@media (min-width:300ex){#index .two-column{column-count:3}}dl{margin-bottom:2em}dl dl:last-child{margin-bottom:4em}dd{margin:0 0 1em 3em}#header-classes + dl > dd{margin-bottom:3em}dd dd{margin-left:2em}dd p{margin:10px 0}.name{background:#eee;font-size:.85em;padding:5px 10px;display:inline-block;min-width:40%}.name:hover{background:#e0e0e0}dt:target .name{background:var(--highlight-color)}.name > span:first-child{white-space:nowrap}.name.class > span:nth-child(2){margin-left:.4em}.inherited{color:#999;border-left:5px solid #eee;padding-left:1em}.inheritance em{font-style:normal;font-weight:bold}.desc h2{font-weight:400;font-size:1.25em}.desc h3{font-size:1em}.desc dt code{background:inherit}.source summary,.git-link-div{color:#666;text-align:right;font-weight:400;font-size:.8em;text-transform:uppercase}.source summary > *{white-space:nowrap;cursor:pointer}.git-link{color:inherit;margin-left:1em}.source pre{max-height:500px;overflow:auto;margin:0}.source pre code{font-size:12px;overflow:visible}.hlist{list-style:none}.hlist li{display:inline}.hlist li:after{content:',\2002'}.hlist li:last-child:after{content:none}.hlist .hlist{display:inline;padding-left:1em}img{max-width:100%}td{padding:0 .5em}.admonition{padding:.1em 1em;margin-bottom:1em}.admonition-title{font-weight:bold}.admonition.note,.admonition.info,.admonition.important{background:#aef}.admonition.todo,.admonition.versionadded,.admonition.tip,.admonition.hint{background:#dfd}.admonition.warning,.admonition.versionchanged,.admonition.deprecated{background:#fd4}.admonition.error,.admonition.danger,.admonition.caution{background:lightpink}</style>
<style media="screen and (min-width: 700px)">@media screen and (min-width:700px){#sidebar{width:30%;height:100vh;overflow:auto;position:sticky;top:0}#content{width:70%;max-width:100ch;padding:3em 4em;border-left:1px solid #ddd}pre code{font-size:1em}.name{font-size:1em}main{display:flex;flex-direction:row-reverse;justify-content:flex-end}.toc ul ul,#index ul ul{padding-left:1em}.toc > ul > li{margin-top:.5em}}</style>
<style media="print">@media print{#sidebar h1{page-break-before:always}.source{display:none}}@media print{*{background:transparent !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important}a[href]:after{content:" (" attr(href) ")";font-size:90%}a[href][title]:after{content:none}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,h3{orphans:3;widows:3}h1,h2,h3,h4,h5,h6{page-break-after:avoid}}</style>
<script defer src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js" integrity="sha512-D9gUyxqja7hBtkWpPWGt9wfbfaMGVt9gnyCvYa+jojwwPHLCzUm5i8rpk7vD7wNee9bA35eYIjobYPaQuKS1MQ==" crossorigin></script>
<script>window.addEventListener('DOMContentLoaded', () => {
hljs.configure({languages: ['bash', 'css', 'diff', 'graphql', 'ini', 'javascript', 'json', 'plaintext', 'python', 'python-repl', 'rust', 'shell', 'sql', 'typescript', 'xml', 'yaml']});
hljs.highlightAll();
})</script>
</head>
<body>
<main>
<article id="content">
<header>
<h1 class="title">Module <code>bussilab.cli</code></h1>
</header>
<section id="section-intro">
<h1 id="tools-to-implement-the-command-line-interface">Tools to implement the command line interface</h1>
<p>This module is used internally to implement the command line interface.
In addition, it can be used to run the commands that are available
in the command line interface without the need to leave python:</p>
<pre><code class="language-python">from bussilab.cli import cli
cli(&quot;-h&quot;)
cli(&quot;wham -b bias&quot;) # provide the command line as a string
cli([&quot;wham&quot;, &quot;-b&quot;, &quot;bias&quot;]) # alternatively use a list
</code></pre>
<p>The documentation of all the commands can be found in the
<a href="cli_documentation.html">cli_documentation</a> submodule.</p>
<p>Notice however that these commands typically have alternative python
implementations that allow you to work directly on data structures
and are thus more flexible.
For instance, <code><a title="bussilab.wham.wham" href="wham.html#bussilab.wham.wham">wham()</a>(bias)</code>, where <code>bias</code> is a numpy array,
is often more convenient than <code>bussilab.cli.cli("wham -b bias")</code>,
where <code>bias</code> is a file.</p>
</section>
<section>
</section>
<section>
</section>
<section>
<h2 class="section-title" id="header-functions">Functions</h2>
<dl>
<dt id="bussilab.cli.arg"><code class="name flex">
<span>def <span class="ident">arg</span></span>(<span>*name, **kwargs)</span>
</code></dt>
<dd>
<div class="desc"><p>Decorator that adds an argument to a command line tool.</p>
<p>Parameters are passed to the <code>parser.add_argument()</code> function.
It should be written <strong>after</strong> the <code><a title="bussilab.cli.command" href="#bussilab.cli.command">command()</a></code> decorator.</p></div>
</dd>
<dt id="bussilab.cli.cli"><code class="name flex">
<span>def <span class="ident">cli</span></span>(<span>arguments: Union[str, List[str]] = '', *, prog: Optional[str] = '', use_argcomplete: bool = False, throws_on_parser_errors: bool = True) ‑> Optional[int]</span>
</code></dt>
<dd>
<div class="desc"><p>Executes a command line tool from python.</p>
<p>This is the main function of this module and allows to launch all the subcommands available
in the command line interface directly from python.</p>
<h2 id="parameters">Parameters</h2>
<dl>
<dt><strong><code>arguments</code></strong> :&ensp;<code>str</code> or <code>list</code></dt>
<dd>Command line arguments. If a string is passed, it is first split using
shlex.split()</dd>
<dt><strong><code>prog</code></strong> :&ensp;<code>str</code></dt>
<dd>Name of the calling program. It is used to build help texts. <strong>Mostly for internal use</strong>.</dd>
<dt><strong><code>use_argcomplete</code></strong> :&ensp;<code>bool</code></dt>
<dd>If True, the <code>autocomplete</code> function of <code>argcomplete</code> module is called on the parser,
so as to allow autocompletion in the command line tool.
If <code>argcomplete</code> module is not installed, nothing is done and no failure is reported.
<strong>Mostly for internal use</strong>.</dd>
<dt><strong><code>throws_on_parser_errors</code></strong> :&ensp;<code>bool</code></dt>
<dd>If True, in case of command line error it throws a TypeError
exception. <strong>Mostly for internal use</strong>.</dd>
</dl>
<h2 id="returns">Returns</h2>
<dl>
<dt><code>None</code> or <code>int</code></dt>
<dd>If an error happens while parsing, it throws a TypeError exception,
unless throws_on_parser_errors is set to false, in which ase it
returns the corresponding error code.
If an error happens while executing the requested command, an exception is thrown.
If everything goes well, it returns None.</dd>
</dl></div>
</dd>
<dt id="bussilab.cli.command"><code class="name flex">
<span>def <span class="ident">command</span></span>(<span>name: str, help: Optional[str] = None, description: Optional[str] = None, **kwargs)</span>
</code></dt>
<dd>
<div class="desc"><p>Decorator that registers a function as a subcommand.</p>
<p>This decorator should be written <strong>before</strong> the other decorators
<code><a title="bussilab.cli.arg" href="#bussilab.cli.arg">arg()</a></code>, <code><a title="bussilab.cli.group" href="#bussilab.cli.group">group()</a></code>, and <code><a title="bussilab.cli.endgroup" href="#bussilab.cli.endgroup">endgroup()</a></code>.</p>
<h2 id="parameters">Parameters</h2>
<dl>
<dt><strong><code>name</code></strong> :&ensp;<code>str</code></dt>
<dd>Name of the subcommand (will be used on the command line)</dd>
<dt><strong><code>help</code></strong> :&ensp;<code>str</code></dt>
<dd>Short help message for the subcommand (one line).</dd>
<dt><strong><code>description</code></strong> :&ensp;<code>str</code>, optional</dt>
<dd>Longer description. If not provided, it is set to a copy of <code>help</code>.</dd>
<dt><strong><code>kwargs</code></strong></dt>
<dd>Other parameters are passed as is to the <code>add_parser</code> function of <code>argparse</code>.</dd>
</dl>
<h2 id="examples">Examples</h2>
<p>Simple command line tool that accepts a single <code>--out</code> argument followed by a string
and call the function <code>do_something</code> with that string as an argument.</p>
<pre><code class="language-python">from bussilab.cli import command, arg

@command(&quot;subcommand&quot;)
@arg(&quot;--out&quot;)
def myfunc(out):
do_something(out)
</code></pre></div>
</dd>
<dt id="bussilab.cli.endgroup"><code class="name flex">
<span>def <span class="ident">endgroup</span></span>(<span>f: Optional[Callable] = None)</span>
</code></dt>
<dd>
<div class="desc"><p>Decorator that ends a group of arguments for a command line tool.</p>
<p>See <code><a title="bussilab.cli.group" href="#bussilab.cli.group">group()</a></code>.</p></div>
</dd>
<dt id="bussilab.cli.group"><code class="name flex">
<span>def <span class="ident">group</span></span>(<span>title: Union[str, Callable, ForwardRef(None)] = None, description: Optional[str] = None, exclusive: Optional[bool] = None, required: Optional[bool] = None)</span>
</code></dt>
<dd>
<div class="desc"><p>Decorator that adds a group of arguments for a command line tool.</p>
<p>It should be written <strong>after</strong> the <code><a title="bussilab.cli.command" href="#bussilab.cli.command">command()</a></code> decorator.
It should be followed by a number of <code><a title="bussilab.cli.arg" href="#bussilab.cli.arg">arg()</a></code> decorators and by a closing
<code><a title="bussilab.cli.endgroup" href="#bussilab.cli.endgroup">endgroup()</a></code> decorator.</p>
<h2 id="parameters">Parameters</h2>
<dl>
<dt><strong><code>title</code></strong> :&ensp;<code>str</code></dt>
<dd>The name of the group. Can only be used for non exclusive groups.</dd>
<dt><strong><code>description</code></strong> :&ensp;<code>str</code></dt>
<dd>A description of the group. Can only be used for non exclusive groups.</dd>
<dt><strong><code>exclusive</code></strong> :&ensp;<code>bool</code></dt>
<dd>If True, the arguments belonging to this group are mutually exclusive</dd>
<dt><strong><code>required</code></strong> :&ensp;<code>bool</code></dt>
<dd>If True, one of the arguments at least should be passed.
Can only be used for exclusive groups.</dd>
</dl>
<h2 id="examples">Examples</h2>
<p>This is a simple command line tool that accepts three arguments (<code>-a</code>, <code>-b</code>, or <code>-c</code>),
mutually exclusive. When ran, it will just print booleans showing if these arguments
were passed.</p>
<pre><code class="language-python">from bussilab.cli import command, group, arg, endgroup

@command(&quot;doit&quot;)
@group(exclusive=True)
@arg(&quot;-a&quot;, action='store_true')
@arg(&quot;-b&quot;, action='store_true')
@arg(&quot;-c&quot;, action='store_true')
@endgroup
def check(a, b, c):
print(a, b, c)
</code></pre></div>
</dd>
</dl>
</section>
<section>
</section>
</article>
<nav id="sidebar">
<div class="toc">
<ul>
<li><a href="#tools-to-implement-the-command-line-interface">Tools to implement the command line interface</a></li>
</ul>
</div>
<ul id="index">
<li><h3>Super-module</h3>
<ul>
<li><code><a title="bussilab" href="index.html">bussilab</a></code></li>
</ul>
</li>
<li><h3><a href="#header-functions">Functions</a></h3>
<ul class="">
<li><code><a title="bussilab.cli.arg" href="#bussilab.cli.arg">arg</a></code></li>
<li><code><a title="bussilab.cli.cli" href="#bussilab.cli.cli">cli</a></code></li>
<li><code><a title="bussilab.cli.command" href="#bussilab.cli.command">command</a></code></li>
<li><code><a title="bussilab.cli.endgroup" href="#bussilab.cli.endgroup">endgroup</a></code></li>
<li><code><a title="bussilab.cli.group" href="#bussilab.cli.group">group</a></code></li>
</ul>
</li>
</ul>
</nav>
</main>
<footer id="footer">
<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.11.1</a>.</p>
</footer>
</body>
</html>
Loading

0 comments on commit a4b6e7d

Please sign in to comment.