001/* 002 * Copyright (c) 2015-2020, Oracle and/or its affiliates. All rights reserved. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 017package org.tribuo.clustering; 018 019import com.oracle.labs.mlrg.olcut.util.MutableLong; 020import org.tribuo.MutableOutputInfo; 021 022/** 023 * A mutable {@link ClusteringInfo}. Can record new observations of {@link ClusterID}s, incrementing the 024 * appropriate counts. 025 */ 026public class MutableClusteringInfo extends ClusteringInfo implements MutableOutputInfo<ClusterID> { 027 private static final long serialVersionUID = 1L; 028 029 MutableClusteringInfo() { 030 super(); 031 } 032 033 MutableClusteringInfo(ClusteringInfo info) { 034 super(info); 035 } 036 037 @Override 038 public void observe(ClusterID output) { 039 if (output == ClusteringFactory.UNASSIGNED_CLUSTER_ID) { 040 unknownCount++; 041 } else { 042 int id = output.getID(); 043 MutableLong value = clusterCounts.computeIfAbsent(id, k -> new MutableLong()); 044 value.increment(); 045 } 046 } 047 048 @Override 049 public void clear() { 050 clusterCounts.clear(); 051 } 052 053 @Override 054 public MutableClusteringInfo copy() { 055 return new MutableClusteringInfo(this); 056 } 057 058}