Coverage report: 85%

Files Functions Classes

coverage.py v7.14.3, created at 2026-07-01 08:45 +0000

      Statements   Branches   Total
File function   coverage statements missing excluded   coverage branches partial   coverage
python/lsst/__init__.py (no function)   100% 2 0 0   100% 0 0   100%
python/lsst/daf/__init__.py (no function)   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/__init__.py (no function)   100% 38 0 0   100% 0 0   100%
python/lsst/daf/butler/_butler.py Butler.__new__   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/_butler.py Butler.from_config   62% 21 8 0   50% 10 3   58%
python/lsst/daf/butler/_butler.py Butler.has_repo_config   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/_butler.py Butler.makeRepo   82% 44 8 0   70% 20 6   78%
python/lsst/daf/butler/_butler.py Butler.get_repo_uri   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_butler.py Butler.get_known_repos   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_butler.py Butler.parse_dataset_uri   100% 23 0 0   100% 10 0   100%
python/lsst/daf/butler/_butler.py Butler.get_dataset_from_uri   100% 10 0 0   100% 4 0   100%
python/lsst/daf/butler/_butler.py Butler._caching_context   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_butler.py Butler.transaction   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_butler.py Butler.put   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_butler.py Butler.getDeferred   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_butler.py Butler.get   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_butler.py Butler.getURIs   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_butler.py Butler.getURI   75% 4 1 0   50% 2 1   67%
python/lsst/daf/butler/_butler.py Butler.get_dataset_type   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_butler.py Butler.get_dataset   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_butler.py Butler.get_many_datasets   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_butler.py Butler.find_dataset   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_butler.py Butler.retrieve_artifacts_zip   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_butler.py Butler.retrieveArtifacts   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_butler.py Butler.exists   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_butler.py Butler._exists_many   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_butler.py Butler.removeRuns   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_butler.py Butler.ingest   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_butler.py Butler.ingest_zip   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_butler.py Butler.export   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_butler.py Butler.import_   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_butler.py Butler.transfer_dimension_records_from   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_butler.py Butler.transfer_from   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_butler.py Butler.validateConfiguration   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_butler.py Butler.collection_chains   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_butler.py Butler.collections   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_butler.py Butler.run   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_butler.py Butler.registry   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_butler.py Butler.query   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_butler.py Butler.query_data_ids   90% 21 2 0   75% 12 3   85%
python/lsst/daf/butler/_butler.py Butler.query_datasets   100% 25 0 0   94% 16 1   98%
python/lsst/daf/butler/_butler.py Butler.query_dimension_records   100% 19 0 0   100% 10 0   100%
python/lsst/daf/butler/_butler.py Butler.query_all_datasets   100% 20 0 0   100% 12 0   100%
python/lsst/daf/butler/_butler.py Butler._query_all_datasets_by_page   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_butler.py Butler.clone   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_butler.py Butler.close   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_butler.py Butler._expand_data_ids   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_butler.py (no function)   100% 131 0 15   100% 0 0   100%
python/lsst/daf/butler/_butler_collections.py CollectionInfo.__lt__   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/_butler_collections.py ButlerCollections.__getitem__   100% 1 0 0   50% 2 1   67%
python/lsst/daf/butler/_butler_collections.py ButlerCollections.__getitem__   100% 1 0 0   50% 2 1   67%
python/lsst/daf/butler/_butler_collections.py ButlerCollections.__getitem__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_butler_collections.py ButlerCollections.__len__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_butler_collections.py ButlerCollections.defaults   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_butler_collections.py ButlerCollections.__str__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_butler_collections.py ButlerCollections.extend_chain   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_butler_collections.py ButlerCollections.prepend_chain   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_butler_collections.py ButlerCollections.redefine_chain   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_butler_collections.py ButlerCollections.remove_from_chain   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_butler_collections.py ButlerCollections.query   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/_butler_collections.py ButlerCollections.query_info   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_butler_collections.py ButlerCollections.get_info   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_butler_collections.py ButlerCollections.register   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_butler_collections.py ButlerCollections.x_remove   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_butler_collections.py ButlerCollections._filter_dataset_types   88% 8 1 0   75% 4 1   83%
python/lsst/daf/butler/_butler_collections.py ButlerCollections._group_by_dataset_type   86% 7 1 0   83% 6 1   85%
python/lsst/daf/butler/_butler_collections.py (no function)   100% 53 0 2   100% 0 0   100%
python/lsst/daf/butler/_butler_config.py ButlerConfig.__init__   100% 53 0 0   97% 32 1   99%
python/lsst/daf/butler/_butler_config.py ButlerConfig.get_butler_type   62% 8 3 0   50% 6 1   57%
python/lsst/daf/butler/_butler_config.py (no function)   100% 19 0 0   100% 0 0   100%
python/lsst/daf/butler/_butler_instance_options.py (no function)   100% 12 0 0   100% 0 0   100%
python/lsst/daf/butler/_butler_metrics.py ButlerMetrics.reset   100% 6 0 0   100% 0 0   100%
python/lsst/daf/butler/_butler_metrics.py ButlerMetrics.increment_get   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/_butler_metrics.py ButlerMetrics.increment_put   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/_butler_metrics.py ButlerMetrics.increment_ingest   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/_butler_metrics.py ButlerMetrics._timer   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/_butler_metrics.py ButlerMetrics.instrument_get   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/_butler_metrics.py ButlerMetrics.instrument_put   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/_butler_metrics.py ButlerMetrics.instrument_ingest   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/_butler_metrics.py (no function)   100% 34 0 0   100% 0 0   100%
python/lsst/daf/butler/_butler_repo_index.py ButlerRepoIndex._read_repository_index   100% 11 0 0   100% 2 0   100%
python/lsst/daf/butler/_butler_repo_index.py ButlerRepoIndex._read_repository_index_from_environment   100% 14 0 0   100% 6 0   100%
python/lsst/daf/butler/_butler_repo_index.py ButlerRepoIndex.get_known_repos   100% 5 0 0   100% 0 0   100%
python/lsst/daf/butler/_butler_repo_index.py ButlerRepoIndex.get_failure_reason   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_butler_repo_index.py ButlerRepoIndex.get_repo_uri   100% 12 0 0   100% 6 0   100%
python/lsst/daf/butler/_butler_repo_index.py ButlerRepoIndex._validate_configuration   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/_butler_repo_index.py (no function)   100% 30 0 0   100% 0 0   100%
python/lsst/daf/butler/_collection_type.py CollectionType.all   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_collection_type.py CollectionType.from_name   60% 5 2 0   100% 0 0   60%
python/lsst/daf/butler/_collection_type.py CollectionType.from_names   0% 3 3 0   0% 2 0   0%
python/lsst/daf/butler/_collection_type.py (no function)   100% 19 0 0   100% 0 0   100%
python/lsst/daf/butler/_config.py _doUpdate   100% 10 0 0   100% 8 0   100%
python/lsst/daf/butler/_config.py _checkNextItem   100% 20 0 0   100% 8 0   100%
python/lsst/daf/butler/_config.py Loader.__init__   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/_config.py Loader.include   81% 16 3 0   83% 12 2   82%
python/lsst/daf/butler/_config.py Loader.extractFile   100% 9 0 0   100% 2 0   100%
python/lsst/daf/butler/_config.py Config.__init__   100% 13 0 0   100% 8 0   100%
python/lsst/daf/butler/_config.py Config.ppprint   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_config.py Config.__repr__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_config.py Config.__str__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_config.py Config.__len__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_config.py Config.__iter__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_config.py Config.copy   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_config.py Config.fromString   100% 7 0 0   100% 4 0   100%
python/lsst/daf/butler/_config.py Config.fromYaml   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_config.py Config.__initFromUri   100% 16 0 0   100% 6 0   100%
python/lsst/daf/butler/_config.py Config.__initFromYaml   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/_config.py Config.__initFromJson   71% 7 2 0   50% 4 2   64%
python/lsst/daf/butler/_config.py Config._processExplicitIncludes   95% 37 2 0   88% 24 3   92%
python/lsst/daf/butler/_config.py Config._splitIntoKeys   95% 22 1 0   93% 14 1   94%
python/lsst/daf/butler/_config.py Config._getKeyHierarchy   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/_config.py Config._findInHierarchy   100% 12 0 0   100% 4 0   100%
python/lsst/daf/butler/_config.py Config.__getitem__   100% 18 0 0   100% 10 0   100%
python/lsst/daf/butler/_config.py Config.__setitem__   100% 12 0 0   100% 4 0   100%
python/lsst/daf/butler/_config.py Config.__contains__   80% 5 1 0   50% 2 1   71%
python/lsst/daf/butler/_config.py Config.__delitem__   89% 9 1 0   75% 4 1   85%
python/lsst/daf/butler/_config.py Config.update   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_config.py Config.merge   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/_config.py Config.nameTuples   100% 6 0 0   100% 2 0   100%
python/lsst/daf/butler/_config.py Config.nameTuples.getKeysAsTuples   100% 9 0 0   100% 6 0   100%
python/lsst/daf/butler/_config.py Config.names   90% 21 2 0   75% 12 3   85%
python/lsst/daf/butler/_config.py Config.asArray   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/_config.py Config.__eq__   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/_config.py Config.__ne__   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/_config.py Config.dump   62% 8 3 0   67% 6 2   64%
python/lsst/daf/butler/_config.py Config.dumpToUri   91% 11 1 0   75% 4 1   87%
python/lsst/daf/butler/_config.py Config.updateParameters   96% 27 1 0   96% 26 1   96%
python/lsst/daf/butler/_config.py Config.toDict   83% 6 1 0   75% 4 1   80%
python/lsst/daf/butler/_config.py ConfigSubset.__init__   100% 39 0 0   93% 28 2   97%
python/lsst/daf/butler/_config.py ConfigSubset.defaultSearchPaths   100% 6 0 0   100% 2 0   100%
python/lsst/daf/butler/_config.py ConfigSubset._updateWithConfigsFromPath   92% 12 1 0   88% 8 1   90%
python/lsst/daf/butler/_config.py ConfigSubset._updateWithOtherConfigFile   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/_config.py ConfigSubset.validate   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/_config.py (no function)   98% 86 2 2   100% 0 0   98%
python/lsst/daf/butler/_config_support.py LookupKey.__init__   79% 24 5 0   64% 14 5   74%
python/lsst/daf/butler/_config_support.py LookupKey.__str__   88% 8 1 0   83% 6 1   86%
python/lsst/daf/butler/_config_support.py LookupKey.__repr__   0% 8 8 0   0% 6 0   0%
python/lsst/daf/butler/_config_support.py LookupKey.__eq__   80% 5 1 0   75% 4 1   78%
python/lsst/daf/butler/_config_support.py LookupKey.name   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_config_support.py LookupKey.dimensions   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_config_support.py LookupKey.dataId   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/_config_support.py LookupKey.__hash__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_config_support.py LookupKey.clone   88% 8 1 0   83% 6 1   86%
python/lsst/daf/butler/_config_support.py processLookupConfigs   89% 18 2 0   83% 12 2   87%
python/lsst/daf/butler/_config_support.py processLookupConfigList   88% 16 2 0   83% 12 2   86%
python/lsst/daf/butler/_config_support.py (no function)   100% 26 0 2   100% 0 0   100%
python/lsst/daf/butler/_dataset_association.py DatasetAssociation.from_query_result   100% 8 0 0   100% 4 0   100%
python/lsst/daf/butler/_dataset_association.py DatasetAssociation.__lt__   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/_dataset_association.py (no function)   100% 21 0 3   100% 0 0   100%
python/lsst/daf/butler/_dataset_existence.py DatasetExistence.__bool__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_dataset_existence.py (no function)   100% 19 0 0   100% 0 0   100%
python/lsst/daf/butler/_dataset_provenance.py DatasetProvenance.populate_cache   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/_dataset_provenance.py DatasetProvenance.add_input   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/_dataset_provenance.py DatasetProvenance.add_extra_provenance   100% 6 0 0   100% 4 0   100%
python/lsst/daf/butler/_dataset_provenance.py DatasetProvenance.to_flat_dict   100% 30 0 0   92% 26 2   96%
python/lsst/daf/butler/_dataset_provenance.py DatasetProvenance.to_flat_dict._make_key   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_dataset_provenance.py DatasetProvenance._make_provenance_key   100% 8 0 0   100% 6 0   100%
python/lsst/daf/butler/_dataset_provenance.py DatasetProvenance._find_prefix_and_sep   100% 27 0 0   100% 22 0   100%
python/lsst/daf/butler/_dataset_provenance.py DatasetProvenance._find_prefix_and_sep._update_matches   100% 6 0 0   100% 2 0   100%
python/lsst/daf/butler/_dataset_provenance.py DatasetProvenance._find_provenance_keys_in_flat_dict   96% 24 1 0   94% 16 1   95%
python/lsst/daf/butler/_dataset_provenance.py DatasetProvenance.strip_provenance_from_flat_dict   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/_dataset_provenance.py DatasetProvenance.from_flat_dict   97% 37 1 0   88% 26 3   94%
python/lsst/daf/butler/_dataset_provenance.py DatasetProvenance.from_flat_dict._coerce_id   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/_dataset_provenance.py (no function)   100% 32 0 3   100% 0 0   100%
python/lsst/daf/butler/_dataset_ref.py _DatasetRefGroupedIterable._iter_by_dataset_type   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_dataset_ref.py DatasetIdFactory.makeDatasetId   100% 12 0 0   100% 8 0   100%
python/lsst/daf/butler/_dataset_ref.py SerializedDatasetRef.check_consistent_parameters   71% 7 2 0   50% 4 2   64%
python/lsst/daf/butler/_dataset_ref.py SerializedDatasetRef.direct   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/_dataset_ref.py DatasetRef.__init__   100% 9 0 0   100% 4 0   100%
python/lsst/daf/butler/_dataset_ref.py DatasetRef.id   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_dataset_ref.py DatasetRef.__eq__   50% 4 2 0   100% 0 0   50%
python/lsst/daf/butler/_dataset_ref.py DatasetRef.__hash__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_dataset_ref.py DatasetRef.dimensions   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_dataset_ref.py DatasetRef.__repr__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_dataset_ref.py DatasetRef.__str__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/_dataset_ref.py DatasetRef.__lt__   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/_dataset_ref.py DatasetRef.to_simple   100% 6 0 0   100% 4 0   100%
python/lsst/daf/butler/_dataset_ref.py DatasetRef.from_simple   47% 47 25 0   42% 40 9   45%
python/lsst/daf/butler/_dataset_ref.py DatasetRef._unpickle   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_dataset_ref.py DatasetRef.__reduce__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_dataset_ref.py DatasetRef.__deepcopy__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_dataset_ref.py DatasetRef.expanded   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/_dataset_ref.py DatasetRef.isComponent   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_dataset_ref.py DatasetRef.isComposite   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_dataset_ref.py DatasetRef._lookupNames   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/_dataset_ref.py DatasetRef.groupByType   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/_dataset_ref.py DatasetRef.iter_by_type   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/_dataset_ref.py DatasetRef.makeCompositeRef   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_dataset_ref.py DatasetRef.makeComponentRef   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_dataset_ref.py DatasetRef.overrideStorageClass   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_dataset_ref.py DatasetRef.replace   100% 10 0 0   100% 8 0   100%
python/lsst/daf/butler/_dataset_ref.py DatasetRef.is_compatible_with   100% 7 0 0   100% 6 0   100%
python/lsst/daf/butler/_dataset_ref.py MinimalistSerializableDatasetRef.to_dataset_ref   100% 7 0 0   100% 2 0   100%
python/lsst/daf/butler/_dataset_ref.py MinimalistSerializableDatasetRef.from_dataset_ref   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_dataset_ref.py SerializedDatasetRefContainerV1.__len__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_dataset_ref.py SerializedDatasetRefContainerV1.from_refs   92% 26 2 0   92% 12 1   92%
python/lsst/daf/butler/_dataset_ref.py SerializedDatasetRefContainerV1.to_refs   92% 25 2 0   88% 16 2   90%
python/lsst/daf/butler/_dataset_ref.py (no function)   100% 126 0 3   100% 0 0   100%
python/lsst/daf/butler/_dataset_type.py _safeMakeMappingProxyType   0% 3 3 0   0% 2 0   0%
python/lsst/daf/butler/_dataset_type.py SerializedDatasetType.direct   78% 9 2 0   50% 4 2   69%
python/lsst/daf/butler/_dataset_type.py DatasetType.nameWithComponent   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_dataset_type.py DatasetType.__init__   86% 35 5 0   77% 22 5   82%
python/lsst/daf/butler/_dataset_type.py DatasetType.__repr__   100% 6 0 0   100% 4 0   100%
python/lsst/daf/butler/_dataset_type.py DatasetType._equal_ignoring_storage_class   89% 9 1 0   88% 8 1   88%
python/lsst/daf/butler/_dataset_type.py DatasetType.__eq__   100% 14 0 0   100% 14 0   100%
python/lsst/daf/butler/_dataset_type.py DatasetType.is_compatible_with   88% 8 1 0   75% 4 1   83%
python/lsst/daf/butler/_dataset_type.py DatasetType.__hash__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_dataset_type.py DatasetType.__lt__   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/_dataset_type.py DatasetType.name   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_dataset_type.py DatasetType.dimensions   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_dataset_type.py DatasetType.storageClass   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/_dataset_type.py DatasetType.storageClass_name   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_dataset_type.py DatasetType.parentStorageClass   100% 5 0 0   100% 4 0   100%
python/lsst/daf/butler/_dataset_type.py DatasetType.isCalibration   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_dataset_type.py DatasetType.splitDatasetTypeName   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/_dataset_type.py DatasetType.nameAndComponent   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_dataset_type.py DatasetType.component   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/_dataset_type.py DatasetType.componentTypeName   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/_dataset_type.py DatasetType.makeCompositeDatasetType   67% 6 2 0   50% 4 2   60%
python/lsst/daf/butler/_dataset_type.py DatasetType.makeComponentDatasetType   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_dataset_type.py DatasetType.makeAllComponentDatasetTypes   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_dataset_type.py DatasetType.overrideStorageClass   100% 7 0 0   100% 4 0   100%
python/lsst/daf/butler/_dataset_type.py DatasetType.isComponent   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/_dataset_type.py DatasetType.isComposite   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_dataset_type.py DatasetType._lookupNames   100% 10 0 0   100% 6 0   100%
python/lsst/daf/butler/_dataset_type.py DatasetType.to_simple   100% 6 0 0   100% 4 0   100%
python/lsst/daf/butler/_dataset_type.py DatasetType.from_simple   71% 21 6 0   62% 16 6   68%
python/lsst/daf/butler/_dataset_type.py DatasetType.__reduce__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_dataset_type.py DatasetType.__deepcopy__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_dataset_type.py _unpickle_via_factory   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_dataset_type.py get_dataset_type_name   80% 5 1 0   75% 4 1   78%
python/lsst/daf/butler/_dataset_type.py (no function)   100% 68 0 3   100% 0 0   100%
python/lsst/daf/butler/_deferredDatasetHandle.py DeferredDatasetHandle.get   91% 11 1 0   88% 8 1   89%
python/lsst/daf/butler/_deferredDatasetHandle.py DeferredDatasetHandle.dataId   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_deferredDatasetHandle.py (no function)   100% 17 0 5   100% 0 0   100%
python/lsst/daf/butler/_exceptions.py ButlerUserError.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_exceptions.py EmptyQueryResultError.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_exceptions.py EmptyQueryResultError.__str__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_exceptions.py create_butler_user_error   0% 4 4 0   0% 2 0   0%
python/lsst/daf/butler/_exceptions.py (no function)   100% 46 0 0   100% 0 0   100%
python/lsst/daf/butler/_exceptions_legacy.py (no function)   100% 5 0 0   100% 0 0   100%
python/lsst/daf/butler/_file_dataset.py FileDataset.__init__   100% 8 0 0   100% 4 0   100%
python/lsst/daf/butler/_file_dataset.py FileDataset.__lt__   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/_file_dataset.py FileDataset.to_simple   100% 7 0 0   100% 4 0   100%
python/lsst/daf/butler/_file_dataset.py FileDataset.from_simple   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/_file_dataset.py (no function)   100% 29 0 0   100% 0 0   100%
python/lsst/daf/butler/_file_descriptor.py FileDescriptor.__init__   100% 5 0 0   100% 0 0   100%
python/lsst/daf/butler/_file_descriptor.py FileDescriptor.__repr__   69% 13 4 0   50% 8 4   62%
python/lsst/daf/butler/_file_descriptor.py FileDescriptor.readStorageClass   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/_file_descriptor.py (no function)   100% 10 0 3   100% 0 0   100%
python/lsst/daf/butler/_formatter.py FormatterV2.__init__   71% 17 5 0   70% 10 3   70%
python/lsst/daf/butler/_formatter.py FormatterV2.__str__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_formatter.py FormatterV2.__repr__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_formatter.py FormatterV2.file_descriptor   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_formatter.py FormatterV2.data_id   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_formatter.py FormatterV2.dataset_ref   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_formatter.py FormatterV2.write_parameters   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/_formatter.py FormatterV2.write_recipes   0% 3 3 0   0% 2 0   0%
python/lsst/daf/butler/_formatter.py FormatterV2.get_write_extension   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/_formatter.py FormatterV2.can_accept   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_formatter.py FormatterV2.validate_write_recipes   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/_formatter.py FormatterV2.name   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_formatter.py FormatterV2._is_disassembled   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_formatter.py FormatterV2._check_resource_size   50% 2 1 0   50% 2 1   50%
python/lsst/daf/butler/_formatter.py FormatterV2._get_cache_ref   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/_formatter.py FormatterV2._ensure_cache   50% 4 2 0   50% 2 1   50%
python/lsst/daf/butler/_formatter.py FormatterV2.read   97% 38 1 0   77% 30 7   88%
python/lsst/daf/butler/_formatter.py FormatterV2._read_from_possibly_cached_location_no_cache_write   100% 14 0 0   100% 4 0   100%
python/lsst/daf/butler/_formatter.py FormatterV2.read_from_possibly_cached_stream   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/_formatter.py FormatterV2.read_from_possibly_cached_stream._open_stream   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/_formatter.py FormatterV2.read_directly_from_possibly_cached_uri   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/_formatter.py FormatterV2.read_directly_from_possibly_cached_uri._open_uri   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_formatter.py FormatterV2.read_from_possibly_cached_local_file   100% 27 0 0   92% 12 1   97%
python/lsst/daf/butler/_formatter.py FormatterV2.read_from_uri   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_formatter.py FormatterV2.read_from_stream   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_formatter.py FormatterV2.read_from_local_file   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_formatter.py FormatterV2.add_provenance   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_formatter.py FormatterV2.write   100% 5 0 0   50% 2 1   86%
python/lsst/daf/butler/_formatter.py FormatterV2.write_direct   27% 15 11 0   50% 2 1   29%
python/lsst/daf/butler/_formatter.py FormatterV2.write_locally_then_move   100% 13 0 0   100% 2 0   100%
python/lsst/daf/butler/_formatter.py FormatterV2.write_local_file   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/_formatter.py FormatterV2.to_bytes   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_formatter.py FormatterV2.make_updated_location   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/_formatter.py FormatterV2.validate_extension   89% 9 1 0   67% 6 2   80%
python/lsst/daf/butler/_formatter.py FormatterV2.predict_path   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/_formatter.py FormatterV2.segregate_parameters   92% 12 1 0   80% 10 2   86%
python/lsst/daf/butler/_formatter.py Formatter.__init__   91% 23 2 0   75% 16 4   85%
python/lsst/daf/butler/_formatter.py Formatter.__str__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_formatter.py Formatter.__repr__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_formatter.py Formatter.fileDescriptor   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_formatter.py Formatter.dataId   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_formatter.py Formatter.writeParameters   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/_formatter.py Formatter.writeRecipes   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/_formatter.py Formatter.can_accept   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_formatter.py Formatter.validateWriteRecipes   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/_formatter.py Formatter.validate_write_recipes   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_formatter.py Formatter.name   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_formatter.py Formatter.read   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_formatter.py Formatter.write   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_formatter.py Formatter.can_read_bytes   57% 7 3 0   100% 0 0   57%
python/lsst/daf/butler/_formatter.py Formatter.fromBytes   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_formatter.py Formatter.toBytes   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_formatter.py Formatter._updateLocation   100% 7 0 0   50% 4 2   82%
python/lsst/daf/butler/_formatter.py Formatter.make_updated_location   80% 5 1 1   100% 0 0   80%
python/lsst/daf/butler/_formatter.py Formatter.validate_extension   91% 11 1 1   83% 6 1   88%
python/lsst/daf/butler/_formatter.py Formatter.predict_path   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/_formatter.py Formatter.segregate_parameters   50% 12 6 0   40% 10 2   45%
python/lsst/daf/butler/_formatter.py Formatter.write_parameters   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_formatter.py Formatter.write_recipes   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_formatter.py Formatter.file_descriptor   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_formatter.py Formatter.data_id   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_formatter.py FormatterFactory.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_formatter.py FormatterFactory.__contains__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_formatter.py FormatterFactory.registerFormatters   86% 35 5 0   75% 24 6   81%
python/lsst/daf/butler/_formatter.py FormatterFactory.getLookupKeys   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_formatter.py FormatterFactory.getFormatterClassWithMatch   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/_formatter.py FormatterFactory.getFormatterClass   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/_formatter.py FormatterFactory.getFormatterWithMatch   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/_formatter.py FormatterFactory.getFormatter   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/_formatter.py FormatterFactory.registerFormatter   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_formatter.py FormatterV1inV2.__init__   80% 5 1 0   50% 2 1   71%
python/lsst/daf/butler/_formatter.py FormatterV1inV2.get_write_extension   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/_formatter.py FormatterV1inV2.segregate_parameters   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_formatter.py FormatterV1inV2.validate_write_recipes   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_formatter.py FormatterV1inV2.read_from_local_file   55% 11 5 0   50% 2 1   54%
python/lsst/daf/butler/_formatter.py FormatterV1inV2.to_bytes   0% 4 4 0   100% 0 0   0%
python/lsst/daf/butler/_formatter.py FormatterV1inV2.write_local_file   60% 5 2 0   100% 0 0   60%
python/lsst/daf/butler/_formatter.py (no function)   100% 160 0 7   100% 0 0   100%
python/lsst/daf/butler/_labeled_butler_factory.py LabeledButlerFactoryProtocol.__call__   100% 1 0 0   50% 2 1   67%
python/lsst/daf/butler/_labeled_butler_factory.py LabeledButlerFactory.__init__   100% 7 0 0   100% 2 0   100%
python/lsst/daf/butler/_labeled_butler_factory.py LabeledButlerFactory.__enter__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_labeled_butler_factory.py LabeledButlerFactory.__exit__   60% 5 2 0   100% 0 0   60%
python/lsst/daf/butler/_labeled_butler_factory.py LabeledButlerFactory.bind   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/_labeled_butler_factory.py LabeledButlerFactory.bind.create   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_labeled_butler_factory.py LabeledButlerFactory.create_butler   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/_labeled_butler_factory.py LabeledButlerFactory.close   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/_labeled_butler_factory.py LabeledButlerFactory._get_or_create_butler_factory   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/_labeled_butler_factory.py LabeledButlerFactory._create_butler_factory_function   60% 10 4 0   25% 4 1   50%
python/lsst/daf/butler/_labeled_butler_factory.py LabeledButlerFactory._get_config_uri   100% 6 0 0   100% 4 0   100%
python/lsst/daf/butler/_labeled_butler_factory.py _ButlerFactory.create_butler   100% 1 0 0   50% 2 1   67%
python/lsst/daf/butler/_labeled_butler_factory.py _ButlerFactory.close   100% 1 0 0   50% 2 1   67%
python/lsst/daf/butler/_labeled_butler_factory.py _DirectButlerFactory.__init__   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/_labeled_butler_factory.py _DirectButlerFactory.create_butler   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_labeled_butler_factory.py _DirectButlerFactory.close   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_labeled_butler_factory.py _RemoteButlerFactory.__init__   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/_labeled_butler_factory.py _RemoteButlerFactory.create_butler   0% 3 3 0   0% 2 0   0%
python/lsst/daf/butler/_labeled_butler_factory.py _RemoteButlerFactory.close   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_labeled_butler_factory.py (no function)   100% 33 0 0   100% 0 0   100%
python/lsst/daf/butler/_limited_butler.py LimitedButler.isWriteable   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_limited_butler.py LimitedButler.put   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_limited_butler.py LimitedButler.__enter__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_limited_butler.py LimitedButler.__exit__   60% 5 2 0   100% 0 0   60%
python/lsst/daf/butler/_limited_butler.py LimitedButler.close   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_limited_butler.py LimitedButler.get   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/_limited_butler.py LimitedButler.getDeferred   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_limited_butler.py LimitedButler.get_datastore_names   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_limited_butler.py LimitedButler.get_datastore_roots   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_limited_butler.py LimitedButler.getURIs   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_limited_butler.py LimitedButler.getURI   0% 4 4 0   0% 2 0   0%
python/lsst/daf/butler/_limited_butler.py LimitedButler.get_many_uris   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_limited_butler.py LimitedButler.stored   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_limited_butler.py LimitedButler.stored_many   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_limited_butler.py LimitedButler.markInputUnused   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_limited_butler.py LimitedButler.pruneDatasets   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_limited_butler.py LimitedButler.record_metrics   100% 6 0 0   100% 0 0   100%
python/lsst/daf/butler/_limited_butler.py LimitedButler.dimensions   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_limited_butler.py LimitedButler._file_transfer_source   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_limited_butler.py (no function)   100% 51 0 0   100% 0 0   100%
python/lsst/daf/butler/_location.py Location.__init__   100% 19 0 0   100% 16 0   100%
python/lsst/daf/butler/_location.py Location.clone   100% 5 0 0   100% 0 0   100%
python/lsst/daf/butler/_location.py Location.__copy__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_location.py Location.__deepcopy__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_location.py Location.__str__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_location.py Location.__repr__   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/_location.py Location.__eq__   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/_location.py Location.uri   100% 7 0 0   100% 4 0   100%
python/lsst/daf/butler/_location.py Location.path   100% 5 0 0   100% 0 0   100%
python/lsst/daf/butler/_location.py Location.pathInStore   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_location.py Location.netloc   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_location.py Location.relativeToPathRoot   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_location.py Location.updateExtension   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/_location.py Location.getExtension   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_location.py Location.toAbsolute   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_location.py LocationFactory.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_location.py LocationFactory.__str__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_location.py LocationFactory.netloc   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_location.py LocationFactory.fromPath   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/_location.py LocationFactory.from_uri   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/_location.py (no function)   100% 33 0 0   100% 0 0   100%
python/lsst/daf/butler/_named.py Named.name   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_named.py NamedKeyMapping.names   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_named.py NamedKeyMapping.byName   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_named.py NamedKeyMapping.keys   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_named.py NamedKeyMapping.__getitem__   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_named.py NamedKeyMapping.get   100% 1 0 0   50% 2 1   67%
python/lsst/daf/butler/_named.py NamedKeyMapping.get   100% 1 0 0   50% 2 1   67%
python/lsst/daf/butler/_named.py NamedKeyMapping.get   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_named.py NamedKeyMutableMapping.__setitem__   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_named.py NamedKeyMutableMapping.__delitem__   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_named.py NamedKeyMutableMapping.pop   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_named.py NamedKeyDict.__init__   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/_named.py NamedKeyDict.names   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_named.py NamedKeyDict.byName   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_named.py NamedKeyDict.__len__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_named.py NamedKeyDict.__iter__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_named.py NamedKeyDict.__str__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_named.py NamedKeyDict.__repr__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_named.py NamedKeyDict.__getitem__   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/_named.py NamedKeyDict.__setitem__   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/_named.py NamedKeyDict.__delitem__   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/_named.py NamedKeyDict.keys   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_named.py NamedKeyDict.values   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_named.py NamedKeyDict.items   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_named.py NamedKeyDict.copy   0% 4 4 0   100% 0 0   0%
python/lsst/daf/butler/_named.py NamedKeyDict.freeze   100% 3 0 0   50% 2 1   80%
python/lsst/daf/butler/_named.py NamedValueAbstractSet.names   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_named.py NamedValueAbstractSet.asMapping   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_named.py NamedValueAbstractSet.__getitem__   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_named.py NamedValueAbstractSet.get   100% 1 0 0   50% 2 1   67%
python/lsst/daf/butler/_named.py NamedValueAbstractSet.get   100% 1 0 0   50% 2 1   67%
python/lsst/daf/butler/_named.py NamedValueAbstractSet.get   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/_named.py NamedValueAbstractSet._from_iterable   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_named.py NameMappingSetView.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_named.py NameMappingSetView.names   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_named.py NameMappingSetView.asMapping   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_named.py NameMappingSetView.__getitem__   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/_named.py NameMappingSetView.__contains__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_named.py NameMappingSetView.__len__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_named.py NameMappingSetView.__iter__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_named.py NameMappingSetView.__eq__   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/_named.py NameMappingSetView.__le__   0% 3 3 0   0% 2 0   0%
python/lsst/daf/butler/_named.py NameMappingSetView.__ge__   0% 3 3 0   0% 2 0   0%
python/lsst/daf/butler/_named.py NameMappingSetView.__str__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_named.py NameMappingSetView.__repr__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_named.py NamedValueMutableSet.__delitem__   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_named.py NamedValueMutableSet.remove   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_named.py NamedValueMutableSet.discard   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_named.py NamedValueMutableSet.pop   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_named.py NamedValueSet.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_named.py NamedValueSet.__repr__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_named.py NamedValueSet.issubset   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_named.py NamedValueSet.issuperset   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_named.py NamedValueSet.__delitem__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_named.py NamedValueSet.add   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_named.py NamedValueSet.clear   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_named.py NamedValueSet.remove   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/_named.py NamedValueSet.discard   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/_named.py NamedValueSet.pop   100% 8 0 0   100% 2 0   100%
python/lsst/daf/butler/_named.py NamedValueSet.update   100% 2 0 0   100% 2 0   100%
python/lsst/daf/butler/_named.py NamedValueSet.copy   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/_named.py NamedValueSet.freeze   100% 3 0 0   50% 2 1   80%
python/lsst/daf/butler/_named.py (no function)   100% 108 0 0   100% 0 0   100%
python/lsst/daf/butler/_quantum.py _reconstructDatasetRef   90% 10 1 0   67% 6 2   81%
python/lsst/daf/butler/_quantum.py SerializedQuantum.direct   100% 9 0 0   100% 0 0   100%
python/lsst/daf/butler/_quantum.py Quantum.__init__   89% 19 2 0   83% 12 2   87%
python/lsst/daf/butler/_quantum.py Quantum.to_simple   100% 62 0 0   84% 38 6   94%
python/lsst/daf/butler/_quantum.py Quantum.from_simple   100% 21 0 0   90% 10 1   97%
python/lsst/daf/butler/_quantum.py Quantum.taskClass   83% 6 1 0   50% 4 2   70%
python/lsst/daf/butler/_quantum.py Quantum.taskName   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_quantum.py Quantum.dataId   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_quantum.py Quantum.initInputs   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_quantum.py Quantum.inputs   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_quantum.py Quantum.outputs   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_quantum.py Quantum.datastore_records   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_quantum.py Quantum.__eq__   67% 6 2 0   67% 6 2   67%
python/lsst/daf/butler/_quantum.py Quantum.__hash__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_quantum.py Quantum.__reduce__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_quantum.py Quantum.__str__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_quantum.py Quantum._reduceFactory   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_quantum.py DimensionRecordsAccumulator.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/_quantum.py DimensionRecordsAccumulator.addRecord   100% 6 0 0   100% 2 0   100%
python/lsst/daf/butler/_quantum.py DimensionRecordsAccumulator.makeSerializedDimensionRecordMapping   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_quantum.py (no function)   100% 54 0 0   100% 0 0   100%
python/lsst/daf/butler/_quantum_backed.py QuantumBackedButler.__init__   100% 15 0 0   50% 2 1   94%
python/lsst/daf/butler/_quantum_backed.py QuantumBackedButler.initialize   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/_quantum_backed.py QuantumBackedButler.from_predicted   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_quantum_backed.py QuantumBackedButler._initialize   100% 8 0 0   50% 2 1   90%
python/lsst/daf/butler/_quantum_backed.py QuantumBackedButler.close   100% 2 0 0   50% 2 1   75%
python/lsst/daf/butler/_quantum_backed.py QuantumBackedButler._retrieve_dataset_type   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_quantum_backed.py QuantumBackedButler.isWriteable   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_quantum_backed.py QuantumBackedButler.get   100% 9 0 0   100% 2 0   100%
python/lsst/daf/butler/_quantum_backed.py QuantumBackedButler.getDeferred   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/_quantum_backed.py QuantumBackedButler.stored   83% 6 1 0   75% 4 1   80%
python/lsst/daf/butler/_quantum_backed.py QuantumBackedButler.stored_many   86% 7 1 0   83% 6 1   85%
python/lsst/daf/butler/_quantum_backed.py QuantumBackedButler.markInputUnused   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_quantum_backed.py QuantumBackedButler.dimensions   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_quantum_backed.py QuantumBackedButler.put   83% 6 1 0   50% 2 1   75%
python/lsst/daf/butler/_quantum_backed.py QuantumBackedButler.pruneDatasets   94% 18 1 0   85% 20 3   89%
python/lsst/daf/butler/_quantum_backed.py QuantumBackedButler.retrieve_artifacts_zip   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_quantum_backed.py QuantumBackedButler.retrieve_artifacts   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/_quantum_backed.py QuantumBackedButler.extract_provenance_data   67% 9 3 0   50% 4 2   62%
python/lsst/daf/butler/_quantum_backed.py QuantumBackedButler.export_predicted_datastore_records   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/_quantum_backed.py QuantumProvenanceData.collect_and_transfer   100% 14 0 0   100% 10 0   100%
python/lsst/daf/butler/_quantum_backed.py QuantumProvenanceData.parse_raw   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_quantum_backed.py QuantumProvenanceData.direct   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/_quantum_backed.py QuantumProvenanceData.direct._to_uuid_set   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_quantum_backed.py (no function)   100% 70 0 2   100% 0 0   100%
python/lsst/daf/butler/_query_all_datasets.py query_all_datasets   100% 17 0 0   100% 12 0   100%
python/lsst/daf/butler/_query_all_datasets.py _filter_collections_and_dataset_types   100% 14 0 0   100% 6 0   100%
python/lsst/daf/butler/_query_all_datasets.py (no function)   100% 29 0 2   100% 0 0   100%
python/lsst/daf/butler/_registry_shim.py RegistryShim.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/_registry_shim.py RegistryShim.isWriteable   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_registry_shim.py RegistryShim.dimensions   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_registry_shim.py RegistryShim.defaults   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_registry_shim.py RegistryShim.defaults   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_registry_shim.py RegistryShim.refresh   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_registry_shim.py RegistryShim.refresh_collection_summaries   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_registry_shim.py RegistryShim.caching_context   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_registry_shim.py RegistryShim.transaction   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/_registry_shim.py RegistryShim.resetConnectionPool   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_registry_shim.py RegistryShim.registerCollection   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_registry_shim.py RegistryShim.getCollectionType   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_registry_shim.py RegistryShim.registerRun   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_registry_shim.py RegistryShim.removeCollection   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_registry_shim.py RegistryShim.getCollectionChain   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_registry_shim.py RegistryShim.setCollectionChain   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_registry_shim.py RegistryShim.getCollectionParentChains   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_registry_shim.py RegistryShim.getCollectionDocumentation   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_registry_shim.py RegistryShim.setCollectionDocumentation   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_registry_shim.py RegistryShim.getCollectionSummary   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_registry_shim.py RegistryShim.registerDatasetType   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_registry_shim.py RegistryShim.removeDatasetType   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_registry_shim.py RegistryShim.getDatasetType   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_registry_shim.py RegistryShim.supportsIdGenerationMode   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_registry_shim.py RegistryShim.findDataset   97% 33 1 0   95% 20 1   96%
python/lsst/daf/butler/_registry_shim.py RegistryShim.insertDatasets   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_registry_shim.py RegistryShim._importDatasets   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_registry_shim.py RegistryShim.getDataset   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_registry_shim.py RegistryShim._fetch_run_dataset_ids   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_registry_shim.py RegistryShim.removeDatasets   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_registry_shim.py RegistryShim.associate   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_registry_shim.py RegistryShim.disassociate   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_registry_shim.py RegistryShim.certify   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_registry_shim.py RegistryShim.decertify   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_registry_shim.py RegistryShim.getDatasetLocations   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_registry_shim.py RegistryShim.expandDataId   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_registry_shim.py RegistryShim.insertDimensionData   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_registry_shim.py RegistryShim.syncDimensionData   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_registry_shim.py RegistryShim.queryDatasetTypes   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_registry_shim.py RegistryShim.queryCollections   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_registry_shim.py RegistryShim.obsCoreTableManager   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_registry_shim.py RegistryShim.storageClasses   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_registry_shim.py (no function)   100% 66 0 4   100% 0 0   100%
python/lsst/daf/butler/_rubin/__init__.py (no function)   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_rubin/datastore_records.py export_datastore_records_table   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_rubin/datastore_records.py import_datastore_records_table   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_rubin/datastore_records.py (no function)   0% 7 7 0   100% 0 0   0%
python/lsst/daf/butler/_rubin/file_datasets.py transfer_datasets_to_datastore   92% 13 1 0   75% 4 1   88%
python/lsst/daf/butler/_rubin/file_datasets.py (no function)   100% 10 0 0   100% 0 0   100%
python/lsst/daf/butler/_rubin/temporary_for_ingest.py TemporaryForIngest.path   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_rubin/temporary_for_ingest.py TemporaryForIngest.ospath   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_rubin/temporary_for_ingest.py TemporaryForIngest.make_path   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/_rubin/temporary_for_ingest.py TemporaryForIngest.ingest   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_rubin/temporary_for_ingest.py TemporaryForIngest.__enter__   100% 9 0 0   50% 2 1   91%
python/lsst/daf/butler/_rubin/temporary_for_ingest.py TemporaryForIngest.__exit__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_rubin/temporary_for_ingest.py TemporaryForIngest.find_orphaned_temporaries_by_path   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/_rubin/temporary_for_ingest.py TemporaryForIngest.find_orphaned_temporaries_by_ref   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/_rubin/temporary_for_ingest.py TemporaryForIngest._get_temporary_suffix   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/_rubin/temporary_for_ingest.py (no function)   100% 31 0 7   100% 0 0   100%
python/lsst/daf/butler/_rubin/transfer_datasets_in_place.py transfer_datasets_in_place   100% 12 0 1   100% 0 0   100%
python/lsst/daf/butler/_rubin/transfer_datasets_in_place.py (no function)   100% 9 0 0   100% 0 0   100%
python/lsst/daf/butler/_standalone_datastore.py instantiate_standalone_datastore   100% 13 0 0   50% 6 3   84%
python/lsst/daf/butler/_standalone_datastore.py _DatasetRecordStorageManagerDatastoreConstructionMimic.getIdColumnType   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_standalone_datastore.py _DatasetRecordStorageManagerDatastoreConstructionMimic.addDatasetForeignKey   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/_standalone_datastore.py (no function)   100% 17 0 0   100% 0 0   100%
python/lsst/daf/butler/_storage_class.py StorageClass.__init__   100% 31 0 0   100% 14 0   100%
python/lsst/daf/butler/_storage_class.py StorageClass.components   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_storage_class.py StorageClass.derivedComponents   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_storage_class.py StorageClass.converters   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_storage_class.py StorageClass._get_converters_by_type   88% 25 3 0   90% 10 1   89%
python/lsst/daf/butler/_storage_class.py StorageClass.parameters   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_storage_class.py StorageClass.pytype   100% 7 0 0   100% 4 0   100%
python/lsst/daf/butler/_storage_class.py StorageClass.delegateClass   100% 7 0 0   100% 4 0   100%
python/lsst/daf/butler/_storage_class.py StorageClass.allComponents   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_storage_class.py StorageClass.delegate   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/_storage_class.py StorageClass.isComposite   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/_storage_class.py StorageClass._lookupNames   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_storage_class.py StorageClass.knownParameters   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/_storage_class.py StorageClass.validateParameters   100% 8 0 0   100% 4 0   100%
python/lsst/daf/butler/_storage_class.py StorageClass.filterParameters   83% 12 2 0   75% 8 2   80%
python/lsst/daf/butler/_storage_class.py StorageClass.validateInstance   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_storage_class.py StorageClass.is_type   100% 11 0 0   100% 6 0   100%
python/lsst/daf/butler/_storage_class.py StorageClass.can_convert   88% 16 2 0   100% 8 0   92%
python/lsst/daf/butler/_storage_class.py StorageClass.coerce_type   100% 12 0 0   100% 8 0   100%
python/lsst/daf/butler/_storage_class.py StorageClass.__eq__   100% 13 0 0   100% 12 0   100%
python/lsst/daf/butler/_storage_class.py StorageClass.__hash__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/_storage_class.py StorageClass.__repr__   94% 17 1 0   75% 12 3   86%
python/lsst/daf/butler/_storage_class.py StorageClass.__str__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_storage_class.py StorageClassFactory.__init__   80% 5 1 0   50% 2 1   71%
python/lsst/daf/butler/_storage_class.py StorageClassFactory.__str__   0% 3 3 0   100% 0 0   0%
python/lsst/daf/butler/_storage_class.py StorageClassFactory.__contains__   100% 6 0 0   100% 4 0   100%
python/lsst/daf/butler/_storage_class.py StorageClassFactory.addFromConfig   100% 8 0 0   100% 2 0   100%
python/lsst/daf/butler/_storage_class.py StorageClassFactory.addFromConfig.processStorageClass   91% 33 3 0   100% 12 0   93%
python/lsst/daf/butler/_storage_class.py StorageClassFactory.getStorageClass   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/_storage_class.py StorageClassFactory.findStorageClass   89% 9 1 0   67% 6 2   80%
python/lsst/daf/butler/_storage_class.py StorageClassFactory._find_storage_class   100% 5 0 0   100% 4 0   100%
python/lsst/daf/butler/_storage_class.py StorageClassFactory.registerStorageClass   89% 9 1 0   83% 6 1   87%
python/lsst/daf/butler/_storage_class.py StorageClassFactory._unregisterStorageClass   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/_storage_class.py StorageClassFactory.reset   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/_storage_class.py (no function)   100% 69 0 0   100% 0 0   100%
python/lsst/daf/butler/_storage_class_delegate.py StorageClassDelegate.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/_storage_class_delegate.py StorageClassDelegate.can_accept   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_storage_class_delegate.py StorageClassDelegate._attrNames   86% 7 1 0   50% 2 1   78%
python/lsst/daf/butler/_storage_class_delegate.py StorageClassDelegate.assemble   38% 29 18 0   22% 18 2   32%
python/lsst/daf/butler/_storage_class_delegate.py StorageClassDelegate.getComponent   67% 12 4 0   50% 8 4   60%
python/lsst/daf/butler/_storage_class_delegate.py StorageClassDelegate.disassemble   56% 25 11 0   50% 16 6   54%
python/lsst/daf/butler/_storage_class_delegate.py StorageClassDelegate.add_provenance   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_storage_class_delegate.py StorageClassDelegate.handleParameters   0% 3 3 0   0% 2 0   0%
python/lsst/daf/butler/_storage_class_delegate.py StorageClassDelegate.selectResponsibleComponent   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_storage_class_delegate.py StorageClassDelegate.copy   100% 3 0 1   100% 0 0   100%
python/lsst/daf/butler/_storage_class_delegate.py (no function)   100% 30 0 3   100% 0 0   100%
python/lsst/daf/butler/_timespan.py Timespan.__init__   89% 35 4 0   83% 30 5   86%
python/lsst/daf/butler/_timespan.py Timespan.makeEmpty   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/_timespan.py Timespan.fromInstant   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/_timespan.py Timespan.from_day_obs   100% 9 0 0   100% 4 0   100%
python/lsst/daf/butler/_timespan.py Timespan.begin   100% 5 0 0   100% 4 0   100%
python/lsst/daf/butler/_timespan.py Timespan.end   100% 5 0 0   100% 4 0   100%
python/lsst/daf/butler/_timespan.py Timespan.isEmpty   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_timespan.py Timespan.__str__   94% 16 1 0   75% 8 2   88%
python/lsst/daf/butler/_timespan.py Timespan.__repr_astropy__   80% 5 1 0   75% 4 1   78%
python/lsst/daf/butler/_timespan.py Timespan.__repr__   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/_timespan.py Timespan.__eq__   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/_timespan.py Timespan.__hash__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_timespan.py Timespan.__reduce__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_timespan.py Timespan.__lt__   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/_timespan.py Timespan.__gt__   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/_timespan.py Timespan.overlaps   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/_timespan.py Timespan.contains   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/_timespan.py Timespan.intersection   88% 8 1 0   50% 2 1   80%
python/lsst/daf/butler/_timespan.py Timespan.difference   100% 9 0 0   100% 8 0   100%
python/lsst/daf/butler/_timespan.py Timespan.to_yaml   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/_timespan.py Timespan.from_yaml   83% 6 1 0   75% 4 1   80%
python/lsst/daf/butler/_timespan.py Timespan._validate   80% 5 1 0   75% 4 1   78%
python/lsst/daf/butler/_timespan.py Timespan._serialize   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_timespan.py (no function)   97% 63 2 0   100% 0 0   97%
python/lsst/daf/butler/_topology.py TopologicalFamily.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/_topology.py TopologicalFamily.__eq__   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/_topology.py TopologicalFamily.__hash__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_topology.py TopologicalFamily.__contains__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_topology.py TopologicalFamily.__repr__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_topology.py TopologicalFamily.choose   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_topology.py TopologicalFamily.make_column_reference   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_topology.py TopologicalRelationshipEndpoint.name   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_topology.py TopologicalRelationshipEndpoint.topology   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/_topology.py TopologicalRelationshipEndpoint.spatial   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_topology.py TopologicalRelationshipEndpoint.temporal   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/_topology.py (no function)   100% 40 0 3   100% 0 0   100%
python/lsst/daf/butler/_utilities/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/_utilities/locked_object.py LockedObject.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/_utilities/locked_object.py LockedObject.access   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/_utilities/locked_object.py (no function)   100% 9 0 0   100% 0 0   100%
python/lsst/daf/butler/_utilities/named_locks.py NamedLocks.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/_utilities/named_locks.py NamedLocks.lock   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/_utilities/named_locks.py NamedLocks._get_lock   100% 6 0 0   100% 2 0   100%
python/lsst/daf/butler/_utilities/named_locks.py (no function)   100% 8 0 0   100% 0 0   100%
python/lsst/daf/butler/_utilities/thread_safe_cache.py ThreadSafeCache.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/_utilities/thread_safe_cache.py ThreadSafeCache.get   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/_utilities/thread_safe_cache.py ThreadSafeCache.set_or_get   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/_utilities/thread_safe_cache.py ThreadSafeCache.clear   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/_utilities/thread_safe_cache.py (no function)   100% 9 0 0   100% 0 0   100%
python/lsst/daf/butler/_uuid.py generate_uuidv7   100% 7 0 0   100% 0 0   100%
python/lsst/daf/butler/_uuid.py (no function)   100% 5 0 0   100% 0 0   100%
python/lsst/daf/butler/arrow_utils.py ToArrow.for_primitive   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/arrow_utils.py ToArrow.for_uuid   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/arrow_utils.py ToArrow.for_region   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/arrow_utils.py ToArrow.for_timespan   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/arrow_utils.py ToArrow.for_datetime   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/arrow_utils.py ToArrow.name   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/arrow_utils.py ToArrow.nullable   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/arrow_utils.py ToArrow.data_type   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/arrow_utils.py ToArrow.field   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/arrow_utils.py ToArrow.dictionary_encoded   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/arrow_utils.py ToArrow.append   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/arrow_utils.py ToArrow.finish   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/arrow_utils.py _ToArrowPrimitive.__init__   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/arrow_utils.py _ToArrowPrimitive.name   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/arrow_utils.py _ToArrowPrimitive.nullable   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/arrow_utils.py _ToArrowPrimitive.data_type   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/arrow_utils.py _ToArrowPrimitive.append   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/arrow_utils.py _ToArrowPrimitive.finish   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/arrow_utils.py _ToArrowDictionary.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/arrow_utils.py _ToArrowDictionary.name   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/arrow_utils.py _ToArrowDictionary.nullable   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/arrow_utils.py _ToArrowDictionary.data_type   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/arrow_utils.py _ToArrowDictionary.append   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/arrow_utils.py _ToArrowDictionary.finish   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/arrow_utils.py _ToArrowUUID.__init__   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/arrow_utils.py _ToArrowUUID.name   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/arrow_utils.py _ToArrowUUID.nullable   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/arrow_utils.py _ToArrowUUID.data_type   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/arrow_utils.py _ToArrowUUID.append   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/arrow_utils.py _ToArrowUUID.finish   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/arrow_utils.py _ToArrowRegion.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/arrow_utils.py _ToArrowRegion.name   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/arrow_utils.py _ToArrowRegion.nullable   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/arrow_utils.py _ToArrowRegion.data_type   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/arrow_utils.py _ToArrowRegion.append   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/arrow_utils.py _ToArrowRegion.finish   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/arrow_utils.py _ToArrowTimespan.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/arrow_utils.py _ToArrowTimespan.name   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/arrow_utils.py _ToArrowTimespan.nullable   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/arrow_utils.py _ToArrowTimespan.data_type   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/arrow_utils.py _ToArrowTimespan.append   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/arrow_utils.py _ToArrowTimespan.finish   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/arrow_utils.py _ToArrowDateTime.__init__   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/arrow_utils.py _ToArrowDateTime.name   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/arrow_utils.py _ToArrowDateTime.nullable   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/arrow_utils.py _ToArrowDateTime.data_type   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/arrow_utils.py _ToArrowDateTime.append   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/arrow_utils.py _ToArrowDateTime.finish   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/arrow_utils.py UUIDArrowType.__init__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/arrow_utils.py UUIDArrowType.__arrow_ext_serialize__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/arrow_utils.py UUIDArrowType.__arrow_ext_deserialize__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/arrow_utils.py UUIDArrowType.__arrow_ext_scalar_class__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/arrow_utils.py UUIDArrowScalar.as_py   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/arrow_utils.py RegionArrowType.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/arrow_utils.py RegionArrowType.__arrow_ext_serialize__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/arrow_utils.py RegionArrowType.__arrow_ext_deserialize__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/arrow_utils.py RegionArrowType.__arrow_ext_scalar_class__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/arrow_utils.py RegionArrowScalar.as_py   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/arrow_utils.py TimespanArrowType.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/arrow_utils.py TimespanArrowType.__arrow_ext_serialize__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/arrow_utils.py TimespanArrowType.__arrow_ext_deserialize__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/arrow_utils.py TimespanArrowType.__arrow_ext_scalar_class__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/arrow_utils.py TimespanArrowScalar.as_py   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/arrow_utils.py DateTimeArrowType.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/arrow_utils.py DateTimeArrowType.__arrow_ext_serialize__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/arrow_utils.py DateTimeArrowType.__arrow_ext_deserialize__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/arrow_utils.py DateTimeArrowType.__arrow_ext_scalar_class__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/arrow_utils.py DateTimeArrowScalar.as_py   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/arrow_utils.py ArrowTableUtils.replace_column   75% 4 1 0   50% 2 1   67%
python/lsst/daf/butler/arrow_utils.py ArrowTableUtils.modify_column   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/arrow_utils.py (no function)   100% 150 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/butler.py _importPlugin   100% 6 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/butler.py LoaderCLI.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/butler.py LoaderCLI.localCmdPkg   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/cli/butler.py LoaderCLI.getLocalCommands   100% 6 0 0   100% 2 0   100%
python/lsst/daf/butler/cli/butler.py LoaderCLI.list_commands   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/butler.py LoaderCLI.get_command   88% 16 2 0   75% 8 2   83%
python/lsst/daf/butler/cli/butler.py LoaderCLI._setupLogging   67% 6 2 0   75% 4 1   70%
python/lsst/daf/butler/cli/butler.py LoaderCLI.getPluginList   100% 6 0 0   100% 4 0   100%
python/lsst/daf/butler/cli/butler.py LoaderCLI._funcNameToCmdName   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/cli/butler.py LoaderCLI._cmdNameToFuncName   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/butler.py LoaderCLI._mergeCommandLists   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/cli/butler.py LoaderCLI._getPluginCommands   44% 25 14 0   75% 8 2   52%
python/lsst/daf/butler/cli/butler.py LoaderCLI._getCommands   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/butler.py LoaderCLI._raiseIfDuplicateCommands   100% 11 0 0   100% 10 0   100%
python/lsst/daf/butler/cli/butler.py ButlerCLI._funcNameToCmdName   0% 3 3 0   0% 2 0   0%
python/lsst/daf/butler/cli/butler.py ButlerCLI._cmdNameToFuncName   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/cli/butler.py UncachedButlerCLI._getCommands   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/butler.py cli   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/butler.py main   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/cli/butler.py (no function)   100% 73 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/cliLog.py PrecisionLogFormatter.formatTime   0% 7 7 0   0% 4 0   0%
python/lsst/daf/butler/cli/cliLog.py CliLog.root_loggers   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/cli/cliLog.py CliLog.initLog   83% 35 6 0   78% 18 4   81%
python/lsst/daf/butler/cli/cliLog.py CliLog.resetLog   100% 16 0 0   75% 8 2   92%
python/lsst/daf/butler/cli/cliLog.py CliLog.setLogLevels   100% 5 0 0   75% 4 1   89%
python/lsst/daf/butler/cli/cliLog.py CliLog._setLogLevel   100% 13 0 0   80% 10 2   91%
python/lsst/daf/butler/cli/cliLog.py CliLog._getPyLogLevel   80% 5 1 0   75% 4 1   78%
python/lsst/daf/butler/cli/cliLog.py CliLog._getLsstLogLevel   75% 8 2 0   67% 6 2   71%
python/lsst/daf/butler/cli/cliLog.py CliLog.ComponentSettings.__init__   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/cli/cliLog.py CliLog.ComponentSettings.__repr__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/cli/cliLog.py CliLog._recordComponentSetting   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/cliLog.py CliLog.replayConfigState   0% 7 7 0   0% 4 0   0%
python/lsst/daf/butler/cli/cliLog.py (no function)   96% 50 2 0   100% 0 0   96%
python/lsst/daf/butler/cli/cmd/__init__.py (no function)   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/cmd/_remove_collections.py remove_collections   91% 35 3 0   95% 20 1   93%
python/lsst/daf/butler/cli/cmd/_remove_collections.py (no function)   100% 22 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/cmd/_remove_runs.py _quoted   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/cmd/_remove_runs.py _print_remove   100% 10 0 0   100% 4 0   100%
python/lsst/daf/butler/cli/cmd/_remove_runs.py _print_requires_confirmation   100% 4 0 0   75% 4 1   88%
python/lsst/daf/butler/cli/cmd/_remove_runs.py remove_runs   100% 17 0 0   100% 8 0   100%
python/lsst/daf/butler/cli/cmd/_remove_runs.py (no function)   100% 31 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/cmd/commands.py associate   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/cmd/commands.py butler_import   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/cmd/commands.py create   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/cmd/commands.py config_dump   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/cmd/commands.py config_validate   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/cli/cmd/commands.py prune_datasets   100% 42 0 0   93% 30 2   97%
python/lsst/daf/butler/cli/cmd/commands.py query_collections   100% 3 0 0   50% 2 1   80%
python/lsst/daf/butler/cli/cmd/commands.py query_dataset_types   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/cli/cmd/commands.py remove_dataset_type   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/cmd/commands.py query_datasets   100% 6 0 0   100% 2 0   100%
python/lsst/daf/butler/cli/cmd/commands.py certify_calibrations   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/cli/cmd/commands.py query_data_ids   0% 8 8 0   0% 6 0   0%
python/lsst/daf/butler/cli/cmd/commands.py query_dimension_records   67% 6 2 0   50% 4 2   60%
python/lsst/daf/butler/cli/cmd/commands.py retrieve_artifacts   58% 12 5 0   50% 8 2   55%
python/lsst/daf/butler/cli/cmd/commands.py transfer_datasets   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/cli/cmd/commands.py collection_chain   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/cmd/commands.py ingest_files   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/cmd/commands.py register_dataset_type   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/cli/cmd/commands.py export_calibs   0% 3 3 0   0% 2 0   0%
python/lsst/daf/butler/cli/cmd/commands.py ingest_zip   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/cli/cmd/commands.py (no function)   100% 205 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/opt/__init__.py (no function)   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/opt/arguments.py (no function)   100% 11 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/opt/optionGroups.py query_datasets_options.__init__   92% 13 1 0   90% 10 1   91%
python/lsst/daf/butler/cli/opt/optionGroups.py (no function)   100% 7 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/opt/options.py CollectionTypeCallback.makeCollectionTypes   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/cli/opt/options.py _config_split   0% 3 3 0   100% 0 0   0%
python/lsst/daf/butler/cli/opt/options.py (no function)   100% 42 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/progress.py ClickProgressHandler.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/progress.py ClickProgressHandler.callback   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/cli/progress.py ClickProgressHandler.option   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/progress.py ClickProgressHandler.get_progress_bar   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/progress.py (no function)   100% 15 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/utils.py astropyTablesToStr   100% 6 0 0   100% 2 0   100%
python/lsst/daf/butler/cli/utils.py printAstropyTables   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/cli/utils.py textTypeStr   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/cli/utils.py ClickExitFailedNicely.__init__   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/utils.py ClickExitFailedNicely._clean_tb   100% 3 0 0   50% 2 1   80%
python/lsst/daf/butler/cli/utils.py ClickExitFailedNicely.exit_click   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/cli/utils.py ClickExitFailedNicely.exit_click_command_bad_status   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/cli/utils.py ClickExitFailedNicely.exit_click_command_click_exception   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/utils.py LogCliRunner.invoke   100% 6 0 0   100% 2 0   100%
python/lsst/daf/butler/cli/utils.py clickResultMsg   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/cli/utils.py command_test_env   100% 5 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/utils.py addArgumentHelp   83% 12 2 0   67% 6 2   78%
python/lsst/daf/butler/cli/utils.py split_commas   100% 29 0 0   95% 22 1   98%
python/lsst/daf/butler/cli/utils.py split_kv   100% 36 0 0   100% 20 0   100%
python/lsst/daf/butler/cli/utils.py split_kv.norm   100% 6 0 0   83% 6 1   92%
python/lsst/daf/butler/cli/utils.py split_kv.RetDict.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/utils.py split_kv.RetDict.add   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/cli/utils.py split_kv.RetDict.get   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/utils.py split_kv.RetTuple.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/utils.py split_kv.RetTuple.add   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/cli/utils.py split_kv.RetTuple.get   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/utils.py to_upper   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/utils.py unwrap   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/utils.py unwrap.splitSection   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/cli/utils.py option_section.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/utils.py option_section.__call__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/utils.py MWPath.__init__   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/cli/utils.py MWPath.convert   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/cli/utils.py MWOption.make_metavar   88% 8 1 0   83% 6 1   86%
python/lsst/daf/butler/cli/utils.py MWArgument.make_metavar   83% 6 1 0   75% 4 1   80%
python/lsst/daf/butler/cli/utils.py OptionSection.hidden   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/cli/utils.py OptionSection.hidden   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/utils.py OptionSection.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/utils.py OptionSection.get_help_record   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/utils.py MWOptionDecorator.__init__   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/utils.py MWOptionDecorator.name   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/utils.py MWOptionDecorator.opts   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/utils.py MWOptionDecorator.help   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/utils.py MWOptionDecorator.__call__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/utils.py MWArgumentDecorator.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/utils.py MWArgumentDecorator.__call__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/utils.py MWArgumentDecorator.__call__.decorator   100% 5 0 0   100% 4 0   100%
python/lsst/daf/butler/cli/utils.py MWCommand.__init__   100% 5 0 0   50% 2 1   86%
python/lsst/daf/butler/cli/utils.py MWCommand._capture_args   100% 26 0 1   100% 12 0   100%
python/lsst/daf/butler/cli/utils.py MWCommand.parse_args   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/utils.py MWCommand.epilog   0% 6 6 0   0% 4 0   0%
python/lsst/daf/butler/cli/utils.py MWCommand.epilog   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/utils.py OptionGroup.__call__   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/cli/utils.py MWCtxObj.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/utils.py MWCtxObj.getFrom   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/cli/utils.py yaml_presets   100% 17 0 0   100% 6 0   100%
python/lsst/daf/butler/cli/utils.py yaml_presets._name_for_option   100% 5 0 0   100% 4 0   100%
python/lsst/daf/butler/cli/utils.py _read_yaml_presets   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/utils.py sortAstropyTable   100% 11 0 0   100% 4 0   100%
python/lsst/daf/butler/cli/utils.py catch_and_exit   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/utils.py catch_and_exit.inner   100% 11 0 0   100% 0 0   100%
python/lsst/daf/butler/cli/utils.py (no function)   99% 108 1 3   50% 2 1   98%
python/lsst/daf/butler/column_spec.py ColumnValueSerializer.serialize   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/column_spec.py ColumnValueSerializer.deserialize   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/column_spec.py _TypeAdapterColumnValueSerializer.__init__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/column_spec.py _TypeAdapterColumnValueSerializer.serialize   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/column_spec.py _TypeAdapterColumnValueSerializer.deserialize   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/column_spec.py _BaseColumnSpec.to_sql_spec   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/column_spec.py _BaseColumnSpec.to_arrow   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/column_spec.py _BaseColumnSpec.serializer   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/column_spec.py _BaseColumnSpec.display   0% 5 5 0   0% 2 0   0%
python/lsst/daf/butler/column_spec.py _BaseColumnSpec.__str__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/column_spec.py _BaseColumnSpec.annotated_type   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/column_spec.py _BaseColumnSpec._get_base_annotated_type   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/column_spec.py make_tuple_type_adapter   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/column_spec.py IntColumnSpec.to_arrow   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/column_spec.py IntColumnSpec._get_base_annotated_type   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/column_spec.py StringColumnSpec.to_sql_spec   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/column_spec.py StringColumnSpec.to_arrow   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/column_spec.py StringColumnSpec._get_base_annotated_type   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/column_spec.py HashColumnSpec.to_sql_spec   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/column_spec.py HashColumnSpec.to_arrow   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/column_spec.py HashColumnSpec._get_base_annotated_type   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/column_spec.py FloatColumnSpec.to_arrow   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/column_spec.py FloatColumnSpec._get_base_annotated_type   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/column_spec.py BoolColumnSpec.to_arrow   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/column_spec.py BoolColumnSpec._get_base_annotated_type   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/column_spec.py UUIDColumnSpec.to_arrow   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/column_spec.py UUIDColumnSpec._get_base_annotated_type   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/column_spec.py RegionColumnSpec.to_arrow   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/column_spec.py RegionColumnSpec._get_base_annotated_type   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/column_spec.py TimespanColumnSpec.to_arrow   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/column_spec.py TimespanColumnSpec._get_base_annotated_type   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/column_spec.py DateTimeColumnSpec.to_arrow   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/column_spec.py DateTimeColumnSpec._get_base_annotated_type   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/column_spec.py (no function)   100% 107 0 2   100% 0 0   100%
python/lsst/daf/butler/datastore/__init__.py (no function)   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py IngestPrepData.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py DatastoreTransaction.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py DatastoreTransaction.registerUndo   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py DatastoreTransaction.undoWith   100% 5 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py DatastoreTransaction.rollback   83% 12 2 0   100% 2 0   86%
python/lsst/daf/butler/datastore/_datastore.py DatastoreTransaction.commit   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/datastore/_datastore.py DatasetRefURIs.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py DatasetRefURIs.__getitem__   100% 5 0 0   100% 4 0   100%
python/lsst/daf/butler/datastore/_datastore.py DatasetRefURIs.__len__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py DatasetRefURIs.__repr__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py DatasetRefURIs.iter_all   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/datastore/_datastore.py Datastore.setConfigRoot   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py Datastore.fromConfig   80% 5 1 0   50% 2 1   71%
python/lsst/daf/butler/datastore/_datastore.py Datastore.__init__   100% 6 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py Datastore._create_from_config   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py Datastore.clone   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py Datastore.__str__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py Datastore.__repr__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py Datastore.names   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py Datastore.roots   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py Datastore.transaction   100% 8 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py Datastore._set_trust_mode   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py Datastore.knows   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py Datastore.knows_these   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py Datastore.mexists   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/datastore/_datastore.py Datastore.exists   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py Datastore.get   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py Datastore.prepare_get_for_external_client   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py Datastore.put   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py Datastore.put_new   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py Datastore._overrideTransferMode   0% 3 3 0   0% 2 0   0%
python/lsst/daf/butler/datastore/_datastore.py Datastore._prepIngest   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py Datastore._finishIngest   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py Datastore.ingest   100% 11 0 0   100% 4 0   100%
python/lsst/daf/butler/datastore/_datastore.py Datastore.transfer_from   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py Datastore.getManyURIs   100% 11 0 0   100% 4 0   100%
python/lsst/daf/butler/datastore/_datastore.py Datastore.getURIs   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py Datastore.getURI   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py Datastore.retrieveArtifacts   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py Datastore.ingest_zip   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py Datastore.remove   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py Datastore.forget   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py Datastore.trash   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py Datastore.emptyTrash   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py Datastore.transfer   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py Datastore.export   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py Datastore.validateConfiguration   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py Datastore.validateKey   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py Datastore.getLookupKeys   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py Datastore.needs_expanded_data_ids   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/datastore/_datastore.py Datastore.import_records   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py Datastore.export_records   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py Datastore.export_table   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py Datastore.import_table   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py Datastore.export_predicted_records   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py Datastore.set_retrieve_dataset_type_method   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py Datastore.get_opaque_table_definitions   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py Datastore.get_file_info_for_transfer   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py Datastore.locate_missing_files_for_transfer   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py NullDatastore._create_from_config   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/datastore/_datastore.py NullDatastore.clone   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py NullDatastore.setConfigRoot   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/datastore/_datastore.py NullDatastore.__init__   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py NullDatastore.knows   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py NullDatastore.exists   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py NullDatastore.get   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py NullDatastore.put   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py NullDatastore.put_new   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py NullDatastore.ingest   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py NullDatastore.transfer_from   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py NullDatastore.getURIs   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py NullDatastore.getURI   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py NullDatastore.ingest_zip   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py NullDatastore.retrieveArtifacts   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py NullDatastore.remove   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py NullDatastore.forget   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py NullDatastore.trash   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py NullDatastore.emptyTrash   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py NullDatastore.transfer   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py NullDatastore.export   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py NullDatastore.validateConfiguration   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py NullDatastore.validateKey   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/datastore/_datastore.py NullDatastore.getLookupKeys   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py NullDatastore.import_records   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py NullDatastore.export_records   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py NullDatastore.get_opaque_table_definitions   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/_datastore.py (no function)   100% 180 0 13   100% 0 0   100%
python/lsst/daf/butler/datastore/_transfer.py FileTransferSource.get_file_info_for_transfer   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/_transfer.py FileTransferSource.locate_missing_files_for_transfer   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/_transfer.py (no function)   100% 17 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/cache_manager.py remove_cache_directory   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/datastore/cache_manager.py _construct_cache_path   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/cache_manager.py _parse_cache_name   100% 10 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/cache_manager.py CacheEntry.from_file   83% 6 1 0   50% 2 1   75%
python/lsst/daf/butler/datastore/cache_manager.py CacheRegistry.cache_size   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/cache_manager.py CacheRegistry.__getitem__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/cache_manager.py CacheRegistry.__setitem__   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/datastore/cache_manager.py CacheRegistry.__delitem__   0% 3 3 0   100% 0 0   0%
python/lsst/daf/butler/datastore/cache_manager.py CacheRegistry._decrement   60% 5 2 0   50% 4 2   56%
python/lsst/daf/butler/datastore/cache_manager.py CacheRegistry.__contains__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/cache_manager.py CacheRegistry.__len__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/cache_manager.py CacheRegistry.__iter__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/cache_manager.py CacheRegistry.keys   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/datastore/cache_manager.py CacheRegistry.values   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/datastore/cache_manager.py CacheRegistry.items   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/cache_manager.py CacheRegistry.pop   82% 11 2 0   50% 8 4   68%
python/lsst/daf/butler/datastore/cache_manager.py CacheRegistry.get_dataset_keys   100% 6 0 0   100% 4 0   100%
python/lsst/daf/butler/datastore/cache_manager.py AbstractDatastoreCacheManager.cache_size   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/datastore/cache_manager.py AbstractDatastoreCacheManager.file_count   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/datastore/cache_manager.py AbstractDatastoreCacheManager.__init__   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/datastore/cache_manager.py AbstractDatastoreCacheManager.should_be_cached   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/cache_manager.py AbstractDatastoreCacheManager.known_to_cache   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/cache_manager.py AbstractDatastoreCacheManager.move_to_cache   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/cache_manager.py AbstractDatastoreCacheManager.find_in_cache   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/cache_manager.py AbstractDatastoreCacheManager.remove_from_cache   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/cache_manager.py AbstractDatastoreCacheManager.__str__   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/cache_manager.py DatastoreCacheManager.__init__   97% 37 1 0   95% 20 1   96%
python/lsst/daf/butler/datastore/cache_manager.py DatastoreCacheManager.cache_directory   100% 12 0 0   100% 6 0   100%
python/lsst/daf/butler/datastore/cache_manager.py DatastoreCacheManager._temp_exempt_directory   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/cache_manager.py DatastoreCacheManager.cache_size   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/cache_manager.py DatastoreCacheManager.file_count   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/cache_manager.py DatastoreCacheManager.create_disabled   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/cache_manager.py DatastoreCacheManager.set_fallback_cache_directory_if_unset   89% 9 1 0   50% 2 1   82%
python/lsst/daf/butler/datastore/cache_manager.py DatastoreCacheManager.should_be_cached   92% 13 1 0   88% 8 1   90%
python/lsst/daf/butler/datastore/cache_manager.py DatastoreCacheManager._construct_cache_name   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/cache_manager.py DatastoreCacheManager.move_to_cache   92% 13 1 0   83% 6 1   89%
python/lsst/daf/butler/datastore/cache_manager.py DatastoreCacheManager.find_in_cache   85% 33 5 0   80% 10 2   84%
python/lsst/daf/butler/datastore/cache_manager.py DatastoreCacheManager.remove_from_cache   100% 10 0 0   100% 8 0   100%
python/lsst/daf/butler/datastore/cache_manager.py DatastoreCacheManager._register_cache_entry   77% 13 3 0   67% 6 2   74%
python/lsst/daf/butler/datastore/cache_manager.py DatastoreCacheManager.scan_cache   79% 19 4 0   58% 12 3   71%
python/lsst/daf/butler/datastore/cache_manager.py DatastoreCacheManager.known_to_cache   100% 13 0 0   100% 8 0   100%
python/lsst/daf/butler/datastore/cache_manager.py DatastoreCacheManager._remove_from_cache   100% 6 0 0   100% 2 0   100%
python/lsst/daf/butler/datastore/cache_manager.py DatastoreCacheManager._expire_cache   93% 42 3 0   86% 28 4   90%
python/lsst/daf/butler/datastore/cache_manager.py DatastoreCacheManager._sort_cache   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/cache_manager.py DatastoreCacheManager._sort_cache._sort_by_time   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/cache_manager.py DatastoreCacheManager.__str__   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/datastore/cache_manager.py DatastoreDisabledCacheManager.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/cache_manager.py DatastoreDisabledCacheManager.should_be_cached   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/cache_manager.py DatastoreDisabledCacheManager.move_to_cache   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/cache_manager.py DatastoreDisabledCacheManager.find_in_cache   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/cache_manager.py DatastoreDisabledCacheManager.remove_from_cache   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/datastore/cache_manager.py DatastoreDisabledCacheManager.known_to_cache   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/cache_manager.py DatastoreDisabledCacheManager.__str__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/cache_manager.py (no function)   100% 123 0 5   100% 0 0   100%
python/lsst/daf/butler/datastore/composites.py CompositesConfig.validate   100% 4 0 0   100% 4 0   100%
python/lsst/daf/butler/datastore/composites.py CompositesMap.__init__   100% 9 0 0   83% 6 1   93%
python/lsst/daf/butler/datastore/composites.py CompositesMap.shouldBeDisassembled   94% 16 1 0   90% 10 1   92%
python/lsst/daf/butler/datastore/composites.py CompositesMap.__str__   0% 6 6 0   0% 2 0   0%
python/lsst/daf/butler/datastore/composites.py (no function)   100% 18 0 8   100% 0 0   100%
python/lsst/daf/butler/datastore/constraints.py Constraints.__init__   100% 10 0 0   100% 8 0   100%
python/lsst/daf/butler/datastore/constraints.py Constraints.__str__   0% 5 5 0   0% 2 0   0%
python/lsst/daf/butler/datastore/constraints.py Constraints.isAcceptable   100% 15 0 0   100% 8 0   100%
python/lsst/daf/butler/datastore/constraints.py Constraints.getLookupKeys   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/constraints.py (no function)   100% 19 0 5   100% 0 0   100%
python/lsst/daf/butler/datastore/file_templates.py FileTemplates.__init__   85% 13 2 0   75% 8 2   81%
python/lsst/daf/butler/datastore/file_templates.py FileTemplates.templates   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/file_templates.py FileTemplates.__contains__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/datastore/file_templates.py FileTemplates.__getitem__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/datastore/file_templates.py FileTemplates.validateTemplates   70% 27 8 0   71% 14 2   71%
python/lsst/daf/butler/datastore/file_templates.py FileTemplates.getLookupKeys   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/file_templates.py FileTemplates.getTemplateWithMatch   100% 12 0 0   100% 6 0   100%
python/lsst/daf/butler/datastore/file_templates.py FileTemplates.getTemplate   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/file_templates.py FileTemplate.__init__   75% 4 1 0   50% 2 1   67%
python/lsst/daf/butler/datastore/file_templates.py FileTemplate.__eq__   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/datastore/file_templates.py FileTemplate.__str__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/file_templates.py FileTemplate.__repr__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/datastore/file_templates.py FileTemplate.grouped_fields   100% 33 0 0   100% 22 0   100%
python/lsst/daf/butler/datastore/file_templates.py FileTemplate.fields   93% 14 1 0   92% 12 1   92%
python/lsst/daf/butler/datastore/file_templates.py FileTemplate.format   99% 87 1 0   97% 58 2   98%
python/lsst/daf/butler/datastore/file_templates.py FileTemplate.validateTemplate   78% 58 13 0   79% 34 7   78%
python/lsst/daf/butler/datastore/file_templates.py FileTemplate._determine_skypix_alias   100% 6 0 0   100% 4 0   100%
python/lsst/daf/butler/datastore/file_templates.py (no function)   100% 54 0 3   100% 0 0   100%
python/lsst/daf/butler/datastore/generic_base.py GenericBaseDatastore.remove   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/generic_base.py GenericBaseDatastore.transfer   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/generic_base.py post_process_get   100% 11 0 0   88% 8 1   95%
python/lsst/daf/butler/datastore/generic_base.py (no function)   100% 13 0 3   100% 0 0   100%
python/lsst/daf/butler/datastore/record_data.py SerializedDatastoreRecordData.direct   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/record_data.py DatastoreRecordData.merge_mappings   100% 7 0 0   100% 6 0   100%
python/lsst/daf/butler/datastore/record_data.py DatastoreRecordData.update   100% 5 0 0   100% 6 0   100%
python/lsst/daf/butler/datastore/record_data.py DatastoreRecordData.subset   100% 7 0 0   100% 6 0   100%
python/lsst/daf/butler/datastore/record_data.py DatastoreRecordData.to_simple   100% 8 0 0   100% 4 0   100%
python/lsst/daf/butler/datastore/record_data.py DatastoreRecordData.from_simple   80% 20 4 0   83% 12 2   81%
python/lsst/daf/butler/datastore/record_data.py DatastoreRecordTable.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/record_data.py DatastoreRecordTable.from_arrow   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/record_data.py DatastoreRecordTable.to_arrow   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/record_data.py DatastoreRecordTable.filter_by_datastore_name   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/record_data.py DatastoreRecordTable.validate_datastore_names   100% 7 0 0   100% 4 0   100%
python/lsst/daf/butler/datastore/record_data.py DatastoreRecordTable.from_stored_file_info_table   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/record_data.py DatastoreRecordTable.to_stored_file_info_table   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/record_data.py DatastoreRecordTable.make_arrow_schema   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/record_data.py DatastoreRecordTable.combine   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/datastore/record_data.py DatastoreRecordTable.create_empty   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/record_data.py DatastoreRecordTable.__len__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/record_data.py (no function)   100% 51 0 2   100% 0 0   100%
python/lsst/daf/butler/datastore/stored_file_info.py StoredDatastoreItemInfo.file_location   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/stored_file_info.py StoredDatastoreItemInfo.from_record   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/stored_file_info.py StoredDatastoreItemInfo.to_record   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/stored_file_info.py StoredDatastoreItemInfo.update   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastore/stored_file_info.py StoredDatastoreItemInfo.to_records   80% 5 1 0   50% 2 1   71%
python/lsst/daf/butler/datastore/stored_file_info.py StoredDatastoreItemInfo.from_records   44% 9 5 0   25% 4 1   38%
python/lsst/daf/butler/datastore/stored_file_info.py StoredFileInfo.__init__   93% 15 1 0   88% 8 1   91%
python/lsst/daf/butler/datastore/stored_file_info.py StoredFileInfo.storageClass   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/stored_file_info.py StoredFileInfo.rebase   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/datastore/stored_file_info.py StoredFileInfo.to_record   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/datastore/stored_file_info.py StoredFileInfo.to_simple   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/stored_file_info.py StoredFileInfo.file_location   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/datastore/stored_file_info.py StoredFileInfo.from_record   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/stored_file_info.py StoredFileInfo.from_simple   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/stored_file_info.py StoredFileInfo.update   100% 8 0 0   100% 6 0   100%
python/lsst/daf/butler/datastore/stored_file_info.py StoredFileInfo.__reduce__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/stored_file_info.py StoredFileInfo.artifact_path   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/datastore/stored_file_info.py StoredFileInfoTable.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/stored_file_info.py StoredFileInfoTable.from_arrow   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/stored_file_info.py StoredFileInfoTable.to_arrow   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/stored_file_info.py StoredFileInfoTable.from_records   100% 5 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/stored_file_info.py StoredFileInfoTable.to_records   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/stored_file_info.py StoredFileInfoTable.make_arrow_schema   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/stored_file_info.py StoredFileInfoTable.__len__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/stored_file_info.py _replace_null_placeholder_with_null   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/stored_file_info.py _replace_negative_with_null   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/datastore/stored_file_info.py make_datastore_path_relative   100% 7 0 0   100% 4 0   100%
python/lsst/daf/butler/datastore/stored_file_info.py (no function)   100% 86 0 2   100% 0 0   100%
python/lsst/daf/butler/datastores/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/chainedDatastore.py _IngestPrepData.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/chainedDatastore.py ChainedDatastore.setConfigRoot   94% 16 1 0   83% 6 1   91%
python/lsst/daf/butler/datastores/chainedDatastore.py ChainedDatastore.__init__   82% 17 3 0   67% 6 2   78%
python/lsst/daf/butler/datastores/chainedDatastore.py ChainedDatastore._create_from_config   90% 10 1 0   75% 4 1   86%
python/lsst/daf/butler/datastores/chainedDatastore.py ChainedDatastore.clone   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/chainedDatastore.py ChainedDatastore.names   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/chainedDatastore.py ChainedDatastore.roots   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/datastores/chainedDatastore.py ChainedDatastore.__str__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/chainedDatastore.py ChainedDatastore._set_trust_mode   100% 2 0 0   100% 2 0   100%
python/lsst/daf/butler/datastores/chainedDatastore.py ChainedDatastore.knows   100% 5 0 0   100% 4 0   100%
python/lsst/daf/butler/datastores/chainedDatastore.py ChainedDatastore.knows_these   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/datastores/chainedDatastore.py ChainedDatastore.mexists   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/datastores/chainedDatastore.py ChainedDatastore.exists   100% 5 0 0   100% 4 0   100%
python/lsst/daf/butler/datastores/chainedDatastore.py ChainedDatastore.get   100% 8 0 0   100% 2 0   100%
python/lsst/daf/butler/datastores/chainedDatastore.py ChainedDatastore.prepare_get_for_external_client   75% 4 1 0   50% 2 1   67%
python/lsst/daf/butler/datastores/chainedDatastore.py ChainedDatastore._get_matching_datastore   75% 4 1 0   75% 4 1   75%
python/lsst/daf/butler/datastores/chainedDatastore.py ChainedDatastore.put   96% 27 1 0   94% 16 1   95%
python/lsst/daf/butler/datastores/chainedDatastore.py ChainedDatastore.put_new   0% 30 30 0   0% 16 0   0%
python/lsst/daf/butler/datastores/chainedDatastore.py ChainedDatastore._overrideTransferMode   78% 9 2 0   67% 6 2   73%
python/lsst/daf/butler/datastores/chainedDatastore.py ChainedDatastore._prepIngest   100% 19 0 1   100% 6 0   100%
python/lsst/daf/butler/datastores/chainedDatastore.py ChainedDatastore._prepIngest.isDatasetAcceptable   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/datastores/chainedDatastore.py ChainedDatastore._finishIngest   100% 10 0 0   100% 8 0   100%
python/lsst/daf/butler/datastores/chainedDatastore.py ChainedDatastore.getManyURIs   92% 26 2 0   100% 16 0   95%
python/lsst/daf/butler/datastores/chainedDatastore.py ChainedDatastore.getURIs   100% 27 0 0   100% 20 0   100%
python/lsst/daf/butler/datastores/chainedDatastore.py ChainedDatastore.getURI   80% 5 1 0   50% 2 1   71%
python/lsst/daf/butler/datastores/chainedDatastore.py ChainedDatastore.retrieveArtifacts   88% 25 3 0   86% 14 2   87%
python/lsst/daf/butler/datastores/chainedDatastore.py ChainedDatastore.ingest_zip   58% 24 10 0   58% 12 3   58%
python/lsst/daf/butler/datastores/chainedDatastore.py ChainedDatastore.remove   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/chainedDatastore.py ChainedDatastore.forget   100% 2 0 0   100% 2 0   100%
python/lsst/daf/butler/datastores/chainedDatastore.py ChainedDatastore.trash   94% 16 1 0   88% 8 1   92%
python/lsst/daf/butler/datastores/chainedDatastore.py ChainedDatastore.emptyTrash   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/datastores/chainedDatastore.py ChainedDatastore.transfer   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/chainedDatastore.py ChainedDatastore.validateConfiguration   100% 11 0 0   83% 6 1   94%
python/lsst/daf/butler/datastores/chainedDatastore.py ChainedDatastore.validateKey   0% 9 9 0   0% 4 0   0%
python/lsst/daf/butler/datastores/chainedDatastore.py ChainedDatastore.getLookupKeys   100% 8 0 0   83% 6 1   93%
python/lsst/daf/butler/datastores/chainedDatastore.py ChainedDatastore.needs_expanded_data_ids   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/datastores/chainedDatastore.py ChainedDatastore.import_records   100% 2 0 0   100% 2 0   100%
python/lsst/daf/butler/datastores/chainedDatastore.py ChainedDatastore.export_records   88% 8 1 0   83% 6 1   86%
python/lsst/daf/butler/datastores/chainedDatastore.py ChainedDatastore.export_table   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/chainedDatastore.py ChainedDatastore.import_table   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/datastores/chainedDatastore.py ChainedDatastore.export_predicted_records   89% 9 1 0   83% 6 1   87%
python/lsst/daf/butler/datastores/chainedDatastore.py ChainedDatastore.export   97% 30 1 0   95% 20 1   96%
python/lsst/daf/butler/datastores/chainedDatastore.py ChainedDatastore.get_file_info_for_transfer   100% 15 0 0   100% 4 0   100%
python/lsst/daf/butler/datastores/chainedDatastore.py ChainedDatastore.locate_missing_files_for_transfer   100% 9 0 0   100% 4 0   100%
python/lsst/daf/butler/datastores/chainedDatastore.py ChainedDatastore.transfer_from   96% 26 1 0   90% 10 1   94%
python/lsst/daf/butler/datastores/chainedDatastore.py ChainedDatastore.get_opaque_table_definitions   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/datastores/chainedDatastore.py ChainedDatastore.set_retrieve_dataset_type_method   100% 2 0 0   100% 2 0   100%
python/lsst/daf/butler/datastores/chainedDatastore.py (no function)   100% 82 0 4   100% 0 0   100%
python/lsst/daf/butler/datastores/fileDatastore.py _IngestPrepData.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore.setConfigRoot   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore.makeTableSpec   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore.__init__   95% 22 1 0   75% 4 1   92%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore._create_from_config   76% 17 4 0   67% 6 2   74%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore.clone   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore.__str__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore.bridge   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore.roots   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore._set_trust_mode   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore._artifact_exists   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore.addStoredItemInfo   70% 10 3 0   67% 6 2   69%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore.getStoredItemsInfo   88% 8 1 0   83% 6 1   86%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore._register_datasets   100% 10 0 0   100% 4 0   100%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore._get_stored_records_associated_with_refs   64% 14 5 0   42% 12 1   54%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore._refs_associated_with_artifacts   100% 22 0 0   100% 14 0   100%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore._registered_refs_per_artifact   0% 3 3 0   100% 0 0   0%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore.removeStoredItemInfo   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore._get_dataset_locations_info   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore._can_remove_dataset_artifact   0% 9 9 0   0% 6 0   0%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore._get_expected_dataset_locations_info   100% 12 0 0   100% 6 0   100%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore._prepare_for_direct_get   100% 14 0 0   100% 10 0   100%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore._determine_put_formatter_location   85% 13 2 0   100% 0 0   85%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore._overrideTransferMode   80% 10 2 0   83% 6 1   81%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore._pathInStore   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore._standardizeIngestPath   100% 12 0 1   100% 8 0   100%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore._extractIngestInfo   86% 35 5 0   77% 22 3   82%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore._prepIngest   86% 28 4 0   62% 16 4   77%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore._finishIngest   100% 17 0 0   100% 12 0   100%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore._calculate_ingested_datastore_name   100% 7 0 0   100% 2 0   100%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore._write_in_memory_to_artifact   92% 25 2 0   80% 10 2   89%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore._write_in_memory_to_artifact._removeFileExists   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore.knows   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore.knows_these   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore._process_mexists_records   95% 37 2 0   92% 24 2   93%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore.mexists   96% 24 1 0   88% 8 1   94%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore._mexists   100% 10 0 0   100% 2 0   100%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore._mexists_check_expected   100% 14 0 0   100% 6 0   100%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore.exists   100% 20 0 0   100% 18 0   100%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore.getURIs   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore.getURI   75% 4 1 0   50% 2 1   67%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore._predict_URIs   100% 9 0 0   100% 4 0   100%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore.getManyURIs   100% 26 0 0   100% 16 0   100%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore._locations_to_URI   70% 20 6 0   62% 16 4   67%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore._find_missing_records   93% 28 2 0   88% 16 2   91%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore.retrieveArtifacts   90% 42 4 0   81% 16 3   88%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore.ingest_zip   70% 30 9 0   60% 20 4   66%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore.get   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore.prepare_get_for_external_client   75% 4 1 0   50% 2 1   67%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore.put   93% 14 1 0   83% 6 1   90%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore.put_new   0% 15 15 0   0% 6 0   0%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore.trash   67% 58 19 0   70% 30 1   68%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore.emptyTrash   94% 16 1 0   83% 6 1   91%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore._empty_trash_subset   82% 55 10 0   83% 36 4   82%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore.transfer_from   92% 59 5 0   88% 32 4   90%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore.get_file_info_for_transfer   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore.locate_missing_files_for_transfer   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore._convert_stored_file_info_to_file_transfer_record   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore.forget   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore.validateConfiguration   86% 21 3 0   70% 10 3   81%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore.getLookupKeys   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore.validateKey   0% 5 5 0   0% 2 0   0%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore.export   85% 33 5 1   86% 22 3   85%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore.computeChecksum   78% 9 2 0   67% 6 2   73%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore.needs_expanded_data_ids   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore.import_records   92% 13 1 0   80% 10 2   87%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore.export_records   100% 8 0 0   100% 4 0   100%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore._export_rows   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore.export_table   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore.import_table   100% 5 0 0   50% 2 1   86%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore.export_predicted_records   86% 14 2 0   75% 8 2   82%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore.set_retrieve_dataset_type_method   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore._cast_storage_class   100% 6 0 0   75% 4 1   90%
python/lsst/daf/butler/datastores/fileDatastore.py FileDatastore.get_opaque_table_definitions   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/fileDatastore.py (no function)   100% 134 0 3   100% 0 0   100%
python/lsst/daf/butler/datastores/file_datastore/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/file_datastore/get.py generate_datastore_get_information   94% 16 1 0   83% 6 1   91%
python/lsst/daf/butler/datastores/file_datastore/get.py _read_artifact_into_memory   94% 18 1 0   75% 4 1   91%
python/lsst/daf/butler/datastores/file_datastore/get.py get_dataset_as_python_object_from_get_info   92% 52 4 0   77% 26 6   87%
python/lsst/daf/butler/datastores/file_datastore/get.py (no function)   100% 31 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/file_datastore/retrieve_artifacts.py ArtifactIndexInfo.append   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/datastores/file_datastore/retrieve_artifacts.py ArtifactIndexInfo.from_single   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/file_datastore/retrieve_artifacts.py ArtifactIndexInfo.subset   0% 4 4 0   0% 2 0   0%
python/lsst/daf/butler/datastores/file_datastore/retrieve_artifacts.py ZipIndex.generate_uuid5   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/file_datastore/retrieve_artifacts.py ZipIndex.__len__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/file_datastore/retrieve_artifacts.py ZipIndex.calculate_zip_file_name   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/file_datastore/retrieve_artifacts.py ZipIndex.calculate_zip_file_path_in_store   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/file_datastore/retrieve_artifacts.py ZipIndex.write_index   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/file_datastore/retrieve_artifacts.py ZipIndex.calc_relative_paths   86% 7 1 0   75% 4 1   82%
python/lsst/daf/butler/datastores/file_datastore/retrieve_artifacts.py ZipIndex.from_artifact_map   83% 6 1 0   50% 2 1   75%
python/lsst/daf/butler/datastores/file_datastore/retrieve_artifacts.py ZipIndex.from_zip_file   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/file_datastore/retrieve_artifacts.py ZipIndex.from_open_zip   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/file_datastore/retrieve_artifacts.py determine_destination_for_retrieved_artifact   100% 12 0 0   100% 8 0   100%
python/lsst/daf/butler/datastores/file_datastore/retrieve_artifacts.py RetrievalCallable.__call__   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/file_datastore/retrieve_artifacts.py retrieve_and_zip   91% 22 2 0   80% 10 2   88%
python/lsst/daf/butler/datastores/file_datastore/retrieve_artifacts.py unpack_zips   14% 21 18 0   10% 10 1   13%
python/lsst/daf/butler/datastores/file_datastore/retrieve_artifacts.py (no function)   100% 48 0 0   50% 2 1   98%
python/lsst/daf/butler/datastores/file_datastore/transfer.py retrieve_file_transfer_records   100% 17 0 0   88% 8 1   96%
python/lsst/daf/butler/datastores/file_datastore/transfer.py (no function)   100% 8 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/inMemoryDatastore.py InMemoryDatastore.__init__   100% 7 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/inMemoryDatastore.py InMemoryDatastore._create_from_config   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/inMemoryDatastore.py InMemoryDatastore.clone   100% 6 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/inMemoryDatastore.py InMemoryDatastore.setConfigRoot   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/inMemoryDatastore.py InMemoryDatastore._get_stored_item_info   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/inMemoryDatastore.py InMemoryDatastore._remove_stored_item_info   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/datastores/inMemoryDatastore.py InMemoryDatastore.removeStoredItemInfo   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/inMemoryDatastore.py InMemoryDatastore._get_dataset_info   90% 10 1 0   50% 4 2   79%
python/lsst/daf/butler/datastores/inMemoryDatastore.py InMemoryDatastore.knows   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/inMemoryDatastore.py InMemoryDatastore.exists   100% 5 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/inMemoryDatastore.py InMemoryDatastore.get   100% 20 0 0   100% 8 0   100%
python/lsst/daf/butler/datastores/inMemoryDatastore.py InMemoryDatastore.put   88% 17 2 0   88% 8 1   88%
python/lsst/daf/butler/datastores/inMemoryDatastore.py InMemoryDatastore.put_new   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/datastores/inMemoryDatastore.py InMemoryDatastore.getURIs   100% 10 0 0   100% 4 0   100%
python/lsst/daf/butler/datastores/inMemoryDatastore.py InMemoryDatastore.getURI   100% 3 0 1   100% 0 0   100%
python/lsst/daf/butler/datastores/inMemoryDatastore.py InMemoryDatastore.ingest_zip   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastores/inMemoryDatastore.py InMemoryDatastore.retrieveArtifacts   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/datastores/inMemoryDatastore.py InMemoryDatastore.forget   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/datastores/inMemoryDatastore.py InMemoryDatastore.trash   93% 15 1 0   75% 4 1   89%
python/lsst/daf/butler/datastores/inMemoryDatastore.py InMemoryDatastore.trash._rollbackMoveToTrash   100% 2 0 0   50% 2 1   75%
python/lsst/daf/butler/datastores/inMemoryDatastore.py InMemoryDatastore.emptyTrash   74% 27 7 0   50% 12 4   67%
python/lsst/daf/butler/datastores/inMemoryDatastore.py InMemoryDatastore.validateConfiguration   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/inMemoryDatastore.py InMemoryDatastore._overrideTransferMode   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/inMemoryDatastore.py InMemoryDatastore.validateKey   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/datastores/inMemoryDatastore.py InMemoryDatastore.getLookupKeys   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/inMemoryDatastore.py InMemoryDatastore.needs_expanded_data_ids   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/datastores/inMemoryDatastore.py InMemoryDatastore.import_records   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/inMemoryDatastore.py InMemoryDatastore.export_records   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/inMemoryDatastore.py InMemoryDatastore.export_predicted_records   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/inMemoryDatastore.py InMemoryDatastore.get_opaque_table_definitions   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/datastores/inMemoryDatastore.py (no function)   100% 66 0 5   100% 0 0   100%
python/lsst/daf/butler/ddl.py SchemaValidationError.translate   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/ddl.py SchemaValidationError.translate.decorate   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/ddl.py SchemaValidationError.translate.decorate.decorated   0% 4 4 0   100% 0 0   0%
python/lsst/daf/butler/ddl.py Base64Bytes.__init__   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/ddl.py Base64Bytes.process_bind_param   60% 5 2 0   50% 4 2   56%
python/lsst/daf/butler/ddl.py Base64Bytes.process_result_value   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/ddl.py Base64Bytes.python_type   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/ddl.py Base64Region.process_bind_param   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/ddl.py Base64Region.process_result_value   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/ddl.py Base64Region.python_type   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/ddl.py Base64Region.union_aggregate   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/ddl.py AstropyTimeNsecTai.process_bind_param   83% 6 1 0   75% 4 1   80%
python/lsst/daf/butler/ddl.py AstropyTimeNsecTai.process_result_value   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/ddl.py GUID.load_dialect_impl   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/ddl.py GUID.process_bind_param   54% 13 6 0   50% 12 6   52%
python/lsst/daf/butler/ddl.py GUID.process_result_value   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/ddl.py FieldSpec.__post_init__   100% 2 0 0   100% 2 0   100%
python/lsst/daf/butler/ddl.py FieldSpec.__eq__   0% 3 3 0   0% 2 0   0%
python/lsst/daf/butler/ddl.py FieldSpec.__hash__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/ddl.py FieldSpec.fromConfig   0% 15 15 0   0% 6 0   0%
python/lsst/daf/butler/ddl.py FieldSpec.for_region   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/ddl.py FieldSpec.isStringType   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/ddl.py FieldSpec.getSizedColumnType   100% 7 0 0   100% 6 0   100%
python/lsst/daf/butler/ddl.py FieldSpec.getPythonType   50% 4 2 0   50% 2 1   50%
python/lsst/daf/butler/ddl.py ForeignKeySpec.fromConfig   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/ddl.py IndexSpec.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/ddl.py IndexSpec.__hash__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/ddl.py TableSpec.__init__   100% 7 0 0   100% 0 0   100%
python/lsst/daf/butler/ddl.py TableSpec.fromConfig   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/ddl.py (no function)   100% 126 0 2   100% 0 0   100%
python/lsst/daf/butler/delegates/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/delegates/arrowtable.py ArrowTableDelegate.can_accept   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/delegates/arrowtable.py ArrowTableDelegate.getComponent   98% 41 1 0   89% 36 4   94%
python/lsst/daf/butler/delegates/arrowtable.py ArrowTableDelegate.handleParameters   100% 43 0 1   94% 34 2   97%
python/lsst/daf/butler/delegates/arrowtable.py ArrowTableDelegate._getAllDataframeColumns   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/delegates/arrowtable.py ArrowTableDelegate.add_provenance   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/delegates/arrowtable.py _add_arrow_provenance   100% 7 0 0   100% 2 0   100%
python/lsst/daf/butler/delegates/arrowtable.py _checkArrowCompatibleType   90% 21 2 0   94% 16 1   92%
python/lsst/daf/butler/delegates/arrowtable.py (no function)   100% 17 0 3   100% 0 0   100%
python/lsst/daf/butler/dimensions/__init__.py (no function)   100% 15 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_config.py DimensionConfig.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_config.py DimensionConfig._updateWithConfigsFromPath   71% 14 4 0   50% 8 4   64%
python/lsst/daf/butler/dimensions/_config.py DimensionConfig._updateWithOtherConfigFile   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_config.py DimensionConfig.to_simple   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_config.py DimensionConfig.from_simple   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/dimensions/_config.py DimensionConfig.makeBuilder   100% 11 0 0   100% 8 0   100%
python/lsst/daf/butler/dimensions/_config.py _SkyPixSystemConfig.has_dependencies_in   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_config.py _SkyPixSystemConfig.visit   71% 14 4 0   50% 6 1   65%
python/lsst/daf/butler/dimensions/_config.py _SkyPixSectionConfig._move_extra_to_systems   83% 6 1 0   75% 4 1   80%
python/lsst/daf/butler/dimensions/_config.py _LegacyImpliedUnionDimensionStorage.implied_union_target   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_config.py _LegacyCachingDimensionStorage.has_own_table   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/dimensions/_config.py _LegacyCachingDimensionStorage.implied_union_target   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_config.py _ElementConfig.has_dependencies_in   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_config.py _ElementConfig.visit   100% 23 0 0   100% 12 0   100%
python/lsst/daf/butler/dimensions/_config.py _ElementConfig._primary_key_types   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/dimensions/_config.py _ElementConfig._not_nullable_keys   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/dimensions/_config.py _ElementConfig._invalid_dimension_fields   67% 6 2 0   67% 6 2   67%
python/lsst/daf/butler/dimensions/_config.py _ElementConfig._storage   75% 16 4 0   64% 14 5   70%
python/lsst/daf/butler/dimensions/_config.py _ElementConfig._relationship_dependencies   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/dimensions/_config.py (no function)   100% 118 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py SerializedDataCoordinate.direct   82% 11 2 0   67% 6 2   76%
python/lsst/daf/butler/dimensions/_coordinate.py _intersectRegions   100% 6 0 0   100% 4 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py DataCoordinate.standardize   95% 39 2 0   91% 34 3   93%
python/lsst/daf/butler/dimensions/_coordinate.py DataCoordinate.mapping   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py DataCoordinate.required   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py DataCoordinate.required_values   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py DataCoordinate.full_values   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/dimensions/_coordinate.py DataCoordinate.makeEmpty   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/dimensions/_coordinate.py DataCoordinate.make_empty   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py DataCoordinate.from_required_values   100% 6 0 0   100% 4 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py DataCoordinate.from_full_values   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py DataCoordinate.__bool__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py DataCoordinate.__hash__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py DataCoordinate.__eq__   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py DataCoordinate.__getitem__   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py DataCoordinate.__contains__   100% 5 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py DataCoordinate.get   100% 1 0 0   50% 2 1   67%
python/lsst/daf/butler/dimensions/_coordinate.py DataCoordinate.get   100% 1 0 0   50% 2 1   67%
python/lsst/daf/butler/dimensions/_coordinate.py DataCoordinate.get   100% 1 0 0   50% 2 1   67%
python/lsst/daf/butler/dimensions/_coordinate.py DataCoordinate.get   100% 1 0 0   50% 2 1   67%
python/lsst/daf/butler/dimensions/_coordinate.py DataCoordinate.get   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py DataCoordinate.__repr__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py DataCoordinate.__lt__   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/dimensions/_coordinate.py DataCoordinate.subset   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py DataCoordinate.union   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py DataCoordinate.expanded   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py DataCoordinate.universe   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py DataCoordinate.dimensions   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py DataCoordinate.hasFull   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py DataCoordinate.hasRecords   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py DataCoordinate.records   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py DataCoordinate._record   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py DataCoordinate.region   89% 9 1 0   75% 4 1   85%
python/lsst/daf/butler/dimensions/_coordinate.py DataCoordinate.timespan   92% 13 1 0   88% 8 1   90%
python/lsst/daf/butler/dimensions/_coordinate.py DataCoordinate.to_simple   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py DataCoordinate.from_simple   69% 16 5 0   58% 12 5   64%
python/lsst/daf/butler/dimensions/_coordinate.py DataCoordinate.dataId   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py _DataCoordinateRecordsView.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py _DataCoordinateRecordsView.__repr__   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/dimensions/_coordinate.py _DataCoordinateRecordsView.__str__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/dimensions/_coordinate.py _DataCoordinateRecordsView.__getitem__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py _DataCoordinateRecordsView.__iter__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py _DataCoordinateRecordsView.__len__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/dimensions/_coordinate.py _BasicTupleDataCoordinate.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py _BasicTupleDataCoordinate.dimensions   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py _BasicTupleDataCoordinate.required   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py _BasicTupleDataCoordinate.__getitem__   100% 5 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py _BasicTupleDataCoordinate.hasRecords   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py _BasicTupleDataCoordinate._record   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py _BasicTupleDataCoordinate.__getattr__   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py _DataCoordinateRequiredMappingView.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py _DataCoordinateRequiredMappingView.__getitem__   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/dimensions/_coordinate.py _DataCoordinateRequiredMappingView.__len__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py _DataCoordinateRequiredMappingView.__iter__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py _DataCoordinateRequiredMappingView.__repr__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py _DataCoordinateFullMappingView.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py _DataCoordinateFullMappingView.__getitem__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py _DataCoordinateFullMappingView.__len__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py _DataCoordinateFullMappingView.__iter__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py _DataCoordinateFullMappingView.__repr__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py _RequiredTupleDataCoordinate.mapping   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py _RequiredTupleDataCoordinate.required_values   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py _RequiredTupleDataCoordinate.subset   100% 6 0 0   100% 4 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py _RequiredTupleDataCoordinate.union   100% 6 0 0   100% 2 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py _RequiredTupleDataCoordinate.expanded   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py _RequiredTupleDataCoordinate.hasFull   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py _RequiredTupleDataCoordinate.__reduce__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py _FullTupleDataCoordinate.mapping   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py _FullTupleDataCoordinate.required_values   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py _FullTupleDataCoordinate.full_values   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py _FullTupleDataCoordinate.subset   100% 8 0 0   100% 2 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py _FullTupleDataCoordinate.union   100% 8 0 0   100% 4 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py _FullTupleDataCoordinate.expanded   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py _FullTupleDataCoordinate.hasFull   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py _FullTupleDataCoordinate.__reduce__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py _ExpandedTupleDataCoordinate.__init__   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py _ExpandedTupleDataCoordinate.subset   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py _ExpandedTupleDataCoordinate.expanded   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py _ExpandedTupleDataCoordinate.union   100% 6 0 0   100% 4 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py _ExpandedTupleDataCoordinate.hasRecords   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py _ExpandedTupleDataCoordinate._record   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py _ExpandedTupleDataCoordinate.__reduce__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py _ExpandedTupleDataCoordinate.__getattr__   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py _ExpandedTupleDataCoordinate.__dir__   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_coordinate.py (no function)   100% 159 0 3   100% 0 0   100%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py DataCoordinateIterable.fromScalar   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py DataCoordinateIterable.dimensions   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py DataCoordinateIterable.universe   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py DataCoordinateIterable.hasFull   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py DataCoordinateIterable.hasRecords   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py DataCoordinateIterable.toSet   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py DataCoordinateIterable.toSequence   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py DataCoordinateIterable.subset   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py _ScalarDataCoordinateIterable.__init__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py _ScalarDataCoordinateIterable.__iter__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py _ScalarDataCoordinateIterable.__len__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py _ScalarDataCoordinateIterable.__contains__   0% 3 3 0   0% 2 0   0%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py _ScalarDataCoordinateIterable.dimensions   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py _ScalarDataCoordinateIterable.hasFull   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py _ScalarDataCoordinateIterable.hasRecords   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py _ScalarDataCoordinateIterable.subset   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py _DataCoordinateCollectionBase.__init__   86% 22 3 0   83% 18 3   85%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py _DataCoordinateCollectionBase.dimensions   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py _DataCoordinateCollectionBase.hasFull   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py _DataCoordinateCollectionBase.hasRecords   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py _DataCoordinateCollectionBase.toSet   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py _DataCoordinateCollectionBase.toSequence   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py _DataCoordinateCollectionBase.__iter__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py _DataCoordinateCollectionBase.__len__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py _DataCoordinateCollectionBase.__contains__   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py _DataCoordinateCollectionBase._subsetKwargs   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py DataCoordinateSet.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py DataCoordinateSet.__str__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py DataCoordinateSet.__repr__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py DataCoordinateSet.__eq__   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py DataCoordinateSet.__le__   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py DataCoordinateSet.__ge__   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py DataCoordinateSet.__lt__   0% 3 3 0   0% 2 0   0%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py DataCoordinateSet.__gt__   0% 3 3 0   0% 2 0   0%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py DataCoordinateSet.issubset   0% 3 3 0   0% 2 0   0%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py DataCoordinateSet.issuperset   0% 3 3 0   0% 2 0   0%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py DataCoordinateSet.isdisjoint   0% 3 3 0   0% 2 0   0%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py DataCoordinateSet.__and__   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py DataCoordinateSet.__or__   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py DataCoordinateSet.__xor__   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py DataCoordinateSet.__sub__   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py DataCoordinateSet.intersection   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py DataCoordinateSet.union   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py DataCoordinateSet.symmetric_difference   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py DataCoordinateSet.difference   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py DataCoordinateSet.toSet   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py DataCoordinateSet.subset   75% 4 1 0   50% 2 1   67%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py DataCoordinateSequence.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py DataCoordinateSequence.__str__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py DataCoordinateSequence.__repr__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py DataCoordinateSequence.__eq__   0% 3 3 0   0% 2 0   0%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py DataCoordinateSequence.__getitem__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py DataCoordinateSequence.__getitem__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py DataCoordinateSequence.__getitem__   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py DataCoordinateSequence.toSequence   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py DataCoordinateSequence.subset   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py (no function)   100% 87 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_database.py DatabaseTopologicalFamily.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_database.py DatabaseTopologicalFamily.choose   75% 4 1 0   75% 4 1   75%
python/lsst/daf/butler/dimensions/_database.py DatabaseTopologicalFamily.governor   62% 8 3 0   50% 2 1   60%
python/lsst/daf/butler/dimensions/_database.py DatabaseTopologicalFamily.make_column_reference   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_database.py DatabaseTopologicalFamilyConstructionVisitor.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_database.py DatabaseTopologicalFamilyConstructionVisitor.has_dependencies_in   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_database.py DatabaseTopologicalFamilyConstructionVisitor.visit   88% 8 1 0   75% 4 1   83%
python/lsst/daf/butler/dimensions/_database.py DatabaseDimensionElement.__init__   100% 6 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_database.py DatabaseDimensionElement.name   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_database.py DatabaseDimensionElement.implied   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_database.py DatabaseDimensionElement.metadata_columns   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_database.py DatabaseDimensionElement.is_cached   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_database.py DatabaseDimensionElement.documentation   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/dimensions/_database.py DatabaseDimensionElement.topology   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_database.py DatabaseDimensionElement.spatial   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_database.py DatabaseDimensionElement.temporal   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_database.py DatabaseDimension.__init__   100% 5 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_database.py DatabaseDimension.required   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_database.py DatabaseDimension.unique_keys   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_database.py DatabaseDimension.implied_union_target   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_database.py DatabaseDimensionCombination.__init__   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_database.py DatabaseDimensionCombination.required   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_database.py DatabaseDimensionCombination.alwaysJoin   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/dimensions/_database.py DatabaseDimensionCombination.defines_relationships   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_database.py DatabaseDimensionCombination.populated_by   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_database.py (no function)   100% 59 0 4   100% 0 0   100%
python/lsst/daf/butler/dimensions/_elements.py DimensionElement.__str__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_elements.py DimensionElement.__repr__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_elements.py DimensionElement.__eq__   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_elements.py DimensionElement.__hash__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_elements.py DimensionElement.__lt__   50% 4 2 0   100% 0 0   50%
python/lsst/daf/butler/dimensions/_elements.py DimensionElement.__le__   50% 4 2 0   100% 0 0   50%
python/lsst/daf/butler/dimensions/_elements.py DimensionElement.__gt__   50% 4 2 0   100% 0 0   50%
python/lsst/daf/butler/dimensions/_elements.py DimensionElement.__ge__   50% 4 2 0   100% 0 0   50%
python/lsst/daf/butler/dimensions/_elements.py DimensionElement._unpickle   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_elements.py DimensionElement.__reduce__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_elements.py DimensionElement.__deepcopy__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/dimensions/_elements.py DimensionElement.to_simple   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_elements.py DimensionElement.from_simple   57% 7 3 0   50% 6 3   54%
python/lsst/daf/butler/dimensions/_elements.py DimensionElement.hasTable   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/dimensions/_elements.py DimensionElement.governor   83% 6 1 0   75% 4 1   80%
python/lsst/daf/butler/dimensions/_elements.py DimensionElement.required   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/dimensions/_elements.py DimensionElement.implied   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/dimensions/_elements.py DimensionElement.dimensions   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_elements.py DimensionElement.minimal_group   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_elements.py DimensionElement.RecordClass   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_elements.py DimensionElement.alternate_keys   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_elements.py DimensionElement.metadata_columns   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/dimensions/_elements.py DimensionElement.metadata   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_elements.py DimensionElement.viewOf   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/dimensions/_elements.py DimensionElement.alwaysJoin   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/dimensions/_elements.py DimensionElement.has_own_table   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_elements.py DimensionElement.implied_union_target   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_elements.py DimensionElement.defines_relationships   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_elements.py DimensionElement.is_cached   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_elements.py DimensionElement.populated_by   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/dimensions/_elements.py DimensionElement.schema   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_elements.py DimensionElement.documentation   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/dimensions/_elements.py DimensionElement._validate   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_elements.py DimensionElement._serialize   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_elements.py DimensionElement.__get_pydantic_core_schema__   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_elements.py Dimension.unique_keys   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/dimensions/_elements.py Dimension.primary_key   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_elements.py Dimension.alternate_keys   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_elements.py Dimension.uniqueKeys   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_elements.py Dimension.primaryKey   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_elements.py Dimension.alternateKeys   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_elements.py Dimension.populated_by   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_elements.py Dimension.to_arrow   80% 5 1 0   75% 4 1   78%
python/lsst/daf/butler/dimensions/_elements.py (no function)   100% 110 0 7   100% 0 0   100%
python/lsst/daf/butler/dimensions/_governor.py GovernorDimension.__init__   78% 9 2 0   50% 4 2   69%
python/lsst/daf/butler/dimensions/_governor.py GovernorDimension.name   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_governor.py GovernorDimension.required   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_governor.py GovernorDimension.implied   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_governor.py GovernorDimension.topology   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_governor.py GovernorDimension.metadata_columns   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_governor.py GovernorDimension.unique_keys   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_governor.py GovernorDimension.is_cached   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_governor.py GovernorDimension.documentation   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/dimensions/_governor.py (no function)   100% 26 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_group.py SortedSequenceSet.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_group.py SortedSequenceSet.__contains__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_group.py SortedSequenceSet.__iter__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_group.py SortedSequenceSet.__len__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_group.py SortedSequenceSet.__hash__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/dimensions/_group.py SortedSequenceSet.__eq__   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/dimensions/_group.py SortedSequenceSet._from_iterable   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_group.py SortedSequenceSet.__repr__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_group.py SortedSequenceSet.as_tuple   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/dimensions/_group.py SortedSequenceSet.names   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/dimensions/_group.py DimensionGroup.__new__   97% 37 1 0   94% 16 1   96%
python/lsst/daf/butler/dimensions/_group.py DimensionGroup.__getnewargs__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_group.py DimensionGroup.__deepcopy__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_group.py DimensionGroup.__len__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_group.py DimensionGroup.__contains__   83% 6 1 0   75% 4 1   80%
python/lsst/daf/butler/dimensions/_group.py DimensionGroup.__str__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_group.py DimensionGroup.__repr__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/dimensions/_group.py DimensionGroup.as_group   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/dimensions/_group.py DimensionGroup.isdisjoint   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/dimensions/_group.py DimensionGroup.issubset   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_group.py DimensionGroup.issuperset   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/dimensions/_group.py DimensionGroup.__eq__   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/dimensions/_group.py DimensionGroup.__hash__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_group.py DimensionGroup.__le__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_group.py DimensionGroup.__ge__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_group.py DimensionGroup.__lt__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/dimensions/_group.py DimensionGroup.__gt__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/dimensions/_group.py DimensionGroup.union   100% 7 0 0   100% 2 0   100%
python/lsst/daf/butler/dimensions/_group.py DimensionGroup.intersection   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_group.py DimensionGroup.difference   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_group.py DimensionGroup.__or__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_group.py DimensionGroup.__and__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/dimensions/_group.py DimensionGroup.__sub__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/dimensions/_group.py DimensionGroup.data_coordinate_keys   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_group.py DimensionGroup.lookup_order   100% 8 0 0   100% 4 0   100%
python/lsst/daf/butler/dimensions/_group.py DimensionGroup.lookup_order.add_to_order   90% 10 1 0   83% 6 1   88%
python/lsst/daf/butler/dimensions/_group.py DimensionGroup._choose_dimension   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/dimensions/_group.py DimensionGroup.region_dimension   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_group.py DimensionGroup.timespan_dimension   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_group.py DimensionGroup.spatial   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_group.py DimensionGroup.temporal   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_group.py DimensionGroup._validate   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_group.py DimensionGroup.from_simple   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_group.py DimensionGroup.to_simple   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_group.py DimensionGroup.__get_pydantic_core_schema__   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_group.py (no function)   100% 93 0 3   100% 0 0   100%
python/lsst/daf/butler/dimensions/_packer.py DimensionPacker.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_packer.py DimensionPacker.universe   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/dimensions/_packer.py DimensionPacker.dimensions   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/dimensions/_packer.py DimensionPacker.maxBits   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/dimensions/_packer.py DimensionPacker._pack   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/dimensions/_packer.py DimensionPacker.pack   86% 7 1 0   75% 4 1   82%
python/lsst/daf/butler/dimensions/_packer.py DimensionPacker.unpack   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/dimensions/_packer.py (no function)   100% 22 0 2   100% 0 0   100%
python/lsst/daf/butler/dimensions/_record_set.py DimensionRecordFactory.__call__   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/dimensions/_record_set.py fail_record_lookup   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_record_set.py DimensionRecordSet.__init__   100% 11 0 0   100% 6 0   100%
python/lsst/daf/butler/dimensions/_record_set.py DimensionRecordSet.element   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_record_set.py DimensionRecordSet.__contains__   100% 8 0 0   100% 4 0   100%
python/lsst/daf/butler/dimensions/_record_set.py DimensionRecordSet.__len__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_record_set.py DimensionRecordSet.__iter__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_record_set.py DimensionRecordSet.__eq__   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/dimensions/_record_set.py DimensionRecordSet.__repr__   0% 5 5 0   0% 2 0   0%
python/lsst/daf/butler/dimensions/_record_set.py DimensionRecordSet.issubset   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/dimensions/_record_set.py DimensionRecordSet.issuperset   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/dimensions/_record_set.py DimensionRecordSet.isdisjoint   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/dimensions/_record_set.py DimensionRecordSet.intersection   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/dimensions/_record_set.py DimensionRecordSet.difference   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/dimensions/_record_set.py DimensionRecordSet.union   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/dimensions/_record_set.py DimensionRecordSet.find   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/dimensions/_record_set.py DimensionRecordSet.find_with_required_values   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/dimensions/_record_set.py DimensionRecordSet.add   80% 5 1 0   75% 4 1   78%
python/lsst/daf/butler/dimensions/_record_set.py DimensionRecordSet.update   100% 2 0 0   100% 2 0   100%
python/lsst/daf/butler/dimensions/_record_set.py DimensionRecordSet.update_from_data_coordinates   100% 3 0 0   75% 4 1   86%
python/lsst/daf/butler/dimensions/_record_set.py DimensionRecordSet.discard   100% 5 0 0   100% 4 0   100%
python/lsst/daf/butler/dimensions/_record_set.py DimensionRecordSet.remove   100% 5 0 0   100% 4 0   100%
python/lsst/daf/butler/dimensions/_record_set.py DimensionRecordSet.pop   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_record_set.py DimensionRecordSet.__deepcopy__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_record_set.py DimensionRecordSet.serialize_records   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_record_set.py DimensionRecordSet.deserialize_records   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_record_set.py DimensionRecordSetDeserializer.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_record_set.py DimensionRecordSetDeserializer.from_raw   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_record_set.py DimensionRecordSetDeserializer.__len__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_record_set.py DimensionRecordSetDeserializer.__iter__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_record_set.py DimensionRecordSetDeserializer.__getitem__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_record_set.py DimensionDataExtractor.from_element_names   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_record_set.py DimensionDataExtractor.from_dimension_group   100% 7 0 0   75% 4 1   91%
python/lsst/daf/butler/dimensions/_record_set.py DimensionDataExtractor.update   100% 4 0 0   83% 6 1   90%
python/lsst/daf/butler/dimensions/_record_set.py SerializableDimensionData.from_record_sets   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_record_set.py SerializableDimensionData.make_deserializers   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_record_set.py DimensionDataAttacher.__init__   100% 11 0 0   90% 10 1   95%
python/lsst/daf/butler/dimensions/_record_set.py DimensionDataAttacher.attach   100% 11 0 0   100% 8 0   100%
python/lsst/daf/butler/dimensions/_record_set.py DimensionDataAttacher.serialized   92% 24 2 0   85% 20 3   89%
python/lsst/daf/butler/dimensions/_record_set.py _DimensionRecordLookupHelper.element   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_record_set.py _DimensionRecordLookupHelper.build   100% 8 0 0   100% 6 0   100%
python/lsst/daf/butler/dimensions/_record_set.py _DimensionRecordLookupHelper.lookup   100% 8 0 0   100% 4 0   100%
python/lsst/daf/butler/dimensions/_record_set.py _DimensionRecordLookupHelper._get_required_values   100% 11 0 0   100% 6 0   100%
python/lsst/daf/butler/dimensions/_record_set.py _DimensionRecordLookupHelper._find_implied_value   75% 4 1 0   75% 4 1   75%
python/lsst/daf/butler/dimensions/_record_set.py _DimensionRecordLookupHelper.fallback   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_record_set.py _DimensionRecordLookupHelper.fetch_missing   100% 7 0 0   75% 4 1   91%
python/lsst/daf/butler/dimensions/_record_set.py _DeserializingDimensionRecordLookupHelper.fallback   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_record_set.py _SkyPixDimensionRecordLookupHelper.fallback   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_record_set.py (no function)   100% 89 0 7   100% 0 0   100%
python/lsst/daf/butler/dimensions/_record_table.py DimensionRecordTable.__init__   89% 19 2 0   83% 12 2   87%
python/lsst/daf/butler/dimensions/_record_table.py DimensionRecordTable.make_arrow_schema   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_record_table.py DimensionRecordTable.element   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_record_table.py DimensionRecordTable.__len__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_record_table.py DimensionRecordTable.__iter__   100% 2 0 0   100% 2 0   100%
python/lsst/daf/butler/dimensions/_record_table.py DimensionRecordTable.__getitem__   100% 1 0 0   50% 2 1   67%
python/lsst/daf/butler/dimensions/_record_table.py DimensionRecordTable.__getitem__   100% 1 0 0   50% 2 1   67%
python/lsst/daf/butler/dimensions/_record_table.py DimensionRecordTable.__getitem__   100% 7 0 0   100% 2 0   100%
python/lsst/daf/butler/dimensions/_record_table.py DimensionRecordTable.extend   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_record_table.py DimensionRecordTable.column   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_record_table.py DimensionRecordTable.to_arrow   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_record_table.py DimensionRecordTable._make_batch   100% 6 0 0   100% 4 0   100%
python/lsst/daf/butler/dimensions/_record_table.py DimensionRecordTable._get_record_at   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_record_table.py (no function)   100% 24 0 4   100% 0 0   100%
python/lsst/daf/butler/dimensions/_records.py _reconstructDimensionRecord   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_records.py _subclassDimensionRecord   100% 11 0 0   100% 4 0   100%
python/lsst/daf/butler/dimensions/_records.py _createSimpleRecordSubclass   100% 21 0 0   100% 10 0   100%
python/lsst/daf/butler/dimensions/_records.py SerializedDimensionRecord.direct   78% 9 2 0   50% 4 2   69%
python/lsst/daf/butler/dimensions/_records.py DimensionRecord.__init__   84% 19 3 0   79% 14 3   82%
python/lsst/daf/butler/dimensions/_records.py DimensionRecord.__eq__   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/dimensions/_records.py DimensionRecord.__hash__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_records.py DimensionRecord.__str__   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_records.py DimensionRecord.__repr__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_records.py DimensionRecord.__reduce__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_records.py DimensionRecord._repr_html_   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_records.py DimensionRecord.to_simple   80% 15 3 0   70% 10 3   76%
python/lsst/daf/butler/dimensions/_records.py DimensionRecord.from_simple   77% 22 5 0   64% 14 5   72%
python/lsst/daf/butler/dimensions/_records.py DimensionRecord.toDict   100% 7 0 0   100% 4 0   100%
python/lsst/daf/butler/dimensions/_records.py DimensionRecord.get   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/dimensions/_records.py DimensionRecord.serialize_key_value   100% 7 0 0   100% 4 0   100%
python/lsst/daf/butler/dimensions/_records.py DimensionRecord.deserialize_key   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_records.py DimensionRecord.deserialize_value   100% 7 0 0   100% 2 0   100%
python/lsst/daf/butler/dimensions/_records.py DimensionRecord.__getattr__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_records.py (no function)   100% 64 0 5   100% 0 0   100%
python/lsst/daf/butler/dimensions/_schema.py DimensionRecordSchema.__init__   100% 29 0 0   100% 10 0   100%
python/lsst/daf/butler/dimensions/_schema.py DimensionRecordSchema.names   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_schema.py DimensionRecordSchema.__str__   0% 4 4 0   0% 2 0   0%
python/lsst/daf/butler/dimensions/_schema.py DimensionRecordSchema.to_arrow   100% 11 0 0   80% 10 2   90%
python/lsst/daf/butler/dimensions/_schema.py _makeForeignKeySpec   100% 8 0 0   100% 4 0   100%
python/lsst/daf/butler/dimensions/_schema.py addDimensionForeignKey   100% 8 0 0   100% 2 0   100%
python/lsst/daf/butler/dimensions/_schema.py DimensionElementFields.__init__   100% 37 0 0   100% 14 0   100%
python/lsst/daf/butler/dimensions/_schema.py DimensionElementFields.makeTableSpec   100% 8 0 0   100% 6 0   100%
python/lsst/daf/butler/dimensions/_schema.py DimensionElementFields.__str__   0% 7 7 0   0% 4 0   0%
python/lsst/daf/butler/dimensions/_schema.py (no function)   100% 49 0 3   100% 0 0   100%
python/lsst/daf/butler/dimensions/_skypix.py SkyPixSystem.__init__   100% 6 0 0   100% 2 0   100%
python/lsst/daf/butler/dimensions/_skypix.py SkyPixSystem.choose   82% 11 2 0   62% 8 3   74%
python/lsst/daf/butler/dimensions/_skypix.py SkyPixSystem.__getitem__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_skypix.py SkyPixSystem.__iter__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_skypix.py SkyPixSystem.__len__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_skypix.py SkyPixSystem.make_column_reference   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_skypix.py SkyPixDimension.__init__   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_skypix.py SkyPixDimension.name   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_skypix.py SkyPixDimension.required   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_skypix.py SkyPixDimension.implied   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_skypix.py SkyPixDimension.topology   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_skypix.py SkyPixDimension.metadata_columns   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_skypix.py SkyPixDimension.documentation   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/dimensions/_skypix.py SkyPixDimension.hasTable   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/dimensions/_skypix.py SkyPixDimension.has_own_table   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_skypix.py SkyPixDimension.unique_keys   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_skypix.py (no function)   100% 42 0 3   100% 0 0   100%
python/lsst/daf/butler/dimensions/_universe.py DimensionUniverse.__new__   91% 43 4 0   73% 22 6   85%
python/lsst/daf/butler/dimensions/_universe.py DimensionUniverse.version   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_universe.py DimensionUniverse.namespace   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_universe.py DimensionUniverse.isCompatibleWith   100% 5 0 0   100% 4 0   100%
python/lsst/daf/butler/dimensions/_universe.py DimensionUniverse.__repr__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_universe.py DimensionUniverse.__getitem__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_universe.py DimensionUniverse.__contains__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_universe.py DimensionUniverse.get   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_universe.py DimensionUniverse.getStaticElements   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_universe.py DimensionUniverse.getStaticDimensions   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_universe.py DimensionUniverse.getGovernorDimensions   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/dimensions/_universe.py DimensionUniverse.getDatabaseElements   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/dimensions/_universe.py DimensionUniverse.elements   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_universe.py DimensionUniverse.dimensions   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_universe.py DimensionUniverse.governor_dimensions   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_universe.py DimensionUniverse.skypix_dimensions   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/dimensions/_universe.py DimensionUniverse.database_elements   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_universe.py DimensionUniverse.skypix   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_universe.py DimensionUniverse.getElementIndex   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_universe.py DimensionUniverse.getDimensionIndex   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/dimensions/_universe.py DimensionUniverse.conform   89% 9 1 0   83% 6 1   87%
python/lsst/daf/butler/dimensions/_universe.py DimensionUniverse.sorted   100% 1 0 0   50% 2 1   67%
python/lsst/daf/butler/dimensions/_universe.py DimensionUniverse.sorted   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_universe.py DimensionUniverse.sorted   80% 5 1 0   50% 2 1   71%
python/lsst/daf/butler/dimensions/_universe.py DimensionUniverse.get_elements_populated_by   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_universe.py DimensionUniverse.empty   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_universe.py DimensionUniverse._unpickle   67% 6 2 0   50% 4 2   60%
python/lsst/daf/butler/dimensions/_universe.py DimensionUniverse.__reduce__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_universe.py DimensionUniverse.__deepcopy__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/_universe.py (no function)   100% 84 0 2   50% 2 1   99%
python/lsst/daf/butler/dimensions/construction.py DimensionConstructionVisitor.has_dependencies_in   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/dimensions/construction.py DimensionConstructionVisitor.visit   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/dimensions/construction.py DimensionConstructionBuilder.__init__   100% 8 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/construction.py DimensionConstructionBuilder.add   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/construction.py DimensionConstructionBuilder.finish   86% 7 1 0   83% 6 1   85%
python/lsst/daf/butler/dimensions/construction.py (no function)   100% 27 0 3   100% 0 0   100%
python/lsst/daf/butler/dimensions/record_cache.py DimensionRecordCache.__init__   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/record_cache.py DimensionRecordCache.reset   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/record_cache.py DimensionRecordCache.load_from   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/record_cache.py DimensionRecordCache.preload_cache   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/dimensions/record_cache.py DimensionRecordCache.__contains__   60% 5 2 0   50% 4 2   56%
python/lsst/daf/butler/dimensions/record_cache.py DimensionRecordCache.__getitem__   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/record_cache.py DimensionRecordCache.__iter__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/dimensions/record_cache.py DimensionRecordCache.__len__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/dimensions/record_cache.py (no function)   100% 15 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_butler/__init__.py (no function)   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler.__new__   100% 9 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler.create_from_config   95% 19 1 0   83% 6 1   92%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler.clone   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler.close   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler._unpickle   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler.__reduce__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler.__str__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler.isWriteable   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler._caching_context   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler.transaction   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler._standardizeArgs   100% 23 0 0   100% 14 0   100%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler._rewrite_data_id   89% 133 15 0   82% 92 9   86%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler._rewrite_data_id._get_attr   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler._findDatasetRef   94% 33 2 0   88% 26 3   92%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler.put   83% 23 4 0   75% 8 2   81%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler.getDeferred   100% 6 0 0   100% 4 0   100%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler.get   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler.getURIs   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler.get_dataset_type   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler.get_dataset   70% 10 3 0   62% 8 3   67%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler.get_many_datasets   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler.find_dataset   88% 16 2 0   80% 10 2   85%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler.retrieve_artifacts_zip   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler.retrieveArtifacts   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler.exists   93% 27 2 0   90% 20 2   91%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler._exists_many   100% 17 0 0   100% 16 0   100%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler.removeRuns   84% 31 5 1   80% 20 2   82%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler.pruneDatasets   77% 30 7 0   71% 24 7   74%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler._prune_datasets   100% 16 0 0   100% 10 0   100%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler.ingest_zip   88% 41 5 0   83% 18 3   86%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler._prepare_ingest_file_datasets   91% 11 1 0   83% 6 1   88%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler._ingest_file_datasets   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler.ingest   88% 24 3 0   90% 10 1   88%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler._partition_datasets_by_known   100% 9 0 0   100% 4 0   100%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler.export   89% 28 3 0   75% 16 4   84%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler.import_   55% 29 13 0   50% 22 5   53%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler.import_.doImport   100% 5 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler.transfer_dimension_records_from   100% 7 0 0   100% 2 0   100%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler._extract_all_dimension_records_from_data_ids   94% 31 2 0   89% 28 3   92%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler._extract_dimension_records_from_data_ids   92% 12 1 0   90% 10 1   91%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler._cast_universe_for_import_refs   95% 19 1 0   90% 10 1   93%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler._prepare_for_import_refs   80% 51 10 0   69% 32 6   76%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler._import_dimension_records   100% 5 0 0   100% 4 0   100%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler._import_grouped_refs   100% 25 0 0   100% 12 0   100%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler.transfer_from   92% 25 2 0   75% 8 2   88%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler.validateConfiguration   84% 62 10 0   76% 42 6   81%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler.collection_chains   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler.collections   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler.run   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler.registry   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler.dimensions   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler.query   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler._query_driver   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler._query_all_datasets_by_page   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler._preload_cache   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_butler/_direct_butler.py DirectButler._expand_data_ids   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_butler/_direct_butler.py _to_uuid   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/direct_butler/_direct_butler.py _ButlerClosed.__getattr__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_butler/_direct_butler.py _retrieve_dataset_type   50% 4 2 0   100% 0 0   50%
python/lsst/daf/butler/direct_butler/_direct_butler.py (no function)   100% 142 0 8   100% 0 0   100%
python/lsst/daf/butler/direct_butler/_direct_butler_collections.py DirectButlerCollections.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_butler/_direct_butler_collections.py DirectButlerCollections.defaults   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_butler/_direct_butler_collections.py DirectButlerCollections.extend_chain   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_butler/_direct_butler_collections.py DirectButlerCollections.prepend_chain   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_butler/_direct_butler_collections.py DirectButlerCollections.redefine_chain   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_butler/_direct_butler_collections.py DirectButlerCollections.remove_from_chain   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_butler/_direct_butler_collections.py DirectButlerCollections.query   100% 3 0 0   50% 2 1   80%
python/lsst/daf/butler/direct_butler/_direct_butler_collections.py DirectButlerCollections.query_info   96% 26 1 0   94% 16 1   95%
python/lsst/daf/butler/direct_butler/_direct_butler_collections.py DirectButlerCollections.get_info   100% 14 0 0   100% 6 0   100%
python/lsst/daf/butler/direct_butler/_direct_butler_collections.py DirectButlerCollections.register   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_butler/_direct_butler_collections.py DirectButlerCollections.x_remove   50% 4 2 0   100% 0 0   50%
python/lsst/daf/butler/direct_butler/_direct_butler_collections.py (no function)   100% 25 0 3   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/__init__.py (no function)   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_driver.py DirectQueryDriver.__init__   100% 13 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_driver.py DirectQueryDriver.__enter__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_driver.py DirectQueryDriver.__exit__   100% 8 0 0   100% 2 0   100%
python/lsst/daf/butler/direct_query_driver/_driver.py DirectQueryDriver.universe   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_driver.py DirectQueryDriver.execute   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_driver.py DirectQueryDriver.execute   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_driver.py DirectQueryDriver.execute   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_driver.py DirectQueryDriver.execute   100% 1 0 0   50% 2 1   67%
python/lsst/daf/butler/direct_query_driver/_driver.py DirectQueryDriver.execute   94% 17 1 0   90% 10 1   93%
python/lsst/daf/butler/direct_query_driver/_driver.py DirectQueryDriver._read_results   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/direct_query_driver/_driver.py DirectQueryDriver._create_result_page_converter   91% 11 1 1   88% 8 1   89%
python/lsst/daf/butler/direct_query_driver/_driver.py DirectQueryDriver.materialize   90% 10 1 0   50% 4 2   79%
python/lsst/daf/butler/direct_query_driver/_driver.py DirectQueryDriver.upload_data_coordinates   94% 16 1 0   75% 8 2   88%
python/lsst/daf/butler/direct_query_driver/_driver.py DirectQueryDriver.count   100% 27 0 0   100% 12 0   100%
python/lsst/daf/butler/direct_query_driver/_driver.py DirectQueryDriver.any   100% 16 0 0   100% 10 0   100%
python/lsst/daf/butler/direct_query_driver/_driver.py DirectQueryDriver.explain_no_results   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/direct_query_driver/_driver.py DirectQueryDriver.get_dataset_type   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_driver.py DirectQueryDriver.get_default_collections   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/direct_query_driver/_driver.py DirectQueryDriver.build_query   94% 18 1 0   88% 8 1   92%
python/lsst/daf/butler/direct_query_driver/_driver.py DirectQueryDriver._analyze_query_tree   89% 27 3 0   80% 10 2   86%
python/lsst/daf/butler/direct_query_driver/_driver.py DirectQueryDriver._resolve_union_datasets   0% 14 14 0   0% 10 0   0%
python/lsst/daf/butler/direct_query_driver/_driver.py DirectQueryDriver.apply_initial_query_joins   100% 13 0 0   100% 12 0   100%
python/lsst/daf/butler/direct_query_driver/_driver.py DirectQueryDriver.apply_missing_dimension_joins   100% 6 0 0   100% 2 0   100%
python/lsst/daf/butler/direct_query_driver/_driver.py DirectQueryDriver.project_spatial_join_filtering   100% 10 0 0   100% 6 0   100%
python/lsst/daf/butler/direct_query_driver/_driver.py DirectQueryDriver.apply_query_projection   73% 59 16 1   72% 50 8   72%
python/lsst/daf/butler/direct_query_driver/_driver.py DirectQueryDriver.apply_query_find_first   100% 10 0 0   100% 2 0   100%
python/lsst/daf/butler/direct_query_driver/_driver.py DirectQueryDriver._analyze_collections   88% 17 2 0   75% 8 2   84%
python/lsst/daf/butler/direct_query_driver/_driver.py DirectQueryDriver._filter_collections   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_driver.py DirectQueryDriver._filter_collections.recurse   100% 7 0 0   100% 6 0   100%
python/lsst/daf/butler/direct_query_driver/_driver.py DirectQueryDriver._resolve_dataset_search   100% 17 0 0   100% 14 0   100%
python/lsst/daf/butler/direct_query_driver/_driver.py DirectQueryDriver._join_materialization   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_driver.py DirectQueryDriver.join_dataset_search   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_driver.py DirectQueryDriver.join_dataset_search   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_driver.py DirectQueryDriver.join_dataset_search   62% 8 3 0   50% 2 1   60%
python/lsst/daf/butler/direct_query_driver/_driver.py _Cursor.__init__   73% 11 3 0   100% 0 0   73%
python/lsst/daf/butler/direct_query_driver/_driver.py _Cursor.close   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/direct_query_driver/_driver.py _Cursor.next   100% 12 0 0   100% 4 0   100%
python/lsst/daf/butler/direct_query_driver/_driver.py (no function)   100% 83 0 2   50% 10 5   95%
python/lsst/daf/butler/direct_query_driver/_postprocessing.py Postprocessing.__init__   100% 5 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_postprocessing.py Postprocessing.limit   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_postprocessing.py Postprocessing.limit   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/direct_query_driver/_postprocessing.py Postprocessing.__bool__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_postprocessing.py Postprocessing.gather_columns_required   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/direct_query_driver/_postprocessing.py Postprocessing.iter_region_dimension_elements   100% 5 0 0   100% 4 0   100%
python/lsst/daf/butler/direct_query_driver/_postprocessing.py Postprocessing.iter_missing   100% 6 0 0   83% 6 1   92%
python/lsst/daf/butler/direct_query_driver/_postprocessing.py Postprocessing.apply   94% 18 1 0   93% 14 1   94%
python/lsst/daf/butler/direct_query_driver/_postprocessing.py (no function)   100% 29 0 2   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_query_analysis.py QueryJoinsAnalysis.__post_init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_query_analysis.py QueryJoinsAnalysis.iter_mandatory   79% 14 3 0   79% 14 3   79%
python/lsst/daf/butler/direct_query_driver/_query_analysis.py QueryFindFirstAnalysis.dataset_type   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_query_analysis.py QueryFindFirstAnalysis.__bool__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_query_analysis.py (no function)   100% 63 0 3   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_query_builder.py QueryBuilder.__init__   100% 6 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_query_builder.py QueryBuilder.analyze_projection   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/direct_query_driver/_query_builder.py QueryBuilder.analyze_find_first   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_query_builder.py QueryBuilder.apply_joins   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_query_builder.py QueryBuilder.apply_projection   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_query_builder.py QueryBuilder.apply_find_first   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_query_builder.py QueryBuilder.finish_select   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_query_builder.py QueryBuilder.finish_select   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_query_builder.py QueryBuilder.finish_select   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_query_builder.py QueryBuilder.finish_nested   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_query_builder.py QueryBuilder._needs_collection_key_field   100% 4 0 0   100% 4 0   100%
python/lsst/daf/butler/direct_query_driver/_query_builder.py SingleSelectQueryBuilder.__init__   100% 5 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_query_builder.py SingleSelectQueryBuilder.analyze_projection   100% 11 0 0   100% 10 0   100%
python/lsst/daf/butler/direct_query_driver/_query_builder.py SingleSelectQueryBuilder.analyze_find_first   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/direct_query_driver/_query_builder.py SingleSelectQueryBuilder.apply_joins   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_query_builder.py SingleSelectQueryBuilder.apply_projection   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_query_builder.py SingleSelectQueryBuilder.apply_find_first   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/direct_query_driver/_query_builder.py SingleSelectQueryBuilder.finish_select   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_query_builder.py SingleSelectQueryBuilder.finish_nested   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_query_builder.py UnionQueryBuilder.__init__   0% 4 4 0   100% 0 0   0%
python/lsst/daf/butler/direct_query_driver/_query_builder.py UnionQueryBuilder.db   0% 3 3 0   0% 2 0   0%
python/lsst/daf/butler/direct_query_driver/_query_builder.py UnionQueryBuilder.special   0% 3 3 0   0% 2 0   0%
python/lsst/daf/butler/direct_query_driver/_query_builder.py UnionQueryBuilder.analyze_projection   0% 19 19 0   0% 24 0   0%
python/lsst/daf/butler/direct_query_driver/_query_builder.py UnionQueryBuilder.analyze_find_first   0% 7 7 1   0% 4 0   0%
python/lsst/daf/butler/direct_query_driver/_query_builder.py UnionQueryBuilder.apply_joins   0% 11 11 0   0% 8 0   0%
python/lsst/daf/butler/direct_query_driver/_query_builder.py UnionQueryBuilder.apply_projection   0% 4 4 0   0% 4 0   0%
python/lsst/daf/butler/direct_query_driver/_query_builder.py UnionQueryBuilder.apply_find_first   0% 4 4 0   0% 4 0   0%
python/lsst/daf/butler/direct_query_driver/_query_builder.py UnionQueryBuilder.finish_select   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_query_builder.py UnionQueryBuilder.finish_select   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_query_builder.py UnionQueryBuilder.finish_select   0% 12 12 0   0% 6 0   0%
python/lsst/daf/butler/direct_query_driver/_query_builder.py UnionQueryBuilder.finish_nested   0% 4 4 0   100% 0 0   0%
python/lsst/daf/butler/direct_query_driver/_query_builder.py (no function)   100% 89 0 3   50% 8 4   96%
python/lsst/daf/butler/direct_query_driver/_result_page_converter.py ResultPageConverter.convert   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_result_page_converter.py DimensionRecordResultPageConverter.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_result_page_converter.py DimensionRecordResultPageConverter.convert   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/direct_query_driver/_result_page_converter.py _create_dimension_record_row_converter   100% 5 0 0   100% 4 0   100%
python/lsst/daf/butler/direct_query_driver/_result_page_converter.py _DimensionRecordRowConverter.convert   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_result_page_converter.py _NormalDimensionRecordRowConverter.__init__   100% 11 0 0   100% 6 0   100%
python/lsst/daf/butler/direct_query_driver/_result_page_converter.py _NormalDimensionRecordRowConverter.convert   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/direct_query_driver/_result_page_converter.py _SkypixDimensionRecordRowConverter.__init__   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_result_page_converter.py _SkypixDimensionRecordRowConverter.convert   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_result_page_converter.py _CachedDimensionRecordRowConverter.__init__   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_result_page_converter.py _CachedDimensionRecordRowConverter.convert   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_result_page_converter.py DataCoordinateResultPageConverter.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_result_page_converter.py DataCoordinateResultPageConverter.convert   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_result_page_converter.py DatasetRefResultPageConverter.__init__   100% 5 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_result_page_converter.py DatasetRefResultPageConverter.convert   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_result_page_converter.py _DataCoordinateRowConverter.__init__   100% 6 0 0   100% 2 0   100%
python/lsst/daf/butler/direct_query_driver/_result_page_converter.py _DataCoordinateRowConverter.convert   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/direct_query_driver/_result_page_converter.py _DimensionGroupRecordRowConverter.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_result_page_converter.py _DimensionGroupRecordRowConverter.convert   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_result_page_converter.py GeneralResultPageConverter.__init__   95% 21 1 0   86% 14 2   91%
python/lsst/daf/butler/direct_query_driver/_result_page_converter.py GeneralResultPageConverter.convert   100% 10 0 0   100% 8 0   100%
python/lsst/daf/butler/direct_query_driver/_result_page_converter.py _GeneralColumnConverter.convert   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_result_page_converter.py _DefaultGeneralColumnConverter.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_result_page_converter.py _DefaultGeneralColumnConverter.convert   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_result_page_converter.py _TimestampGeneralColumnConverter.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_result_page_converter.py _TimestampGeneralColumnConverter.convert   75% 4 1 0   50% 2 1   67%
python/lsst/daf/butler/direct_query_driver/_result_page_converter.py _TimespanGeneralColumnConverter.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_result_page_converter.py _TimespanGeneralColumnConverter.convert   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_result_page_converter.py (no function)   100% 67 0 2   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_sql_builders.py SqlSelectBuilder.copy   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/direct_query_driver/_sql_builders.py SqlSelectBuilder.handle_empty_columns   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/direct_query_driver/_sql_builders.py SqlSelectBuilder.select   97% 29 1 0   95% 22 1   96%
python/lsst/daf/butler/direct_query_driver/_sql_builders.py SqlSelectBuilder.join   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_sql_builders.py SqlSelectBuilder.into_joins_builder   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/direct_query_driver/_sql_builders.py SqlSelectBuilder.nested   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_sql_builders.py SqlSelectBuilder.union_subquery   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_sql_builders.py SqlColumns.extract_dimensions   100% 5 0 0   100% 4 0   100%
python/lsst/daf/butler/direct_query_driver/_sql_builders.py SqlColumns.extract_columns   100% 19 0 0   100% 16 0   100%
python/lsst/daf/butler/direct_query_driver/_sql_builders.py SqlJoinsBuilder.copy   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/direct_query_driver/_sql_builders.py SqlJoinsBuilder.extract_dimensions   100% 4 0 0   50% 2 1   83%
python/lsst/daf/butler/direct_query_driver/_sql_builders.py SqlJoinsBuilder.extract_columns   100% 4 0 0   50% 2 1   83%
python/lsst/daf/butler/direct_query_driver/_sql_builders.py SqlJoinsBuilder.join   100% 23 0 0   94% 16 1   97%
python/lsst/daf/butler/direct_query_driver/_sql_builders.py SqlJoinsBuilder.where   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_sql_builders.py SqlJoinsBuilder.to_select_builder   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_sql_builders.py make_table_spec   90% 10 1 0   88% 8 1   89%
python/lsst/daf/butler/direct_query_driver/_sql_builders.py _make_table_indices   100% 9 0 0   100% 6 0   100%
python/lsst/daf/butler/direct_query_driver/_sql_builders.py (no function)   100% 63 0 3   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_sql_column_visitor.py SqlColumnVisitor.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_sql_column_visitor.py SqlColumnVisitor.visit_literal   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/direct_query_driver/_sql_column_visitor.py SqlColumnVisitor.visit_dimension_key_reference   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_sql_column_visitor.py SqlColumnVisitor.visit_dimension_field_reference   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/direct_query_driver/_sql_column_visitor.py SqlColumnVisitor.visit_dataset_field_reference   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/direct_query_driver/_sql_column_visitor.py SqlColumnVisitor.visit_unary_expression   100% 7 0 1   100% 4 0   100%
python/lsst/daf/butler/direct_query_driver/_sql_column_visitor.py SqlColumnVisitor.visit_binary_expression   100% 13 0 1   100% 8 0   100%
python/lsst/daf/butler/direct_query_driver/_sql_column_visitor.py SqlColumnVisitor.visit_reversed   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_sql_column_visitor.py SqlColumnVisitor.visit_boolean_wrapper   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_sql_column_visitor.py SqlColumnVisitor.visit_comparison   100% 32 0 3   96% 24 1   98%
python/lsst/daf/butler/direct_query_driver/_sql_column_visitor.py SqlColumnVisitor.visit_is_null   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/direct_query_driver/_sql_column_visitor.py SqlColumnVisitor.visit_in_container   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_sql_column_visitor.py SqlColumnVisitor.visit_in_range   100% 10 0 0   100% 6 0   100%
python/lsst/daf/butler/direct_query_driver/_sql_column_visitor.py SqlColumnVisitor.visit_in_query_tree   100% 11 0 1   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_sql_column_visitor.py SqlColumnVisitor.apply_logical_and   100% 7 0 0   100% 4 0   100%
python/lsst/daf/butler/direct_query_driver/_sql_column_visitor.py SqlColumnVisitor.apply_logical_or   86% 7 1 0   75% 4 1   82%
python/lsst/daf/butler/direct_query_driver/_sql_column_visitor.py SqlColumnVisitor.apply_logical_not   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_sql_column_visitor.py SqlColumnVisitor.expect_scalar   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_sql_column_visitor.py SqlColumnVisitor._convert_datetime_to_ingest_date   33% 9 6 0   25% 4 1   31%
python/lsst/daf/butler/direct_query_driver/_sql_column_visitor.py SqlColumnVisitor._convert_ingest_date_to_datetime   75% 4 1 0   50% 2 1   67%
python/lsst/daf/butler/direct_query_driver/_sql_column_visitor.py SqlColumnVisitor.expect_timespan   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/direct_query_driver/_sql_column_visitor.py (no function)   100% 33 0 3   100% 0 0   100%
python/lsst/daf/butler/formatters/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/formatters/astropyTable.py AstropyTableFormatter.get_write_extension   75% 4 1 0   50% 2 1   67%
python/lsst/daf/butler/formatters/astropyTable.py AstropyTableFormatter.read_from_local_file   75% 4 1 0   50% 2 1   67%
python/lsst/daf/butler/formatters/astropyTable.py AstropyTableFormatter.write_local_file   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/formatters/astropyTable.py (no function)   100% 12 0 0   100% 0 0   100%
python/lsst/daf/butler/formatters/file.py FileFormatter._readFile   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/formatters/file.py FileFormatter._writeFile   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/formatters/file.py FileFormatter._assembleDataset   0% 12 12 0   0% 2 0   0%
python/lsst/daf/butler/formatters/file.py FileFormatter._coerceBuiltinType   0% 12 12 0   0% 12 0   0%
python/lsst/daf/butler/formatters/file.py FileFormatter._coerceType   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/formatters/file.py FileFormatter.read   0% 6 6 0   0% 2 0   0%
python/lsst/daf/butler/formatters/file.py FileFormatter.fromBytes   0% 9 9 0   0% 4 0   0%
python/lsst/daf/butler/formatters/file.py FileFormatter.write   0% 3 3 0   100% 0 0   0%
python/lsst/daf/butler/formatters/file.py FileFormatter.toBytes   0% 3 3 0   0% 2 0   0%
python/lsst/daf/butler/formatters/file.py (no function)   0% 18 18 2   100% 0 0   0%
python/lsst/daf/butler/formatters/json.py JsonFormatter.read_from_uri   64% 11 4 0   100% 2 0   69%
python/lsst/daf/butler/formatters/json.py JsonFormatter.to_bytes   100% 9 0 0   100% 4 0   100%
python/lsst/daf/butler/formatters/json.py (no function)   100% 15 0 0   100% 0 0   100%
python/lsst/daf/butler/formatters/logs.py ButlerLogRecordsFormatter._get_read_pytype   75% 4 1 0   50% 2 1   67%
python/lsst/daf/butler/formatters/logs.py ButlerLogRecordsFormatter.read_from_local_file   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/formatters/logs.py ButlerLogRecordsFormatter.to_bytes   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/formatters/logs.py (no function)   100% 11 0 0   100% 0 0   100%
python/lsst/daf/butler/formatters/matplotlib.py MatplotlibFormatter.write_local_file   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/formatters/matplotlib.py (no function)   100% 8 0 0   100% 0 0   100%
python/lsst/daf/butler/formatters/packages.py PackagesFormatter.get_write_extension   80% 5 1 0   50% 2 1   71%
python/lsst/daf/butler/formatters/packages.py PackagesFormatter.read_from_uri   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/formatters/packages.py PackagesFormatter.to_bytes   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/formatters/packages.py (no function)   100% 12 0 0   100% 0 0   100%
python/lsst/daf/butler/formatters/parquet.py generic_open   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/formatters/parquet.py ParquetFormatter.can_accept   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/formatters/parquet.py ParquetFormatter.read_from_uri   50% 6 3 0   100% 0 0   50%
python/lsst/daf/butler/formatters/parquet.py ParquetFormatter.read_from_local_file   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/formatters/parquet.py ParquetFormatter._read_parquet   98% 46 1 0   97% 30 1   97%
python/lsst/daf/butler/formatters/parquet.py ParquetFormatter.add_provenance   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/formatters/parquet.py ParquetFormatter.write_local_file   100% 17 0 0   100% 12 0   100%
python/lsst/daf/butler/formatters/parquet.py arrow_to_pandas   100% 8 0 0   100% 4 0   100%
python/lsst/daf/butler/formatters/parquet.py arrow_to_astropy   100% 7 0 0   100% 4 0   100%
python/lsst/daf/butler/formatters/parquet.py arrow_to_numpy   100% 15 0 0   100% 8 0   100%
python/lsst/daf/butler/formatters/parquet.py arrow_to_numpy_dict   100% 30 0 0   100% 18 0   100%
python/lsst/daf/butler/formatters/parquet.py _numpy_dict_to_numpy   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/formatters/parquet.py _numpy_to_numpy_dict   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/formatters/parquet.py numpy_to_arrow   92% 13 1 0   75% 4 1   88%
python/lsst/daf/butler/formatters/parquet.py numpy_dict_to_arrow   100% 12 0 0   75% 4 1   94%
python/lsst/daf/butler/formatters/parquet.py astropy_to_arrow   100% 24 0 0   100% 10 0   100%
python/lsst/daf/butler/formatters/parquet.py astropy_to_pandas   93% 14 1 0   88% 8 1   91%
python/lsst/daf/butler/formatters/parquet.py add_pandas_index_to_astropy   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/formatters/parquet.py _astropy_to_numpy_dict   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/formatters/parquet.py pandas_to_arrow   94% 17 1 0   83% 6 1   91%
python/lsst/daf/butler/formatters/parquet.py pandas_to_astropy   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/formatters/parquet.py _pandas_to_numpy_dict   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/formatters/parquet.py numpy_to_astropy   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/formatters/parquet.py arrow_schema_to_pandas_index   100% 10 0 0   100% 4 0   100%
python/lsst/daf/butler/formatters/parquet.py arrow_schema_to_column_list   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/formatters/parquet.py DataFrameSchema.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/formatters/parquet.py DataFrameSchema.from_arrow   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/formatters/parquet.py DataFrameSchema.to_arrow_schema   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/formatters/parquet.py DataFrameSchema.to_arrow_numpy_schema   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/formatters/parquet.py DataFrameSchema.to_arrow_astropy_schema   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/formatters/parquet.py DataFrameSchema.schema   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/formatters/parquet.py DataFrameSchema.__repr__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/formatters/parquet.py DataFrameSchema.__eq__   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/formatters/parquet.py ArrowAstropySchema.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/formatters/parquet.py ArrowAstropySchema.from_arrow   100% 7 0 0   100% 0 0   100%
python/lsst/daf/butler/formatters/parquet.py ArrowAstropySchema.to_arrow_schema   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/formatters/parquet.py ArrowAstropySchema.to_dataframe_schema   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/formatters/parquet.py ArrowAstropySchema.to_arrow_numpy_schema   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/formatters/parquet.py ArrowAstropySchema.schema   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/formatters/parquet.py ArrowAstropySchema.__repr__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/formatters/parquet.py ArrowAstropySchema.__eq__   100% 12 0 0   100% 12 0   100%
python/lsst/daf/butler/formatters/parquet.py ArrowNumpySchema.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/formatters/parquet.py ArrowNumpySchema.from_arrow   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/formatters/parquet.py ArrowNumpySchema.to_arrow_astropy_schema   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/formatters/parquet.py ArrowNumpySchema.to_dataframe_schema   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/formatters/parquet.py ArrowNumpySchema.to_arrow_schema   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/formatters/parquet.py ArrowNumpySchema.schema   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/formatters/parquet.py ArrowNumpySchema.__repr__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/formatters/parquet.py ArrowNumpySchema.__eq__   100% 5 0 0   100% 4 0   100%
python/lsst/daf/butler/formatters/parquet.py _split_multi_index_column_names   100% 7 0 0   100% 4 0   100%
python/lsst/daf/butler/formatters/parquet.py _standardize_multi_index_columns   86% 22 3 0   85% 20 3   86%
python/lsst/daf/butler/formatters/parquet.py _apply_astropy_metadata   100% 23 0 0   100% 20 0   100%
python/lsst/daf/butler/formatters/parquet.py _arrow_string_to_numpy_dtype   100% 10 0 0   100% 4 0   100%
python/lsst/daf/butler/formatters/parquet.py _append_numpy_string_metadata   100% 7 0 0   100% 4 0   100%
python/lsst/daf/butler/formatters/parquet.py _append_numpy_multidim_metadata   100% 2 0 0   100% 2 0   100%
python/lsst/daf/butler/formatters/parquet.py _multidim_shape_from_metadata   88% 8 1 0   75% 4 1   83%
python/lsst/daf/butler/formatters/parquet.py _schema_to_dtype_list   100% 11 0 0   100% 6 0   100%
python/lsst/daf/butler/formatters/parquet.py _numpy_dtype_to_arrow_types   95% 22 1 0   80% 10 2   91%
python/lsst/daf/butler/formatters/parquet.py _numpy_dict_to_dtype   100% 13 0 0   100% 8 0   100%
python/lsst/daf/butler/formatters/parquet.py _numpy_style_arrays_to_arrow_arrays   90% 20 2 0   80% 10 2   87%
python/lsst/daf/butler/formatters/parquet.py compute_row_group_size   96% 26 1 0   94% 18 1   95%
python/lsst/daf/butler/formatters/parquet.py (no function)   100% 96 0 10   100% 0 0   100%
python/lsst/daf/butler/formatters/pickle.py PickleFormatter.read_from_uri   60% 5 2 0   100% 0 0   60%
python/lsst/daf/butler/formatters/pickle.py PickleFormatter.to_bytes   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/formatters/pickle.py (no function)   100% 12 0 0   100% 0 0   100%
python/lsst/daf/butler/formatters/typeless.py TypelessFormatter.read   80% 5 1 0   50% 2 1   71%
python/lsst/daf/butler/formatters/typeless.py TypelessFormatter._assemble_dataset   83% 12 2 0   100% 2 0   86%
python/lsst/daf/butler/formatters/typeless.py TypelessFormatter._coerce_builtin_type   100% 12 0 0   100% 12 0   100%
python/lsst/daf/butler/formatters/typeless.py TypelessFormatter._coerce_type   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/formatters/typeless.py (no function)   100% 10 0 3   100% 0 0   100%
python/lsst/daf/butler/formatters/yaml.py YamlFormatter.read_from_uri   50% 8 4 0   100% 0 0   50%
python/lsst/daf/butler/formatters/yaml.py YamlFormatter.to_bytes   79% 19 4 0   83% 12 2   81%
python/lsst/daf/butler/formatters/yaml.py (no function)   100% 15 0 0   100% 0 0   100%
python/lsst/daf/butler/json.py SupportsSimple.to_simple   100% 1 0 0   50% 2 1   67%
python/lsst/daf/butler/json.py SupportsSimple.from_simple   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/json.py to_json_pydantic   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/json.py from_json_pydantic   60% 5 2 0   100% 0 0   60%
python/lsst/daf/butler/json.py to_json_generic   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/json.py from_json_generic   0% 5 5 0   100% 0 0   0%
python/lsst/daf/butler/json.py (no function)   100% 13 0 3   50% 2 1   93%
python/lsst/daf/butler/logging.py MDCDict.__getitem__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/logging.py MDCDict.__str__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/logging.py MDCDict.__repr__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/logging.py ButlerMDC.MDC   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/logging.py ButlerMDC.MDCRemove   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/logging.py ButlerMDC.clear_mdc   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/logging.py ButlerMDC.set_mdc   100% 13 0 0   100% 6 0   100%
python/lsst/daf/butler/logging.py ButlerMDC.add_mdc_log_record_factory   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/logging.py ButlerMDC.add_mdc_log_record_factory.record_factory   100% 8 0 0   75% 4 1   92%
python/lsst/daf/butler/logging.py ButlerMDC.restore_log_record_factory   100% 2 0 0   100% 2 0   100%
python/lsst/daf/butler/logging.py ButlerLogRecord.from_record   100% 11 0 0   100% 2 0   100%
python/lsst/daf/butler/logging.py ButlerLogRecord.format   100% 7 0 0   100% 2 0   100%
python/lsst/daf/butler/logging.py ButlerLogRecord.__str__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/logging.py _ButlerLogRecordsModelV1.wrap   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/logging.py _ButlerLogRecordsModel.wrap   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/logging.py ButlerLogRecords.__init__   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/logging.py ButlerLogRecords.from_records   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/logging.py ButlerLogRecords.from_file   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/logging.py ButlerLogRecords._from_record_subset   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/logging.py ButlerLogRecords._generic_startswith   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/logging.py ButlerLogRecords._detect_model   93% 15 1 0   92% 12 1   93%
python/lsst/daf/butler/logging.py ButlerLogRecords.from_stream   100% 24 0 0   100% 16 0   100%
python/lsst/daf/butler/logging.py ButlerLogRecords.from_raw   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/logging.py ButlerLogRecords.to_json_data   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/logging.py ButlerLogRecords.log_format   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/logging.py ButlerLogRecords.log_format   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/logging.py ButlerLogRecords.set_log_format   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/logging.py ButlerLogRecords.__len__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/logging.py ButlerLogRecords.__iter__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/logging.py ButlerLogRecords.__setitem__   100% 1 0 0   50% 2 1   67%
python/lsst/daf/butler/logging.py ButlerLogRecords.__setitem__   100% 1 0 0   50% 2 1   67%
python/lsst/daf/butler/logging.py ButlerLogRecords.__setitem__   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/logging.py ButlerLogRecords.__getitem__   100% 1 0 0   50% 2 1   67%
python/lsst/daf/butler/logging.py ButlerLogRecords.__getitem__   100% 1 0 0   50% 2 1   67%
python/lsst/daf/butler/logging.py ButlerLogRecords.__getitem__   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/logging.py ButlerLogRecords.__delitem__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/logging.py ButlerLogRecords.__eq__   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/logging.py ButlerLogRecords.__str__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/logging.py ButlerLogRecords._validate_record   100% 6 0 0   100% 4 0   100%
python/lsst/daf/butler/logging.py ButlerLogRecords.insert   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/logging.py ButlerLogRecords.append   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/logging.py ButlerLogRecords.write_streaming_extra   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/logging.py ButlerLogRecordHandler.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/logging.py ButlerLogRecordHandler.emit   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/logging.py JsonLogFormatter.format   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/logging.py (no function)   100% 116 0 0   100% 0 0   100%
python/lsst/daf/butler/mapping_factory.py MappingFactory.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/mapping_factory.py MappingFactory.__contains__   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/mapping_factory.py MappingFactory.getLookupKeys   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/mapping_factory.py MappingFactory.getClassFromRegistryWithMatch   93% 14 1 0   75% 4 1   89%
python/lsst/daf/butler/mapping_factory.py MappingFactory.getClassFromRegistry   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/mapping_factory.py MappingFactory.getFromRegistryWithMatch   95% 21 1 0   75% 12 3   88%
python/lsst/daf/butler/mapping_factory.py MappingFactory.getFromRegistry   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/mapping_factory.py MappingFactory.placeInRegistry   83% 6 1 0   75% 4 1   80%
python/lsst/daf/butler/mapping_factory.py MappingFactory._getNameKey   88% 8 1 0   83% 6 1   86%
python/lsst/daf/butler/mapping_factory.py (no function)   100% 18 0 0   100% 0 0   100%
python/lsst/daf/butler/name_shrinker.py NameShrinker.__init__   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/name_shrinker.py NameShrinker.shrink   17% 12 10 0   25% 4 1   19%
python/lsst/daf/butler/name_shrinker.py NameShrinker.expand   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/name_shrinker.py NameShrinker.__iter__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/name_shrinker.py NameShrinker.__len__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/name_shrinker.py NameShrinker.update   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/name_shrinker.py (no function)   100% 11 0 0   100% 0 0   100%
python/lsst/daf/butler/nonempty_mapping.py Copyable.copy   100% 1 0 0   50% 2 1   67%
python/lsst/daf/butler/nonempty_mapping.py NonemptyMapping.__init__   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/nonempty_mapping.py NonemptyMapping.__len__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/nonempty_mapping.py NonemptyMapping.__iter__   100% 3 0 0   100% 4 0   100%
python/lsst/daf/butler/nonempty_mapping.py NonemptyMapping.__getitem__   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/nonempty_mapping.py NonemptyMapping.__contains__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/nonempty_mapping.py NonemptyMapping.get   100% 1 0 0   50% 2 1   67%
python/lsst/daf/butler/nonempty_mapping.py NonemptyMapping.get   100% 1 0 0   50% 2 1   67%
python/lsst/daf/butler/nonempty_mapping.py NonemptyMapping.get   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/nonempty_mapping.py NonemptyMapping.copy   0% 4 4 0   0% 2 0   0%
python/lsst/daf/butler/nonempty_mapping.py (no function)   100% 18 0 0   100% 0 0   100%
python/lsst/daf/butler/persistence_context.py PersistenceContextVars._getContextVars   0% 6 6 0   0% 4 0   0%
python/lsst/daf/butler/persistence_context.py PersistenceContextVars.__init__   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/persistence_context.py PersistenceContextVars._functionRunner   0% 11 11 0   0% 4 0   0%
python/lsst/daf/butler/persistence_context.py PersistenceContextVars.run   0% 3 3 0   100% 0 0   0%
python/lsst/daf/butler/persistence_context.py (no function)   100% 32 0 6   100% 0 0   100%
python/lsst/daf/butler/progress.py ProgressBar.update   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/progress.py Progress.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/progress.py Progress.set_handler   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/progress.py Progress.is_enabled   100% 5 0 0   100% 4 0   100%
python/lsst/daf/butler/progress.py Progress.at   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/progress.py Progress.bar   92% 13 1 0   80% 10 2   87%
python/lsst/daf/butler/progress.py Progress.wrap   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/progress.py Progress.iter_chunks   83% 29 5 0   90% 20 2   86%
python/lsst/daf/butler/progress.py Progress.iter_item_chunks   90% 29 3 0   95% 20 1   92%
python/lsst/daf/butler/progress.py ProgressHandler.get_progress_bar   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/progress.py _NullProgressBar.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/progress.py _NullProgressBar.context   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/progress.py _NullProgressBar.__iter__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/progress.py _NullProgressBar.update   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/progress.py (no function)   100% 34 0 0   100% 0 0   100%
python/lsst/daf/butler/pydantic_utils.py get_universe_from_context   50% 6 3 0   50% 2 1   50%
python/lsst/daf/butler/pydantic_utils.py DeferredValidation.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/pydantic_utils.py DeferredValidation.from_validated   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/pydantic_utils.py DeferredValidation.validated   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/pydantic_utils.py DeferredValidation.__init_subclass__   67% 6 2 0   100% 0 0   67%
python/lsst/daf/butler/pydantic_utils.py DeferredValidation._get_wrapped_type_adapter   80% 5 1 0   75% 4 1   78%
python/lsst/daf/butler/pydantic_utils.py DeferredValidation._serialize   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/pydantic_utils.py DeferredValidation.__get_pydantic_core_schema__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/pydantic_utils.py DeferredValidation.__get_pydantic_json_schema__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/pydantic_utils.py _deserialize_region   75% 4 1 0   50% 2 1   67%
python/lsst/daf/butler/pydantic_utils.py _serialize_region   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/pydantic_utils.py _deserialize_bytes_hex   75% 4 1 0   50% 2 1   67%
python/lsst/daf/butler/pydantic_utils.py _deserialize_time   75% 4 1 0   50% 2 1   67%
python/lsst/daf/butler/pydantic_utils.py _serialize_time   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/pydantic_utils.py _serialize_ellipsis   0% 3 3 0   0% 2 0   0%
python/lsst/daf/butler/pydantic_utils.py _deserialize_ellipsis   0% 4 4 0   0% 2 0   0%
python/lsst/daf/butler/pydantic_utils.py (no function)   100% 39 0 2   100% 0 0   100%
python/lsst/daf/butler/queries/__init__.py (no function)   100% 6 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_base.py QueryBase.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_base.py QueryBase.any   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_base.py QueryBase.explain_no_results   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_base.py QueryBase.where   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/queries/_base.py QueryResultsBase.dimensions   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/queries/_base.py QueryResultsBase.count   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/queries/_base.py QueryResultsBase.order_by   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_base.py QueryResultsBase.limit   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_base.py QueryResultsBase.where   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_base.py QueryResultsBase._get_datasets   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/queries/_base.py QueryResultsBase._copy   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/queries/_base.py (no function)   100% 29 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_data_coordinate_query_results.py DataCoordinateQueryResults.__init__   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_data_coordinate_query_results.py DataCoordinateQueryResults.__iter__   100% 2 0 0   100% 2 0   100%
python/lsst/daf/butler/queries/_data_coordinate_query_results.py DataCoordinateQueryResults.dimensions   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_data_coordinate_query_results.py DataCoordinateQueryResults.has_dimension_records   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_data_coordinate_query_results.py DataCoordinateQueryResults.with_dimension_records   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/queries/_data_coordinate_query_results.py DataCoordinateQueryResults.count   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_data_coordinate_query_results.py DataCoordinateQueryResults._copy   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_data_coordinate_query_results.py DataCoordinateQueryResults._get_datasets   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_data_coordinate_query_results.py (no function)   100% 20 0 2   100% 0 0   100%
python/lsst/daf/butler/queries/_dataset_query_results.py DatasetRefQueryResults.__init__   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_dataset_query_results.py DatasetRefQueryResults.__iter__   100% 2 0 0   100% 2 0   100%
python/lsst/daf/butler/queries/_dataset_query_results.py DatasetRefQueryResults._iter_pages   100% 2 0 0   100% 2 0   100%
python/lsst/daf/butler/queries/_dataset_query_results.py DatasetRefQueryResults.dimensions   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_dataset_query_results.py DatasetRefQueryResults.dataset_type   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_dataset_query_results.py DatasetRefQueryResults.data_ids   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_dataset_query_results.py DatasetRefQueryResults.has_dimension_records   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_dataset_query_results.py DatasetRefQueryResults.with_dimension_records   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/queries/_dataset_query_results.py DatasetRefQueryResults.count   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_dataset_query_results.py DatasetRefQueryResults._copy   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_dataset_query_results.py DatasetRefQueryResults._get_datasets   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_dataset_query_results.py (no function)   100% 28 0 2   100% 0 0   100%
python/lsst/daf/butler/queries/_dimension_record_query_results.py DimensionRecordQueryResults.__init__   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_dimension_record_query_results.py DimensionRecordQueryResults.__iter__   100% 2 0 0   100% 2 0   100%
python/lsst/daf/butler/queries/_dimension_record_query_results.py DimensionRecordQueryResults.iter_table_pages   100% 2 0 0   100% 2 0   100%
python/lsst/daf/butler/queries/_dimension_record_query_results.py DimensionRecordQueryResults.iter_set_pages   100% 2 0 0   100% 2 0   100%
python/lsst/daf/butler/queries/_dimension_record_query_results.py DimensionRecordQueryResults.element   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_dimension_record_query_results.py DimensionRecordQueryResults.dimensions   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_dimension_record_query_results.py DimensionRecordQueryResults.count   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_dimension_record_query_results.py DimensionRecordQueryResults._copy   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_dimension_record_query_results.py DimensionRecordQueryResults._get_datasets   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_dimension_record_query_results.py (no function)   100% 22 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_expression_strings.py convert_expression_string_to_predicate   100% 10 0 0   100% 2 0   100%
python/lsst/daf/butler/queries/_expression_strings.py _ColExpr.column_type   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_expression_strings.py _ConversionVisitor.__init__   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_expression_strings.py _ConversionVisitor.visitBinaryOp   92% 26 2 0   83% 24 2   88%
python/lsst/daf/butler/queries/_expression_strings.py _ConversionVisitor.visitIsIn   83% 6 1 0   50% 2 1   75%
python/lsst/daf/butler/queries/_expression_strings.py _ConversionVisitor.visitIdentifier   93% 15 1 0   90% 10 1   92%
python/lsst/daf/butler/queries/_expression_strings.py _ConversionVisitor.visitBind   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/queries/_expression_strings.py _ConversionVisitor.visitNumericLiteral   100% 5 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_expression_strings.py _ConversionVisitor.visitParens   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_expression_strings.py _ConversionVisitor.visitPointNode   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_expression_strings.py _ConversionVisitor.visitCircleNode   100% 8 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_expression_strings.py _ConversionVisitor.visitBoxNode   100% 9 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_expression_strings.py _ConversionVisitor.visitPolygonNode   100% 8 0 0   100% 2 0   100%
python/lsst/daf/butler/queries/_expression_strings.py _ConversionVisitor.visitRegionNode   86% 7 1 0   50% 4 2   73%
python/lsst/daf/butler/queries/_expression_strings.py _ConversionVisitor.visitRangeLiteral   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_expression_strings.py _ConversionVisitor.visitStringLiteral   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_expression_strings.py _ConversionVisitor.visitTimeLiteral   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_expression_strings.py _ConversionVisitor.visitUuidLiteral   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_expression_strings.py _ConversionVisitor.visitTupleNode   80% 5 1 0   50% 2 1   71%
python/lsst/daf/butler/queries/_expression_strings.py _ConversionVisitor.visitUnaryOp   75% 8 2 0   67% 6 2   71%
python/lsst/daf/butler/queries/_expression_strings.py _ConversionVisitor.visitGlobNode   86% 7 1 0   67% 6 2   77%
python/lsst/daf/butler/queries/_expression_strings.py _make_literal   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_expression_strings.py _to_timespan_bound   83% 6 1 0   75% 4 1   80%
python/lsst/daf/butler/queries/_expression_strings.py _convert_comparison_operator   88% 8 1 1   83% 6 1   86%
python/lsst/daf/butler/queries/_expression_strings.py _convert_in_clause_to_predicate   73% 15 4 0   70% 10 1   72%
python/lsst/daf/butler/queries/_expression_strings.py _get_boolean_column_reference   100% 5 0 0   75% 4 1   89%
python/lsst/daf/butler/queries/_expression_strings.py _get_float_literal_value   100% 9 0 0   88% 8 1   94%
python/lsst/daf/butler/queries/_expression_strings.py (no function)   100% 55 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_general_query_results.py GeneralQueryResults.__init__   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_general_query_results.py GeneralQueryResults.__iter__   100% 8 0 0   100% 6 0   100%
python/lsst/daf/butler/queries/_general_query_results.py GeneralQueryResults.iter_tuples   100% 21 0 0   100% 10 0   100%
python/lsst/daf/butler/queries/_general_query_results.py GeneralQueryResults.dimensions   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_general_query_results.py GeneralQueryResults.has_dimension_records   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_general_query_results.py GeneralQueryResults.with_dimension_records   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/queries/_general_query_results.py GeneralQueryResults.count   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/queries/_general_query_results.py GeneralQueryResults._copy   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_general_query_results.py GeneralQueryResults._with_added_dataset_field   100% 5 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_general_query_results.py GeneralQueryResults._get_datasets   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_general_query_results.py GeneralQueryResults._make_data_id   92% 12 1 0   83% 6 1   89%
python/lsst/daf/butler/queries/_general_query_results.py GeneralQueryResults._make_dimension_record   0% 6 6 0   0% 2 0   0%
python/lsst/daf/butler/queries/_general_query_results.py GeneralQueryResults._get_cached_dimension_records   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/queries/_general_query_results.py GeneralQueryResults._add_dimension_records   100% 4 0 0   100% 6 0   100%
python/lsst/daf/butler/queries/_general_query_results.py (no function)   100% 37 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_identifiers.py IdentifierContext.__init__   86% 7 1 0   75% 4 1   82%
python/lsst/daf/butler/queries/_identifiers.py interpret_identifier   100% 57 0 0   96% 46 2   98%
python/lsst/daf/butler/queries/_identifiers.py (no function)   100% 17 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_query.py Query.__init__   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/queries/_query.py Query.constraint_dataset_types   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_query.py Query.constraint_dimensions   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_query.py Query.expression_factory   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_query.py Query.data_ids   100% 8 0 0   100% 4 0   100%
python/lsst/daf/butler/queries/_query.py Query.datasets   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_query.py Query.dimension_records   86% 7 1 0   75% 4 1   82%
python/lsst/daf/butler/queries/_query.py Query.general   81% 52 10 0   78% 36 8   80%
python/lsst/daf/butler/queries/_query.py Query.materialize   100% 16 0 0   100% 10 0   100%
python/lsst/daf/butler/queries/_query.py Query.join_dataset_search   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_query.py Query.join_data_coordinates   100% 12 0 0   100% 8 0   100%
python/lsst/daf/butler/queries/_query.py Query.join_data_coordinate_table   100% 17 0 0   80% 10 2   93%
python/lsst/daf/butler/queries/_query.py Query.join_dimensions   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_query.py Query.where   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_query.py Query._skip_governor_validation   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/_query.py Query._join_dataset_search_impl   100% 33 0 0   100% 24 0   100%
python/lsst/daf/butler/queries/_query.py (no function)   100% 48 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/convert_args.py convert_where_args   100% 17 0 0   100% 10 0   100%
python/lsst/daf/butler/queries/convert_args.py convert_order_by_args   100% 20 0 0   100% 14 0   100%
python/lsst/daf/butler/queries/convert_args.py (no function)   100% 12 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/driver.py DimensionRecordResultPage.as_table   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/queries/driver.py DimensionRecordResultPage.as_set   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/queries/driver.py QueryDriver.universe   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/queries/driver.py QueryDriver.execute   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/driver.py QueryDriver.execute   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/driver.py QueryDriver.execute   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/driver.py QueryDriver.execute   100% 1 0 0   50% 2 1   67%
python/lsst/daf/butler/queries/driver.py QueryDriver.execute   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/queries/driver.py QueryDriver.materialize   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/queries/driver.py QueryDriver.upload_data_coordinates   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/queries/driver.py QueryDriver.count   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/queries/driver.py QueryDriver.any   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/queries/driver.py QueryDriver.explain_no_results   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/queries/driver.py QueryDriver.get_default_collections   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/queries/driver.py QueryDriver.get_dataset_type   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/queries/driver.py (no function)   100% 59 0 0   50% 6 3   95%
python/lsst/daf/butler/queries/expression_factory.py ExpressionProxy.__repr__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/queries/expression_factory.py ExpressionProxy.is_null   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expression_factory.py ExpressionProxy._make_expression   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/queries/expression_factory.py ExpressionProxy._make_comparison   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expression_factory.py ExpressionProxy._expression   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/queries/expression_factory.py ScalarExpressionProxy.desc   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expression_factory.py ScalarExpressionProxy.as_boolean   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expression_factory.py ScalarExpressionProxy.__eq__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expression_factory.py ScalarExpressionProxy.__ne__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expression_factory.py ScalarExpressionProxy.__lt__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expression_factory.py ScalarExpressionProxy.__le__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expression_factory.py ScalarExpressionProxy.__gt__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expression_factory.py ScalarExpressionProxy.__ge__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expression_factory.py ScalarExpressionProxy.__neg__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expression_factory.py ScalarExpressionProxy.__add__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expression_factory.py ScalarExpressionProxy.__radd__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expression_factory.py ScalarExpressionProxy.__sub__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expression_factory.py ScalarExpressionProxy.__rsub__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expression_factory.py ScalarExpressionProxy.__mul__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expression_factory.py ScalarExpressionProxy.__rmul__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expression_factory.py ScalarExpressionProxy.__truediv__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expression_factory.py ScalarExpressionProxy.__rtruediv__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expression_factory.py ScalarExpressionProxy.__mod__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expression_factory.py ScalarExpressionProxy.__rmod__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expression_factory.py ScalarExpressionProxy.in_range   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expression_factory.py ScalarExpressionProxy.in_iterable   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expression_factory.py ScalarExpressionProxy.in_query   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expression_factory.py ScalarExpressionProxy.glob   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expression_factory.py ResolvedScalarExpressionProxy.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expression_factory.py ResolvedScalarExpressionProxy._expression   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expression_factory.py BooleanScalarExpressionProxy.__init__   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/queries/expression_factory.py BooleanScalarExpressionProxy.is_null   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expression_factory.py BooleanScalarExpressionProxy.as_boolean   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expression_factory.py BooleanScalarExpressionProxy._expression   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expression_factory.py TimespanProxy.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expression_factory.py TimespanProxy.begin   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expression_factory.py TimespanProxy.end   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expression_factory.py TimespanProxy.overlaps   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expression_factory.py TimespanProxy._expression   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expression_factory.py RegionProxy.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expression_factory.py RegionProxy.overlaps   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expression_factory.py RegionProxy._expression   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expression_factory.py DimensionElementProxy.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expression_factory.py DimensionElementProxy._expression   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/queries/expression_factory.py DimensionElementProxy.__repr__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expression_factory.py DimensionElementProxy.__getattr__   100% 11 0 0   100% 6 0   100%
python/lsst/daf/butler/queries/expression_factory.py DimensionElementProxy.region   60% 5 2 0   100% 0 0   60%
python/lsst/daf/butler/queries/expression_factory.py DimensionElementProxy.timespan   60% 5 2 0   100% 0 0   60%
python/lsst/daf/butler/queries/expression_factory.py DimensionElementProxy.__dir__   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expression_factory.py DatasetTypeProxy.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expression_factory.py DatasetTypeProxy.__repr__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expression_factory.py DatasetTypeProxy.__getattr__   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/queries/expression_factory.py DatasetTypeProxy.timespan   60% 5 2 0   100% 0 0   60%
python/lsst/daf/butler/queries/expression_factory.py DatasetTypeProxy.__dir__   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expression_factory.py ExpressionFactory.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expression_factory.py ExpressionFactory.__getattr__   60% 5 2 0   100% 0 0   60%
python/lsst/daf/butler/queries/expression_factory.py ExpressionFactory.__getitem__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expression_factory.py ExpressionFactory.not_   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expression_factory.py ExpressionFactory.all   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expression_factory.py ExpressionFactory.any   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expression_factory.py ExpressionFactory.literal   100% 9 0 1   100% 4 0   100%
python/lsst/daf/butler/queries/expression_factory.py ExpressionFactory.unwrap   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expression_factory.py (no function)   100% 99 0 3   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/categorize.py categorizeConstant   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/categorize.py (no function)   100% 7 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/__init__.py (no function)   100% 5 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py _strip_parens   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py Node.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py Node.visit   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py BinaryOp.__init__   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py BinaryOp.visit   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py BinaryOp.__str__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py UnaryOp.__init__   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py UnaryOp.visit   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py UnaryOp.__str__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py StringLiteral.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py StringLiteral.visit   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py StringLiteral.__str__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py TimeLiteral.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py TimeLiteral.visit   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py TimeLiteral.__str__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py NumericLiteral.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py NumericLiteral.visit   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py NumericLiteral.__str__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py UuidLiteral.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py UuidLiteral.visit   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py UuidLiteral.__str__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py Identifier.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py Identifier.visit   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py Identifier.__str__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py BindName.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py BindName.visit   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py BindName.__str__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py RangeLiteral.__init__   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py RangeLiteral.visit   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py RangeLiteral.__str__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py IsIn.__init__   88% 8 1 0   75% 4 1   83%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py IsIn.visit   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py IsIn.__str__   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py Parens.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py Parens.visit   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py Parens.__str__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py TupleNode.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py TupleNode.visit   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py TupleNode.__str__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py FunctionCall.__init__   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py FunctionCall.visit   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py FunctionCall.__str__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py PointNode.__init__   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py PointNode.visit   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py PointNode.__str__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py CircleNode.__init__   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py CircleNode.visit   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py CircleNode.__str__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py BoxNode.__init__   100% 5 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py BoxNode.visit   100% 5 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py BoxNode.__str__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py PolygonNode.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py PolygonNode.visit   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py PolygonNode.__str__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py RegionNode.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py RegionNode.visit   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py RegionNode.__str__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py GlobNode.__init__   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py GlobNode.visit   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py GlobNode.__str__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py function_call   92% 53 4 0   92% 50 4   92%
python/lsst/daf/butler/queries/expressions/parser/exprTree.py (no function)   100% 88 0 3   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/parser.py parse_expression   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/parser.py (no function)   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/parserLex.py ParserLexError.__init__   100% 5 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/parserLex.py ParserLex.make_lexer   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/parserLex.py ParserLex.t_newline   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/parserLex.py ParserLex.t_TIME_LITERAL   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/parserLex.py ParserLex.t_STRING_LITERAL   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/parserLex.py ParserLex.t_RANGE_LITERAL   100% 9 0 0   100% 2 0   100%
python/lsst/daf/butler/queries/expressions/parser/parserLex.py ParserLex.t_NUMERIC_LITERAL   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/parserLex.py ParserLex.t_QUALIFIED_IDENTIFIER   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/parserLex.py ParserLex.t_SIMPLE_IDENTIFIER   100% 6 0 0   100% 2 0   100%
python/lsst/daf/butler/queries/expressions/parser/parserLex.py ParserLex.t_BIND_NAME   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/parserLex.py ParserLex.t_error   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/parserLex.py (no function)   100% 45 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/parserYacc.py YaccProduction.__getitem__   100% 1 0 0   50% 2 1   67%
python/lsst/daf/butler/queries/expressions/parser/parserYacc.py YaccProduction.__setitem__   100% 1 0 0   50% 2 1   67%
python/lsst/daf/butler/queries/expressions/parser/parserYacc.py YaccProduction.__len__   100% 1 0 0   50% 2 1   67%
python/lsst/daf/butler/queries/expressions/parser/parserYacc.py YaccProduction.lineno   100% 1 0 0   50% 2 1   67%
python/lsst/daf/butler/queries/expressions/parser/parserYacc.py YaccProduction.lexpos   100% 1 0 0   50% 2 1   67%
python/lsst/daf/butler/queries/expressions/parser/parserYacc.py _parseTimeString   95% 42 2 0   94% 32 2   95%
python/lsst/daf/butler/queries/expressions/parser/parserYacc.py ParseError.__init__   100% 7 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/parserYacc.py ParseError._posInLine   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/queries/expressions/parser/parserYacc.py ParserEOFError.__init__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/queries/expressions/parser/parserYacc.py ParserYacc.__init__   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/parserYacc.py ParserYacc._parser_factory   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/parserYacc.py ParserYacc.parse   100% 7 0 0   50% 2 1   89%
python/lsst/daf/butler/queries/expressions/parser/parserYacc.py ParserYacc.p_input   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/parserYacc.py ParserYacc.p_empty   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/parserYacc.py ParserYacc.p_expr   100% 5 0 0   100% 4 0   100%
python/lsst/daf/butler/queries/expressions/parser/parserYacc.py ParserYacc.p_bool_primary   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/queries/expressions/parser/parserYacc.py ParserYacc.p_predicate   100% 5 0 0   100% 4 0   100%
python/lsst/daf/butler/queries/expressions/parser/parserYacc.py ParserYacc.p_simple_id   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/parserYacc.py ParserYacc.p_qualified_id   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/parserYacc.py ParserYacc.p_identifier   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/parserYacc.py ParserYacc.p_literal_or_id_list   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/queries/expressions/parser/parserYacc.py ParserYacc.p_bind_name   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/parserYacc.py ParserYacc.p_bit_expr   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/queries/expressions/parser/parserYacc.py ParserYacc.p_simple_expr_lit   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/parserYacc.py ParserYacc.p_simple_expr_unary   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/parserYacc.py ParserYacc.p_simple_expr_paren   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/parserYacc.py ParserYacc.p_simple_expr_tuple   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/parserYacc.py ParserYacc.p_literal_num   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/parserYacc.py ParserYacc.p_literal_num_signed   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/parserYacc.py ParserYacc.p_literal_str   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/parserYacc.py ParserYacc.p_literal_time   100% 5 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/parserYacc.py ParserYacc.p_literal_range   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/parserYacc.py ParserYacc.p_function_call   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/parserYacc.py ParserYacc.p_expr_list   100% 5 0 0   100% 4 0   100%
python/lsst/daf/butler/queries/expressions/parser/parserYacc.py ParserYacc.p_error   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/queries/expressions/parser/parserYacc.py (no function)   98% 80 2 0   100% 0 0   98%
python/lsst/daf/butler/queries/expressions/parser/ply/__init__.py (no function)   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/ply/lex.py LexError.__init__   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/lex.py LexToken.__str__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/lex.py LexToken.__repr__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/lex.py PlyLogger.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/ply/lex.py PlyLogger.critical   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/lex.py PlyLogger.warning   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/lex.py PlyLogger.error   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/lex.py NullLogger.__getattribute__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/lex.py NullLogger.__call__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/lex.py Lexer.__init__   100% 23 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/ply/lex.py Lexer.clone   0% 20 20 0   0% 12 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/lex.py Lexer.writetab   0% 27 27 0   0% 10 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/lex.py Lexer.readtab   0% 28 28 0   0% 12 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/lex.py Lexer.input   83% 6 1 0   50% 2 1   75%
python/lsst/daf/butler/queries/expressions/parser/ply/lex.py Lexer.begin   0% 8 8 0   0% 2 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/lex.py Lexer.push_state   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/lex.py Lexer.pop_state   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/lex.py Lexer.current_state   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/lex.py Lexer.skip   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/lex.py Lexer.token   63% 76 28 0   63% 30 7   63%
python/lsst/daf/butler/queries/expressions/parser/ply/lex.py Lexer.__iter__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/lex.py Lexer.next   0% 4 4 0   0% 2 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/lex.py _get_regex   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/ply/lex.py get_caller_module_dict   0% 5 5 0   0% 2 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/lex.py _funcs_to_names   0% 6 6 0   0% 4 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/lex.py _names_to_funcs   0% 6 6 0   0% 4 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/lex.py _form_master_re   64% 25 9 0   67% 12 2   65%
python/lsst/daf/butler/queries/expressions/parser/ply/lex.py _statetoken   82% 11 2 0   50% 8 4   68%
python/lsst/daf/butler/queries/expressions/parser/ply/lex.py LexerReflect.__init__   100% 8 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/ply/lex.py LexerReflect.get_all   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/ply/lex.py LexerReflect.validate_all   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/ply/lex.py LexerReflect.get_tokens   36% 14 9 0   50% 6 3   40%
python/lsst/daf/butler/queries/expressions/parser/ply/lex.py LexerReflect.validate_tokens   62% 8 3 0   67% 6 2   64%
python/lsst/daf/butler/queries/expressions/parser/ply/lex.py LexerReflect.get_literals   100% 3 0 0   50% 2 1   80%
python/lsst/daf/butler/queries/expressions/parser/ply/lex.py LexerReflect.validate_literals   25% 8 6 0   25% 4 1   25%
python/lsst/daf/butler/queries/expressions/parser/ply/lex.py LexerReflect.get_states   8% 24 22 0   7% 14 1   8%
python/lsst/daf/butler/queries/expressions/parser/ply/lex.py LexerReflect.get_rules   71% 49 14 0   78% 36 6   74%
python/lsst/daf/butler/queries/expressions/parser/ply/lex.py LexerReflect.validate_rules   51% 75 37 0   55% 38 13   52%
python/lsst/daf/butler/queries/expressions/parser/ply/lex.py LexerReflect.validate_module   76% 21 5 0   88% 8 1   79%
python/lsst/daf/butler/queries/expressions/parser/ply/lex.py lex   58% 120 50 0   47% 78 23   54%
python/lsst/daf/butler/queries/expressions/parser/ply/lex.py runmain   0% 21 21 0   0% 8 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/lex.py TOKEN   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/ply/lex.py TOKEN.set_regex   75% 4 1 0   50% 2 1   67%
python/lsst/daf/butler/queries/expressions/parser/ply/lex.py (no function)   100% 65 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py PlyLogger.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py PlyLogger.debug   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py PlyLogger.warning   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py PlyLogger.error   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py NullLogger.__getattribute__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py NullLogger.__call__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py format_result   0% 7 7 0   0% 4 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py format_stack_entry   0% 6 6 0   0% 4 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py errok   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py restart   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py token   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py call_errorfunc   44% 9 5 0   100% 0 0   44%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py YaccSymbol.__str__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py YaccSymbol.__repr__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py YaccProduction.__init__   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py YaccProduction.__getitem__   60% 5 2 0   50% 4 2   56%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py YaccProduction.__setitem__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py YaccProduction.__getslice__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py YaccProduction.__len__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py YaccProduction.lineno   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py YaccProduction.set_lineno   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py YaccProduction.linespan   0% 3 3 0   100% 0 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py YaccProduction.lexpos   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py YaccProduction.set_lexpos   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py YaccProduction.lexspan   0% 3 3 0   100% 0 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py YaccProduction.error   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py LRParser.__init__   100% 6 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py LRParser.errok   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py LRParser.restart   0% 6 6 0   100% 0 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py LRParser.set_defaulted_states   100% 5 0 0   100% 4 0   100%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py LRParser.disable_defaulted_states   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py LRParser.parse   43% 7 4 0   33% 6 2   38%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py LRParser.parsedebug   0% 186 186 0   0% 66 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py LRParser.parseopt   0% 172 172 0   0% 64 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py LRParser.parseopt_notrack   58% 156 65 0   46% 56 10   55%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py Production.__init__   100% 18 0 0   100% 6 0   100%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py Production.__str__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py Production.__repr__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py Production.__len__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py Production.__nonzero__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py Production.__getitem__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py Production.lr_item   0% 12 12 0   0% 2 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py Production.bind   100% 2 0 0   100% 2 0   100%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py MiniProduction.__init__   0% 7 7 0   100% 0 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py MiniProduction.__str__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py MiniProduction.__repr__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py MiniProduction.bind   0% 2 2 0   0% 2 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py LRItem.__init__   100% 9 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py LRItem.__str__   75% 4 1 0   50% 2 1   67%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py LRItem.__repr__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py rightmost_terminal   100% 6 0 0   100% 4 0   100%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py Grammar.__init__   100% 13 0 0   100% 2 0   100%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py Grammar.__len__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py Grammar.__getitem__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py Grammar.set_precedence   67% 6 2 0   50% 4 2   60%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py Grammar.add_production   64% 53 19 0   62% 34 9   63%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py Grammar.set_start   86% 7 1 0   50% 4 2   73%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py Grammar.find_unreachable   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py Grammar.find_unreachable.mark_reachable_from   100% 6 0 0   100% 6 0   100%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py Grammar.infinite_cycles   90% 29 3 0   88% 24 1   89%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py Grammar.undefined_symbols   88% 8 1 0   88% 8 1   88%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py Grammar.unused_terminals   80% 5 1 0   75% 4 1   78%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py Grammar.unused_rules   67% 6 2 0   75% 4 1   70%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py Grammar.unused_precedence   80% 5 1 0   75% 4 1   78%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py Grammar._first   100% 13 0 0   100% 10 0   100%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py Grammar.compute_first   94% 18 1 0   94% 16 1   94%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py Grammar.compute_follow   93% 30 2 0   89% 28 3   91%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py Grammar.build_lritems   91% 23 2 0   100% 6 0   93%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py LRTable.__init__   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py LRTable.read_table   15% 13 11 0   17% 6 1   16%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py LRTable.read_pickle   0% 20 20 0   0% 6 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py LRTable.bind_callables   100% 2 0 0   100% 2 0   100%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py digraph   100% 9 0 0   100% 6 0   100%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py traverse   100% 20 0 0   100% 12 0   100%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py LRGeneratedTable.__init__   91% 22 2 0   50% 4 2   85%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py LRGeneratedTable.lr0_closure   100% 13 0 0   100% 8 0   100%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py LRGeneratedTable.lr0_goto   100% 25 0 0   100% 14 0   100%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py LRGeneratedTable.lr0_items   100% 20 0 0   100% 12 0   100%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py LRGeneratedTable.compute_nullable_nonterminals   100% 15 0 0   100% 10 0   100%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py LRGeneratedTable.find_nonterminal_transitions   100% 9 0 0   100% 10 0   100%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py LRGeneratedTable.dr_relation   100% 12 0 0   90% 10 1   95%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py LRGeneratedTable.reads_relation   90% 10 1 0   83% 6 1   88%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py LRGeneratedTable.compute_lookback_includes   93% 44 3 0   91% 32 1   92%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py LRGeneratedTable.compute_read_sets   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py LRGeneratedTable.compute_follow_sets   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py LRGeneratedTable.add_lookaheads   100% 8 0 0   100% 10 0   100%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py LRGeneratedTable.add_lalr_lookaheads   100% 6 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py LRGeneratedTable.lr_parse_table   81% 127 24 0   73% 78 13   78%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py LRGeneratedTable.write_table   0% 67 67 0   0% 38 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py LRGeneratedTable.pickle_table   0% 16 16 0   0% 4 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py get_caller_module_dict   0% 5 5 0   0% 2 0   0%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py parse_grammar   74% 27 7 0   70% 10 3   73%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py ParserReflect.__init__   90% 10 1 0   50% 2 1   83%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py ParserReflect.get_all   100% 5 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py ParserReflect.validate_all   100% 7 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py ParserReflect.signature   79% 14 3 0   60% 10 4   71%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py ParserReflect.validate_modules   76% 17 4 0   88% 8 1   80%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py ParserReflect.get_start   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py ParserReflect.validate_start   33% 3 2 0   25% 4 1   29%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py ParserReflect.get_error_func   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py ParserReflect.validate_error_func   62% 16 6 0   50% 8 4   58%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py ParserReflect.get_tokens   36% 14 9 0   50% 6 3   40%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py ParserReflect.validate_tokens   56% 9 4 0   67% 6 2   60%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py ParserReflect.get_precedence   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py ParserReflect.validate_precedence   44% 27 15 0   62% 16 6   51%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py ParserReflect.get_pfunctions   100% 10 0 0   83% 6 1   94%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py ParserReflect.validate_pfunctions   53% 43 20 0   64% 28 8   58%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py yacc   41% 199 117 0   39% 114 40   40%
python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py (no function)   99% 155 1 0   50% 2 1   99%
python/lsst/daf/butler/queries/expressions/parser/treeVisitor.py TreeVisitor.visitNumericLiteral   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/treeVisitor.py TreeVisitor.visitStringLiteral   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/treeVisitor.py TreeVisitor.visitUuidLiteral   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/treeVisitor.py TreeVisitor.visitTimeLiteral   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/treeVisitor.py TreeVisitor.visitRangeLiteral   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/treeVisitor.py TreeVisitor.visitIdentifier   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/treeVisitor.py TreeVisitor.visitBind   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/treeVisitor.py TreeVisitor.visitUnaryOp   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/treeVisitor.py TreeVisitor.visitBinaryOp   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/treeVisitor.py TreeVisitor.visitIsIn   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/treeVisitor.py TreeVisitor.visitParens   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/treeVisitor.py TreeVisitor.visitTupleNode   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/treeVisitor.py TreeVisitor.visitFunctionCall   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/queries/expressions/parser/treeVisitor.py TreeVisitor.visitPointNode   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/treeVisitor.py TreeVisitor.visitCircleNode   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/treeVisitor.py TreeVisitor.visitBoxNode   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/treeVisitor.py TreeVisitor.visitPolygonNode   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/treeVisitor.py TreeVisitor.visitRegionNode   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/treeVisitor.py TreeVisitor.visitGlobNode   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/expressions/parser/treeVisitor.py (no function)   100% 44 0 3   100% 0 0   100%
python/lsst/daf/butler/queries/overlaps.py _NaiveDisjointSet.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/overlaps.py _NaiveDisjointSet.merge   80% 15 3 0   70% 10 3   76%
python/lsst/daf/butler/queries/overlaps.py _NaiveDisjointSet.subsets   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/overlaps.py _NaiveDisjointSet.n_subsets   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/overlaps.py CalibrationTemporalEndpoint.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/overlaps.py CalibrationTemporalEndpoint.name   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/queries/overlaps.py CalibrationTemporalEndpoint.topology   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/queries/overlaps.py CalibrationTemporalFamily.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/overlaps.py CalibrationTemporalFamily.choose   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/overlaps.py CalibrationTemporalFamily.make_column_reference   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/overlaps.py OverlapsVisitor.__init__   100% 5 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/overlaps.py OverlapsVisitor.run   100% 9 0 0   100% 4 0   100%
python/lsst/daf/butler/queries/overlaps.py OverlapsVisitor.visit_comparison   100% 8 0 1   100% 6 0   100%
python/lsst/daf/butler/queries/overlaps.py OverlapsVisitor._add_join_operand_connections   100% 5 0 0   100% 4 0   100%
python/lsst/daf/butler/queries/overlaps.py OverlapsVisitor._add_automatic_joins   100% 15 0 0   100% 8 0   100%
python/lsst/daf/butler/queries/overlaps.py OverlapsVisitor.visit_spatial_overlap   90% 10 1 2   83% 6 1   88%
python/lsst/daf/butler/queries/overlaps.py OverlapsVisitor.visit_temporal_overlap   100% 11 0 0   100% 8 0   100%
python/lsst/daf/butler/queries/overlaps.py OverlapsVisitor.visit_spatial_join   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/queries/overlaps.py OverlapsVisitor.visit_spatial_constraint   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/overlaps.py OverlapsVisitor.visit_temporal_dimension_join   50% 4 2 0   50% 2 1   50%
python/lsst/daf/butler/queries/overlaps.py OverlapsVisitor.visit_validity_range_dimension_join   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/overlaps.py OverlapsVisitor.visit_validity_range_join   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/overlaps.py (no function)   100% 41 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/predicate_constraints_summary.py PredicateConstraintsSummary.__init__   100% 5 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/predicate_constraints_summary.py PredicateConstraintsSummary.apply_default_data_id   100% 12 0 0   100% 8 0   100%
python/lsst/daf/butler/queries/predicate_constraints_summary.py _create_data_id_predicate   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/predicate_constraints_summary.py _DataIdExtractionVisitor.__init__   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/predicate_constraints_summary.py _DataIdExtractionVisitor.visit_comparison   100% 20 0 0   100% 14 0   100%
python/lsst/daf/butler/queries/predicate_constraints_summary.py _DataIdExtractionVisitor.visit_binary_expression   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/predicate_constraints_summary.py _DataIdExtractionVisitor.visit_unary_expression   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/predicate_constraints_summary.py _DataIdExtractionVisitor.visit_literal   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/predicate_constraints_summary.py _DataIdExtractionVisitor.visit_dimension_key_reference   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/queries/predicate_constraints_summary.py _DataIdExtractionVisitor.visit_dimension_field_reference   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/queries/predicate_constraints_summary.py _DataIdExtractionVisitor.visit_dataset_field_reference   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/predicate_constraints_summary.py _DataIdExtractionVisitor.visit_reversed   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/queries/predicate_constraints_summary.py (no function)   100% 26 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/result_specs.py ResultSpecBase.validate_tree   100% 18 0 0   100% 14 0   100%
python/lsst/daf/butler/queries/result_specs.py ResultSpecBase.find_first_dataset   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/result_specs.py ResultSpecBase.get_result_columns   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/queries/result_specs.py DataCoordinateResultSpec.get_result_columns   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/queries/result_specs.py DimensionRecordResultSpec.dimensions   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/result_specs.py DimensionRecordResultSpec.get_result_columns   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/queries/result_specs.py DatasetRefResultSpec.find_first_dataset   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/result_specs.py DatasetRefResultSpec.get_result_columns   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/queries/result_specs.py GeneralResultSpec.find_first_dataset   83% 6 1 0   75% 4 1   80%
python/lsst/daf/butler/queries/result_specs.py GeneralResultSpec.get_result_columns   100% 8 0 0   100% 6 0   100%
python/lsst/daf/butler/queries/result_specs.py GeneralResultSpec._validate   85% 13 2 0   86% 14 2   85%
python/lsst/daf/butler/queries/result_specs.py SerializedResultSpec.to_result_spec   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/queries/result_specs.py _add_dimension_records_to_column_set   100% 4 0 0   100% 4 0   100%
python/lsst/daf/butler/queries/result_specs.py (no function)   100% 74 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/__init__.py (no function)   100% 12 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_base.py AnyDatasetType.__str__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/queries/tree/_base.py AnyDatasetType.__repr__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/queries/tree/_base.py is_dataset_field   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_base.py ColumnExpressionBase.column_type   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_base.py ColumnExpressionBase.get_literal_value   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_base.py ColumnExpressionBase.gather_required_columns   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_base.py ColumnExpressionBase.gather_governors   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_base.py ColumnExpressionBase.visit   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_base.py ColumnLiteralBase.get_literal_value   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_base.py ColumnLiteralBase.gather_required_columns   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_base.py ColumnLiteralBase.gather_governors   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_base.py ColumnLiteralBase.column_type   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_base.py ColumnLiteralBase.visit   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_base.py (no function)   100% 49 0 4   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_expression.py UnaryExpression.gather_required_columns   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_expression.py UnaryExpression.gather_governors   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_expression.py UnaryExpression.column_type   100% 5 0 1   100% 2 0   100%
python/lsst/daf/butler/queries/tree/_column_expression.py UnaryExpression.__str__   90% 10 1 0   75% 8 2   83%
python/lsst/daf/butler/queries/tree/_column_expression.py UnaryExpression._validate_types   100% 8 0 0   100% 4 0   100%
python/lsst/daf/butler/queries/tree/_column_expression.py UnaryExpression.visit   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_expression.py BinaryExpression.gather_required_columns   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_expression.py BinaryExpression.gather_governors   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_expression.py BinaryExpression.column_type   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_expression.py BinaryExpression.__str__   100% 7 0 0   100% 4 0   100%
python/lsst/daf/butler/queries/tree/_column_expression.py BinaryExpression._validate_types   100% 10 0 0   100% 6 0   100%
python/lsst/daf/butler/queries/tree/_column_expression.py BinaryExpression.visit   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_expression.py Reversed.gather_required_columns   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_expression.py Reversed.gather_governors   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/queries/tree/_column_expression.py Reversed.column_type   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_expression.py Reversed.__str__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_expression.py Reversed.visit   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_expression.py validate_order_expression   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/queries/tree/_column_expression.py is_one_timespan_and_one_datetime   100% 5 0 0   100% 4 0   100%
python/lsst/daf/butler/queries/tree/_column_expression.py is_one_datetime_and_one_ingest_date   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_expression.py is_one_timespan_and_one_ingest_date   100% 5 0 0   100% 4 0   100%
python/lsst/daf/butler/queries/tree/_column_expression.py is_numeric   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_expression.py (no function)   100% 67 0 2   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_literal.py IntColumnLiteral.from_value   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_literal.py IntColumnLiteral.__str__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_literal.py StringColumnLiteral.from_value   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_literal.py StringColumnLiteral.__str__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_literal.py FloatColumnLiteral.from_value   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_literal.py FloatColumnLiteral.__str__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_literal.py HashColumnLiteral.value   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_literal.py HashColumnLiteral.from_value   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_literal.py HashColumnLiteral.__str__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_literal.py UUIDColumnLiteral.from_value   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_literal.py UUIDColumnLiteral.__str__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_literal.py DateTimeColumnLiteral.value   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_literal.py DateTimeColumnLiteral.from_value   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_literal.py DateTimeColumnLiteral.__str__   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_literal.py TimespanColumnLiteral.value   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_literal.py TimespanColumnLiteral.from_value   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_literal.py TimespanColumnLiteral.__str__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_literal.py RegionColumnLiteral.value   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_literal.py RegionColumnLiteral.from_value   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_literal.py RegionColumnLiteral.__str__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_literal.py make_column_literal   100% 32 0 0   100% 26 0   100%
python/lsst/daf/butler/queries/tree/_column_literal.py _make_region_literal_from_lonlat   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_literal.py (no function)   100% 94 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_reference.py DimensionKeyReference.gather_required_columns   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_reference.py DimensionKeyReference.gather_governors   100% 2 0 0   100% 2 0   100%
python/lsst/daf/butler/queries/tree/_column_reference.py DimensionKeyReference.column_type   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_reference.py DimensionKeyReference.__str__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_reference.py DimensionKeyReference.visit   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_reference.py DimensionFieldReference.gather_required_columns   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_reference.py DimensionFieldReference.gather_governors   100% 2 0 0   100% 2 0   100%
python/lsst/daf/butler/queries/tree/_column_reference.py DimensionFieldReference.column_type   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_reference.py DimensionFieldReference.__str__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_reference.py DimensionFieldReference.visit   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_reference.py DimensionFieldReference._validate_field   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/queries/tree/_column_reference.py DatasetFieldReference.gather_required_columns   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_reference.py DatasetFieldReference.gather_governors   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_reference.py DatasetFieldReference.column_type   100% 11 0 1   100% 8 0   100%
python/lsst/daf/butler/queries/tree/_column_reference.py DatasetFieldReference.__str__   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/queries/tree/_column_reference.py DatasetFieldReference.visit   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_reference.py (no function)   100% 52 0 3   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_set.py ColumnSet.__init__   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_set.py ColumnSet.dimensions   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_set.py ColumnSet.dimension_fields   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_set.py ColumnSet.dataset_fields   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_set.py ColumnSet.__bool__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_set.py ColumnSet.__eq__   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/queries/tree/_column_set.py ColumnSet.__str__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_set.py ColumnSet.issubset   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_set.py ColumnSet.issuperset   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_set.py ColumnSet.isdisjoint   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_set.py ColumnSet.copy   100% 6 0 0   100% 4 0   100%
python/lsst/daf/butler/queries/tree/_column_set.py ColumnSet.update_dimensions   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/queries/tree/_column_set.py ColumnSet.update   100% 6 0 0   100% 4 0   100%
python/lsst/daf/butler/queries/tree/_column_set.py ColumnSet.drop_dimension_keys   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_set.py ColumnSet.drop_implied_dimension_keys   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_set.py ColumnSet.restore_dimension_keys   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_set.py ColumnSet.__iter__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_set.py ColumnSet.get_column_order   100% 16 0 0   100% 14 0   100%
python/lsst/daf/butler/queries/tree/_column_set.py ColumnSet.is_timespan   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_set.py ColumnSet.get_qualified_name   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_set.py ColumnSet.get_column_spec   100% 18 0 1   100% 12 0   100%
python/lsst/daf/butler/queries/tree/_column_set.py ColumnSet._get_dimension_keys   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/queries/tree/_column_set.py ResultColumn.__str__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_set.py ColumnOrder.__init__   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_set.py ColumnOrder.columns   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_set.py ColumnOrder.dimension_key_names   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_set.py ColumnOrder.extract_dimension_key_columns   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_column_set.py (no function)   100% 47 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py PredicateLeafBase.gather_required_columns   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py PredicateLeafBase.gather_governors   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py PredicateLeafBase.invert   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py PredicateLeafBase.visit   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py Predicate.column_type   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py Predicate.from_bool   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py Predicate.from_bool_expression   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/queries/tree/_predicate.py Predicate.compare   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py Predicate.is_null   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py Predicate.in_container   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py Predicate.in_range   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py Predicate.in_query   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py Predicate.gather_required_columns   100% 3 0 0   100% 4 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py Predicate.gather_governors   100% 3 0 0   100% 4 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py Predicate.logical_and   100% 6 0 0   100% 4 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py Predicate.logical_or   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py Predicate.logical_not   100% 7 0 0   100% 4 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py Predicate.__str__   100% 15 0 0   100% 10 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py Predicate.visit   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py Predicate._from_leaf   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py Predicate._from_or_group   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py Predicate._impl_and   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py Predicate._impl_or   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py LogicalNot.gather_required_columns   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py LogicalNot.gather_governors   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py LogicalNot.__str__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py LogicalNot.invert   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py LogicalNot.visit   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py BooleanWrapper.gather_required_columns   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py BooleanWrapper.gather_governors   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py BooleanWrapper.__str__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/queries/tree/_predicate.py BooleanWrapper.visit   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py IsNull.gather_required_columns   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py IsNull.gather_governors   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py IsNull.__str__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py IsNull.visit   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py Comparison.gather_required_columns   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py Comparison.gather_governors   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py Comparison.__str__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py Comparison.visit   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py Comparison._validate_column_types   100% 21 0 0   100% 16 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py InContainer.gather_required_columns   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py InContainer.gather_governors   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py InContainer.__str__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py InContainer.visit   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py InContainer._validate   100% 5 0 0   100% 4 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py InRange.gather_required_columns   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py InRange.gather_governors   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py InRange.__str__   100% 4 0 0   50% 2 1   83%
python/lsst/daf/butler/queries/tree/_predicate.py InRange.visit   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py InRange._validate   100% 7 0 0   100% 6 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py InQuery.gather_required_columns   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py InQuery.gather_governors   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py InQuery.__str__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py InQuery.visit   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py InQuery._validate_column_types   100% 12 0 0   100% 8 0   100%
python/lsst/daf/butler/queries/tree/_predicate.py (no function)   100% 147 0 4   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_query_tree.py make_identity_query_tree   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_query_tree.py QueryTree.iter_all_dataset_searches   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/queries/tree/_query_tree.py QueryTree.get_joined_dimension_groups   86% 7 1 0   75% 4 1   82%
python/lsst/daf/butler/queries/tree/_query_tree.py QueryTree.join_dimensions   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_query_tree.py QueryTree.join_data_coordinate_upload   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_query_tree.py QueryTree.join_materialization   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/tree/_query_tree.py QueryTree.join_dataset   100% 6 0 0   100% 2 0   100%
python/lsst/daf/butler/queries/tree/_query_tree.py QueryTree.join_any_dataset   0% 4 4 0   0% 2 0   0%
python/lsst/daf/butler/queries/tree/_query_tree.py QueryTree.where   91% 11 1 0   83% 6 1   88%
python/lsst/daf/butler/queries/tree/_query_tree.py QueryTree._validate_join_operands   100% 4 0 0   75% 4 1   88%
python/lsst/daf/butler/queries/tree/_query_tree.py QueryTree._validate_required_columns   100% 7 0 0   100% 4 0   100%
python/lsst/daf/butler/queries/tree/_query_tree.py SerializedQueryTree.to_query_tree   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/queries/tree/_query_tree.py (no function)   100% 51 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/visitors.py ColumnExpressionVisitor.visit_literal   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/queries/visitors.py ColumnExpressionVisitor.visit_dimension_key_reference   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/queries/visitors.py ColumnExpressionVisitor.visit_dimension_field_reference   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/queries/visitors.py ColumnExpressionVisitor.visit_dataset_field_reference   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/queries/visitors.py ColumnExpressionVisitor.visit_unary_expression   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/queries/visitors.py ColumnExpressionVisitor.visit_binary_expression   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/queries/visitors.py ColumnExpressionVisitor.visit_reversed   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/queries/visitors.py PredicateVisitor.visit_boolean_wrapper   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/queries/visitors.py PredicateVisitor.visit_comparison   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/queries/visitors.py PredicateVisitor.visit_is_null   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/queries/visitors.py PredicateVisitor.visit_in_container   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/queries/visitors.py PredicateVisitor.visit_in_range   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/queries/visitors.py PredicateVisitor.visit_in_query_tree   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/queries/visitors.py PredicateVisitor.apply_logical_not   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/queries/visitors.py PredicateVisitor.apply_logical_or   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/queries/visitors.py PredicateVisitor.apply_logical_and   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/queries/visitors.py PredicateVisitor._visit_logical_not   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/visitors.py PredicateVisitor._visit_logical_or   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/queries/visitors.py PredicateVisitor._visit_logical_and   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/queries/visitors.py SimplePredicateVisitor.visit_boolean_wrapper   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/visitors.py SimplePredicateVisitor.visit_comparison   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/queries/visitors.py SimplePredicateVisitor.visit_is_null   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/visitors.py SimplePredicateVisitor.visit_in_container   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/visitors.py SimplePredicateVisitor.visit_in_range   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/visitors.py SimplePredicateVisitor.visit_in_query_tree   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/queries/visitors.py SimplePredicateVisitor.apply_logical_not   50% 4 2 0   50% 2 1   50%
python/lsst/daf/butler/queries/visitors.py SimplePredicateVisitor.apply_logical_or   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/queries/visitors.py SimplePredicateVisitor.apply_logical_and   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/queries/visitors.py (no function)   100% 64 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/__init__.py (no function)   100% 10 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/_caching_context.py CachingContext.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/_caching_context.py CachingContext.enable_collection_record_cache   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/_caching_context.py CachingContext.enable_collection_summary_cache   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/_caching_context.py CachingContext.collection_records   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/_caching_context.py CachingContext.collection_summaries   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/_caching_context.py _CacheToggle.__init__   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/_caching_context.py _CacheToggle.enable   100% 8 0 0   100% 4 0   100%
python/lsst/daf/butler/registry/_caching_context.py (no function)   100% 20 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/_collection_record_cache.py CollectionRecordCache.__init__   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/_collection_record_cache.py CollectionRecordCache.full   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/_collection_record_cache.py CollectionRecordCache.add   83% 6 1 0   75% 4 1   80%
python/lsst/daf/butler/registry/_collection_record_cache.py CollectionRecordCache.set   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/_collection_record_cache.py CollectionRecordCache.clear   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/_collection_record_cache.py CollectionRecordCache.discard   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/registry/_collection_record_cache.py CollectionRecordCache.get_by_name   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/_collection_record_cache.py CollectionRecordCache.get_by_key   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/registry/_collection_record_cache.py CollectionRecordCache.records   0% 3 3 0   0% 2 0   0%
python/lsst/daf/butler/registry/_collection_record_cache.py (no function)   100% 15 0 2   100% 0 0   100%
python/lsst/daf/butler/registry/_collection_summary.py CollectionSummary.copy   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/_collection_summary.py CollectionSummary.add_datasets_generator   100% 5 0 0   100% 4 0   100%
python/lsst/daf/butler/registry/_collection_summary.py CollectionSummary.add_datasets   100% 2 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/_collection_summary.py CollectionSummary.add_data_ids_generator   100% 5 0 0   100% 4 0   100%
python/lsst/daf/butler/registry/_collection_summary.py CollectionSummary.add_data_ids   100% 2 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/_collection_summary.py CollectionSummary.update   100% 4 0 0   100% 4 0   100%
python/lsst/daf/butler/registry/_collection_summary.py CollectionSummary.union   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/_collection_summary.py CollectionSummary.is_compatible_with   0% 13 13 0   0% 10 0   0%
python/lsst/daf/butler/registry/_collection_summary.py CollectionSummary.to_simple   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/registry/_collection_summary.py CollectionSummary.from_simple   0% 4 4 0   100% 0 0   0%
python/lsst/daf/butler/registry/_collection_summary.py _copy_governors   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/_collection_summary.py (no function)   100% 31 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/_collection_summary_cache.py CollectionSummaryCache.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/_collection_summary_cache.py CollectionSummaryCache.update   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/_collection_summary_cache.py CollectionSummaryCache.find_summaries   100% 7 0 0   100% 4 0   100%
python/lsst/daf/butler/registry/_collection_summary_cache.py (no function)   100% 9 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/_config.py RegistryConfig.getDialect   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/_config.py RegistryConfig.getDatabaseClass   75% 8 2 0   50% 4 2   67%
python/lsst/daf/butler/registry/_config.py RegistryConfig.makeDefaultDatabaseUri   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/_config.py RegistryConfig.replaceRoot   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/_config.py RegistryConfig.connectionString   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/_config.py RegistryConfig.areTemporaryTablesAllowed   86% 7 1 0   75% 4 1   82%
python/lsst/daf/butler/registry/_config.py (no function)   100% 20 0 3   100% 0 0   100%
python/lsst/daf/butler/registry/_defaults.py RegistryDefaults.__init__   100% 10 0 0   100% 4 0   100%
python/lsst/daf/butler/registry/_defaults.py RegistryDefaults.from_data_id   0% 4 4 0   100% 0 0   0%
python/lsst/daf/butler/registry/_defaults.py RegistryDefaults.from_butler_instance_options   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/_defaults.py RegistryDefaults.clone   100% 13 0 0   100% 12 0   100%
python/lsst/daf/butler/registry/_defaults.py RegistryDefaults.__repr__   100% 7 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/_defaults.py RegistryDefaults.finish   95% 19 1 0   93% 14 1   94%
python/lsst/daf/butler/registry/_defaults.py (no function)   100% 28 0 3   100% 0 0   100%
python/lsst/daf/butler/registry/_exceptions.py (no function)   100% 13 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/_registry.py Registry.isWriteable   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/_registry.py Registry.dimensions   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/_registry.py Registry.defaults   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/_registry.py Registry.defaults   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/_registry.py Registry.refresh   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/_registry.py Registry.refresh_collection_summaries   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/_registry.py Registry.caching_context   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/_registry.py Registry.transaction   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/_registry.py Registry.resetConnectionPool   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/registry/_registry.py Registry.registerCollection   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/_registry.py Registry.getCollectionType   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/_registry.py Registry.registerRun   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/_registry.py Registry.removeCollection   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/_registry.py Registry.getCollectionChain   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/_registry.py Registry.setCollectionChain   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/_registry.py Registry.getCollectionParentChains   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/_registry.py Registry.getCollectionDocumentation   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/_registry.py Registry.setCollectionDocumentation   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/_registry.py Registry.getCollectionSummary   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/_registry.py Registry.registerDatasetType   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/_registry.py Registry.removeDatasetType   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/_registry.py Registry.getDatasetType   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/_registry.py Registry.supportsIdGenerationMode   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/_registry.py Registry.findDataset   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/_registry.py Registry.insertDatasets   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/_registry.py Registry._importDatasets   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/_registry.py Registry.getDataset   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/_registry.py Registry._fetch_run_dataset_ids   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/_registry.py Registry.removeDatasets   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/_registry.py Registry.associate   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/_registry.py Registry.disassociate   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/_registry.py Registry.certify   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/_registry.py Registry.decertify   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/_registry.py Registry.getDatasetLocations   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/_registry.py Registry.expandDataId   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/_registry.py Registry.insertDimensionData   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/_registry.py Registry.syncDimensionData   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/_registry.py Registry.queryDatasetTypes   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/_registry.py Registry.queryCollections   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/_registry.py Registry.queryDatasets   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/_registry.py Registry.queryDataIds   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/_registry.py Registry.queryDimensionRecords   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/_registry.py Registry.queryDatasetAssociations   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/_registry.py Registry.obsCoreTableManager   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/registry/_registry.py Registry.storageClasses   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/_registry.py (no function)   100% 116 0 2   100% 0 0   100%
python/lsst/daf/butler/registry/_registry_base.py RegistryBase.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/_registry_base.py RegistryBase.queryDatasets   100% 22 0 0   100% 14 0   100%
python/lsst/daf/butler/registry/_registry_base.py RegistryBase.queryDataIds   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/_registry_base.py RegistryBase.queryDimensionRecords   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/_registry_base.py RegistryBase._convert_common_query_arguments   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/_registry_base.py RegistryBase.queryDatasetAssociations   100% 8 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/_registry_base.py RegistryBase._resolve_dataset_types   100% 8 0 0   100% 6 0   100%
python/lsst/daf/butler/registry/_registry_base.py (no function)   100% 26 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/_registry_factory.py _RegistryFactory.__init__   78% 9 2 0   67% 6 2   73%
python/lsst/daf/butler/registry/_registry_factory.py _RegistryFactory.create_from_config   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/_registry_factory.py _RegistryFactory.from_config   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/_registry_factory.py (no function)   100% 13 0 2   100% 0 0   100%
python/lsst/daf/butler/registry/attributes.py DefaultButlerAttributeManager.__init__   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/attributes.py DefaultButlerAttributeManager.clone   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/attributes.py DefaultButlerAttributeManager.initialize   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/attributes.py DefaultButlerAttributeManager.get   100% 6 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/attributes.py DefaultButlerAttributeManager.set   100% 8 0 0   100% 4 0   100%
python/lsst/daf/butler/registry/attributes.py DefaultButlerAttributeManager.delete   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/attributes.py DefaultButlerAttributeManager.items   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/attributes.py DefaultButlerAttributeManager.empty   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/attributes.py DefaultButlerAttributeManager.currentVersions   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/attributes.py (no function)   100% 22 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/bridge/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/bridge/ephemeral.py EphemeralDatastoreRegistryBridge.__init__   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/bridge/ephemeral.py EphemeralDatastoreRegistryBridge.insert   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/bridge/ephemeral.py EphemeralDatastoreRegistryBridge.ensure   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/bridge/ephemeral.py EphemeralDatastoreRegistryBridge.forget   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/bridge/ephemeral.py EphemeralDatastoreRegistryBridge._rollbackMoveToTrash   0% 2 2 0   0% 2 0   0%
python/lsst/daf/butler/registry/bridge/ephemeral.py EphemeralDatastoreRegistryBridge.moveToTrash   80% 5 1 0   50% 2 1   71%
python/lsst/daf/butler/registry/bridge/ephemeral.py EphemeralDatastoreRegistryBridge.check   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/bridge/ephemeral.py EphemeralDatastoreRegistryBridge.__contains__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/bridge/ephemeral.py EphemeralDatastoreRegistryBridge.emptyTrash   88% 16 2 0   70% 10 3   81%
python/lsst/daf/butler/registry/bridge/ephemeral.py (no function)   100% 18 0 3   100% 0 0   100%
python/lsst/daf/butler/registry/bridge/monolithic.py _makeTableSpecs   100% 7 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/bridge/monolithic.py MonolithicDatastoreRegistryBridge.__init__   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/bridge/monolithic.py MonolithicDatastoreRegistryBridge._refsToRows   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/bridge/monolithic.py MonolithicDatastoreRegistryBridge.ensure   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/bridge/monolithic.py MonolithicDatastoreRegistryBridge.insert   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/bridge/monolithic.py MonolithicDatastoreRegistryBridge.forget   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/bridge/monolithic.py MonolithicDatastoreRegistryBridge.moveToTrash   100% 9 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/bridge/monolithic.py MonolithicDatastoreRegistryBridge.check   100% 8 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/bridge/monolithic.py MonolithicDatastoreRegistryBridge.emptyTrash   93% 28 2 0   75% 12 3   88%
python/lsst/daf/butler/registry/bridge/monolithic.py MonolithicDatastoreRegistryBridge.emptyTrash.join_records   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/bridge/monolithic.py MonolithicDatastoreRegistryBridgeManager.__init__   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/bridge/monolithic.py MonolithicDatastoreRegistryBridgeManager.clone   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/bridge/monolithic.py MonolithicDatastoreRegistryBridgeManager.initialize   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/bridge/monolithic.py MonolithicDatastoreRegistryBridgeManager.refresh   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/registry/bridge/monolithic.py MonolithicDatastoreRegistryBridgeManager.register   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/registry/bridge/monolithic.py MonolithicDatastoreRegistryBridgeManager.findDatastores   0% 8 8 0   0% 6 0   0%
python/lsst/daf/butler/registry/bridge/monolithic.py MonolithicDatastoreRegistryBridgeManager.currentVersions   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/bridge/monolithic.py (no function)   100% 37 0 4   100% 0 0   100%
python/lsst/daf/butler/registry/collections/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/collections/_base.py _makeCollectionForeignKey   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/collections/_base.py makeRunTableSpec   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/collections/_base.py makeCollectionChainTableSpec   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/collections/_base.py DefaultCollectionManager.__init__   100% 5 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/collections/_base.py DefaultCollectionManager.refresh   50% 2 1 0   50% 2 1   50%
python/lsst/daf/butler/registry/collections/_base.py DefaultCollectionManager._fetch_all   89% 9 1 0   88% 8 1   88%
python/lsst/daf/butler/registry/collections/_base.py DefaultCollectionManager.register   100% 18 0 0   100% 6 0   100%
python/lsst/daf/butler/registry/collections/_base.py DefaultCollectionManager.remove   80% 5 1 0   50% 2 1   71%
python/lsst/daf/butler/registry/collections/_base.py DefaultCollectionManager.find   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/collections/_base.py DefaultCollectionManager._find_many   96% 25 1 0   94% 16 1   95%
python/lsst/daf/butler/registry/collections/_base.py DefaultCollectionManager._find_many.check_cache   100% 8 0 0   100% 6 0   100%
python/lsst/daf/butler/registry/collections/_base.py DefaultCollectionManager._find_many.order   100% 5 0 0   100% 4 0   100%
python/lsst/daf/butler/registry/collections/_base.py DefaultCollectionManager.__getitem__   56% 9 4 0   38% 8 3   47%
python/lsst/daf/butler/registry/collections/_base.py DefaultCollectionManager.resolve_wildcard   100% 28 0 0   96% 26 1   98%
python/lsst/daf/butler/registry/collections/_base.py DefaultCollectionManager.resolve_wildcard.filter_types   100% 4 0 0   100% 6 0   100%
python/lsst/daf/butler/registry/collections/_base.py DefaultCollectionManager.getDocumentation   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/collections/_base.py DefaultCollectionManager.get_docs   100% 9 0 0   100% 4 0   100%
python/lsst/daf/butler/registry/collections/_base.py DefaultCollectionManager.setDocumentation   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/collections/_base.py DefaultCollectionManager._addCachedRecord   100% 4 0 0   100% 4 0   100%
python/lsst/daf/butler/registry/collections/_base.py DefaultCollectionManager._removeCachedRecord   50% 2 1 0   50% 2 1   50%
python/lsst/daf/butler/registry/collections/_base.py DefaultCollectionManager._getByName   100% 7 0 0   100% 6 0   100%
python/lsst/daf/butler/registry/collections/_base.py DefaultCollectionManager._fetch_by_name   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/collections/_base.py DefaultCollectionManager._fetch_by_key   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/collections/_base.py DefaultCollectionManager.update_chain   100% 7 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/collections/_base.py DefaultCollectionManager.prepend_collection_chain   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/collections/_base.py DefaultCollectionManager.extend_collection_chain   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/collections/_base.py DefaultCollectionManager._add_to_collection_chain   100% 5 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/collections/_base.py DefaultCollectionManager.remove_from_collection_chain   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/collections/_base.py DefaultCollectionManager._modify_collection_chain   100% 9 0 0   100% 4 0   100%
python/lsst/daf/butler/registry/collections/_base.py DefaultCollectionManager._sanity_check_collection_cycles   100% 3 0 0   100% 4 0   100%
python/lsst/daf/butler/registry/collections/_base.py DefaultCollectionManager._insert_collection_chain_rows   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/collections/_base.py DefaultCollectionManager._remove_collection_chain_rows   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/collections/_base.py DefaultCollectionManager._find_prepend_position   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/collections/_base.py DefaultCollectionManager._find_extend_position   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/collections/_base.py DefaultCollectionManager._find_position_in_collection_chain   100% 12 0 0   83% 6 1   94%
python/lsst/daf/butler/registry/collections/_base.py DefaultCollectionManager._find_and_lock_collection_chain   100% 12 0 0   100% 4 0   100%
python/lsst/daf/butler/registry/collections/_base.py DefaultCollectionManager._select_pkey_by_name   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/collections/_base.py DefaultCollectionManager._query_recursive   100% 15 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/collections/_base.py (no function)   100% 65 0 3   100% 0 0   100%
python/lsst/daf/butler/registry/collections/nameKey.py _makeTableSpecs   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/collections/nameKey.py NameKeyCollectionManager.initialize   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/collections/nameKey.py NameKeyCollectionManager.clone   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/collections/nameKey.py NameKeyCollectionManager.getCollectionForeignKeyName   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/collections/nameKey.py NameKeyCollectionManager.getRunForeignKeyName   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/collections/nameKey.py NameKeyCollectionManager.addCollectionForeignKey   100% 6 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/collections/nameKey.py NameKeyCollectionManager.addRunForeignKey   100% 6 0 0   50% 2 1   88%
python/lsst/daf/butler/registry/collections/nameKey.py NameKeyCollectionManager.getParentChains   100% 5 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/collections/nameKey.py NameKeyCollectionManager.lookup_name_sql   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/collections/nameKey.py NameKeyCollectionManager.join_collections_sql   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/collections/nameKey.py NameKeyCollectionManager._fetch_by_name   100% 7 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/collections/nameKey.py NameKeyCollectionManager._fetch_by_key   100% 23 0 0   100% 4 0   100%
python/lsst/daf/butler/registry/collections/nameKey.py NameKeyCollectionManager._rows_to_records   100% 14 0 0   100% 6 0   100%
python/lsst/daf/butler/registry/collections/nameKey.py NameKeyCollectionManager._rows_to_chains   100% 10 0 0   100% 6 0   100%
python/lsst/daf/butler/registry/collections/nameKey.py NameKeyCollectionManager._select_pkey_by_name   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/collections/nameKey.py NameKeyCollectionManager.currentVersions   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/collections/nameKey.py (no function)   100% 38 0 3   100% 0 0   100%
python/lsst/daf/butler/registry/collections/synthIntKey.py _makeTableSpecs   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/collections/synthIntKey.py SynthIntKeyCollectionManager.initialize   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/collections/synthIntKey.py SynthIntKeyCollectionManager.clone   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/collections/synthIntKey.py SynthIntKeyCollectionManager.getCollectionForeignKeyName   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/collections/synthIntKey.py SynthIntKeyCollectionManager.getRunForeignKeyName   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/collections/synthIntKey.py SynthIntKeyCollectionManager.addCollectionForeignKey   100% 6 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/collections/synthIntKey.py SynthIntKeyCollectionManager.addRunForeignKey   100% 6 0 0   50% 2 1   88%
python/lsst/daf/butler/registry/collections/synthIntKey.py SynthIntKeyCollectionManager.getParentChains   100% 6 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/collections/synthIntKey.py SynthIntKeyCollectionManager.lookup_name_sql   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/collections/synthIntKey.py SynthIntKeyCollectionManager.join_collections_sql   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/collections/synthIntKey.py SynthIntKeyCollectionManager._fetch_by_name   100% 8 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/collections/synthIntKey.py SynthIntKeyCollectionManager._fetch_by_key   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/collections/synthIntKey.py SynthIntKeyCollectionManager._fetch   100% 24 0 0   100% 4 0   100%
python/lsst/daf/butler/registry/collections/synthIntKey.py SynthIntKeyCollectionManager._rows_to_records   100% 15 0 0   100% 6 0   100%
python/lsst/daf/butler/registry/collections/synthIntKey.py SynthIntKeyCollectionManager._rows_to_chains   100% 11 0 0   100% 6 0   100%
python/lsst/daf/butler/registry/collections/synthIntKey.py SynthIntKeyCollectionManager._select_pkey_by_name   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/collections/synthIntKey.py SynthIntKeyCollectionManager.currentVersions   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/collections/synthIntKey.py (no function)   100% 39 0 3   100% 0 0   100%
python/lsst/daf/butler/registry/connectionString.py ConnectionStringFactory.fromConfig   88% 17 2 0   88% 8 1   88%
python/lsst/daf/butler/registry/connectionString.py (no function)   100% 9 0 2   100% 0 0   100%
python/lsst/daf/butler/registry/databases/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/databases/postgresql.py PostgresqlDatabase.__init__   0% 14 14 0   0% 4 0   0%
python/lsst/daf/butler/registry/databases/postgresql.py PostgresqlDatabase._init   0% 4 4 0   100% 0 0   0%
python/lsst/daf/butler/registry/databases/postgresql.py PostgresqlDatabase.clone   0% 3 3 0   100% 0 0   0%
python/lsst/daf/butler/registry/databases/postgresql.py PostgresqlDatabase.makeEngine   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/registry/databases/postgresql.py PostgresqlDatabase.fromEngine   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/registry/databases/postgresql.py PostgresqlDatabase._transaction   0% 8 8 0   0% 4 0   0%
python/lsst/daf/butler/registry/databases/postgresql.py PostgresqlDatabase.temporary_table   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/registry/databases/postgresql.py PostgresqlDatabase._lockTables   0% 2 2 0   0% 2 0   0%
python/lsst/daf/butler/registry/databases/postgresql.py PostgresqlDatabase.isWriteable   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/registry/databases/postgresql.py PostgresqlDatabase.__str__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/registry/databases/postgresql.py PostgresqlDatabase.shrinkDatabaseEntityName   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/registry/databases/postgresql.py PostgresqlDatabase.expandDatabaseEntityName   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/registry/databases/postgresql.py PostgresqlDatabase._convertExclusionConstraintSpec   0% 11 11 0   0% 6 0   0%
python/lsst/daf/butler/registry/databases/postgresql.py PostgresqlDatabase._make_temporary_table   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/registry/databases/postgresql.py PostgresqlDatabase.getTimespanRepresentation   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/registry/databases/postgresql.py PostgresqlDatabase.replace   0% 12 12 0   0% 4 0   0%
python/lsst/daf/butler/registry/databases/postgresql.py PostgresqlDatabase.ensure   0% 9 9 0   0% 4 0   0%
python/lsst/daf/butler/registry/databases/postgresql.py PostgresqlDatabase.constant_rows   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/registry/databases/postgresql.py PostgresqlDatabase.has_distinct_on   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/registry/databases/postgresql.py PostgresqlDatabase.has_any_aggregate   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/registry/databases/postgresql.py PostgresqlDatabase.apply_any_aggregate   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/registry/databases/postgresql.py PostgresqlDatabase.glob_expression   0% 5 5 0   0% 2 0   0%
python/lsst/daf/butler/registry/databases/postgresql.py PostgresqlDatabase.glob_expression._escape   0% 22 22 0   0% 16 0   0%
python/lsst/daf/butler/registry/databases/postgresql.py _RangeTimespanType.process_bind_param   0% 12 12 0   0% 6 0   0%
python/lsst/daf/butler/registry/databases/postgresql.py _RangeTimespanType.process_result_value   0% 8 8 0   0% 4 0   0%
python/lsst/daf/butler/registry/databases/postgresql.py _RangeTimespanRepresentation.__init__   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/registry/databases/postgresql.py _RangeTimespanRepresentation.makeFieldSpecs   0% 3 3 0   0% 2 0   0%
python/lsst/daf/butler/registry/databases/postgresql.py _RangeTimespanRepresentation.getFieldNames   0% 3 3 0   0% 2 0   0%
python/lsst/daf/butler/registry/databases/postgresql.py _RangeTimespanRepresentation.update   0% 6 6 0   0% 4 0   0%
python/lsst/daf/butler/registry/databases/postgresql.py _RangeTimespanRepresentation.extract   0% 3 3 0   0% 2 0   0%
python/lsst/daf/butler/registry/databases/postgresql.py _RangeTimespanRepresentation.fromLiteral   0% 3 3 0   0% 2 0   0%
python/lsst/daf/butler/registry/databases/postgresql.py _RangeTimespanRepresentation.from_columns   0% 3 3 0   0% 2 0   0%
python/lsst/daf/butler/registry/databases/postgresql.py _RangeTimespanRepresentation.name   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/registry/databases/postgresql.py _RangeTimespanRepresentation.isNull   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/registry/databases/postgresql.py _RangeTimespanRepresentation.isEmpty   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/registry/databases/postgresql.py _RangeTimespanRepresentation.__lt__   0% 3 3 0   0% 2 0   0%
python/lsst/daf/butler/registry/databases/postgresql.py _RangeTimespanRepresentation.__gt__   0% 3 3 0   0% 2 0   0%
python/lsst/daf/butler/registry/databases/postgresql.py _RangeTimespanRepresentation.overlaps   0% 3 3 0   0% 2 0   0%
python/lsst/daf/butler/registry/databases/postgresql.py _RangeTimespanRepresentation.contains   0% 3 3 0   0% 2 0   0%
python/lsst/daf/butler/registry/databases/postgresql.py _RangeTimespanRepresentation.lower   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/registry/databases/postgresql.py _RangeTimespanRepresentation.upper   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/registry/databases/postgresql.py _RangeTimespanRepresentation.flatten   0% 3 3 0   0% 2 0   0%
python/lsst/daf/butler/registry/databases/postgresql.py _RangeTimespanRepresentation.apply_any_aggregate   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/registry/databases/postgresql.py get_postgres_server_version   0% 5 5 0   0% 2 0   0%
python/lsst/daf/butler/registry/databases/postgresql.py (no function)   100% 79 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/databases/sqlite.py _onSqlite3Connect   100% 5 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/databases/sqlite.py SqliteDatabase.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/databases/sqlite.py SqliteDatabase._init   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/databases/sqlite.py SqliteDatabase.clone   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/databases/sqlite.py SqliteDatabase.makeDefaultUri   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/databases/sqlite.py SqliteDatabase.makeEngine   100% 27 0 2   100% 12 0   100%
python/lsst/daf/butler/registry/databases/sqlite.py SqliteDatabase.makeEngine.creator   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/databases/sqlite.py SqliteDatabase.makeEngine._onSqlite3Begin   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/databases/sqlite.py SqliteDatabase.fromEngine   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/databases/sqlite.py SqliteDatabase.isWriteable   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/databases/sqlite.py SqliteDatabase.__str__   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/databases/sqlite.py SqliteDatabase._lockTables   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/databases/sqlite.py SqliteDatabase.declareStaticTables   100% 6 0 0   100% 4 0   100%
python/lsst/daf/butler/registry/databases/sqlite.py SqliteDatabase._convertFieldSpec   86% 7 1 0   67% 6 2   77%
python/lsst/daf/butler/registry/databases/sqlite.py SqliteDatabase._makeColumnConstraints   100% 6 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/databases/sqlite.py SqliteDatabase._convertTableSpec   55% 11 5 1   50% 6 3   53%
python/lsst/daf/butler/registry/databases/sqlite.py SqliteDatabase.replace   100% 12 0 0   100% 4 0   100%
python/lsst/daf/butler/registry/databases/sqlite.py SqliteDatabase.ensure   100% 9 0 0   100% 4 0   100%
python/lsst/daf/butler/registry/databases/sqlite.py SqliteDatabase.constant_rows   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/databases/sqlite.py SqliteDatabase.get_constant_rows_max   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/databases/sqlite.py SqliteDatabase.has_distinct_on   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/databases/sqlite.py SqliteDatabase.has_any_aggregate   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/databases/sqlite.py SqliteDatabase.apply_any_aggregate   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/databases/sqlite.py SqliteDatabase.glob_expression   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/databases/sqlite.py SqliteDatabase.glob_expression._escape   83% 18 3 0   83% 12 2   83%
python/lsst/daf/butler/registry/databases/sqlite.py _find_database_filename   85% 13 2 0   60% 10 4   74%
python/lsst/daf/butler/registry/databases/sqlite.py (no function)   100% 46 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/datasets/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/__init__.py (no function)   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/_dataset_type_cache.py DatasetTypeCache.__init__   100% 5 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/_dataset_type_cache.py DatasetTypeCache.clone   100% 5 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/_dataset_type_cache.py DatasetTypeCache.full   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/_dataset_type_cache.py DatasetTypeCache.add   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/_dataset_type_cache.py DatasetTypeCache.set   100% 6 0 0   75% 4 1   90%
python/lsst/daf/butler/registry/datasets/byDimensions/_dataset_type_cache.py DatasetTypeCache.clear   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/_dataset_type_cache.py DatasetTypeCache.get   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/_dataset_type_cache.py DatasetTypeCache.get_by_id   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/_dataset_type_cache.py DatasetTypeCache.items   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/registry/datasets/byDimensions/_dataset_type_cache.py DatasetTypeCache.add_by_dimensions   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/_dataset_type_cache.py DatasetTypeCache.get_by_dimensions   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/_dataset_type_cache.py (no function)   100% 19 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py _DatasetTypeRecord.make_dynamic_tables   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py _DatasetTypeRecord.update_dynamic_tables   86% 7 1 0   75% 4 1   82%
python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py ByDimensionsDatasetRecordStorageManagerUUID.__init__   100% 12 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py ByDimensionsDatasetRecordStorageManagerUUID.initialize   100% 8 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py ByDimensionsDatasetRecordStorageManagerUUID.currentVersions   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py ByDimensionsDatasetRecordStorageManagerUUID.makeStaticTableSpecs   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py ByDimensionsDatasetRecordStorageManagerUUID.addDatasetForeignKey   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py ByDimensionsDatasetRecordStorageManagerUUID._newDefaultSchemaVersion   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py ByDimensionsDatasetRecordStorageManagerUUID.clone   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py ByDimensionsDatasetRecordStorageManagerUUID.refresh   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py ByDimensionsDatasetRecordStorageManagerUUID.remove_dataset_type   90% 10 1 0   50% 2 1   83%
python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py ByDimensionsDatasetRecordStorageManagerUUID.get_dataset_type   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py ByDimensionsDatasetRecordStorageManagerUUID.register_dataset_type   96% 25 1 0   89% 18 2   93%
python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py ByDimensionsDatasetRecordStorageManagerUUID.resolve_wildcard   90% 29 3 0   88% 24 3   89%
python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py ByDimensionsDatasetRecordStorageManagerUUID.get_dataset_refs   100% 34 0 0   100% 12 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py ByDimensionsDatasetRecordStorageManagerUUID._fetch_dataset_type_record   100% 10 0 0   100% 4 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py ByDimensionsDatasetRecordStorageManagerUUID._record_from_row   100% 6 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py ByDimensionsDatasetRecordStorageManagerUUID._dataset_type_from_row   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py ByDimensionsDatasetRecordStorageManagerUUID.preload_cache   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py ByDimensionsDatasetRecordStorageManagerUUID._fetch_dataset_types   100% 15 0 0   100% 6 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py ByDimensionsDatasetRecordStorageManagerUUID._get_dataset_type_by_id   86% 7 1 0   75% 4 1   82%
python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py ByDimensionsDatasetRecordStorageManagerUUID._find_storage   100% 19 0 0   100% 8 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py ByDimensionsDatasetRecordStorageManagerUUID._get_dynamic_tables   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py ByDimensionsDatasetRecordStorageManagerUUID.getCollectionSummary   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py ByDimensionsDatasetRecordStorageManagerUUID.fetch_summaries   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py ByDimensionsDatasetRecordStorageManagerUUID.fetch_run_dataset_ids   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py ByDimensionsDatasetRecordStorageManagerUUID.ingest_date_dtype   75% 4 1 0   50% 2 1   67%
python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py ByDimensionsDatasetRecordStorageManagerUUID.insert   85% 20 3 0   62% 8 3   79%
python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py ByDimensionsDatasetRecordStorageManagerUUID.import_   85% 20 3 0   70% 10 3   80%
python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py ByDimensionsDatasetRecordStorageManagerUUID._import_guarded   100% 9 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py ByDimensionsDatasetRecordStorageManagerUUID._update_summaries   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py ByDimensionsDatasetRecordStorageManagerUUID._validate_import   100% 21 0 0   100% 8 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py ByDimensionsDatasetRecordStorageManagerUUID._import_new   100% 5 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py ByDimensionsDatasetRecordStorageManagerUUID.delete   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py ByDimensionsDatasetRecordStorageManagerUUID.associate   92% 12 1 0   88% 8 1   90%
python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py ByDimensionsDatasetRecordStorageManagerUUID.disassociate   67% 6 2 0   50% 4 2   60%
python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py ByDimensionsDatasetRecordStorageManagerUUID.certify   78% 36 8 0   61% 18 7   72%
python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py ByDimensionsDatasetRecordStorageManagerUUID.decertify   92% 37 3 0   81% 16 3   89%
python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py ByDimensionsDatasetRecordStorageManagerUUID.make_joins_builder   97% 30 1 1   94% 16 1   96%
python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py ByDimensionsDatasetRecordStorageManagerUUID._finish_query_builder   100% 43 0 0   100% 26 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py ByDimensionsDatasetRecordStorageManagerUUID.refresh_collection_summaries   93% 15 1 0   75% 4 1   89%
python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py ByDimensionsDatasetRecordStorageManagerUUID._get_tags_table   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py ByDimensionsDatasetRecordStorageManagerUUID._get_calibs_table   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py _create_case_expression_for_collections   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py _ensure_dimension_groups_match   80% 5 1 0   50% 2 1   71%
python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py (no function)   100% 103 0 2   100% 0 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/summaries.py CollectionSummaryTables.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/summaries.py CollectionSummaryTables.makeTableSpecs   100% 11 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/summaries.py CollectionSummaryManager.__init__   100% 7 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/summaries.py CollectionSummaryManager.clone   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/summaries.py CollectionSummaryManager.initialize   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/summaries.py CollectionSummaryManager.update   100% 4 0 0   75% 4 1   88%
python/lsst/daf/butler/registry/datasets/byDimensions/summaries.py CollectionSummaryManager.fetch_summaries   100% 53 0 0   100% 32 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/summaries.py CollectionSummaryManager.get_collection_ids   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/summaries.py CollectionSummaryManager.delete_collections   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/summaries.py (no function)   100% 31 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/tables.py addDatasetForeignKey   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/tables.py makeStaticTableSpecs   75% 8 2 0   50% 2 1   70%
python/lsst/daf/butler/registry/datasets/byDimensions/tables.py makeTagTableName   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/tables.py makeCalibTableName   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/tables.py makeTagTableSpec   100% 17 0 0   100% 8 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/tables.py makeCalibTableSpec   90% 21 2 0   88% 8 1   90%
python/lsst/daf/butler/registry/datasets/byDimensions/tables.py DynamicTables.__init__   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/tables.py DynamicTables.copy   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/tables.py DynamicTables.from_dimensions_key   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/tables.py DynamicTables.create   100% 4 0 0   100% 4 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/tables.py DynamicTables.add_calibs   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/datasets/byDimensions/tables.py DynamicTables.tags   88% 8 1 0   75% 4 1   83%
python/lsst/daf/butler/registry/datasets/byDimensions/tables.py DynamicTables.calibs   44% 9 5 0   25% 4 1   38%
python/lsst/daf/butler/registry/datasets/byDimensions/tables.py (no function)   100% 35 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/dimensions/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/dimensions/static.py StaticDimensionRecordStorageManager.__init__   100% 5 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/dimensions/static.py StaticDimensionRecordStorageManager.clone   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/dimensions/static.py StaticDimensionRecordStorageManager.initialize   95% 20 1 0   92% 12 1   94%
python/lsst/daf/butler/registry/dimensions/static.py StaticDimensionRecordStorageManager.fetch_cache_dict   100% 15 0 0   100% 6 0   100%
python/lsst/daf/butler/registry/dimensions/static.py StaticDimensionRecordStorageManager.insert   100% 13 0 0   100% 8 0   100%
python/lsst/daf/butler/registry/dimensions/static.py StaticDimensionRecordStorageManager.sync   94% 17 1 0   83% 12 2   90%
python/lsst/daf/butler/registry/dimensions/static.py StaticDimensionRecordStorageManager.fetch_one   89% 27 3 0   92% 12 1   90%
python/lsst/daf/butler/registry/dimensions/static.py StaticDimensionRecordStorageManager.save_dimension_group   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/dimensions/static.py StaticDimensionRecordStorageManager.load_dimension_group   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/dimensions/static.py StaticDimensionRecordStorageManager.make_joins_builder   93% 15 1 0   90% 10 1   92%
python/lsst/daf/butler/registry/dimensions/static.py StaticDimensionRecordStorageManager.process_query_overlaps   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/dimensions/static.py StaticDimensionRecordStorageManager.currentVersions   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/dimensions/static.py StaticDimensionRecordStorageManager._make_skypix_overlap_tables   100% 8 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/dimensions/static.py StaticDimensionRecordStorageManager._make_legacy_overlap_tables   95% 21 1 0   93% 14 1   94%
python/lsst/daf/butler/registry/dimensions/static.py StaticDimensionRecordStorageManager._make_record_db_rows   100% 16 0 0   100% 14 0   100%
python/lsst/daf/butler/registry/dimensions/static.py StaticDimensionRecordStorageManager._compute_common_skypix_overlap_deletes   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/dimensions/static.py StaticDimensionRecordStorageManager._compute_common_skypix_overlap_inserts   100% 12 0 0   100% 8 0   100%
python/lsst/daf/butler/registry/dimensions/static.py StaticDimensionRecordStorageManager._insert_overlaps   87% 15 2 0   88% 8 1   87%
python/lsst/daf/butler/registry/dimensions/static.py _DimensionGroupStorage.__init__   100% 6 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/dimensions/static.py _DimensionGroupStorage.clone   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/dimensions/static.py _DimensionGroupStorage.initialize   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/dimensions/static.py _DimensionGroupStorage.refresh   100% 14 0 0   100% 4 0   100%
python/lsst/daf/butler/registry/dimensions/static.py _DimensionGroupStorage.save   100% 12 0 0   100% 4 0   100%
python/lsst/daf/butler/registry/dimensions/static.py _DimensionGroupStorage.load   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/dimensions/static.py _CommonSkyPixMediatedOverlapsVisitor.__init__   100% 8 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/dimensions/static.py _CommonSkyPixMediatedOverlapsVisitor.visit_spatial_constraint   81% 27 5 0   75% 12 3   79%
python/lsst/daf/butler/registry/dimensions/static.py _CommonSkyPixMediatedOverlapsVisitor.visit_spatial_join   71% 17 5 0   70% 10 3   70%
python/lsst/daf/butler/registry/dimensions/static.py _CommonSkyPixMediatedOverlapsVisitor._join_common_skypix_overlap   100% 3 0 0   50% 2 1   80%
python/lsst/daf/butler/registry/dimensions/static.py _CommonSkyPixMediatedOverlapsVisitor._make_common_skypix_overlap_joins_builder   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/dimensions/static.py (no function)   100% 68 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/expand_data_ids.py expand_data_ids   100% 14 0 0   100% 10 0   100%
python/lsst/daf/butler/registry/expand_data_ids.py (no function)   100% 7 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/__init__.py (no function)   100% 9 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_attributes.py ButlerAttributeManager.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_attributes.py ButlerAttributeManager.initialize   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_attributes.py ButlerAttributeManager.get   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_attributes.py ButlerAttributeManager.set   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_attributes.py ButlerAttributeManager.delete   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_attributes.py ButlerAttributeManager.items   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_attributes.py ButlerAttributeManager.empty   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_attributes.py ButlerAttributeManager.clone   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_attributes.py (no function)   100% 24 0 2   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_bridge.py FakeDatasetRef.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_bridge.py FakeDatasetRef.__str__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/registry/interfaces/_bridge.py FakeDatasetRef.__repr__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/registry/interfaces/_bridge.py FakeDatasetRef.__eq__   0% 4 4 0   100% 0 0   0%
python/lsst/daf/butler/registry/interfaces/_bridge.py FakeDatasetRef.__hash__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/registry/interfaces/_bridge.py FakeDatasetRef.datasetType   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/registry/interfaces/_bridge.py FakeDatasetRef._datastore_records   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/registry/interfaces/_bridge.py DatastoreRegistryBridge.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_bridge.py DatastoreRegistryBridge.insert   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_bridge.py DatastoreRegistryBridge.ensure   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_bridge.py DatastoreRegistryBridge.forget   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_bridge.py DatastoreRegistryBridge.moveToTrash   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_bridge.py DatastoreRegistryBridge.check   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_bridge.py DatastoreRegistryBridge.emptyTrash   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_bridge.py DatastoreRegistryBridgeManager.__init__   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_bridge.py DatastoreRegistryBridgeManager.clone   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_bridge.py DatastoreRegistryBridgeManager.initialize   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_bridge.py DatastoreRegistryBridgeManager.refresh   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_bridge.py DatastoreRegistryBridgeManager.register   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_bridge.py DatastoreRegistryBridgeManager.findDatastores   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_bridge.py (no function)   100% 58 0 9   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_collections.py CollectionRecord.__init__   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_collections.py CollectionRecord.__eq__   0% 4 4 0   100% 0 0   0%
python/lsst/daf/butler/registry/interfaces/_collections.py CollectionRecord.__hash__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_collections.py CollectionRecord.__repr__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/registry/interfaces/_collections.py CollectionRecord.__str__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/registry/interfaces/_collections.py RunRecord.__init__   100% 5 0 0   50% 2 1   86%
python/lsst/daf/butler/registry/interfaces/_collections.py RunRecord.__repr__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_collections.py ChainedCollectionRecord.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_collections.py ChainedCollectionRecord.__repr__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/registry/interfaces/_collections.py CollectionManager.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_collections.py CollectionManager.clone   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_collections.py CollectionManager.initialize   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_collections.py CollectionManager.addCollectionForeignKey   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_collections.py CollectionManager.addRunForeignKey   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_collections.py CollectionManager.getCollectionForeignKeyName   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_collections.py CollectionManager.getRunForeignKeyName   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_collections.py CollectionManager.refresh   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_collections.py CollectionManager.register   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_collections.py CollectionManager.remove   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_collections.py CollectionManager.find   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_collections.py CollectionManager.__getitem__   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_collections.py CollectionManager.resolve_wildcard   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_collections.py CollectionManager.getDocumentation   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_collections.py CollectionManager.get_docs   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_collections.py CollectionManager.setDocumentation   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_collections.py CollectionManager.getParentChains   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_collections.py CollectionManager.update_chain   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_collections.py CollectionManager.prepend_collection_chain   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_collections.py CollectionManager.extend_collection_chain   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_collections.py CollectionManager.remove_from_collection_chain   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_collections.py CollectionManager.lookup_name_sql   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_collections.py CollectionManager.join_collections_sql   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_collections.py CollectionManager._block_for_concurrency_test   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_collections.py (no function)   100% 94 0 3   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_database.py _checkExistingTableDefinition   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/registry/interfaces/_database.py StaticTablesContext.__init__   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_database.py StaticTablesContext.addTable   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_database.py StaticTablesContext.addTableTuple   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_database.py StaticTablesContext.addInitializer   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/registry/interfaces/_database.py Database.__init__   100% 8 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_database.py Database.dispose   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_database.py Database.__repr__   67% 6 2 0   50% 4 2   60%
python/lsst/daf/butler/registry/interfaces/_database.py Database.makeDefaultUri   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/registry/interfaces/_database.py Database.fromUri   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_database.py Database.clone   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_database.py Database.makeEngine   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_database.py Database.fromEngine   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_database.py Database.session   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_database.py Database.transaction   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_database.py Database.temporary_table   100% 10 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/interfaces/_database.py Database._session   100% 9 0 0   75% 4 1   92%
python/lsst/daf/butler/registry/interfaces/_database.py Database._transaction   100% 18 0 0   100% 8 0   100%
python/lsst/daf/butler/registry/interfaces/_database.py Database._lockTables   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_database.py Database.isTableWriteable   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_database.py Database.assertTableWriteable   50% 2 1 0   50% 2 1   50%
python/lsst/daf/butler/registry/interfaces/_database.py Database.declareStaticTables   90% 20 2 0   80% 10 2   87%
python/lsst/daf/butler/registry/interfaces/_database.py Database.isWriteable   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_database.py Database.isInTransaction   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_database.py Database.__str__   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_database.py Database.dialect   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_database.py Database.shrinkDatabaseEntityName   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_database.py Database.expandDatabaseEntityName   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/registry/interfaces/_database.py Database._makeColumnConstraints   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_database.py Database._convertFieldSpec   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/interfaces/_database.py Database._convertForeignKeySpec   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_database.py Database._convertExclusionConstraintSpec   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_database.py Database._convertTableSpec   100% 12 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/interfaces/_database.py Database.ensureTableExists   94% 16 1 0   83% 6 1   91%
python/lsst/daf/butler/registry/interfaces/_database.py Database.getExistingTable   100% 10 0 0   100% 6 0   100%
python/lsst/daf/butler/registry/interfaces/_database.py Database._make_temporary_table   80% 10 2 0   67% 6 2   75%
python/lsst/daf/butler/registry/interfaces/_database.py Database.getTimespanRepresentation   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_database.py Database.sync   82% 39 7 0   73% 26 5   78%
python/lsst/daf/butler/registry/interfaces/_database.py Database.sync.check   100% 21 0 0   100% 12 0   100%
python/lsst/daf/butler/registry/interfaces/_database.py Database.sync.check.safeNotEqual   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/registry/interfaces/_database.py Database.sync._format_bad   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_database.py Database.insert   88% 24 3 0   81% 16 3   85%
python/lsst/daf/butler/registry/interfaces/_database.py Database.replace   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_database.py Database.ensure   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_database.py Database.delete   97% 38 1 0   94% 18 1   96%
python/lsst/daf/butler/registry/interfaces/_database.py Database.deleteWhere   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_database.py Database.update   83% 6 1 0   50% 2 1   75%
python/lsst/daf/butler/registry/interfaces/_database.py Database.query   100% 9 0 0   100% 4 0   100%
python/lsst/daf/butler/registry/interfaces/_database.py Database._log_query_and_plan   17% 6 5 0   50% 2 1   25%
python/lsst/daf/butler/registry/interfaces/_database.py Database.constant_rows   0% 3 3 0   0% 2 0   0%
python/lsst/daf/butler/registry/interfaces/_database.py Database.get_constant_rows_max   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/registry/interfaces/_database.py Database.glob_expression   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_database.py Database.has_distinct_on   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_database.py Database.has_any_aggregate   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_database.py Database.supports_temporary_tables   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_database.py Database.apply_any_aggregate   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_database.py DatabaseMetadata.__init__   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_database.py DatabaseMetadata.add_table   88% 8 1 0   75% 4 1   83%
python/lsst/daf/butler/registry/interfaces/_database.py DatabaseMetadata.get_table   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_database.py DatabaseMetadata.remove_table   100% 4 0 0   50% 2 1   83%
python/lsst/daf/butler/registry/interfaces/_database.py DatabaseMetadata.create_all   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_database.py (no function)   100% 129 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_database_explain.py get_query_plan   0% 5 5 0   0% 2 0   0%
python/lsst/daf/butler/registry/interfaces/_database_explain.py _Explain.__init__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/registry/interfaces/_database_explain.py _compile_explain   0% 3 3 0   100% 0 0   0%
python/lsst/daf/butler/registry/interfaces/_database_explain.py (no function)   100% 10 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_datasets.py DatasetRecordStorageManager.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_datasets.py DatasetRecordStorageManager.clone   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_datasets.py DatasetRecordStorageManager.preload_cache   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_datasets.py DatasetRecordStorageManager.initialize   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_datasets.py DatasetRecordStorageManager.addDatasetForeignKey   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_datasets.py DatasetRecordStorageManager.refresh   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_datasets.py DatasetRecordStorageManager.get_dataset_type   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_datasets.py DatasetRecordStorageManager.conform_exact_dataset_type   83% 12 2 0   67% 6 2   78%
python/lsst/daf/butler/registry/interfaces/_datasets.py DatasetRecordStorageManager.register_dataset_type   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_datasets.py DatasetRecordStorageManager.remove_dataset_type   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_datasets.py DatasetRecordStorageManager.resolve_wildcard   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_datasets.py DatasetRecordStorageManager.get_dataset_refs   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_datasets.py DatasetRecordStorageManager.getCollectionSummary   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_datasets.py DatasetRecordStorageManager.fetch_summaries   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_datasets.py DatasetRecordStorageManager.fetch_run_dataset_ids   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_datasets.py DatasetRecordStorageManager.ingest_date_dtype   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_datasets.py DatasetRecordStorageManager.insert   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_datasets.py DatasetRecordStorageManager.import_   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_datasets.py DatasetRecordStorageManager.delete   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_datasets.py DatasetRecordStorageManager.associate   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_datasets.py DatasetRecordStorageManager.disassociate   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_datasets.py DatasetRecordStorageManager.certify   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_datasets.py DatasetRecordStorageManager.decertify   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_datasets.py DatasetRecordStorageManager.make_joins_builder   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_datasets.py DatasetRecordStorageManager.refresh_collection_summaries   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_datasets.py (no function)   100% 65 0 7   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_dimensions.py DimensionRecordStorageManager.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_dimensions.py DimensionRecordStorageManager.clone   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_dimensions.py DimensionRecordStorageManager.initialize   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_dimensions.py DimensionRecordStorageManager.fetch_cache_dict   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_dimensions.py DimensionRecordStorageManager.insert   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_dimensions.py DimensionRecordStorageManager.sync   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_dimensions.py DimensionRecordStorageManager.fetch_one   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_dimensions.py DimensionRecordStorageManager.save_dimension_group   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_dimensions.py DimensionRecordStorageManager.load_dimension_group   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_dimensions.py DimensionRecordStorageManager.make_joins_builder   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_dimensions.py DimensionRecordStorageManager.process_query_overlaps   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_dimensions.py (no function)   100% 32 0 4   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_obscore.py ObsCoreTableManager.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_obscore.py ObsCoreTableManager.clone   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_obscore.py ObsCoreTableManager.initialize   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_obscore.py ObsCoreTableManager.set_query_function   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/registry/interfaces/_obscore.py ObsCoreTableManager.config_json   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_obscore.py ObsCoreTableManager.add_datasets   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_obscore.py ObsCoreTableManager.associate   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_obscore.py ObsCoreTableManager.disassociate   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_obscore.py ObsCoreTableManager.update_exposure_regions   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_obscore.py ObsCoreTableManager.query   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_obscore.py (no function)   100% 30 0 9   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_opaque.py OpaqueTableStorage.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_opaque.py OpaqueTableStorage.insert   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_opaque.py OpaqueTableStorage.ensure   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_opaque.py OpaqueTableStorage.replace   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_opaque.py OpaqueTableStorage.fetch   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_opaque.py OpaqueTableStorage.fetch_batches   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_opaque.py OpaqueTableStorage.delete   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_opaque.py OpaqueTableStorageManager.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_opaque.py OpaqueTableStorageManager.initialize   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_opaque.py OpaqueTableStorageManager.__getitem__   75% 4 1 0   50% 2 1   67%
python/lsst/daf/butler/registry/interfaces/_opaque.py OpaqueTableStorageManager.get   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_opaque.py OpaqueTableStorageManager.register   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_opaque.py OpaqueTableStorageManager.clone   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_opaque.py (no function)   100% 36 0 2   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_versioning.py VersionTuple.fromString   57% 7 3 0   50% 2 1   56%
python/lsst/daf/butler/registry/interfaces/_versioning.py VersionTuple.checkCompatibility   100% 5 0 0   100% 4 0   100%
python/lsst/daf/butler/registry/interfaces/_versioning.py VersionTuple.__str__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_versioning.py VersionedExtension.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_versioning.py VersionedExtension.extensionName   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_versioning.py VersionedExtension.currentVersions   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_versioning.py VersionedExtension.newSchemaVersion   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_versioning.py VersionedExtension.clsNewSchemaVersion   100% 9 0 0   100% 6 0   100%
python/lsst/daf/butler/registry/interfaces/_versioning.py VersionedExtension._newDefaultSchemaVersion   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/interfaces/_versioning.py VersionedExtension.checkCompatibility   100% 5 0 0   100% 6 0   100%
python/lsst/daf/butler/registry/interfaces/_versioning.py VersionedExtension.checkNewSchemaVersion   100% 5 0 0   83% 6 1   91%
python/lsst/daf/butler/registry/interfaces/_versioning.py (no function)   100% 30 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/managers.py RegistryManagerTypes.fromConfig   85% 27 4 0   88% 16 2   86%
python/lsst/daf/butler/registry/managers.py RegistryManagerTypes.makeRepo   94% 17 1 0   83% 6 1   91%
python/lsst/daf/butler/registry/managers.py RegistryManagerTypes.loadRepo   86% 22 3 0   70% 10 1   81%
python/lsst/daf/butler/registry/managers.py RegistryManagerTypes.as_dict   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/managers.py RegistryManagerInstances.caching_context_manager   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/managers.py RegistryManagerInstances.initialize   100% 16 0 0   75% 4 1   95%
python/lsst/daf/butler/registry/managers.py RegistryManagerInstances.clone   100% 9 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/managers.py RegistryManagerInstances.as_dict   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/managers.py RegistryManagerInstances.refresh   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/managers.py (no function)   100% 62 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/nameShrinker.py (no function)   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/registry/obscore/__init__.py (no function)   100% 5 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/obscore/_config.py ObsCoreManagerConfig.validate_collection_type   100% 5 0 0   100% 4 0   100%
python/lsst/daf/butler/registry/obscore/_config.py (no function)   100% 83 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/obscore/_manager.py _ExposureRegionFactory.__init__   100% 5 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/obscore/_manager.py _ExposureRegionFactory.derived_region   62% 16 6 0   50% 10 3   58%
python/lsst/daf/butler/registry/obscore/_manager.py ObsCoreLiveTableManager.__init__   96% 23 1 0   88% 8 1   94%
python/lsst/daf/butler/registry/obscore/_manager.py ObsCoreLiveTableManager.clone   100% 4 0 0   50% 2 1   83%
python/lsst/daf/butler/registry/obscore/_manager.py ObsCoreLiveTableManager.initialize   100% 9 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/obscore/_manager.py ObsCoreLiveTableManager._get_query_object   100% 2 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/obscore/_manager.py ObsCoreLiveTableManager.set_query_function   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/obscore/_manager.py ObsCoreLiveTableManager.config_json   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/obscore/_manager.py ObsCoreLiveTableManager.currentVersions   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/obscore/_manager.py ObsCoreLiveTableManager.add_datasets   100% 17 0 0   100% 12 0   100%
python/lsst/daf/butler/registry/obscore/_manager.py ObsCoreLiveTableManager.associate   60% 5 2 0   50% 4 2   56%
python/lsst/daf/butler/registry/obscore/_manager.py ObsCoreLiveTableManager.disassociate   92% 12 1 0   62% 8 3   80%
python/lsst/daf/butler/registry/obscore/_manager.py ObsCoreLiveTableManager._populate   100% 8 0 0   100% 6 0   100%
python/lsst/daf/butler/registry/obscore/_manager.py ObsCoreLiveTableManager._check_dataset_run   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/registry/obscore/_manager.py ObsCoreLiveTableManager.update_exposure_regions   76% 17 4 0   75% 4 1   76%
python/lsst/daf/butler/registry/obscore/_manager.py ObsCoreLiveTableManager.query   92% 12 1 0   88% 8 1   90%
python/lsst/daf/butler/registry/obscore/_manager.py (no function)   100% 41 0 2   100% 0 0   100%
python/lsst/daf/butler/registry/obscore/_records.py DerivedRegionFactory.derived_region   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/obscore/_records.py RecordFactory.__init__   100% 9 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/obscore/_records.py RecordFactory.region_dimension   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/obscore/_records.py RecordFactory.make_generic_records   88% 42 5 0   56% 18 8   78%
python/lsst/daf/butler/registry/obscore/_records.py RecordFactory.make_universe_records   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/obscore/_records.py RecordFactory.__call__   100% 8 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/obscore/_records.py RecordFactory.make_spatial_records   75% 16 4 0   60% 10 2   69%
python/lsst/daf/butler/registry/obscore/_records.py RecordFactory.finalize_format_keywords   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/registry/obscore/_records.py RecordFactory.get_record_type_from_universe   27% 11 8 0   17% 6 1   24%
python/lsst/daf/butler/registry/obscore/_records.py DafButlerRecordFactory.__init__   100% 5 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/obscore/_records.py DafButlerRecordFactory.make_universe_records   97% 37 1 0   58% 24 10   82%
python/lsst/daf/butler/registry/obscore/_records.py DafButlerRecordFactory._exposure_records   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/obscore/_records.py DafButlerRecordFactory._visit_records   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/obscore/_records.py DafButlerRecordFactory.region_dimension   0% 8 8 0   0% 6 0   0%
python/lsst/daf/butler/registry/obscore/_records.py DafButlerRecordFactory.finalize_format_keywords   100% 2 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/obscore/_records.py (no function)   100% 39 0 6   100% 0 0   100%
python/lsst/daf/butler/registry/obscore/_schema.py ObsCoreSchema.__init__   97% 36 1 0   92% 24 2   95%
python/lsst/daf/butler/registry/obscore/_schema.py ObsCoreSchema.table_spec   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/obscore/_schema.py ObsCoreSchema.dataset_fk   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/obscore/_schema.py ObsCoreSchema.dimension_column   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/obscore/_schema.py (no function)   100% 20 0 2   100% 0 0   100%
python/lsst/daf/butler/registry/obscore/_spatial.py SpatialObsCorePlugin.initialize   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/obscore/_spatial.py SpatialObsCorePlugin.extend_table_spec   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/obscore/_spatial.py SpatialObsCorePlugin.make_records   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/obscore/_spatial.py SpatialObsCorePlugin.load_plugins   47% 15 8 0   25% 8 2   39%
python/lsst/daf/butler/registry/obscore/_spatial.py (no function)   100% 20 0 5   100% 0 0   100%
python/lsst/daf/butler/registry/obscore/default_spatial.py DefaultSpatialObsCorePlugin.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/obscore/default_spatial.py DefaultSpatialObsCorePlugin.initialize   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/obscore/default_spatial.py DefaultSpatialObsCorePlugin.extend_table_spec   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/obscore/default_spatial.py DefaultSpatialObsCorePlugin.make_records   100% 16 0 0   100% 6 0   100%
python/lsst/daf/butler/registry/obscore/default_spatial.py (no function)   100% 15 0 3   100% 0 0   100%
python/lsst/daf/butler/registry/obscore/pgsphere.py PgSpherePoint.get_col_spec   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/registry/obscore/pgsphere.py PgSpherePoint.bind_processor   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/registry/obscore/pgsphere.py PgSpherePoint.bind_processor._process   0% 5 5 0   0% 2 0   0%
python/lsst/daf/butler/registry/obscore/pgsphere.py PgSpherePolygon.get_col_spec   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/registry/obscore/pgsphere.py PgSpherePolygon.bind_processor   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/registry/obscore/pgsphere.py PgSpherePolygon.bind_processor._process   0% 8 8 0   0% 4 0   0%
python/lsst/daf/butler/registry/obscore/pgsphere.py PgSphereObsCorePlugin.__init__   0% 3 3 0   100% 0 0   0%
python/lsst/daf/butler/registry/obscore/pgsphere.py PgSphereObsCorePlugin.initialize   0% 9 9 0   0% 6 0   0%
python/lsst/daf/butler/registry/obscore/pgsphere.py PgSphereObsCorePlugin.extend_table_spec   0% 3 3 0   100% 0 0   0%
python/lsst/daf/butler/registry/obscore/pgsphere.py PgSphereObsCorePlugin.make_records   0% 10 10 0   0% 4 0   0%
python/lsst/daf/butler/registry/obscore/pgsphere.py (no function)   0% 26 26 3   100% 0 0   0%
python/lsst/daf/butler/registry/opaque.py ByNameOpaqueTableStorage.__init__   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/opaque.py ByNameOpaqueTableStorage.insert   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/opaque.py ByNameOpaqueTableStorage.ensure   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/registry/opaque.py ByNameOpaqueTableStorage.replace   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/opaque.py ByNameOpaqueTableStorage.fetch   100% 2 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/opaque.py ByNameOpaqueTableStorage.fetch_batches   100% 10 0 0   100% 4 0   100%
python/lsst/daf/butler/registry/opaque.py ByNameOpaqueTableStorage.fetch_batches._batch_in_clause   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/opaque.py ByNameOpaqueTableStorage.fetch_batches._batch_in_clauses   100% 10 0 0   100% 8 0   100%
python/lsst/daf/butler/registry/opaque.py ByNameOpaqueTableStorage.delete   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/opaque.py ByNameOpaqueTableStorageManager.__init__   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/opaque.py ByNameOpaqueTableStorageManager.clone   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/opaque.py ByNameOpaqueTableStorageManager.initialize   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/opaque.py ByNameOpaqueTableStorageManager.get   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/opaque.py ByNameOpaqueTableStorageManager.register   100% 8 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/opaque.py ByNameOpaqueTableStorageManager.currentVersions   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/opaque.py (no function)   100% 29 0 2   100% 0 0   100%
python/lsst/daf/butler/registry/queries/__init__.py (no function)   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/queries/_query_common.py CommonQueryArguments.replaceCollections   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/queries/_query_common.py CommonQueryArguments.replaceDatasetTypes   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/queries/_query_common.py LegacyQueryResultsMixin.__init__   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/queries/_query_common.py LegacyQueryResultsMixin.count   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/queries/_query_common.py LegacyQueryResultsMixin.any   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/queries/_query_common.py LegacyQueryResultsMixin.order_by   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/queries/_query_common.py LegacyQueryResultsMixin.limit   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/queries/_query_common.py LegacyQueryResultsMixin.explain_no_results   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/queries/_query_common.py LegacyQueryResultsMixin._build_query   100% 9 0 0   100% 4 0   100%
python/lsst/daf/butler/registry/queries/_query_common.py LegacyQueryResultsMixin._apply_result_modifiers   100% 10 0 0   100% 6 0   100%
python/lsst/daf/butler/registry/queries/_query_common.py LegacyQueryResultsMixin._build_result   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/queries/_query_common.py resolve_collections   100% 9 0 0   100% 6 0   100%
python/lsst/daf/butler/registry/queries/_query_common.py (no function)   100% 38 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/queries/_query_data_coordinates.py QueryDriverDataCoordinateQueryResults.__init__   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/queries/_query_data_coordinates.py QueryDriverDataCoordinateQueryResults._build_result   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/queries/_query_data_coordinates.py QueryDriverDataCoordinateQueryResults.dimensions   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/queries/_query_data_coordinates.py QueryDriverDataCoordinateQueryResults.hasFull   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/queries/_query_data_coordinates.py QueryDriverDataCoordinateQueryResults.hasRecords   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/queries/_query_data_coordinates.py QueryDriverDataCoordinateQueryResults.__iter__   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/queries/_query_data_coordinates.py QueryDriverDataCoordinateQueryResults.materialize   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/queries/_query_data_coordinates.py QueryDriverDataCoordinateQueryResults.expanded   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/queries/_query_data_coordinates.py QueryDriverDataCoordinateQueryResults.subset   83% 6 1 0   75% 4 1   80%
python/lsst/daf/butler/registry/queries/_query_data_coordinates.py QueryDriverDataCoordinateQueryResults.findDatasets   88% 8 1 0   75% 4 1   83%
python/lsst/daf/butler/registry/queries/_query_data_coordinates.py QueryDriverDataCoordinateQueryResults.findRelatedDatasets   100% 11 0 0   67% 6 2   88%
python/lsst/daf/butler/registry/queries/_query_data_coordinates.py (no function)   100% 28 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/queries/_query_datasets.py QueryDriverDatasetRefQueryResults.__init__   100% 7 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/queries/_query_datasets.py QueryDriverDatasetRefQueryResults._build_result   100% 6 0 0   100% 4 0   100%
python/lsst/daf/butler/registry/queries/_query_datasets.py QueryDriverDatasetRefQueryResults.__iter__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/queries/_query_datasets.py QueryDriverDatasetRefQueryResults._iterate_rows   100% 6 0 0   100% 4 0   100%
python/lsst/daf/butler/registry/queries/_query_datasets.py QueryDriverDatasetRefQueryResults.parentDatasetType   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/queries/_query_datasets.py QueryDriverDatasetRefQueryResults.dataIds   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/queries/_query_datasets.py QueryDriverDatasetRefQueryResults.byParentDatasetType   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/queries/_query_datasets.py QueryDriverDatasetRefQueryResults.expanded   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/queries/_query_datasets.py QueryDriverDatasetRefQueryResults.explain_no_results   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/queries/_query_datasets.py (no function)   100% 21 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/queries/_query_dimension_records.py QueryDriverDimensionRecordQueryResults.__init__   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/queries/_query_dimension_records.py QueryDriverDimensionRecordQueryResults.element   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/registry/queries/_query_dimension_records.py QueryDriverDimensionRecordQueryResults.__iter__   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/queries/_query_dimension_records.py QueryDriverDimensionRecordQueryResults.run   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/registry/queries/_query_dimension_records.py QueryDriverDimensionRecordQueryResults._build_result   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/queries/_query_dimension_records.py (no function)   100% 14 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/queries/_results.py LimitedQueryResultsBase.count   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/queries/_results.py LimitedQueryResultsBase.any   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/queries/_results.py LimitedQueryResultsBase.explain_no_results   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/queries/_results.py QueryResultsBase.order_by   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/queries/_results.py QueryResultsBase.limit   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/queries/_results.py DataCoordinateQueryResults.materialize   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/queries/_results.py DataCoordinateQueryResults.expanded   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/queries/_results.py DataCoordinateQueryResults.subset   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/queries/_results.py DataCoordinateQueryResults.findDatasets   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/queries/_results.py DataCoordinateQueryResults.findRelatedDatasets   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/queries/_results.py DatasetQueryResults.byParentDatasetType   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/queries/_results.py DatasetQueryResults.expanded   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/queries/_results.py DatasetQueryResults._iter_by_dataset_type   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/queries/_results.py ParentDatasetQueryResults.parentDatasetType   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/queries/_results.py ParentDatasetQueryResults.dataIds   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/queries/_results.py ChainedDatasetQueryResults.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/queries/_results.py ChainedDatasetQueryResults.__iter__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/queries/_results.py ChainedDatasetQueryResults.__repr__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/registry/queries/_results.py ChainedDatasetQueryResults.byParentDatasetType   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/queries/_results.py ChainedDatasetQueryResults.expanded   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/registry/queries/_results.py ChainedDatasetQueryResults.count   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/queries/_results.py ChainedDatasetQueryResults.any   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/queries/_results.py ChainedDatasetQueryResults.explain_no_results   75% 4 1 0   50% 2 1   67%
python/lsst/daf/butler/registry/queries/_results.py DimensionRecordQueryResults.element   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/queries/_results.py DimensionRecordQueryResults.run   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/queries/_results.py (no function)   100% 62 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.forceRegistryConfig   80% 5 1 0   75% 4 1   78%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.createFromConfig   88% 17 2 0   67% 6 2   83%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.fromConfig   100% 14 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.__init__   100% 9 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.close   100% 2 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.__str__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.__repr__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.isWriteable   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.copy   100% 8 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.dimensions   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.defaults   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.defaults   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.refresh   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.refresh_collection_summaries   100% 2 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.caching_context   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.transaction   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.resetConnectionPool   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.registerOpaqueTable   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.insertOpaqueData   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.fetchOpaqueData   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.deleteOpaqueData   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.registerCollection   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.getCollectionType   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.get_collection_record   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.registerRun   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.removeCollection   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.getCollectionChain   80% 5 1 0   50% 2 1   71%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.setCollectionChain   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.getCollectionParentChains   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.getCollectionDocumentation   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.setCollectionDocumentation   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.getCollectionSummary   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.registerDatasetType   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.removeDatasetType   100% 9 0 0   100% 6 0   100%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.getDatasetType   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.supportsIdGenerationMode   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.insertDatasets   95% 21 1 0   80% 10 2   90%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry._importDatasets   91% 22 2 0   80% 10 2   88%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.getDataset   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry._fetch_run_dataset_ids   75% 4 1 0   50% 2 1   67%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.removeDatasets   50% 4 2 0   100% 0 0   50%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.associate   100% 9 0 0   100% 4 0   100%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.disassociate   100% 6 0 0   100% 4 0   100%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.certify   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.decertify   100% 7 0 0   75% 4 1   91%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.getDatastoreBridgeManager   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.getDatasetLocations   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.expandDataId   84% 31 5 0   73% 26 5   79%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.expand_data_ids   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.expand_refs   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.insertDimensionData   88% 8 1 0   83% 6 1   86%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.syncDimensionData   88% 8 1 0   83% 6 1   86%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.queryDatasetTypes   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.queryCollections   62% 8 3 0   50% 2 1   60%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry._query   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry._query_driver   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.get_datastore_records   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.store_datastore_records   0% 8 8 0   0% 4 0   0%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.make_datastore_tables   100% 8 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.preload_cache   100% 3 0 0   50% 2 1   80%
python/lsst/daf/butler/registry/sql_registry.py SqlRegistry.obsCoreTableManager   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/sql_registry.py (no function)   100% 119 0 5   100% 0 0   100%
python/lsst/daf/butler/registry/tests/__init__.py (no function)   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_database.py _patch_getExistingTable   100% 5 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_database.py _patch_getExistingTable._getExistingTable   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_database.py DatabaseTests.makeEmptyDatabase   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_database.py DatabaseTests.asReadOnly   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_database.py DatabaseTests.getNewConnection   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_database.py DatabaseTests.query_list   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_database.py DatabaseTests.query_scalar   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_database.py DatabaseTests.checkTable   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_database.py DatabaseTests.checkStaticSchema   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_database.py DatabaseTests.testDeclareStaticTables   100% 8 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_database.py DatabaseTests.testDeclareStaticTablesTwice   89% 9 1 0   100% 0 0   89%
python/lsst/daf/butler/registry/tests/_database.py DatabaseTests.testRepr   100% 5 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_database.py DatabaseTests.testDynamicTables   100% 23 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_database.py DatabaseTests.testDynamicTablesConcurrency   100% 11 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_database.py DatabaseTests.testTemporaryTables   100% 18 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/tests/_database.py DatabaseTests.testSchemaSeparation   100% 9 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_database.py DatabaseTests.testInsertQueryDelete   100% 48 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/tests/_database.py DatabaseTests.testDeleteWhere   100% 17 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_database.py DatabaseTests.testUpdate   100% 9 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_database.py DatabaseTests.testSync   100% 31 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_database.py DatabaseTests.testReplace   100% 19 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_database.py DatabaseTests.test_replace_pkey_only   100% 10 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_database.py DatabaseTests.testEnsure   100% 30 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_database.py DatabaseTests.testTransactionNesting   100% 20 0 0   100% 6 0   100%
python/lsst/daf/butler/registry/tests/_database.py DatabaseTests.testTransactionLocking   0% 10 10 0   100% 0 0   0%
python/lsst/daf/butler/registry/tests/_database.py DatabaseTests.testTransactionLocking._side1   0% 7 7 0   100% 0 0   0%
python/lsst/daf/butler/registry/tests/_database.py DatabaseTests.testTransactionLocking._side2   0% 5 5 0   100% 0 0   0%
python/lsst/daf/butler/registry/tests/_database.py DatabaseTests.testTransactionLocking._side2._toRunInThread   0% 5 5 0   100% 0 0   0%
python/lsst/daf/butler/registry/tests/_database.py DatabaseTests.testTransactionLocking._testProblemsWithNoLocking   0% 14 14 0   0% 4 0   0%
python/lsst/daf/butler/registry/tests/_database.py DatabaseTests.testTransactionLocking._testSolutionWithLocking   0% 10 10 0   0% 2 0   0%
python/lsst/daf/butler/registry/tests/_database.py DatabaseTests.testTimespanDatabaseRepresentation   93% 98 7 0   92% 26 2   93%
python/lsst/daf/butler/registry/tests/_database.py DatabaseTests.testTimespanDatabaseRepresentation._convertRowForInsert   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_database.py DatabaseTests.testTimespanDatabaseRepresentation._convertRowFromSelect   100% 6 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/tests/_database.py DatabaseTests.testConstantRows   100% 11 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_database.py DatabaseTests.test_aggregate   94% 18 1 1   50% 4 2   86%
python/lsst/daf/butler/registry/tests/_database.py (no function)   100% 53 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.makeRegistryConfig   100% 6 0 0   50% 4 2   80%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.make_butler   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.load_data   100% 2 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.checkQueryResults   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testOpaque   100% 18 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testDatasetType   100% 35 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testDatasetTypeCache   100% 12 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testDimensions   100% 27 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testNumpyDataId   100% 10 0 0   100% 4 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testDataIdRelationships   100% 13 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testDataset   100% 15 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.test_get_many_datasets   100% 14 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.test_fetch_run_dataset_ids   100% 7 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testFindDataset   100% 58 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testRemoveDatasetTypeSuccess   100% 6 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testRemoveDatasetTypeFailure   100% 7 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testImportDatasetsUUID   95% 41 2 0   86% 14 2   93%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testComponentLookups   100% 11 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testCollections   96% 114 4 0   50% 4 2   95%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.test_collection_clearing   100% 20 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testCollectionChainCaching   100% 7 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testCollectionChainFlatten   100% 10 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testCollectionChainPrependConcurrency   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testCollectionChainPrependConcurrency.blocked_thread_func   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testCollectionChainPrependConcurrency.unblocked_thread_func   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testCollectionChainReplaceConcurrency   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testCollectionChainReplaceConcurrency.blocked_thread_func   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testCollectionChainReplaceConcurrency.unblocked_thread_func   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testCollectionChainRemoveConcurrency   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testCollectionChainRemoveConcurrency.blocked_thread_func   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testCollectionChainRemoveConcurrency.unblocked_thread_func   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests._do_collection_concurrency_test   100% 25 0 0   100% 4 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests._do_collection_concurrency_test.wait_for_barrier   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testBasicTransaction   100% 15 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testNestedTransaction   100% 17 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testInstrumentDimensions   100% 81 0 0   100% 18 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testSkyMapDimensions   100% 45 0 0   100% 10 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testSkyMapDimensions.do_query   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testSpatialJoin   100% 27 0 0   100% 14 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testAbstractQuery   100% 6 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testAttributeManager   100% 29 0 0   100% 4 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testQueryDatasetsDeduplication   100% 8 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testQueryDatasetsExtraDimensions   100% 5 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testQueryResults   100% 45 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testStorageClassPropagation   100% 23 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testEmptyDimensionsQueries   100% 50 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testDimensionDataModifications   100% 51 0 0   100% 8 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testDimensionDataModifications._unpack_range_set   100% 2 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testDimensionDataModifications._range_set_hull   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testCalibrationCollections   100% 159 0 0   100% 12 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testCalibrationCollections._assertLookup   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testSkipCalibs   85% 27 4 0   50% 2 1   83%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testIngestTimeQuery   100% 28 0 0   100% 6 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testTimespanQueries   100% 38 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testTimespanQueries.query   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testCollectionSummaries   100% 29 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testBindInQueryDatasets   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testQueryIntRangeExpressions   100% 6 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testQueryResultSummaries   100% 61 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testQueryDataIdsExpressionError   100% 8 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testQueryDataIdsOrderBy   100% 39 0 0   100% 12 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testQueryDataIdsOrderBy.do_query   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testQueryDataIdsGovernorExceptions   59% 29 12 0   33% 12 2   51%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testQueryDataIdsGovernorExceptions.do_query   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testQueryDimensionRecordsOrderBy   100% 23 0 0   100% 10 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testQueryDimensionRecordsOrderBy.do_query   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testQueryDimensionRecordsOrderBy.do_test   100% 6 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testQueryDimensionRecordsExceptions   100% 16 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testDatasetConstrainedDimensionRecordQueries   100% 7 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testSkyPixDatasetQueries   100% 14 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testDatasetIdFactory   100% 15 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.testExposureQueries   100% 7 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.test_long_query_names   100% 11 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.test_skypix_constraint_queries   94% 17 1 0   67% 6 2   87%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.test_spatial_constraint_queries   100% 19 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.test_query_empty_collections   100% 31 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.test_dataset_followup_spatial_joins   100% 11 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.test_expanded_data_id_queries   100% 38 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.test_collection_summary   100% 30 0 0   100% 2 0   100%
python/lsst/daf/butler/registry/tests/_registry.py RegistryTests.test_temp_table_config   80% 10 2 0   50% 2 1   75%
python/lsst/daf/butler/registry/tests/_registry.py (no function)   98% 116 2 0   100% 0 0   98%
python/lsst/daf/butler/registry/versions.py ButlerVersionsManager.__init__   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/versions.py ButlerVersionsManager._managerConfigKey   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/versions.py ButlerVersionsManager._managerVersionKey   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/versions.py ButlerVersionsManager._manager_data   100% 13 0 0   100% 8 0   100%
python/lsst/daf/butler/registry/versions.py ButlerVersionsManager.checkCompatibility   0% 5 5 0   0% 4 0   0%
python/lsst/daf/butler/registry/versions.py ButlerVersionsManager.storeManagersConfig   100% 11 0 0   100% 4 0   100%
python/lsst/daf/butler/registry/versions.py ButlerVersionsManager._attributesEmpty   100% 5 0 0   75% 4 1   89%
python/lsst/daf/butler/registry/versions.py ButlerVersionsManager.checkManagersConfig   67% 18 6 0   70% 10 3   68%
python/lsst/daf/butler/registry/versions.py ButlerVersionsManager.managerVersions   100% 5 0 0   100% 4 0   100%
python/lsst/daf/butler/registry/versions.py (no function)   100% 28 0 2   100% 0 0   100%
python/lsst/daf/butler/registry/wildcards.py CategorizedWildcard.fromExpression   39% 38 23 0   36% 28 4   38%
python/lsst/daf/butler/registry/wildcards.py CategorizedWildcard.fromExpression.process   54% 48 22 0   68% 22 3   59%
python/lsst/daf/butler/registry/wildcards.py CollectionWildcard.__post_init__   50% 2 1 0   50% 2 1   50%
python/lsst/daf/butler/registry/wildcards.py CollectionWildcard.from_expression   82% 11 2 0   75% 8 2   79%
python/lsst/daf/butler/registry/wildcards.py CollectionWildcard.from_names   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/registry/wildcards.py CollectionWildcard.require_ordered   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/registry/wildcards.py CollectionWildcard.empty   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/registry/wildcards.py CollectionWildcard.__str__   80% 5 1 0   50% 2 1   71%
python/lsst/daf/butler/registry/wildcards.py DatasetTypeWildcard.from_expression   84% 19 3 0   93% 14 1   88%
python/lsst/daf/butler/registry/wildcards.py DatasetTypeWildcard.__str__   0% 5 5 0   0% 2 0   0%
python/lsst/daf/butler/registry/wildcards.py (no function)   100% 46 0 0   100% 0 0   100%
python/lsst/daf/butler/remote_butler/__init__.py (no function)   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_collection_args.py convert_collection_arg_to_glob_string_list   0% 13 13 0   0% 12 0   0%
python/lsst/daf/butler/remote_butler/_collection_args.py convert_dataset_type_arg_to_glob_string_list   0% 12 12 0   0% 8 0   0%
python/lsst/daf/butler/remote_butler/_collection_args.py (no function)   0% 16 16 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_config.py (no function)   0% 9 9 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_defaults.py DefaultsHolder.__init__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_defaults.py DefaultsHolder.get   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_defaults.py DefaultsHolder.set   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_defaults.py (no function)   0% 5 5 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_errors.py serialize_butler_user_error   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_errors.py deserialize_butler_user_error   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_errors.py (no function)   0% 5 5 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_factory.py RemoteButlerFactory.__init__   0% 6 6 0   0% 2 0   0%
python/lsst/daf/butler/remote_butler/_factory.py RemoteButlerFactory.create_factory_from_config   0% 5 5 0   0% 2 0   0%
python/lsst/daf/butler/remote_butler/_factory.py RemoteButlerFactory.create_factory_for_url   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_factory.py RemoteButlerFactory._create_butler   0% 3 3 0   0% 2 0   0%
python/lsst/daf/butler/remote_butler/_factory.py RemoteButlerFactory.create_butler_for_access_token   0% 5 5 0   0% 4 0   0%
python/lsst/daf/butler/remote_butler/_factory.py RemoteButlerFactory.create_butler_with_credentials_from_environment   0% 5 5 0   0% 4 0   0%
python/lsst/daf/butler/remote_butler/_factory.py (no function)   0% 22 22 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_get.py get_dataset_as_python_object   0% 5 5 0   0% 2 0   0%
python/lsst/daf/butler/remote_butler/_get.py convert_http_url_to_resource_path   0% 8 8 0   0% 6 0   0%
python/lsst/daf/butler/remote_butler/_get.py _to_dataset_location_information   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_get.py (no function)   0% 14 14 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_http_connection.py RemoteButlerHttpConnection.__init__   0% 3 3 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_http_connection.py RemoteButlerHttpConnection.post   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_http_connection.py RemoteButlerHttpConnection.post_with_stream_response   0% 3 3 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_http_connection.py RemoteButlerHttpConnection._build_post_request   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_http_connection.py RemoteButlerHttpConnection.get   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_http_connection.py RemoteButlerHttpConnection._get_url   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_http_connection.py RemoteButlerHttpConnection._build_request   0% 7 7 0   0% 2 0   0%
python/lsst/daf/butler/remote_butler/_http_connection.py RemoteButlerHttpConnection._send_request   0% 8 8 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_http_connection.py RemoteButlerHttpConnection._send_request_with_stream_response   0% 10 10 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_http_connection.py RemoteButlerHttpConnection._send_with_retries   0% 12 12 0   0% 4 0   0%
python/lsst/daf/butler/remote_butler/_http_connection.py RemoteButlerHttpConnection._handle_http_status   0% 7 7 0   0% 4 0   0%
python/lsst/daf/butler/remote_butler/_http_connection.py _needs_retry   0% 9 9 0   0% 4 0   0%
python/lsst/daf/butler/remote_butler/_http_connection.py parse_model   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_http_connection.py _try_to_parse_model   0% 4 4 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_http_connection.py ButlerServerError.__init__   0% 3 3 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_http_connection.py quote_path_variable   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_http_connection.py (no function)   0% 46 46 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_query_driver.py RemoteQueryDriver.__init__   0% 5 5 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_query_driver.py RemoteQueryDriver.__exit__   0% 7 7 0   0% 2 0   0%
python/lsst/daf/butler/remote_butler/_query_driver.py RemoteQueryDriver.universe   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_query_driver.py RemoteQueryDriver.execute   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/remote_butler/_query_driver.py RemoteQueryDriver.execute   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/remote_butler/_query_driver.py RemoteQueryDriver.execute   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/remote_butler/_query_driver.py RemoteQueryDriver.execute   0% 1 1 0   0% 2 0   0%
python/lsst/daf/butler/remote_butler/_query_driver.py RemoteQueryDriver.execute   0% 12 12 0   0% 6 0   0%
python/lsst/daf/butler/remote_butler/_query_driver.py RemoteQueryDriver.materialize   0% 3 3 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_query_driver.py RemoteQueryDriver.upload_data_coordinates   0% 3 3 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_query_driver.py RemoteQueryDriver.count   0% 4 4 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_query_driver.py RemoteQueryDriver.any   0% 4 4 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_query_driver.py RemoteQueryDriver.explain_no_results   0% 4 4 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_query_driver.py RemoteQueryDriver.get_default_collections   0% 4 4 0   0% 2 0   0%
python/lsst/daf/butler/remote_butler/_query_driver.py RemoteQueryDriver.get_dataset_type   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_query_driver.py RemoteQueryDriver._create_query_input   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_query_driver.py _convert_query_result_page   0% 11 11 1   0% 6 0   0%
python/lsst/daf/butler/remote_butler/_query_driver.py _convert_general_result   0% 14 14 0   0% 8 0   0%
python/lsst/daf/butler/remote_butler/_query_driver.py (no function)   0% 41 41 0   0% 6 0   0%
python/lsst/daf/butler/remote_butler/_query_results.py read_query_results   0% 7 7 0   0% 6 0   0%
python/lsst/daf/butler/remote_butler/_query_results.py convert_dataset_ref_results   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_query_results.py _received_keep_alive   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_query_results.py (no function)   0% 12 12 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_ref_utils.py apply_storage_class_override   0% 6 6 0   0% 4 0   0%
python/lsst/daf/butler/remote_butler/_ref_utils.py normalize_dataset_type_name   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_ref_utils.py simplify_dataId   0% 6 6 0   0% 4 0   0%
python/lsst/daf/butler/remote_butler/_ref_utils.py _extract_dataset_type   0% 5 5 0   0% 4 0   0%
python/lsst/daf/butler/remote_butler/_ref_utils.py (no function)   0% 13 13 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_registry.py RemoteButlerRegistry.__init__   0% 3 3 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_registry.py RemoteButlerRegistry.isWriteable   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_registry.py RemoteButlerRegistry.dimensions   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_registry.py RemoteButlerRegistry.defaults   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_registry.py RemoteButlerRegistry.defaults   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_registry.py RemoteButlerRegistry.refresh   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_registry.py RemoteButlerRegistry.refresh_collection_summaries   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/remote_butler/_registry.py RemoteButlerRegistry.caching_context   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_registry.py RemoteButlerRegistry.transaction   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/remote_butler/_registry.py RemoteButlerRegistry.registerCollection   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/remote_butler/_registry.py RemoteButlerRegistry.getCollectionType   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_registry.py RemoteButlerRegistry.registerRun   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/remote_butler/_registry.py RemoteButlerRegistry.removeCollection   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/remote_butler/_registry.py RemoteButlerRegistry.getCollectionChain   0% 4 4 0   0% 2 0   0%
python/lsst/daf/butler/remote_butler/_registry.py RemoteButlerRegistry.setCollectionChain   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/remote_butler/_registry.py RemoteButlerRegistry.getCollectionParentChains   0% 3 3 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_registry.py RemoteButlerRegistry.getCollectionDocumentation   0% 4 4 0   0% 2 0   0%
python/lsst/daf/butler/remote_butler/_registry.py RemoteButlerRegistry.setCollectionDocumentation   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/remote_butler/_registry.py RemoteButlerRegistry.getCollectionSummary   0% 3 3 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_registry.py RemoteButlerRegistry.registerDatasetType   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/remote_butler/_registry.py RemoteButlerRegistry.removeDatasetType   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/remote_butler/_registry.py RemoteButlerRegistry.getDatasetType   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_registry.py RemoteButlerRegistry.supportsIdGenerationMode   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/remote_butler/_registry.py RemoteButlerRegistry.findDataset   0% 5 5 0   0% 4 0   0%
python/lsst/daf/butler/remote_butler/_registry.py RemoteButlerRegistry.insertDatasets   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/remote_butler/_registry.py RemoteButlerRegistry._importDatasets   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/remote_butler/_registry.py RemoteButlerRegistry.getDataset   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_registry.py RemoteButlerRegistry._fetch_run_dataset_ids   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/remote_butler/_registry.py RemoteButlerRegistry.removeDatasets   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/remote_butler/_registry.py RemoteButlerRegistry.associate   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/remote_butler/_registry.py RemoteButlerRegistry.disassociate   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/remote_butler/_registry.py RemoteButlerRegistry.certify   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/remote_butler/_registry.py RemoteButlerRegistry.decertify   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/remote_butler/_registry.py RemoteButlerRegistry.getDatasetLocations   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/remote_butler/_registry.py RemoteButlerRegistry.expandDataId   0% 7 7 0   0% 2 0   0%
python/lsst/daf/butler/remote_butler/_registry.py RemoteButlerRegistry.insertDimensionData   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/remote_butler/_registry.py RemoteButlerRegistry.syncDimensionData   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/remote_butler/_registry.py RemoteButlerRegistry.queryDatasetTypes   0% 12 12 0   0% 6 0   0%
python/lsst/daf/butler/remote_butler/_registry.py RemoteButlerRegistry.queryCollections   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_registry.py RemoteButlerRegistry.storageClasses   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_registry.py _is_component_dataset_type   0% 6 6 0   0% 4 0   0%
python/lsst/daf/butler/remote_butler/_registry.py (no function)   0% 66 66 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_remote_butler.py RemoteButler.__new__   0% 11 11 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_remote_butler.py RemoteButler.isWriteable   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_remote_butler.py RemoteButler.collection_chains   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_remote_butler.py RemoteButler.collections   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_remote_butler.py RemoteButler.dimensions   0% 11 11 0   0% 4 0   0%
python/lsst/daf/butler/remote_butler/_remote_butler.py RemoteButler._cache_manager   0% 6 6 0   0% 4 0   0%
python/lsst/daf/butler/remote_butler/_remote_butler.py RemoteButler._caching_context   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/remote_butler/_remote_butler.py RemoteButler.transaction   100% 0 0 2   100% 0 0   100%
python/lsst/daf/butler/remote_butler/_remote_butler.py RemoteButler.put   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/remote_butler/_remote_butler.py RemoteButler.getDeferred   0% 4 4 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_remote_butler.py RemoteButler.get   0% 9 9 0   0% 4 0   0%
python/lsst/daf/butler/remote_butler/_remote_butler.py RemoteButler._get_dataset_as_python_object   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_remote_butler.py RemoteButler._get_file_info   0% 7 7 0   0% 4 0   0%
python/lsst/daf/butler/remote_butler/_remote_butler.py RemoteButler._get_file_info_for_ref   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_remote_butler.py RemoteButler.getURIs   0% 12 12 1   0% 6 0   0%
python/lsst/daf/butler/remote_butler/_remote_butler.py RemoteButler.get_dataset_type   0% 8 8 0   0% 2 0   0%
python/lsst/daf/butler/remote_butler/_remote_butler.py RemoteButler.get_dataset   0% 9 9 0   0% 4 0   0%
python/lsst/daf/butler/remote_butler/_remote_butler.py RemoteButler.get_many_datasets   0% 8 8 0   0% 2 0   0%
python/lsst/daf/butler/remote_butler/_remote_butler.py RemoteButler.find_dataset   0% 9 9 0   0% 4 0   0%
python/lsst/daf/butler/remote_butler/_remote_butler.py RemoteButler._retrieve_artifacts   0% 32 32 0   0% 16 0   0%
python/lsst/daf/butler/remote_butler/_remote_butler.py RemoteButler.retrieve_artifacts_zip   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_remote_butler.py RemoteButler.retrieveArtifacts   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_remote_butler.py RemoteButler.exists   0% 14 14 0   0% 10 0   0%
python/lsst/daf/butler/remote_butler/_remote_butler.py RemoteButler._exists_many   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_remote_butler.py RemoteButler.removeRuns   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/remote_butler/_remote_butler.py RemoteButler.ingest   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/remote_butler/_remote_butler.py RemoteButler.ingest_zip   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/remote_butler/_remote_butler.py RemoteButler.export   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/remote_butler/_remote_butler.py RemoteButler.import_   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/remote_butler/_remote_butler.py RemoteButler.transfer_dimension_records_from   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/remote_butler/_remote_butler.py RemoteButler.transfer_from   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/remote_butler/_remote_butler.py RemoteButler.validateConfiguration   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/remote_butler/_remote_butler.py RemoteButler.run   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_remote_butler.py RemoteButler.registry   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_remote_butler.py RemoteButler.query   0% 4 4 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_remote_butler.py RemoteButler._query_all_datasets_by_page   0% 5 5 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_remote_butler.py RemoteButler.pruneDatasets   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/remote_butler/_remote_butler.py RemoteButler._normalize_collections   0% 5 5 0   0% 4 0   0%
python/lsst/daf/butler/remote_butler/_remote_butler.py RemoteButler.clone   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_remote_butler.py RemoteButler.close   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_remote_butler.py RemoteButler._expand_data_ids   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_remote_butler.py RemoteButler._file_transfer_source   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_remote_butler.py RemoteButler.__str__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_remote_butler.py RemoteButler._serialize_default_data_id   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_remote_butler.py _to_file_payload   0% 4 4 0   0% 2 0   0%
python/lsst/daf/butler/remote_butler/_remote_butler.py _to_uuid_string   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_remote_butler.py _RemoteButlerCacheData.__init__   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_remote_butler.py RemoteButlerCache.__init__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_remote_butler.py (no function)   0% 109 109 7   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_remote_butler_collections.py RemoteButlerCollections.__init__   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_remote_butler_collections.py RemoteButlerCollections.defaults   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_remote_butler_collections.py RemoteButlerCollections.extend_chain   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/remote_butler/_remote_butler_collections.py RemoteButlerCollections.prepend_chain   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/remote_butler/_remote_butler_collections.py RemoteButlerCollections.redefine_chain   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/remote_butler/_remote_butler_collections.py RemoteButlerCollections.remove_from_chain   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/remote_butler/_remote_butler_collections.py RemoteButlerCollections.query_info   0% 12 12 0   0% 6 0   0%
python/lsst/daf/butler/remote_butler/_remote_butler_collections.py RemoteButlerCollections.get_info   0% 5 5 0   0% 2 0   0%
python/lsst/daf/butler/remote_butler/_remote_butler_collections.py RemoteButlerCollections.register   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/remote_butler/_remote_butler_collections.py RemoteButlerCollections.x_remove   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/remote_butler/_remote_butler_collections.py (no function)   0% 25 25 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_remote_file_transfer_source.py RemoteFileTransferSource.__init__   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_remote_file_transfer_source.py RemoteFileTransferSource.get_file_info_for_transfer   0% 8 8 0   0% 4 0   0%
python/lsst/daf/butler/remote_butler/_remote_file_transfer_source.py RemoteFileTransferSource.locate_missing_files_for_transfer   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_remote_file_transfer_source.py RemoteFileTransferSource._deserialize_file_transfer_record   0% 3 3 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_remote_file_transfer_source.py _tweak_uri_for_unit_test   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_remote_file_transfer_source.py mock_file_transfer_uris_for_unit_test   0% 5 5 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/_remote_file_transfer_source.py (no function)   0% 23 23 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/authentication/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/remote_butler/authentication/cadc.py CadcAuthenticationProvider.__init__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/authentication/cadc.py CadcAuthenticationProvider.create_from_environment   0% 4 4 0   0% 2 0   0%
python/lsst/daf/butler/remote_butler/authentication/cadc.py CadcAuthenticationProvider.get_server_headers   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/authentication/cadc.py CadcAuthenticationProvider.get_datastore_headers   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/authentication/cadc.py _get_authentication_token_from_environment   0% 6 6 0   0% 2 0   0%
python/lsst/daf/butler/remote_butler/authentication/cadc.py (no function)   0% 14 14 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/authentication/interface.py RemoteButlerAuthenticationProvider.get_server_headers   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/remote_butler/authentication/interface.py RemoteButlerAuthenticationProvider.get_datastore_headers   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/remote_butler/authentication/interface.py (no function)   0% 4 4 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/authentication/rubin.py RubinAuthenticationProvider.__init__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/authentication/rubin.py RubinAuthenticationProvider.create_from_environment   0% 4 4 0   0% 2 0   0%
python/lsst/daf/butler/remote_butler/authentication/rubin.py RubinAuthenticationProvider.get_server_headers   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/authentication/rubin.py RubinAuthenticationProvider.get_datastore_headers   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/authentication/rubin.py _get_authentication_token_from_environment   0% 9 9 0   0% 4 0   0%
python/lsst/daf/butler/remote_butler/authentication/rubin.py (no function)   0% 15 15 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/registry/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/remote_butler/server/__init__.py (no function)   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/server/_config.py ButlerServerConfig.gafaelfawr_enabled   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/server/_config.py load_config   0% 3 3 0   0% 2 0   0%
python/lsst/daf/butler/remote_butler/server/_config.py mock_config   0% 8 8 0   0% 2 0   0%
python/lsst/daf/butler/remote_butler/server/_config.py (no function)   0% 29 29 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/server/_dependencies.py butler_factory_dependency   0% 5 5 0   0% 2 0   0%
python/lsst/daf/butler/remote_butler/server/_dependencies.py authorizer_dependency   0% 6 6 0   0% 2 0   0%
python/lsst/daf/butler/remote_butler/server/_dependencies.py user_name_dependency   0% 3 3 0   0% 2 0   0%
python/lsst/daf/butler/remote_butler/server/_dependencies.py repository_authorization_dependency   0% 3 3 0   0% 2 0   0%
python/lsst/daf/butler/remote_butler/server/_dependencies.py logger_dependency   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/server/_dependencies.py factory_dependency   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/server/_dependencies.py reset_dependency_caches   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/server/_dependencies.py (no function)   0% 18 18 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/server/_factory.py Factory.__init__   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/server/_factory.py Factory.create_butler   0% 4 4 0   0% 2 0   0%
python/lsst/daf/butler/remote_butler/server/_factory.py Factory.repository   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/server/_factory.py (no function)   0% 8 8 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/server/_gafaelfawr.py GafaelfawrClient.__init__   0% 3 3 0   0% 2 0   0%
python/lsst/daf/butler/remote_butler/server/_gafaelfawr.py GafaelfawrClient.get_groups   0% 6 6 0   0% 2 0   0%
python/lsst/daf/butler/remote_butler/server/_gafaelfawr.py GafaelfawrGroupAuthorizer.__init__   0% 3 3 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/server/_gafaelfawr.py GafaelfawrGroupAuthorizer.is_user_authorized_for_repository   0% 12 12 0   0% 8 0   0%
python/lsst/daf/butler/remote_butler/server/_gafaelfawr.py MockGafaelfawrGroupAuthorizer.__init__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/server/_gafaelfawr.py MockGafaelfawrGroupAuthorizer.set_response   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/server/_gafaelfawr.py MockGafaelfawrGroupAuthorizer.is_user_authorized_for_repository   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/server/_gafaelfawr.py (no function)   0% 20 20 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/server/_server.py create_app   0% 18 18 0   0% 6 0   0%
python/lsst/daf/butler/remote_butler/server/_server.py create_app._log_exceptions_middleware   0% 6 6 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/server/_server.py create_app.butler_exception_handler   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/server/_server.py (no function)   0% 20 20 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/server/_telemetry.py TelemetryContext.span   0% 1 1 0   0% 2 0   0%
python/lsst/daf/butler/remote_butler/server/_telemetry.py NullTelemetryContext.span   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/server/_telemetry.py SentryTelemetryContext.span   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/server/_telemetry.py enable_telemetry   0% 4 4 0   0% 2 0   0%
python/lsst/daf/butler/remote_butler/server/_telemetry.py get_telemetry_context   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/server/_telemetry.py _decide_whether_to_sample_trace   0% 6 6 0   0% 4 0   0%
python/lsst/daf/butler/remote_butler/server/_telemetry.py (no function)   0% 20 20 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/server_models.py DatasetRefResultModel.from_refs   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/remote_butler/server_models.py (no function)   0% 183 183 0   100% 0 0   0%
python/lsst/daf/butler/repo_relocation.py replaceRoot   83% 12 2 0   83% 6 1   83%
python/lsst/daf/butler/repo_relocation.py (no function)   100% 7 0 0   100% 0 0   100%
python/lsst/daf/butler/script/__init__.py (no function)   100% 22 0 0   100% 0 0   100%
python/lsst/daf/butler/script/_associate.py associate   0% 4 4 0   100% 0 0   0%
python/lsst/daf/butler/script/_associate.py (no function)   100% 7 0 0   100% 0 0   100%
python/lsst/daf/butler/script/_pruneDatasets.py PruneDatasetsResult.__init__   100% 7 0 0   100% 2 0   100%
python/lsst/daf/butler/script/_pruneDatasets.py PruneDatasetsResult.dryRun   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/script/_pruneDatasets.py PruneDatasetsResult.confirm   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/script/_pruneDatasets.py PruneDatasetsResult.finished   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/script/_pruneDatasets.py PruneDatasetsResult.errPurgeAndDisassociate   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/script/_pruneDatasets.py PruneDatasetsResult.errNoCollectionRestriction   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/script/_pruneDatasets.py PruneDatasetsResult.errPruneOnNotRun   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/script/_pruneDatasets.py PruneDatasetsResult.errNoOp   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/script/_pruneDatasets.py pruneDatasets   100% 32 0 0   100% 20 0   100%
python/lsst/daf/butler/script/_pruneDatasets.py pruneDatasets.doPruneDatasets   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/script/_pruneDatasets.py (no function)   100% 37 0 2   100% 0 0   100%
python/lsst/daf/butler/script/butlerImport.py butlerImport   75% 4 1 0   50% 2 1   67%
python/lsst/daf/butler/script/butlerImport.py (no function)   100% 5 0 0   100% 0 0   100%
python/lsst/daf/butler/script/certifyCalibrations.py certifyCalibrations   0% 14 14 0   0% 6 0   0%
python/lsst/daf/butler/script/certifyCalibrations.py (no function)   100% 6 0 0   100% 0 0   100%
python/lsst/daf/butler/script/collectionChain.py collectionChain   82% 17 3 0   60% 10 4   74%
python/lsst/daf/butler/script/collectionChain.py _modify_collection_chain   92% 12 1 0   90% 10 1   91%
python/lsst/daf/butler/script/collectionChain.py _find_children_to_pop   100% 12 0 0   100% 6 0   100%
python/lsst/daf/butler/script/collectionChain.py _find_children_to_pop.convert_index   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/script/collectionChain.py (no function)   100% 8 0 0   100% 0 0   100%
python/lsst/daf/butler/script/configDump.py configDump   100% 9 0 0   100% 4 0   100%
python/lsst/daf/butler/script/configDump.py (no function)   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/script/configValidate.py configValidate   78% 9 2 0   100% 0 0   78%
python/lsst/daf/butler/script/configValidate.py (no function)   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/script/createRepo.py createRepo   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/script/createRepo.py (no function)   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/script/exportCalibs.py find_calibration_datasets   0% 13 13 0   0% 4 0   0%
python/lsst/daf/butler/script/exportCalibs.py exportCalibs   0% 31 31 0   0% 10 0   0%
python/lsst/daf/butler/script/exportCalibs.py (no function)   100% 13 0 2   100% 0 0   100%
python/lsst/daf/butler/script/ingest_files.py ingest_files   93% 15 1 0   75% 4 1   89%
python/lsst/daf/butler/script/ingest_files.py extract_datasets_from_table   100% 14 0 0   100% 2 0   100%
python/lsst/daf/butler/script/ingest_files.py parse_data_id_tuple   80% 10 2 0   100% 2 0   83%
python/lsst/daf/butler/script/ingest_files.py (no function)   100% 15 0 3   100% 0 0   100%
python/lsst/daf/butler/script/ingest_zip.py ingest_zip   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/script/ingest_zip.py (no function)   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/script/queryCollections.py _parseDatasetTypes   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/script/queryCollections.py _getTable   90% 21 2 0   86% 14 2   89%
python/lsst/daf/butler/script/queryCollections.py _getTable.addDatasetTypes   0% 9 9 0   0% 4 0   0%
python/lsst/daf/butler/script/queryCollections.py _getTable.addCollection   91% 22 2 0   86% 14 2   89%
python/lsst/daf/butler/script/queryCollections.py _getTree   100% 9 0 0   100% 4 0   100%
python/lsst/daf/butler/script/queryCollections.py _getTree.addCollection   100% 21 0 0   100% 16 0   100%
python/lsst/daf/butler/script/queryCollections.py _getList   89% 9 1 0   75% 4 1   85%
python/lsst/daf/butler/script/queryCollections.py _getList.addCollection   40% 10 6 0   50% 6 1   44%
python/lsst/daf/butler/script/queryCollections.py queryCollections   88% 8 1 0   83% 6 1   86%
python/lsst/daf/butler/script/queryCollections.py (no function)   100% 13 0 0   100% 0 0   100%
python/lsst/daf/butler/script/queryDataIds.py _Table.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/script/queryDataIds.py _Table.__len__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/script/queryDataIds.py _Table.pop_last   0% 3 3 0   0% 2 0   0%
python/lsst/daf/butler/script/queryDataIds.py _Table.getAstropyTable   92% 12 1 0   50% 4 2   81%
python/lsst/daf/butler/script/queryDataIds.py queryDataIds   87% 52 7 1   85% 34 3   86%
python/lsst/daf/butler/script/queryDataIds.py (no function)   100% 16 0 2   100% 0 0   100%
python/lsst/daf/butler/script/queryDatasetTypes.py queryDatasetTypes   77% 13 3 0   75% 4 1   76%
python/lsst/daf/butler/script/queryDatasetTypes.py (no function)   100% 6 0 0   100% 0 0   100%
python/lsst/daf/butler/script/queryDatasets.py _Table.__init__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/script/queryDatasets.py _Table.add   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/script/queryDatasets.py _Table.getAstropyTable   95% 20 1 0   90% 10 1   93%
python/lsst/daf/butler/script/queryDatasets.py QueryDatasets.__init__   100% 19 0 1   100% 4 0   100%
python/lsst/daf/butler/script/queryDatasets.py QueryDatasets.getTables   95% 22 1 0   90% 20 2   93%
python/lsst/daf/butler/script/queryDatasets.py QueryDatasets.getDatasets   93% 28 2 0   100% 12 0   95%
python/lsst/daf/butler/script/queryDatasets.py QueryDatasets._query_multiple_dataset_types   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/script/queryDatasets.py QueryDatasets._query_single_dataset_type   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/script/queryDatasets.py (no function)   100% 29 0 3   100% 0 0   100%
python/lsst/daf/butler/script/queryDimensionRecords.py queryDimensionRecords   86% 36 5 1   65% 20 7   79%
python/lsst/daf/butler/script/queryDimensionRecords.py queryDimensionRecords.conform   88% 8 1 0   83% 6 1   86%
python/lsst/daf/butler/script/queryDimensionRecords.py (no function)   100% 10 0 0   100% 0 0   100%
python/lsst/daf/butler/script/register_dataset_type.py register_dataset_type   100% 6 0 0   100% 2 0   100%
python/lsst/daf/butler/script/register_dataset_type.py (no function)   100% 5 0 0   100% 0 0   100%
python/lsst/daf/butler/script/removeCollections.py _getCollectionInfo   100% 15 0 0   100% 6 0   100%
python/lsst/daf/butler/script/removeCollections.py removeCollections   100% 11 0 0   100% 4 0   100%
python/lsst/daf/butler/script/removeCollections.py removeCollections._doRemove   70% 10 3 0   100% 4 0   79%
python/lsst/daf/butler/script/removeCollections.py (no function)   100% 23 0 0   100% 0 0   100%
python/lsst/daf/butler/script/removeDatasetType.py removeDatasetType   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/script/removeDatasetType.py (no function)   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/script/removeRuns.py _getCollectionInfo   100% 19 0 0   83% 6 1   96%
python/lsst/daf/butler/script/removeRuns.py removeRuns   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/script/removeRuns.py removeRuns._doRemove   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/script/removeRuns.py (no function)   100% 20 0 0   100% 0 0   100%
python/lsst/daf/butler/script/retrieveArtifacts.py retrieveArtifacts   92% 13 1 0   75% 4 1   88%
python/lsst/daf/butler/script/retrieveArtifacts.py (no function)   100% 9 0 2   100% 0 0   100%
python/lsst/daf/butler/script/transferDatasets.py transferDatasets   0% 7 7 0   100% 0 0   0%
python/lsst/daf/butler/script/transferDatasets.py (no function)   100% 8 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/__init__.py (no function)   100% 6 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/_datasetsHelper.py DatasetTestHelper.makeDatasetRef   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/_datasetsHelper.py DatasetTestHelper._makeDatasetRef   100% 8 0 0   75% 4 1   92%
python/lsst/daf/butler/tests/_datasetsHelper.py DatastoreTestHelper.setUpDatastoreTests   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/tests/_datasetsHelper.py DatastoreTestHelper.makeDatastore   100% 8 0 0   100% 4 0   100%
python/lsst/daf/butler/tests/_datasetsHelper.py BadWriteFormatter.read_from_uri   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/_datasetsHelper.py BadWriteFormatter.write_direct   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/_datasetsHelper.py BadNoWriteFormatter.write_direct   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/_datasetsHelper.py MultiDetectorFormatter.read_from_uri   67% 9 3 0   50% 6 3   60%
python/lsst/daf/butler/tests/_datasetsHelper.py (no function)   100% 30 0 3   100% 0 0   100%
python/lsst/daf/butler/tests/_dummyRegistry.py DummyOpaqueTableStorage.__init__   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/_dummyRegistry.py DummyOpaqueTableStorage.insert   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/_dummyRegistry.py DummyOpaqueTableStorage.replace   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/_dummyRegistry.py DummyOpaqueTableStorage.ensure   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/_dummyRegistry.py DummyOpaqueTableStorage._insert   81% 21 4 0   81% 16 3   81%
python/lsst/daf/butler/tests/_dummyRegistry.py DummyOpaqueTableStorage.fetch   100% 17 0 0   100% 16 0   100%
python/lsst/daf/butler/tests/_dummyRegistry.py DummyOpaqueTableStorage.fetch_batches   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/_dummyRegistry.py DummyOpaqueTableStorage.delete   100% 7 0 0   100% 6 0   100%
python/lsst/daf/butler/tests/_dummyRegistry.py DummyOpaqueTableStorageManager.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/_dummyRegistry.py DummyOpaqueTableStorageManager.clone   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/_dummyRegistry.py DummyOpaqueTableStorageManager.initialize   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/_dummyRegistry.py DummyOpaqueTableStorageManager.get   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/_dummyRegistry.py DummyOpaqueTableStorageManager.register   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/_dummyRegistry.py DummyOpaqueTableStorageManager.currentVersions   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/_dummyRegistry.py DummyDatastoreRegistryBridgeManager.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/_dummyRegistry.py DummyDatastoreRegistryBridgeManager.clone   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/_dummyRegistry.py DummyDatastoreRegistryBridgeManager.initialize   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/_dummyRegistry.py DummyDatastoreRegistryBridgeManager.refresh   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/_dummyRegistry.py DummyDatastoreRegistryBridgeManager.register   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/_dummyRegistry.py DummyDatastoreRegistryBridgeManager.findDatastores   0% 3 3 0   0% 4 0   0%
python/lsst/daf/butler/tests/_dummyRegistry.py DummyDatastoreRegistryBridgeManager.currentVersions   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/_dummyRegistry.py DummyRegistry.__init__   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/_dummyRegistry.py DummyRegistry.getDatastoreBridgeManager   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/_dummyRegistry.py (no function)   100% 39 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/_examplePythonTypes.py registerMetricsExample   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/_examplePythonTypes.py _addFullStorageClass   100% 9 0 0   100% 2 0   100%
python/lsst/daf/butler/tests/_examplePythonTypes.py _getAllFormatterRegistries   100% 12 0 0   100% 2 0   100%
python/lsst/daf/butler/tests/_examplePythonTypes.py MetricsExample.__init__   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/_examplePythonTypes.py MetricsExample.__eq__   40% 5 3 0   100% 0 0   40%
python/lsst/daf/butler/tests/_examplePythonTypes.py MetricsExample.__str__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/_examplePythonTypes.py MetricsExample.__repr__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/_examplePythonTypes.py MetricsExample.exportAsDict   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/tests/_examplePythonTypes.py MetricsExample._asdict   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/_examplePythonTypes.py MetricsExample.makeFromDict   100% 5 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/_examplePythonTypes.py MetricsExample.from_model   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/_examplePythonTypes.py MetricsExampleModel.from_metrics   60% 5 2 0   100% 0 0   60%
python/lsst/daf/butler/tests/_examplePythonTypes.py ListDelegate.handleParameters   100% 5 0 0   50% 2 1   86%
python/lsst/daf/butler/tests/_examplePythonTypes.py MetricsDelegate.handleParameters   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/tests/_examplePythonTypes.py MetricsDelegate.getComponent   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/tests/_examplePythonTypes.py MetricsDelegate.selectResponsibleComponent   80% 5 1 0   50% 2 1   71%
python/lsst/daf/butler/tests/_examplePythonTypes.py (no function)   100% 44 0 2   100% 0 0   100%
python/lsst/daf/butler/tests/_testRepo.py makeTestRepo   100% 15 0 0   100% 8 0   100%
python/lsst/daf/butler/tests/_testRepo.py makeTestCollection   100% 4 0 0   100% 2 0   100%
python/lsst/daf/butler/tests/_testRepo.py _makeRecords   100% 20 0 0   100% 18 0   100%
python/lsst/daf/butler/tests/_testRepo.py _fillAllKeys   79% 14 3 0   75% 8 2   77%
python/lsst/daf/butler/tests/_testRepo.py _makeRandomDataIdValue   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/tests/_testRepo.py expandUniqueId   100% 7 0 0   100% 2 0   100%
python/lsst/daf/butler/tests/_testRepo.py _findOrInventDataIdValue   100% 8 0 0   100% 2 0   100%
python/lsst/daf/butler/tests/_testRepo.py _makeDimensionRecordDict   100% 6 0 0   100% 4 0   100%
python/lsst/daf/butler/tests/_testRepo.py addDataIdValue   97% 31 1 0   94% 16 1   96%
python/lsst/daf/butler/tests/_testRepo.py addDatasetType   100% 6 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/_testRepo.py DatastoreMock.apply   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/_testRepo.py DatastoreMock._mock_export   100% 2 0 0   100% 2 0   100%
python/lsst/daf/butler/tests/_testRepo.py DatastoreMock._mock_get   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/_testRepo.py (no function)   100% 25 0 2   100% 0 0   100%
python/lsst/daf/butler/tests/butler_queries.py make_detector_tuples   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/butler_queries.py ButlerQueryTests.make_butler   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/tests/butler_queries.py ButlerQueryTests.load_data   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/butler_queries.py ButlerQueryTests.check_detector_records   100% 20 0 0   100% 4 0   100%
python/lsst/daf/butler/tests/butler_queries.py ButlerQueryTests.check_detector_records_returned   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/tests/butler_queries.py ButlerQueryTests.test_simple_record_query   100% 22 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/butler_queries.py ButlerQueryTests.test_simple_data_coordinate_query   100% 22 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/butler_queries.py ButlerQueryTests.test_simple_dataset_query   100% 44 0 0   100% 4 0   100%
python/lsst/daf/butler/tests/butler_queries.py ButlerQueryTests.test_general_query   100% 82 0 0   100% 4 0   100%
python/lsst/daf/butler/tests/butler_queries.py ButlerQueryTests.test_query_ingest_date   100% 20 0 0   100% 2 0   100%
python/lsst/daf/butler/tests/butler_queries.py ButlerQueryTests.test_implied_union_record_query   100% 8 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/butler_queries.py ButlerQueryTests.test_dataset_constrained_record_query   100% 18 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/butler_queries.py ButlerQueryTests.test_duplicate_overlaps   100% 8 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/butler_queries.py ButlerQueryTests.test_spatial_overlaps   100% 50 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/butler_queries.py ButlerQueryTests.test_spatial_overlaps._check_visit_id   100% 5 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/butler_queries.py ButlerQueryTests.test_auto_spatial_joins   100% 12 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/butler_queries.py ButlerQueryTests.test_common_skypix_overlaps   100% 12 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/butler_queries.py ButlerQueryTests.test_spatial_constraint_queries   100% 7 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/butler_queries.py ButlerQueryTests.test_data_coordinate_upload   100% 9 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/butler_queries.py ButlerQueryTests.test_data_coordinate_upload_force_temp_table   89% 9 1 0   50% 2 1   82%
python/lsst/daf/butler/tests/butler_queries.py ButlerQueryTests.test_materialization   100% 7 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/butler_queries.py ButlerQueryTests.test_materialization_find_first   100% 16 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/butler_queries.py ButlerQueryTests.test_materialization_no_results   100% 16 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/butler_queries.py ButlerQueryTests.test_timespan_results   100% 6 0 0   100% 2 0   100%
python/lsst/daf/butler/tests/butler_queries.py ButlerQueryTests.test_direct_driver_paging   100% 12 0 0   50% 4 2   88%
python/lsst/daf/butler/tests/butler_queries.py ButlerQueryTests.test_column_expressions   100% 35 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/butler_queries.py ButlerQueryTests.test_boolean_columns   100% 40 0 0   100% 4 0   100%
python/lsst/daf/butler/tests/butler_queries.py ButlerQueryTests.test_boolean_columns._run_registry_query   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/butler_queries.py ButlerQueryTests.test_boolean_columns._run_simple_query   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/butler_queries.py ButlerQueryTests.test_boolean_columns._run_query   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/butler_queries.py ButlerQueryTests.test_boolean_columns.do_query   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/butler_queries.py ButlerQueryTests.test_dataset_region_queries   100% 24 0 0   100% 4 0   100%
python/lsst/daf/butler/tests/butler_queries.py ButlerQueryTests.test_dataset_time_queries   100% 14 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/butler_queries.py ButlerQueryTests.test_calibration_join_queries   100% 51 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/butler_queries.py ButlerQueryTests.test_collection_query_info   100% 11 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/butler_queries.py ButlerQueryTests.test_dataset_queries   100% 22 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/butler_queries.py ButlerQueryTests.test_multiple_instrument_queries   100% 5 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/butler_queries.py ButlerQueryTests.test_default_data_id   100% 30 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/butler_queries.py ButlerQueryTests.test_unusual_column_literals   100% 12 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/butler_queries.py ButlerQueryTests.test_query_all_datasets   100% 58 0 0   100% 2 0   100%
python/lsst/daf/butler/tests/butler_queries.py ButlerQueryTests.test_irrelevant_governor_constraints   100% 14 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/butler_queries.py ButlerQueryTests.test_inferred_primary_key   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/butler_queries.py ButlerQueryTests.test_glob_expression   100% 13 0 0   100% 2 0   100%
python/lsst/daf/butler/tests/butler_queries.py ButlerQueryTests.test_dataset_id_queries   100% 11 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/butler_queries.py _get_exposure_ids_from_dimension_records   100% 6 0 0   100% 2 0   100%
python/lsst/daf/butler/tests/butler_queries.py _ref_uuids   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/butler_queries.py (no function)   100% 68 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/cliCmdTestBase.py CliCmdTestBase.defaultExpected   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/cliCmdTestBase.py CliCmdTestBase.command   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/cliCmdTestBase.py CliCmdTestBase.cli   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/cliCmdTestBase.py CliCmdTestBase.mock   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/cliCmdTestBase.py CliCmdTestBase.mockFuncName   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/cliCmdTestBase.py CliCmdTestBase.setUp   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/cliCmdTestBase.py CliCmdTestBase.makeExpected   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/cliCmdTestBase.py CliCmdTestBase.run_command   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/cliCmdTestBase.py CliCmdTestBase.run_test   62% 13 5 0   25% 4 1   53%
python/lsst/daf/butler/tests/cliCmdTestBase.py CliCmdTestBase.run_missing   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/cliCmdTestBase.py CliCmdTestBase.test_help   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/cliCmdTestBase.py (no function)   100% 31 0 8   100% 0 0   100%
python/lsst/daf/butler/tests/cliLogTestBase.py butlerCli   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/cliLogTestBase.py command_log_settings_test   86% 7 1 0   67% 6 2   77%
python/lsst/daf/butler/tests/cliLogTestBase.py CliLogTestBase.setUp   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/cliLogTestBase.py CliLogTestBase.PythonLogger.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/cliLogTestBase.py CliLogTestBase.LsstLogger.__init__   60% 5 2 0   50% 2 1   57%
python/lsst/daf/butler/tests/cliLogTestBase.py CliLogTestBase.runTest   100% 17 0 0   50% 2 1   95%
python/lsst/daf/butler/tests/cliLogTestBase.py CliLogTestBase.test_butlerCliLog   100% 5 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/cliLogTestBase.py CliLogTestBase._test_levels   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/tests/cliLogTestBase.py CliLogTestBase.test_helpLogReset   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/cliLogTestBase.py CliLogTestBase.testLongLog   100% 17 0 0   100% 6 0   100%
python/lsst/daf/butler/tests/cliLogTestBase.py CliLogTestBase.testFileLogging   100% 20 0 0   100% 4 0   100%
python/lsst/daf/butler/tests/cliLogTestBase.py CliLogTestBase.testLogTty   100% 10 0 0   100% 6 0   100%
python/lsst/daf/butler/tests/cliLogTestBase.py (no function)   92% 59 5 10   100% 0 0   92%
python/lsst/daf/butler/tests/deferredFormatter.py DeferredFormatter.read   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/tests/deferredFormatter.py DeferredFormatter.write   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/tests/deferredFormatter.py (no function)   100% 7 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/dict_convertible_model.py DictConvertibleModel.from_dict   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/dict_convertible_model.py DictConvertibleModel.to_dict   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/dict_convertible_model.py (no function)   100% 12 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/hybrid_butler.py HybridButler.__new__   0% 8 8 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler.py HybridButler.isWriteable   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler.py HybridButler._caching_context   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler.py HybridButler.transaction   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler.py HybridButler.record_metrics   0% 4 4 0   0% 2 0   0%
python/lsst/daf/butler/tests/hybrid_butler.py HybridButler.put   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler.py HybridButler.getDeferred   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler.py HybridButler.get   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler.py HybridButler.getURIs   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler.py HybridButler.getURI   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler.py HybridButler.get_dataset_type   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler.py HybridButler.get_dataset   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler.py HybridButler.get_many_datasets   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler.py HybridButler.find_dataset   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler.py HybridButler.retrieve_artifacts_zip   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler.py HybridButler.retrieveArtifacts   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler.py HybridButler.exists   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler.py HybridButler._exists_many   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler.py HybridButler.removeRuns   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler.py HybridButler.ingest_zip   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler.py HybridButler.ingest   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler.py HybridButler.export   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler.py HybridButler.import_   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler.py HybridButler.transfer_dimension_records_from   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler.py HybridButler.transfer_from   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler.py HybridButler.validateConfiguration   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler.py HybridButler.run   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler.py HybridButler.registry   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler.py HybridButler.query   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler.py HybridButler.clone   0% 3 3 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler.py HybridButler.pruneDatasets   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler.py HybridButler.dimensions   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler.py HybridButler._extract_all_dimension_records_from_data_ids   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler.py HybridButler._expand_data_ids   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler.py HybridButler.collection_chains   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler.py HybridButler.collections   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler.py HybridButler._query_all_datasets_by_page   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler.py HybridButler._file_transfer_source   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler.py HybridButler.close   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler.py (no function)   0% 78 78 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_collections.py HybridButlerCollections.__init__   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_collections.py HybridButlerCollections.defaults   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_collections.py HybridButlerCollections.extend_chain   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_collections.py HybridButlerCollections.prepend_chain   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_collections.py HybridButlerCollections.redefine_chain   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_collections.py HybridButlerCollections.remove_from_chain   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_collections.py HybridButlerCollections.query_info   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_collections.py HybridButlerCollections.get_info   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_collections.py HybridButlerCollections.register   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_collections.py HybridButlerCollections.x_remove   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_collections.py (no function)   0% 18 18 3   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_registry.py HybridButlerRegistry.__init__   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_registry.py HybridButlerRegistry.isWriteable   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_registry.py HybridButlerRegistry.dimensions   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_registry.py HybridButlerRegistry.defaults   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_registry.py HybridButlerRegistry.defaults   0% 3 3 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_registry.py HybridButlerRegistry.refresh   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_registry.py HybridButlerRegistry.refresh_collection_summaries   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_registry.py HybridButlerRegistry.caching_context   0% 3 3 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_registry.py HybridButlerRegistry.transaction   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/tests/hybrid_butler_registry.py HybridButlerRegistry.registerCollection   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_registry.py HybridButlerRegistry.getCollectionType   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_registry.py HybridButlerRegistry.registerRun   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_registry.py HybridButlerRegistry.removeCollection   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_registry.py HybridButlerRegistry.getCollectionChain   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_registry.py HybridButlerRegistry.setCollectionChain   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_registry.py HybridButlerRegistry.getCollectionParentChains   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_registry.py HybridButlerRegistry.getCollectionDocumentation   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_registry.py HybridButlerRegistry.setCollectionDocumentation   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_registry.py HybridButlerRegistry.getCollectionSummary   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_registry.py HybridButlerRegistry.registerDatasetType   0% 3 3 0   0% 2 0   0%
python/lsst/daf/butler/tests/hybrid_butler_registry.py HybridButlerRegistry.removeDatasetType   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_registry.py HybridButlerRegistry.getDatasetType   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_registry.py HybridButlerRegistry.supportsIdGenerationMode   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_registry.py HybridButlerRegistry.findDataset   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_registry.py HybridButlerRegistry.insertDatasets   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_registry.py HybridButlerRegistry._importDatasets   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_registry.py HybridButlerRegistry.getDataset   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_registry.py HybridButlerRegistry._fetch_run_dataset_ids   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_registry.py HybridButlerRegistry.removeDatasets   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_registry.py HybridButlerRegistry.associate   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_registry.py HybridButlerRegistry.disassociate   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_registry.py HybridButlerRegistry.certify   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_registry.py HybridButlerRegistry.decertify   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_registry.py HybridButlerRegistry.getDatasetLocations   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_registry.py HybridButlerRegistry.expandDataId   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_registry.py HybridButlerRegistry.insertDimensionData   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_registry.py HybridButlerRegistry.syncDimensionData   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_registry.py HybridButlerRegistry.queryDatasetTypes   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_registry.py HybridButlerRegistry.queryCollections   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_registry.py HybridButlerRegistry.queryDatasets   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_registry.py HybridButlerRegistry.queryDataIds   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_registry.py HybridButlerRegistry.queryDimensionRecords   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_registry.py HybridButlerRegistry.queryDatasetAssociations   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_registry.py HybridButlerRegistry.storageClasses   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/hybrid_butler_registry.py HybridButlerRegistry.storageClasses   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/tests/hybrid_butler_registry.py (no function)   0% 67 67 0   100% 0 0   0%
python/lsst/daf/butler/tests/postgresql.py setup_postgres_test_db   20% 10 8 0   50% 2 1   25%
python/lsst/daf/butler/tests/postgresql.py TemporaryPostgresInstance.__init__   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/tests/postgresql.py TemporaryPostgresInstance.url   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/postgresql.py TemporaryPostgresInstance.begin   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/tests/postgresql.py TemporaryPostgresInstance.patch_butler_config   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/tests/postgresql.py TemporaryPostgresInstance.patch_registry_config   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/tests/postgresql.py TemporaryPostgresInstance.generate_namespace_name   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/postgresql.py TemporaryPostgresInstance.server_major_version   0% 3 3 0   100% 0 0   0%
python/lsst/daf/butler/tests/postgresql.py (no function)   100% 25 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/registry_data/__init__.py (no function)   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/registry_data/spatial.py main   0% 14 14 0   0% 4 0   0%
python/lsst/daf/butler/tests/registry_data/spatial.py make_plots   0% 39 39 0   0% 20 0   0%
python/lsst/daf/butler/tests/registry_data/spatial.py write_yaml   0% 42 42 0   0% 10 0   0%
python/lsst/daf/butler/tests/registry_data/spatial.py lonlat_tuple   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/tests/registry_data/spatial.py make_tangent_wcs   0% 6 6 0   100% 0 0   0%
python/lsst/daf/butler/tests/registry_data/spatial.py project_polygon_center   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/registry_data/spatial.py project_polygon_vertices   0% 4 4 0   0% 2 0   0%
python/lsst/daf/butler/tests/registry_data/spatial.py plot_pixels   0% 6 6 0   0% 4 0   0%
python/lsst/daf/butler/tests/registry_data/spatial.py plot_hull   0% 10 10 0   0% 4 0   0%
python/lsst/daf/butler/tests/registry_data/spatial.py polygons   0% 3 3 0   100% 0 0   0%
python/lsst/daf/butler/tests/registry_data/spatial.py polygons.func   0% 5 5 0   0% 2 0   0%
python/lsst/daf/butler/tests/registry_data/spatial.py index_labels   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/tests/registry_data/spatial.py index_labels.func   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/registry_data/spatial.py labels   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/tests/registry_data/spatial.py labels.func   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/registry_data/spatial.py flatten_ranges   0% 2 2 0   0% 2 0   0%
python/lsst/daf/butler/tests/registry_data/spatial.py (no function)   0% 34 34 2   100% 0 0   0%
python/lsst/daf/butler/tests/server.py create_test_server   0% 30 30 0   0% 10 0   0%
python/lsst/daf/butler/tests/server.py _make_remote_butler   0% 7 7 0   100% 0 0   0%
python/lsst/daf/butler/tests/server.py _add_root_exception_handler   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/server.py _add_root_exception_handler.convert_exception_types   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/tests/server.py (no function)   0% 48 48 0   100% 0 0   0%
python/lsst/daf/butler/tests/server_available.py (no function)   76% 17 4 0   50% 2 1   74%
python/lsst/daf/butler/tests/server_utils.py add_auth_header_check_middleware   0% 2 2 0   100% 0 0   0%
python/lsst/daf/butler/tests/server_utils.py add_auth_header_check_middleware.check_auth_headers   0% 7 7 0   0% 6 0   0%
python/lsst/daf/butler/tests/server_utils.py _is_authenticated_endpoint   0% 9 9 0   0% 8 0   0%
python/lsst/daf/butler/tests/server_utils.py (no function)   0% 5 5 0   100% 0 0   0%
python/lsst/daf/butler/tests/testFormatters.py DoNothingFormatter.read   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/tests/testFormatters.py DoNothingFormatter.write   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/tests/testFormatters.py FormatterTest.read   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/tests/testFormatters.py FormatterTest.write   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/tests/testFormatters.py FormatterTest.validate_write_recipes   83% 6 1 0   83% 6 1   83%
python/lsst/daf/butler/tests/testFormatters.py LenientYamlFormatter.validate_extension   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/testFormatters.py MetricsExampleFormatter.read_from_stream   90% 21 2 0   88% 16 2   89%
python/lsst/daf/butler/tests/testFormatters.py MetricsExampleFormatter.to_bytes   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/testFormatters.py MetricsExampleDataFormatter.read   92% 12 1 0   83% 6 1   89%
python/lsst/daf/butler/tests/testFormatters.py MetricsExampleDataFormatter.write   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/testFormatters.py MetricsExampleModelProvenanceFormatter.add_provenance   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/testFormatters.py (no function)   100% 41 0 3   100% 0 0   100%
python/lsst/daf/butler/tests/utils.py makeTestTempDir   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/utils.py removeTestTempDir   100% 2 0 0   100% 2 0   100%
python/lsst/daf/butler/tests/utils.py safeTestTempDir   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/utils.py create_populated_sqlite_registry   100% 9 0 0   100% 4 0   100%
python/lsst/daf/butler/tests/utils.py ButlerTestHelper.assertAstropyTablesEqual   100% 23 0 0   100% 10 0   100%
python/lsst/daf/butler/tests/utils.py readTable   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/utils.py MetricTestRepo._makeExampleMetrics   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/utils.py MetricTestRepo.__init__   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/utils.py MetricTestRepo.create_from_butler   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/utils.py MetricTestRepo._do_init   100% 17 0 0   100% 2 0   100%
python/lsst/daf/butler/tests/utils.py MetricTestRepo.addDataset   100% 5 0 0   100% 2 0   100%
python/lsst/daf/butler/tests/utils.py mock_env   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/tests/utils.py (no function)   100% 47 0 7   100% 0 0   100%
python/lsst/daf/butler/time_utils.py _FastTimeUnixTai._check_val_type   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/time_utils.py _FastTimeUnixTai.set_jds   85% 13 2 0   50% 4 2   76%
python/lsst/daf/butler/time_utils.py TimeConverter.__init__   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/time_utils.py TimeConverter.astropy_to_nsec   100% 15 0 0   83% 6 1   95%
python/lsst/daf/butler/time_utils.py TimeConverter.nsec_to_astropy   100% 4 0 0   100% 0 0   100%
python/lsst/daf/butler/time_utils.py TimeConverter.times_equal   100% 9 0 0   50% 2 1   91%
python/lsst/daf/butler/time_utils.py _AstropyTimeToYAML.to_yaml   100% 4 0 0   50% 2 1   83%
python/lsst/daf/butler/time_utils.py _AstropyTimeToYAML.from_yaml   100% 2 0 0   50% 2 1   75%
python/lsst/daf/butler/time_utils.py (no function)   95% 43 2 0   100% 0 0   95%
python/lsst/daf/butler/timespan_database_representation.py TimespanDatabaseRepresentation.makeFieldSpecs   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/timespan_database_representation.py TimespanDatabaseRepresentation.getFieldNames   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/timespan_database_representation.py TimespanDatabaseRepresentation.fromLiteral   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/timespan_database_representation.py TimespanDatabaseRepresentation.from_columns   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/timespan_database_representation.py TimespanDatabaseRepresentation.update   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/timespan_database_representation.py TimespanDatabaseRepresentation.extract   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/timespan_database_representation.py TimespanDatabaseRepresentation.hasExclusionConstraint   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/timespan_database_representation.py TimespanDatabaseRepresentation.name   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/timespan_database_representation.py TimespanDatabaseRepresentation.isNull   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/timespan_database_representation.py TimespanDatabaseRepresentation.flatten   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/timespan_database_representation.py TimespanDatabaseRepresentation.isEmpty   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/timespan_database_representation.py TimespanDatabaseRepresentation.__lt__   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/timespan_database_representation.py TimespanDatabaseRepresentation.__gt__   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/timespan_database_representation.py TimespanDatabaseRepresentation.overlaps   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/timespan_database_representation.py TimespanDatabaseRepresentation.contains   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/timespan_database_representation.py TimespanDatabaseRepresentation.lower   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/timespan_database_representation.py TimespanDatabaseRepresentation.upper   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/timespan_database_representation.py TimespanDatabaseRepresentation.apply_any_aggregate   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/timespan_database_representation.py _CompoundTimespanDatabaseRepresentation.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/timespan_database_representation.py _CompoundTimespanDatabaseRepresentation.makeFieldSpecs   100% 3 0 0   50% 2 1   80%
python/lsst/daf/butler/timespan_database_representation.py _CompoundTimespanDatabaseRepresentation.getFieldNames   100% 3 0 0   50% 2 1   80%
python/lsst/daf/butler/timespan_database_representation.py _CompoundTimespanDatabaseRepresentation.update   92% 12 1 0   67% 6 2   83%
python/lsst/daf/butler/timespan_database_representation.py _CompoundTimespanDatabaseRepresentation.extract   82% 11 2 0   75% 8 2   79%
python/lsst/daf/butler/timespan_database_representation.py _CompoundTimespanDatabaseRepresentation.from_columns   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/timespan_database_representation.py _CompoundTimespanDatabaseRepresentation.fromLiteral   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/timespan_database_representation.py _CompoundTimespanDatabaseRepresentation.name   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/timespan_database_representation.py _CompoundTimespanDatabaseRepresentation.isNull   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/timespan_database_representation.py _CompoundTimespanDatabaseRepresentation.isEmpty   0% 1 1 0   100% 0 0   0%
python/lsst/daf/butler/timespan_database_representation.py _CompoundTimespanDatabaseRepresentation.__lt__   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/timespan_database_representation.py _CompoundTimespanDatabaseRepresentation.__gt__   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/timespan_database_representation.py _CompoundTimespanDatabaseRepresentation.overlaps   80% 5 1 0   75% 4 1   78%
python/lsst/daf/butler/timespan_database_representation.py _CompoundTimespanDatabaseRepresentation.contains   100% 3 0 0   100% 2 0   100%
python/lsst/daf/butler/timespan_database_representation.py _CompoundTimespanDatabaseRepresentation.lower   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/timespan_database_representation.py _CompoundTimespanDatabaseRepresentation.upper   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/timespan_database_representation.py _CompoundTimespanDatabaseRepresentation.flatten   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/timespan_database_representation.py _CompoundTimespanDatabaseRepresentation.apply_any_aggregate   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/timespan_database_representation.py _CompoundTimespanDatabaseRepresentation._is_null_literal   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/timespan_database_representation.py (no function)   98% 91 2 2   100% 0 0   98%
python/lsst/daf/butler/transfers/__init__.py (no function)   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/transfers/_context.py RepoExportContext.__init__   100% 8 0 0   100% 0 0   100%
python/lsst/daf/butler/transfers/_context.py RepoExportContext.saveCollection   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/transfers/_context.py RepoExportContext.saveDimensionData   75% 8 2 0   50% 8 2   62%
python/lsst/daf/butler/transfers/_context.py RepoExportContext.saveDataIds   92% 13 1 0   79% 14 3   85%
python/lsst/daf/butler/transfers/_context.py RepoExportContext.saveDatasets   89% 19 2 0   83% 12 2   87%
python/lsst/daf/butler/transfers/_context.py RepoExportContext._finish   100% 17 0 0   100% 14 0   100%
python/lsst/daf/butler/transfers/_context.py RepoExportContext._computeSortedCollections   94% 16 1 0   90% 10 1   92%
python/lsst/daf/butler/transfers/_context.py RepoExportContext._computeDatasetAssociations   100% 9 0 0   88% 8 1   94%
python/lsst/daf/butler/transfers/_context.py (no function)   100% 21 0 4   100% 0 0   100%
python/lsst/daf/butler/transfers/_interfaces.py RepoExportBackend.saveDimensionData   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/transfers/_interfaces.py RepoExportBackend.saveCollection   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/transfers/_interfaces.py RepoExportBackend.saveDatasets   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/transfers/_interfaces.py RepoExportBackend.saveDatasetAssociations   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/transfers/_interfaces.py RepoExportBackend.finish   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/transfers/_interfaces.py RepoImportBackend.register   100% 0 0 0   100% 0 0   100%
python/lsst/daf/butler/transfers/_interfaces.py RepoImportBackend.load   100% 0 0 1   100% 0 0   100%
python/lsst/daf/butler/transfers/_interfaces.py (no function)   100% 32 0 2   100% 0 0   100%
python/lsst/daf/butler/transfers/_yaml.py _RefMapper.__missing__   0% 3 3 0   100% 0 0   0%
python/lsst/daf/butler/transfers/_yaml.py _uuid_representer   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/transfers/_yaml.py _uuid_constructor   67% 3 1 0   50% 2 1   60%
python/lsst/daf/butler/transfers/_yaml.py YamlRepoExportBackend.__init__   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/transfers/_yaml.py YamlRepoExportBackend.saveDimensionData   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/transfers/_yaml.py YamlRepoExportBackend.saveCollection   90% 10 1 0   83% 6 1   88%
python/lsst/daf/butler/transfers/_yaml.py YamlRepoExportBackend.saveDatasets   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/transfers/_yaml.py YamlRepoExportBackend.saveDatasetAssociations   100% 8 0 0   83% 6 1   93%
python/lsst/daf/butler/transfers/_yaml.py YamlRepoExportBackend.finish   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/transfers/_yaml.py _DayObsOffsetCalculator.__init__   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/transfers/_yaml.py _DayObsOffsetCalculator.__setitem__   100% 1 0 0   100% 0 0   100%
python/lsst/daf/butler/transfers/_yaml.py _DayObsOffsetCalculator.get_offset   44% 16 9 0   50% 4 0   45%
python/lsst/daf/butler/transfers/_yaml.py YamlRepoImportBackend.__init__   93% 151 11 0   88% 112 14   90%
python/lsst/daf/butler/transfers/_yaml.py YamlRepoImportBackend.register   100% 9 0 0   100% 8 0   100%
python/lsst/daf/butler/transfers/_yaml.py YamlRepoImportBackend.load   97% 31 1 0   95% 22 1   96%
python/lsst/daf/butler/transfers/_yaml.py (no function)   100% 55 0 3   100% 0 0   100%
python/lsst/daf/butler/utils.py transactional   100% 3 0 0   100% 0 0   100%
python/lsst/daf/butler/utils.py transactional.inner   100% 2 0 0   100% 0 0   100%
python/lsst/daf/butler/utils.py stripIfNotNone   0% 3 3 0   0% 2 0   0%
python/lsst/daf/butler/utils.py globToRegex   92% 13 1 0   88% 8 1   90%
python/lsst/daf/butler/utils.py has_globs   100% 7 0 0   100% 6 0   100%
python/lsst/daf/butler/utils.py (no function)   100% 20 0 0   100% 0 0   100%
python/lsst/daf/butler/version.py (no function)   100% 5 0 0   100% 0 0   100%
tests/test_astropyTableFormatter.py AstropyTableFormatterTestCase.setUp   100% 6 0 0   100% 0 0   100%
tests/test_astropyTableFormatter.py AstropyTableFormatterTestCase.tearDown   100% 2 0 0   100% 0 0   100%
tests/test_astropyTableFormatter.py AstropyTableFormatterTestCase.testAstropyTableFormatter   100% 9 0 0   100% 0 0   100%
tests/test_astropyTableFormatter.py (no function)   100% 11 0 2   100% 0 0   100%
tests/test_authentication.py TestButlerClientAuthentication.test_explicit_butler_token   0% 3 3 0   100% 0 0   0%
tests/test_authentication.py TestButlerClientAuthentication.test_jupyter_token_with_safe_server   0% 3 3 0   100% 0 0   0%
tests/test_authentication.py TestButlerClientAuthentication.test_jupyter_token_with_unsafe_server   0% 3 3 0   100% 0 0   0%
tests/test_authentication.py TestButlerClientAuthentication.test_missing_token   0% 3 3 0   100% 0 0   0%
tests/test_authentication.py TestButlerClientAuthentication.test_header_generation   0% 3 3 0   100% 0 0   0%
tests/test_authentication.py TestButlerClientAuthentication.test_cadc_auth   0% 6 6 0   100% 0 0   0%
tests/test_authentication.py (no function)   86% 14 2 0   50% 2 1   81%
tests/test_butler.py clean_environment   100% 2 0 0   100% 2 0   100%
tests/test_butler.py makeExampleMetrics   100% 1 0 0   100% 0 0   100%
tests/test_butler.py ButlerConfigTests.testSearchPath   100% 11 0 0   100% 0 0   100%
tests/test_butler.py ButlerPutGetTests.addDatasetType   100% 3 0 0   100% 0 0   100%
tests/test_butler.py ButlerPutGetTests.setUpClass   100% 3 0 0   50% 2 1   80%
tests/test_butler.py ButlerPutGetTests.assertGetComponents   100% 9 0 0   100% 2 0   100%
tests/test_butler.py ButlerPutGetTests.tearDown   100% 2 0 0   50% 2 1   75%
tests/test_butler.py ButlerPutGetTests.create_empty_butler   100% 5 0 0   100% 2 0   100%
tests/test_butler.py ButlerPutGetTests.create_butler   100% 15 0 0   100% 2 0   100%
tests/test_butler.py ButlerPutGetTests.runPutGetTest   100% 141 0 0   100% 24 0   100%
tests/test_butler.py ButlerPutGetTests.testDeferredCollectionPassing   100% 26 0 0   100% 0 0   100%
tests/test_butler.py ButlerTests.setUp   100% 3 0 0   100% 0 0   100%
tests/test_butler.py ButlerTests.are_uris_equivalent   100% 1 0 0   100% 0 0   100%
tests/test_butler.py ButlerTests.testConstructor   100% 81 0 0   100% 8 0   100%
tests/test_butler.py ButlerTests.testClose   100% 13 0 0   50% 6 3   84%
tests/test_butler.py ButlerTests.testGarbageCollection   100% 22 0 0   50% 8 4   87%
tests/test_butler.py ButlerTests.testDafButlerRepositories   100% 8 0 0   100% 0 0   100%
tests/test_butler.py ButlerTests.testBasicPutGet   100% 2 0 0   100% 0 0   100%
tests/test_butler.py ButlerTests.testCompositePutGetConcrete   100% 20 0 0   50% 2 1   95%
tests/test_butler.py ButlerTests.testCompositePutGetVirtual   100% 30 0 0   90% 10 1   98%
tests/test_butler.py ButlerTests.testStorageClassOverrideGet   100% 29 0 0   100% 0 0   100%
tests/test_butler.py ButlerTests.testPytypePutCoercion   100% 21 0 0   100% 0 0   100%
tests/test_butler.py ButlerTests.test_ingest_zip   100% 38 0 0   100% 2 0   100%
tests/test_butler.py ButlerTests.testIngest   100% 84 0 0   100% 14 0   100%
tests/test_butler.py ButlerTests.testPickle   100% 8 0 0   100% 0 0   100%
tests/test_butler.py ButlerTests.testGetDatasetTypes   100% 28 0 0   100% 10 0   100%
tests/test_butler.py ButlerTests.testTransaction   100% 27 0 0   100% 2 0   100%
tests/test_butler.py ButlerTests.testMakeRepo   100% 28 0 0   100% 2 0   100%
tests/test_butler.py ButlerTests.testStringification   100% 12 0 0   70% 10 3   86%
tests/test_butler.py ButlerTests.testButlerRewriteDataId   100% 27 0 0   100% 6 0   100%
tests/test_butler.py ButlerTests.testGetDatasetCollectionCaching   100% 8 0 0   100% 0 0   100%
tests/test_butler.py ButlerTests.testCollectionChainRedefine   100% 8 0 0   100% 0 0   100%
tests/test_butler.py ButlerTests.testCollectionChainPrepend   100% 10 0 0   100% 0 0   100%
tests/test_butler.py ButlerTests.testCollectionChainExtend   100% 10 0 0   100% 0 0   100%
tests/test_butler.py ButlerTests.testCollectionChainRemove   100% 11 0 0   100% 0 0   100%
tests/test_butler.py ButlerTests._setup_to_test_collection_chain   100% 8 0 0   100% 2 0   100%
tests/test_butler.py ButlerTests._check_chain   100% 2 0 0   100% 0 0   100%
tests/test_butler.py ButlerTests._test_common_chain_functionality   100% 15 0 0   100% 2 0   100%
tests/test_butler.py ButlerTests.test_transfer_dimension_records_from   100% 48 0 0   100% 0 0   100%
tests/test_butler.py ButlerTests.test_transfer_dimension_records_from._fetch_record   100% 3 0 0   100% 0 0   100%
tests/test_butler.py FileDatastoreButlerTests.checkFileExists   100% 2 0 0   100% 0 0   100%
tests/test_butler.py FileDatastoreButlerTests.testPutTemplates   100% 36 0 0   100% 4 0   100%
tests/test_butler.py FileDatastoreButlerTests.testImportExport   100% 2 0 0   100% 0 0   100%
tests/test_butler.py FileDatastoreButlerTests.testImportExportVirtualComposite   100% 2 0 0   100% 0 0   100%
tests/test_butler.py FileDatastoreButlerTests.runImportExportTest   93% 29 2 0   100% 2 0   94%
tests/test_butler.py FileDatastoreButlerTests.testRemoveRuns   100% 35 0 0   100% 0 0   100%
tests/test_butler.py FileDatastoreButlerTests.remove_dataset_out_of_band   100% 4 0 0   100% 0 0   100%
tests/test_butler.py FileDatastoreButlerTests.testPruneDatasets   100% 112 0 0   95% 20 1   99%
tests/test_butler.py FileDatastoreButlerTests.test_butler_metrics   100% 26 0 0   100% 0 0   100%
tests/test_butler.py PosixDatastoreButlerTestCase.testPathConstructor   100% 12 0 0   100% 2 0   100%
tests/test_butler.py PosixDatastoreButlerTestCase.testExportTransferCopy   100% 18 0 0   100% 6 0   100%
tests/test_butler.py PosixDatastoreButlerTestCase.testPytypeCoercion   100% 26 0 0   100% 0 0   100%
tests/test_butler.py PosixDatastoreButlerTestCase.test_provenance   100% 35 0 0   100% 0 0   100%
tests/test_butler.py PosixDatastoreButlerTestCase.test_specialized_file_datasets_functions   100% 46 0 0   100% 6 0   100%
tests/test_butler.py PosixDatastoreButlerTestCase.test_temporary_for_ingest   100% 12 0 0   100% 0 0   100%
tests/test_butler.py PostgresPosixDatastoreButlerTestCase.setUpClass   50% 2 1 0   100% 0 0   50%
tests/test_butler.py PostgresPosixDatastoreButlerTestCase.setUp   0% 8 8 0   100% 0 0   0%
tests/test_butler.py PostgresPosixDatastoreButlerTestCase.tearDown   0% 3 3 0   0% 2 0   0%
tests/test_butler.py PostgresPosixDatastoreButlerTestCase.testMakeRepo   0% 1 1 0   100% 0 0   0%
tests/test_butler.py ClonedPostgresPosixDatastoreButlerTestCase.create_butler   0% 2 2 0   100% 0 0   0%
tests/test_butler.py InMemoryDatastoreButlerTestCase.testIngest   100% 1 0 0   100% 0 0   100%
tests/test_butler.py InMemoryDatastoreButlerTestCase.test_ingest_zip   100% 1 0 0   100% 0 0   100%
tests/test_butler.py ClonedSqliteButlerTestCase.create_butler   100% 2 0 0   100% 0 0   100%
tests/test_butler.py ChainedDatastoreButlerTestCase.testPruneDatasets   100% 1 0 0   100% 0 0   100%
tests/test_butler.py ButlerExplicitRootTestCase.setUp   100% 12 0 0   100% 0 0   100%
tests/test_butler.py ButlerExplicitRootTestCase.testFileLocations   100% 4 0 0   100% 0 0   100%
tests/test_butler.py ButlerMakeRepoOutfileTestCase.setUp   100% 4 0 0   100% 0 0   100%
tests/test_butler.py ButlerMakeRepoOutfileTestCase.tearDown   100% 3 0 0   50% 2 1   80%
tests/test_butler.py ButlerMakeRepoOutfileTestCase.testConfigExistence   100% 5 0 0   100% 0 0   100%
tests/test_butler.py ButlerMakeRepoOutfileTestCase.testPutGet   100% 2 0 0   100% 0 0   100%
tests/test_butler.py ButlerMakeRepoOutfileDirTestCase.setUp   100% 4 0 0   100% 0 0   100%
tests/test_butler.py ButlerMakeRepoOutfileDirTestCase.testConfigExistence   100% 2 0 0   100% 0 0   100%
tests/test_butler.py ButlerMakeRepoOutfileUriTestCase.setUp   100% 4 0 0   100% 0 0   100%
tests/test_butler.py S3DatastoreButlerTestCase.genRoot   100% 2 0 0   100% 0 0   100%
tests/test_butler.py S3DatastoreButlerTestCase.setUp   100% 17 0 0   50% 2 1   95%
tests/test_butler.py S3DatastoreButlerTestCase.tearDown   69% 16 5 0   33% 6 2   59%
tests/test_butler.py DatastoreTransfers.setUpClass   100% 1 0 0   100% 0 0   100%
tests/test_butler.py DatastoreTransfers.setUp   100% 4 0 0   100% 0 0   100%
tests/test_butler.py DatastoreTransfers.tearDown   100% 1 0 0   100% 0 0   100%
tests/test_butler.py DatastoreTransfers.create_butler   100% 7 0 0   50% 2 1   89%
tests/test_butler.py DatastoreTransfers.assertButlerTransfers   100% 119 0 0   96% 46 2   99%
tests/test_butler.py PosixDatastoreTransfers.create_butlers   100% 2 0 0   100% 0 0   100%
tests/test_butler.py PosixDatastoreTransfers.testTransferUuidToUuid   100% 2 0 0   100% 0 0   100%
tests/test_butler.py PosixDatastoreTransfers.testTransferFromChainedUuidToUuid   100% 2 0 0   100% 0 0   100%
tests/test_butler.py PosixDatastoreTransfers.testTransferFromIncompatibleUuidToUuid   100% 3 0 0   100% 0 0   100%
tests/test_butler.py PosixDatastoreTransfers.testTransferFromIncompatibleChainUuidToUuid   100% 3 0 0   100% 0 0   100%
tests/test_butler.py PosixDatastoreTransfers.testTransferFromFileUuidToUuid   100% 2 0 0   100% 0 0   100%
tests/test_butler.py PosixDatastoreTransfers.testTransferMissing   100% 3 0 0   100% 0 0   100%
tests/test_butler.py PosixDatastoreTransfers.testTransferMissingDisassembly   100% 3 0 0   100% 0 0   100%
tests/test_butler.py PosixDatastoreTransfers.testTransferDifferingStorageClasses   100% 2 0 0   100% 0 0   100%
tests/test_butler.py PosixDatastoreTransfers.testTransferDifferingStorageClassesDisassembly   100% 2 0 0   100% 0 0   100%
tests/test_butler.py PosixDatastoreTransfers.testUnsafeDirectTransfer   100% 8 0 0   100% 0 0   100%
tests/test_butler.py PosixDatastoreTransfers.testAbsoluteURITransferDirect   100% 1 0 0   100% 0 0   100%
tests/test_butler.py PosixDatastoreTransfers.testAbsoluteURITransferUnsafeDirect   100% 1 0 0   100% 0 0   100%
tests/test_butler.py PosixDatastoreTransfers.testAbsoluteURITransferCopy   100% 1 0 0   100% 0 0   100%
tests/test_butler.py PosixDatastoreTransfers._absolute_transfer   100% 21 0 0   100% 2 0   100%
tests/test_butler.py PosixDatastoreTransfers.test_shared_dimension_group   100% 20 0 0   100% 0 0   100%
tests/test_butler.py ButlerServerDatastoreTransfers.test_transfers_from_remote_to_direct   0% 7 7 0   100% 0 0   0%
tests/test_butler.py ButlerServerDatastoreTransfers.test_transfers_from_remote_to_direct._remap_transfer_url   0% 2 2 0   100% 0 0   0%
tests/test_butler.py TransferDatasetsInPlace.test_file_datastore   100% 9 0 0   100% 0 0   100%
tests/test_butler.py TransferDatasetsInPlace.test_chained_datastore   100% 9 0 0   100% 0 0   100%
tests/test_butler.py TransferDatasetsInPlace._test_transfer_datasets_in_place   100% 17 0 0   100% 0 0   100%
tests/test_butler.py NullDatastoreTestCase.setUpClass   100% 2 0 0   100% 0 0   100%
tests/test_butler.py NullDatastoreTestCase.setUp   100% 2 0 0   100% 0 0   100%
tests/test_butler.py NullDatastoreTestCase.tearDown   100% 1 0 0   100% 0 0   100%
tests/test_butler.py NullDatastoreTestCase.test_fallback   100% 24 0 0   100% 0 0   100%
tests/test_butler.py ButlerServerTests.setUp   0% 1 1 0   100% 0 0   0%
tests/test_butler.py ButlerServerTests.tearDown   0% 1 1 0   100% 0 0   0%
tests/test_butler.py ButlerServerTests.are_uris_equivalent   0% 1 1 0   100% 0 0   0%
tests/test_butler.py ButlerServerTests.create_empty_butler   0% 1 1 0   100% 0 0   0%
tests/test_butler.py ButlerServerTests.remove_dataset_out_of_band   0% 2 2 0   100% 0 0   0%
tests/test_butler.py ButlerServerTests.testConstructor   0% 1 1 0   100% 0 0   0%
tests/test_butler.py ButlerServerTests.testDafButlerRepositories   0% 1 1 0   100% 0 0   0%
tests/test_butler.py ButlerServerTests.testGetDatasetTypes   0% 1 1 0   100% 0 0   0%
tests/test_butler.py ButlerServerTests.testMakeRepo   0% 1 1 0   100% 0 0   0%
tests/test_butler.py ButlerServerTests.testPickle   0% 1 1 0   100% 0 0   0%
tests/test_butler.py ButlerServerTests.testStringification   0% 1 1 0   100% 0 0   0%
tests/test_butler.py ButlerServerTests.testTransaction   0% 1 1 0   100% 0 0   0%
tests/test_butler.py ButlerServerTests.testPutTemplates   0% 1 1 0   100% 0 0   0%
tests/test_butler.py ButlerServerPostgresTests.setUpClass   0% 2 2 0   100% 0 0   0%
tests/test_butler.py setup_module   100% 1 0 0   100% 0 0   100%
tests/test_butler.py _get_test_data_path   100% 1 0 0   100% 0 0   100%
tests/test_butler.py (no function)   98% 285 7 6   100% 0 0   98%
tests/test_butler_factory.py ButlerFactoryTestCase.setUpClass   100% 4 0 0   100% 0 0   100%
tests/test_butler_factory.py ButlerFactoryTestCase.test_factory_via_global_repository_index   100% 6 0 0   100% 2 0   100%
tests/test_butler_factory.py ButlerFactoryTestCase.test_factory_via_custom_index   100% 7 0 0   100% 0 0   100%
tests/test_butler_factory.py ButlerFactoryTestCase._test_factory   100% 6 0 0   100% 0 0   100%
tests/test_butler_factory.py (no function)   100% 12 0 2   100% 0 0   100%
tests/test_cliCmdAssociate.py AssociateTestCase.setUp   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdAssociate.py AssociateTestCase.test_defaults   100% 3 0 0   100% 0 0   100%
tests/test_cliCmdAssociate.py AssociateTestCase.test_values   100% 3 0 0   100% 0 0   100%
tests/test_cliCmdAssociate.py (no function)   100% 10 0 2   100% 0 0   100%
tests/test_cliCmdConfigDump.py ConfigDumpTest.defaultExpected   0% 1 1 0   100% 0 0   0%
tests/test_cliCmdConfigDump.py ConfigDumpTest.command   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdConfigDump.py ConfigDumpUseTest.setUp   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdConfigDump.py ConfigDumpUseTest.test_stdout   100% 9 0 0   100% 0 0   100%
tests/test_cliCmdConfigDump.py ConfigDumpUseTest.test_file   100% 10 0 0   100% 0 0   100%
tests/test_cliCmdConfigDump.py ConfigDumpUseTest.test_subset   100% 16 0 0   100% 0 0   100%
tests/test_cliCmdConfigDump.py ConfigDumpUseTest.test_invalidSubset   100% 6 0 0   100% 0 0   100%
tests/test_cliCmdConfigDump.py ConfigDumpUseTest.test_presets   100% 30 0 0   100% 0 0   100%
tests/test_cliCmdConfigDump.py ConfigDumpUseTest.test_presetsDashedName   100% 12 0 0   100% 0 0   100%
tests/test_cliCmdConfigDump.py ConfigDumpUseTest.test_presetsDashedName.cmd   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdConfigDump.py (no function)   100% 25 0 2   100% 0 0   100%
tests/test_cliCmdConfigValidate.py ValidateTest.defaultExpected   0% 1 1 0   100% 0 0   0%
tests/test_cliCmdConfigValidate.py ValidateTest.command   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdConfigValidate.py ConfigValidateUseTest.setUp   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdConfigValidate.py ConfigValidateUseTest.testConfigValidate   100% 6 0 0   100% 0 0   100%
tests/test_cliCmdConfigValidate.py ConfigValidateUseTest.testConfigValidate_ignore   100% 6 0 0   100% 0 0   100%
tests/test_cliCmdConfigValidate.py (no function)   100% 15 0 2   100% 0 0   100%
tests/test_cliCmdCreate.py CreateTest.defaultExpected   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdCreate.py CreateTest.command   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdCreate.py CreateTest.test_minimal   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdCreate.py CreateTest.test_requiredMissing   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdCreate.py CreateTest.test_all   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdCreate.py (no function)   100% 12 0 2   100% 0 0   100%
tests/test_cliCmdImport.py ImportTestCase.defaultExpected   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdImport.py ImportTestCase.command   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdImport.py ImportTestCase.test_minimal   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdImport.py ImportTestCase.test_all   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdImport.py ImportTestCase.test_missingArgument   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdImport.py (no function)   100% 13 0 2   100% 0 0   100%
tests/test_cliCmdIngestFiles.py CliIngestFilesTest.setUp   100% 17 0 0   100% 2 0   100%
tests/test_cliCmdIngestFiles.py CliIngestFilesTest.testIngestRelativePath   100% 3 0 0   100% 0 0   100%
tests/test_cliCmdIngestFiles.py CliIngestFilesTest.testIngestAbsoluteWithDataId   100% 3 0 0   100% 0 0   100%
tests/test_cliCmdIngestFiles.py CliIngestFilesTest.testIngestRelativeWithDataId   100% 3 0 0   100% 0 0   100%
tests/test_cliCmdIngestFiles.py CliIngestFilesTest.assertIngest   100% 14 0 0   100% 2 0   100%
tests/test_cliCmdIngestFiles.py (no function)   100% 17 0 2   100% 0 0   100%
tests/test_cliCmdPruneDatasets.py getTables   100% 3 0 0   100% 2 0   100%
tests/test_cliCmdPruneDatasets.py getDatasets   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdPruneDatasets.py getRefs   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdPruneDatasets.py makeQueryDatasets   100% 3 0 0   50% 2 1   80%
tests/test_cliCmdPruneDatasets.py PruneDatasetsTestCase.setUp   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdPruneDatasets.py PruneDatasetsTestCase.makeQueryDatasetsArgs   100% 3 0 0   100% 0 0   100%
tests/test_cliCmdPruneDatasets.py PruneDatasetsTestCase.makePruneDatasetsArgs   100% 3 0 0   100% 0 0   100%
tests/test_cliCmdPruneDatasets.py PruneDatasetsTestCase.run_test   100% 22 0 0   100% 12 0   100%
tests/test_cliCmdPruneDatasets.py PruneDatasetsTestCase.test_defaults_doContinue   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdPruneDatasets.py PruneDatasetsTestCase.test_defaults_doNotContinue   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdPruneDatasets.py PruneDatasetsTestCase.test_dryRun_unstore   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdPruneDatasets.py PruneDatasetsTestCase.test_dryRun_disassociate   100% 2 0 0   100% 0 0   100%
tests/test_cliCmdPruneDatasets.py PruneDatasetsTestCase.test_dryRun_unstoreAndDisassociate   100% 2 0 0   100% 0 0   100%
tests/test_cliCmdPruneDatasets.py PruneDatasetsTestCase.test_noConfirm   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdPruneDatasets.py PruneDatasetsTestCase.test_quiet   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdPruneDatasets.py PruneDatasetsTestCase.test_quietWithDryRun   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdPruneDatasets.py PruneDatasetsTestCase.test_noCollections   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdPruneDatasets.py PruneDatasetsTestCase.test_noDatasets   100% 5 0 0   100% 0 0   100%
tests/test_cliCmdPruneDatasets.py PruneDatasetsTestCase.test_purgeWithDisassociate   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdPruneDatasets.py PruneDatasetsTestCase.test_purgeNoOp   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdPruneDatasets.py PruneDatasetsTestCase.test_purgeImpliedArgs   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdPruneDatasets.py PruneDatasetsTestCase.test_purgeImpliedArgsWithCollections   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdPruneDatasets.py PruneDatasetsTestCase.test_purgeOnNonRunCollection   100% 2 0 0   100% 0 0   100%
tests/test_cliCmdPruneDatasets.py PruneDatasetsTestCase.test_disassociateImpliedArgs   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdPruneDatasets.py PruneDatasetsTestCase.test_disassociateImpliedArgsWithCollections   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdPruneDatasets.py QueryDatasetsCLITest.setUp   100% 4 0 0   100% 0 0   100%
tests/test_cliCmdPruneDatasets.py QueryDatasetsCLITest.tearDown   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdPruneDatasets.py QueryDatasetsCLITest.test_no_confirm   100% 5 0 0   100% 0 0   100%
tests/test_cliCmdPruneDatasets.py QueryDatasetsCLITest.test_confirm   100% 5 0 0   100% 0 0   100%
tests/test_cliCmdPruneDatasets.py (no function)   100% 56 0 2   100% 0 0   100%
tests/test_cliCmdQueryCollections.py QueryCollectionsCmdTest.defaultExpected   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdQueryCollections.py QueryCollectionsCmdTest.command   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdQueryCollections.py QueryCollectionsCmdTest.test_minimal   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdQueryCollections.py QueryCollectionsCmdTest.test_all   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdQueryCollections.py QueryCollectionsCmdTest.test_show_dataset_types   100% 3 0 0   100% 0 0   100%
tests/test_cliCmdQueryCollections.py QueryCollectionsCmdTest.test_exclude_dataset_types   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdQueryCollections.py QueryCollectionsScriptTest.setUp   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdQueryCollections.py QueryCollectionsScriptTest.testGetCollections   100% 19 0 0   100% 0 0   100%
tests/test_cliCmdQueryCollections.py ChainedCollectionsTest.setUp   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdQueryCollections.py ChainedCollectionsTest.assertChain   100% 3 0 0   100% 0 0   100%
tests/test_cliCmdQueryCollections.py ChainedCollectionsTest.testChained   100% 55 0 0   100% 0 0   100%
tests/test_cliCmdQueryCollections.py (no function)   100% 27 0 2   100% 0 0   100%
tests/test_cliCmdQueryDataIds.py QueryDataIdsTest._queryDataIds   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdQueryDataIds.py QueryDataIdsTest.setUp   100% 2 0 0   100% 0 0   100%
tests/test_cliCmdQueryDataIds.py QueryDataIdsTest.tearDown   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdQueryDataIds.py QueryDataIdsTest.loadData   100% 6 0 0   100% 2 0   100%
tests/test_cliCmdQueryDataIds.py QueryDataIdsTest.testDimensions   100% 5 0 0   100% 0 0   100%
tests/test_cliCmdQueryDataIds.py QueryDataIdsTest.testNoDimensions   100% 3 0 0   100% 0 0   100%
tests/test_cliCmdQueryDataIds.py QueryDataIdsTest.testNoResultsEasy   100% 4 0 0   100% 0 0   100%
tests/test_cliCmdQueryDataIds.py QueryDataIdsTest.testNoResultsHard   100% 4 0 0   100% 0 0   100%
tests/test_cliCmdQueryDataIds.py QueryDataIdsTest.testWhere   100% 5 0 0   100% 0 0   100%
tests/test_cliCmdQueryDataIds.py QueryDataIdsTest.testDatasetsAndCollections   100% 18 0 0   100% 0 0   100%
tests/test_cliCmdQueryDataIds.py (no function)   100% 21 0 2   100% 0 0   100%
tests/test_cliCmdQueryDatasetTypes.py QueryDatasetTypesCmdTest.defaultExpected   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdQueryDatasetTypes.py QueryDatasetTypesCmdTest.command   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdQueryDatasetTypes.py QueryDatasetTypesCmdTest.test_minimal   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdQueryDatasetTypes.py QueryDatasetTypesCmdTest.test_requiredMissing   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdQueryDatasetTypes.py QueryDatasetTypesCmdTest.test_all   100% 2 0 0   100% 0 0   100%
tests/test_cliCmdQueryDatasetTypes.py QueryDatasetTypesScriptTest.testQueryDatasetTypes   100% 35 0 0   100% 0 0   100%
tests/test_cliCmdQueryDatasetTypes.py QueryDatasetTypesScriptTest.testRemoveDatasetTypes   100% 23 0 0   100% 2 0   100%
tests/test_cliCmdQueryDatasetTypes.py QueryDatasetTypesScriptTest.assertDatasetTypes   100% 4 0 0   100% 0 0   100%
tests/test_cliCmdQueryDatasetTypes.py (no function)   100% 21 0 2   100% 0 0   100%
tests/test_cliCmdQueryDatasets.py expectedFilesystemDatastoreTables   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdQueryDatasets.py QueryDatasetsTest._queryDatasets   100% 2 0 0   100% 0 0   100%
tests/test_cliCmdQueryDatasets.py QueryDatasetsTest.setUp   100% 2 0 0   100% 0 0   100%
tests/test_cliCmdQueryDatasets.py QueryDatasetsTest.tearDown   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdQueryDatasets.py QueryDatasetsTest.testChained   100% 6 0 0   100% 0 0   100%
tests/test_cliCmdQueryDatasets.py QueryDatasetsTest.testShowURI   100% 6 0 0   100% 0 0   100%
tests/test_cliCmdQueryDatasets.py QueryDatasetsTest.testShowUriNoDisassembly   100% 7 0 0   100% 0 0   100%
tests/test_cliCmdQueryDatasets.py QueryDatasetsTest.testNoShowURI   100% 5 0 0   100% 0 0   100%
tests/test_cliCmdQueryDatasets.py QueryDatasetsTest.testWhere   100% 9 0 0   100% 2 0   100%
tests/test_cliCmdQueryDatasets.py QueryDatasetsTest.testGlobDatasetType   100% 10 0 0   100% 0 0   100%
tests/test_cliCmdQueryDatasets.py QueryDatasetsTest.test_limit_order   100% 19 0 0   100% 0 0   100%
tests/test_cliCmdQueryDatasets.py QueryDatasetsTest.testFindFirstAndCollections   100% 18 0 0   100% 0 0   100%
tests/test_cliCmdQueryDatasets.py QueryDatasetsCLITest.setUp   100% 4 0 0   100% 0 0   100%
tests/test_cliCmdQueryDatasets.py QueryDatasetsCLITest.tearDown   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdQueryDatasets.py QueryDatasetsCLITest.test_simple   100% 4 0 0   100% 0 0   100%
tests/test_cliCmdQueryDatasets.py (no function)   100% 31 0 2   100% 0 0   100%
tests/test_cliCmdQueryDimensionRecords.py QueryDimensionRecordsTest.setUp   100% 4 0 0   100% 0 0   100%
tests/test_cliCmdQueryDimensionRecords.py QueryDimensionRecordsTest.tearDown   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdQueryDimensionRecords.py QueryDimensionRecordsTest.testBasic   100% 6 0 0   100% 0 0   100%
tests/test_cliCmdQueryDimensionRecords.py QueryDimensionRecordsTest.testWhere   100% 5 0 0   100% 0 0   100%
tests/test_cliCmdQueryDimensionRecords.py QueryDimensionRecordsTest.testCollection   100% 15 0 0   100% 0 0   100%
tests/test_cliCmdQueryDimensionRecords.py QueryDimensionRecordsTest.testSkymap   100% 10 0 0   100% 0 0   100%
tests/test_cliCmdQueryDimensionRecords.py (no function)   100% 20 0 2   100% 0 0   100%
tests/test_cliCmdRemoveCollections.py RemoveCollectionTest.setUp   100% 4 0 0   100% 0 0   100%
tests/test_cliCmdRemoveCollections.py RemoveCollectionTest.tearDown   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdRemoveCollections.py RemoveCollectionTest._verify_remove   100% 14 0 0   100% 0 0   100%
tests/test_cliCmdRemoveCollections.py RemoveCollectionTest._verify_remove._query_collection_column_names   80% 5 1 0   75% 4 1   78%
tests/test_cliCmdRemoveCollections.py RemoveCollectionTest.testRemoveScript   100% 5 0 0   100% 2 0   100%
tests/test_cliCmdRemoveCollections.py RemoveCollectionTest.testRemoveCmd   100% 33 0 0   100% 2 0   100%
tests/test_cliCmdRemoveCollections.py RemoveCollectionTest.testRemoveFromParents   100% 17 0 0   100% 0 0   100%
tests/test_cliCmdRemoveCollections.py (no function)   100% 21 0 2   100% 0 0   100%
tests/test_cliCmdRemoveRuns.py RemoveCollectionTest.setUp   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdRemoveRuns.py RemoveCollectionTest.test_removeRuns   100% 68 0 0   100% 0 0   100%
tests/test_cliCmdRemoveRuns.py (no function)   100% 11 0 2   100% 0 0   100%
tests/test_cliCmdRetrieveArtifacts.py CliRetrieveArtifactsTest.setUp   100% 3 0 0   100% 0 0   100%
tests/test_cliCmdRetrieveArtifacts.py CliRetrieveArtifactsTest.tearDown   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdRetrieveArtifacts.py CliRetrieveArtifactsTest.find_files   100% 1 0 0   100% 0 0   100%
tests/test_cliCmdRetrieveArtifacts.py CliRetrieveArtifactsTest.testRetrieveAll   100% 11 0 0   100% 2 0   100%
tests/test_cliCmdRetrieveArtifacts.py CliRetrieveArtifactsTest.testRetrieveSubset   100% 9 0 0   100% 0 0   100%
tests/test_cliCmdRetrieveArtifacts.py CliRetrieveArtifactsTest.testRetrieveAsZip   100% 8 0 0   100% 0 0   100%
tests/test_cliCmdRetrieveArtifacts.py CliRetrieveArtifactsTest.testOverwriteLink   75% 8 2 0   50% 2 1   70%
tests/test_cliCmdRetrieveArtifacts.py CliRetrieveArtifactsTest.testClobber   100% 9 0 0   100% 0 0   100%
tests/test_cliCmdRetrieveArtifacts.py (no function)   100% 20 0 2   100% 0 0   100%
tests/test_cliLog.py ConvertPyLogLevelTestCase.test_convertToPyLogLevel   100% 5 0 0   100% 0 0   100%
tests/test_cliLog.py (no function)   83% 12 2 2   100% 0 0   83%
tests/test_cliPluginLoader.py command_test   100% 1 0 0   100% 0 0   100%
tests/test_cliPluginLoader.py duplicate_command_test_env   100% 5 0 0   100% 0 0   100%
tests/test_cliPluginLoader.py uncached_cli   100% 1 0 0   100% 0 0   100%
tests/test_cliPluginLoader.py FailedLoadTest.setUp   100% 1 0 0   100% 0 0   100%
tests/test_cliPluginLoader.py FailedLoadTest.test_unimportablePlugin   100% 6 0 0   100% 0 0   100%
tests/test_cliPluginLoader.py FailedLoadTest.test_unimportableLocalPackage   100% 9 0 0   100% 0 0   100%
tests/test_cliPluginLoader.py FailedLoadTest.test_unimportableLocalPackage.cli   0% 1 1 0   100% 0 0   0%
tests/test_cliPluginLoader.py PluginLoaderTest.setUp   100% 1 0 0   100% 0 0   100%
tests/test_cliPluginLoader.py PluginLoaderTest.test_loadAndExecutePluginCommand   100% 4 0 0   100% 0 0   100%
tests/test_cliPluginLoader.py PluginLoaderTest.test_loadAndExecuteLocalCommand   100% 4 0 0   100% 0 0   100%
tests/test_cliPluginLoader.py PluginLoaderTest.test_loadTopHelp   100% 4 0 0   100% 0 0   100%
tests/test_cliPluginLoader.py PluginLoaderTest.test_getLocalCommands   100% 2 0 0   100% 0 0   100%
tests/test_cliPluginLoader.py PluginLoaderTest.test_mergeCommandLists   100% 6 0 0   100% 0 0   100%
tests/test_cliPluginLoader.py PluginLoaderTest.test_listCommands_duplicate   100% 5 0 0   100% 0 0   100%
tests/test_cliPluginLoader.py (no function)   100% 28 0 2   100% 0 0   100%
tests/test_cliUtilSplitCommas.py cli   100% 1 0 0   100% 0 0   100%
tests/test_cliUtilSplitCommas.py SplitCommasTestCase.setUp   100% 1 0 0   100% 0 0   100%
tests/test_cliUtilSplitCommas.py SplitCommasTestCase.test_separate   100% 4 0 0   100% 0 0   100%
tests/test_cliUtilSplitCommas.py SplitCommasTestCase.test_single   100% 3 0 0   100% 0 0   100%
tests/test_cliUtilSplitCommas.py SplitCommasTestCase.test_multiple   100% 3 0 0   100% 0 0   100%
tests/test_cliUtilSplitCommas.py SplitCommasTestCase.test_singlePair   100% 3 0 0   100% 0 0   100%
tests/test_cliUtilSplitCommas.py SplitCommasTestCase.test_multiplePair   100% 3 0 0   100% 0 0   100%
tests/test_cliUtilSplitCommas.py SplitCommasTestCase.test_none   100% 3 0 0   100% 0 0   100%
tests/test_cliUtilSplitCommas.py SplitCommasTestCase.test_parens   100% 7 0 0   100% 4 0   100%
tests/test_cliUtilSplitCommas.py (no function)   100% 17 0 2   100% 0 0   100%
tests/test_cliUtilSplitKv.py SplitKvTestCase.test_single_dict   100% 1 0 0   100% 0 0   100%
tests/test_cliUtilSplitKv.py SplitKvTestCase.test_single_tuple   100% 1 0 0   100% 0 0   100%
tests/test_cliUtilSplitKv.py SplitKvTestCase.test_multiple_dict   100% 1 0 0   100% 0 0   100%
tests/test_cliUtilSplitKv.py SplitKvTestCase.test_multiple_tuple   100% 1 0 0   100% 0 0   100%
tests/test_cliUtilSplitKv.py SplitKvTestCase.test_unseparated   100% 1 0 0   100% 0 0   100%
tests/test_cliUtilSplitKv.py SplitKvTestCase.test_notMultiple   100% 2 0 0   100% 0 0   100%
tests/test_cliUtilSplitKv.py SplitKvTestCase.test_wrongSeparator   100% 2 0 0   100% 0 0   100%
tests/test_cliUtilSplitKv.py SplitKvTestCase.test_missingSeparator   100% 2 0 0   100% 0 0   100%
tests/test_cliUtilSplitKv.py SplitKvTestCase.test_unseparatedOkay   100% 1 0 0   100% 0 0   100%
tests/test_cliUtilSplitKv.py SplitKvTestCase.test_unseparatedOkay_list   100% 1 0 0   100% 0 0   100%
tests/test_cliUtilSplitKv.py SplitKvTestCase.test_unseparatedOkay_defaultKey   100% 1 0 0   100% 0 0   100%
tests/test_cliUtilSplitKv.py SplitKvTestCase.test_dashSeparator   100% 1 0 0   100% 0 0   100%
tests/test_cliUtilSplitKv.py SplitKvTestCase.test_reverseKv   100% 1 0 0   100% 0 0   100%
tests/test_cliUtilSplitKv.py SplitKvTestCase.test_invalidResultType   100% 2 0 0   100% 0 0   100%
tests/test_cliUtilSplitKv.py SplitKvCmdTestCase.setUp   100% 1 0 0   100% 0 0   100%
tests/test_cliUtilSplitKv.py SplitKvCmdTestCase.test_cli   100% 16 0 0   100% 0 0   100%
tests/test_cliUtilSplitKv.py SplitKvCmdTestCase.test_cli.cli   100% 1 0 0   100% 0 0   100%
tests/test_cliUtilSplitKv.py SplitKvCmdTestCase.test_choice   100% 17 0 0   100% 2 0   100%
tests/test_cliUtilSplitKv.py SplitKvCmdTestCase.test_choice.cli   100% 1 0 0   100% 0 0   100%
tests/test_cliUtilSplitKv.py SplitKvCmdTestCase.test_separatorDash   100% 8 0 0   100% 0 0   100%
tests/test_cliUtilSplitKv.py SplitKvCmdTestCase.test_separatorDash.split_kv_dash   100% 1 0 0   100% 0 0   100%
tests/test_cliUtilSplitKv.py SplitKvCmdTestCase.test_separatorDash.cli   100% 1 0 0   100% 0 0   100%
tests/test_cliUtilSplitKv.py SplitKvCmdTestCase.test_separatorFunctoolsDash   100% 7 0 0   100% 0 0   100%
tests/test_cliUtilSplitKv.py SplitKvCmdTestCase.test_separatorFunctoolsDash.cli   100% 1 0 0   100% 0 0   100%
tests/test_cliUtilSplitKv.py SplitKvCmdTestCase.test_separatorSpace   100% 3 0 0   100% 0 0   100%
tests/test_cliUtilSplitKv.py SplitKvCmdTestCase.test_separatorSpace.cli   0% 1 1 0   100% 0 0   0%
tests/test_cliUtilSplitKv.py SplitKvCmdTestCase.test_separatorComma   100% 3 0 0   100% 0 0   100%
tests/test_cliUtilSplitKv.py SplitKvCmdTestCase.test_separatorComma.cli   0% 1 1 0   100% 0 0   0%
tests/test_cliUtilSplitKv.py SplitKvCmdTestCase.test_normalizeWithoutChoice   100% 7 0 0   100% 0 0   100%
tests/test_cliUtilSplitKv.py SplitKvCmdTestCase.test_normalizeWithoutChoice.cli   100% 1 0 0   100% 0 0   100%
tests/test_cliUtilSplitKv.py SplitKvCmdTestCase.test_addToDefaultValue   100% 7 0 0   100% 0 0   100%
tests/test_cliUtilSplitKv.py SplitKvCmdTestCase.test_addToDefaultValue.cli   100% 1 0 0   100% 0 0   100%
tests/test_cliUtilSplitKv.py SplitKvCmdTestCase.test_replaceDefaultValue   100% 7 0 0   100% 0 0   100%
tests/test_cliUtilSplitKv.py SplitKvCmdTestCase.test_replaceDefaultValue.cli   100% 1 0 0   100% 0 0   100%
tests/test_cliUtilSplitKv.py (no function)   100% 35 0 2   100% 0 0   100%
tests/test_cliUtilToUpper.py cli   100% 1 0 0   100% 0 0   100%
tests/test_cliUtilToUpper.py ToUpperTestCase.setUp   100% 1 0 0   100% 0 0   100%
tests/test_cliUtilToUpper.py ToUpperTestCase.test_isolated   100% 3 0 0   100% 0 0   100%
tests/test_cliUtilToUpper.py ToUpperTestCase.test_lowerToUpper   100% 3 0 0   100% 0 0   100%
tests/test_cliUtilToUpper.py ToUpperTestCase.test_upperToUpper   100% 3 0 0   100% 0 0   100%
tests/test_cliUtilToUpper.py ToUpperTestCase.test_mixedToUpper   100% 3 0 0   100% 0 0   100%
tests/test_cliUtilToUpper.py (no function)   100% 12 0 2   100% 0 0   100%
tests/test_cliUtils.py ArgumentHelpGeneratorTestCase.testHelp   100% 2 0 0   100% 0 0   100%
tests/test_cliUtils.py ArgumentHelpGeneratorTestCase.testHelp.cli   0% 1 1 0   100% 0 0   0%
tests/test_cliUtils.py ArgumentHelpGeneratorTestCase.testHelpWrapped   100% 2 0 0   100% 0 0   100%
tests/test_cliUtils.py ArgumentHelpGeneratorTestCase.testHelpWrapped.cli   0% 1 1 0   100% 0 0   0%
tests/test_cliUtils.py ArgumentHelpGeneratorTestCase.runTest   100% 4 0 0   100% 0 0   100%
tests/test_cliUtils.py UnwrapStringTestCase.test_leadingNewline   100% 2 0 0   100% 0 0   100%
tests/test_cliUtils.py UnwrapStringTestCase.test_leadingContent   100% 2 0 0   100% 0 0   100%
tests/test_cliUtils.py UnwrapStringTestCase.test_trailingNewline   100% 2 0 0   100% 0 0   100%
tests/test_cliUtils.py UnwrapStringTestCase.test_oneLine   100% 2 0 0   100% 0 0   100%
tests/test_cliUtils.py UnwrapStringTestCase.test_oneLineWithLeading   100% 2 0 0   100% 0 0   100%
tests/test_cliUtils.py UnwrapStringTestCase.test_oneLineWithTrailing   100% 2 0 0   100% 0 0   100%
tests/test_cliUtils.py UnwrapStringTestCase.test_lineBreaks   100% 2 0 0   100% 0 0   100%
tests/test_cliUtils.py MWOptionTest.setUp   100% 1 0 0   100% 0 0   100%
tests/test_cliUtils.py MWOptionTest.test_addEllipsisToMultiple   100% 7 0 0   100% 0 0   100%
tests/test_cliUtils.py MWOptionTest.test_addEllipsisToMultiple.cmd   0% 1 1 0   100% 0 0   0%
tests/test_cliUtils.py MWOptionTest.test_addEllipsisToNargs   100% 8 0 0   100% 2 0   100%
tests/test_cliUtils.py MWOptionTest.test_addEllipsisToNargs.cmd   0% 1 1 0   100% 0 0   0%
tests/test_cliUtils.py MWArgumentDecoratorTest.setUp   100% 1 0 0   100% 0 0   100%
tests/test_cliUtils.py MWArgumentDecoratorTest.test_help   100% 13 0 0   100% 4 0   100%
tests/test_cliUtils.py MWArgumentDecoratorTest.test_help.cmd   0% 1 1 0   100% 0 0   0%
tests/test_cliUtils.py MWArgumentDecoratorTest.testUse   100% 8 0 0   100% 0 0   100%
tests/test_cliUtils.py MWArgumentDecoratorTest.testUse.cli   100% 1 0 0   100% 0 0   100%
tests/test_cliUtils.py MWOptionDecoratorTest.testGetName   100% 1 0 0   100% 0 0   100%
tests/test_cliUtils.py MWOptionDecoratorTest.testGetOpts   100% 1 0 0   100% 0 0   100%
tests/test_cliUtils.py MWOptionDecoratorTest.testUse   100% 8 0 0   100% 0 0   100%
tests/test_cliUtils.py MWOptionDecoratorTest.testUse.cli   100% 1 0 0   100% 0 0   100%
tests/test_cliUtils.py MWOptionDecoratorTest.testOverride   100% 8 0 0   100% 0 0   100%
tests/test_cliUtils.py MWOptionDecoratorTest.testOverride.cli   100% 1 0 0   100% 0 0   100%
tests/test_cliUtils.py SectionOptionTest.cli   100% 1 0 0   100% 0 0   100%
tests/test_cliUtils.py SectionOptionTest.setUp   100% 1 0 0   100% 0 0   100%
tests/test_cliUtils.py SectionOptionTest.test_section_help   100% 3 0 0   100% 0 0   100%
tests/test_cliUtils.py SectionOptionTest.test_section_function   100% 2 0 0   100% 0 0   100%
tests/test_cliUtils.py MWPathTest.getCmd   100% 2 0 0   100% 0 0   100%
tests/test_cliUtils.py MWPathTest.getCmd.cmd   100% 1 0 0   100% 0 0   100%
tests/test_cliUtils.py MWPathTest.setUp   100% 1 0 0   100% 0 0   100%
tests/test_cliUtils.py MWPathTest.test_exist   100% 20 0 0   100% 0 0   100%
tests/test_cliUtils.py MWCommandTest.setUp   100% 2 0 0   100% 0 0   100%
tests/test_cliUtils.py MWCommandTest.testCaptureOptions   100% 18 0 0   100% 2 0   100%
tests/test_cliUtils.py MWCommandTest.testCaptureOptions.cmd   100% 2 0 0   100% 0 0   100%
tests/test_cliUtils.py (no function)   100% 59 0 2   100% 0 0   100%
tests/test_column_spec.py ColumnSpecTestCase.setUp   100% 3 0 0   100% 0 0   100%
tests/test_column_spec.py ColumnSpecTestCase.test_serialize_tuple   100% 5 0 0   100% 0 0   100%
tests/test_column_spec.py (no function)   100% 10 0 0   100% 0 0   100%
tests/test_composites.py TestCompositesConfig.setUpClass   100% 1 0 0   100% 0 0   100%
tests/test_composites.py TestCompositesConfig.testBadConfig   100% 2 0 0   100% 0 0   100%
tests/test_composites.py TestCompositesConfig.testConfig   100% 7 0 0   100% 2 0   100%
tests/test_composites.py TestCompositesConfig.testMap   100% 26 0 0   100% 0 0   100%
tests/test_composites.py (no function)   100% 11 0 2   100% 0 0   100%
tests/test_config.py modified_environment   100% 6 0 0   100% 0 0   100%
tests/test_config.py ConfigTestCase.testBadConfig   100% 6 0 0   100% 4 0   100%
tests/test_config.py ConfigTestCase.testBasics   100% 45 0 0   100% 14 0   100%
tests/test_config.py ConfigTestCase.testDict   100% 7 0 0   100% 0 0   100%
tests/test_config.py ConfigTestCase.assertSplit   100% 3 0 0   100% 2 0   100%
tests/test_config.py ConfigTestCase.testSplitting   100% 12 0 0   100% 0 0   100%
tests/test_config.py ConfigTestCase.testEscape   100% 9 0 0   100% 0 0   100%
tests/test_config.py ConfigTestCase.testOperators   100% 6 0 0   100% 0 0   100%
tests/test_config.py ConfigTestCase.testMerge   100% 9 0 0   100% 0 0   100%
tests/test_config.py ConfigTestCase.testUpdate   100% 16 0 0   100% 0 0   100%
tests/test_config.py ConfigTestCase.testHierarchy   100% 72 0 0   100% 12 0   100%
tests/test_config.py ConfigTestCase.testSerializedString   100% 19 0 0   100% 2 0   100%
tests/test_config.py ConfigSubsetTestCase.setUp   100% 4 0 0   100% 0 0   100%
tests/test_config.py ConfigSubsetTestCase.testEmpty   100% 2 0 0   100% 0 0   100%
tests/test_config.py ConfigSubsetTestCase.testPathlib   100% 2 0 0   100% 0 0   100%
tests/test_config.py ConfigSubsetTestCase.testDefaults   100% 10 0 0   100% 0 0   100%
tests/test_config.py ConfigSubsetTestCase.testExternalOverride   100% 3 0 0   100% 0 0   100%
tests/test_config.py ConfigSubsetTestCase.testSearchPaths   100% 10 0 0   100% 0 0   100%
tests/test_config.py ConfigSubsetTestCase.testExternalHierarchy   100% 4 0 0   100% 0 0   100%
tests/test_config.py ConfigSubsetTestCase.testNoDefaults   100% 6 0 0   100% 0 0   100%
tests/test_config.py ConfigSubsetTestCase.testAbsPath   100% 15 0 0   100% 0 0   100%
tests/test_config.py ConfigSubsetTestCase.testClassDerived   100% 12 0 0   100% 0 0   100%
tests/test_config.py ConfigSubsetTestCase.testInclude   100% 14 0 0   100% 2 0   100%
tests/test_config.py ConfigSubsetTestCase.testStringInclude   100% 5 0 0   100% 0 0   100%
tests/test_config.py ConfigSubsetTestCase.testIncludeConfigs   100% 34 0 0   100% 0 0   100%
tests/test_config.py ConfigSubsetTestCase.testResource   100% 8 0 0   100% 0 0   100%
tests/test_config.py FileWriteConfigTestCase.setUp   100% 1 0 0   100% 0 0   100%
tests/test_config.py FileWriteConfigTestCase.tearDown   100% 1 0 0   100% 0 0   100%
tests/test_config.py FileWriteConfigTestCase.testDump   100% 9 0 0   100% 2 0   100%
tests/test_config.py (no function)   100% 65 0 2   100% 0 0   100%
tests/test_connectionString.py ConnectionStringBuilderTestCase.setUp   100% 4 0 0   100% 0 0   100%
tests/test_connectionString.py ConnectionStringBuilderTestCase.testBuilder   100% 5 0 0   100% 2 0   100%
tests/test_connectionString.py ConnectionStringBuilderTestCase.testRelVsAbsPath   100% 4 0 0   100% 0 0   100%
tests/test_connectionString.py ConnectionStringBuilderTestCase.testRaises   100% 5 0 0   100% 0 0   100%
tests/test_connectionString.py (no function)   100% 18 0 2   100% 0 0   100%
tests/test_constraints.py ConstraintsTestCase.setUp   100% 8 0 0   100% 0 0   100%
tests/test_constraints.py ConstraintsTestCase.testSimpleAccept   100% 23 0 0   100% 0 0   100%
tests/test_constraints.py ConstraintsTestCase.testSimpleReject   100% 4 0 0   100% 0 0   100%
tests/test_constraints.py ConstraintsTestCase.testAcceptReject   100% 18 0 0   100% 0 0   100%
tests/test_constraints.py ConstraintsTestCase.testWildcardReject   100% 9 0 0   100% 0 0   100%
tests/test_constraints.py ConstraintsTestCase.testWildcardAccept   100% 16 0 0   100% 0 0   100%
tests/test_constraints.py ConstraintsTestCase.testEdgeCases   100% 3 0 0   100% 0 0   100%
tests/test_constraints.py (no function)   100% 12 0 2   100% 0 0   100%
tests/test_datasets.py DatasetTypeTestCase.setUp   100% 1 0 0   100% 0 0   100%
tests/test_datasets.py DatasetTypeTestCase.testConstructor   100% 11 0 0   100% 0 0   100%
tests/test_datasets.py DatasetTypeTestCase.testConstructor2   100% 8 0 0   100% 0 0   100%
tests/test_datasets.py DatasetTypeTestCase.testNameValidation   100% 22 0 0   100% 8 0   100%
tests/test_datasets.py DatasetTypeTestCase.testEquality   100% 20 0 0   100% 0 0   100%
tests/test_datasets.py DatasetTypeTestCase.testCompatibility   100% 13 0 0   100% 0 0   100%
tests/test_datasets.py DatasetTypeTestCase.testOverrideStorageClass   100% 19 0 0   100% 0 0   100%
tests/test_datasets.py DatasetTypeTestCase.testJson   100% 4 0 0   100% 0 0   100%
tests/test_datasets.py DatasetTypeTestCase.testSorting   100% 9 0 0   100% 0 0   100%
tests/test_datasets.py DatasetTypeTestCase.testHashability   100% 18 0 0   100% 6 0   100%
tests/test_datasets.py DatasetTypeTestCase.testDeepCopy   100% 14 0 0   100% 0 0   100%
tests/test_datasets.py DatasetTypeTestCase.testPickle   100% 32 0 0   100% 0 0   100%
tests/test_datasets.py DatasetTypeTestCase.test_composites   100% 26 0 0   100% 0 0   100%
tests/test_datasets.py DatasetRefTestCase.setUp   100% 12 0 0   100% 0 0   100%
tests/test_datasets.py DatasetRefTestCase._make_datastore_records   100% 3 0 0   100% 0 0   100%
tests/test_datasets.py DatasetRefTestCase.testConstructor   100% 20 0 0   100% 0 0   100%
tests/test_datasets.py DatasetRefTestCase.testSorting   100% 16 0 0   100% 0 0   100%
tests/test_datasets.py DatasetRefTestCase.testOverrideStorageClass   100% 16 0 0   100% 0 0   100%
tests/test_datasets.py DatasetRefTestCase.testReplace   100% 19 0 0   100% 0 0   100%
tests/test_datasets.py DatasetRefTestCase.testPickle   100% 3 0 0   100% 0 0   100%
tests/test_datasets.py DatasetRefTestCase.testJson   100% 8 0 0   100% 0 0   100%
tests/test_datasets.py DatasetRefTestCase.testFileDataset   100% 24 0 0   100% 0 0   100%
tests/test_datasets.py DatasetRefTestCase.testFileDataset.load_dataset_type   100% 2 0 0   100% 0 0   100%
tests/test_datasets.py DatasetRefTestCase.test_container   100% 6 0 0   100% 0 0   100%
tests/test_datasets.py DatasetRefTestCase.test_dataset_provenance   100% 101 0 0   100% 4 0   100%
tests/test_datasets.py ZipIndexTestCase.test_v1   100% 20 0 0   100% 0 0   100%
tests/test_datasets.py (no function)   100% 40 0 2   100% 0 0   100%
tests/test_datastore.py makeExampleMetrics   100% 4 0 0   100% 2 0   100%
tests/test_datastore.py DatastoreTestsBase.setUpClass   100% 6 0 0   100% 0 0   100%
tests/test_datastore.py DatastoreTestsBase.setUp   100% 1 0 0   100% 0 0   100%
tests/test_datastore.py DatastoreTestsBase.tearDown   100% 2 0 0   100% 2 0   100%
tests/test_datastore.py DatastoreTests.testConfigRoot   100% 7 0 0   100% 4 0   100%
tests/test_datastore.py DatastoreTests.testConstructor   100% 3 0 0   100% 0 0   100%
tests/test_datastore.py DatastoreTests.testConfigurationValidation   100% 11 0 0   100% 2 0   100%
tests/test_datastore.py DatastoreTests.testParameterValidation   100% 11 0 0   100% 0 0   100%
tests/test_datastore.py DatastoreTests.testBasicPutGet   100% 63 0 0   100% 8 0   100%
tests/test_datastore.py DatastoreTests.testTrustGetRequest   100% 86 0 0   100% 18 0   100%
tests/test_datastore.py DatastoreTests.testTrustGetRequest._stored_dataset_type   67% 3 1 0   50% 2 1   60%
tests/test_datastore.py DatastoreTests.testDisassembly   100% 34 0 0   100% 8 0   100%
tests/test_datastore.py DatastoreTests.prepDeleteTest   100% 14 0 0   100% 2 0   100%
tests/test_datastore.py DatastoreTests.testRemove   100% 9 0 0   100% 0 0   100%
tests/test_datastore.py DatastoreTests.testForget   100% 9 0 0   100% 0 0   100%
tests/test_datastore.py DatastoreTests.testTransfer   100% 11 0 0   100% 0 0   100%
tests/test_datastore.py DatastoreTests.testBasicTransaction   100% 27 0 0   100% 8 0   100%
tests/test_datastore.py DatastoreTests.testNestedTransaction   100% 26 0 0   100% 2 0   100%
tests/test_datastore.py DatastoreTests._prepareIngestTest   100% 6 0 0   100% 0 0   100%
tests/test_datastore.py DatastoreTests.runIngestTest   100% 3 0 0   100% 0 0   100%
tests/test_datastore.py DatastoreTests.testIngestNoTransfer   100% 14 0 0   100% 6 0   100%
tests/test_datastore.py DatastoreTests.testIngestNoTransfer.succeed   100% 8 0 0   100% 4 0   100%
tests/test_datastore.py DatastoreTests.testIngestNoTransfer.failInputDoesNotExist   100% 3 0 0   100% 0 0   100%
tests/test_datastore.py DatastoreTests.testIngestNoTransfer.failOutsideRoot   100% 6 0 0   100% 2 0   100%
tests/test_datastore.py DatastoreTests.testIngestNoTransfer.failNotImplemented   100% 2 0 0   100% 0 0   100%
tests/test_datastore.py DatastoreTests.testIngestTransfer   100% 10 0 0   100% 4 0   100%
tests/test_datastore.py DatastoreTests.testIngestTransfer.succeed   100% 6 0 0   100% 2 0   100%
tests/test_datastore.py DatastoreTests.testIngestTransfer.failInputDoesNotExist   100% 3 0 0   100% 0 0   100%
tests/test_datastore.py DatastoreTests.testIngestTransfer.failNotImplemented   100% 2 0 0   100% 0 0   100%
tests/test_datastore.py DatastoreTests.testIngestSymlinkOfSymlink   100% 21 0 0   100% 6 0   100%
tests/test_datastore.py DatastoreTests._populate_export_datastore   100% 15 0 0   100% 6 0   100%
tests/test_datastore.py DatastoreTests.testExportImportRecords   100% 24 0 0   100% 4 0   100%
tests/test_datastore.py DatastoreTests.testExportImportTable   100% 17 0 0   100% 2 0   100%
tests/test_datastore.py DatastoreTests.testExportPredictedRecords   100% 12 0 0   100% 4 0   100%
tests/test_datastore.py DatastoreTests.testExport   100% 16 0 0   100% 2 0   100%
tests/test_datastore.py DatastoreTests.test_pydantic_dict_storage_class_conversions   100% 10 0 0   100% 0 0   100%
tests/test_datastore.py DatastoreTests.test_simple_class_put_get   100% 3 0 0   100% 0 0   100%
tests/test_datastore.py DatastoreTests.test_dataclass_put_get   100% 3 0 0   100% 0 0   100%
tests/test_datastore.py DatastoreTests.test_pydantic_put_get   100% 3 0 0   100% 0 0   100%
tests/test_datastore.py DatastoreTests.test_tuple_put_get   100% 3 0 0   100% 0 0   100%
tests/test_datastore.py DatastoreTests._assert_different_puts   100% 4 0 0   100% 2 0   100%
tests/test_datastore.py PosixDatastoreTestCase.setUp   100% 2 0 0   100% 0 0   100%
tests/test_datastore.py PosixDatastoreTestCase.testAtomicWrite   100% 11 0 0   100% 0 0   100%
tests/test_datastore.py PosixDatastoreTestCase.testCanNotDeterminePutFormatterLocation   100% 15 0 0   100% 0 0   100%
tests/test_datastore.py PosixDatastoreTestCase.testCanNotDeterminePutFormatterLocation.raiser   100% 1 0 0   100% 0 0   100%
tests/test_datastore.py PosixDatastoreTestCase.test_roots   100% 5 0 0   100% 4 0   100%
tests/test_datastore.py PosixDatastoreTestCase.test_prepare_get_for_external_client   100% 6 0 0   100% 0 0   100%
tests/test_datastore.py PosixDatastoreNoChecksumsTestCase.testChecksum   100% 14 0 0   100% 0 0   100%
tests/test_datastore.py PosixDatastoreNoChecksumsTestCase.test_repeat_ingest   100% 11 0 0   100% 0 0   100%
tests/test_datastore.py TrashDatastoreTestCase.testTrash   100% 24 0 0   100% 0 0   100%
tests/test_datastore.py TrashDatastoreTestCase.test_empty_trash   100% 23 0 0   100% 4 0   100%
tests/test_datastore.py CleanupPosixDatastoreTestCase.setUp   100% 2 0 0   100% 0 0   100%
tests/test_datastore.py CleanupPosixDatastoreTestCase.testCleanup   100% 22 0 0   100% 2 0   100%
tests/test_datastore.py DatastoreConstraintsTests.testConstraints   100% 27 0 0   100% 8 0   100%
tests/test_datastore.py PosixDatastoreConstraintsTestCase.setUp   100% 2 0 0   100% 0 0   100%
tests/test_datastore.py ChainedDatastorePerStoreConstraintsTests.setUp   100% 2 0 0   100% 0 0   100%
tests/test_datastore.py ChainedDatastorePerStoreConstraintsTests.testConstraints   100% 35 0 0   100% 12 0   100%
tests/test_datastore.py DatastoreCacheTestCase.setUpClass   100% 4 0 0   100% 0 0   100%
tests/test_datastore.py DatastoreCacheTestCase.setUp   100% 26 0 0   100% 6 0   100%
tests/test_datastore.py DatastoreCacheTestCase.tearDown   100% 2 0 0   50% 2 1   75%
tests/test_datastore.py DatastoreCacheTestCase._make_cache_manager   100% 2 0 0   100% 0 0   100%
tests/test_datastore.py DatastoreCacheTestCase.testNoCacheDir   100% 5 0 0   100% 0 0   100%
tests/test_datastore.py DatastoreCacheTestCase.testNoCacheDirReversed   100% 3 0 0   100% 0 0   100%
tests/test_datastore.py DatastoreCacheTestCase.testEnvvarCacheDir   100% 29 0 0   100% 0 0   100%
tests/test_datastore.py DatastoreCacheTestCase.testExplicitCacheDir   100% 5 0 0   100% 0 0   100%
tests/test_datastore.py DatastoreCacheTestCase.testUnexpectedFilesInCacheDir   100% 8 0 0   100% 2 0   100%
tests/test_datastore.py DatastoreCacheTestCase.assertCache   100% 18 0 0   100% 0 0   100%
tests/test_datastore.py DatastoreCacheTestCase.testNoCache   100% 7 0 0   100% 2 0   100%
tests/test_datastore.py DatastoreCacheTestCase._expiration_config   100% 1 0 0   100% 0 0   100%
tests/test_datastore.py DatastoreCacheTestCase.testCacheExpiryFiles   100% 28 0 0   100% 0 0   100%
tests/test_datastore.py DatastoreCacheTestCase.testCacheExpiryDatasets   100% 6 0 0   100% 0 0   100%
tests/test_datastore.py DatastoreCacheTestCase.testCacheExpiryDatasetsFromDisabled   100% 6 0 0   100% 0 0   100%
tests/test_datastore.py DatastoreCacheTestCase.testExpirationModeOverride   100% 17 0 0   100% 0 0   100%
tests/test_datastore.py DatastoreCacheTestCase.testMissingThreshold   100% 6 0 0   100% 0 0   100%
tests/test_datastore.py DatastoreCacheTestCase.testCacheExpiryDatasetsComposite   100% 14 0 0   100% 4 0   100%
tests/test_datastore.py DatastoreCacheTestCase.testCacheExpirySize   100% 6 0 0   100% 0 0   100%
tests/test_datastore.py DatastoreCacheTestCase.testDisabledCache   100% 17 0 0   100% 4 0   100%
tests/test_datastore.py DatastoreCacheTestCase.assertExpiration   100% 9 0 0   100% 6 0   100%
tests/test_datastore.py DatastoreCacheTestCase.testCacheExpiryAge   100% 18 0 0   100% 4 0   100%
tests/test_datastore.py NullDatastoreTestCase.test_basics   100% 44 0 0   100% 0 0   100%
tests/test_datastore.py DatasetRefURIsTestCase.testSequenceAccess   100% 17 0 0   100% 0 0   100%
tests/test_datastore.py DatasetRefURIsTestCase.testRepr   100% 2 0 0   100% 0 0   100%
tests/test_datastore.py StoredFileInfoTestCase.test_StoredFileInfo   100% 15 0 0   100% 0 0   100%
tests/test_datastore.py StoredFileInfoTestCase.test_make_datastore_path_relative   100% 4 0 0   100% 0 0   100%
tests/test_datastore.py StoredFileInfoTestCase.test_datastore_record_data_json_types   100% 8 0 0   100% 0 0   100%
tests/test_datastore.py TestDatastoreRecordTable.test_empty_datastore_records_table   100% 6 0 0   100% 0 0   100%
tests/test_datastore.py TestDatastoreRecordTable.test_stored_file_info_table_records   100% 40 0 0   100% 0 0   100%
tests/test_datastore.py TestDatastoreRecordTable.test_stored_file_info_table_records._check_records   100% 16 0 0   100% 0 0   100%
tests/test_datastore.py _temp_yaml_file   100% 7 0 0   100% 0 0   100%
tests/test_datastore.py (no function)   100% 178 0 2   100% 0 0   100%
tests/test_ddl.py AstropyTimeNsecTaiTestCase.setUp   100% 2 0 0   100% 0 0   100%
tests/test_ddl.py AstropyTimeNsecTaiTestCase.test_value_none   100% 4 0 0   100% 0 0   100%
tests/test_ddl.py AstropyTimeNsecTaiTestCase.test_time_before_epoch   100% 5 0 0   100% 0 0   100%
tests/test_ddl.py AstropyTimeNsecTaiTestCase.test_max_time   100% 4 0 0   100% 0 0   100%
tests/test_ddl.py AstropyTimeNsecTaiTestCase.test_round_trip   100% 6 0 0   100% 2 0   100%
tests/test_ddl.py (no function)   100% 9 0 2   100% 0 0   100%
tests/test_dimension_record_containers.py DimensionRecordContainersTestCase.setUpClass   100% 5 0 0   100% 0 0   100%
tests/test_dimension_record_containers.py DimensionRecordContainersTestCase.assert_record_sets_equal   100% 2 0 0   100% 0 0   100%
tests/test_dimension_record_containers.py DimensionRecordContainersTestCase.test_record_table_schema_visit   100% 6 0 0   100% 0 0   100%
tests/test_dimension_record_containers.py DimensionRecordContainersTestCase.test_record_table_schema_skymap   100% 3 0 0   100% 0 0   100%
tests/test_dimension_record_containers.py DimensionRecordContainersTestCase.test_empty_record_table_visit   100% 14 0 0   100% 0 0   100%
tests/test_dimension_record_containers.py DimensionRecordContainersTestCase.test_empty_record_table_skymap   100% 11 0 0   100% 0 0   100%
tests/test_dimension_record_containers.py DimensionRecordContainersTestCase.test_full_record_table_visit   100% 22 0 0   100% 0 0   100%
tests/test_dimension_record_containers.py DimensionRecordContainersTestCase.test_full_record_table_skymap   100% 9 0 0   100% 0 0   100%
tests/test_dimension_record_containers.py DimensionRecordContainersTestCase.test_record_table_parquet_visit   100% 11 0 0   100% 0 0   100%
tests/test_dimension_record_containers.py DimensionRecordContainersTestCase.test_record_table_parquet_skymap   100% 5 0 0   100% 0 0   100%
tests/test_dimension_record_containers.py DimensionRecordContainersTestCase.test_record_chunk_init   100% 4 0 0   100% 0 0   100%
tests/test_dimension_record_containers.py DimensionRecordContainersTestCase.test_arrow_timespan_nulls   100% 4 0 0   100% 0 0   100%
tests/test_dimension_record_containers.py DimensionRecordContainersTestCase.test_record_set_const   100% 41 0 0   100% 0 0   100%
tests/test_dimension_record_containers.py DimensionRecordContainersTestCase.test_record_set_add   100% 7 0 0   100% 0 0   100%
tests/test_dimension_record_containers.py DimensionRecordContainersTestCase.test_record_set_find_or_add   100% 7 0 0   100% 0 0   100%
tests/test_dimension_record_containers.py DimensionRecordContainersTestCase.test_record_set_update_from_data_coordinates   100% 4 0 0   100% 2 0   100%
tests/test_dimension_record_containers.py DimensionRecordContainersTestCase.test_record_set_discard   100% 17 0 0   100% 0 0   100%
tests/test_dimension_record_containers.py DimensionRecordContainersTestCase.test_record_set_remove   100% 19 0 0   100% 0 0   100%
tests/test_dimension_record_containers.py DimensionRecordContainersTestCase.test_record_set_pop   100% 11 0 0   100% 0 0   100%
tests/test_dimension_record_containers.py DimensionRecordContainersTestCase.test_record_key_value_serialization   100% 11 0 0   100% 4 0   100%
tests/test_dimension_record_containers.py DimensionRecordContainersTestCase.test_record_set_serialization   100% 13 0 0   100% 4 0   100%
tests/test_dimension_record_containers.py DimensionRecordContainersTestCase.test_extract_serialize_attach   100% 41 0 0   100% 12 0   100%
tests/test_dimension_record_containers.py (no function)   100% 34 0 2   100% 0 0   100%
tests/test_dimensions.py loadDimensionData   100% 3 0 0   100% 0 0   100%
tests/test_dimensions.py ConcreteTestDimensionPacker.__init__   100% 3 0 0   100% 0 0   100%
tests/test_dimensions.py ConcreteTestDimensionPacker.maxBits   100% 1 0 0   100% 0 0   100%
tests/test_dimensions.py ConcreteTestDimensionPacker._pack   100% 1 0 0   100% 0 0   100%
tests/test_dimensions.py ConcreteTestDimensionPacker.unpack   100% 1 0 0   100% 0 0   100%
tests/test_dimensions.py DimensionTestCase.setUp   100% 1 0 0   100% 0 0   100%
tests/test_dimensions.py DimensionTestCase.checkGroupInvariants   100% 27 0 0   100% 12 0   100%
tests/test_dimensions.py DimensionTestCase.testConfigPresent   100% 2 0 0   100% 0 0   100%
tests/test_dimensions.py DimensionTestCase.test_group_union   100% 7 0 0   100% 0 0   100%
tests/test_dimensions.py DimensionTestCase.test_group_set_ops   100% 15 0 0   100% 0 0   100%
tests/test_dimensions.py DimensionTestCase.testCompatibility   100% 10 0 0   100% 0 0   100%
tests/test_dimensions.py DimensionTestCase.testVersion   100% 2 0 0   100% 0 0   100%
tests/test_dimensions.py DimensionTestCase.testConfigRead   100% 1 0 0   100% 0 0   100%
tests/test_dimensions.py DimensionTestCase.testGraphs   100% 3 0 0   100% 2 0   100%
tests/test_dimensions.py DimensionTestCase.testInstrumentDimensions   100% 10 0 0   100% 2 0   100%
tests/test_dimensions.py DimensionTestCase.testCalibrationDimensions   100% 8 0 0   100% 0 0   100%
tests/test_dimensions.py DimensionTestCase.testObservationDimensions   100% 18 0 0   100% 0 0   100%
tests/test_dimensions.py DimensionTestCase.testSkyMapDimensions   100% 8 0 0   100% 0 0   100%
tests/test_dimensions.py DimensionTestCase.testSubsetCalculation   100% 5 0 0   100% 0 0   100%
tests/test_dimensions.py DimensionTestCase.testSchemaGeneration   100% 35 0 0   100% 16 0   100%
tests/test_dimensions.py DimensionTestCase.testPickling   100% 13 0 0   100% 2 0   100%
tests/test_dimensions.py DimensionTestCase.testSerialization   100% 3 0 0   100% 0 0   100%
tests/test_dimensions.py SplitByStateFlags.chain   100% 9 0 0   62% 8 3   82%
tests/test_dimensions.py DataCoordinateTestCase.setUpClass   100% 1 0 0   100% 0 0   100%
tests/test_dimensions.py DataCoordinateTestCase.setUp   100% 1 0 0   100% 0 0   100%
tests/test_dimensions.py DataCoordinateTestCase.randomDataIds   100% 3 0 0   50% 2 1   80%
tests/test_dimensions.py DataCoordinateTestCase.randomDimensionSubset   100% 3 0 0   100% 2 0   100%
tests/test_dimensions.py DataCoordinateTestCase.splitByStateFlags   87% 15 2 0   50% 8 4   74%
tests/test_dimensions.py DataCoordinateTestCase.testMappingViews   100% 15 0 0   100% 6 0   100%
tests/test_dimensions.py DataCoordinateTestCase.test_pickle   100% 15 0 0   100% 10 0   100%
tests/test_dimensions.py DataCoordinateTestCase.test_record_attributes   100% 16 0 0   100% 10 0   100%
tests/test_dimensions.py DataCoordinateTestCase.testEquality   100% 9 0 0   100% 6 0   100%
tests/test_dimensions.py DataCoordinateTestCase.testStandardize   100% 31 0 0   94% 16 1   98%
tests/test_dimensions.py DataCoordinateTestCase.testUnion   100% 32 0 0   100% 20 0   100%
tests/test_dimensions.py DataCoordinateTestCase.testRegions   100% 19 0 0   100% 10 0   100%
tests/test_dimensions.py DataCoordinateTestCase.testTimespans   100% 7 0 0   100% 4 0   100%
tests/test_dimensions.py DataCoordinateTestCase.testIterableStatusFlags   100% 22 0 0   75% 4 1   96%
tests/test_dimensions.py DataCoordinateTestCase.testSetOperations   100% 24 0 0   100% 0 0   100%
tests/test_dimensions.py DataCoordinateTestCase.testPackers   100% 10 0 0   100% 0 0   100%
tests/test_dimensions.py DataCoordinateTestCase.test_dimension_group_pydantic   100% 7 0 0   100% 0 0   100%
tests/test_dimensions.py DataCoordinateTestCase.test_dimension_element_pydantic   100% 7 0 0   100% 0 0   100%
tests/test_dimensions.py (no function)   100% 70 0 2   100% 0 0   100%
tests/test_dimensions_versions.py _make_butler   100% 5 0 0   100% 0 0   100%
tests/test_dimensions_versions.py _populate_data_ids   100% 14 0 0   100% 16 0   100%
tests/test_dimensions_versions.py _populate_repo   100% 15 0 0   100% 12 0   100%
tests/test_dimensions_versions.py DimensionsVersionsTestCase._prep_repo   100% 7 0 0   100% 2 0   100%
tests/test_dimensions_versions.py DimensionsVersionsTestCase.setUp   100% 1 0 0   100% 0 0   100%
tests/test_dimensions_versions.py DimensionsVersionsTestCase.tearDown   100% 1 0 0   100% 0 0   100%
tests/test_dimensions_versions.py DimensionsVersionsTestCase.test_v1_v2_transfer   100% 4 0 0   100% 0 0   100%
tests/test_dimensions_versions.py DimensionsVersionsTestCase.test_v1_v2_ingest_zip   100% 5 0 0   100% 0 0   100%
tests/test_dimensions_versions.py DimensionsVersionsTestCase.test_v2_v1_transfer   100% 8 0 0   100% 0 0   100%
tests/test_dimensions_versions.py DimensionsVersionsTestCase.test_v2_v1_ingest_zip   100% 10 0 0   100% 0 0   100%
tests/test_dimensions_versions.py DimensionsVersionsTestCase.test_v2_v3_transfer   100% 5 0 0   100% 0 0   100%
tests/test_dimensions_versions.py DimensionsVersionsTestCase.test_v2_v3_ingest_zip   100% 6 0 0   100% 0 0   100%
tests/test_dimensions_versions.py DimensionsVersionsTestCase.test_v3_v2_transfer   100% 5 0 0   100% 0 0   100%
tests/test_dimensions_versions.py DimensionsVersionsTestCase.test_v3_v2_ingest_zip   100% 6 0 0   100% 0 0   100%
tests/test_dimensions_versions.py DimensionsVersionsTestCase.test_v3_v4_transfer   100% 4 0 0   100% 0 0   100%
tests/test_dimensions_versions.py DimensionsVersionsTestCase.test_v3_v4_ingest_zip   100% 6 0 0   100% 0 0   100%
tests/test_dimensions_versions.py DimensionsVersionsTestCase.test_v4_v3_transfer   100% 4 0 0   100% 0 0   100%
tests/test_dimensions_versions.py DimensionsVersionsTestCase.test_v4_v3_ingest_zip   100% 6 0 0   100% 0 0   100%
tests/test_dimensions_versions.py (no function)   100% 28 0 2   100% 0 0   100%
tests/test_exprParserLex.py ParserLexTestCase._assertToken   71% 7 2 0   50% 4 2   64%
tests/test_exprParserLex.py ParserLexTestCase.setUp   100% 1 0 0   100% 0 0   100%
tests/test_exprParserLex.py ParserLexTestCase.tearDown   100% 1 0 0   100% 0 0   100%
tests/test_exprParserLex.py ParserLexTestCase.testInstantiate   100% 5 0 0   100% 0 0   100%
tests/test_exprParserLex.py ParserLexTestCase.testSimpleTokens   100% 15 0 0   100% 0 0   100%
tests/test_exprParserLex.py ParserLexTestCase.testReservedTokens   100% 15 0 0   100% 4 0   100%
tests/test_exprParserLex.py ParserLexTestCase.testStringLiteral   100% 18 0 0   100% 0 0   100%
tests/test_exprParserLex.py ParserLexTestCase.testNumericLiteral   100% 11 0 0   100% 0 0   100%
tests/test_exprParserLex.py ParserLexTestCase.testRangeLiteral   100% 8 0 0   100% 0 0   100%
tests/test_exprParserLex.py ParserLexTestCase.testTimeLiteral   100% 8 0 0   100% 0 0   100%
tests/test_exprParserLex.py ParserLexTestCase.testIdentifier   100% 24 0 0   100% 0 0   100%
tests/test_exprParserLex.py ParserLexTestCase.testNinds   100% 16 0 0   100% 0 0   100%
tests/test_exprParserLex.py ParserLexTestCase.testExpression   100% 7 0 0   100% 2 0   100%
tests/test_exprParserLex.py ParserLexTestCase.testExceptions   100% 38 0 0   100% 0 0   100%
tests/test_exprParserLex.py ParserLexTestCase.testExceptions._assertExc   100% 4 0 0   100% 0 0   100%
tests/test_exprParserLex.py (no function)   100% 18 0 2   100% 0 0   100%
tests/test_exprParserYacc.py _Visitor.visitNumericLiteral   100% 1 0 0   100% 0 0   100%
tests/test_exprParserYacc.py _Visitor.visitStringLiteral   100% 1 0 0   100% 0 0   100%
tests/test_exprParserYacc.py _Visitor.visitTimeLiteral   100% 1 0 0   100% 0 0   100%
tests/test_exprParserYacc.py _Visitor.visitUuidLiteral   0% 1 1 0   100% 0 0   0%
tests/test_exprParserYacc.py _Visitor.visitRangeLiteral   100% 3 0 0   100% 2 0   100%
tests/test_exprParserYacc.py _Visitor.visitIdentifier   100% 1 0 0   100% 0 0   100%
tests/test_exprParserYacc.py _Visitor.visitBind   100% 1 0 0   100% 0 0   100%
tests/test_exprParserYacc.py _Visitor.visitUnaryOp   100% 1 0 0   100% 0 0   100%
tests/test_exprParserYacc.py _Visitor.visitBinaryOp   100% 1 0 0   100% 0 0   100%
tests/test_exprParserYacc.py _Visitor.visitIsIn   100% 4 0 0   100% 2 0   100%
tests/test_exprParserYacc.py _Visitor.visitParens   100% 1 0 0   100% 0 0   100%
tests/test_exprParserYacc.py _Visitor.visitPointNode   100% 1 0 0   100% 0 0   100%
tests/test_exprParserYacc.py _Visitor.visitCircleNode   100% 1 0 0   100% 0 0   100%
tests/test_exprParserYacc.py _Visitor.visitBoxNode   100% 1 0 0   100% 0 0   100%
tests/test_exprParserYacc.py _Visitor.visitPolygonNode   100% 2 0 0   100% 0 0   100%
tests/test_exprParserYacc.py _Visitor.visitRegionNode   100% 1 0 0   100% 0 0   100%
tests/test_exprParserYacc.py _Visitor.visitTupleNode   0% 1 1 0   100% 0 0   0%
tests/test_exprParserYacc.py _Visitor.visitGlobNode   100% 1 0 0   100% 0 0   100%
tests/test_exprParserYacc.py ParserYaccTestCase.setUp   100% 1 0 0   100% 0 0   100%
tests/test_exprParserYacc.py ParserYaccTestCase.tearDown   100% 1 0 0   100% 0 0   100%
tests/test_exprParserYacc.py ParserYaccTestCase.testInstantiate   100% 1 0 0   100% 0 0   100%
tests/test_exprParserYacc.py ParserYaccTestCase.testEmpty   100% 3 0 0   100% 0 0   100%
tests/test_exprParserYacc.py ParserYaccTestCase.testParseLiteral   100% 33 0 0   100% 0 0   100%
tests/test_exprParserYacc.py ParserYaccTestCase.testParseIdentifiers   100% 9 0 0   100% 0 0   100%
tests/test_exprParserYacc.py ParserYaccTestCase.testParseBind   100% 7 0 0   100% 0 0   100%
tests/test_exprParserYacc.py ParserYaccTestCase.testParseParens   100% 11 0 0   100% 0 0   100%
tests/test_exprParserYacc.py ParserYaccTestCase.testUnaryOps   100% 13 0 0   100% 0 0   100%
tests/test_exprParserYacc.py ParserYaccTestCase.testBinaryOps   100% 59 0 0   100% 0 0   100%
tests/test_exprParserYacc.py ParserYaccTestCase.testIsIn   100% 92 0 0   100% 0 0   100%
tests/test_exprParserYacc.py ParserYaccTestCase.testCompareOps   100% 26 0 0   100% 2 0   100%
tests/test_exprParserYacc.py ParserYaccTestCase.testBoolOps   100% 16 0 0   100% 2 0   100%
tests/test_exprParserYacc.py ParserYaccTestCase.testFunctionCall   100% 34 0 0   100% 0 0   100%
tests/test_exprParserYacc.py ParserYaccTestCase.testPointNode   100% 11 0 0   100% 0 0   100%
tests/test_exprParserYacc.py ParserYaccTestCase.testCircleNode   100% 21 0 0   100% 0 0   100%
tests/test_exprParserYacc.py ParserYaccTestCase.testBoxNode   100% 23 0 0   100% 0 0   100%
tests/test_exprParserYacc.py ParserYaccTestCase.testPolygonNode   100% 18 0 0   100% 2 0   100%
tests/test_exprParserYacc.py ParserYaccTestCase.testRegionNode   100% 12 0 0   100% 0 0   100%
tests/test_exprParserYacc.py ParserYaccTestCase.testGlobNode   100% 19 0 0   100% 0 0   100%
tests/test_exprParserYacc.py ParserYaccTestCase.testTupleNode   100% 17 0 0   100% 0 0   100%
tests/test_exprParserYacc.py ParserYaccTestCase.testExpression   100% 13 0 0   100% 0 0   100%
tests/test_exprParserYacc.py ParserYaccTestCase.testException   100% 14 0 0   100% 0 0   100%
tests/test_exprParserYacc.py ParserYaccTestCase.testException._assertExc   100% 5 0 0   100% 0 0   100%
tests/test_exprParserYacc.py ParserYaccTestCase.testStr   100% 11 0 0   100% 0 0   100%
tests/test_exprParserYacc.py ParserYaccTestCase.testVisit   100% 35 0 0   100% 0 0   100%
tests/test_exprParserYacc.py ParserYaccTestCase.testParseTimeStr   100% 10 0 0   100% 4 0   100%
tests/test_exprParserYacc.py (no function)   100% 51 0 2   100% 0 0   100%
tests/test_formatter.py FormatterFactoryTestCase.setUp   100% 5 0 0   100% 0 0   100%
tests/test_formatter.py FormatterFactoryTestCase.assertIsFormatter   100% 3 0 0   100% 2 0   100%
tests/test_formatter.py FormatterFactoryTestCase.testFormatter   100% 13 0 0   100% 0 0   100%
tests/test_formatter.py FormatterFactoryTestCase.testExtensionValidation   100% 7 0 0   100% 6 0   100%
tests/test_formatter.py FormatterFactoryTestCase.testRegistry   100% 20 0 0   100% 0 0   100%
tests/test_formatter.py FormatterFactoryTestCase.testRegistryWithStorageClass   100% 18 0 0   100% 0 0   100%
tests/test_formatter.py FormatterFactoryTestCase.testRegistryConfig   100% 39 0 0   100% 0 0   100%
tests/test_formatter.py ZipFormatterTestCase.setUpClass   100% 5 0 0   100% 0 0   100%
tests/test_formatter.py ZipFormatterTestCase._make_formatter   100% 5 0 0   100% 0 0   100%
tests/test_formatter.py ZipFormatterTestCase.test_packages   100% 6 0 0   100% 0 0   100%
tests/test_formatter.py ZipFormatterTestCase.test_metrics   100% 6 0 0   100% 0 0   100%
tests/test_formatter.py ZipFormatterTestCase.test_logs   100% 6 0 0   100% 0 0   100%
tests/test_formatter.py (no function)   100% 23 0 2   100% 0 0   100%
tests/test_gafaelfawr.py GafaelfawrAuthorizationTestCase.test_gafaelfawr_group_auth   0% 29 29 0   100% 0 0   0%
tests/test_gafaelfawr.py GafaelfawrAuthorizationTestCase.test_gafaelfawr_group_auth.handler   0% 3 3 0   100% 0 0   0%
tests/test_gafaelfawr.py (no function)   64% 11 4 0   50% 2 1   62%
tests/test_location.py LocationTestCase.testFileLocation   100% 25 0 0   100% 0 0   100%
tests/test_location.py LocationTestCase.test_clone   100% 9 0 0   100% 0 0   100%
tests/test_location.py LocationTestCase.testAbsoluteLocations   100% 5 0 0   100% 0 0   100%
tests/test_location.py LocationTestCase.testBadLocations   100% 6 0 0   100% 0 0   100%
tests/test_location.py LocationTestCase.testRelativeRoot   100% 9 0 0   100% 0 0   100%
tests/test_location.py LocationTestCase.testQuotedRoot   100% 9 0 0   100% 2 0   100%
tests/test_location.py LocationTestCase.testHttpLocation   100% 11 0 0   100% 0 0   100%
tests/test_location.py (no function)   100% 14 0 2   100% 0 0   100%
tests/test_logFormatter.py ButlerLogRecordsFormatterTestCase.setUp   100% 7 0 0   100% 0 0   100%
tests/test_logFormatter.py ButlerLogRecordsFormatterTestCase.tearDown   100% 1 0 0   100% 0 0   100%
tests/test_logFormatter.py ButlerLogRecordsFormatterTestCase.testButlerLogRecordsFormatter   100% 11 0 0   100% 0 0   100%
tests/test_logFormatter.py ButlerLogRecordsFormatterTestCase.testButlerLogRecordsFormatterExtra   100% 13 0 0   100% 0 0   100%
tests/test_logFormatter.py ButlerLogRecordsFormatterTestCase.testButlerLogRecordsFormatterEmptyExtra   100% 10 0 0   100% 0 0   100%
tests/test_logFormatter.py ButlerLogRecordsFormatterTestCase.testButlerLogRecordsFormatterV1   100% 16 0 0   100% 0 0   100%
tests/test_logFormatter.py ButlerLogRecordsFormatterTestCase.testJsonLogRecordsFormatter   100% 15 0 0   100% 0 0   100%
tests/test_logFormatter.py ButlerLogRecordsFormatterTestCase.testJsonLogRecordsFormatterExtra   100% 19 0 0   100% 0 0   100%
tests/test_logFormatter.py ButlerLogRecordsFormatterTestCase.testJsonLogRecordsFormatterExtraEmpty   100% 16 0 0   100% 0 0   100%
tests/test_logFormatter.py (no function)   100% 25 0 2   100% 0 0   100%
tests/test_logging.py LoggingTestCase.setUp   100% 3 0 0   100% 0 0   100%
tests/test_logging.py LoggingTestCase.tearDown   100% 4 0 0   50% 2 1   83%
tests/test_logging.py LoggingTestCase.testRecordCapture   100% 29 0 0   100% 16 0   100%
tests/test_logging.py LoggingTestCase.testRecordsFormatting   100% 18 0 0   100% 0 0   100%
tests/test_logging.py LoggingTestCase.testButlerLogRecords   100% 37 0 0   100% 2 0   100%
tests/test_logging.py LoggingTestCase.testExceptionInfo   100% 13 0 0   100% 0 0   100%
tests/test_logging.py LoggingTestCase.testMDC   100% 39 0 0   100% 0 0   100%
tests/test_logging.py LoggingTestCase.testMDC_exception   100% 20 0 0   100% 4 0   100%
tests/test_logging.py TestJsonLogging.testJsonLogStream   100% 39 0 0   100% 2 0   100%
tests/test_logging.py (no function)   100% 19 0 2   100% 0 0   100%
tests/test_matplotlibFormatter.py MatplotlibFormatterTestCase.setUp   100% 3 0 0   100% 0 0   100%
tests/test_matplotlibFormatter.py MatplotlibFormatterTestCase.tearDown   100% 1 0 0   100% 0 0   100%
tests/test_matplotlibFormatter.py MatplotlibFormatterTestCase.testMatplotlibFormatter   100% 1 0 0   100% 0 0   100%
tests/test_matplotlibFormatter.py MatplotlibFormatterTestCase.testMatplotlibFormatterWithMetadata   100% 1 0 0   100% 0 0   100%
tests/test_matplotlibFormatter.py MatplotlibFormatterTestCase.doMatplotlibTest   100% 18 0 0   100% 2 0   100%
tests/test_matplotlibFormatter.py (no function)   91% 22 2 2   100% 0 0   91%
tests/test_nonempty_mapping.py NonemptyMappingTestCase.test_nonempty_mapping   100% 11 0 0   100% 0 0   100%
tests/test_nonempty_mapping.py (no function)   100% 4 0 2   100% 0 0   100%
tests/test_obscore.py ObsCoreTests.make_registry   100% 5 0 0   100% 0 0   100%
tests/test_obscore.py ObsCoreTests.make_registry_config   100% 0 0 1   100% 0 0   100%
tests/test_obscore.py ObsCoreTests.initialize_registry   100% 50 0 0   100% 18 0   100%
tests/test_obscore.py ObsCoreTests.make_obscore_config   100% 6 0 0   100% 4 0   100%
tests/test_obscore.py ObsCoreTests._insert_dataset   100% 9 0 0   100% 2 0   100%
tests/test_obscore.py ObsCoreTests._insert_datasets   100% 1 0 0   100% 0 0   100%
tests/test_obscore.py ObsCoreTests.test_config_errors   100% 9 0 0   100% 0 0   100%
tests/test_obscore.py ObsCoreTests.test_schema   100% 25 0 0   100% 0 0   100%
tests/test_obscore.py ObsCoreTests.test_insert_existing_collection   100% 13 0 0   100% 4 0   100%
tests/test_obscore.py ObsCoreTests.test_drop_datasets   100% 16 0 0   100% 0 0   100%
tests/test_obscore.py ObsCoreTests.test_associate   100% 28 0 0   100% 0 0   100%
tests/test_obscore.py ObsCoreTests.test_region_type_warning   100% 5 0 0   100% 0 0   100%
tests/test_obscore.py ObsCoreTests.test_update_exposure_region   100% 26 0 0   100% 8 0   100%
tests/test_obscore.py SQLiteObsCoreTest.setUp   100% 1 0 0   100% 0 0   100%
tests/test_obscore.py SQLiteObsCoreTest.tearDown   100% 1 0 0   100% 0 0   100%
tests/test_obscore.py SQLiteObsCoreTest.make_registry_config   100% 5 0 0   100% 0 0   100%
tests/test_obscore.py ClonedSqliteObscoreTest.make_registry   100% 4 0 0   100% 0 0   100%
tests/test_obscore.py PostgresObsCoreTest.setUpClass   50% 2 1 0   100% 0 0   50%
tests/test_obscore.py PostgresObsCoreTest.setUp   0% 1 1 0   100% 0 0   0%
tests/test_obscore.py PostgresObsCoreTest.tearDown   0% 1 1 0   100% 0 0   0%
tests/test_obscore.py PostgresObsCoreTest.make_registry_config   0% 4 4 0   100% 0 0   0%
tests/test_obscore.py PostgresPgSphereObsCoreTest.setUpClass   17% 6 5 0   100% 0 0   17%
tests/test_obscore.py PostgresPgSphereObsCoreTest.make_obscore_config   0% 3 3 0   100% 0 0   0%
tests/test_obscore.py PostgresPgSphereObsCoreTest.test_spatial   0% 23 23 0   100% 0 0   0%
tests/test_obscore.py TestMissingObscoreConfig.setUp   100% 1 0 0   100% 0 0   100%
tests/test_obscore.py TestMissingObscoreConfig.tearDown   100% 1 0 0   100% 0 0   100%
tests/test_obscore.py TestMissingObscoreConfig.make_butler_config   100% 4 0 0   100% 0 0   100%
tests/test_obscore.py TestMissingObscoreConfig.test_missing_config_one   100% 4 0 0   100% 0 0   100%
tests/test_obscore.py TestMissingObscoreConfig.test_missing_config_two   100% 4 0 0   100% 0 0   100%
tests/test_obscore.py (no function)   100% 56 0 2   100% 0 0   100%
tests/test_packages.py PackagesFormatterTestCase.setUp   100% 6 0 0   100% 0 0   100%
tests/test_packages.py PackagesFormatterTestCase.tearDown   100% 1 0 0   100% 0 0   100%
tests/test_packages.py PackagesFormatterTestCase.testPackages   100% 4 0 0   100% 0 0   100%
tests/test_packages.py (no function)   100% 10 0 2   100% 0 0   100%
tests/test_parquet.py _makeSimpleNumpyTable   100% 25 0 0   100% 8 0   100%
tests/test_parquet.py _makeSingleIndexDataFrame   100% 17 0 0   100% 4 0   100%
tests/test_parquet.py _makeMultiIndexDataFrame   100% 3 0 0   100% 0 0   100%
tests/test_parquet.py _makeSimpleAstropyTable   100% 31 0 0   100% 2 0   100%
tests/test_parquet.py _makeSimpleArrowTable   100% 2 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterDataFrameTestCase.setUp   100% 7 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterDataFrameTestCase.tearDown   100% 1 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterDataFrameTestCase.testSingleIndexDataFrame   100% 26 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterDataFrameTestCase.testSingleIndexDataFrameWithLists   100% 6 0 0   100% 4 0   100%
tests/test_parquet.py ParquetFormatterDataFrameTestCase.testMultiIndexDataFrame   100% 23 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterDataFrameTestCase.testSingleIndexDataFrameEmptyString   100% 5 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterDataFrameTestCase.testSingleIndexDataFrameAllEmptyStrings   100% 5 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterDataFrameTestCase.testLegacyDataFrame   100% 25 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterDataFrameTestCase.testDataFrameSchema   100% 9 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterDataFrameTestCase.testWriteSingleIndexDataFrameReadAsAstropyTable   100% 15 0 0   100% 4 0   100%
tests/test_parquet.py ParquetFormatterDataFrameTestCase.testWriteSingleIndexDataFrameWithMaskedColsReadAsAstropyTable   100% 14 0 0   100% 6 0   100%
tests/test_parquet.py ParquetFormatterDataFrameTestCase.testWriteMultiIndexDataFrameReadAsAstropyTable   100% 3 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterDataFrameTestCase.testWriteAstropyTableWithMaskedColsReadAsSingleIndexDataFrame   100% 10 0 0   100% 4 0   100%
tests/test_parquet.py ParquetFormatterDataFrameTestCase.testWriteSingleIndexDataFrameReadAsArrowTable   100% 18 0 0   100% 4 0   100%
tests/test_parquet.py ParquetFormatterDataFrameTestCase.testWriteMultiIndexDataFrameReadAsArrowTable   100% 5 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterDataFrameTestCase.testWriteSingleIndexDataFrameReadAsNumpyTable   100% 14 0 0   100% 2 0   100%
tests/test_parquet.py ParquetFormatterDataFrameTestCase.testWriteMultiIndexDataFrameReadAsNumpyTable   100% 3 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterDataFrameTestCase.testWriteSingleIndexDataFrameReadAsNumpyDict   100% 7 0 0   100% 2 0   100%
tests/test_parquet.py ParquetFormatterDataFrameTestCase.testWriteMultiIndexDataFrameReadAsNumpyDict   100% 3 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterDataFrameTestCase.testBadDataFrameColumnParquet   100% 7 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterDataFrameTestCase.testWriteReadAstropyTableLossless   100% 6 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterDataFrameTestCase.testWriteReadAstropyTableProvenance   100% 18 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterDataFrameTestCase.testWriteReadNumpyTableLossless   100% 4 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterDataFrameTestCase.testMaskedNumpy   100% 8 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterDataFrameTestCase.testWriteReadArrowTableLossless   100% 8 0 0   100% 2 0   100%
tests/test_parquet.py ParquetFormatterDataFrameTestCase.testWriteReadNumpyDictLossless   100% 5 0 0   100% 0 0   100%
tests/test_parquet.py InMemoryDataFrameDelegateTestCase.testBadDataFrameColumnParquet   100% 1 0 0   100% 0 0   100%
tests/test_parquet.py InMemoryDataFrameDelegateTestCase.testWriteMultiIndexDataFrameReadAsAstropyTable   100% 4 0 0   100% 0 0   100%
tests/test_parquet.py InMemoryDataFrameDelegateTestCase.testLegacyDataFrame   100% 1 0 0   100% 0 0   100%
tests/test_parquet.py InMemoryDataFrameDelegateTestCase.testBadInput   100% 6 0 0   100% 0 0   100%
tests/test_parquet.py InMemoryDataFrameDelegateTestCase.testStorageClass   100% 9 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterArrowAstropyTestCase.setUp   100% 7 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterArrowAstropyTestCase.tearDown   100% 1 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterArrowAstropyTestCase.testAstropyTable   100% 28 0 0   100% 2 0   100%
tests/test_parquet.py ParquetFormatterArrowAstropyTestCase.testAstropyTableBigEndian   100% 4 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterArrowAstropyTestCase.testAstropyTableWithMetadata   100% 6 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterArrowAstropyTestCase.testArrowAstropySchema   100% 23 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterArrowAstropyTestCase.testAstropyParquet   100% 26 0 0   100% 2 0   100%
tests/test_parquet.py ParquetFormatterArrowAstropyTestCase.testWriteAstropyReadAsArrowTable   100% 11 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterArrowAstropyTestCase.testWriteAstropyReadAsDataFrame   100% 11 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterArrowAstropyTestCase.testWriteAstropyWithMaskedColsReadAsDataFrame   100% 14 0 0   100% 6 0   100%
tests/test_parquet.py ParquetFormatterArrowAstropyTestCase.testWriteSingleIndexDataFrameWithMaskedColsReadAsAstropyTable   100% 5 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterArrowAstropyTestCase.testWriteAstropyReadAsNumpyTable   100% 11 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterArrowAstropyTestCase.testWriteAstropyReadAsNumpyDict   100% 5 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterArrowAstropyTestCase.testBadAstropyColumnParquet   100% 13 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterArrowAstropyTestCase.testWriteAstropyTableWithPandasIndexHint   100% 16 0 0   100% 2 0   100%
tests/test_parquet.py InMemoryArrowAstropyDelegateTestCase.testAstropyParquet   100% 1 0 0   100% 0 0   100%
tests/test_parquet.py InMemoryArrowAstropyDelegateTestCase.testBadAstropyColumnParquet   100% 1 0 0   100% 0 0   100%
tests/test_parquet.py InMemoryArrowAstropyDelegateTestCase.testBadInput   100% 8 0 0   100% 0 0   100%
tests/test_parquet.py InMemoryArrowAstropyDelegateTestCase.testWriteAstropyTableWithPandasIndexHint   100% 1 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterArrowNumpyTestCase.setUp   100% 6 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterArrowNumpyTestCase.tearDown   100% 1 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterArrowNumpyTestCase.testNumpyTable   100% 26 0 0   100% 2 0   100%
tests/test_parquet.py ParquetFormatterArrowNumpyTestCase.testNumpyTableBigEndian   100% 4 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterArrowNumpyTestCase.testArrowNumpySchema   100% 13 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterArrowNumpyTestCase.testNumpyDictConversions   100% 6 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterArrowNumpyTestCase.testWriteNumpyTableReadAsArrowTable   100% 11 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterArrowNumpyTestCase.testWriteNumpyTableReadAsDataFrame   100% 11 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterArrowNumpyTestCase.testWriteNumpyTableReadAsAstropyTable   100% 11 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterArrowNumpyTestCase.testWriteNumpyTableReadAsNumpyDict   100% 5 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterArrowNumpyTestCase.testBadNumpyColumnParquet   100% 15 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterArrowNumpyTestCase.testWriteReadAstropyTableLossless   100% 4 0 0   100% 0 0   100%
tests/test_parquet.py InMemoryArrowNumpyDelegateTestCase.testBadNumpyColumnParquet   100% 1 0 0   100% 0 0   100%
tests/test_parquet.py InMemoryArrowNumpyDelegateTestCase.testBadInput   100% 8 0 0   100% 0 0   100%
tests/test_parquet.py InMemoryArrowNumpyDelegateTestCase.testStorageClass   100% 9 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterArrowTableTestCase.setUp   100% 6 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterArrowTableTestCase.tearDown   100% 1 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterArrowTableTestCase.testArrowTable   100% 30 0 0   100% 4 0   100%
tests/test_parquet.py ParquetFormatterArrowTableTestCase.testEmptyArrowTable   100% 20 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterArrowTableTestCase.testEmptyArrowTableMultidim   100% 19 0 0   100% 2 0   100%
tests/test_parquet.py ParquetFormatterArrowTableTestCase.testWriteArrowTableReadAsSingleIndexDataFrame   100% 13 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterArrowTableTestCase.testWriteArrowTableReadAsMultiIndexDataFrame   100% 13 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterArrowTableTestCase.testWriteArrowTableReadAsAstropyTable   100% 21 0 0   100% 6 0   100%
tests/test_parquet.py ParquetFormatterArrowTableTestCase.testWriteArrowTableReadAsNumpyTable   100% 13 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterArrowTableTestCase.testWriteArrowTableReadAsNumpyDict   100% 5 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterArrowTableTestCase.testWriteReadAstropyTableLossless   100% 4 0 0   100% 0 0   100%
tests/test_parquet.py InMemoryArrowTableDelegateTestCase.testBadInput   100% 8 0 0   100% 0 0   100%
tests/test_parquet.py InMemoryArrowTableDelegateTestCase.testStorageClass   100% 9 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterArrowNumpyDictTestCase.setUp   100% 6 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterArrowNumpyDictTestCase.tearDown   100% 1 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterArrowNumpyDictTestCase.testNumpyDict   100% 33 0 0   100% 2 0   100%
tests/test_parquet.py ParquetFormatterArrowNumpyDictTestCase.testWriteNumpyDictReadAsArrowTable   100% 6 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterArrowNumpyDictTestCase.testWriteNumpyDictReadAsDataFrame   100% 8 0 0   100% 2 0   100%
tests/test_parquet.py ParquetFormatterArrowNumpyDictTestCase.testWriteNumpyDictReadAsAstropyTable   100% 6 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterArrowNumpyDictTestCase.testWriteNumpyDictReadAsNumpyTable   100% 6 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterArrowNumpyDictTestCase.testWriteNumpyDictBad   100% 12 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterArrowNumpyDictTestCase.testWriteReadAstropyTableLossless   100% 4 0 0   100% 0 0   100%
tests/test_parquet.py InMemoryNumpyDictDelegateTestCase.testWriteNumpyDictBad   100% 1 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterArrowSchemaTestCase.setUp   100% 6 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterArrowSchemaTestCase.tearDown   100% 1 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterArrowSchemaTestCase._makeTestSchema   100% 2 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterArrowSchemaTestCase.testArrowSchema   100% 4 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterArrowSchemaTestCase.testWriteArrowSchemaReadAsDataFrameSchema   100% 5 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterArrowSchemaTestCase.testWriteArrowSchemaReadAsArrowAstropySchema   100% 14 0 0   100% 8 0   100%
tests/test_parquet.py ParquetFormatterArrowSchemaTestCase.testWriteArrowSchemaReadAsArrowNumpySchema   100% 5 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterArrowTableS3TestCase.setUp   100% 20 0 0   100% 0 0   100%
tests/test_parquet.py ParquetFormatterArrowTableS3TestCase.tearDown   73% 15 4 0   33% 6 2   62%
tests/test_parquet.py ParquetFormatterArrowTableS3TestCase.testArrowTableS3   100% 28 0 0   100% 4 0   100%
tests/test_parquet.py ComputeRowGroupSizeTestCase.testRowGroupSizeNoMetadata   100% 8 0 0   100% 0 0   100%
tests/test_parquet.py ComputeRowGroupSizeTestCase.testRowGroupSizeWithMetadata   100% 5 0 0   100% 0 0   100%
tests/test_parquet.py ComputeRowGroupSizeTestCase.testRowGroupSizeTinyTable   100% 4 0 0   100% 0 0   100%
tests/test_parquet.py ComputeRowGroupSizeTestCase.testRowGroupSizeDataFrameWithLists   100% 4 0 0   100% 0 0   100%
tests/test_parquet.py _checkAstropyTableEquality   100% 27 0 0   100% 16 0   100%
tests/test_parquet.py _checkNumpyTableEquality   100% 6 0 0   100% 4 0   100%
tests/test_parquet.py _checkNumpyDictEquality   100% 4 0 0   100% 2 0   100%
tests/test_parquet.py (no function)   91% 267 23 2   100% 0 0   91%
tests/test_postgresql.py PostgresqlDatabaseTestCase.setUpClass   100% 2 0 0   100% 0 0   100%
tests/test_postgresql.py PostgresqlDatabaseTestCase.makeEmptyDatabase   0% 1 1 0   100% 0 0   0%
tests/test_postgresql.py PostgresqlDatabaseTestCase.getNewConnection   0% 1 1 0   100% 0 0   0%
tests/test_postgresql.py PostgresqlDatabaseTestCase.asReadOnly   0% 1 1 0   100% 0 0   0%
tests/test_postgresql.py PostgresqlDatabaseTestCase.testNameShrinking   0% 7 7 0   100% 0 0   0%
tests/test_postgresql.py PostgresqlDatabaseTestCase.test_RangeTimespanType   0% 27 27 0   0% 2 0   0%
tests/test_postgresql.py PostgresqlDatabaseTestCase.test_RangeTimespanType.subquery   0% 1 1 0   100% 0 0   0%
tests/test_postgresql.py PostgresqlRegistryTests.setUpClass   100% 2 0 0   100% 0 0   100%
tests/test_postgresql.py PostgresqlRegistryTests.getDataDir   0% 1 1 0   100% 0 0   0%
tests/test_postgresql.py PostgresqlRegistryTests.make_butler   0% 7 7 0   0% 2 0   0%
tests/test_postgresql.py PostgresqlRegistryTests.testSkipCalibs   0% 3 3 0   0% 2 0   0%
tests/test_postgresql.py (no function)   95% 43 2 2   100% 0 0   95%
tests/test_progress.py MockProgressBar.__init__   100% 5 0 0   100% 0 0   100%
tests/test_progress.py MockProgressBar.__iter__   100% 4 0 0   100% 2 0   100%
tests/test_progress.py MockProgressBar.update   100% 2 0 0   100% 0 0   100%
tests/test_progress.py MockProgressHandler.get_progress_bar   100% 1 0 0   100% 0 0   100%
tests/test_progress.py ClickProgressHandlerTestCase.setUp   100% 4 0 0   100% 0 0   100%
tests/test_progress.py ClickProgressHandlerTestCase.tearDown   100% 3 0 0   100% 0 0   100%
tests/test_progress.py ClickProgressHandlerTestCase.get_cmd   100% 4 0 0   100% 0 0   100%
tests/test_progress.py ClickProgressHandlerTestCase.get_cmd.cmd   100% 6 0 0   100% 0 0   100%
tests/test_progress.py ClickProgressHandlerTestCase.test_click_disabled_by_default   100% 2 0 0   100% 0 0   100%
tests/test_progress.py ClickProgressHandlerTestCase.test_click_enabled   100% 2 0 0   100% 0 0   100%
tests/test_progress.py ClickProgressHandlerTestCase.test_click_disabled_globally   100% 2 0 0   100% 0 0   100%
tests/test_progress.py ClickProgressHandlerTestCase.test_click_disabled_by_log_level   100% 2 0 0   100% 0 0   100%
tests/test_progress.py MockedProgressHandlerTestCase.setUp   100% 4 0 0   100% 0 0   100%
tests/test_progress.py MockedProgressHandlerTestCase.tearDown   100% 3 0 0   100% 0 0   100%
tests/test_progress.py MockedProgressHandlerTestCase.test_bar_iterable   100% 5 0 0   100% 0 0   100%
tests/test_progress.py MockedProgressHandlerTestCase.test_bar_update   100% 4 0 0   100% 2 0   100%
tests/test_progress.py MockedProgressHandlerTestCase.test_iter_chunks_fully_sized   100% 7 0 0   100% 2 0   100%
tests/test_progress.py MockedProgressHandlerTestCase.test_iter_chunks_with_total   100% 7 0 0   100% 2 0   100%
tests/test_progress.py MockedProgressHandlerTestCase.test_iter_chunks_total_false   100% 7 0 0   100% 2 0   100%
tests/test_progress.py MockedProgressHandlerTestCase.test_iter_chunks_not_sized   100% 7 0 0   100% 2 0   100%
tests/test_progress.py MockedProgressHandlerTestCase.test_iter_item_chunks_fully_sized   100% 7 0 0   100% 2 0   100%
tests/test_progress.py MockedProgressHandlerTestCase.test_iter_item_chunks_with_total   100% 7 0 0   100% 2 0   100%
tests/test_progress.py MockedProgressHandlerTestCase.test_iter_item_chunks_total_false   100% 7 0 0   100% 2 0   100%
tests/test_progress.py MockedProgressHandlerTestCase.test_iter_item_chunks_not_sized   100% 7 0 0   100% 2 0   100%
tests/test_progress.py (no function)   100% 37 0 2   100% 0 0   100%
tests/test_pydantic_utils.py Inner._validate   100% 3 0 0   100% 2 0   100%
tests/test_pydantic_utils.py DeferredValidationTestCase.test_json_schema   100% 1 0 0   100% 0 0   100%
tests/test_pydantic_utils.py DeferredValidationTestCase.test_dump_and_validate   100% 23 0 0   100% 0 0   100%
tests/test_pydantic_utils.py SerializableExtensionsTestCase.test_region   100% 18 0 0   100% 0 0   100%
tests/test_pydantic_utils.py SerializableExtensionsTestCase.test_time   100% 13 0 0   100% 0 0   100%
tests/test_pydantic_utils.py SerializableExtensionsTestCase.test_bytes_hex   100% 13 0 0   100% 0 0   100%
tests/test_pydantic_utils.py (no function)   100% 24 0 2   100% 0 0   100%
tests/test_quantum.py QuantumTestCase._buildFullQuantum   100% 33 0 0   100% 2 0   100%
tests/test_quantum.py QuantumTestCase.testConstructor   100% 10 0 0   100% 0 0   100%
tests/test_quantum.py QuantumTestCase.testSerialization   100% 23 0 0   100% 0 0   100%
tests/test_quantum.py (no function)   100% 12 0 2   100% 0 0   100%
tests/test_quantumBackedButler.py QuantumBackedButlerTestCase.setUp   100% 32 0 0   100% 2 0   100%
tests/test_quantumBackedButler.py QuantumBackedButlerTestCase.tearDown   100% 1 0 0   100% 0 0   100%
tests/test_quantumBackedButler.py QuantumBackedButlerTestCase.make_quantum   92% 12 1 0   75% 4 1   88%
tests/test_quantumBackedButler.py QuantumBackedButlerTestCase.test_initialize   100% 4 0 0   100% 0 0   100%
tests/test_quantumBackedButler.py QuantumBackedButlerTestCase.test_initialize_repo_index   100% 10 0 0   100% 0 0   100%
tests/test_quantumBackedButler.py QuantumBackedButlerTestCase.test_from_predicted   100% 4 0 0   100% 0 0   100%
tests/test_quantumBackedButler.py QuantumBackedButlerTestCase._test_factory   100% 7 0 0   100% 0 0   100%
tests/test_quantumBackedButler.py QuantumBackedButlerTestCase.test_getput   100% 41 0 0   100% 10 0   100%
tests/test_quantumBackedButler.py QuantumBackedButlerTestCase.test_getDeferred   100% 17 0 0   100% 6 0   100%
tests/test_quantumBackedButler.py QuantumBackedButlerTestCase.test_stored   100% 23 0 0   100% 10 0   100%
tests/test_quantumBackedButler.py QuantumBackedButlerTestCase.test_markInputUnused   100% 13 0 0   100% 4 0   100%
tests/test_quantumBackedButler.py QuantumBackedButlerTestCase.test_pruneDatasets   100% 28 0 0   100% 4 0   100%
tests/test_quantumBackedButler.py QuantumBackedButlerTestCase.test_extract_provenance_data   100% 30 0 0   100% 10 0   100%
tests/test_quantumBackedButler.py QuantumBackedButlerTestCase.test_export_predicted_datastore_records   100% 7 0 0   100% 0 0   100%
tests/test_quantumBackedButler.py QuantumBackedButlerTestCase.test_collect_and_transfer   100% 23 0 0   100% 14 0   100%
tests/test_quantumBackedButler.py QuantumBackedButlerTestCase.test_record_data_merge_mappings   100% 10 0 0   67% 6 2   88%
tests/test_quantumBackedButler.py (no function)   100% 32 0 2   100% 0 0   100%
tests/test_query_direct_postgresql.py DirectButlerPostgreSQLTests.setUpClass   100% 1 0 0   100% 0 0   100%
tests/test_query_direct_postgresql.py DirectButlerPostgreSQLTests.make_butler   0% 8 8 0   0% 2 0   0%
tests/test_query_direct_postgresql.py (no function)   100% 15 0 2   100% 0 0   100%
tests/test_query_direct_sqlite.py DirectButlerSQLiteTests.make_butler   100% 5 0 0   100% 2 0   100%
tests/test_query_direct_sqlite.py (no function)   100% 10 0 2   100% 0 0   100%
tests/test_query_interface.py _TestVisitor.__init__   100% 4 0 0   100% 0 0   100%
tests/test_query_interface.py _TestVisitor.visit_binary_expression   93% 15 1 0   79% 14 3   86%
tests/test_query_interface.py _TestVisitor.visit_comparison   100% 15 0 0   93% 14 1   97%
tests/test_query_interface.py _TestVisitor.visit_dataset_field_reference   100% 1 0 0   100% 0 0   100%
tests/test_query_interface.py _TestVisitor.visit_dimension_field_reference   100% 1 0 0   100% 0 0   100%
tests/test_query_interface.py _TestVisitor.visit_dimension_key_reference   100% 1 0 0   100% 0 0   100%
tests/test_query_interface.py _TestVisitor.visit_in_container   100% 1 0 0   100% 0 0   100%
tests/test_query_interface.py _TestVisitor.visit_in_range   100% 1 0 0   100% 0 0   100%
tests/test_query_interface.py _TestVisitor.visit_in_query_tree   100% 1 0 0   100% 0 0   100%
tests/test_query_interface.py _TestVisitor.visit_is_null   100% 1 0 0   100% 0 0   100%
tests/test_query_interface.py _TestVisitor.visit_literal   100% 1 0 0   100% 0 0   100%
tests/test_query_interface.py _TestVisitor.visit_reversed   100% 1 0 0   100% 0 0   100%
tests/test_query_interface.py _TestVisitor.visit_unary_expression   100% 7 0 0   83% 6 1   92%
tests/test_query_interface.py _TestVisitor.apply_logical_and   100% 1 0 0   100% 0 0   100%
tests/test_query_interface.py _TestVisitor.apply_logical_not   100% 1 0 0   100% 0 0   100%
tests/test_query_interface.py _TestVisitor.apply_logical_or   100% 1 0 0   100% 0 0   100%
tests/test_query_interface.py _TestQueryExecution.__init__   100% 3 0 0   100% 0 0   100%
tests/test_query_interface.py _TestQueryCount.__init__   100% 5 0 0   100% 0 0   100%
tests/test_query_interface.py _TestQueryAny.__init__   100% 4 0 0   100% 0 0   100%
tests/test_query_interface.py _TestQueryExplainNoResults.__init__   100% 3 0 0   100% 0 0   100%
tests/test_query_interface.py _TestQueryDriver.__init__   100% 8 0 0   100% 0 0   100%
tests/test_query_interface.py _TestQueryDriver.universe   100% 1 0 0   100% 0 0   100%
tests/test_query_interface.py _TestQueryDriver.__enter__   0% 1 1 0   100% 0 0   0%
tests/test_query_interface.py _TestQueryDriver.__exit__   0% 1 1 0   100% 0 0   0%
tests/test_query_interface.py _TestQueryDriver.execute   100% 4 0 0   100% 4 0   100%
tests/test_query_interface.py _TestQueryDriver._make_next_page   88% 8 1 1   83% 6 1   86%
tests/test_query_interface.py _TestQueryDriver.materialize   100% 3 0 0   100% 0 0   100%
tests/test_query_interface.py _TestQueryDriver.upload_data_coordinates   100% 3 0 0   100% 0 0   100%
tests/test_query_interface.py _TestQueryDriver.count   100% 1 0 0   100% 0 0   100%
tests/test_query_interface.py _TestQueryDriver.any   100% 1 0 0   100% 0 0   100%
tests/test_query_interface.py _TestQueryDriver.explain_no_results   100% 1 0 0   100% 0 0   100%
tests/test_query_interface.py _TestQueryDriver.get_default_collections   67% 3 1 0   50% 2 1   60%
tests/test_query_interface.py _TestQueryDriver.get_dataset_type   100% 4 0 0   100% 0 0   100%
tests/test_query_interface.py ColumnExpressionsTestCase.setUp   100% 2 0 0   100% 0 0   100%
tests/test_query_interface.py ColumnExpressionsTestCase.query   100% 1 0 0   100% 0 0   100%
tests/test_query_interface.py ColumnExpressionsTestCase.test_int_literals   100% 11 0 0   100% 0 0   100%
tests/test_query_interface.py ColumnExpressionsTestCase.test_string_literals   100% 11 0 0   100% 0 0   100%
tests/test_query_interface.py ColumnExpressionsTestCase.test_float_literals   100% 11 0 0   100% 0 0   100%
tests/test_query_interface.py ColumnExpressionsTestCase.test_hash_literals   100% 11 0 0   100% 0 0   100%
tests/test_query_interface.py ColumnExpressionsTestCase.test_uuid_literals   100% 12 0 0   100% 0 0   100%
tests/test_query_interface.py ColumnExpressionsTestCase.test_datetime_literals   100% 12 0 0   100% 0 0   100%
tests/test_query_interface.py ColumnExpressionsTestCase.test_timespan_literals   100% 14 0 0   100% 0 0   100%
tests/test_query_interface.py ColumnExpressionsTestCase.test_region_literals   100% 13 0 0   100% 0 0   100%
tests/test_query_interface.py ColumnExpressionsTestCase.test_invalid_literal   100% 2 0 0   100% 0 0   100%
tests/test_query_interface.py ColumnExpressionsTestCase.test_dimension_key_reference   100% 10 0 0   100% 0 0   100%
tests/test_query_interface.py ColumnExpressionsTestCase.test_dimension_field_reference   100% 13 0 0   100% 0 0   100%
tests/test_query_interface.py ColumnExpressionsTestCase.test_dataset_field_reference   100% 16 0 0   100% 0 0   100%
tests/test_query_interface.py ColumnExpressionsTestCase.test_unary_negation   100% 13 0 0   100% 0 0   100%
tests/test_query_interface.py ColumnExpressionsTestCase.test_unary_timespan_begin   100% 16 0 0   100% 0 0   100%
tests/test_query_interface.py ColumnExpressionsTestCase.test_unary_timespan_end   100% 16 0 0   100% 0 0   100%
tests/test_query_interface.py ColumnExpressionsTestCase.test_binary_expression_float   100% 13 0 0   100% 2 0   100%
tests/test_query_interface.py ColumnExpressionsTestCase.test_binary_modulus   100% 13 0 0   100% 2 0   100%
tests/test_query_interface.py ColumnExpressionsTestCase.test_binary_expression_validation   100% 6 0 0   100% 0 0   100%
tests/test_query_interface.py ColumnExpressionsTestCase.test_reversed   100% 11 0 0   100% 0 0   100%
tests/test_query_interface.py ColumnExpressionsTestCase.test_trivial_predicate   100% 21 0 0   100% 6 0   100%
tests/test_query_interface.py ColumnExpressionsTestCase.test_comparison   100% 18 0 0   100% 4 0   100%
tests/test_query_interface.py ColumnExpressionsTestCase.test_overlap_comparison   100% 19 0 0   100% 0 0   100%
tests/test_query_interface.py ColumnExpressionsTestCase.test_invalid_comparison   100% 4 0 0   100% 0 0   100%
tests/test_query_interface.py ColumnExpressionsTestCase.test_is_null   100% 15 0 0   100% 0 0   100%
tests/test_query_interface.py ColumnExpressionsTestCase.test_in_container   100% 26 0 0   100% 0 0   100%
tests/test_query_interface.py ColumnExpressionsTestCase.test_in_range   100% 24 0 0   100% 0 0   100%
tests/test_query_interface.py ColumnExpressionsTestCase.test_in_query   100% 27 0 0   100% 0 0   100%
tests/test_query_interface.py ColumnExpressionsTestCase.test_complex_predicate   100% 9 0 0   100% 2 0   100%
tests/test_query_interface.py ColumnExpressionsTestCase.test_proxy_misc   100% 11 0 0   100% 0 0   100%
tests/test_query_interface.py QueryTestCase.setUp   100% 8 0 0   100% 0 0   100%
tests/test_query_interface.py QueryTestCase.query   100% 4 0 0   100% 0 0   100%
tests/test_query_interface.py QueryTestCase.test_dataset_join   100% 13 0 0   100% 0 0   100%
tests/test_query_interface.py QueryTestCase.test_dataset_join.check   100% 46 0 0   100% 2 0   100%
tests/test_query_interface.py QueryTestCase.test_dataset_join.check.check_query_tree   100% 8 0 0   100% 0 0   100%
tests/test_query_interface.py QueryTestCase.test_dataset_join.check.check_data_id_results   100% 4 0 0   100% 0 0   100%
tests/test_query_interface.py QueryTestCase.test_dataset_join.check.check_dataset_results   100% 4 0 0   100% 0 0   100%
tests/test_query_interface.py QueryTestCase.test_dataset_join.check.check_materialization   100% 19 0 0   100% 4 0   100%
tests/test_query_interface.py QueryTestCase.test_dimension_record_results   100% 20 0 0   100% 0 0   100%
tests/test_query_interface.py QueryTestCase.test_dimension_record_results.check   100% 23 0 0   100% 2 0   100%
tests/test_query_interface.py QueryTestCase.test_join_data_coordinate_table   100% 28 0 0   100% 4 0   100%
tests/test_query_interface.py QueryTestCase.test_dimension_record_iteration   100% 6 0 0   100% 0 0   100%
tests/test_query_interface.py QueryTestCase.test_dimension_record_iteration.make_record   100% 1 0 0   100% 0 0   100%
tests/test_query_interface.py QueryTestCase.test_data_coordinate_results   100% 14 0 0   100% 0 0   100%
tests/test_query_interface.py QueryTestCase.test_data_coordinate_results.check   100% 23 0 0   100% 2 0   100%
tests/test_query_interface.py QueryTestCase.test_data_coordinate_iteration   100% 4 0 0   100% 0 0   100%
tests/test_query_interface.py QueryTestCase.test_data_coordinate_iteration.make_data_id   100% 1 0 0   100% 0 0   100%
tests/test_query_interface.py QueryTestCase.test_dataset_results   100% 16 0 0   100% 0 0   100%
tests/test_query_interface.py QueryTestCase.test_dataset_results.check   100% 27 0 0   100% 2 0   100%
tests/test_query_interface.py QueryTestCase.test_dataset_iteration   100% 4 0 0   100% 0 0   100%
tests/test_query_interface.py QueryTestCase.test_dataset_iteration.make_ref   100% 1 0 0   100% 0 0   100%
tests/test_query_interface.py QueryTestCase.test_identifiers   100% 22 0 0   100% 0 0   100%
tests/test_query_interface.py QueryTestCase.test_identifiers.extract_order_by   100% 3 0 0   100% 0 0   100%
tests/test_query_interface.py QueryTestCase.test_invalid_models   100% 17 0 0   100% 0 0   100%
tests/test_query_interface.py QueryTestCase.test_general_result_spec   100% 19 0 0   100% 0 0   100%
tests/test_query_interface.py (no function)   100% 111 0 2   100% 0 0   100%
tests/test_query_remote.py RemoteButlerQueryTests.make_butler   0% 5 5 0   0% 2 0   0%
tests/test_query_remote.py (no function)   92% 13 1 2   50% 2 1   87%
tests/test_query_utilities.py ColumnSetTestCase.setUp   100% 1 0 0   100% 0 0   100%
tests/test_query_utilities.py ColumnSetTestCase.test_basics   100% 36 0 0   100% 0 0   100%
tests/test_query_utilities.py ColumnSetTestCase.test_drop_dimension_keys   100% 16 0 0   100% 0 0   100%
tests/test_query_utilities.py ColumnSetTestCase.test_get_column_spec   100% 27 0 0   100% 0 0   100%
tests/test_query_utilities.py _RecordingOverlapsVisitor.__init__   100% 6 0 0   100% 0 0   100%
tests/test_query_utilities.py _RecordingOverlapsVisitor.visit_spatial_constraint   100% 2 0 0   100% 0 0   100%
tests/test_query_utilities.py _RecordingOverlapsVisitor.visit_spatial_join   100% 2 0 0   100% 0 0   100%
tests/test_query_utilities.py _RecordingOverlapsVisitor.visit_temporal_dimension_join   100% 2 0 0   100% 0 0   100%
tests/test_query_utilities.py _RecordingOverlapsVisitor.visit_validity_range_dimension_join   100% 2 0 0   100% 0 0   100%
tests/test_query_utilities.py _RecordingOverlapsVisitor.visit_validity_range_join   100% 2 0 0   100% 0 0   100%
tests/test_query_utilities.py OverlapsVisitorTestCase.setUp   100% 1 0 0   100% 0 0   100%
tests/test_query_utilities.py OverlapsVisitorTestCase.run_visitor   100% 6 0 0   100% 2 0   100%
tests/test_query_utilities.py OverlapsVisitorTestCase.test_trivial   100% 9 0 0   100% 0 0   100%
tests/test_query_utilities.py OverlapsVisitorTestCase.test_one_spatial_family   100% 23 0 0   100% 0 0   100%
tests/test_query_utilities.py OverlapsVisitorTestCase.test_single_unambiguous_spatial_join   100% 25 0 0   100% 0 0   100%
tests/test_query_utilities.py OverlapsVisitorTestCase.test_single_flexible_spatial_join   100% 17 0 0   100% 0 0   100%
tests/test_query_utilities.py OverlapsVisitorTestCase.test_multiple_spatial_joins   100% 13 0 0   100% 0 0   100%
tests/test_query_utilities.py OverlapsVisitorTestCase.test_one_temporal_family   100% 30 0 0   100% 0 0   100%
tests/test_query_utilities.py NaiveDisjointSetTestCase.test_naive_disjoint_set   100% 8 0 0   100% 0 0   100%
tests/test_query_utilities.py (no function)   100% 34 0 2   100% 0 0   100%
tests/test_registry_dataset_type_overrides.py RegistryDatasetTypeOverridesTestCase.setUp   100% 7 0 0   100% 0 0   100%
tests/test_registry_dataset_type_overrides.py RegistryDatasetTypeOverridesTestCase.test_rename   100% 25 0 0   100% 0 0   100%
tests/test_registry_dataset_type_overrides.py RegistryDatasetTypeOverridesTestCase.test_rename_registration   100% 7 0 0   100% 0 0   100%
tests/test_registry_dataset_type_overrides.py RegistryDatasetTypeOverridesTestCase.setup_rename   100% 8 0 0   100% 0 0   100%
tests/test_registry_dataset_type_overrides.py RegistryDatasetTypeOverridesTestCase.test_storage_class_override_config   100% 25 0 0   100% 0 0   100%
tests/test_registry_dataset_type_overrides.py RegistryDatasetTypeOverridesTestCase.test_storage_class_override_config_registration   100% 8 0 0   100% 0 0   100%
tests/test_registry_dataset_type_overrides.py RegistryDatasetTypeOverridesTestCase.setup_storage_class   100% 6 0 0   100% 0 0   100%
tests/test_registry_dataset_type_overrides.py (no function)   100% 15 0 2   100% 0 0   100%
tests/test_remote_butler.py RemoteButlerConfigTests.test_bad_config   0% 2 2 0   100% 0 0   0%
tests/test_remote_butler.py RemoteButlerErrorHandlingTests.setUp   0% 3 3 0   100% 0 0   0%
tests/test_remote_butler.py RemoteButlerErrorHandlingTests._mock_error_response   0% 1 1 0   100% 0 0   0%
tests/test_remote_butler.py RemoteButlerErrorHandlingTests.test_internal_server_error   0% 3 3 0   100% 0 0   0%
tests/test_remote_butler.py RemoteButlerErrorHandlingTests.test_unknown_error_type   0% 3 3 0   100% 0 0   0%
tests/test_remote_butler.py RemoteButlerErrorHandlingTests.test_non_json_error   0% 3 3 0   100% 0 0   0%
tests/test_remote_butler.py RemoteButlerErrorHandlingTests.test_malformed_error   0% 3 3 0   100% 0 0   0%
tests/test_remote_butler.py RemoteButlerMiscTests.test_retrieve_artifacts_security   100% 4 0 0   100% 0 0   100%
tests/test_remote_butler.py RemoteButlerRegistryTests.setUp   0% 1 1 0   100% 0 0   0%
tests/test_remote_butler.py RemoteButlerRegistryTests.getDataDir   0% 1 1 0   100% 0 0   0%
tests/test_remote_butler.py RemoteButlerRegistryTests.make_butler   0% 1 1 0   100% 0 0   0%
tests/test_remote_butler.py RemoteButlerRegistryTests.testBasicTransaction   0% 1 1 0   100% 0 0   0%
tests/test_remote_butler.py RemoteButlerRegistryTests.testNestedTransaction   0% 1 1 0   100% 0 0   0%
tests/test_remote_butler.py RemoteButlerRegistryTests.testOpaque   0% 1 1 0   100% 0 0   0%
tests/test_remote_butler.py RemoteButlerRegistryTests.testCollectionChainPrependConcurrency   0% 1 1 0   100% 0 0   0%
tests/test_remote_butler.py RemoteButlerRegistryTests.testCollectionChainReplaceConcurrency   0% 1 1 0   100% 0 0   0%
tests/test_remote_butler.py RemoteButlerRegistryTests.testCollectionChainRemoveConcurrency   0% 1 1 0   100% 0 0   0%
tests/test_remote_butler.py RemoteButlerRegistryTests.testAttributeManager   0% 1 1 0   100% 0 0   0%
tests/test_remote_butler.py RemoteButlerPostgresRegistryTests.setUpClass   0% 2 2 0   100% 0 0   0%
tests/test_remote_butler.py RemoteButlerPostgresRegistryTests.testSkipCalibs   0% 3 3 0   0% 2 0   0%
tests/test_remote_butler.py (no function)   94% 51 3 2   50% 2 1   92%
tests/test_server.py ButlerClientServerTestCase.setUpClass   0% 13 13 0   100% 0 0   0%
tests/test_server.py ButlerClientServerTestCase.test_health_check   0% 8 8 0   100% 0 0   0%
tests/test_server.py ButlerClientServerTestCase.test_static_files   0% 9 9 0   0% 2 0   0%
tests/test_server.py ButlerClientServerTestCase.test_dimension_universe   0% 2 2 0   100% 0 0   0%
tests/test_server.py ButlerClientServerTestCase.test_get_dataset_type   0% 4 4 0   100% 0 0   0%
tests/test_server.py ButlerClientServerTestCase.test_find_dataset   0% 21 21 0   100% 0 0   0%
tests/test_server.py ButlerClientServerTestCase.test_instantiate_via_butler_http_search   0% 17 17 0   100% 0 0   0%
tests/test_server.py ButlerClientServerTestCase.test_instantiate_via_butler_http_search.override_read   0% 1 1 0   100% 0 0   0%
tests/test_server.py ButlerClientServerTestCase.test_get   0% 40 40 0   100% 0 0   0%
tests/test_server.py ButlerClientServerTestCase.test_get.check_sc_override   0% 3 3 0   100% 0 0   0%
tests/test_server.py ButlerClientServerTestCase.test_getURIs_no_components   0% 5 5 0   100% 0 0   0%
tests/test_server.py ButlerClientServerTestCase.test_getURIs_no_components.check_uri   0% 3 3 0   100% 0 0   0%
tests/test_server.py ButlerClientServerTestCase.test_getURIs_multiple_components   0% 12 12 0   100% 0 0   0%
tests/test_server.py ButlerClientServerTestCase.test_getURIs_multiple_components.check_uris   0% 6 6 0   100% 0 0   0%
tests/test_server.py ButlerClientServerTestCase.test_file_download_redirect   0% 25 25 0   100% 0 0   0%
tests/test_server.py ButlerClientServerTestCase.test_file_download_redirect.get_download_redirect   0% 2 2 0   100% 0 0   0%
tests/test_server.py ButlerClientServerTestCase.test_auth_check   0% 2 2 0   100% 0 0   0%
tests/test_server.py ButlerClientServerTestCase.test_exception_logging   0% 17 17 0   100% 0 0   0%
tests/test_server.py ButlerClientServerTestCase.test_exception_logging.raise_error   0% 1 1 0   100% 0 0   0%
tests/test_server.py ButlerClientServerTestCase.test_exception_logging.noop   0% 1 1 0   100% 0 0   0%
tests/test_server.py ButlerClientServerTestCase.test_exception_logging.get_logger   0% 1 1 0   100% 0 0   0%
tests/test_server.py ButlerClientServerTestCase.test_query_keepalive   0% 8 8 0   100% 0 0   0%
tests/test_server.py ButlerClientServerTestCase.test_query_retries   0% 19 19 0   0% 2 0   0%
tests/test_server.py ButlerClientServerTestCase.test_query_retries.block_first_request   0% 2 2 0   100% 0 0   0%
tests/test_server.py ButlerClientServerTestCase.test_query_retries.block_second_request   0% 1 1 0   100% 0 0   0%
tests/test_server.py ButlerClientServerTestCase.test_query_retries.do_query   0% 1 1 0   100% 0 0   0%
tests/test_server.py ButlerClientServerTestCase.test_deprecated_collection_endpoints   0% 5 5 0   100% 0 0   0%
tests/test_server.py ButlerClientServerTestCase.test_oversized_data_coordinate_upload   0% 6 6 0   100% 0 0   0%
tests/test_server.py ButlerClientServerAuthorizationTestCase.test_group_authorization   0% 16 16 0   100% 0 0   0%
tests/test_server.py ButlerClientServerAuthorizationTestCase.test_cadc_auth   0% 16 16 0   100% 0 0   0%
tests/test_server.py ButlerClientServerAuthorizationTestCase.test_cadc_auth.check_path   0% 4 4 0   100% 0 0   0%
tests/test_server.py _create_corrupted_dataset   0% 6 6 0   100% 0 0   0%
tests/test_server.py _create_simple_dataset   0% 3 3 0   100% 0 0   0%
tests/test_server.py _timeout_twice   0% 3 3 0   100% 0 0   0%
tests/test_server.py _timeout_twice.timeout   0% 4 4 0   0% 2 0   0%
tests/test_server.py QueryLimitsTestCase.test_query_limits   0% 8 8 0   100% 0 0   0%
tests/test_server.py (no function)   75% 67 17 2   50% 2 1   74%
tests/test_simpleButler.py SimpleButlerTests.makeButler   100% 0 0 1   100% 0 0   100%
tests/test_simpleButler.py SimpleButlerTests.comparableRef   100% 1 0 0   100% 0 0   100%
tests/test_simpleButler.py SimpleButlerTests.testReadBackwardsCompatibility   100% 4 0 0   100% 0 0   100%
tests/test_simpleButler.py SimpleButlerTests.testDatasetTransfers   100% 13 0 0   100% 0 0   100%
tests/test_simpleButler.py SimpleButlerTests.testImportTwice   100% 14 0 0   100% 0 0   100%
tests/test_simpleButler.py SimpleButlerTests.testCollectionTransfers   100% 44 0 0   100% 2 0   100%
tests/test_simpleButler.py SimpleButlerTests.testButlerGet   86% 22 3 0   100% 4 0   88%
tests/test_simpleButler.py SimpleButlerTests.testGetCalibration   100% 59 0 0   100% 0 0   100%
tests/test_simpleButler.py SimpleButlerTests.testRegistryDefaults   100% 35 0 0   100% 0 0   100%
tests/test_simpleButler.py SimpleButlerTests.testJson   100% 14 0 0   100% 6 0   100%
tests/test_simpleButler.py SimpleButlerTests.test_populated_by   100% 8 0 0   100% 0 0   100%
tests/test_simpleButler.py SimpleButlerTests.testJsonDimensionRecordsAndHtmlRepresentation   100% 16 0 0   100% 6 0   100%
tests/test_simpleButler.py SimpleButlerTests.test_dimension_records_import   100% 8 0 0   100% 2 0   100%
tests/test_simpleButler.py SimpleButlerTests.testWildcardQueries   100% 17 0 0   88% 8 1   96%
tests/test_simpleButler.py SimpleButlerTests.test_skypix_templates   100% 12 0 0   100% 0 0   100%
tests/test_simpleButler.py SimpleButlerTests.test_expand_changed_id   100% 5 0 0   100% 0 0   100%
tests/test_simpleButler.py SimpleButlerTests.test_clone   100% 28 0 0   100% 0 0   100%
tests/test_simpleButler.py SimpleButlerTests.test_calibration_dataset_type_registration   100% 20 0 0   100% 0 0   100%
tests/test_simpleButler.py DirectSimpleButlerTestCase.setUp   100% 1 0 0   100% 0 0   100%
tests/test_simpleButler.py DirectSimpleButlerTestCase.tearDown   100% 1 0 0   100% 0 0   100%
tests/test_simpleButler.py DirectSimpleButlerTestCase.makeButler   100% 14 0 0   100% 0 0   100%
tests/test_simpleButler.py DirectSimpleButlerTestCase.test_dataset_uris   100% 35 0 0   100% 4 0   100%
tests/test_simpleButler.py RemoteSimpleButlerTestCase.makeButler   0% 5 5 0   100% 0 0   0%
tests/test_simpleButler.py _mock_get_dataset_as_python_object   0% 1 1 0   100% 0 0   0%
tests/test_simpleButler.py (no function)   95% 58 3 2   50% 2 1   93%
tests/test_sqlite.py removeWritePermission   100% 5 0 0   100% 0 0   100%
tests/test_sqlite.py isEmptyDatabaseActuallyWriteable   100% 7 0 0   100% 0 0   100%
tests/test_sqlite.py SqliteFileDatabaseTestCase.setUp   100% 1 0 0   100% 0 0   100%
tests/test_sqlite.py SqliteFileDatabaseTestCase.tearDown   100% 1 0 0   100% 0 0   100%
tests/test_sqlite.py SqliteFileDatabaseTestCase.makeEmptyDatabase   100% 5 0 0   100% 0 0   100%
tests/test_sqlite.py SqliteFileDatabaseTestCase.getNewConnection   100% 4 0 0   100% 0 0   100%
tests/test_sqlite.py SqliteFileDatabaseTestCase.asReadOnly   100% 2 0 0   100% 0 0   100%
tests/test_sqlite.py SqliteFileDatabaseTestCase.testConnection   100% 28 0 0   100% 0 0   100%
tests/test_sqlite.py SqliteFileDatabaseTestCase.testTransactionLocking   100% 1 0 0   100% 0 0   100%
tests/test_sqlite.py SqliteMemoryDatabaseTestCase.makeEmptyDatabase   100% 4 0 0   100% 0 0   100%
tests/test_sqlite.py SqliteMemoryDatabaseTestCase.getNewConnection   100% 3 0 0   100% 0 0   100%
tests/test_sqlite.py SqliteMemoryDatabaseTestCase.asReadOnly   100% 1 0 0   100% 0 0   100%
tests/test_sqlite.py SqliteMemoryDatabaseTestCase.testConnection   100% 16 0 0   100% 0 0   100%
tests/test_sqlite.py SqliteMemoryDatabaseTestCase.testTransactionLocking   100% 1 0 0   100% 0 0   100%
tests/test_sqlite.py SqliteFileRegistryTests.setUp   100% 1 0 0   100% 0 0   100%
tests/test_sqlite.py SqliteFileRegistryTests.tearDown   100% 1 0 0   100% 0 0   100%
tests/test_sqlite.py SqliteFileRegistryTests.getDataDir   0% 1 1 0   100% 0 0   0%
tests/test_sqlite.py SqliteFileRegistryTests.make_butler   100% 7 0 0   100% 2 0   100%
tests/test_sqlite.py ClonedSqliteFileRegistryNameKeyCollMgrUUIDTestCase.make_butler   100% 2 0 0   100% 0 0   100%
tests/test_sqlite.py SqliteMemoryRegistryTests.getDataDir   0% 1 1 0   100% 0 0   0%
tests/test_sqlite.py SqliteMemoryRegistryTests.make_butler   100% 5 0 0   100% 2 0   100%
tests/test_sqlite.py SqliteMemoryRegistryTests.testMissingAttributes   100% 4 0 0   100% 0 0   100%
tests/test_sqlite.py (no function)   100% 62 0 2   100% 0 0   100%
tests/test_storageClass.py NotCopyable.__deepcopy__   100% 1 0 0   100% 0 0   100%
tests/test_storageClass.py StorageClassFactoryTestCase.testCreation   100% 33 0 0   100% 0 0   100%
tests/test_storageClass.py StorageClassFactoryTestCase.testParameters   100% 12 0 0   100% 2 0   100%
tests/test_storageClass.py StorageClassFactoryTestCase.testEquality   100% 23 0 0   100% 0 0   100%
tests/test_storageClass.py StorageClassFactoryTestCase.testTypeEquality   100% 5 0 0   100% 0 0   100%
tests/test_storageClass.py StorageClassFactoryTestCase.testRegistry   100% 34 0 0   100% 0 0   100%
tests/test_storageClass.py StorageClassFactoryTestCase.testFactoryFind   100% 12 0 0   100% 0 0   100%
tests/test_storageClass.py StorageClassFactoryTestCase.testFactoryConfig   100% 24 0 0   100% 0 0   100%
tests/test_storageClass.py StorageClassFactoryTestCase.testPickle   100% 7 0 0   100% 0 0   100%
tests/test_storageClass.py StorageClassFactoryTestCase._convert_type   100% 3 0 0   100% 2 0   100%
tests/test_storageClass.py StorageClassFactoryTestCase.testConverters   100% 30 0 0   100% 0 0   100%
tests/test_storageClass.py (no function)   100% 29 0 2   100% 0 0   100%
tests/test_templates.py TestFileTemplates.makeDatasetRef   100% 10 0 0   100% 4 0   100%
tests/test_templates.py TestFileTemplates.setUp   100% 2 0 0   100% 0 0   100%
tests/test_templates.py TestFileTemplates.assertTemplate   100% 3 0 0   100% 0 0   100%
tests/test_templates.py TestFileTemplates.testBasic   100% 30 0 0   100% 0 0   100%
tests/test_templates.py TestFileTemplates.testAlternates   100% 4 0 0   100% 0 0   100%
tests/test_templates.py TestFileTemplates.testRunOrCollectionNeeded   100% 3 0 0   100% 0 0   100%
tests/test_templates.py TestFileTemplates.testNoRecord   100% 4 0 0   100% 0 0   100%
tests/test_templates.py TestFileTemplates.testOptional   100% 13 0 0   100% 0 0   100%
tests/test_templates.py TestFileTemplates.testComponent   100% 14 0 0   100% 0 0   100%
tests/test_templates.py TestFileTemplates.testFields   100% 12 0 0   100% 2 0   100%
tests/test_templates.py TestFileTemplates.testSimpleConfig   100% 52 0 0   100% 0 0   100%
tests/test_templates.py TestFileTemplates.testValidation   100% 21 0 0   100% 0 0   100%
tests/test_templates.py (no function)   100% 21 0 2   100% 0 0   100%
tests/test_testRepo.py ButlerTestRepoTestCase.setUp   100% 1 0 0   100% 0 0   100%
tests/test_testRepo.py ButlerTestRepoTestCase.tearDown   100% 1 0 0   100% 0 0   100%
tests/test_testRepo.py ButlerTestRepoTestCase.testMakeTestRepo   100% 5 0 0   100% 0 0   100%
tests/test_testRepo.py ButlerUtilsTestSuite.setUpClass   100% 13 0 0   100% 0 0   100%
tests/test_testRepo.py ButlerUtilsTestSuite.tearDownClass   100% 1 0 0   100% 0 0   100%
tests/test_testRepo.py ButlerUtilsTestSuite.setUp   100% 1 0 0   100% 0 0   100%
tests/test_testRepo.py ButlerUtilsTestSuite.testButlerValid   100% 1 0 0   100% 0 0   100%
tests/test_testRepo.py ButlerUtilsTestSuite.testButlerKwargs   100% 5 0 0   100% 0 0   100%
tests/test_testRepo.py ButlerUtilsTestSuite._checkButlerDimension   100% 3 0 0   100% 0 0   100%
tests/test_testRepo.py ButlerUtilsTestSuite.testButlerDimensions   100% 4 0 0   100% 0 0   100%
tests/test_testRepo.py ButlerUtilsTestSuite.testAddDataIdValue   100% 16 0 0   100% 0 0   100%
tests/test_testRepo.py ButlerUtilsTestSuite.testAddDatasetType   100% 7 0 0   100% 0 0   100%
tests/test_testRepo.py ButlerUtilsTestSuite.testRegisterMetricsExample   100% 8 0 0   100% 0 0   100%
tests/test_testRepo.py ButlerUtilsTestSuite.testRegisterMetricsExampleChained   100% 13 0 0   100% 0 0   100%
tests/test_testRepo.py ButlerUtilsTestSuite.testUniqueButler   100% 7 0 0   100% 0 0   100%
tests/test_testRepo.py ButlerUtilsTestSuite.testExpandUniqueId   100% 6 0 0   100% 0 0   100%
tests/test_testRepo.py (no function)   100% 27 0 2   100% 0 0   100%
tests/test_thread_utils.py ThreadSafeCacheTestCase.test_cache   100% 7 0 0   100% 0 0   100%
tests/test_thread_utils.py NamedLocksTestCase.test_named_locks   100% 13 0 0   100% 0 0   100%
tests/test_thread_utils.py LockedObjectTestCase.test_named_locks   100% 7 0 0   100% 0 0   100%
tests/test_thread_utils.py (no function)   100% 10 0 2   100% 0 0   100%
tests/test_time_utils.py TimeTestCase.test_time_before_epoch   100% 5 0 0   100% 0 0   100%
tests/test_time_utils.py TimeTestCase.test_max_time   100% 13 0 0   50% 2 1   93%
tests/test_time_utils.py TimeTestCase.test_round_trip   100% 12 0 0   100% 6 0   100%
tests/test_time_utils.py TimeTestCase.test_times_equal   100% 30 0 0   100% 0 0   100%
tests/test_time_utils.py (no function)   86% 14 2 2   100% 0 0   86%
tests/test_timespan.py TimespanTestCase.setUp   100% 8 0 0   100% 0 0   100%
tests/test_timespan.py TimespanTestCase.testEmpty   100% 23 0 0   100% 4 0   100%
tests/test_timespan.py TimespanTestCase.testFromInstant   100% 1 0 0   100% 0 0   100%
tests/test_timespan.py TimespanTestCase.testInvalid   100% 13 0 0   100% 0 0   100%
tests/test_timespan.py TimespanTestCase.testStrings   92% 13 1 0   88% 8 1   90%
tests/test_timespan.py TimespanTestCase.testOperationConsistency   100% 36 0 0   82% 22 4   93%
tests/test_timespan.py TimespanTestCase.testPrecision   100% 14 0 0   100% 0 0   100%
tests/test_timespan.py TimespanTestCase.testTimescales   100% 3 0 0   100% 0 0   100%
tests/test_timespan.py TimespanTestCase.testFuture   100% 10 0 0   50% 2 1   92%
tests/test_timespan.py TimespanTestCase.test_serialization   100% 13 0 0   100% 0 0   100%
tests/test_timespan.py TimespanTestCase.test_day_obs   100% 7 0 0   100% 2 0   100%
tests/test_timespan.py (no function)   92% 24 2 2   100% 0 0   92%
tests/test_utils.py NamedKeyDictTest.setUp   100% 5 0 0   100% 0 0   100%
tests/test_utils.py NamedKeyDictTest.check   100% 7 0 0   100% 0 0   100%
tests/test_utils.py NamedKeyDictTest.testConstruction   100% 2 0 0   100% 0 0   100%
tests/test_utils.py NamedKeyDictTest.testDuplicateNameConstruction   100% 5 0 0   100% 0 0   100%
tests/test_utils.py NamedKeyDictTest.testNoNameConstruction   100% 5 0 0   100% 0 0   100%
tests/test_utils.py NamedKeyDictTest.testGetItem   100% 7 0 0   100% 0 0   100%
tests/test_utils.py NamedKeyDictTest.testSetItem   100% 9 0 0   100% 0 0   100%
tests/test_utils.py NamedKeyDictTest.testDelItem   100% 6 0 0   100% 0 0   100%
tests/test_utils.py NamedKeyDictTest.testIter   100% 1 0 0   100% 0 0   100%
tests/test_utils.py NamedKeyDictTest.testEquality   100% 3 0 0   100% 0 0   100%
tests/test_utils.py NamedValueSetTest.setUp   100% 4 0 0   100% 0 0   100%
tests/test_utils.py NamedValueSetTest.testConstruction   100% 6 0 0   100% 4 0   100%
tests/test_utils.py NamedValueSetTest.testNoNameConstruction   100% 2 0 0   100% 0 0   100%
tests/test_utils.py NamedValueSetTest.testGetItem   100% 7 0 0   100% 0 0   100%
tests/test_utils.py NamedValueSetTest.testEquality   100% 4 0 0   100% 0 0   100%
tests/test_utils.py NamedValueSetTest.checkOperator   100% 2 0 0   100% 0 0   100%
tests/test_utils.py NamedValueSetTest.testOperators   100% 6 0 0   100% 0 0   100%
tests/test_utils.py NamedValueSetTest.testPop   100% 7 0 0   100% 0 0   100%
tests/test_utils.py NamedValueSetTest.testRemove   100% 9 0 0   100% 0 0   100%
tests/test_utils.py GlobToRegexTestCase.testStarInList   100% 3 0 0   100% 0 0   100%
tests/test_utils.py GlobToRegexTestCase.testGlobList   100% 14 0 0   100% 8 0   100%
tests/test_utils.py (no function)   100% 31 0 2   100% 0 0   100%
tests/test_uuid.py UUIDv7TestCase.test_generate_uuidv7   100% 11 0 0   100% 0 0   100%
tests/test_uuid.py (no function)   100% 6 0 0   100% 0 0   100%
tests/test_versioning.py Manager0.currentVersions   100% 1 0 0   100% 0 0   100%
tests/test_versioning.py Manager1.currentVersions   100% 1 0 0   100% 0 0   100%
tests/test_versioning.py Manager1_1.currentVersions   100% 1 0 0   100% 0 0   100%
tests/test_versioning.py Manager2.currentVersions   100% 1 0 0   100% 0 0   100%
tests/test_versioning.py Manager2._newDefaultSchemaVersion   100% 1 0 0   100% 0 0   100%
tests/test_versioning.py SchemaVersioningTestCase.setUp   100% 1 0 0   100% 0 0   100%
tests/test_versioning.py SchemaVersioningTestCase.tearDown   100% 1 0 0   100% 0 0   100%
tests/test_versioning.py SchemaVersioningTestCase.makeEmptyDatabase   100% 5 0 0   100% 0 0   100%
tests/test_versioning.py SchemaVersioningTestCase.test_new_schema   100% 28 0 0   100% 6 0   100%
tests/test_versioning.py SchemaVersioningTestCase.test_existing_schema   100% 27 0 0   100% 6 0   100%
tests/test_versioning.py SchemaVersioningTestCase.test_compatibility   100% 7 0 0   100% 4 0   100%
tests/test_versioning.py (no function)   100% 36 0 2   100% 0 0   100%
Total     87% 50383 6407 1069   77% 11762 1369   85%

No items found using the specified filter.