# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

# Job

# Uniques Profile
Trials_lgMinU=0  #The starting # of uniques that is printed at the end. 0
Trials_lgMaxU=20 #How high the # uniques go 23
Trials_UPPO=16   #The horizontal x-resolution of trials points

# Trials Profile
Trials_lgMaxT=10 #23 #Max trials at start (low counts) 23
Trials_lgMinT=4  #Min trials at tail (high counts) 4

#Trails Speed related
Trials_lgMinBpU=4   #start the downward slope of trials at this U 4
Trials_lgMaxBpU=20  #stop the downward slope of trials at this U 20

# Date-Time Profile
TimeZone=PST
TimeZoneOffset=-28800000 # offset in millisec
FileNameDateFormat=yyyyMMdd'_'HHmmssz
ReadableDateFormat=yyyy/MM/dd HH:mm:ss z

#Job Profile
JobProfile=org.apache.datasketches.characterization.theta.concurrent.ConcurrentThetaMultithreadedSpeedProfile
LgK=12 #shared sketch
THETA_lgRF=0     #set the log resize factor to 0 (RF = 1)
THETA_famName=QUICKSELECT #ALPHA #QUICKSELECT Cannot use ALPHA until 0.10.4
THETA_p=1.0
CONCURRENT_THETA_localLgK=4
CONCURRENT_THETA_maxConcurrencyError=0.04
CONCURRENT_THETA_rebuild=false
CONCURRENT_THETA_poolThreads=1
CONCURRENT_THETA_offHeap=false
CONCURRENT_THETA_ordered=true

CONCURRENT_THETA_numReaders=0
CONCURRENT_THETA_numWriters=4
CONCURRENT_THETA_writersRatio=0
CONCURRENT_THETA_ThreadSafe=true

