Skip to main content

PYthon module for AUtomated DIstance SAMpling analyses

This module interfaces distance sampling analysis engines from Distance software, and possibly others in the future ; thus, it has been designed in order to make it easier :

  • to run (in parallel) numerous Distance Sampling analyses with many (many) parameter variants on many field observation samples (possibly using some optimisation techniques for automated computation of right and left distance truncations),
  • to select the best analysis variant results through a mostly automated process, based on customisable statistical quality indicators,
  • to produce partly customisable reports in spreadsheet (numerical results only) and HTML formats (more complete, with full-featured plots like in Distance, and more).

As for now, only the Windows MCDS.exe 6.x (Distance 6 to 7.3) and 7.4 (Distance 7.4 and 7.5 at least) engine and Point Transect analyses are supported, and so, it runs only under Windows.

Requirements

The module itself was actually tested extensively with:

  • python 3.8 only
  • pandas 0.25 to 1.2.5
  • openpyxl 3.0 to 3.1.2
  • matplotlib 3.1 to 3.7
  • jinja2 2.10 to 3.1
  • zoopt 0.4.0
  • xlrd 2.0 (only for .xls format support)

You will get no support outside of this (but porting to python 3.12 & pandas 2.x is planned for 2024 or 2025).

As for testing:

  • pytest, pytest-cov
  • plotly (sometimes)

Installation

You can install pyaudisam from PyPI in your current python environment (conda or venv, whatever):

pip install pyaudisam

Or from a downloaded source package:

pip install pyaudisam-1.1.0.tar.gz

Or from a downloaded wheel package:

pip install pyaudisam-1.1.0-py3-none-any.whl

Or even directly from GitHub:

  • pip install git+https://github.com/pypa/sampleproject.git@1.1.0
  • pip install git+https://github.com/pypa/sampleproject.git@main

Usage

As a python package, pyaudisam can be used through its python API.

But there's also a command-line interface: try and run it with the -h/--help option.

python -m pyaudisam --help

Whichever method, the best way to go is to read the concrete quick-start guide : see Documentation below (but be aware that you'll need to install an external Distance Sampling engine, like MCDS, to run analyses with paudisam).

Documentation

Note: You can also get a detailed idea of how to use pyaudisam python API by playing with the fully functional jupyter notebook tests/valtests.ipynb (see below Running tests for how to obtain and run it).

Testing

You first need to clone the source tree or download and install a source package: once done, look in the tests sub-folder, everything's inside.

Then, you need to install test dependencies:

pip install pyaudisam[test]

Some tests are fully automated, simply run:

pytest

For code coverage during tests, simply run:

pytest --cov

Or even, if you want an HTML report with annotated code coverage:

pytest --cov --cov-report html

Note: Some other tests are not yet automated: they are implemented as jupyter notebooks (see tests/unintests.ipynb and tests/valtests.ipynb that you must run step by step, as long as no one has fully automated them :-).

Building

To build pyaudisam PyPI source and binary packages, you need:

  • a source tree (clone the source tree or download and extract a source package),
  • a python environment where pyaudisam works,
  • the build module (to install through pip as an example).

Then, it's as simple as:

python -m build

You'll get 2 files in the dist folder (ex. for version 1.1.0) :

  • the wheel package: pyaudisam-1.1.0-py3-none-any.whl
  • the source package: pyaudisam-1.1.0.tar.gz

Contributing

Merge requests are very welcome !

And if you are lacking ideas, here are some good ones below ;-)

To do list

  • documentation:
    • complete the quick start guides above by other small and focused articles to explain some mandatory details:
      • how to build a sample or analysis specification workbook (see a short draft in analyser.py:273),
      • ...
    • write a technical documentation of the whole module and sub-modules,
    • write a guide for building the module API documentation (sphinx should work out of the box as reStructured text has been used in docstrings),
  • code quality and tests:
    • add more tests for improving code coverage (thanks to HTML coverage report),
    • configure and run pylint, and follow its useful advices,
    • main: split _Application._run in feature sub-functions for clarity,
  • features:
    • add support for line transects (only point transects for the moment),
    • add support for the co-variates feature of MCDS,
    • integrate the notebook prototype of "final reports" (workbook, HTML, and OpenDoc text formats) to automate most of the work of producing a publication-grade "full results appendix" for a Distance Sampling study (based on the auto-filtered report, but with semi-automated diagnosis at sample and analysis level in order to help in the final choice for each sample),
    • add more features for selecting sample data before running analyses (to avoid the need of creating multiple data sets, run multiple analysis sessions, and then re-aggregate results and reports manually): exclude some specific transects, pre-truncate data above some fixed distance, ...
  • packaging:
  • platform support:
    • add support for newer Python versions (probably 3.12 now) and updated pandas (2+) and zoopt dependencies,
    • make pyaudisam work under Linux / macOS (all python: OK, but ... calling MCDS.exe, that runs exclusively under Windows):
      • or: through some kind of external client-server interface to MCDS.exe (that runs only under Windows),
      • or: by porting MCDS to Linux (closed Fortran source, but old, so might be obtained through a polite request to this Distance Sampling forum ; BUT, you'll need an IMSL license, which is horribly expensive).
      • or: by rewriting MCDS from scratch, or by porting the MRDS Distance package to Python,
      • or: by rewriting MCDS using the MRDS Distance package, meaning some kind of interface to R,
  • user interface:
    • build a GUI for pyaudisam command-line (with some kind of "project" concept, and parameter set template, and ...),
  • ...

Known issues

  • AnalysisResultsSet.toOpenDoc sometimes produces broken header rows (the 3-row multi-index header is not rendered as it is on the right side),
  • The new undocumented MCDS 7.4 result column names are not translated correctly (switched fr and en translations) (minor, as not used actually for the moment),
  • The "Details" table header is not translated in auto-filtered reports (whereas the "Synthesis" one is),
  • Too many decimals rendered for the Max/Min dist figures in HTML reports when the distance unit is "meter",
  • The colorisation of HTML and workbook auto-filtered reports is of no use as it is now (need for a full rework).

Release notes

You can read them here :-)

Some hints

Some formal things that I don't plan to change (let's concentrate on substantive content) :-)

  • this code is not blacked or isorted or fully conform to pep8 (but it's clean, commented, and it works),
  • the identifier naming scheme used is old-fashioned: camel case everywhere.

Download files

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

Source Distribution

pyaudisam-1.1.0.tar.gz (4.4 MB view details)

Uploaded Source

Built Distribution

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

pyaudisam-1.1.0-py3-none-any.whl (193.2 kB view details)

Uploaded Python 3

File details

Details for the file pyaudisam-1.1.0.tar.gz.

File metadata

  • Download URL: pyaudisam-1.1.0.tar.gz
  • Upload date:
  • Size: 4.4 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.12.3

File hashes

Hashes for pyaudisam-1.1.0.tar.gz
Algorithm Hash digest
SHA256 858127102bc47c981e354157f89fbb52ccb18563ee13395c248e43bb74d85b61
MD5 fd44cdc324f20552fc8104dc96a561e1
BLAKE2b-256 32f6832e603e0df968b7b499b9c25ee5499f557bb727ecb1443d9a710cf2b5d8

See more details on using hashes here.

File details

Details for the file pyaudisam-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: pyaudisam-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 193.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.12.3

File hashes

Hashes for pyaudisam-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 366e93df936bf58f0e3f16c21e2f215a508ae8ad772c65afd294613403b5ca56
MD5 73ae338a052e12b1fe85b273239f8067
BLAKE2b-256 f2c8fc63e57b12328c71079280d71b23f797c907149f2ad12536b8010965bfbe

See more details on using hashes here.

Release history Release notifications | RSS feed

1.2.0

2 files

This release

1.1.0 This release

2 files

1.0.2

2 files

1.0.1

2 files

0.9.3

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page