- We are no longer supporting versions of Python before 3.6 (because I like f-strings).
- You can now pass format string labels to
striplog.plot()
, e.g.'{colour} {lithology}'
. These are passed to the Component summary method. - The Striplog constructor now creates Components if it is given miscellaneous data. If there are not components (e.g. "comp" fields in the CSV), then the description and either the provided Lexicon or the default one will be passed to the Interval constructor.
- Reorganized and moved ``the documentation <https://code.agilescientific.com/striplog>``_ to make it a bit easier to follow.
- You can plot Striplog's logo with
striplog.logo.plot()
.
- Added
Striplog.from_dict()
to create a striplog from a dictionary with items likename: depth
. - When reading a Petrel 'tops' file, you can pass a single function to apply to every quantity, not just a mapping of field names to functions. (You might do this to replace all
-999.25
withnp.nan
, for example.) There's no way to do both at present, but if there's a need, please file an issue. - Updated the default lexicon with some 'modifiers' like 'silty', 'sandy', etc.
Lexicon._parse_description()
is now a private static method (it was previously mangled which was a mistake). It can be called without instantiating a class to parse a piece of text. See the notebook,Parsing_a_description.ipynb
.- Fixed a bug causing the default Lexicon to be a shallow copy, which was annoying.
- Breaking change:
Striplog.extract()
now returns a copy of the striplog instead of changing the striplog in place. - Added option to send actual data to
Striplog.to_log()
instead of index from lookup table. - Added a tutorial,
Blocking_curves_with_striplog.ipynb
.
- Multi-step Markov chains now work properly, respecting 'self-transitions'.
- Added
include_self
property to the repr of a Markov chain object. - Added
match_only
argument toLegend.random()`
to allow you to keep only certain properties in the components. Component.from_text()
will now useLexicon.default()
if you don't pass one in.
We started adding an experimental new feature; feedback welcome! Added Striplog.from_macrostrat()
which takes a lat/lon location and returns a striplog in geological time or in depth below the surface at that location.
- Fixed sphinx documentation.
- Documentation now includes all tutorial notebooks.
- Added
label
kwarg tostriplog.plot()
. Give it the name of a field in theprimary
component and it will be added to the plot as text. Experimental feature; might break with some sizes of striplog. Feedback welcome. - Fixed a bug in
Striplog.hist()
which produced the wrong colours and labels for the bars.
- Minor release. Updated tutorials and fixed some bugs.
- Added
Striplog.shift()
to allow you to shift all the tops and bases by somedelta
or by setting a newstart
. - Added
striplog.markov.Markov_chain()
. See theMarkov_chain.ipynb
notebook intutorial
to see how to use it. This is an experimental module. There might be an elegant way to add the Markov chain as an attribute/methods onStriplog
objects, but I couldn't think of it. - Fixed a bug in
Striplog.hist()
which produced the wrong colours and labels for the bars.
- Added
append
,extend
andpop
methods toStriplog
objects. - Breaking change: Changed the name of
Striplog.__insert()
toStriplog.insert()
to matchappend()
,extend()
andpop()
. - Added binary morphology filters to
Striplog
object. These offer another way to filter intervals, and thus to simplify a binary striplog (one in which an attribute of the components contains only a single binary 'flag'). Operations includedilation
,erosion
,opening
, andclosing
. - Fixed a bug in
plot
: it assumed the first interval in a striplog was the 'shallowest' and the last the deepest. But if intervals can overlap (which they can), then this is not a safe assumption. Now usesStriplog.start
andStriplog.stop
to decide. - Added
mode
keyword arg to anneal, allowing user to choose whether the gaps in the log are filled in by flooding upwards (that is, extend the interval below the gap upwards), flooding downwards (extend the upper interval), or flooding symmetrically into the middle from both above and below, meeting in the middle. (Note, you can also fill gaps with another component, using thefill()
method.) - Added
merge
method to theStriplog
. This allows you to merge overlapping intervals by precedence (rather than by blending the contents of the intervals). For example, you can choose to keep the thickest interval in all overlaps. If intervals have a date, you could keep the latest interval. - Added
net_to_gross
method toStriplog
object. Give it a binary attribute and it will compute the ratio of intervals having that attribute asTrue
to the total thickness. - Added a couple of notebooks to
/tutorial
. - Fixed a bug that allowed lists of intervals used to instantiate striplogs to be mutated.
- New point release because of breaking changes.
- Breaking change:
Striplog.prune()
andStriplog.anneal()
now return copies, so you can chain them. Striplog.bar()
makes a bar chart of the intervals, with optional sorting by thickness or any other key.- Breaking change:
Striplog.hist()
(whichhistogram()
now calls) now makes a plot as well and returns the bars (or the axis, if you pass one in). Striplog.merge_neighbours()
performs a stepwiseInterval.union()
on all pairs of intervals, combining neighbours that have identical components. It is intended to be used afterStriplog.anneal()
.
- Improved test coverage.
- Improved CSV writing.
- Canstrat legend and ASCII file writing.
- Striplog quality method.
- Introduced
Position
object for expressing depths of intervals. - Custom string formatting for using with
format()
. - Lots of new built-in legends.
- Random legends for when you're in a hurry.
- Lots more superpowers for intervals, including intersect, merge and union.
- Hatching in decors.
- HTML repr for legends and intervals.
- Rocks are now Components.
- Python 3 support.
- Many bug fixes.
- Test coverage.
- Continuous integration.
- Updated documentation.
- Histograms (buggy).
- Plot tests working.
- First releases for client.