diff --git a/docs/_modules/index.html b/docs/_modules/index.html index 7f0c87982..31e9f1ebf 100644 --- a/docs/_modules/index.html +++ b/docs/_modules/index.html @@ -5,7 +5,7 @@ - Overview: module code — monty 2021.5.9 documentation + Overview: module code — monty 2021.6.10 documentation @@ -31,7 +31,7 @@

Navigation

  • modules |
  • - + diff --git a/docs/_modules/monty/bisect.html b/docs/_modules/monty/bisect.html index e753d1c26..09d9ff944 100644 --- a/docs/_modules/monty/bisect.html +++ b/docs/_modules/monty/bisect.html @@ -5,7 +5,7 @@ - monty.bisect — monty 2021.5.9 documentation + monty.bisect — monty 2021.6.10 documentation @@ -31,7 +31,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/_modules/monty/collections.html b/docs/_modules/monty/collections.html index 53866df2e..d54f09490 100644 --- a/docs/_modules/monty/collections.html +++ b/docs/_modules/monty/collections.html @@ -5,7 +5,7 @@ - monty.collections — monty 2021.5.9 documentation + monty.collections — monty 2021.6.10 documentation @@ -31,7 +31,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/_modules/monty/design_patterns.html b/docs/_modules/monty/design_patterns.html index 15d3f2690..4955d53fb 100644 --- a/docs/_modules/monty/design_patterns.html +++ b/docs/_modules/monty/design_patterns.html @@ -5,7 +5,7 @@ - monty.design_patterns — monty 2021.5.9 documentation + monty.design_patterns — monty 2021.6.10 documentation @@ -31,7 +31,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/_modules/monty/dev.html b/docs/_modules/monty/dev.html index bfc70ab92..e13464316 100644 --- a/docs/_modules/monty/dev.html +++ b/docs/_modules/monty/dev.html @@ -5,7 +5,7 @@ - monty.dev — monty 2021.5.9 documentation + monty.dev — monty 2021.6.10 documentation @@ -31,7 +31,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/_modules/monty/fnmatch.html b/docs/_modules/monty/fnmatch.html index 31c0603e8..fa9f497bf 100644 --- a/docs/_modules/monty/fnmatch.html +++ b/docs/_modules/monty/fnmatch.html @@ -5,7 +5,7 @@ - monty.fnmatch — monty 2021.5.9 documentation + monty.fnmatch — monty 2021.6.10 documentation @@ -31,7 +31,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/_modules/monty/fractions.html b/docs/_modules/monty/fractions.html index 8cfeb7315..588607829 100644 --- a/docs/_modules/monty/fractions.html +++ b/docs/_modules/monty/fractions.html @@ -5,7 +5,7 @@ - monty.fractions — monty 2021.5.9 documentation + monty.fractions — monty 2021.6.10 documentation @@ -31,7 +31,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/_modules/monty/functools.html b/docs/_modules/monty/functools.html index b7b224574..fe173822c 100644 --- a/docs/_modules/monty/functools.html +++ b/docs/_modules/monty/functools.html @@ -5,7 +5,7 @@ - monty.functools — monty 2021.5.9 documentation + monty.functools — monty 2021.6.10 documentation @@ -31,7 +31,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/_modules/monty/inspect.html b/docs/_modules/monty/inspect.html index 3c241ad38..71d0ec8cf 100644 --- a/docs/_modules/monty/inspect.html +++ b/docs/_modules/monty/inspect.html @@ -5,7 +5,7 @@ - monty.inspect — monty 2021.5.9 documentation + monty.inspect — monty 2021.6.10 documentation @@ -31,7 +31,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/_modules/monty/io.html b/docs/_modules/monty/io.html index 2b2d03260..e69f1be6d 100644 --- a/docs/_modules/monty/io.html +++ b/docs/_modules/monty/io.html @@ -5,7 +5,7 @@ - monty.io — monty 2021.5.9 documentation + monty.io — monty 2021.6.10 documentation @@ -31,7 +31,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/_modules/monty/itertools.html b/docs/_modules/monty/itertools.html index 2ec86dd5f..d5eda2ec6 100644 --- a/docs/_modules/monty/itertools.html +++ b/docs/_modules/monty/itertools.html @@ -5,7 +5,7 @@ - monty.itertools — monty 2021.5.9 documentation + monty.itertools — monty 2021.6.10 documentation @@ -31,7 +31,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/_modules/monty/json.html b/docs/_modules/monty/json.html index 7ed5a4f4e..aa88b2739 100644 --- a/docs/_modules/monty/json.html +++ b/docs/_modules/monty/json.html @@ -5,7 +5,7 @@ - monty.json — monty 2021.5.9 documentation + monty.json — monty 2021.6.10 documentation @@ -31,7 +31,7 @@

    Navigation

  • modules |
  • - + @@ -50,6 +50,7 @@

    Source code for monty.json

     
     import os
     import json
    +import types
     import datetime
     
     from hashlib import sha1
    @@ -66,6 +67,11 @@ 

    Source code for monty.json

     except ImportError:
         np = None  # type: ignore
     
    +try:
    +    import pydantic
    +except ImportError:
    +    pydantic = None  # type: ignore
    +
     try:
         import bson
     except ImportError:
    @@ -313,6 +319,7 @@ 

    Source code for monty.json

                 return {"@module": "datetime", "@class": "datetime", "string": o.__str__()}
             if isinstance(o, UUID):
                 return {"@module": "uuid", "@class": "UUID", "string": o.__str__()}
    +
             if np is not None:
                 if isinstance(o, np.ndarray):
                     if str(o.dtype).startswith("complex"):
    @@ -338,7 +345,11 @@ 

    Source code for monty.json

                 return _serialize_callable(o)
     
             try:
    -            d = o.as_dict()
    +            if pydantic is not None and isinstance(o, pydantic.BaseModel):
    +                d = o.dict()
    +            else:
    +                d = o.as_dict()
    +
                 if "@module" not in d:
                     d["@module"] = "{}".format(o.__class__.__module__)
                 if "@class" not in d:
    @@ -426,6 +437,8 @@ 

    Source code for monty.json

                         data = {k: v for k, v in d.items() if not k.startswith("@")}
                         if hasattr(cls_, "from_dict"):
                             return cls_.from_dict(data)
    +                    if pydantic is not None and issubclass(cls_, pydantic.BaseModel):
    +                        return cls_(**data)
                 elif np is not None and modname == "numpy" and classname == "array":
                     if d["dtype"].startswith("complex"):
                         return np.array(
    @@ -492,6 +505,8 @@ 

    Source code for monty.json

             return [jsanitize(i, strict=strict, allow_bson=allow_bson) for i in obj]
         if np is not None and isinstance(obj, np.ndarray):
             return [jsanitize(i, strict=strict, allow_bson=allow_bson) for i in obj.tolist()]
    +    if np is not None and isinstance(obj, np.generic):
    +        return obj.item()
         if isinstance(obj, dict):
             return {k.__str__(): jsanitize(v, strict=strict, allow_bson=allow_bson) for k, v in obj.items()}
         if isinstance(obj, (int, float)):
    @@ -511,20 +526,28 @@ 

    Source code for monty.json

         if isinstance(obj, str):
             return obj.__str__()
     
    +    if pydantic is not None and isinstance(obj, pydantic.BaseModel):
    +        return jsanitize(MontyEncoder().default(obj), strict=strict, allow_bson=allow_bson)
    +
         return jsanitize(obj.as_dict(), strict=strict, allow_bson=allow_bson)
    def _serialize_callable(o): - # bound methods (i.e., instance methods) have a __self__ attribute - # that points to the class/module/instance - bound = getattr(o, "__self__", None) + if isinstance(o, types.BuiltinFunctionType): + # don't care about what builtin functions (sum, open, etc) are bound to + bound = None + else: + # bound methods (i.e., instance methods) have a __self__ attribute + # that points to the class/module/instance + bound = getattr(o, "__self__", None) # we are only able to serialize bound methods if the object the method is # bound to is itself serializable - try: - bound = MontyEncoder().default(bound) if bound is not None else None - except TypeError: - raise TypeError("Only bound methods of classes or MSONable instances are supported.") + if bound is not None: + try: + bound = MontyEncoder().default(bound) + except TypeError: + raise TypeError("Only bound methods of classes or MSONable instances are supported.") return { "@module": o.__module__, diff --git a/docs/_modules/monty/logging.html b/docs/_modules/monty/logging.html index 258ef8811..4d25b1697 100644 --- a/docs/_modules/monty/logging.html +++ b/docs/_modules/monty/logging.html @@ -5,7 +5,7 @@ - monty.logging — monty 2021.5.9 documentation + monty.logging — monty 2021.6.10 documentation @@ -31,7 +31,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/_modules/monty/math.html b/docs/_modules/monty/math.html index ad228e6a9..a5e1ee0a3 100644 --- a/docs/_modules/monty/math.html +++ b/docs/_modules/monty/math.html @@ -5,7 +5,7 @@ - monty.math — monty 2021.5.9 documentation + monty.math — monty 2021.6.10 documentation @@ -31,7 +31,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/_modules/monty/msgpack.html b/docs/_modules/monty/msgpack.html index 367e4af8c..b663ddb80 100644 --- a/docs/_modules/monty/msgpack.html +++ b/docs/_modules/monty/msgpack.html @@ -5,7 +5,7 @@ - monty.msgpack — monty 2021.5.9 documentation + monty.msgpack — monty 2021.6.10 documentation @@ -31,7 +31,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/_modules/monty/multiprocessing.html b/docs/_modules/monty/multiprocessing.html index e733da972..4976c91a4 100644 --- a/docs/_modules/monty/multiprocessing.html +++ b/docs/_modules/monty/multiprocessing.html @@ -5,7 +5,7 @@ - monty.multiprocessing — monty 2021.5.9 documentation + monty.multiprocessing — monty 2021.6.10 documentation @@ -31,7 +31,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/_modules/monty/operator.html b/docs/_modules/monty/operator.html index 090b15259..f6e9620f9 100644 --- a/docs/_modules/monty/operator.html +++ b/docs/_modules/monty/operator.html @@ -5,7 +5,7 @@ - monty.operator — monty 2021.5.9 documentation + monty.operator — monty 2021.6.10 documentation @@ -31,7 +31,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/_modules/monty/os.html b/docs/_modules/monty/os.html index 1a1826523..3f7127f19 100644 --- a/docs/_modules/monty/os.html +++ b/docs/_modules/monty/os.html @@ -5,7 +5,7 @@ - monty.os — monty 2021.5.9 documentation + monty.os — monty 2021.6.10 documentation @@ -31,7 +31,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/_modules/monty/os/path.html b/docs/_modules/monty/os/path.html index 187401749..d621346b0 100644 --- a/docs/_modules/monty/os/path.html +++ b/docs/_modules/monty/os/path.html @@ -5,7 +5,7 @@ - monty.os.path — monty 2021.5.9 documentation + monty.os.path — monty 2021.6.10 documentation @@ -31,7 +31,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/_modules/monty/pprint.html b/docs/_modules/monty/pprint.html index f9e9c13c6..6af8058d5 100644 --- a/docs/_modules/monty/pprint.html +++ b/docs/_modules/monty/pprint.html @@ -5,7 +5,7 @@ - monty.pprint — monty 2021.5.9 documentation + monty.pprint — monty 2021.6.10 documentation @@ -31,7 +31,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/_modules/monty/re.html b/docs/_modules/monty/re.html index 20d89be3c..4714db5df 100644 --- a/docs/_modules/monty/re.html +++ b/docs/_modules/monty/re.html @@ -5,7 +5,7 @@ - monty.re — monty 2021.5.9 documentation + monty.re — monty 2021.6.10 documentation @@ -31,7 +31,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/_modules/monty/serialization.html b/docs/_modules/monty/serialization.html index df93e2890..4b0cc1b2b 100644 --- a/docs/_modules/monty/serialization.html +++ b/docs/_modules/monty/serialization.html @@ -5,7 +5,7 @@ - monty.serialization — monty 2021.5.9 documentation + monty.serialization — monty 2021.6.10 documentation @@ -31,7 +31,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/_modules/monty/shutil.html b/docs/_modules/monty/shutil.html index 464620402..891674436 100644 --- a/docs/_modules/monty/shutil.html +++ b/docs/_modules/monty/shutil.html @@ -5,7 +5,7 @@ - monty.shutil — monty 2021.5.9 documentation + monty.shutil — monty 2021.6.10 documentation @@ -31,7 +31,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/_modules/monty/string.html b/docs/_modules/monty/string.html index d422fd662..113e01b91 100644 --- a/docs/_modules/monty/string.html +++ b/docs/_modules/monty/string.html @@ -5,7 +5,7 @@ - monty.string — monty 2021.5.9 documentation + monty.string — monty 2021.6.10 documentation @@ -31,7 +31,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/_modules/monty/subprocess.html b/docs/_modules/monty/subprocess.html index 089e51db5..feb8e0e9c 100644 --- a/docs/_modules/monty/subprocess.html +++ b/docs/_modules/monty/subprocess.html @@ -5,7 +5,7 @@ - monty.subprocess — monty 2021.5.9 documentation + monty.subprocess — monty 2021.6.10 documentation @@ -31,7 +31,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/_modules/monty/tempfile.html b/docs/_modules/monty/tempfile.html index 973f85e80..3baf8f20c 100644 --- a/docs/_modules/monty/tempfile.html +++ b/docs/_modules/monty/tempfile.html @@ -5,7 +5,7 @@ - monty.tempfile — monty 2021.5.9 documentation + monty.tempfile — monty 2021.6.10 documentation @@ -31,7 +31,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/_modules/monty/termcolor.html b/docs/_modules/monty/termcolor.html index 9c0570088..501832e2f 100644 --- a/docs/_modules/monty/termcolor.html +++ b/docs/_modules/monty/termcolor.html @@ -5,7 +5,7 @@ - monty.termcolor — monty 2021.5.9 documentation + monty.termcolor — monty 2021.6.10 documentation @@ -31,7 +31,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/_static/documentation_options.js b/docs/_static/documentation_options.js index 8c53e48fc..59a76c747 100644 --- a/docs/_static/documentation_options.js +++ b/docs/_static/documentation_options.js @@ -1,6 +1,6 @@ var DOCUMENTATION_OPTIONS = { URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), - VERSION: '2021.5.9', + VERSION: '2021.6.10', LANGUAGE: 'None', COLLAPSE_INDEX: false, BUILDER: 'html', diff --git a/docs/_static/searchtools.js b/docs/_static/searchtools.js index 2f500ae5d..e09f9263f 100644 --- a/docs/_static/searchtools.js +++ b/docs/_static/searchtools.js @@ -509,7 +509,7 @@ var Search = { var excerpt = ((start > 0) ? '...' : '') + $.trim(text.substr(start, 240)) + ((start + 240 - text.length) ? '...' : ''); - var rv = $('

    ').text(excerpt); + var rv = $('

    ').text(excerpt); $.each(hlwords, function() { rv = rv.highlightText(this, 'highlighted'); }); diff --git a/docs/_static/underscore-1.13.1.js b/docs/_static/underscore-1.13.1.js new file mode 100644 index 000000000..ffd77af96 --- /dev/null +++ b/docs/_static/underscore-1.13.1.js @@ -0,0 +1,2042 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define('underscore', factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, (function () { + var current = global._; + var exports = global._ = factory(); + exports.noConflict = function () { global._ = current; return exports; }; + }())); +}(this, (function () { + // Underscore.js 1.13.1 + // https://underscorejs.org + // (c) 2009-2021 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors + // Underscore may be freely distributed under the MIT license. + + // Current version. + var VERSION = '1.13.1'; + + // Establish the root object, `window` (`self`) in the browser, `global` + // on the server, or `this` in some virtual machines. We use `self` + // instead of `window` for `WebWorker` support. + var root = typeof self == 'object' && self.self === self && self || + typeof global == 'object' && global.global === global && global || + Function('return this')() || + {}; + + // Save bytes in the minified (but not gzipped) version: + var ArrayProto = Array.prototype, ObjProto = Object.prototype; + var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; + + // Create quick reference variables for speed access to core prototypes. + var push = ArrayProto.push, + slice = ArrayProto.slice, + toString = ObjProto.toString, + hasOwnProperty = ObjProto.hasOwnProperty; + + // Modern feature detection. + var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined', + supportsDataView = typeof DataView !== 'undefined'; + + // All **ECMAScript 5+** native function implementations that we hope to use + // are declared here. + var nativeIsArray = Array.isArray, + nativeKeys = Object.keys, + nativeCreate = Object.create, + nativeIsView = supportsArrayBuffer && ArrayBuffer.isView; + + // Create references to these builtin functions because we override them. + var _isNaN = isNaN, + _isFinite = isFinite; + + // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. + var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); + var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', + 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; + + // The largest integer that can be represented exactly. + var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; + + // Some functions take a variable number of arguments, or a few expected + // arguments at the beginning and then a variable number of values to operate + // on. This helper accumulates all remaining arguments past the function’s + // argument length (or an explicit `startIndex`), into an array that becomes + // the last argument. Similar to ES6’s "rest parameter". + function restArguments(func, startIndex) { + startIndex = startIndex == null ? func.length - 1 : +startIndex; + return function() { + var length = Math.max(arguments.length - startIndex, 0), + rest = Array(length), + index = 0; + for (; index < length; index++) { + rest[index] = arguments[index + startIndex]; + } + switch (startIndex) { + case 0: return func.call(this, rest); + case 1: return func.call(this, arguments[0], rest); + case 2: return func.call(this, arguments[0], arguments[1], rest); + } + var args = Array(startIndex + 1); + for (index = 0; index < startIndex; index++) { + args[index] = arguments[index]; + } + args[startIndex] = rest; + return func.apply(this, args); + }; + } + + // Is a given variable an object? + function isObject(obj) { + var type = typeof obj; + return type === 'function' || type === 'object' && !!obj; + } + + // Is a given value equal to null? + function isNull(obj) { + return obj === null; + } + + // Is a given variable undefined? + function isUndefined(obj) { + return obj === void 0; + } + + // Is a given value a boolean? + function isBoolean(obj) { + return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; + } + + // Is a given value a DOM element? + function isElement(obj) { + return !!(obj && obj.nodeType === 1); + } + + // Internal function for creating a `toString`-based type tester. + function tagTester(name) { + var tag = '[object ' + name + ']'; + return function(obj) { + return toString.call(obj) === tag; + }; + } + + var isString = tagTester('String'); + + var isNumber = tagTester('Number'); + + var isDate = tagTester('Date'); + + var isRegExp = tagTester('RegExp'); + + var isError = tagTester('Error'); + + var isSymbol = tagTester('Symbol'); + + var isArrayBuffer = tagTester('ArrayBuffer'); + + var isFunction = tagTester('Function'); + + // Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old + // v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). + var nodelist = root.document && root.document.childNodes; + if (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') { + isFunction = function(obj) { + return typeof obj == 'function' || false; + }; + } + + var isFunction$1 = isFunction; + + var hasObjectTag = tagTester('Object'); + + // In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`. + // In IE 11, the most common among them, this problem also applies to + // `Map`, `WeakMap` and `Set`. + var hasStringTagBug = ( + supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8))) + ), + isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map)); + + var isDataView = tagTester('DataView'); + + // In IE 10 - Edge 13, we need a different heuristic + // to determine whether an object is a `DataView`. + function ie10IsDataView(obj) { + return obj != null && isFunction$1(obj.getInt8) && isArrayBuffer(obj.buffer); + } + + var isDataView$1 = (hasStringTagBug ? ie10IsDataView : isDataView); + + // Is a given value an array? + // Delegates to ECMA5's native `Array.isArray`. + var isArray = nativeIsArray || tagTester('Array'); + + // Internal function to check whether `key` is an own property name of `obj`. + function has$1(obj, key) { + return obj != null && hasOwnProperty.call(obj, key); + } + + var isArguments = tagTester('Arguments'); + + // Define a fallback version of the method in browsers (ahem, IE < 9), where + // there isn't any inspectable "Arguments" type. + (function() { + if (!isArguments(arguments)) { + isArguments = function(obj) { + return has$1(obj, 'callee'); + }; + } + }()); + + var isArguments$1 = isArguments; + + // Is a given object a finite number? + function isFinite$1(obj) { + return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj)); + } + + // Is the given value `NaN`? + function isNaN$1(obj) { + return isNumber(obj) && _isNaN(obj); + } + + // Predicate-generating function. Often useful outside of Underscore. + function constant(value) { + return function() { + return value; + }; + } + + // Common internal logic for `isArrayLike` and `isBufferLike`. + function createSizePropertyCheck(getSizeProperty) { + return function(collection) { + var sizeProperty = getSizeProperty(collection); + return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX; + } + } + + // Internal helper to generate a function to obtain property `key` from `obj`. + function shallowProperty(key) { + return function(obj) { + return obj == null ? void 0 : obj[key]; + }; + } + + // Internal helper to obtain the `byteLength` property of an object. + var getByteLength = shallowProperty('byteLength'); + + // Internal helper to determine whether we should spend extensive checks against + // `ArrayBuffer` et al. + var isBufferLike = createSizePropertyCheck(getByteLength); + + // Is a given value a typed array? + var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/; + function isTypedArray(obj) { + // `ArrayBuffer.isView` is the most future-proof, so use it when available. + // Otherwise, fall back on the above regular expression. + return nativeIsView ? (nativeIsView(obj) && !isDataView$1(obj)) : + isBufferLike(obj) && typedArrayPattern.test(toString.call(obj)); + } + + var isTypedArray$1 = supportsArrayBuffer ? isTypedArray : constant(false); + + // Internal helper to obtain the `length` property of an object. + var getLength = shallowProperty('length'); + + // Internal helper to create a simple lookup structure. + // `collectNonEnumProps` used to depend on `_.contains`, but this led to + // circular imports. `emulatedSet` is a one-off solution that only works for + // arrays of strings. + function emulatedSet(keys) { + var hash = {}; + for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; + return { + contains: function(key) { return hash[key]; }, + push: function(key) { + hash[key] = true; + return keys.push(key); + } + }; + } + + // Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't + // be iterated by `for key in ...` and thus missed. Extends `keys` in place if + // needed. + function collectNonEnumProps(obj, keys) { + keys = emulatedSet(keys); + var nonEnumIdx = nonEnumerableProps.length; + var constructor = obj.constructor; + var proto = isFunction$1(constructor) && constructor.prototype || ObjProto; + + // Constructor is a special case. + var prop = 'constructor'; + if (has$1(obj, prop) && !keys.contains(prop)) keys.push(prop); + + while (nonEnumIdx--) { + prop = nonEnumerableProps[nonEnumIdx]; + if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { + keys.push(prop); + } + } + } + + // Retrieve the names of an object's own properties. + // Delegates to **ECMAScript 5**'s native `Object.keys`. + function keys(obj) { + if (!isObject(obj)) return []; + if (nativeKeys) return nativeKeys(obj); + var keys = []; + for (var key in obj) if (has$1(obj, key)) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; + } + + // Is a given array, string, or object empty? + // An "empty" object has no enumerable own-properties. + function isEmpty(obj) { + if (obj == null) return true; + // Skip the more expensive `toString`-based type checks if `obj` has no + // `.length`. + var length = getLength(obj); + if (typeof length == 'number' && ( + isArray(obj) || isString(obj) || isArguments$1(obj) + )) return length === 0; + return getLength(keys(obj)) === 0; + } + + // Returns whether an object has a given set of `key:value` pairs. + function isMatch(object, attrs) { + var _keys = keys(attrs), length = _keys.length; + if (object == null) return !length; + var obj = Object(object); + for (var i = 0; i < length; i++) { + var key = _keys[i]; + if (attrs[key] !== obj[key] || !(key in obj)) return false; + } + return true; + } + + // If Underscore is called as a function, it returns a wrapped object that can + // be used OO-style. This wrapper holds altered versions of all functions added + // through `_.mixin`. Wrapped objects may be chained. + function _$1(obj) { + if (obj instanceof _$1) return obj; + if (!(this instanceof _$1)) return new _$1(obj); + this._wrapped = obj; + } + + _$1.VERSION = VERSION; + + // Extracts the result from a wrapped and chained object. + _$1.prototype.value = function() { + return this._wrapped; + }; + + // Provide unwrapping proxies for some methods used in engine operations + // such as arithmetic and JSON stringification. + _$1.prototype.valueOf = _$1.prototype.toJSON = _$1.prototype.value; + + _$1.prototype.toString = function() { + return String(this._wrapped); + }; + + // Internal function to wrap or shallow-copy an ArrayBuffer, + // typed array or DataView to a new view, reusing the buffer. + function toBufferView(bufferSource) { + return new Uint8Array( + bufferSource.buffer || bufferSource, + bufferSource.byteOffset || 0, + getByteLength(bufferSource) + ); + } + + // We use this string twice, so give it a name for minification. + var tagDataView = '[object DataView]'; + + // Internal recursive comparison function for `_.isEqual`. + function eq(a, b, aStack, bStack) { + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal). + if (a === b) return a !== 0 || 1 / a === 1 / b; + // `null` or `undefined` only equal to itself (strict comparison). + if (a == null || b == null) return false; + // `NaN`s are equivalent, but non-reflexive. + if (a !== a) return b !== b; + // Exhaust primitive checks + var type = typeof a; + if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; + return deepEq(a, b, aStack, bStack); + } + + // Internal recursive comparison function for `_.isEqual`. + function deepEq(a, b, aStack, bStack) { + // Unwrap any wrapped objects. + if (a instanceof _$1) a = a._wrapped; + if (b instanceof _$1) b = b._wrapped; + // Compare `[[Class]]` names. + var className = toString.call(a); + if (className !== toString.call(b)) return false; + // Work around a bug in IE 10 - Edge 13. + if (hasStringTagBug && className == '[object Object]' && isDataView$1(a)) { + if (!isDataView$1(b)) return false; + className = tagDataView; + } + switch (className) { + // These types are compared by value. + case '[object RegExp]': + // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') + case '[object String]': + // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is + // equivalent to `new String("5")`. + return '' + a === '' + b; + case '[object Number]': + // `NaN`s are equivalent, but non-reflexive. + // Object(NaN) is equivalent to NaN. + if (+a !== +a) return +b !== +b; + // An `egal` comparison is performed for other numeric values. + return +a === 0 ? 1 / +a === 1 / b : +a === +b; + case '[object Date]': + case '[object Boolean]': + // Coerce dates and booleans to numeric primitive values. Dates are compared by their + // millisecond representations. Note that invalid dates with millisecond representations + // of `NaN` are not equivalent. + return +a === +b; + case '[object Symbol]': + return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); + case '[object ArrayBuffer]': + case tagDataView: + // Coerce to typed array so we can fall through. + return deepEq(toBufferView(a), toBufferView(b), aStack, bStack); + } + + var areArrays = className === '[object Array]'; + if (!areArrays && isTypedArray$1(a)) { + var byteLength = getByteLength(a); + if (byteLength !== getByteLength(b)) return false; + if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true; + areArrays = true; + } + if (!areArrays) { + if (typeof a != 'object' || typeof b != 'object') return false; + + // Objects with different constructors are not equivalent, but `Object`s or `Array`s + // from different frames are. + var aCtor = a.constructor, bCtor = b.constructor; + if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor && + isFunction$1(bCtor) && bCtor instanceof bCtor) + && ('constructor' in a && 'constructor' in b)) { + return false; + } + } + // Assume equality for cyclic structures. The algorithm for detecting cyclic + // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. + + // Initializing stack of traversed objects. + // It's done here since we only need them for objects and arrays comparison. + aStack = aStack || []; + bStack = bStack || []; + var length = aStack.length; + while (length--) { + // Linear search. Performance is inversely proportional to the number of + // unique nested structures. + if (aStack[length] === a) return bStack[length] === b; + } + + // Add the first object to the stack of traversed objects. + aStack.push(a); + bStack.push(b); + + // Recursively compare objects and arrays. + if (areArrays) { + // Compare array lengths to determine if a deep comparison is necessary. + length = a.length; + if (length !== b.length) return false; + // Deep compare the contents, ignoring non-numeric properties. + while (length--) { + if (!eq(a[length], b[length], aStack, bStack)) return false; + } + } else { + // Deep compare objects. + var _keys = keys(a), key; + length = _keys.length; + // Ensure that both objects contain the same number of properties before comparing deep equality. + if (keys(b).length !== length) return false; + while (length--) { + // Deep compare each member + key = _keys[length]; + if (!(has$1(b, key) && eq(a[key], b[key], aStack, bStack))) return false; + } + } + // Remove the first object from the stack of traversed objects. + aStack.pop(); + bStack.pop(); + return true; + } + + // Perform a deep comparison to check if two objects are equal. + function isEqual(a, b) { + return eq(a, b); + } + + // Retrieve all the enumerable property names of an object. + function allKeys(obj) { + if (!isObject(obj)) return []; + var keys = []; + for (var key in obj) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; + } + + // Since the regular `Object.prototype.toString` type tests don't work for + // some types in IE 11, we use a fingerprinting heuristic instead, based + // on the methods. It's not great, but it's the best we got. + // The fingerprint method lists are defined below. + function ie11fingerprint(methods) { + var length = getLength(methods); + return function(obj) { + if (obj == null) return false; + // `Map`, `WeakMap` and `Set` have no enumerable keys. + var keys = allKeys(obj); + if (getLength(keys)) return false; + for (var i = 0; i < length; i++) { + if (!isFunction$1(obj[methods[i]])) return false; + } + // If we are testing against `WeakMap`, we need to ensure that + // `obj` doesn't have a `forEach` method in order to distinguish + // it from a regular `Map`. + return methods !== weakMapMethods || !isFunction$1(obj[forEachName]); + }; + } + + // In the interest of compact minification, we write + // each string in the fingerprints only once. + var forEachName = 'forEach', + hasName = 'has', + commonInit = ['clear', 'delete'], + mapTail = ['get', hasName, 'set']; + + // `Map`, `WeakMap` and `Set` each have slightly different + // combinations of the above sublists. + var mapMethods = commonInit.concat(forEachName, mapTail), + weakMapMethods = commonInit.concat(mapTail), + setMethods = ['add'].concat(commonInit, forEachName, hasName); + + var isMap = isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map'); + + var isWeakMap = isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap'); + + var isSet = isIE11 ? ie11fingerprint(setMethods) : tagTester('Set'); + + var isWeakSet = tagTester('WeakSet'); + + // Retrieve the values of an object's properties. + function values(obj) { + var _keys = keys(obj); + var length = _keys.length; + var values = Array(length); + for (var i = 0; i < length; i++) { + values[i] = obj[_keys[i]]; + } + return values; + } + + // Convert an object into a list of `[key, value]` pairs. + // The opposite of `_.object` with one argument. + function pairs(obj) { + var _keys = keys(obj); + var length = _keys.length; + var pairs = Array(length); + for (var i = 0; i < length; i++) { + pairs[i] = [_keys[i], obj[_keys[i]]]; + } + return pairs; + } + + // Invert the keys and values of an object. The values must be serializable. + function invert(obj) { + var result = {}; + var _keys = keys(obj); + for (var i = 0, length = _keys.length; i < length; i++) { + result[obj[_keys[i]]] = _keys[i]; + } + return result; + } + + // Return a sorted list of the function names available on the object. + function functions(obj) { + var names = []; + for (var key in obj) { + if (isFunction$1(obj[key])) names.push(key); + } + return names.sort(); + } + + // An internal function for creating assigner functions. + function createAssigner(keysFunc, defaults) { + return function(obj) { + var length = arguments.length; + if (defaults) obj = Object(obj); + if (length < 2 || obj == null) return obj; + for (var index = 1; index < length; index++) { + var source = arguments[index], + keys = keysFunc(source), + l = keys.length; + for (var i = 0; i < l; i++) { + var key = keys[i]; + if (!defaults || obj[key] === void 0) obj[key] = source[key]; + } + } + return obj; + }; + } + + // Extend a given object with all the properties in passed-in object(s). + var extend = createAssigner(allKeys); + + // Assigns a given object with all the own properties in the passed-in + // object(s). + // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) + var extendOwn = createAssigner(keys); + + // Fill in a given object with default properties. + var defaults = createAssigner(allKeys, true); + + // Create a naked function reference for surrogate-prototype-swapping. + function ctor() { + return function(){}; + } + + // An internal function for creating a new object that inherits from another. + function baseCreate(prototype) { + if (!isObject(prototype)) return {}; + if (nativeCreate) return nativeCreate(prototype); + var Ctor = ctor(); + Ctor.prototype = prototype; + var result = new Ctor; + Ctor.prototype = null; + return result; + } + + // Creates an object that inherits from the given prototype object. + // If additional properties are provided then they will be added to the + // created object. + function create(prototype, props) { + var result = baseCreate(prototype); + if (props) extendOwn(result, props); + return result; + } + + // Create a (shallow-cloned) duplicate of an object. + function clone(obj) { + if (!isObject(obj)) return obj; + return isArray(obj) ? obj.slice() : extend({}, obj); + } + + // Invokes `interceptor` with the `obj` and then returns `obj`. + // The primary purpose of this method is to "tap into" a method chain, in + // order to perform operations on intermediate results within the chain. + function tap(obj, interceptor) { + interceptor(obj); + return obj; + } + + // Normalize a (deep) property `path` to array. + // Like `_.iteratee`, this function can be customized. + function toPath$1(path) { + return isArray(path) ? path : [path]; + } + _$1.toPath = toPath$1; + + // Internal wrapper for `_.toPath` to enable minification. + // Similar to `cb` for `_.iteratee`. + function toPath(path) { + return _$1.toPath(path); + } + + // Internal function to obtain a nested property in `obj` along `path`. + function deepGet(obj, path) { + var length = path.length; + for (var i = 0; i < length; i++) { + if (obj == null) return void 0; + obj = obj[path[i]]; + } + return length ? obj : void 0; + } + + // Get the value of the (deep) property on `path` from `object`. + // If any property in `path` does not exist or if the value is + // `undefined`, return `defaultValue` instead. + // The `path` is normalized through `_.toPath`. + function get(object, path, defaultValue) { + var value = deepGet(object, toPath(path)); + return isUndefined(value) ? defaultValue : value; + } + + // Shortcut function for checking if an object has a given property directly on + // itself (in other words, not on a prototype). Unlike the internal `has` + // function, this public version can also traverse nested properties. + function has(obj, path) { + path = toPath(path); + var length = path.length; + for (var i = 0; i < length; i++) { + var key = path[i]; + if (!has$1(obj, key)) return false; + obj = obj[key]; + } + return !!length; + } + + // Keep the identity function around for default iteratees. + function identity(value) { + return value; + } + + // Returns a predicate for checking whether an object has a given set of + // `key:value` pairs. + function matcher(attrs) { + attrs = extendOwn({}, attrs); + return function(obj) { + return isMatch(obj, attrs); + }; + } + + // Creates a function that, when passed an object, will traverse that object’s + // properties down the given `path`, specified as an array of keys or indices. + function property(path) { + path = toPath(path); + return function(obj) { + return deepGet(obj, path); + }; + } + + // Internal function that returns an efficient (for current engines) version + // of the passed-in callback, to be repeatedly applied in other Underscore + // functions. + function optimizeCb(func, context, argCount) { + if (context === void 0) return func; + switch (argCount == null ? 3 : argCount) { + case 1: return function(value) { + return func.call(context, value); + }; + // The 2-argument case is omitted because we’re not using it. + case 3: return function(value, index, collection) { + return func.call(context, value, index, collection); + }; + case 4: return function(accumulator, value, index, collection) { + return func.call(context, accumulator, value, index, collection); + }; + } + return function() { + return func.apply(context, arguments); + }; + } + + // An internal function to generate callbacks that can be applied to each + // element in a collection, returning the desired result — either `_.identity`, + // an arbitrary callback, a property matcher, or a property accessor. + function baseIteratee(value, context, argCount) { + if (value == null) return identity; + if (isFunction$1(value)) return optimizeCb(value, context, argCount); + if (isObject(value) && !isArray(value)) return matcher(value); + return property(value); + } + + // External wrapper for our callback generator. Users may customize + // `_.iteratee` if they want additional predicate/iteratee shorthand styles. + // This abstraction hides the internal-only `argCount` argument. + function iteratee(value, context) { + return baseIteratee(value, context, Infinity); + } + _$1.iteratee = iteratee; + + // The function we call internally to generate a callback. It invokes + // `_.iteratee` if overridden, otherwise `baseIteratee`. + function cb(value, context, argCount) { + if (_$1.iteratee !== iteratee) return _$1.iteratee(value, context); + return baseIteratee(value, context, argCount); + } + + // Returns the results of applying the `iteratee` to each element of `obj`. + // In contrast to `_.map` it returns an object. + function mapObject(obj, iteratee, context) { + iteratee = cb(iteratee, context); + var _keys = keys(obj), + length = _keys.length, + results = {}; + for (var index = 0; index < length; index++) { + var currentKey = _keys[index]; + results[currentKey] = iteratee(obj[currentKey], currentKey, obj); + } + return results; + } + + // Predicate-generating function. Often useful outside of Underscore. + function noop(){} + + // Generates a function for a given object that returns a given property. + function propertyOf(obj) { + if (obj == null) return noop; + return function(path) { + return get(obj, path); + }; + } + + // Run a function **n** times. + function times(n, iteratee, context) { + var accum = Array(Math.max(0, n)); + iteratee = optimizeCb(iteratee, context, 1); + for (var i = 0; i < n; i++) accum[i] = iteratee(i); + return accum; + } + + // Return a random integer between `min` and `max` (inclusive). + function random(min, max) { + if (max == null) { + max = min; + min = 0; + } + return min + Math.floor(Math.random() * (max - min + 1)); + } + + // A (possibly faster) way to get the current timestamp as an integer. + var now = Date.now || function() { + return new Date().getTime(); + }; + + // Internal helper to generate functions for escaping and unescaping strings + // to/from HTML interpolation. + function createEscaper(map) { + var escaper = function(match) { + return map[match]; + }; + // Regexes for identifying a key that needs to be escaped. + var source = '(?:' + keys(map).join('|') + ')'; + var testRegexp = RegExp(source); + var replaceRegexp = RegExp(source, 'g'); + return function(string) { + string = string == null ? '' : '' + string; + return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string; + }; + } + + // Internal list of HTML entities for escaping. + var escapeMap = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + '`': '`' + }; + + // Function for escaping strings to HTML interpolation. + var _escape = createEscaper(escapeMap); + + // Internal list of HTML entities for unescaping. + var unescapeMap = invert(escapeMap); + + // Function for unescaping strings from HTML interpolation. + var _unescape = createEscaper(unescapeMap); + + // By default, Underscore uses ERB-style template delimiters. Change the + // following template settings to use alternative delimiters. + var templateSettings = _$1.templateSettings = { + evaluate: /<%([\s\S]+?)%>/g, + interpolate: /<%=([\s\S]+?)%>/g, + escape: /<%-([\s\S]+?)%>/g + }; + + // When customizing `_.templateSettings`, if you don't want to define an + // interpolation, evaluation or escaping regex, we need one that is + // guaranteed not to match. + var noMatch = /(.)^/; + + // Certain characters need to be escaped so that they can be put into a + // string literal. + var escapes = { + "'": "'", + '\\': '\\', + '\r': 'r', + '\n': 'n', + '\u2028': 'u2028', + '\u2029': 'u2029' + }; + + var escapeRegExp = /\\|'|\r|\n|\u2028|\u2029/g; + + function escapeChar(match) { + return '\\' + escapes[match]; + } + + // In order to prevent third-party code injection through + // `_.templateSettings.variable`, we test it against the following regular + // expression. It is intentionally a bit more liberal than just matching valid + // identifiers, but still prevents possible loopholes through defaults or + // destructuring assignment. + var bareIdentifier = /^\s*(\w|\$)+\s*$/; + + // JavaScript micro-templating, similar to John Resig's implementation. + // Underscore templating handles arbitrary delimiters, preserves whitespace, + // and correctly escapes quotes within interpolated code. + // NB: `oldSettings` only exists for backwards compatibility. + function template(text, settings, oldSettings) { + if (!settings && oldSettings) settings = oldSettings; + settings = defaults({}, settings, _$1.templateSettings); + + // Combine delimiters into one regular expression via alternation. + var matcher = RegExp([ + (settings.escape || noMatch).source, + (settings.interpolate || noMatch).source, + (settings.evaluate || noMatch).source + ].join('|') + '|$', 'g'); + + // Compile the template source, escaping string literals appropriately. + var index = 0; + var source = "__p+='"; + text.replace(matcher, function(match, escape, interpolate, evaluate, offset) { + source += text.slice(index, offset).replace(escapeRegExp, escapeChar); + index = offset + match.length; + + if (escape) { + source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'"; + } else if (interpolate) { + source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'"; + } else if (evaluate) { + source += "';\n" + evaluate + "\n__p+='"; + } + + // Adobe VMs need the match returned to produce the correct offset. + return match; + }); + source += "';\n"; + + var argument = settings.variable; + if (argument) { + // Insure against third-party code injection. (CVE-2021-23358) + if (!bareIdentifier.test(argument)) throw new Error( + 'variable is not a bare identifier: ' + argument + ); + } else { + // If a variable is not specified, place data values in local scope. + source = 'with(obj||{}){\n' + source + '}\n'; + argument = 'obj'; + } + + source = "var __t,__p='',__j=Array.prototype.join," + + "print=function(){__p+=__j.call(arguments,'');};\n" + + source + 'return __p;\n'; + + var render; + try { + render = new Function(argument, '_', source); + } catch (e) { + e.source = source; + throw e; + } + + var template = function(data) { + return render.call(this, data, _$1); + }; + + // Provide the compiled source as a convenience for precompilation. + template.source = 'function(' + argument + '){\n' + source + '}'; + + return template; + } + + // Traverses the children of `obj` along `path`. If a child is a function, it + // is invoked with its parent as context. Returns the value of the final + // child, or `fallback` if any child is undefined. + function result(obj, path, fallback) { + path = toPath(path); + var length = path.length; + if (!length) { + return isFunction$1(fallback) ? fallback.call(obj) : fallback; + } + for (var i = 0; i < length; i++) { + var prop = obj == null ? void 0 : obj[path[i]]; + if (prop === void 0) { + prop = fallback; + i = length; // Ensure we don't continue iterating. + } + obj = isFunction$1(prop) ? prop.call(obj) : prop; + } + return obj; + } + + // Generate a unique integer id (unique within the entire client session). + // Useful for temporary DOM ids. + var idCounter = 0; + function uniqueId(prefix) { + var id = ++idCounter + ''; + return prefix ? prefix + id : id; + } + + // Start chaining a wrapped Underscore object. + function chain(obj) { + var instance = _$1(obj); + instance._chain = true; + return instance; + } + + // Internal function to execute `sourceFunc` bound to `context` with optional + // `args`. Determines whether to execute a function as a constructor or as a + // normal function. + function executeBound(sourceFunc, boundFunc, context, callingContext, args) { + if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args); + var self = baseCreate(sourceFunc.prototype); + var result = sourceFunc.apply(self, args); + if (isObject(result)) return result; + return self; + } + + // Partially apply a function by creating a version that has had some of its + // arguments pre-filled, without changing its dynamic `this` context. `_` acts + // as a placeholder by default, allowing any combination of arguments to be + // pre-filled. Set `_.partial.placeholder` for a custom placeholder argument. + var partial = restArguments(function(func, boundArgs) { + var placeholder = partial.placeholder; + var bound = function() { + var position = 0, length = boundArgs.length; + var args = Array(length); + for (var i = 0; i < length; i++) { + args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i]; + } + while (position < arguments.length) args.push(arguments[position++]); + return executeBound(func, bound, this, this, args); + }; + return bound; + }); + + partial.placeholder = _$1; + + // Create a function bound to a given object (assigning `this`, and arguments, + // optionally). + var bind = restArguments(function(func, context, args) { + if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function'); + var bound = restArguments(function(callArgs) { + return executeBound(func, bound, context, this, args.concat(callArgs)); + }); + return bound; + }); + + // Internal helper for collection methods to determine whether a collection + // should be iterated as an array or as an object. + // Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength + // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 + var isArrayLike = createSizePropertyCheck(getLength); + + // Internal implementation of a recursive `flatten` function. + function flatten$1(input, depth, strict, output) { + output = output || []; + if (!depth && depth !== 0) { + depth = Infinity; + } else if (depth <= 0) { + return output.concat(input); + } + var idx = output.length; + for (var i = 0, length = getLength(input); i < length; i++) { + var value = input[i]; + if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) { + // Flatten current level of array or arguments object. + if (depth > 1) { + flatten$1(value, depth - 1, strict, output); + idx = output.length; + } else { + var j = 0, len = value.length; + while (j < len) output[idx++] = value[j++]; + } + } else if (!strict) { + output[idx++] = value; + } + } + return output; + } + + // Bind a number of an object's methods to that object. Remaining arguments + // are the method names to be bound. Useful for ensuring that all callbacks + // defined on an object belong to it. + var bindAll = restArguments(function(obj, keys) { + keys = flatten$1(keys, false, false); + var index = keys.length; + if (index < 1) throw new Error('bindAll must be passed function names'); + while (index--) { + var key = keys[index]; + obj[key] = bind(obj[key], obj); + } + return obj; + }); + + // Memoize an expensive function by storing its results. + function memoize(func, hasher) { + var memoize = function(key) { + var cache = memoize.cache; + var address = '' + (hasher ? hasher.apply(this, arguments) : key); + if (!has$1(cache, address)) cache[address] = func.apply(this, arguments); + return cache[address]; + }; + memoize.cache = {}; + return memoize; + } + + // Delays a function for the given number of milliseconds, and then calls + // it with the arguments supplied. + var delay = restArguments(function(func, wait, args) { + return setTimeout(function() { + return func.apply(null, args); + }, wait); + }); + + // Defers a function, scheduling it to run after the current call stack has + // cleared. + var defer = partial(delay, _$1, 1); + + // Returns a function, that, when invoked, will only be triggered at most once + // during a given window of time. Normally, the throttled function will run + // as much as it can, without ever going more than once per `wait` duration; + // but if you'd like to disable the execution on the leading edge, pass + // `{leading: false}`. To disable execution on the trailing edge, ditto. + function throttle(func, wait, options) { + var timeout, context, args, result; + var previous = 0; + if (!options) options = {}; + + var later = function() { + previous = options.leading === false ? 0 : now(); + timeout = null; + result = func.apply(context, args); + if (!timeout) context = args = null; + }; + + var throttled = function() { + var _now = now(); + if (!previous && options.leading === false) previous = _now; + var remaining = wait - (_now - previous); + context = this; + args = arguments; + if (remaining <= 0 || remaining > wait) { + if (timeout) { + clearTimeout(timeout); + timeout = null; + } + previous = _now; + result = func.apply(context, args); + if (!timeout) context = args = null; + } else if (!timeout && options.trailing !== false) { + timeout = setTimeout(later, remaining); + } + return result; + }; + + throttled.cancel = function() { + clearTimeout(timeout); + previous = 0; + timeout = context = args = null; + }; + + return throttled; + } + + // When a sequence of calls of the returned function ends, the argument + // function is triggered. The end of a sequence is defined by the `wait` + // parameter. If `immediate` is passed, the argument function will be + // triggered at the beginning of the sequence instead of at the end. + function debounce(func, wait, immediate) { + var timeout, previous, args, result, context; + + var later = function() { + var passed = now() - previous; + if (wait > passed) { + timeout = setTimeout(later, wait - passed); + } else { + timeout = null; + if (!immediate) result = func.apply(context, args); + // This check is needed because `func` can recursively invoke `debounced`. + if (!timeout) args = context = null; + } + }; + + var debounced = restArguments(function(_args) { + context = this; + args = _args; + previous = now(); + if (!timeout) { + timeout = setTimeout(later, wait); + if (immediate) result = func.apply(context, args); + } + return result; + }); + + debounced.cancel = function() { + clearTimeout(timeout); + timeout = args = context = null; + }; + + return debounced; + } + + // Returns the first function passed as an argument to the second, + // allowing you to adjust arguments, run code before and after, and + // conditionally execute the original function. + function wrap(func, wrapper) { + return partial(wrapper, func); + } + + // Returns a negated version of the passed-in predicate. + function negate(predicate) { + return function() { + return !predicate.apply(this, arguments); + }; + } + + // Returns a function that is the composition of a list of functions, each + // consuming the return value of the function that follows. + function compose() { + var args = arguments; + var start = args.length - 1; + return function() { + var i = start; + var result = args[start].apply(this, arguments); + while (i--) result = args[i].call(this, result); + return result; + }; + } + + // Returns a function that will only be executed on and after the Nth call. + function after(times, func) { + return function() { + if (--times < 1) { + return func.apply(this, arguments); + } + }; + } + + // Returns a function that will only be executed up to (but not including) the + // Nth call. + function before(times, func) { + var memo; + return function() { + if (--times > 0) { + memo = func.apply(this, arguments); + } + if (times <= 1) func = null; + return memo; + }; + } + + // Returns a function that will be executed at most one time, no matter how + // often you call it. Useful for lazy initialization. + var once = partial(before, 2); + + // Returns the first key on an object that passes a truth test. + function findKey(obj, predicate, context) { + predicate = cb(predicate, context); + var _keys = keys(obj), key; + for (var i = 0, length = _keys.length; i < length; i++) { + key = _keys[i]; + if (predicate(obj[key], key, obj)) return key; + } + } + + // Internal function to generate `_.findIndex` and `_.findLastIndex`. + function createPredicateIndexFinder(dir) { + return function(array, predicate, context) { + predicate = cb(predicate, context); + var length = getLength(array); + var index = dir > 0 ? 0 : length - 1; + for (; index >= 0 && index < length; index += dir) { + if (predicate(array[index], index, array)) return index; + } + return -1; + }; + } + + // Returns the first index on an array-like that passes a truth test. + var findIndex = createPredicateIndexFinder(1); + + // Returns the last index on an array-like that passes a truth test. + var findLastIndex = createPredicateIndexFinder(-1); + + // Use a comparator function to figure out the smallest index at which + // an object should be inserted so as to maintain order. Uses binary search. + function sortedIndex(array, obj, iteratee, context) { + iteratee = cb(iteratee, context, 1); + var value = iteratee(obj); + var low = 0, high = getLength(array); + while (low < high) { + var mid = Math.floor((low + high) / 2); + if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; + } + return low; + } + + // Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions. + function createIndexFinder(dir, predicateFind, sortedIndex) { + return function(array, item, idx) { + var i = 0, length = getLength(array); + if (typeof idx == 'number') { + if (dir > 0) { + i = idx >= 0 ? idx : Math.max(idx + length, i); + } else { + length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1; + } + } else if (sortedIndex && idx && length) { + idx = sortedIndex(array, item); + return array[idx] === item ? idx : -1; + } + if (item !== item) { + idx = predicateFind(slice.call(array, i, length), isNaN$1); + return idx >= 0 ? idx + i : -1; + } + for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { + if (array[idx] === item) return idx; + } + return -1; + }; + } + + // Return the position of the first occurrence of an item in an array, + // or -1 if the item is not included in the array. + // If the array is large and already in sort order, pass `true` + // for **isSorted** to use binary search. + var indexOf = createIndexFinder(1, findIndex, sortedIndex); + + // Return the position of the last occurrence of an item in an array, + // or -1 if the item is not included in the array. + var lastIndexOf = createIndexFinder(-1, findLastIndex); + + // Return the first value which passes a truth test. + function find(obj, predicate, context) { + var keyFinder = isArrayLike(obj) ? findIndex : findKey; + var key = keyFinder(obj, predicate, context); + if (key !== void 0 && key !== -1) return obj[key]; + } + + // Convenience version of a common use case of `_.find`: getting the first + // object containing specific `key:value` pairs. + function findWhere(obj, attrs) { + return find(obj, matcher(attrs)); + } + + // The cornerstone for collection functions, an `each` + // implementation, aka `forEach`. + // Handles raw objects in addition to array-likes. Treats all + // sparse array-likes as if they were dense. + function each(obj, iteratee, context) { + iteratee = optimizeCb(iteratee, context); + var i, length; + if (isArrayLike(obj)) { + for (i = 0, length = obj.length; i < length; i++) { + iteratee(obj[i], i, obj); + } + } else { + var _keys = keys(obj); + for (i = 0, length = _keys.length; i < length; i++) { + iteratee(obj[_keys[i]], _keys[i], obj); + } + } + return obj; + } + + // Return the results of applying the iteratee to each element. + function map(obj, iteratee, context) { + iteratee = cb(iteratee, context); + var _keys = !isArrayLike(obj) && keys(obj), + length = (_keys || obj).length, + results = Array(length); + for (var index = 0; index < length; index++) { + var currentKey = _keys ? _keys[index] : index; + results[index] = iteratee(obj[currentKey], currentKey, obj); + } + return results; + } + + // Internal helper to create a reducing function, iterating left or right. + function createReduce(dir) { + // Wrap code that reassigns argument variables in a separate function than + // the one that accesses `arguments.length` to avoid a perf hit. (#1991) + var reducer = function(obj, iteratee, memo, initial) { + var _keys = !isArrayLike(obj) && keys(obj), + length = (_keys || obj).length, + index = dir > 0 ? 0 : length - 1; + if (!initial) { + memo = obj[_keys ? _keys[index] : index]; + index += dir; + } + for (; index >= 0 && index < length; index += dir) { + var currentKey = _keys ? _keys[index] : index; + memo = iteratee(memo, obj[currentKey], currentKey, obj); + } + return memo; + }; + + return function(obj, iteratee, memo, context) { + var initial = arguments.length >= 3; + return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial); + }; + } + + // **Reduce** builds up a single result from a list of values, aka `inject`, + // or `foldl`. + var reduce = createReduce(1); + + // The right-associative version of reduce, also known as `foldr`. + var reduceRight = createReduce(-1); + + // Return all the elements that pass a truth test. + function filter(obj, predicate, context) { + var results = []; + predicate = cb(predicate, context); + each(obj, function(value, index, list) { + if (predicate(value, index, list)) results.push(value); + }); + return results; + } + + // Return all the elements for which a truth test fails. + function reject(obj, predicate, context) { + return filter(obj, negate(cb(predicate)), context); + } + + // Determine whether all of the elements pass a truth test. + function every(obj, predicate, context) { + predicate = cb(predicate, context); + var _keys = !isArrayLike(obj) && keys(obj), + length = (_keys || obj).length; + for (var index = 0; index < length; index++) { + var currentKey = _keys ? _keys[index] : index; + if (!predicate(obj[currentKey], currentKey, obj)) return false; + } + return true; + } + + // Determine if at least one element in the object passes a truth test. + function some(obj, predicate, context) { + predicate = cb(predicate, context); + var _keys = !isArrayLike(obj) && keys(obj), + length = (_keys || obj).length; + for (var index = 0; index < length; index++) { + var currentKey = _keys ? _keys[index] : index; + if (predicate(obj[currentKey], currentKey, obj)) return true; + } + return false; + } + + // Determine if the array or object contains a given item (using `===`). + function contains(obj, item, fromIndex, guard) { + if (!isArrayLike(obj)) obj = values(obj); + if (typeof fromIndex != 'number' || guard) fromIndex = 0; + return indexOf(obj, item, fromIndex) >= 0; + } + + // Invoke a method (with arguments) on every item in a collection. + var invoke = restArguments(function(obj, path, args) { + var contextPath, func; + if (isFunction$1(path)) { + func = path; + } else { + path = toPath(path); + contextPath = path.slice(0, -1); + path = path[path.length - 1]; + } + return map(obj, function(context) { + var method = func; + if (!method) { + if (contextPath && contextPath.length) { + context = deepGet(context, contextPath); + } + if (context == null) return void 0; + method = context[path]; + } + return method == null ? method : method.apply(context, args); + }); + }); + + // Convenience version of a common use case of `_.map`: fetching a property. + function pluck(obj, key) { + return map(obj, property(key)); + } + + // Convenience version of a common use case of `_.filter`: selecting only + // objects containing specific `key:value` pairs. + function where(obj, attrs) { + return filter(obj, matcher(attrs)); + } + + // Return the maximum element (or element-based computation). + function max(obj, iteratee, context) { + var result = -Infinity, lastComputed = -Infinity, + value, computed; + if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) { + obj = isArrayLike(obj) ? obj : values(obj); + for (var i = 0, length = obj.length; i < length; i++) { + value = obj[i]; + if (value != null && value > result) { + result = value; + } + } + } else { + iteratee = cb(iteratee, context); + each(obj, function(v, index, list) { + computed = iteratee(v, index, list); + if (computed > lastComputed || computed === -Infinity && result === -Infinity) { + result = v; + lastComputed = computed; + } + }); + } + return result; + } + + // Return the minimum element (or element-based computation). + function min(obj, iteratee, context) { + var result = Infinity, lastComputed = Infinity, + value, computed; + if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) { + obj = isArrayLike(obj) ? obj : values(obj); + for (var i = 0, length = obj.length; i < length; i++) { + value = obj[i]; + if (value != null && value < result) { + result = value; + } + } + } else { + iteratee = cb(iteratee, context); + each(obj, function(v, index, list) { + computed = iteratee(v, index, list); + if (computed < lastComputed || computed === Infinity && result === Infinity) { + result = v; + lastComputed = computed; + } + }); + } + return result; + } + + // Sample **n** random values from a collection using the modern version of the + // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle). + // If **n** is not specified, returns a single random element. + // The internal `guard` argument allows it to work with `_.map`. + function sample(obj, n, guard) { + if (n == null || guard) { + if (!isArrayLike(obj)) obj = values(obj); + return obj[random(obj.length - 1)]; + } + var sample = isArrayLike(obj) ? clone(obj) : values(obj); + var length = getLength(sample); + n = Math.max(Math.min(n, length), 0); + var last = length - 1; + for (var index = 0; index < n; index++) { + var rand = random(index, last); + var temp = sample[index]; + sample[index] = sample[rand]; + sample[rand] = temp; + } + return sample.slice(0, n); + } + + // Shuffle a collection. + function shuffle(obj) { + return sample(obj, Infinity); + } + + // Sort the object's values by a criterion produced by an iteratee. + function sortBy(obj, iteratee, context) { + var index = 0; + iteratee = cb(iteratee, context); + return pluck(map(obj, function(value, key, list) { + return { + value: value, + index: index++, + criteria: iteratee(value, key, list) + }; + }).sort(function(left, right) { + var a = left.criteria; + var b = right.criteria; + if (a !== b) { + if (a > b || a === void 0) return 1; + if (a < b || b === void 0) return -1; + } + return left.index - right.index; + }), 'value'); + } + + // An internal function used for aggregate "group by" operations. + function group(behavior, partition) { + return function(obj, iteratee, context) { + var result = partition ? [[], []] : {}; + iteratee = cb(iteratee, context); + each(obj, function(value, index) { + var key = iteratee(value, index, obj); + behavior(result, value, key); + }); + return result; + }; + } + + // Groups the object's values by a criterion. Pass either a string attribute + // to group by, or a function that returns the criterion. + var groupBy = group(function(result, value, key) { + if (has$1(result, key)) result[key].push(value); else result[key] = [value]; + }); + + // Indexes the object's values by a criterion, similar to `_.groupBy`, but for + // when you know that your index values will be unique. + var indexBy = group(function(result, value, key) { + result[key] = value; + }); + + // Counts instances of an object that group by a certain criterion. Pass + // either a string attribute to count by, or a function that returns the + // criterion. + var countBy = group(function(result, value, key) { + if (has$1(result, key)) result[key]++; else result[key] = 1; + }); + + // Split a collection into two arrays: one whose elements all pass the given + // truth test, and one whose elements all do not pass the truth test. + var partition = group(function(result, value, pass) { + result[pass ? 0 : 1].push(value); + }, true); + + // Safely create a real, live array from anything iterable. + var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g; + function toArray(obj) { + if (!obj) return []; + if (isArray(obj)) return slice.call(obj); + if (isString(obj)) { + // Keep surrogate pair characters together. + return obj.match(reStrSymbol); + } + if (isArrayLike(obj)) return map(obj, identity); + return values(obj); + } + + // Return the number of elements in a collection. + function size(obj) { + if (obj == null) return 0; + return isArrayLike(obj) ? obj.length : keys(obj).length; + } + + // Internal `_.pick` helper function to determine whether `key` is an enumerable + // property name of `obj`. + function keyInObj(value, key, obj) { + return key in obj; + } + + // Return a copy of the object only containing the allowed properties. + var pick = restArguments(function(obj, keys) { + var result = {}, iteratee = keys[0]; + if (obj == null) return result; + if (isFunction$1(iteratee)) { + if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]); + keys = allKeys(obj); + } else { + iteratee = keyInObj; + keys = flatten$1(keys, false, false); + obj = Object(obj); + } + for (var i = 0, length = keys.length; i < length; i++) { + var key = keys[i]; + var value = obj[key]; + if (iteratee(value, key, obj)) result[key] = value; + } + return result; + }); + + // Return a copy of the object without the disallowed properties. + var omit = restArguments(function(obj, keys) { + var iteratee = keys[0], context; + if (isFunction$1(iteratee)) { + iteratee = negate(iteratee); + if (keys.length > 1) context = keys[1]; + } else { + keys = map(flatten$1(keys, false, false), String); + iteratee = function(value, key) { + return !contains(keys, key); + }; + } + return pick(obj, iteratee, context); + }); + + // Returns everything but the last entry of the array. Especially useful on + // the arguments object. Passing **n** will return all the values in + // the array, excluding the last N. + function initial(array, n, guard) { + return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); + } + + // Get the first element of an array. Passing **n** will return the first N + // values in the array. The **guard** check allows it to work with `_.map`. + function first(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[0]; + return initial(array, array.length - n); + } + + // Returns everything but the first entry of the `array`. Especially useful on + // the `arguments` object. Passing an **n** will return the rest N values in the + // `array`. + function rest(array, n, guard) { + return slice.call(array, n == null || guard ? 1 : n); + } + + // Get the last element of an array. Passing **n** will return the last N + // values in the array. + function last(array, n, guard) { + if (array == null || array.length < 1) return n == null || guard ? void 0 : []; + if (n == null || guard) return array[array.length - 1]; + return rest(array, Math.max(0, array.length - n)); + } + + // Trim out all falsy values from an array. + function compact(array) { + return filter(array, Boolean); + } + + // Flatten out an array, either recursively (by default), or up to `depth`. + // Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively. + function flatten(array, depth) { + return flatten$1(array, depth, false); + } + + // Take the difference between one array and a number of other arrays. + // Only the elements present in just the first array will remain. + var difference = restArguments(function(array, rest) { + rest = flatten$1(rest, true, true); + return filter(array, function(value){ + return !contains(rest, value); + }); + }); + + // Return a version of the array that does not contain the specified value(s). + var without = restArguments(function(array, otherArrays) { + return difference(array, otherArrays); + }); + + // Produce a duplicate-free version of the array. If the array has already + // been sorted, you have the option of using a faster algorithm. + // The faster algorithm will not work with an iteratee if the iteratee + // is not a one-to-one function, so providing an iteratee will disable + // the faster algorithm. + function uniq(array, isSorted, iteratee, context) { + if (!isBoolean(isSorted)) { + context = iteratee; + iteratee = isSorted; + isSorted = false; + } + if (iteratee != null) iteratee = cb(iteratee, context); + var result = []; + var seen = []; + for (var i = 0, length = getLength(array); i < length; i++) { + var value = array[i], + computed = iteratee ? iteratee(value, i, array) : value; + if (isSorted && !iteratee) { + if (!i || seen !== computed) result.push(value); + seen = computed; + } else if (iteratee) { + if (!contains(seen, computed)) { + seen.push(computed); + result.push(value); + } + } else if (!contains(result, value)) { + result.push(value); + } + } + return result; + } + + // Produce an array that contains the union: each distinct element from all of + // the passed-in arrays. + var union = restArguments(function(arrays) { + return uniq(flatten$1(arrays, true, true)); + }); + + // Produce an array that contains every item shared between all the + // passed-in arrays. + function intersection(array) { + var result = []; + var argsLength = arguments.length; + for (var i = 0, length = getLength(array); i < length; i++) { + var item = array[i]; + if (contains(result, item)) continue; + var j; + for (j = 1; j < argsLength; j++) { + if (!contains(arguments[j], item)) break; + } + if (j === argsLength) result.push(item); + } + return result; + } + + // Complement of zip. Unzip accepts an array of arrays and groups + // each array's elements on shared indices. + function unzip(array) { + var length = array && max(array, getLength).length || 0; + var result = Array(length); + + for (var index = 0; index < length; index++) { + result[index] = pluck(array, index); + } + return result; + } + + // Zip together multiple lists into a single array -- elements that share + // an index go together. + var zip = restArguments(unzip); + + // Converts lists into objects. Pass either a single array of `[key, value]` + // pairs, or two parallel arrays of the same length -- one of keys, and one of + // the corresponding values. Passing by pairs is the reverse of `_.pairs`. + function object(list, values) { + var result = {}; + for (var i = 0, length = getLength(list); i < length; i++) { + if (values) { + result[list[i]] = values[i]; + } else { + result[list[i][0]] = list[i][1]; + } + } + return result; + } + + // Generate an integer Array containing an arithmetic progression. A port of + // the native Python `range()` function. See + // [the Python documentation](https://docs.python.org/library/functions.html#range). + function range(start, stop, step) { + if (stop == null) { + stop = start || 0; + start = 0; + } + if (!step) { + step = stop < start ? -1 : 1; + } + + var length = Math.max(Math.ceil((stop - start) / step), 0); + var range = Array(length); + + for (var idx = 0; idx < length; idx++, start += step) { + range[idx] = start; + } + + return range; + } + + // Chunk a single array into multiple arrays, each containing `count` or fewer + // items. + function chunk(array, count) { + if (count == null || count < 1) return []; + var result = []; + var i = 0, length = array.length; + while (i < length) { + result.push(slice.call(array, i, i += count)); + } + return result; + } + + // Helper function to continue chaining intermediate results. + function chainResult(instance, obj) { + return instance._chain ? _$1(obj).chain() : obj; + } + + // Add your own custom functions to the Underscore object. + function mixin(obj) { + each(functions(obj), function(name) { + var func = _$1[name] = obj[name]; + _$1.prototype[name] = function() { + var args = [this._wrapped]; + push.apply(args, arguments); + return chainResult(this, func.apply(_$1, args)); + }; + }); + return _$1; + } + + // Add all mutator `Array` functions to the wrapper. + each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { + var method = ArrayProto[name]; + _$1.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) { + method.apply(obj, arguments); + if ((name === 'shift' || name === 'splice') && obj.length === 0) { + delete obj[0]; + } + } + return chainResult(this, obj); + }; + }); + + // Add all accessor `Array` functions to the wrapper. + each(['concat', 'join', 'slice'], function(name) { + var method = ArrayProto[name]; + _$1.prototype[name] = function() { + var obj = this._wrapped; + if (obj != null) obj = method.apply(obj, arguments); + return chainResult(this, obj); + }; + }); + + // Named Exports + + var allExports = { + __proto__: null, + VERSION: VERSION, + restArguments: restArguments, + isObject: isObject, + isNull: isNull, + isUndefined: isUndefined, + isBoolean: isBoolean, + isElement: isElement, + isString: isString, + isNumber: isNumber, + isDate: isDate, + isRegExp: isRegExp, + isError: isError, + isSymbol: isSymbol, + isArrayBuffer: isArrayBuffer, + isDataView: isDataView$1, + isArray: isArray, + isFunction: isFunction$1, + isArguments: isArguments$1, + isFinite: isFinite$1, + isNaN: isNaN$1, + isTypedArray: isTypedArray$1, + isEmpty: isEmpty, + isMatch: isMatch, + isEqual: isEqual, + isMap: isMap, + isWeakMap: isWeakMap, + isSet: isSet, + isWeakSet: isWeakSet, + keys: keys, + allKeys: allKeys, + values: values, + pairs: pairs, + invert: invert, + functions: functions, + methods: functions, + extend: extend, + extendOwn: extendOwn, + assign: extendOwn, + defaults: defaults, + create: create, + clone: clone, + tap: tap, + get: get, + has: has, + mapObject: mapObject, + identity: identity, + constant: constant, + noop: noop, + toPath: toPath$1, + property: property, + propertyOf: propertyOf, + matcher: matcher, + matches: matcher, + times: times, + random: random, + now: now, + escape: _escape, + unescape: _unescape, + templateSettings: templateSettings, + template: template, + result: result, + uniqueId: uniqueId, + chain: chain, + iteratee: iteratee, + partial: partial, + bind: bind, + bindAll: bindAll, + memoize: memoize, + delay: delay, + defer: defer, + throttle: throttle, + debounce: debounce, + wrap: wrap, + negate: negate, + compose: compose, + after: after, + before: before, + once: once, + findKey: findKey, + findIndex: findIndex, + findLastIndex: findLastIndex, + sortedIndex: sortedIndex, + indexOf: indexOf, + lastIndexOf: lastIndexOf, + find: find, + detect: find, + findWhere: findWhere, + each: each, + forEach: each, + map: map, + collect: map, + reduce: reduce, + foldl: reduce, + inject: reduce, + reduceRight: reduceRight, + foldr: reduceRight, + filter: filter, + select: filter, + reject: reject, + every: every, + all: every, + some: some, + any: some, + contains: contains, + includes: contains, + include: contains, + invoke: invoke, + pluck: pluck, + where: where, + max: max, + min: min, + shuffle: shuffle, + sample: sample, + sortBy: sortBy, + groupBy: groupBy, + indexBy: indexBy, + countBy: countBy, + partition: partition, + toArray: toArray, + size: size, + pick: pick, + omit: omit, + first: first, + head: first, + take: first, + initial: initial, + last: last, + rest: rest, + tail: rest, + drop: rest, + compact: compact, + flatten: flatten, + without: without, + uniq: uniq, + unique: uniq, + union: union, + intersection: intersection, + difference: difference, + unzip: unzip, + transpose: unzip, + zip: zip, + object: object, + range: range, + chunk: chunk, + mixin: mixin, + 'default': _$1 + }; + + // Default Export + + // Add all of the Underscore functions to the wrapper object. + var _ = mixin(allExports); + // Legacy Node.js API. + _._ = _; + + return _; + +}))); +//# sourceMappingURL=underscore-umd.js.map diff --git a/docs/_static/underscore.js b/docs/_static/underscore.js index 166240ef2..cf177d428 100644 --- a/docs/_static/underscore.js +++ b/docs/_static/underscore.js @@ -1,6 +1,6 @@ -!function(n,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r():"function"==typeof define&&define.amd?define("underscore",r):(n=n||self,function(){var t=n._,e=n._=r();e.noConflict=function(){return n._=t,e}}())}(this,(function(){ -// Underscore.js 1.12.0 +!function(n,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r():"function"==typeof define&&define.amd?define("underscore",r):(n="undefined"!=typeof globalThis?globalThis:n||self,function(){var t=n._,e=n._=r();e.noConflict=function(){return n._=t,e}}())}(this,(function(){ +// Underscore.js 1.13.1 // https://underscorejs.org -// (c) 2009-2020 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors +// (c) 2009-2021 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors // Underscore may be freely distributed under the MIT license. -var n="1.12.0",r="object"==typeof self&&self.self===self&&self||"object"==typeof global&&global.global===global&&global||Function("return this")()||{},t=Array.prototype,e=Object.prototype,u="undefined"!=typeof Symbol?Symbol.prototype:null,o=t.push,i=t.slice,a=e.toString,f=e.hasOwnProperty,c="undefined"!=typeof ArrayBuffer,l="undefined"!=typeof DataView,s=Array.isArray,p=Object.keys,v=Object.create,h=c&&ArrayBuffer.isView,y=isNaN,g=isFinite,d=!{toString:null}.propertyIsEnumerable("toString"),b=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],m=Math.pow(2,53)-1;function j(n,r){return r=null==r?n.length-1:+r,function(){for(var t=Math.max(arguments.length-r,0),e=Array(t),u=0;u=0&&t<=m}}function $(n){return function(r){return null==r?void 0:r[n]}}var G=$("byteLength"),H=J(G),Q=/\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/;var X=c?function(n){return h?h(n)&&!q(n):H(n)&&Q.test(a.call(n))}:K(!1),Y=$("length");function Z(n,r){r=function(n){for(var r={},t=n.length,e=0;e":">",'"':""","'":"'","`":"`"},Kn=Ln(Cn),Jn=Ln(_n(Cn)),$n=tn.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g},Gn=/(.)^/,Hn={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},Qn=/\\|'|\r|\n|\u2028|\u2029/g;function Xn(n){return"\\"+Hn[n]}var Yn=0;function Zn(n,r,t,e,u){if(!(e instanceof r))return n.apply(t,u);var o=Mn(n.prototype),i=n.apply(o,u);return _(i)?i:o}var nr=j((function(n,r){var t=nr.placeholder,e=function(){for(var u=0,o=r.length,i=Array(o),a=0;a1)er(a,r-1,t,e),u=e.length;else for(var f=0,c=a.length;f0&&(t=r.apply(this,arguments)),n<=1&&(r=null),t}}var cr=nr(fr,2);function lr(n,r,t){r=qn(r,t);for(var e,u=nn(n),o=0,i=u.length;o0?0:u-1;o>=0&&o0?a=o>=0?o:Math.max(o+f,a):f=o>=0?Math.min(o+1,f):o+f+1;else if(t&&o&&f)return e[o=t(e,u)]===u?o:-1;if(u!=u)return(o=r(i.call(e,a,f),C))>=0?o+a:-1;for(o=n>0?a:f-1;o>=0&&o0?0:i-1;for(u||(e=r[o?o[a]:a],a+=n);a>=0&&a=3;return r(n,Fn(t,u,4),e,o)}}var wr=_r(1),Ar=_r(-1);function xr(n,r,t){var e=[];return r=qn(r,t),mr(n,(function(n,t,u){r(n,t,u)&&e.push(n)})),e}function Sr(n,r,t){r=qn(r,t);for(var e=!tr(n)&&nn(n),u=(e||n).length,o=0;o=0}var Er=j((function(n,r,t){var e,u;return D(r)?u=r:(r=Nn(r),e=r.slice(0,-1),r=r[r.length-1]),jr(n,(function(n){var o=u;if(!o){if(e&&e.length&&(n=In(n,e)),null==n)return;o=n[r]}return null==o?o:o.apply(n,t)}))}));function Br(n,r){return jr(n,Rn(r))}function Nr(n,r,t){var e,u,o=-1/0,i=-1/0;if(null==r||"number"==typeof r&&"object"!=typeof n[0]&&null!=n)for(var a=0,f=(n=tr(n)?n:jn(n)).length;ao&&(o=e);else r=qn(r,t),mr(n,(function(n,t,e){((u=r(n,t,e))>i||u===-1/0&&o===-1/0)&&(o=n,i=u)}));return o}function Ir(n,r,t){if(null==r||t)return tr(n)||(n=jn(n)),n[Wn(n.length-1)];var e=tr(n)?En(n):jn(n),u=Y(e);r=Math.max(Math.min(r,u),0);for(var o=u-1,i=0;i1&&(e=Fn(e,r[1])),r=an(n)):(e=Pr,r=er(r,!1,!1),n=Object(n));for(var u=0,o=r.length;u1&&(t=r[1])):(r=jr(er(r,!1,!1),String),e=function(n,t){return!Mr(r,t)}),qr(n,e,t)}));function Wr(n,r,t){return i.call(n,0,Math.max(0,n.length-(null==r||t?1:r)))}function zr(n,r,t){return null==n||n.length<1?null==r||t?void 0:[]:null==r||t?n[0]:Wr(n,n.length-r)}function Lr(n,r,t){return i.call(n,null==r||t?1:r)}var Cr=j((function(n,r){return r=er(r,!0,!0),xr(n,(function(n){return!Mr(r,n)}))})),Kr=j((function(n,r){return Cr(n,r)}));function Jr(n,r,t,e){A(r)||(e=t,t=r,r=!1),null!=t&&(t=qn(t,e));for(var u=[],o=[],i=0,a=Y(n);ir?(e&&(clearTimeout(e),e=null),a=c,i=n.apply(u,o),e||(u=o=null)):e||!1===t.trailing||(e=setTimeout(f,l)),i};return c.cancel=function(){clearTimeout(e),a=0,e=u=o=null},c},debounce:function(n,r,t){var e,u,o=function(r,t){e=null,t&&(u=n.apply(r,t))},i=j((function(i){if(e&&clearTimeout(e),t){var a=!e;e=setTimeout(o,r),a&&(u=n.apply(this,i))}else e=or(o,r,this,i);return u}));return i.cancel=function(){clearTimeout(e),e=null},i},wrap:function(n,r){return nr(r,n)},negate:ar,compose:function(){var n=arguments,r=n.length-1;return function(){for(var t=r,e=n[r].apply(this,arguments);t--;)e=n[t].call(this,e);return e}},after:function(n,r){return function(){if(--n<1)return r.apply(this,arguments)}},before:fr,once:cr,findKey:lr,findIndex:pr,findLastIndex:vr,sortedIndex:hr,indexOf:gr,lastIndexOf:dr,find:br,detect:br,findWhere:function(n,r){return br(n,Dn(r))},each:mr,forEach:mr,map:jr,collect:jr,reduce:wr,foldl:wr,inject:wr,reduceRight:Ar,foldr:Ar,filter:xr,select:xr,reject:function(n,r,t){return xr(n,ar(qn(r)),t)},every:Sr,all:Sr,some:Or,any:Or,contains:Mr,includes:Mr,include:Mr,invoke:Er,pluck:Br,where:function(n,r){return xr(n,Dn(r))},max:Nr,min:function(n,r,t){var e,u,o=1/0,i=1/0;if(null==r||"number"==typeof r&&"object"!=typeof n[0]&&null!=n)for(var a=0,f=(n=tr(n)?n:jn(n)).length;ae||void 0===t)return 1;if(t=0&&t<=m}}function J(n){return function(r){return null==r?void 0:r[n]}}var G=J("byteLength"),H=K(G),Q=/\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/;var X=c?function(n){return h?h(n)&&!q(n):H(n)&&Q.test(a.call(n))}:C(!1),Y=J("length");function Z(n,r){r=function(n){for(var r={},t=n.length,e=0;e":">",'"':""","'":"'","`":"`"},Cn=Ln($n),Kn=Ln(_n($n)),Jn=tn.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g},Gn=/(.)^/,Hn={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},Qn=/\\|'|\r|\n|\u2028|\u2029/g;function Xn(n){return"\\"+Hn[n]}var Yn=/^\s*(\w|\$)+\s*$/;var Zn=0;function nr(n,r,t,e,u){if(!(e instanceof r))return n.apply(t,u);var o=Mn(n.prototype),i=n.apply(o,u);return _(i)?i:o}var rr=j((function(n,r){var t=rr.placeholder,e=function(){for(var u=0,o=r.length,i=Array(o),a=0;a1)ur(a,r-1,t,e),u=e.length;else for(var f=0,c=a.length;f0&&(t=r.apply(this,arguments)),n<=1&&(r=null),t}}var lr=rr(cr,2);function sr(n,r,t){r=qn(r,t);for(var e,u=nn(n),o=0,i=u.length;o0?0:u-1;o>=0&&o0?a=o>=0?o:Math.max(o+f,a):f=o>=0?Math.min(o+1,f):o+f+1;else if(t&&o&&f)return e[o=t(e,u)]===u?o:-1;if(u!=u)return(o=r(i.call(e,a,f),$))>=0?o+a:-1;for(o=n>0?a:f-1;o>=0&&o0?0:i-1;for(u||(e=r[o?o[a]:a],a+=n);a>=0&&a=3;return r(n,Fn(t,u,4),e,o)}}var Ar=wr(1),xr=wr(-1);function Sr(n,r,t){var e=[];return r=qn(r,t),jr(n,(function(n,t,u){r(n,t,u)&&e.push(n)})),e}function Or(n,r,t){r=qn(r,t);for(var e=!er(n)&&nn(n),u=(e||n).length,o=0;o=0}var Br=j((function(n,r,t){var e,u;return D(r)?u=r:(r=Nn(r),e=r.slice(0,-1),r=r[r.length-1]),_r(n,(function(n){var o=u;if(!o){if(e&&e.length&&(n=In(n,e)),null==n)return;o=n[r]}return null==o?o:o.apply(n,t)}))}));function Nr(n,r){return _r(n,Rn(r))}function Ir(n,r,t){var e,u,o=-1/0,i=-1/0;if(null==r||"number"==typeof r&&"object"!=typeof n[0]&&null!=n)for(var a=0,f=(n=er(n)?n:jn(n)).length;ao&&(o=e);else r=qn(r,t),jr(n,(function(n,t,e){((u=r(n,t,e))>i||u===-1/0&&o===-1/0)&&(o=n,i=u)}));return o}function Tr(n,r,t){if(null==r||t)return er(n)||(n=jn(n)),n[Wn(n.length-1)];var e=er(n)?En(n):jn(n),u=Y(e);r=Math.max(Math.min(r,u),0);for(var o=u-1,i=0;i1&&(e=Fn(e,r[1])),r=an(n)):(e=qr,r=ur(r,!1,!1),n=Object(n));for(var u=0,o=r.length;u1&&(t=r[1])):(r=_r(ur(r,!1,!1),String),e=function(n,t){return!Er(r,t)}),Ur(n,e,t)}));function zr(n,r,t){return i.call(n,0,Math.max(0,n.length-(null==r||t?1:r)))}function Lr(n,r,t){return null==n||n.length<1?null==r||t?void 0:[]:null==r||t?n[0]:zr(n,n.length-r)}function $r(n,r,t){return i.call(n,null==r||t?1:r)}var Cr=j((function(n,r){return r=ur(r,!0,!0),Sr(n,(function(n){return!Er(r,n)}))})),Kr=j((function(n,r){return Cr(n,r)}));function Jr(n,r,t,e){A(r)||(e=t,t=r,r=!1),null!=t&&(t=qn(t,e));for(var u=[],o=[],i=0,a=Y(n);ir?(e&&(clearTimeout(e),e=null),a=c,i=n.apply(u,o),e||(u=o=null)):e||!1===t.trailing||(e=setTimeout(f,l)),i};return c.cancel=function(){clearTimeout(e),a=0,e=u=o=null},c},debounce:function(n,r,t){var e,u,o,i,a,f=function(){var c=zn()-u;r>c?e=setTimeout(f,r-c):(e=null,t||(i=n.apply(a,o)),e||(o=a=null))},c=j((function(c){return a=this,o=c,u=zn(),e||(e=setTimeout(f,r),t&&(i=n.apply(a,o))),i}));return c.cancel=function(){clearTimeout(e),e=o=a=null},c},wrap:function(n,r){return rr(r,n)},negate:fr,compose:function(){var n=arguments,r=n.length-1;return function(){for(var t=r,e=n[r].apply(this,arguments);t--;)e=n[t].call(this,e);return e}},after:function(n,r){return function(){if(--n<1)return r.apply(this,arguments)}},before:cr,once:lr,findKey:sr,findIndex:vr,findLastIndex:hr,sortedIndex:yr,indexOf:gr,lastIndexOf:br,find:mr,detect:mr,findWhere:function(n,r){return mr(n,Dn(r))},each:jr,forEach:jr,map:_r,collect:_r,reduce:Ar,foldl:Ar,inject:Ar,reduceRight:xr,foldr:xr,filter:Sr,select:Sr,reject:function(n,r,t){return Sr(n,fr(qn(r)),t)},every:Or,all:Or,some:Mr,any:Mr,contains:Er,includes:Er,include:Er,invoke:Br,pluck:Nr,where:function(n,r){return Sr(n,Dn(r))},max:Ir,min:function(n,r,t){var e,u,o=1/0,i=1/0;if(null==r||"number"==typeof r&&"object"!=typeof n[0]&&null!=n)for(var a=0,f=(n=er(n)?n:jn(n)).length;ae||void 0===t)return 1;if(t - - krTheme Sphinx Style — monty 2021.5.9 documentation + + + krTheme Sphinx Style — monty 2021.6.10 documentation @@ -31,7 +32,7 @@

    Navigation

  • modules |
  • - +
    @@ -41,7 +42,7 @@

    Navigation

    @@ -41,71 +42,77 @@

    Navigation

    -
    +

    Change log

    -
    +
    +

    v2021.6.10

    +
      +
    • Expanded support for built-in funcitons, numpy types, etc. in MSON serialization (@utf).

    • +
    +
    +

    v2021.5.9

    • Drop py3.5 support.

    -
    -
    +
    +

    v2021.3.3

    • pydantic support (@shyamd)

    • UUID serialization support (@utf)

    -
    -
    + +

    v4.0.2

    1. Allow specification of warning category in deprecated wrapper.

    -
    -
    + +

    v4.0.1

    1. USe FutureWarning in the monty.dev.deprecated wrapper instead.

    -
    -
    + +

    v3.0.4

    1. Add support for complex dtypes in MSONable numpy arrays. (@fracci)

    -
    -
    + +

    v3.0.3

    1. Improvements to MSONAble to support Varidac Args (@shyamd).

    -
    -
    + +

    v3.0.1

    1. Bug fixes for Windows.

    -
    -
    + +

    v3.0.0

    1. Py3 only version.

    -
    -
    + +

    v2.0.7

    1. MSONable now supports Enum types. (@mkhorton)

    -
    -
    + +

    v2.0.6

    1. Revert py27 incompatible fmt spec for loadfn and dumpfn for now. This is a much less common use case.

    -
    -
    + +

    v2.0.5

    1. Checking for extension type in loadfn and dumpfn now relies on “.json”, @@ -114,171 +121,171 @@

      v2.0.5 +

    +

    v2.0.4

    1. Bug fix for invert MSON caused by @version.

    -
    -
    + +

    v2.0.3

    1. Support for nested MSONAble objects with MontyEncoder and dumpfn. (@davidwaroquiers)

    2. Add @version to MSONAble. (@mkhorton)

    -
    -
    + +

    v2.0.0

    1. Support for Path object in zopen.

    -
    -
    + +

    v1.0.5

    1. Bug fix for io.reverse_readfile to ensure txt or binary string.

    -
    -
    + +

    v1.0.4

    1. monty.shutil.remove which allows symlinks removal. Also improved monty.tempfile.ScratchDir cleanup. (@shyamd)

    -
    -
    + +

    v1.0.3

    1. Bug fix for reverse_readfile for bz2 files (Alex Urban)

    -
    -
    + +

    v1.0.2

    1. Misc bug fixes (tempdir on Windows)

    -
    -
    + +

    v1.0.1

    1. Use CLoader and CDumper by default for speed.

    -
    -
    + +

    v1.0.0

    1. Ruamel.yaml is now used as the default YAML parser and dumper.

    -
    -
    + +

    v0.9.8

    1. Now ScratchDir functions as it should by replacing the original directory.

    -
    -
    + +

    v0.9.7

    1. Minor update for inspect deprecation.

    -
    -
    + +

    v0.9.6

    1. Allow private variable names (with leading underscores) to be auto-detected in default MSONable.

    -
    -
    + +

    v0.9.5

    1. Favor use of inspect.signature in MSONAble.

    -
    -
    + +

    v0.9.3

    1. Fix monty decoding of bson only if bson is present.

    -
    -
    + +

    v0.9.2

    1. Minor update.

    -
    -
    + +

    v0.9.1

    1. bson.objectid.ObjectId support for MontyEncoder and MontyDecoder.

    -
    -
    + +

    v0.9.0

    1. Improved default as and from_dict.

    -
    -
    + +

    v0.8.5

    1. Minor bug fixes.

    -
    -
    + +

    v0.8.4

    1. Support for bson fields in jsanitize.

    -
    -
    + +

    v0.8.2

    1. Fasetr gzip.

    -
    -
    + +

    v0.8.1

    1. Update gcd for deprecated fractions.gcd in py >= 3.5. Try math.gcd by default first.

    -
    -
    + +

    v0.8.0

    1. A new collections.tree object, which allows nested defaultdicts.

    -
    -
    + +

    v0.7.2

    1. Added support for msgpack serialization in monty.serialization.dumpfn, loadfn and monty.msgpack.default and object_hook.

    -
    -
    + +

    v0.7.1

    1. Added timeout function. Useful to limit function calls that take too long.

    -
    -
    + +

    v0.7.0

    1. New backwards incompatible MSONable implementation that inspects init args to create a default dict representation for objects.

    -
    -
    + +

    v0.6.1

    1. New jsanitize method to convert objects supporting the MSONable protocol to json serializable dicts.

    -
    -
    + +

    v0.6.0

    1. New frozendict and MongoDict (allows for Javascript like access of nested @@ -286,61 +293,61 @@

      v0.6.0 +

    +

    v0.5.9

    1. More fixes for reverse read of gzipped files ofr Py3k.

    -
    -
    + +

    v0.5.8

    1. Fix reverse read file for gzipped files.

    -
    -
    + +

    v0.5.7

    1. Added a reverse_readfile method in monty.io, which is faster than reverse_readline for large files.

    -
    -
    + +

    v0.5.6

    1. Provide way to specify Dumper and Loader in monty.serialization.

    2. Better handling of unicode.

    -
    -
    + +

    v0.5.5

    1. More robust handling of numpy arrays and datetime objects in json.

    2. Refactor NotOverwritableDict to Namespace (Matteo).

    -
    -
    + +

    v0.5.4

    1. Addition of many help functions in string, itertools, etc. (Matteo).

    2. NullFile and NullStream in monty.design_patterns (Matteo).

    3. FileLock in monty.io (Matteo)

    -
    -
    + +

    v0.5.3

    1. Minor efficiency improvement.

    -
    -
    + +

    v0.5.2

    1. Add unicode2str and str2unicode in monty.string.

    -
    -
    + +

    v0.5.0

    1. Completely rewritten zopen which supports the “rt” keyword of Python 3 @@ -350,40 +357,40 @@

      v0.5.0 +

    +

    v0.4.4

    1. Refactor lazy_property to be in functools module.

    -
    -
    + +

    v0.4.3

    1. Additional dev decorators lazy and logging functions.

    -
    -
    + +

    v0.4.2

    1. Improve numpy array serialization with MontyEncoder.

    -
    -
    + +

    v0.4.1

    1. Minor bug fix for module load in Py3k.

    -
    -
    + +

    v0.4.0

    1. Remove deprecated json.loadf methods.

    2. Add MSONable protocol for json/yaml based serialization.

    3. deprecated now supports an additonal message.

    -
    -
    + +

    v0.3.6

    1. monty.tempfile.ScratchDir now checks for existence of root @@ -391,60 +398,60 @@

      v0.3.6 +

    +

    v0.3.5

    1. Added backport of functools.lru_cache.

    -
    -
    + +

    v0.3.4

    1. Specialized json encoders / decoders with support for numpy arrays and objects supporting a to_dict() protocol used in pymatgen.

    -
    -
    + +

    v0.3.1

    1. Proper support for libyaml auto-detect in yaml support.

    -
    -
    + +

    v0.3.0

    1. Refactor serialization tools to shorten method names.

    -
    -
    + +

    v0.2.4

    1. Added serialization module that supports both json and yaml. The latter requires pyyaml.

    -
    -
    + +

    v0.2.3

    1. Added get_ncpus method in dev. (G. Matteo).

    -
    -
    + +

    v0.2.2

    1. Add a Fabric-inspired cd context manager in monty.os.

    2. Refactor ScratchDir context manager to monty.tempfile.

    -
    -
    + +

    v0.2.1

    1. Add string module, which provides a function to remove non-ascii characters. More to be added.

    -
    -
    + +

    v0.2.0

    1. ScratchDir now supports non-copying of files to and from current @@ -452,59 +459,59 @@

      v0.2.0 +

    +

    v0.1.5

    1. Added the useful monty.shutil.compress_file, compress_dir, decompress_file and decompress_dir methods.

    2. Much more robust copy_r in shutil.

    -
    -
    + +

    v0.1.4

    1. Bug fix for 0.1.3.

    -
    -
    + +

    v0.1.2

    1. Added zpath method to return zipped paths.

    -
    -
    + +

    v0.1.1

    1. Minor release to update description.

    -
    -
    + +

    v0.1.0

    1. Ensure Python 3+ compatibility.

    2. Travis testing implemented.

    -
    -
    + +

    v0.0.5

    1. First official alpha release with unittests and docs.

    -
    -
    + +

    v0.0.2

    1. Added several decorators and utilities.

    -
    -
    + +

    v0.0.1

    1. Initial version.

    -
    -
    + +
    @@ -516,6 +523,7 @@

    v0.0.1Table of Contents

    diff --git a/docs/index.html b/docs/index.html index b867e952e..47f8d5119 100644 --- a/docs/index.html +++ b/docs/index.html @@ -4,8 +4,9 @@ - - Monty: Python Made Even Easier — monty 2021.5.9 documentation + + + Monty: Python Made Even Easier — monty 2021.6.10 documentation @@ -35,7 +36,7 @@

    Navigation

  • next |
  • - +
    @@ -45,7 +46,7 @@

    Navigation

    -
    +

    Monty: Python Made Even Easier

    https://travis-ci.org/materialsvirtuallab/monty.png?branch=master https://coveralls.io/repos/github/materialsvirtuallab/monty/badge.svg?branch=master @@ -64,19 +65,19 @@

    Monty: Python Made Even Easier +

    +

    Change Log

    Change log

    -
    -
    + +

    Installation

    Standard pip install:

    pip install monty
     
    -
    -
    + +

    Usage

    Unlike most other modules, the organization of Monty mirrors that of the standard Python library where possible. This style is adopted so that that @@ -146,8 +147,8 @@

    Usage execute_code_using_files()

    -
    -
    + +

    API docs

      @@ -195,14 +196,14 @@

      API docs +

    +

    Contributing

    Contributions to Monty are always welcome. Feel free to visit the Monty Github repo to fork the repo or to submit Issues.

    -
    -
    + +

    License

    Monty is released under the MIT License. The terms of the license are as follows:

    @@ -228,15 +229,15 @@

    LicenseCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    - -
    + +

    Indices and tables

    -
    +
    diff --git a/docs/modules.html b/docs/modules.html index 4af4cc38e..690fdba40 100644 --- a/docs/modules.html +++ b/docs/modules.html @@ -4,8 +4,9 @@ - - monty — monty 2021.5.9 documentation + + + monty — monty 2021.6.10 documentation @@ -31,7 +32,7 @@

    Navigation

  • modules |
  • - + @@ -41,7 +42,7 @@

    Navigation

    -
    +

    monty

      @@ -89,7 +90,7 @@

      monty

    -
    +
    diff --git a/docs/monty.bisect.html b/docs/monty.bisect.html index a014a6e0f..ef0aed57f 100644 --- a/docs/monty.bisect.html +++ b/docs/monty.bisect.html @@ -4,8 +4,9 @@ - - monty.bisect module — monty 2021.5.9 documentation + + + monty.bisect module — monty 2021.6.10 documentation @@ -39,7 +40,7 @@

    Navigation

  • previous |
  • - + @@ -50,7 +51,7 @@

    Navigation

    -
    +

    monty.bisect module

    Additional bisect functions. Taken from https://docs.python.org/2/library/bisect.html @@ -88,7 +89,7 @@

    Navigation

    Locate the leftmost value exactly equal to x.

    -
    +
    diff --git a/docs/monty.collections.html b/docs/monty.collections.html index b75dfdbd6..af800247a 100644 --- a/docs/monty.collections.html +++ b/docs/monty.collections.html @@ -4,8 +4,9 @@ - - monty.collections module — monty 2021.5.9 documentation + + + monty.collections module — monty 2021.6.10 documentation @@ -39,7 +40,7 @@

    Navigation

  • previous |
  • - + @@ -50,7 +51,7 @@

    Navigation

    -
    +

    monty.collections module

    Useful collection classes, e.g., tree, frozendict, etc.

    @@ -241,7 +242,7 @@

    Navigation

    -
    +
    diff --git a/docs/monty.design_patterns.html b/docs/monty.design_patterns.html index ae51e1b36..2b1c0dd0e 100644 --- a/docs/monty.design_patterns.html +++ b/docs/monty.design_patterns.html @@ -4,8 +4,9 @@ - - monty.design_patterns module — monty 2021.5.9 documentation + + + monty.design_patterns module — monty 2021.6.10 documentation @@ -39,7 +40,7 @@

    Navigation

  • previous |
  • - + @@ -50,7 +51,7 @@

    Navigation

    -
    +

    monty.design_patterns module

    Some common design patterns such as singleton and cached classes.

    @@ -106,7 +107,7 @@

    Navigation

    -
    +
    diff --git a/docs/monty.dev.html b/docs/monty.dev.html index 5d74ec3c4..49eb311a5 100644 --- a/docs/monty.dev.html +++ b/docs/monty.dev.html @@ -4,8 +4,9 @@ - - monty.dev module — monty 2021.5.9 documentation + + + monty.dev module — monty 2021.6.10 documentation @@ -39,7 +40,7 @@

    Navigation

  • previous |
  • - + @@ -50,7 +51,7 @@

    Navigation

    -
    +

    monty.dev module

    This module implements several useful functions and decorators that can be particularly useful for developers. E.g., deprecating methods / classes, etc.

    @@ -141,7 +142,7 @@

    Navigation

    -
    +
    diff --git a/docs/monty.fnmatch.html b/docs/monty.fnmatch.html index c63a3277c..bbe58b2a9 100644 --- a/docs/monty.fnmatch.html +++ b/docs/monty.fnmatch.html @@ -4,8 +4,9 @@ - - monty.fnmatch module — monty 2021.5.9 documentation + + + monty.fnmatch module — monty 2021.6.10 documentation @@ -39,7 +40,7 @@

    Navigation

  • previous |
  • - + @@ -50,7 +51,7 @@

    Navigation

    -
    +

    monty.fnmatch module

    This module provides support for Unix shell-style wildcards

    @@ -92,7 +93,7 @@

    Navigation

    -
    +
    diff --git a/docs/monty.fractions.html b/docs/monty.fractions.html index 761056b2d..648732a41 100644 --- a/docs/monty.fractions.html +++ b/docs/monty.fractions.html @@ -4,8 +4,9 @@ - - monty.fractions module — monty 2021.5.9 documentation + + + monty.fractions module — monty 2021.6.10 documentation @@ -39,7 +40,7 @@

    Navigation

  • previous |
  • - + @@ -50,7 +51,7 @@

    Navigation

    -
    +

    monty.fractions module

    Math functions.

    @@ -99,7 +100,7 @@

    Navigation

    -
    +
    diff --git a/docs/monty.functools.html b/docs/monty.functools.html index 06e67b401..fbec16785 100644 --- a/docs/monty.functools.html +++ b/docs/monty.functools.html @@ -4,8 +4,9 @@ - - monty.functools module — monty 2021.5.9 documentation + + + monty.functools module — monty 2021.6.10 documentation @@ -39,7 +40,7 @@

    Navigation

  • previous |
  • - + @@ -50,7 +51,7 @@

    Navigation

    -
    +

    monty.functools module

    functools, especially backported from Python 3.

    @@ -201,7 +202,7 @@

    Navigation

    -
    +
    diff --git a/docs/monty.html b/docs/monty.html index c4fcd2416..9fecccf0f 100644 --- a/docs/monty.html +++ b/docs/monty.html @@ -4,8 +4,9 @@ - - monty package — monty 2021.5.9 documentation + + + monty package — monty 2021.6.10 documentation @@ -39,7 +40,7 @@

    Navigation

  • previous |
  • - +
    @@ -49,9 +50,9 @@

    Navigation

    -
    +

    monty package

    -
    +

    Subpackages

      @@ -65,8 +66,8 @@

      Subpackages +

    +

    Submodules

    -
    -
    +
    +

    Module contents

    Monty is the missing complement to Python. Monty implements supplementary useful functions for Python that are not part of the standard library. Examples include useful utilities like transparent support for zipped files, useful design patterns such as singleton and cached_class, and many more.

    -
    -
    + +
    diff --git a/docs/monty.inspect.html b/docs/monty.inspect.html index 32bb9ac52..41782fe11 100644 --- a/docs/monty.inspect.html +++ b/docs/monty.inspect.html @@ -4,8 +4,9 @@ - - monty.inspect module — monty 2021.5.9 documentation + + + monty.inspect module — monty 2021.6.10 documentation @@ -39,7 +40,7 @@

    Navigation

  • previous |
  • - + @@ -50,7 +51,7 @@

    Navigation

    -
    +

    monty.inspect module

    Useful additional functions to help get information about live objects

    @@ -97,7 +98,7 @@

    Navigation

    -
    +
    diff --git a/docs/monty.io.html b/docs/monty.io.html index 7924ce3e6..cf618c930 100644 --- a/docs/monty.io.html +++ b/docs/monty.io.html @@ -4,8 +4,9 @@ - - monty.io module — monty 2021.5.9 documentation + + + monty.io module — monty 2021.6.10 documentation @@ -39,7 +40,7 @@

    Navigation

  • previous |
  • - + @@ -50,7 +51,7 @@

    Navigation

    -
    +

    monty.io module

    Augments Python’s suite of IO functions with useful transparent support for compressed files.

    @@ -181,7 +182,7 @@

    Navigation

    -
    +
    diff --git a/docs/monty.itertools.html b/docs/monty.itertools.html index 27b443401..15ddd36ab 100644 --- a/docs/monty.itertools.html +++ b/docs/monty.itertools.html @@ -4,8 +4,9 @@ - - monty.itertools module — monty 2021.5.9 documentation + + + monty.itertools module — monty 2021.6.10 documentation @@ -39,7 +40,7 @@

    Navigation

  • previous |
  • - + @@ -50,7 +51,7 @@

    Navigation

    -
    +

    monty.itertools module

    Additional tools for iteration.

    @@ -120,7 +121,7 @@

    Navigation

    -
    +
    diff --git a/docs/monty.json.html b/docs/monty.json.html index 8f88a9684..bb80cf2c1 100644 --- a/docs/monty.json.html +++ b/docs/monty.json.html @@ -4,8 +4,9 @@ - - monty.json module — monty 2021.5.9 documentation + + + monty.json module — monty 2021.6.10 documentation @@ -39,7 +40,7 @@

    Navigation

  • previous |
  • - + @@ -50,7 +51,7 @@

    Navigation

    -
    +

    monty.json module

    JSON serialization and deserialization utilities.

    @@ -243,7 +244,7 @@

    Navigation

    indent level. An indent level of 0 will only insert newlines. None is the most compact representation.

    If specified, separators should be an (item_separator, key_separator) -tuple. The default is (‘, ‘, ‘: ‘) if indent is None and +tuple. The default is (’, ‘, ‘: ‘) if indent is None and (‘,’, ‘: ‘) otherwise. To get the most compact JSON representation, you should specify (‘,’, ‘:’) to eliminate whitespace.

    If specified, default is a function that gets called for objects @@ -298,7 +299,7 @@

    Navigation

    -
    +
    diff --git a/docs/monty.logging.html b/docs/monty.logging.html index 16847a91d..1cdb1ca09 100644 --- a/docs/monty.logging.html +++ b/docs/monty.logging.html @@ -4,8 +4,9 @@ - - monty.logging module — monty 2021.5.9 documentation + + + monty.logging module — monty 2021.6.10 documentation @@ -39,7 +40,7 @@

    Navigation

  • previous |
  • - + @@ -50,7 +51,7 @@

    Navigation

    -
    +

    monty.logging module

    Logging tools

    @@ -80,7 +81,7 @@

    Navigation

    -
    +
    diff --git a/docs/monty.math.html b/docs/monty.math.html index 66a396d28..9c46e49d3 100644 --- a/docs/monty.math.html +++ b/docs/monty.math.html @@ -4,8 +4,9 @@ - - monty.math module — monty 2021.5.9 documentation + + + monty.math module — monty 2021.6.10 documentation @@ -39,7 +40,7 @@

    Navigation

  • previous |
  • - + @@ -50,7 +51,7 @@

    Navigation

    -
    +

    monty.math module

    Addition math functions.

    @@ -87,7 +88,7 @@

    Navigation

    -
    +
    diff --git a/docs/monty.msgpack.html b/docs/monty.msgpack.html index 74e3aa597..2b23227f5 100644 --- a/docs/monty.msgpack.html +++ b/docs/monty.msgpack.html @@ -4,8 +4,9 @@ - - monty.msgpack module — monty 2021.5.9 documentation + + + monty.msgpack module — monty 2021.6.10 documentation @@ -39,7 +40,7 @@

    Navigation

  • previous |
  • - + @@ -50,7 +51,7 @@

    Navigation

    -
    +

    monty.msgpack module

    msgpack serialization and deserialization utilities. Right now, this is a stub using monty.json encoder and decoders. The naming is just for clearer usage with @@ -69,7 +70,7 @@

    Navigation

    Monty’s as_dict protocol, numpy arrays and datetime.

    -
    +
    diff --git a/docs/monty.multiprocessing.html b/docs/monty.multiprocessing.html index 6980a6ffb..5ff8cbd28 100644 --- a/docs/monty.multiprocessing.html +++ b/docs/monty.multiprocessing.html @@ -4,8 +4,9 @@ - - monty.multiprocessing module — monty 2021.5.9 documentation + + + monty.multiprocessing module — monty 2021.6.10 documentation @@ -39,7 +40,7 @@

    Navigation

  • previous |
  • - + @@ -50,7 +51,7 @@

    Navigation

    -
    +

    monty.multiprocessing module

    Multiprocessing utilities.

    @@ -74,7 +75,7 @@

    Navigation

    -
    +
    diff --git a/docs/monty.operator.html b/docs/monty.operator.html index 575ce43e1..8357874a5 100644 --- a/docs/monty.operator.html +++ b/docs/monty.operator.html @@ -4,8 +4,9 @@ - - monty.operator module — monty 2021.5.9 documentation + + + monty.operator module — monty 2021.6.10 documentation @@ -39,7 +40,7 @@

    Navigation

  • previous |
  • - + @@ -50,7 +51,7 @@

    Navigation

    -
    +

    monty.operator module

    Useful additional functions for operators

    @@ -64,7 +65,7 @@

    Navigation

    -
    +
    diff --git a/docs/monty.os.html b/docs/monty.os.html index a5fa1889b..f00029834 100644 --- a/docs/monty.os.html +++ b/docs/monty.os.html @@ -4,8 +4,9 @@ - - monty.os package — monty 2021.5.9 documentation + + + monty.os package — monty 2021.6.10 documentation @@ -39,7 +40,7 @@

    Navigation

  • previous |
  • - + @@ -50,17 +51,17 @@

    Navigation

    -
    +

    monty.os package

    -
    +

    Submodules

    -
    -
    +
    +

    Module contents

    Os functions, e.g., cd, makedirs_p.

    @@ -98,8 +99,8 @@

    Submodules

    diff --git a/docs/monty.os.path.html b/docs/monty.os.path.html index 86c7ef0bb..e40bb0668 100644 --- a/docs/monty.os.path.html +++ b/docs/monty.os.path.html @@ -4,8 +4,9 @@ - - monty.os.path module — monty 2021.5.9 documentation + + + monty.os.path module — monty 2021.6.10 documentation @@ -39,7 +40,7 @@

    Navigation

  • previous |
  • - + @@ -51,7 +52,7 @@

    Navigation

    -
    +

    monty.os.path module

    Path based methods, e.g., which, zpath, etc.

    @@ -130,7 +131,7 @@

    Navigation

    -
    +
    diff --git a/docs/monty.pprint.html b/docs/monty.pprint.html index d94ed523d..7a103a3bf 100644 --- a/docs/monty.pprint.html +++ b/docs/monty.pprint.html @@ -4,8 +4,9 @@ - - monty.pprint module — monty 2021.5.9 documentation + + + monty.pprint module — monty 2021.6.10 documentation @@ -39,7 +40,7 @@

    Navigation

  • previous |
  • - + @@ -50,7 +51,7 @@

    Navigation

    -
    +

    monty.pprint module

    Pretty printing functions.

    @@ -88,7 +89,7 @@

    Navigation

    -
    +
    diff --git a/docs/monty.re.html b/docs/monty.re.html index 6cb6633da..f6720c763 100644 --- a/docs/monty.re.html +++ b/docs/monty.re.html @@ -4,8 +4,9 @@ - - monty.re module — monty 2021.5.9 documentation + + + monty.re module — monty 2021.6.10 documentation @@ -39,7 +40,7 @@

    Navigation

  • previous |
  • - + @@ -50,7 +51,7 @@

    Navigation

    -
    +

    monty.re module

    Helpful regex based functions. E.g., grepping.

    @@ -89,7 +90,7 @@

    Navigation

    -
    +
    diff --git a/docs/monty.serialization.html b/docs/monty.serialization.html index 773df1936..aede7d86e 100644 --- a/docs/monty.serialization.html +++ b/docs/monty.serialization.html @@ -4,8 +4,9 @@ - - monty.serialization module — monty 2021.5.9 documentation + + + monty.serialization module — monty 2021.6.10 documentation @@ -39,7 +40,7 @@

    Navigation

  • previous |
  • - + @@ -50,7 +51,7 @@

    Navigation

    -
    +

    monty.serialization module

    This module implements serialization support for common formats such as json and yaml.

    @@ -105,7 +106,7 @@

    Navigation

    -
    +
    diff --git a/docs/monty.shutil.html b/docs/monty.shutil.html index 948458faf..6c0aa51da 100644 --- a/docs/monty.shutil.html +++ b/docs/monty.shutil.html @@ -4,8 +4,9 @@ - - monty.shutil module — monty 2021.5.9 documentation + + + monty.shutil module — monty 2021.6.10 documentation @@ -39,7 +40,7 @@

    Navigation

  • previous |
  • - + @@ -50,7 +51,7 @@

    Navigation

    -
    +

    monty.shutil module

    Copying and zipping utilities. Works on directories mostly.

    @@ -166,7 +167,7 @@

    Navigation

    -
    +
    diff --git a/docs/monty.string.html b/docs/monty.string.html index 772cd6952..d5213edbe 100644 --- a/docs/monty.string.html +++ b/docs/monty.string.html @@ -4,8 +4,9 @@ - - monty.string module — monty 2021.5.9 documentation + + + monty.string module — monty 2021.6.10 documentation @@ -39,7 +40,7 @@

    Navigation

  • previous |
  • - + @@ -50,7 +51,7 @@

    Navigation

    -
    +

    monty.string module

    Useful additional string functions.

    @@ -184,7 +185,7 @@

    Navigation

    -
    +
    diff --git a/docs/monty.subprocess.html b/docs/monty.subprocess.html index 8e33bb456..264c7c746 100644 --- a/docs/monty.subprocess.html +++ b/docs/monty.subprocess.html @@ -4,8 +4,9 @@ - - monty.subprocess module — monty 2021.5.9 documentation + + + monty.subprocess module — monty 2021.6.10 documentation @@ -39,7 +40,7 @@

    Navigation

  • previous |
  • - + @@ -50,7 +51,7 @@

    Navigation

    -
    +

    monty.subprocess module

    Calling shell processes.

    @@ -107,7 +108,7 @@

    Navigation

    -
    +
    diff --git a/docs/monty.tempfile.html b/docs/monty.tempfile.html index 94a8d6e8d..9f33af704 100644 --- a/docs/monty.tempfile.html +++ b/docs/monty.tempfile.html @@ -4,8 +4,9 @@ - - monty.tempfile module — monty 2021.5.9 documentation + + + monty.tempfile module — monty 2021.6.10 documentation @@ -39,7 +40,7 @@

    Navigation

  • previous |
  • - + @@ -50,7 +51,7 @@

    Navigation

    -
    +

    monty.tempfile module

    Temporary directory and file creation utilities.

    @@ -115,7 +116,7 @@

    Navigation

    -
    +
    diff --git a/docs/monty.termcolor.html b/docs/monty.termcolor.html index a970437b9..f811395c7 100644 --- a/docs/monty.termcolor.html +++ b/docs/monty.termcolor.html @@ -4,8 +4,9 @@ - - monty.termcolor module — monty 2021.5.9 documentation + + + monty.termcolor module — monty 2021.6.10 documentation @@ -35,7 +36,7 @@

    Navigation

  • previous |
  • - + @@ -46,7 +47,7 @@

    Navigation

    -
    +

    monty.termcolor module

    Copyright (c) 2008-2011 Volvox Development Team

    # Permission is hereby granted, free of charge, to any person obtaining a copy @@ -93,7 +94,7 @@

    Navigation

    It accepts arguments of print function.

    -
    +
    diff --git a/docs/objects.inv b/docs/objects.inv index 4fca64474..44df8af2d 100644 Binary files a/docs/objects.inv and b/docs/objects.inv differ diff --git a/docs/py-modindex.html b/docs/py-modindex.html index cc27262e7..a160b3586 100644 --- a/docs/py-modindex.html +++ b/docs/py-modindex.html @@ -5,7 +5,7 @@ - Python Module Index — monty 2021.5.9 documentation + Python Module Index — monty 2021.6.10 documentation @@ -34,7 +34,7 @@

    Navigation

  • modules |
  • - +
    diff --git a/docs/search.html b/docs/search.html index 88e4c4970..209a8f8e3 100644 --- a/docs/search.html +++ b/docs/search.html @@ -5,7 +5,7 @@ - Search — monty 2021.5.9 documentation + Search — monty 2021.6.10 documentation @@ -37,7 +37,7 @@

    Navigation

  • modules |
  • - +
    diff --git a/docs/searchindex.js b/docs/searchindex.js index 67860b530..9127abd7c 100644 --- a/docs/searchindex.js +++ b/docs/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["_themes/README","changelog","index","modules","monty","monty.bisect","monty.collections","monty.design_patterns","monty.dev","monty.fnmatch","monty.fractions","monty.functools","monty.inspect","monty.io","monty.itertools","monty.json","monty.logging","monty.math","monty.msgpack","monty.multiprocessing","monty.operator","monty.os","monty.os.path","monty.pprint","monty.re","monty.serialization","monty.shutil","monty.string","monty.subprocess","monty.tempfile","monty.termcolor"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,"sphinx.ext.viewcode":1,sphinx:56},filenames:["_themes/README.rst","changelog.rst","index.rst","modules.rst","monty.rst","monty.bisect.rst","monty.collections.rst","monty.design_patterns.rst","monty.dev.rst","monty.fnmatch.rst","monty.fractions.rst","monty.functools.rst","monty.inspect.rst","monty.io.rst","monty.itertools.rst","monty.json.rst","monty.logging.rst","monty.math.rst","monty.msgpack.rst","monty.multiprocessing.rst","monty.operator.rst","monty.os.rst","monty.os.path.rst","monty.pprint.rst","monty.re.rst","monty.serialization.rst","monty.shutil.rst","monty.string.rst","monty.subprocess.rst","monty.tempfile.rst","monty.termcolor.rst"],objects:{"":{monty:[4,0,0,"-"]},"monty.bisect":{find_ge:[5,1,1,""],find_gt:[5,1,1,""],find_le:[5,1,1,""],find_lt:[5,1,1,""],index:[5,1,1,""]},"monty.collections":{AttrDict:[6,2,1,""],FrozenAttrDict:[6,2,1,""],MongoDict:[6,2,1,""],Namespace:[6,2,1,""],dict2namedtuple:[6,1,1,""],frozendict:[6,2,1,""],tree:[6,1,1,""]},"monty.collections.AttrDict":{copy:[6,3,1,""]},"monty.collections.Namespace":{update:[6,3,1,""]},"monty.collections.frozendict":{update:[6,3,1,""]},"monty.design_patterns":{NullFile:[7,2,1,""],NullStream:[7,2,1,""],cached_class:[7,1,1,""],singleton:[7,1,1,""]},"monty.design_patterns.NullStream":{write:[7,3,1,""]},"monty.dev":{deprecated:[8,1,1,""],get_ncpus:[8,1,1,""],install_excepthook:[8,1,1,""],requires:[8,2,1,""]},"monty.fnmatch":{WildCard:[9,2,1,""]},"monty.fnmatch.WildCard":{filter:[9,3,1,""],match:[9,3,1,""]},"monty.fractions":{gcd:[10,1,1,""],gcd_float:[10,1,1,""],lcm:[10,1,1,""]},"monty.functools":{TimeoutError:[11,4,1,""],lazy_property:[11,2,1,""],lru_cache:[11,1,1,""],prof_main:[11,1,1,""],return_if_raise:[11,1,1,""],return_none_if_raise:[11,1,1,""],timeout:[11,2,1,""]},"monty.functools.lazy_property":{invalidate:[11,3,1,""]},"monty.functools.timeout":{handle_timeout:[11,3,1,""]},"monty.inspect":{all_subclasses:[12,1,1,""],caller_name:[12,1,1,""],find_top_pyfile:[12,1,1,""],initializer:[12,1,1,""]},"monty.io":{FileLock:[13,2,1,""],FileLockException:[13,4,1,""],get_open_fds:[13,1,1,""],reverse_readfile:[13,1,1,""],reverse_readline:[13,1,1,""],zopen:[13,1,1,""]},"monty.io.FileLock":{Error:[13,5,1,""],acquire:[13,3,1,""],release:[13,3,1,""]},"monty.itertools":{chunks:[14,1,1,""],ilotri:[14,1,1,""],iterator_from_slice:[14,1,1,""],iuptri:[14,1,1,""]},"monty.json":{MSONError:[15,4,1,""],MSONable:[15,2,1,""],MontyDecoder:[15,2,1,""],MontyEncoder:[15,2,1,""],jsanitize:[15,1,1,""]},"monty.json.MSONable":{REDIRECT:[15,5,1,""],as_dict:[15,3,1,""],from_dict:[15,3,1,""],to_json:[15,3,1,""],unsafe_hash:[15,3,1,""],validate_monty:[15,3,1,""]},"monty.json.MontyDecoder":{decode:[15,3,1,""],process_decoded:[15,3,1,""]},"monty.json.MontyEncoder":{"default":[15,3,1,""]},"monty.logging":{enable_logging:[16,1,1,""],logged:[16,1,1,""]},"monty.math":{nCr:[17,1,1,""],nPr:[17,1,1,""]},"monty.msgpack":{"default":[18,1,1,""],object_hook:[18,1,1,""]},"monty.multiprocessing":{imap_tqdm:[19,1,1,""]},"monty.operator":{operator_from_str:[20,1,1,""]},"monty.os":{cd:[21,1,1,""],makedirs_p:[21,1,1,""],path:[22,0,0,"-"]},"monty.os.path":{find_exts:[22,1,1,""],which:[22,1,1,""],zpath:[22,1,1,""]},"monty.pprint":{draw_tree:[23,1,1,""],pprint_table:[23,1,1,""]},"monty.re":{regrep:[24,1,1,""]},"monty.serialization":{dumpfn:[25,1,1,""],loadfn:[25,1,1,""]},"monty.shutil":{compress_dir:[26,1,1,""],compress_file:[26,1,1,""],copy_r:[26,1,1,""],decompress_dir:[26,1,1,""],decompress_file:[26,1,1,""],gzip_dir:[26,1,1,""],remove:[26,1,1,""]},"monty.string":{boxed:[27,1,1,""],indent:[27,1,1,""],is_string:[27,1,1,""],list_strings:[27,1,1,""],make_banner:[27,1,1,""],marquee:[27,1,1,""],remove_non_ascii:[27,1,1,""],unicode2str:[27,1,1,""]},"monty.subprocess":{Command:[28,2,1,""]},"monty.subprocess.Command":{error:[28,5,1,""],killed:[28,5,1,""],output:[28,5,1,""],retcode:[28,5,1,""],run:[28,3,1,""]},"monty.tempfile":{ScratchDir:[29,2,1,""]},"monty.tempfile.ScratchDir":{SCR_LINK:[29,5,1,""]},"monty.termcolor":{colored:[30,1,1,""],cprint:[30,1,1,""]},monty:{bisect:[5,0,0,"-"],collections:[6,0,0,"-"],design_patterns:[7,0,0,"-"],dev:[8,0,0,"-"],fnmatch:[9,0,0,"-"],fractions:[10,0,0,"-"],functools:[11,0,0,"-"],inspect:[12,0,0,"-"],io:[13,0,0,"-"],itertools:[14,0,0,"-"],json:[15,0,0,"-"],logging:[16,0,0,"-"],math:[17,0,0,"-"],msgpack:[18,0,0,"-"],multiprocessing:[19,0,0,"-"],operator:[20,0,0,"-"],os:[21,0,0,"-"],pprint:[23,0,0,"-"],re:[24,0,0,"-"],serialization:[25,0,0,"-"],shutil:[26,0,0,"-"],string:[27,0,0,"-"],subprocess:[28,0,0,"-"],tempfile:[29,0,0,"-"],termcolor:[30,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","function","Python function"],"2":["py","class","Python class"],"3":["py","method","Python method"],"4":["py","exception","Python exception"],"5":["py","attribute","Python attribute"]},objtypes:{"0":"py:module","1":"py:function","2":"py:class","3":"py:method","4":"py:exception","5":"py:attribute"},terms:{"0":[6,8,11,13,14,15,24],"01":13,"05":13,"08":10,"1":[2,6,8,11,12,14,15,26,28],"10":[13,14,16],"1006289":8,"11":14,"1191374":28,"12":14,"128":11,"13":14,"1306188":28,"1389180":12,"14":14,"15":14,"16":14,"17":14,"18":14,"19":14,"1e":10,"2":[2,5,6,8,11,12,14,26,27,28,29],"20":14,"2008":30,"2009":13,"2011":30,"2014":2,"21":14,"2151727":12,"22":14,"23":14,"24":14,"25":14,"2x":13,"3":[11,14,26,27,29],"31":15,"4":14,"40":27,"4000000":13,"4096":13,"439045":13,"4825933":28,"5":[14,27],"6":[14,15,26],"7":[2,8,14],"78":27,"8":[14,23],"9":[14,26],"abstract":2,"case":[1,13,25],"class":[1,2,6,7,8,9,11,12,13,15,24,26,28,29],"default":[1,8,11,13,15,16,18,23,24,26,27,29],"do":[2,15,29,30],"enum":1,"final":27,"float":[10,15],"function":[1,2,4,5,6,8,10,11,12,13,14,15,16,17,20,21,23,24,26,27,29,30],"import":[2,8,14],"int":[10,11,13,15,17,19,26,27],"long":1,"new":[1,2,11,15],"null":7,"public":12,"return":[1,6,8,9,10,11,12,13,14,15,17,19,20,21,22,23,24,25,27,28],"throw":13,"true":[8,9,11,12,14,15,23,27,28],"try":[1,8,11,15,29],"while":12,A:[1,2,6,7,8,11,13,14,15,19,21,23,24,26,27,30],AND:[2,30],AS:[2,30],BE:[2,30],BUT:[2,30],By:15,FOR:[2,30],For:[7,8,11,13,15,18,24,25,26],IN:[2,30],IS:[2,30],If:[1,8,11,13,14,15,16,22,29],In:[2,8],It:[0,2,6,13,15,16,30],NO:[2,30],NOT:[2,30],OF:[2,30],OR:[2,30],One:11,THE:[2,30],TO:[2,30],The:[0,1,2,5,6,7,8,11,13,14,15,18,21,23,25,26,27,29,30],There:[2,29],To:[0,15],WITH:[2,30],With:29,_:22,__class__:15,__init__:[2,7,12,15],__module__:15,__name__:15,__wrapped__:11,_argnam:15,_c:15,_d:15,_io:23,_name:11,_theme:0,abc:6,about:12,abov:[2,5,30],absolut:22,abspath:[0,22],accept:[11,30],access:[1,6,11,23],accord:11,accordingli:8,acquir:13,action:[2,29,30],activ:11,activest:13,ad:[1,27],add:[0,1,2,6,15,16],addit:[1,5,6,12,14,17,20,27],additon:1,addon:0,adopt:2,after:27,afterward:21,again:13,aim:26,alex:1,alia:13,align:23,all:[2,12,15,22,23,24,26,27,29,30],all_subclass:12,allow:[1,2,6,11,13,15,16,29],allow_bson:15,allow_nan:15,almost:2,alpha:1,alreadi:[8,15,21,29],also:[0,1,2,6,11,15,25],altern:0,alwai:[2,6,7,8,27],amount:[13,27],an:[1,2,8,9,11,12,13,14,15,16,19,21,22,23,26,30],analyz:6,ani:[2,7,15,25,30],anoth:[8,13,15],another_method:11,ansii:30,api:15,append:0,appropri:[2,11],ar:[1,2,4,5,6,7,8,11,13,15,16,22,23,26,28,29],archiv:26,arg:[1,2,6,7,11,13,15,19,25,27],argnam:15,argument:[6,7,8,11,15,16,19,23,28,30],aris:[2,30],around:[13,19],arrai:[1,15,18],as_dict:[15,18],ascii:[1,15,27],asciitre:23,assert:6,assign:12,associ:[2,7,15,20,30],assum:25,astrand:13,atol:5,attempt:[8,13,15],attr:30,attrdict:6,attribut:[6,11,15,30],attributeerror:11,augment:13,author:[2,30],auto:1,automat:[12,13,15,25,26,29],avail:[27,30],avoid:7,awkward:5,b:[2,6,15],back:[2,13,29],backport:[1,11],backward:[1,13],bad:1,banner:27,bar:[6,9,19],base:[1,2,6,7,8,9,11,13,15,22,23,24,28,29],basenam:22,basi:15,batteri:2,becaus:[6,7],becom:11,been:28,befor:27,begin:16,behav:[7,27],behavior:[13,15],behaviour:6,below:[2,15],best:2,better:1,between:13,binari:1,bisect:[2,3,4],blink:30,blk_size:13,block:[11,13],blue:30,bold:30,bool:[8,15,24,26,29],both:1,bound:11,box:27,bson:[1,15],buffer:[13,23],bug:1,build:29,built:29,bz2:[1,2,13,25,26],bzip2:[2,26],bzip:13,c:[2,6,15,30],cach:[2,7,11],cache_algorithm:11,cache_clear:11,cache_info:11,cached_class:[2,4,7],calcul:17,call:[1,8,11,12,13,15,16,23,28],callabl:[8,11,19,24],caller:12,caller_nam:12,can:[0,5,7,8,10,11,13,15,22,26],cannot:[6,8],categori:[1,8],cater:8,caus:[1,15],cd:[1,2,21],cdumper:1,cendio:13,center:[1,27],certain:11,cgitb:8,ch:27,chang:[6,8,21,24,29],charact:[1,15,27],charg:[2,30],check:[0,1,8,13,15,21],check_circular:15,child_it:23,children:23,choic:8,choos:[8,17],chosen:2,chunk:14,circular:15,cl:[7,12,15],claim:[2,30],classmethod:[11,15],clean:15,cleanup:[1,29],clear:11,clearer:18,clegaspi:1,cloader:1,cluster:8,cmd:[12,22],co:2,code:[2,6,8,13,15,28,29],collect:[1,2,3,4],color:[8,30],colour:8,column:23,com:[8,12,13,28,30],come:2,command:[1,2,11,21,22,26,28],common:[1,2,5,7,10,25,26],compact:15,compar:15,compat:[1,13],complement:[2,4],complet:[1,6],complex:1,compliant:15,compress:[2,13,25,26],compress_dir:[1,26],compress_fil:[1,26],compresslevel:26,concaten:22,conceal:30,condit:[2,8,30],conf:0,connect:[2,30],consist:[6,15],construct:14,constructor:[7,8,15],contain:[0,2,15,25],content:[0,2,3],context:[1,2,13,15,21,29],contract:[2,11,30],contribut:1,control:15,convert:[1,7,15,23,24],copi:[1,2,6,12,26,29,30],copy_from_current_on_ent:29,copy_r:[1,26],copy_to_current_on_exit:29,copyright:[2,30],copytre:26,core:8,correct:26,correctli:15,cp:26,cprint:30,cpu:8,cpu_count:8,cpython:12,creat:[1,2,6,7,11,19,21,26,27,29],create_symbolic_link:29,creation:29,cross:13,crucial:6,current:[1,2,13,15,22,29],currsiz:11,custom:15,cyan:30,d:[2,6,15,18,24],dai:15,damag:[2,30],dark:30,data:[2,11,13,23],databas:[6,15],datatyp:15,datetim:[1,15,18],davidwaroqui:1,deal:[2,13,30],debug:[11,16],decim:15,decod:[1,15,18],decompress:26,decompress_dir:[1,26],decompress_fil:[1,26],decor:[1,7,8,11,16],def:[2,7,8,11,12,15],defaultdict:[1,6],defin:[11,15],delai:13,delet:[13,26,29],depend:8,deprec:[1,8],deprecationwarn:8,descript:1,descriptor:[11,13],deseri:[15,18],design:[2,4,7],design_pattern:[1,2,3,4],dest:2,destin:26,detect:[1,8,25,26],determin:[2,13,15],determinist:6,dev:[1,2,3,4,7],develop:[2,8,30],development:8,diago:14,diagon:14,dict2namedtupl:6,dict:[1,2,6,7,15,18,24],dictionari:[6,7,15],differ:[1,11,26,28],difficult:2,dir:[22,29],directli:25,directori:[1,2,21,22,26,29],disabl:11,displai:[8,23],distinct:11,distribut:[2,30],divisor:10,do_someth:[21,29],do_something_els:11,do_stuff:11,doc:[0,1,5],document:[0,2,6,30],doe:[1,6,7,13,15,21,26,29],doesn:13,domain:12,don:6,done:[22,29],draw_tre:23,drawn:23,driv:0,drop:1,dst:26,dtype:1,duck:27,due:28,dump:[15,25],dumper:1,dumpfn:[1,25],dure:[15,29],dynam:[13,15],e0:14,e1:14,e:[2,6,8,12,13,15,21,22,24,26,29],e_i:14,e_j:14,each:[7,9,13,23,24,27],easi:9,effect:[6,29],effici:[1,2,7,13],either:[13,15],element:[14,15],elimin:15,els:14,empti:12,en:11,enabl:28,enable_log:16,encod:[1,15,18,23],encount:15,end:[8,13,16,29],energi:24,ensur:[1,7,15],ensure_ascii:15,entri:[6,23],equal:5,equival:[15,26],error:[8,11,13,15,28],error_messag:11,escap:15,especi:[11,24],essenti:15,etc:[1,6,8,12,22],evalu:11,evanfosmark:13,even:1,event:[2,30],everi:[13,15],exactli:5,exampl:[2,4,6,8,11,15,22,27,28,29,30],exce:[12,13],except:[8,11,13,15,21],exception_tupl:11,exclud:[14,22],exclude_dir:22,exclus:22,execut:[2,11,22,28],execute_code_using_fil:2,exist:[0,1,8,21,22,29],explicitli:1,express:[2,8,24,30],ext:22,extens:[1,22,25,26],extract:6,f:[2,11,19],fabric:[1,2,21],fact:8,fail:15,fake:7,fals:[8,11,12,14,15,23,24,26,29],fasetr:1,fashion:21,faster:[1,13],favor:1,fcntl:13,featur:[2,11,15],feel:[2,12],field:1,file:[1,2,4,7,11,13,22,23,24,25,26,27,29,30],file_nam:13,filelock:[1,13],filelockexcept:13,filenam:[2,9,13,22,24,25],filepath:26,fill:27,filter:[8,9],find:[5,8,12,15,22],find_ext:22,find_g:5,find_gt:5,find_l:5,find_lt:5,find_top_pyfil:12,finetun:15,first:[1,8,11],fit:[2,30],fix:1,flask:0,flatten:15,fmt:1,fn:25,fnmatch:[2,3,4],folder:[0,15,26],follow:[0,2,8,15,24,26,29,30],follow_symlink:26,foo:[6,9,11],forai:2,forc:27,fork:2,form:[15,24,27],format:[1,8,12,15,25,30],forum:2,forward:13,found:[2,15,22],fracci:1,fraction:[1,2,3,4],frame:[11,12],framework:2,free:[2,12,30],from:[1,2,5,6,8,11,12,13,14,15,22,23,25,26,29,30],from_dict:[1,15],frozen:2,frozenattrdict:6,frozendict:[1,2,6],frozenset:6,full:22,full_path_to_python:22,fulli:15,func:[11,12,19],functool:[1,2,3,4],furnish:[2,30],further:[1,2],futurewarn:[1,8],g:[1,6,8,13,15,21,22,24,29],gcd:[1,10],gcd_float:10,gener:[13,14,15,29],german:13,get:[12,13,15],get_ncpu:[1,8],get_open_fd:13,gist:[12,28],git:0,github:[2,12,28],given:[11,12,14,15,20,22,24,27,29],gmail:30,grant:[2,30],great:2,greater:5,greatest:10,green:30,grep:24,grow:11,guarante:15,guid:0,gz:[2,25,26],gzip:[1,2,13,25,26],gzip_dir:26,gzipfil:26,ha:[1,2,13,15,28],halt:12,handl:[1,27,29],handle_timeout:11,happen:29,hash:15,hashabl:[7,11],have:[2,7,11,23,26],height:12,hello:[6,9,11,27,30],help:[1,12,24],helper:6,henc:6,herebi:[2,30],hetting:13,hi:0,hidden:22,highli:2,highlight:30,hint:15,hit:11,holder:[2,30],home:15,hook:8,hook_typ:8,hopefulli:2,how:[2,5,8,12],howev:[2,6,11,29],html:5,html_theme:0,html_theme_path:0,http:[5,8,11,12,13,23,28],i:[2,8,12,14,24,26,29],ignor:15,ij:14,ilotri:14,imap:19,imap_tqdm:19,immut:[2,7],implement:[1,2,4,8,15,23,25,26,29],implementat:13,impli:[2,30],importerror:8,improv:[1,8,29],includ:[2,4,15,22,30],include_dir:22,incom:15,incompat:1,indent:[15,27],index:[2,5,24],infin:15,infinit:[1,14,15],info:8,inform:12,inherit:[2,6,15],init:1,initi:[1,9,12,16,29],input:[15,27,29],input_fil:2,insensit:25,insert:[5,15],insid:15,inspect:[1,2,3,4],inspir:[1,2,21],inst:11,instal:[8,25],install_excepthook:8,instanc:[2,7,12],instanti:6,instead:[1,15,25],integ:15,intellig:13,intend:0,interact:6,interfac:9,invalid:[11,15],invert:1,involv:13,io:[1,2,3,4],ipython:[6,8],is_str:27,issu:[2,8],item:[5,6,14,15,17],item_separ:15,iter:[14,19,23],iterator_from_slic:14,itertool:[1,2,3,4],its:[6,15,23],itself:22,iuptri:14,j:14,javascript:[1,15],jcollado:28,jsanit:[1,15],json:[1,2,3,4,18,25],json_str:15,jsondecod:15,jsonencod:15,just:[18,26,29],ka:8,kei:[6,15,24],kenneth:0,kevin:13,key1:24,key2:24,key_separ:15,keyerror:[11,20],keyword:[1,6,7,8,11,15,28],kill:28,kind:[2,30],kirpit:28,klass:7,konstantin:30,kr:0,kr_small:0,kwarg:[1,2,6,8,13,15,19,21,25,28,30],lab:2,lambda:23,languag:2,larg:[0,1,2,13,24],larger:13,latter:1,layer:2,lazi:[1,11],lazy_properti:[1,11],lcm:10,lead:1,least:[11,13,24],least_recently_us:11,leftmost:5,lepa:30,less:[1,5],level:[12,15,16,26],liabil:[2,30],liabl:[2,30],librari:[0,2,4,5,16],libyaml:1,like:[1,2,4,6,7,13,14,15,23,25,26,27],limit:[1,2,11,30],line:[2,11,13,26,27],lineno:24,link:29,linux:8,list:[5,9,11,12,14,15,22,23,27],list_str:27,littl:7,live:12,load:[1,15,25],loader:1,loadf:1,loadfn:[1,25],locat:[5,22],lock:13,locker:13,lockfil:13,log:[3,4],logger:16,loglevel:16,look:2,lookup:5,loop:1,lot:1,low:15,lower:14,lowest:10,lru:11,lru_cach:[1,11],m:6,m_file:13,magenta:30,mai:[11,25],main:[11,16],majver:8,make:[1,2,7,8],make_arch:26,make_bann:27,makedir:21,makedirs_p:21,manag:[1,13,29],mani:[1,2,4,7,8,12],map:[6,13],mark:[8,27],marque:[1,27],match:[9,11,22,24],match_mod:22,mate:14,materi:2,math:[1,2,3,4,10],matrix:14,matteo:1,max_mem:13,maximum:13,maxsiz:11,me:12,mean:12,meant:8,mechan:13,member:[6,15],memori:[6,13],merchant:[2,30],mere:15,merg:[2,30],messag:[1,8,11],method:[1,2,6,8,11,12,13,15,16,22,26,29],minor:1,mirror:2,misc:1,miss:[2,4,11],mit:2,mitsuhiko:0,mix:15,mkdir:21,mkhorton:1,mmap:13,mode:[8,23,26],modif:13,modifi:[2,6,30],modul:[1,2,3],mongodb:[6,15],mongodict:[1,6],monti:1,montydecod:[1,15],montyencod:[1,15],more:[1,2,4,8],most:[0,2,15],mostli:26,mount:1,move:15,mpk:[1,25],msg:27,msgpack:[1,2,3,4,25],mson:[1,15],msonabl:[1,15],msonclass:15,msonerror:15,msvcrt:13,mty:2,much:[1,13,29],multipl:10,multiprocess:[2,3,4,8],must:[2,11,15,23,25],mutabl:7,mutual:22,my:[2,12,21],myfil:2,mysingleton:7,n:[14,15,17],name:[1,6,9,11,12,13,15,18,22,23,29],namedtupl:6,namespac:[1,6],nan:15,nc:9,ncpu:8,ncr:17,necessari:8,need:[2,6,15,27,29],neg:15,nest:[1,6,15],never:8,new_class:15,new_modul:15,newlin:15,node:23,non:[1,7,15,27],none:[5,8,11,13,14,15,22,28,29,30],noninfring:[2,30],note:[2,7,8,11,15,24,26],noth:[7,29],notic:[2,30],notoverwritabledict:1,now:[1,18],npr:17,nproc:19,nullfil:[1,7],nullstream:[1,7],num_str:15,number:[8,10,13,15,17,19,23,24,27],numer:10,numpi:[1,15,18],o:15,obj:[6,15,18,25],object:[1,2,6,7,8,9,11,12,13,14,15,23,25,28,29],object_hook:[1,15,18],object_pairs_hook:15,objectid:[1,15],obtain:[2,30],obviou:2,obvious:11,offici:1,ofr:1,often:2,ok:15,old:[8,15],old_class:15,old_modul:15,on_blu:30,on_color:30,on_cyan:30,on_green:30,on_grei:30,on_magenta:30,on_r:30,on_whit:30,on_yellow:30,one:[0,2,6,9,11,13,15,16,24,27],onli:[1,7,8,11,15,26],op:[7,20],open:[2,13],oper:[2,3,4,13,29],operator_from_str:20,optim:8,option:[8,11,13,15,26,28,29],order:[6,13,15],org:[5,11,23],organ:2,origin:[1,8,11,15,21,26,29],os:[0,1,2,3,4],other:[2,29,30],otherwis:[2,6,15,25,27,30],our:2,out:[0,2,7,8,23,30],output:[8,11,15,22,23,27,28,29,30],over:[19,23],overflowerror:15,overrid:15,own:15,p:[12,21],packag:[2,3],packb:18,pad:[23,27],page:[0,2],pair:15,param:7,paramet:[6,8,9,10,11,12,13,14,15,16,17,19,21,22,23,24,25,26,27,28,29],parent:26,parse_const:15,parse_float:15,parse_int:15,parser:[1,15,16],part:[2,4],particular:[2,22,30],particularli:[6,8],pass:[1,2,7,8,11,12,28,29],passthrough:[6,19],past:12,path:[0,1,2,3,4,12,13,15,21,25,26,29],pathlib:[13,25],pattern:[2,4,7,9,15,24],pdf:[9,22],pep8:6,per:2,perform:[6,15,21,29],permiss:[2,30],permit:[2,6,30],permut:[7,17],person:[2,30],peter:13,physic:8,ping:8,pip:2,place:15,platform:13,pleas:24,plu:15,point:5,pollut:6,pool:19,popen:28,portion:[2,13,30],posit:7,possibl:[2,8,13,29],post:24,postprocess:24,power:24,pprint:[2,3,4,14],pprint_tabl:23,pre:16,prepar:13,prepend:11,present:[1,8,26],pretti:[15,23],prevent:[1,15],primari:13,print:[2,8,14,15,23,27,28,30],prior:1,prioriti:15,privat:1,problem:[2,6],process:[2,12,13,19,24,28],process_decod:15,prof:11,prof_fil:11,prof_main:11,profil:11,program:[2,8,11],progress:19,project:0,proper:[1,15,27],properti:[11,15],protocol:[1,15,18],provid:[1,2,6,8,9,15,29,30],ps:22,publish:[2,30],purpos:[2,8,11,30],put:[0,15],py27:1,py3:1,py3k:1,py:[0,1,8,11],pydant:[1,15],pymatgen:[1,15],pypi:23,python:[1,4,5,6,8,11,12,13,15,22,23,26,27,29],pyyaml:1,qualifi:15,question:[8,12,28],quirk:2,r:[13,15,17,24,26],rais:[8,11,13,15,20,21],rang:[14,15],raymond:13,re:[2,3,4],reachabl:12,read:[1,2,13,24,26],readlin:13,real:[8,26],recent:11,recip:13,recogn:1,recommend:2,recurs:[1,6,12,15,26,29],red:30,redefin:6,redirect:15,refactor:1,refer:15,regener:15,regex:24,regrep:24,regress:15,regular:24,reitz:0,rel:13,relat:0,releas:[1,2,13],reli:[1,13],remov:[1,23,26,27],remove_non_ascii:27,replac:[1,8],repo:2,repositori:0,repres:[6,9],represent:[1,15],requir:[1,8,15],resid:2,resourc:2,restrict:[2,30],result:[7,11,15,19,23,25],retain:26,retcod:28,retriev:23,return_if_rais:11,return_node_if_rais:11,return_none_if_rais:11,return_none_if_value_error:11,retval_if_exc:11,reusabl:2,revers:[1,13,24,30],reverse_readfil:[1,13],reverse_readlin:[1,2,13],revert:1,rewritten:1,rid:13,right:[2,18,30],rightmost:5,rm:26,rmtree:26,robust:1,root:[1,2,12,22,23,29],rootpath:29,row:23,rpc:15,rstrip:23,rt:1,ruamel:[1,25],rubric:11,run:[1,8,19,28],runtim:8,s:[0,2,6,8,13,14,15,18,24,26,27,28,29],safe:21,same:[2,11,22,23],sanit:15,scale:8,scientif:2,scipi:8,scr_link:29,scratch:[1,29],scratch_link:29,scratchdir:[1,29],script:[11,12],se:[11,13],search:[2,5,22],second:[11,13,28],see:[8,11],seek:13,select:[16,22],self:[2,11,12,15,28],sell:[2,30],sens:[7,26],sensibl:15,sep:9,separ:[1,9,11,15,28],sequenc:[10,15],serial:[1,2,3,4,15,18],serializ:[1,15],seriou:6,serv:2,set:[2,7,11,13,15],sever:[1,2,8],shall:[2,30],shell:[9,28],shorten:1,should:[1,6,7,13,14,15,22],show:5,shown:8,shutil:[1,2,3,4,29],shyamd:1,sigma:24,signal:11,signatur:1,signum:11,silenc:8,similar:[13,26],similarli:15,simpl:[1,2,16,29],simpli:[15,23],sinc:6,singl:27,singleton:[2,4,7],singli:26,site:2,situat:7,size:[13,14],skip:[12,15],skipkei:15,sleep:28,slice:14,slower:13,small:[0,13],smaller:13,so:[2,7,10,12,13,15,30],softwar:[2,30],solut:[2,28],solv:2,some:[2,7,15,21,29],someon:8,sort:[5,11,15],sort_kei:15,sort_stat:11,sortbi:11,sourc:[5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30],spec:1,special:1,specif:[1,2,15],specifi:[1,8,12,13,15,16,29],speed:1,src:[2,26],stack:12,stackoverflow:[8,12,28],standard:[0,2,4,5,6,13,21,26],start:[22,29],statement:13,statist:11,stderr:28,stdout:[23,28],still:[8,26],stop:14,str2unicod:1,str:[8,9,11,13,15,22,23,24,25,26,27,29],stream:[7,13,23],strict:15,string:[1,2,3,4,7,9,12,15,20,22,23],stub:18,style:[2,8,9,26],sub:29,subclass:[11,12],subdirectori:29,subject:[2,30],sublicens:[2,30],submit:2,submodul:[0,2,3],subpackag:[2,3],subprocess:[1,2,3,4],substanti:[2,30],success:14,successfulli:8,suit:[2,13],supplement:2,supplementari:[2,4],support:[1,2,4,9,11,13,15,18,25,27],surprisingli:26,sy:0,symbol:29,symlink:[1,26],syntax:2,system:[8,11],t:[6,13,15],tab:[6,15],tabl:23,take:[1,15],taken:[5,8,12,13],tar:26,tarfil:26,task:[2,5,21],team:30,techtonik:12,temp:29,tempdir:1,tempfil:[1,2,3,4],temporari:[11,29],temporarili:21,temporarydirectori:29,term:2,termcolor:[2,3,4],termin:[24,30],terminate_on_match:24,test:[1,15,27],text:[13,23,27,30],text_str:23,textiowrapp:23,than:[1,5,13],them:[5,15,26],theme:0,themselv:7,thi:[0,1,2,6,7,8,9,11,12,13,15,16,18,25,26,29,30],thing:15,those:15,though:[15,29],thread:[1,21,28],through:[1,29],thrown:15,time:[8,11],timeout:[1,11,13,28],timeouterror:11,to_dict:[1,15],to_json:15,token:9,tol:10,toler:10,too:1,tool:[1,2,14,16],top:22,tort:[2,30],total:17,traceback:8,tradit:6,trail:23,transform:5,transpar:[2,4,13,27],travi:1,treat:11,tree:[1,6,22,23,26],tri:8,triangl:14,tricki:5,truli:29,tupl:[6,7,11,15],turn:23,two:[2,11,15,23],txt:[1,9],type:[1,2,11,15,22,24,25,27],typeerror:15,typic:2,ultratb:8,unchang:[22,27],uncompress:26,unction:19,under:2,underli:11,underlin:30,underscor:1,understand:15,unicod:[1,27],unicode2str:[1,27],union:13,uniqu:[2,29],unittest:1,unix:[2,9,11,26],unless:[8,22],unlik:2,unmodifi:22,unpackb:18,unsafe_hash:15,until:13,unzip:22,updat:[1,6,8],upper:14,urban:1,us:[0,1,2,4,5,6,7,8,9,10,11,12,13,15,16,18,20,22,23,24,26,27,29,30],usag:[6,7,11,15,18],use_scipi:8,user:[8,12,29],userspac:8,utf:[1,23],util:[1,2,4,15,18,19,26,29],uuid:1,v2:15,v:15,valid:[15,26],validate_monti:15,valu:[5,11,15],valueerror:[11,15],variabl:[1,12],varidac:1,variou:2,ve:24,verbos:8,veri:[0,7,13],version:[1,8,15,22,24],versu:13,via:22,view:11,violat:[6,11],virtual:[2,8],visit:2,volvox:30,w:[9,13,23],wai:[1,2,6,21,29],wait:28,warn:[1,8],warranti:[2,30],wb:2,we:16,welcom:2,well:[1,15],what:2,whatev:26,when:[1,8,13,15,23,24,27,29],where:[2,7,11,13,16],whether:[2,24,29,30],which:[1,2,6,11,13,15,22,26,29],white:30,whitespac:15,who:12,whom:[2,30],whose:22,width:27,wiki:11,wikipedia:11,wildcard:[9,22],window:1,with_ind:14,withespac:23,within:22,without:[2,11,22,30],work:[2,11,13,21,26,29],workspac:29,world:30,would:[6,15],wrap:13,wrapper:[1,19,21],write:[2,7,13,16],www:13,x:[5,6,14],yaml:[1,15,25],yee:8,yellow:30,yet:[1,13],yield:[13,14],yml:[1,25],you:[0,6,8,13,15],your:[0,15],z:[25,26],zcat:26,zgrep:2,zip:[1,2,4,22,26],zless:[2,26],zopen:[1,2,13],zpath:[1,22]},titles:["krTheme Sphinx Style","Change log","Monty: Python Made Even Easier","monty","monty package","monty.bisect module","monty.collections module","monty.design_patterns module","monty.dev module","monty.fnmatch module","monty.fractions module","monty.functools module","monty.inspect module","monty.io module","monty.itertools module","monty.json module","monty.logging module","monty.math module","monty.msgpack module","monty.multiprocessing module","monty.operator module","monty.os package","monty.os.path module","monty.pprint module","monty.re module","monty.serialization module","monty.shutil module","monty.string module","monty.subprocess module","monty.tempfile module","monty.termcolor module"],titleterms:{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,api:2,bisect:5,chang:[1,2],collect:6,content:[4,21],contribut:2,design_pattern:7,dev:8,doc:2,easier:2,even:2,fnmatch:9,fraction:10,functool:11,indic:2,inspect:12,instal:2,io:13,itertool:14,json:15,krtheme:0,licens:2,log:[1,2,16],made:2,math:17,modul:[4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30],monti:[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30],msgpack:18,multiprocess:19,oper:20,os:[21,22],packag:[4,21],path:22,pprint:23,python:2,re:24,serial:25,shutil:26,sphinx:0,string:27,style:0,submodul:[4,21],subpackag:4,subprocess:28,tabl:2,tempfil:29,termcolor:30,usag:2,v0:1,v1:1,v2021:1,v2:1,v3:1,v4:1}}) \ No newline at end of file +Search.setIndex({docnames:["_themes/README","changelog","index","modules","monty","monty.bisect","monty.collections","monty.design_patterns","monty.dev","monty.fnmatch","monty.fractions","monty.functools","monty.inspect","monty.io","monty.itertools","monty.json","monty.logging","monty.math","monty.msgpack","monty.multiprocessing","monty.operator","monty.os","monty.os.path","monty.pprint","monty.re","monty.serialization","monty.shutil","monty.string","monty.subprocess","monty.tempfile","monty.termcolor"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,"sphinx.ext.viewcode":1,sphinx:56},filenames:["_themes/README.rst","changelog.rst","index.rst","modules.rst","monty.rst","monty.bisect.rst","monty.collections.rst","monty.design_patterns.rst","monty.dev.rst","monty.fnmatch.rst","monty.fractions.rst","monty.functools.rst","monty.inspect.rst","monty.io.rst","monty.itertools.rst","monty.json.rst","monty.logging.rst","monty.math.rst","monty.msgpack.rst","monty.multiprocessing.rst","monty.operator.rst","monty.os.rst","monty.os.path.rst","monty.pprint.rst","monty.re.rst","monty.serialization.rst","monty.shutil.rst","monty.string.rst","monty.subprocess.rst","monty.tempfile.rst","monty.termcolor.rst"],objects:{"":{monty:[4,0,0,"-"]},"monty.bisect":{find_ge:[5,1,1,""],find_gt:[5,1,1,""],find_le:[5,1,1,""],find_lt:[5,1,1,""],index:[5,1,1,""]},"monty.collections":{AttrDict:[6,2,1,""],FrozenAttrDict:[6,2,1,""],MongoDict:[6,2,1,""],Namespace:[6,2,1,""],dict2namedtuple:[6,1,1,""],frozendict:[6,2,1,""],tree:[6,1,1,""]},"monty.collections.AttrDict":{copy:[6,3,1,""]},"monty.collections.Namespace":{update:[6,3,1,""]},"monty.collections.frozendict":{update:[6,3,1,""]},"monty.design_patterns":{NullFile:[7,2,1,""],NullStream:[7,2,1,""],cached_class:[7,1,1,""],singleton:[7,1,1,""]},"monty.design_patterns.NullStream":{write:[7,3,1,""]},"monty.dev":{deprecated:[8,1,1,""],get_ncpus:[8,1,1,""],install_excepthook:[8,1,1,""],requires:[8,2,1,""]},"monty.fnmatch":{WildCard:[9,2,1,""]},"monty.fnmatch.WildCard":{filter:[9,3,1,""],match:[9,3,1,""]},"monty.fractions":{gcd:[10,1,1,""],gcd_float:[10,1,1,""],lcm:[10,1,1,""]},"monty.functools":{TimeoutError:[11,4,1,""],lazy_property:[11,2,1,""],lru_cache:[11,1,1,""],prof_main:[11,1,1,""],return_if_raise:[11,1,1,""],return_none_if_raise:[11,1,1,""],timeout:[11,2,1,""]},"monty.functools.lazy_property":{invalidate:[11,3,1,""]},"monty.functools.timeout":{handle_timeout:[11,3,1,""]},"monty.inspect":{all_subclasses:[12,1,1,""],caller_name:[12,1,1,""],find_top_pyfile:[12,1,1,""],initializer:[12,1,1,""]},"monty.io":{FileLock:[13,2,1,""],FileLockException:[13,4,1,""],get_open_fds:[13,1,1,""],reverse_readfile:[13,1,1,""],reverse_readline:[13,1,1,""],zopen:[13,1,1,""]},"monty.io.FileLock":{Error:[13,5,1,""],acquire:[13,3,1,""],release:[13,3,1,""]},"monty.itertools":{chunks:[14,1,1,""],ilotri:[14,1,1,""],iterator_from_slice:[14,1,1,""],iuptri:[14,1,1,""]},"monty.json":{MSONError:[15,4,1,""],MSONable:[15,2,1,""],MontyDecoder:[15,2,1,""],MontyEncoder:[15,2,1,""],jsanitize:[15,1,1,""]},"monty.json.MSONable":{REDIRECT:[15,5,1,""],as_dict:[15,3,1,""],from_dict:[15,3,1,""],to_json:[15,3,1,""],unsafe_hash:[15,3,1,""],validate_monty:[15,3,1,""]},"monty.json.MontyDecoder":{decode:[15,3,1,""],process_decoded:[15,3,1,""]},"monty.json.MontyEncoder":{"default":[15,3,1,""]},"monty.logging":{enable_logging:[16,1,1,""],logged:[16,1,1,""]},"monty.math":{nCr:[17,1,1,""],nPr:[17,1,1,""]},"monty.msgpack":{"default":[18,1,1,""],object_hook:[18,1,1,""]},"monty.multiprocessing":{imap_tqdm:[19,1,1,""]},"monty.operator":{operator_from_str:[20,1,1,""]},"monty.os":{cd:[21,1,1,""],makedirs_p:[21,1,1,""],path:[22,0,0,"-"]},"monty.os.path":{find_exts:[22,1,1,""],which:[22,1,1,""],zpath:[22,1,1,""]},"monty.pprint":{draw_tree:[23,1,1,""],pprint_table:[23,1,1,""]},"monty.re":{regrep:[24,1,1,""]},"monty.serialization":{dumpfn:[25,1,1,""],loadfn:[25,1,1,""]},"monty.shutil":{compress_dir:[26,1,1,""],compress_file:[26,1,1,""],copy_r:[26,1,1,""],decompress_dir:[26,1,1,""],decompress_file:[26,1,1,""],gzip_dir:[26,1,1,""],remove:[26,1,1,""]},"monty.string":{boxed:[27,1,1,""],indent:[27,1,1,""],is_string:[27,1,1,""],list_strings:[27,1,1,""],make_banner:[27,1,1,""],marquee:[27,1,1,""],remove_non_ascii:[27,1,1,""],unicode2str:[27,1,1,""]},"monty.subprocess":{Command:[28,2,1,""]},"monty.subprocess.Command":{error:[28,5,1,""],killed:[28,5,1,""],output:[28,5,1,""],retcode:[28,5,1,""],run:[28,3,1,""]},"monty.tempfile":{ScratchDir:[29,2,1,""]},"monty.tempfile.ScratchDir":{SCR_LINK:[29,5,1,""]},"monty.termcolor":{colored:[30,1,1,""],cprint:[30,1,1,""]},monty:{bisect:[5,0,0,"-"],collections:[6,0,0,"-"],design_patterns:[7,0,0,"-"],dev:[8,0,0,"-"],fnmatch:[9,0,0,"-"],fractions:[10,0,0,"-"],functools:[11,0,0,"-"],inspect:[12,0,0,"-"],io:[13,0,0,"-"],itertools:[14,0,0,"-"],json:[15,0,0,"-"],logging:[16,0,0,"-"],math:[17,0,0,"-"],msgpack:[18,0,0,"-"],multiprocessing:[19,0,0,"-"],operator:[20,0,0,"-"],os:[21,0,0,"-"],pprint:[23,0,0,"-"],re:[24,0,0,"-"],serialization:[25,0,0,"-"],shutil:[26,0,0,"-"],string:[27,0,0,"-"],subprocess:[28,0,0,"-"],tempfile:[29,0,0,"-"],termcolor:[30,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","function","Python function"],"2":["py","class","Python class"],"3":["py","method","Python method"],"4":["py","exception","Python exception"],"5":["py","attribute","Python attribute"]},objtypes:{"0":"py:module","1":"py:function","2":"py:class","3":"py:method","4":"py:exception","5":"py:attribute"},terms:{"0":[6,8,11,13,14,15,24],"01":13,"05":13,"08":10,"1":[2,6,8,11,12,14,15,26,28],"10":[13,14,16],"1006289":8,"11":14,"1191374":28,"12":14,"128":11,"13":14,"1306188":28,"1389180":12,"14":14,"15":14,"16":14,"17":14,"18":14,"19":14,"1e":10,"2":[2,5,6,8,11,12,14,26,27,28,29],"20":14,"2008":30,"2009":13,"2011":30,"2014":2,"21":14,"2151727":12,"22":14,"23":14,"24":14,"25":14,"2x":13,"3":[11,14,26,27,29],"31":15,"4":14,"40":27,"4000000":13,"4096":13,"439045":13,"4825933":28,"5":[14,27],"6":[14,15,26],"7":[2,8,14],"78":27,"8":[14,23],"9":[14,26],"abstract":2,"case":[1,13,25],"class":[1,2,6,7,8,9,11,12,13,15,24,26,28,29],"default":[1,8,11,13,15,16,18,23,24,26,27,29],"do":[2,15,29,30],"enum":1,"final":27,"float":[10,15],"function":[1,2,4,5,6,8,10,11,12,13,14,15,16,17,20,21,23,24,26,27,29,30],"import":[2,8,14],"int":[10,11,13,15,17,19,26,27],"long":1,"new":[1,2,11,15],"null":7,"public":12,"return":[1,6,8,9,10,11,12,13,14,15,17,19,20,21,22,23,24,25,27,28],"throw":13,"true":[8,9,11,12,14,15,23,27,28],"try":[1,8,11,15,29],"while":12,A:[1,2,6,7,8,11,13,14,15,19,21,23,24,26,27,30],AND:[2,30],AS:[2,30],BE:[2,30],BUT:[2,30],By:15,FOR:[2,30],For:[7,8,11,13,15,18,24,25,26],IN:[2,30],IS:[2,30],If:[1,8,11,13,14,15,16,22,29],In:[2,8],It:[0,2,6,13,15,16,30],NO:[2,30],NOT:[2,30],OF:[2,30],OR:[2,30],One:11,THE:[2,30],TO:[2,30],The:[0,1,2,5,6,7,8,11,13,14,15,18,21,23,25,26,27,29,30],There:[2,29],To:[0,15],WITH:[2,30],With:29,_:22,__class__:15,__init__:[2,7,12,15],__module__:15,__name__:15,__wrapped__:11,_argnam:15,_c:15,_d:15,_io:23,_name:11,_theme:0,abc:6,about:12,abov:[2,5,30],absolut:22,abspath:[0,22],accept:[11,30],access:[1,6,11,23],accord:11,accordingli:8,acquir:13,action:[2,29,30],activ:11,activest:13,ad:[1,27],add:[0,1,2,6,15,16],addit:[1,5,6,12,14,17,20,27],additon:1,addon:0,adopt:2,after:27,afterward:21,again:13,aim:26,alex:1,alia:13,align:23,all:[2,12,15,22,23,24,26,27,29,30],all_subclass:12,allow:[1,2,6,11,13,15,16,29],allow_bson:15,allow_nan:15,almost:2,alpha:1,alreadi:[8,15,21,29],also:[0,1,2,6,11,15,25],altern:0,alwai:[2,6,7,8,27],amount:[13,27],an:[1,2,8,9,11,12,13,14,15,16,19,21,22,23,26,30],analyz:6,ani:[2,7,15,25,30],anoth:[8,13,15],another_method:11,ansii:30,api:15,append:0,appropri:[2,11],ar:[1,2,4,5,6,7,8,11,13,15,16,22,23,26,28,29],archiv:26,arg:[1,2,6,7,11,13,15,19,25,27],argnam:15,argument:[6,7,8,11,15,16,19,23,28,30],aris:[2,30],around:[13,19],arrai:[1,15,18],as_dict:[15,18],ascii:[1,15,27],asciitre:23,assert:6,assign:12,associ:[2,7,15,20,30],assum:25,astrand:13,atol:5,attempt:[8,13,15],attr:30,attrdict:6,attribut:[6,11,15,30],attributeerror:11,augment:13,author:[2,30],auto:1,automat:[12,13,15,25,26,29],avail:[27,30],avoid:7,awkward:5,b:[2,6,15],back:[2,13,29],backport:[1,11],backward:[1,13],bad:1,banner:27,bar:[6,9,19],base:[1,2,6,7,8,9,11,13,15,22,23,24,28,29],basenam:22,basi:15,batteri:2,becaus:[6,7],becom:11,been:28,befor:27,begin:16,behav:[7,27],behavior:[13,15],behaviour:6,below:[2,15],best:2,better:1,between:13,binari:1,bisect:[2,3,4],blink:30,blk_size:13,block:[11,13],blue:30,bold:30,bool:[8,15,24,26,29],both:1,bound:11,box:27,bson:[1,15],buffer:[13,23],bug:1,build:29,built:[1,29],bz2:[1,2,13,25,26],bzip2:[2,26],bzip:13,c:[2,6,15,30],cach:[2,7,11],cache_algorithm:11,cache_clear:11,cache_info:11,cached_class:[2,4,7],calcul:17,call:[1,8,11,12,13,15,16,23,28],callabl:[8,11,19,24],caller:12,caller_nam:12,can:[0,5,7,8,10,11,13,15,22,26],cannot:[6,8],categori:[1,8],cater:8,caus:[1,15],cd:[1,2,21],cdumper:1,cendio:13,center:[1,27],certain:11,cgitb:8,ch:27,chang:[6,8,21,24,29],charact:[1,15,27],charg:[2,30],check:[0,1,8,13,15,21],check_circular:15,child_it:23,children:23,choic:8,choos:[8,17],chosen:2,chunk:14,circular:15,cl:[7,12,15],claim:[2,30],classmethod:[11,15],clean:15,cleanup:[1,29],clear:11,clearer:18,clegaspi:1,cloader:1,cluster:8,cmd:[12,22],co:2,code:[2,6,8,13,15,28,29],collect:[1,2,3,4],color:[8,30],colour:8,column:23,com:[8,12,13,28,30],come:2,command:[1,2,11,21,22,26,28],common:[1,2,5,7,10,25,26],compact:15,compar:15,compat:[1,13],complement:[2,4],complet:[1,6],complex:1,compliant:15,compress:[2,13,25,26],compress_dir:[1,26],compress_fil:[1,26],compresslevel:26,concaten:22,conceal:30,condit:[2,8,30],conf:0,connect:[2,30],consist:[6,15],construct:14,constructor:[7,8,15],contain:[0,2,15,25],content:[0,2,3],context:[1,2,13,15,21,29],contract:[2,11,30],contribut:1,control:15,convert:[1,7,15,23,24],copi:[1,2,6,12,26,29,30],copy_from_current_on_ent:29,copy_r:[1,26],copy_to_current_on_exit:29,copyright:[2,30],copytre:26,core:8,correct:26,correctli:15,cp:26,cprint:30,cpu:8,cpu_count:8,cpython:12,creat:[1,2,6,7,11,19,21,26,27,29],create_symbolic_link:29,creation:29,cross:13,crucial:6,current:[1,2,13,15,22,29],currsiz:11,custom:15,cyan:30,d:[2,6,15,18,24],dai:15,damag:[2,30],dark:30,data:[2,11,13,23],databas:[6,15],datatyp:15,datetim:[1,15,18],davidwaroqui:1,deal:[2,13,30],debug:[11,16],decim:15,decod:[1,15,18],decompress:26,decompress_dir:[1,26],decompress_fil:[1,26],decor:[1,7,8,11,16],def:[2,7,8,11,12,15],defaultdict:[1,6],defin:[11,15],delai:13,delet:[13,26,29],depend:8,deprec:[1,8],deprecationwarn:8,descript:1,descriptor:[11,13],deseri:[15,18],design:[2,4,7],design_pattern:[1,2,3,4],dest:2,destin:26,detect:[1,8,25,26],determin:[2,13,15],determinist:6,dev:[1,2,3,4,7],develop:[2,8,30],development:8,diago:14,diagon:14,dict2namedtupl:6,dict:[1,2,6,7,15,18,24],dictionari:[6,7,15],differ:[1,11,26,28],difficult:2,dir:[22,29],directli:25,directori:[1,2,21,22,26,29],disabl:11,displai:[8,23],distinct:11,distribut:[2,30],divisor:10,do_someth:[21,29],do_something_els:11,do_stuff:11,doc:[0,1,5],document:[0,2,6,30],doe:[1,6,7,13,15,21,26,29],doesn:13,domain:12,don:6,done:[22,29],draw_tre:23,drawn:23,driv:0,drop:1,dst:26,dtype:1,duck:27,due:28,dump:[15,25],dumper:1,dumpfn:[1,25],dure:[15,29],dynam:[13,15],e0:14,e1:14,e:[2,6,8,12,13,15,21,22,24,26,29],e_i:14,e_j:14,each:[7,9,13,23,24,27],easi:9,effect:[6,29],effici:[1,2,7,13],either:[13,15],element:[14,15],elimin:15,els:14,empti:12,en:11,enabl:28,enable_log:16,encod:[1,15,18,23],encount:15,end:[8,13,16,29],energi:24,ensur:[1,7,15],ensure_ascii:15,entri:[6,23],equal:5,equival:[15,26],error:[8,11,13,15,28],error_messag:11,escap:15,especi:[11,24],essenti:15,etc:[1,6,8,12,22],evalu:11,evanfosmark:13,even:1,event:[2,30],everi:[13,15],exactli:5,exampl:[2,4,6,8,11,15,22,27,28,29,30],exce:[12,13],except:[8,11,13,15,21],exception_tupl:11,exclud:[14,22],exclude_dir:22,exclus:22,execut:[2,11,22,28],execute_code_using_fil:2,exist:[0,1,8,21,22,29],expand:1,explicitli:1,express:[2,8,24,30],ext:22,extens:[1,22,25,26],extract:6,f:[2,11,19],fabric:[1,2,21],fact:8,fail:15,fake:7,fals:[8,11,12,14,15,23,24,26,29],fasetr:1,fashion:21,faster:[1,13],favor:1,fcntl:13,featur:[2,11,15],feel:[2,12],field:1,file:[1,2,4,7,11,13,22,23,24,25,26,27,29,30],file_nam:13,filelock:[1,13],filelockexcept:13,filenam:[2,9,13,22,24,25],filepath:26,fill:27,filter:[8,9],find:[5,8,12,15,22],find_ext:22,find_g:5,find_gt:5,find_l:5,find_lt:5,find_top_pyfil:12,finetun:15,first:[1,8,11],fit:[2,30],fix:1,flask:0,flatten:15,fmt:1,fn:25,fnmatch:[2,3,4],folder:[0,15,26],follow:[0,2,8,15,24,26,29,30],follow_symlink:26,foo:[6,9,11],forai:2,forc:27,fork:2,form:[15,24,27],format:[1,8,12,15,25,30],forum:2,forward:13,found:[2,15,22],fracci:1,fraction:[1,2,3,4],frame:[11,12],framework:2,free:[2,12,30],from:[1,2,5,6,8,11,12,13,14,15,22,23,25,26,29,30],from_dict:[1,15],frozen:2,frozenattrdict:6,frozendict:[1,2,6],frozenset:6,full:22,full_path_to_python:22,fulli:15,func:[11,12,19],funciton:1,functool:[1,2,3,4],furnish:[2,30],further:[1,2],futurewarn:[1,8],g:[1,6,8,13,15,21,22,24,29],gcd:[1,10],gcd_float:10,gener:[13,14,15,29],german:13,get:[12,13,15],get_ncpu:[1,8],get_open_fd:13,gist:[12,28],git:0,github:[2,12,28],given:[11,12,14,15,20,22,24,27,29],gmail:30,grant:[2,30],great:2,greater:5,greatest:10,green:30,grep:24,grow:11,guarante:15,guid:0,gz:[2,25,26],gzip:[1,2,13,25,26],gzip_dir:26,gzipfil:26,ha:[1,2,13,15,28],halt:12,handl:[1,27,29],handle_timeout:11,happen:29,hash:15,hashabl:[7,11],have:[2,7,11,23,26],height:12,hello:[6,9,11,27,30],help:[1,12,24],helper:6,henc:6,herebi:[2,30],hetting:13,hi:0,hidden:22,highli:2,highlight:30,hint:15,hit:11,holder:[2,30],home:15,hook:8,hook_typ:8,hopefulli:2,how:[2,5,8,12],howev:[2,6,11,29],html:5,html_theme:0,html_theme_path:0,http:[5,8,11,12,13,23,28],i:[2,8,12,14,24,26,29],ignor:15,ij:14,ilotri:14,imap:19,imap_tqdm:19,immut:[2,7],implement:[1,2,4,8,15,23,25,26,29],implementat:13,impli:[2,30],importerror:8,improv:[1,8,29],includ:[2,4,15,22,30],include_dir:22,incom:15,incompat:1,indent:[15,27],index:[2,5,24],infin:15,infinit:[1,14,15],info:8,inform:12,inherit:[2,6,15],init:1,initi:[1,9,12,16,29],input:[15,27,29],input_fil:2,insensit:25,insert:[5,15],insid:15,inspect:[1,2,3,4],inspir:[1,2,21],inst:11,instal:[8,25],install_excepthook:8,instanc:[2,7,12],instanti:6,instead:[1,15,25],integ:15,intellig:13,intend:0,interact:6,interfac:9,invalid:[11,15],invert:1,involv:13,io:[1,2,3,4],ipython:[6,8],is_str:27,issu:[2,8],item:[5,6,14,15,17],item_separ:15,iter:[14,19,23],iterator_from_slic:14,itertool:[1,2,3,4],its:[6,15,23],itself:22,iuptri:14,j:14,javascript:[1,15],jcollado:28,jsanit:[1,15],json:[1,2,3,4,18,25],json_str:15,jsondecod:15,jsonencod:15,just:[18,26,29],ka:8,kei:[6,15,24],kenneth:0,kevin:13,key1:24,key2:24,key_separ:15,keyerror:[11,20],keyword:[1,6,7,8,11,15,28],kill:28,kind:[2,30],kirpit:28,klass:7,konstantin:30,kr:0,kr_small:0,kwarg:[1,2,6,8,13,15,19,21,25,28,30],lab:2,lambda:23,languag:2,larg:[0,1,2,13,24],larger:13,latter:1,layer:2,lazi:[1,11],lazy_properti:[1,11],lcm:10,lead:1,least:[11,13,24],least_recently_us:11,leftmost:5,lepa:30,less:[1,5],level:[12,15,16,26],liabil:[2,30],liabl:[2,30],librari:[0,2,4,5,16],libyaml:1,like:[1,2,4,6,7,13,14,15,23,25,26,27],limit:[1,2,11,30],line:[2,11,13,26,27],lineno:24,link:29,linux:8,list:[5,9,11,12,14,15,22,23,27],list_str:27,littl:7,live:12,load:[1,15,25],loader:1,loadf:1,loadfn:[1,25],locat:[5,22],lock:13,locker:13,lockfil:13,log:[3,4],logger:16,loglevel:16,look:2,lookup:5,loop:1,lot:1,low:15,lower:14,lowest:10,lru:11,lru_cach:[1,11],m:6,m_file:13,magenta:30,mai:[11,25],main:[11,16],majver:8,make:[1,2,7,8],make_arch:26,make_bann:27,makedir:21,makedirs_p:21,manag:[1,13,29],mani:[1,2,4,7,8,12],map:[6,13],mark:[8,27],marque:[1,27],match:[9,11,22,24],match_mod:22,mate:14,materi:2,math:[1,2,3,4,10],matrix:14,matteo:1,max_mem:13,maximum:13,maxsiz:11,me:12,mean:12,meant:8,mechan:13,member:[6,15],memori:[6,13],merchant:[2,30],mere:15,merg:[2,30],messag:[1,8,11],method:[1,2,6,8,11,12,13,15,16,22,26,29],minor:1,mirror:2,misc:1,miss:[2,4,11],mit:2,mitsuhiko:0,mix:15,mkdir:21,mkhorton:1,mmap:13,mode:[8,23,26],modif:13,modifi:[2,6,30],modul:[1,2,3],mongodb:[6,15],mongodict:[1,6],monti:1,montydecod:[1,15],montyencod:[1,15],more:[1,2,4,8],most:[0,2,15],mostli:26,mount:1,move:15,mpk:[1,25],msg:27,msgpack:[1,2,3,4,25],mson:[1,15],msonabl:[1,15],msonclass:15,msonerror:15,msvcrt:13,mty:2,much:[1,13,29],multipl:10,multiprocess:[2,3,4,8],must:[2,11,15,23,25],mutabl:7,mutual:22,my:[2,12,21],myfil:2,mysingleton:7,n:[14,15,17],name:[1,6,9,11,12,13,15,18,22,23,29],namedtupl:6,namespac:[1,6],nan:15,nc:9,ncpu:8,ncr:17,necessari:8,need:[2,6,15,27,29],neg:15,nest:[1,6,15],never:8,new_class:15,new_modul:15,newlin:15,node:23,non:[1,7,15,27],none:[5,8,11,13,14,15,22,28,29,30],noninfring:[2,30],note:[2,7,8,11,15,24,26],noth:[7,29],notic:[2,30],notoverwritabledict:1,now:[1,18],npr:17,nproc:19,nullfil:[1,7],nullstream:[1,7],num_str:15,number:[8,10,13,15,17,19,23,24,27],numer:10,numpi:[1,15,18],o:15,obj:[6,15,18,25],object:[1,2,6,7,8,9,11,12,13,14,15,23,25,28,29],object_hook:[1,15,18],object_pairs_hook:15,objectid:[1,15],obtain:[2,30],obviou:2,obvious:11,offici:1,ofr:1,often:2,ok:15,old:[8,15],old_class:15,old_modul:15,on_blu:30,on_color:30,on_cyan:30,on_green:30,on_grei:30,on_magenta:30,on_r:30,on_whit:30,on_yellow:30,one:[0,2,6,9,11,13,15,16,24,27],onli:[1,7,8,11,15,26],op:[7,20],open:[2,13],oper:[2,3,4,13,29],operator_from_str:20,optim:8,option:[8,11,13,15,26,28,29],order:[6,13,15],org:[5,11,23],organ:2,origin:[1,8,11,15,21,26,29],os:[0,1,2,3,4],other:[2,29,30],otherwis:[2,6,15,25,27,30],our:2,out:[0,2,7,8,23,30],output:[8,11,15,22,23,27,28,29,30],over:[19,23],overflowerror:15,overrid:15,own:15,p:[12,21],packag:[2,3],packb:18,pad:[23,27],page:[0,2],pair:15,param:7,paramet:[6,8,9,10,11,12,13,14,15,16,17,19,21,22,23,24,25,26,27,28,29],parent:26,parse_const:15,parse_float:15,parse_int:15,parser:[1,15,16],part:[2,4],particular:[2,22,30],particularli:[6,8],pass:[1,2,7,8,11,12,28,29],passthrough:[6,19],past:12,path:[0,1,2,3,4,12,13,15,21,25,26,29],pathlib:[13,25],pattern:[2,4,7,9,15,24],pdf:[9,22],pep8:6,per:2,perform:[6,15,21,29],permiss:[2,30],permit:[2,6,30],permut:[7,17],person:[2,30],peter:13,physic:8,ping:8,pip:2,place:15,platform:13,pleas:24,plu:15,point:5,pollut:6,pool:19,popen:28,portion:[2,13,30],posit:7,possibl:[2,8,13,29],post:24,postprocess:24,power:24,pprint:[2,3,4,14],pprint_tabl:23,pre:16,prepar:13,prepend:11,present:[1,8,26],pretti:[15,23],prevent:[1,15],primari:13,print:[2,8,14,15,23,27,28,30],prior:1,prioriti:15,privat:1,problem:[2,6],process:[2,12,13,19,24,28],process_decod:15,prof:11,prof_fil:11,prof_main:11,profil:11,program:[2,8,11],progress:19,project:0,proper:[1,15,27],properti:[11,15],protocol:[1,15,18],provid:[1,2,6,8,9,15,29,30],ps:22,publish:[2,30],purpos:[2,8,11,30],put:[0,15],py27:1,py3:1,py3k:1,py:[0,1,8,11],pydant:[1,15],pymatgen:[1,15],pypi:23,python:[1,4,5,6,8,11,12,13,15,22,23,26,27,29],pyyaml:1,qualifi:15,question:[8,12,28],quirk:2,r:[13,15,17,24,26],rais:[8,11,13,15,20,21],rang:[14,15],raymond:13,re:[2,3,4],reachabl:12,read:[1,2,13,24,26],readlin:13,real:[8,26],recent:11,recip:13,recogn:1,recommend:2,recurs:[1,6,12,15,26,29],red:30,redefin:6,redirect:15,refactor:1,refer:15,regener:15,regex:24,regrep:24,regress:15,regular:24,reitz:0,rel:13,relat:0,releas:[1,2,13],reli:[1,13],remov:[1,23,26,27],remove_non_ascii:27,replac:[1,8],repo:2,repositori:0,repres:[6,9],represent:[1,15],requir:[1,8,15],resid:2,resourc:2,restrict:[2,30],result:[7,11,15,19,23,25],retain:26,retcod:28,retriev:23,return_if_rais:11,return_node_if_rais:11,return_none_if_rais:11,return_none_if_value_error:11,retval_if_exc:11,reusabl:2,revers:[1,13,24,30],reverse_readfil:[1,13],reverse_readlin:[1,2,13],revert:1,rewritten:1,rid:13,right:[2,18,30],rightmost:5,rm:26,rmtree:26,robust:1,root:[1,2,12,22,23,29],rootpath:29,row:23,rpc:15,rstrip:23,rt:1,ruamel:[1,25],rubric:11,run:[1,8,19,28],runtim:8,s:[0,2,6,8,13,14,15,18,24,26,27,28,29],safe:21,same:[2,11,22,23],sanit:15,scale:8,scientif:2,scipi:8,scr_link:29,scratch:[1,29],scratch_link:29,scratchdir:[1,29],script:[11,12],se:[11,13],search:[2,5,22],second:[11,13,28],see:[8,11],seek:13,select:[16,22],self:[2,11,12,15,28],sell:[2,30],sens:[7,26],sensibl:15,sep:9,separ:[1,9,11,15,28],sequenc:[10,15],serial:[1,2,3,4,15,18],serializ:[1,15],seriou:6,serv:2,set:[2,7,11,13,15],sever:[1,2,8],shall:[2,30],shell:[9,28],shorten:1,should:[1,6,7,13,14,15,22],show:5,shown:8,shutil:[1,2,3,4,29],shyamd:1,sigma:24,signal:11,signatur:1,signum:11,silenc:8,similar:[13,26],similarli:15,simpl:[1,2,16,29],simpli:[15,23],sinc:6,singl:27,singleton:[2,4,7],singli:26,site:2,situat:7,size:[13,14],skip:[12,15],skipkei:15,sleep:28,slice:14,slower:13,small:[0,13],smaller:13,so:[2,7,10,12,13,15,30],softwar:[2,30],solut:[2,28],solv:2,some:[2,7,15,21,29],someon:8,sort:[5,11,15],sort_kei:15,sort_stat:11,sortbi:11,sourc:[5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30],spec:1,special:1,specif:[1,2,15],specifi:[1,8,12,13,15,16,29],speed:1,src:[2,26],stack:12,stackoverflow:[8,12,28],standard:[0,2,4,5,6,13,21,26],start:[22,29],statement:13,statist:11,stderr:28,stdout:[23,28],still:[8,26],stop:14,str2unicod:1,str:[8,9,11,13,15,22,23,24,25,26,27,29],stream:[7,13,23],strict:15,string:[1,2,3,4,7,9,12,15,20,22,23],stub:18,style:[2,8,9,26],sub:29,subclass:[11,12],subdirectori:29,subject:[2,30],sublicens:[2,30],submit:2,submodul:[0,2,3],subpackag:[2,3],subprocess:[1,2,3,4],substanti:[2,30],success:14,successfulli:8,suit:[2,13],supplement:2,supplementari:[2,4],support:[1,2,4,9,11,13,15,18,25,27],surprisingli:26,sy:0,symbol:29,symlink:[1,26],syntax:2,system:[8,11],t:[6,13,15],tab:[6,15],tabl:23,take:[1,15],taken:[5,8,12,13],tar:26,tarfil:26,task:[2,5,21],team:30,techtonik:12,temp:29,tempdir:1,tempfil:[1,2,3,4],temporari:[11,29],temporarili:21,temporarydirectori:29,term:2,termcolor:[2,3,4],termin:[24,30],terminate_on_match:24,test:[1,15,27],text:[13,23,27,30],text_str:23,textiowrapp:23,than:[1,5,13],them:[5,15,26],theme:0,themselv:7,thi:[0,1,2,6,7,8,9,11,12,13,15,16,18,25,26,29,30],thing:15,those:15,though:[15,29],thread:[1,21,28],through:[1,29],thrown:15,time:[8,11],timeout:[1,11,13,28],timeouterror:11,to_dict:[1,15],to_json:15,token:9,tol:10,toler:10,too:1,tool:[1,2,14,16],top:22,tort:[2,30],total:17,traceback:8,tradit:6,trail:23,transform:5,transpar:[2,4,13,27],travi:1,treat:11,tree:[1,6,22,23,26],tri:8,triangl:14,tricki:5,truli:29,tupl:[6,7,11,15],turn:23,two:[2,11,15,23],txt:[1,9],type:[1,2,11,15,22,24,25,27],typeerror:15,typic:2,ultratb:8,unchang:[22,27],uncompress:26,unction:19,under:2,underli:11,underlin:30,underscor:1,understand:15,unicod:[1,27],unicode2str:[1,27],union:13,uniqu:[2,29],unittest:1,unix:[2,9,11,26],unless:[8,22],unlik:2,unmodifi:22,unpackb:18,unsafe_hash:15,until:13,unzip:22,updat:[1,6,8],upper:14,urban:1,us:[0,1,2,4,5,6,7,8,9,10,11,12,13,15,16,18,20,22,23,24,26,27,29,30],usag:[6,7,11,15,18],use_scipi:8,user:[8,12,29],userspac:8,utf:[1,23],util:[1,2,4,15,18,19,26,29],uuid:1,v2:15,v:15,valid:[15,26],validate_monti:15,valu:[5,11,15],valueerror:[11,15],variabl:[1,12],varidac:1,variou:2,ve:24,verbos:8,veri:[0,7,13],version:[1,8,15,22,24],versu:13,via:22,view:11,violat:[6,11],virtual:[2,8],visit:2,volvox:30,w:[9,13,23],wai:[1,2,6,21,29],wait:28,warn:[1,8],warranti:[2,30],wb:2,we:16,welcom:2,well:[1,15],what:2,whatev:26,when:[1,8,13,15,23,24,27,29],where:[2,7,11,13,16],whether:[2,24,29,30],which:[1,2,6,11,13,15,22,26,29],white:30,whitespac:15,who:12,whom:[2,30],whose:22,width:27,wiki:11,wikipedia:11,wildcard:[9,22],window:1,with_ind:14,withespac:23,within:22,without:[2,11,22,30],work:[2,11,13,21,26,29],workspac:29,world:30,would:[6,15],wrap:13,wrapper:[1,19,21],write:[2,7,13,16],www:13,x:[5,6,14],yaml:[1,15,25],yee:8,yellow:30,yet:[1,13],yield:[13,14],yml:[1,25],you:[0,6,8,13,15],your:[0,15],z:[25,26],zcat:26,zgrep:2,zip:[1,2,4,22,26],zless:[2,26],zopen:[1,2,13],zpath:[1,22]},titles:["krTheme Sphinx Style","Change log","Monty: Python Made Even Easier","monty","monty package","monty.bisect module","monty.collections module","monty.design_patterns module","monty.dev module","monty.fnmatch module","monty.fractions module","monty.functools module","monty.inspect module","monty.io module","monty.itertools module","monty.json module","monty.logging module","monty.math module","monty.msgpack module","monty.multiprocessing module","monty.operator module","monty.os package","monty.os.path module","monty.pprint module","monty.re module","monty.serialization module","monty.shutil module","monty.string module","monty.subprocess module","monty.tempfile module","monty.termcolor module"],titleterms:{"0":1,"1":1,"10":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,api:2,bisect:5,chang:[1,2],collect:6,content:[4,21],contribut:2,design_pattern:7,dev:8,doc:2,easier:2,even:2,fnmatch:9,fraction:10,functool:11,indic:2,inspect:12,instal:2,io:13,itertool:14,json:15,krtheme:0,licens:2,log:[1,2,16],made:2,math:17,modul:[4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30],monti:[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30],msgpack:18,multiprocess:19,oper:20,os:[21,22],packag:[4,21],path:22,pprint:23,python:2,re:24,serial:25,shutil:26,sphinx:0,string:27,style:0,submodul:[4,21],subpackag:4,subprocess:28,tabl:2,tempfil:29,termcolor:30,usag:2,v0:1,v1:1,v2021:1,v2:1,v3:1,v4:1}}) \ No newline at end of file diff --git a/monty/__init__.py b/monty/__init__.py index adc772b71..5db4d86be 100644 --- a/monty/__init__.py +++ b/monty/__init__.py @@ -7,7 +7,7 @@ __author__ = "Shyue Ping Ong" __copyright__ = "Copyright 2014, The Materials Virtual Lab" -__version__ = "2021.5.9" +__version__ = "2021.6.10" __maintainer__ = "Shyue Ping Ong" __email__ = "ongsp@ucsd.edu" __date__ = "Oct 12 2020" diff --git a/setup.py b/setup.py index 8ad81db4d..05bd94233 100644 --- a/setup.py +++ b/setup.py @@ -10,7 +10,7 @@ setup( name="monty", packages=find_packages(), - version="2021.5.9", + version="2021.6.10", extras_require={ "yaml": ["ruamel.yaml"], },