@class NSURL, NSMutableDictionary, NSDate, VNCanceller, VCPPhotosFaceProcessingContext, NSObject, VNClustererBuilder, NSMutableArray, NSString, VCPPhotosPersistenceDelegate, NSSet, NSMutableSet, PHPhotoLibrary, NSNumber, VCPSuggestionRequest, NSLock; @protocol OS_dispatch_queue, OS_dispatch_group; @interface VCPClusterer : NSObject { PHPhotoLibrary *_photoLibrary; VCPPhotosPersistenceDelegate *_persistenceDelegate; NSObject *_processingQueue; NSObject *_processingGroup; struct atomic { struct __cxx_atomic_impl> { _Atomic BOOL __a_value; } __a_; } _canceled; VCPPhotosFaceProcessingContext *_context; NSURL *_cacheDirUrl; NSURL *_cacheFileUrl; NSString *_clusteringType; NSNumber *_threshold; NSSet *_faceCSNsInClusterCache; unsigned long long _nextSeqNum; NSMutableSet *_faceIdStrsToAdd; NSMutableSet *_faceCSNsToRemove; unsigned long long _accumulatedChangesCount; unsigned long long _nextClusterTriggeringAccumulatedChangesCount; VNCanceller *_visionCanceler; VNClustererBuilder *_clusterBuilder; BOOL _rebuildClusterer; NSMutableArray *_outstandingSuggestionRequests; VCPSuggestionRequest *_currentSuggestionRequest; NSLock *_suggestionLock; NSLock *_currentStatusSnapshotLock; struct { unsigned long long countOfEligibleFaces; unsigned long long countOfFacesPendingToAdd; BOOL isClustering; BOOL rebuildRequired; } _currentStatusSnapshot; BOOL _currentStatusSnapshotIsValid; NSLock *_propertyDictionaryLock; NSMutableDictionary *_propertyDictionary; NSDate *_timestampOfLastClusterComparison; struct mach_timebase_info { unsigned int numer; unsigned int denom; } _timebase; } @property (readonly, nonatomic) BOOL needsFullSync; @property (readonly, nonatomic) BOOL needsUpdate; @property (readonly, nonatomic, getter=isReady) BOOL ready; @property (nonatomic) unsigned long long clustererBringUpState; @property (readonly, nonatomic) unsigned long long clustererState; + (BOOL)removeClusteringStateCacheWithURL:(id)a0 error:(id *)a1; - (void)terminate; - (id)status; - (void).cxx_destruct; - (unsigned long long)clusterCount; - (id)_visionClusterMemmapFileInCacheDirectoryURL:(id)a0 clusterState:(id)a1 error:(id *)a2; - (id)_bringUpStateDescription:(unsigned long long)a0; - (void)_cancelClusteringAndRestoreClusterCache:(BOOL)a0; - (id)_faceTorsoprintsFromFaceCSNs:(id)a0; - (id)_faceTorsoprintsFromFaceIdentifiers:(id)a0 assignClusterSeqNumberIfNeeded:(BOOL)a1 updatedFaces:(id)a2 groupingIdentifiers:(id)a3; - (id)_faceTorsoprintsFromFaces:(id)a0 assignClusterSeqNumberIfNeeded:(BOOL)a1 updatedFaces:(id)a2; - (BOOL)_performAndPersistClustersWithFaceTorsoprintsToAdd:(id)a0 groupingIdentifiersToAdd:(id)a1 faceTorsoprintsToRemove:(id)a2 updatedFaces:(id)a3 cancelOrExtendTimeoutBlock:(id /* block */)a4 error:(id *)a5; - (void)_processingQueueDetermineNextClusterTriggeringAccumulatedChangesCountIfNecessary; - (BOOL)_processingQueueGetFaceClusterSequenceNumbersInClusterCache:(id *)a0 lastClusterSequenceNumber:(unsigned long long *)a1 error:(id *)a2; - (BOOL)_processingQueueGetVisionClusters:(id)a0 minimumClusterSize:(unsigned long long)a1 returnClusterAsCountedSet:(BOOL)a2 excludedL0ClustersByL1ClusterId:(id *)a3 cancelOrExtendTimeoutBlock:(id /* block */)a4 error:(id *)a5; - (BOOL)_processingQueuePerformForcedFaceClustering:(BOOL)a0 cancelOrExtendTimeoutBlock:(id /* block */)a1; - (void)_processingQueueQuickSyncClustererWithPhotoLibraryUsingFacesInClusterCache:(id)a0 visionClusters:(id *)a1 cancelOrExtendTimeoutBlock:(id /* block */)a2; - (BOOL)_processingQueueResetClusterCache:(id *)a0; - (BOOL)_processingQueueRestoreClusterCacheAndSyncWithLibrary:(BOOL)a0 cancelOrExtendTimeoutBlock:(id /* block */)a1 error:(id *)a2; - (BOOL)_processingQueueRestoreClusteringCacheWithCacheDirectoryURL:(id)a0 clusterState:(id)a1 threshold:(id)a2 error:(id *)a3; - (BOOL)_processingQueueRestoreFromClusterSnapshotFileAtURL:(id)a0 error:(id *)a1; - (BOOL)_processingQueueSaveClusterCache:(id *)a0; - (void)_processingQueueSyncClustererWithPhotoLibraryUsingFacesInClusterCache:(id)a0 cancelOrExtendTimeoutBlock:(id /* block */)a1; - (id)_propertyDictionaryFileURL; - (void)_readPropertyDictionary; - (void)_recordClusterRebuildRequired:(BOOL)a0; - (void)_recordClusteringState:(BOOL)a0; - (void)_recordCountOfPendingFacesToAdd:(unsigned long long)a0; - (void)_recordCurrentStatus:(struct { unsigned long long x0; unsigned long long x1; BOOL x2; BOOL x3; })a0; - (void)_recordIncrementCountOfPendingFacesToAdd:(unsigned long long)a0; - (void)_removeEmptyGroups; - (void)_removeVisionClusterCacheFilesNotReferencedByVisionClusterState:(id)a0; - (id)_resolveConflictingL0ClustersFromVNClusters:(id)a0 excludedL0ClustersByL1ClusterId:(id *)a1 cancelOrExtendTimeoutBlock:(id /* block */)a2; - (void)_setPropertyDictionaryValue:(id)a0 forKey:(id)a1; - (id)_visionClusterStateDataBlobFromClusterSnapshotFileAtURL:(id)a0 error:(id *)a1; - (void)cancelAllSuggestionRequests; - (void)cancelClustering; - (void)cancelSuggestionRequest:(id)a0; - (void)clusterAndWaitWithCancelOrExtendTimeoutBlock:(id /* block */)a0; - (void)clusterIfNecessaryAndWaitWithCancelOrExtendTimeoutBlock:(id /* block */)a0; - (unsigned long long)clusteredFaceCount; - (id)differencesBetweenClusterCacheAndLibrary:(id *)a0 excludedL0ClustersByL1ClusterId:(id *)a1 cancelOrExtendTimeoutBlock:(id /* block */)a2; - (id)distanceBetweenLevel0ClusterIdentifiedByFaceCSN:(unsigned long long)a0 andLevel0ClusterIdentifiedByFaceCSN:(unsigned long long)a1 error:(id *)a2; - (id)distancesFromClustersIdentifiedByFaceCSNs:(id)a0 toClustersIdentifiedByFaceCSNs:(id)a1 error:(id *)a2; - (BOOL)getClusters:(id *)a0 threshold:(double *)a1 utilizingGPU:(BOOL *)a2 cancelOrExtendTimeoutBlock:(id /* block */)a3 error:(id *)a4; - (id)initWithPhotoLibrary:(id)a0 andContext:(id)a1; - (BOOL)isReadyToReturnSuggestions; - (id)level0ClusterAsFaceCSNsByLevel0KeyFaceCSNForClusterIdentifiedByFaceCSN:(unsigned long long)a0 error:(id *)a1; - (unsigned long long)numberOfAccumulatedClusterChanges; - (id)requestSuggestionsForFaceClusterSequenceNumbers:(id)a0 withClusteringFlags:(id)a1 updateHandler:(id /* block */)a2 error:(id *)a3; - (unsigned long long)restoreClusterCacheAndSyncWithLibrary:(BOOL)a0 cancelOrExtendTimeoutBlock:(id /* block */)a1 error:(id *)a2; - (void)scheduleClusteringAfterRemovingFaceCSNs:(id)a0 addingFaceIdStrs:(id)a1; - (id)suggestedFaceClusterSequenceNumbersForFaceClusterSequenceNumbersRepresentingClusters:(id)a0 error:(id *)a1; @end