Functionality

In part, this page is used to document the planned functionality of the package. It is also used to document the progress of the package development.

The package provides an api that supports the following requirements:

Sample Object

  • the fundamental object is a Sample object containing mass (wet, dry, h2o) and assay data

  • the Sample object is created from a pandas.DataFrame object, and underlying data is stored as a pandas.DataFrame

  • the records in a Sample object can represent:

    • time-series samples

    • drill-hole data

    • a sample fraction (e.g. a sieve size fraction)

    • block in a block model

  • mass-weighted math operations on Sample objects

  • Sample objects can represent drill-hole data, sample fractions, or process streams

  • Sample objects can be combined to form composite samples

  • Sample objects can be split by the following:

    • mass

    • partition model

    • machine learning model

  • the mass-moisture of a Sample must always balance

  • moisture is always calculated on a wet basis

  • the chemistry of a Sample is always based on the dry mass

  • the concrete data of a sample will be in mass units to simplify math operations

  • the Sample object will have a name attribute to identify the sample

  • when math operations on Sample objects, the relationships are preserved using hidden src_node and dst_node attributes. This allows conversion to a flowsheet object without mapping the relationships again.

  • an IntervalSample object is a subclass of Sample that represents a sample with an interval index. It is used to represent a drill-hole intervals, or samples fractionated by size (sieved samples), etc.

Stream and Flowsheet Objects

  • Stream objects represent a Sample assigned to the edge of a Directional Acyclic Graph (DAG) a.k.a a Flowsheet

  • Stream is a subclass of Sample with additional attributes for the src_node and dst_node

  • nodes in the Flowsheet are (unit) Operation objects that report the mass balance status across that node.

  • a special Stream object is the WaterStream object that represents a water ony flow in a flowsheet. It has no chemistry. It is a subclass of Stream.

  • flowsheet visualisations include network and sankey plots, with tabular summaries of mass and chemistry for each stream

  • and empty Stream is a Stream object with no data, but with a name. It is used to represent a stream that is expected to have data, but does not yet.

  • the solve method on a Node object will back-calculate any empty streams.

BlockModel Object

  • subclasses Sample. Requires a pd.MultiIndex with x, y, z.

  • provides 3D plotting of the block model by leveraging the pyvista package.

Operation Object

  • Operation objects are nodes in a Flowsheet object

  • Operation objects have a name attribute

  • Operation objects have a solve method that back-calculates any missing data in the input streams

  • Operation objects have a summary method that provides a tabular summary of the mass and chemistry of the input and output streams

  • Operation objects have a plot method that provides a visualisation of the mass and chemistry of the input and output streams