// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT License.
// See the LICENSE file in the project root for more information. 
using System.Collections.Generic;
using System.Linq;
using System.Reactive.Concurrency;
using System.Reactive.Joins;
using System.Reactive.Subjects;
using System.Threading;
using System.Threading.Tasks;
namespace System.Reactive.Linq
{
    /// 
    /// Internal interface describing the LINQ to Events query language.
    /// 
    internal interface IQueryLanguage
    {
        #region * Aggregates *
        IObservable Aggregate(IObservable source, TAccumulate seed, Func accumulator);
        IObservable Aggregate(IObservable source, TAccumulate seed, Func accumulator, Func resultSelector);
        IObservable Aggregate(IObservable source, Func accumulator);
        IObservable All(IObservable source, Func predicate);
        IObservable Any(IObservable source);
        IObservable Any(IObservable source, Func predicate);
        IObservable Average(IObservable source);
        IObservable Average(IObservable source);
        IObservable Average(IObservable source);
        IObservable Average(IObservable source);
        IObservable Average(IObservable source);
        IObservable Average(IObservable source);
        IObservable Average(IObservable source);
        IObservable Average(IObservable source);
        IObservable Average(IObservable source);
        IObservable Average(IObservable source);
        IObservable Average(IObservable source, Func selector);
        IObservable Average(IObservable source, Func selector);
        IObservable Average(IObservable source, Func selector);
        IObservable Average(IObservable source, Func selector);
        IObservable Average(IObservable source, Func selector);
        IObservable Average(IObservable source, Func selector);
        IObservable Average(IObservable source, Func selector);
        IObservable Average(IObservable source, Func selector);
        IObservable Average(IObservable source, Func selector);
        IObservable Average(IObservable source, Func selector);
        IObservable Contains(IObservable source, TSource value);
        IObservable Contains(IObservable source, TSource value, IEqualityComparer comparer);
        IObservable Count(IObservable source);
        IObservable Count(IObservable source, Func predicate);
        IObservable ElementAt(IObservable source, int index);
        IObservable ElementAtOrDefault(IObservable source, int index);
        IObservable FirstAsync(IObservable source);
        IObservable FirstAsync(IObservable source, Func predicate);
        IObservable FirstOrDefaultAsync(IObservable source);
        IObservable FirstOrDefaultAsync(IObservable source, Func predicate);
        IObservable IsEmpty(IObservable source);
        IObservable LastAsync(IObservable source);
        IObservable LastAsync(IObservable source, Func predicate);
        IObservable LastOrDefaultAsync(IObservable source);
        IObservable LastOrDefaultAsync(IObservable source, Func predicate);
        IObservable LongCount(IObservable source);
        IObservable LongCount(IObservable source, Func predicate);
        IObservable Max(IObservable source);
        IObservable Max(IObservable source, IComparer comparer);
        IObservable Max(IObservable source);
        IObservable Max(IObservable source);
        IObservable Max(IObservable source);
        IObservable Max(IObservable source);
        IObservable Max(IObservable source);
        IObservable Max(IObservable source);
        IObservable Max(IObservable source);
        IObservable Max(IObservable source);
        IObservable Max(IObservable source);
        IObservable Max(IObservable source);
        IObservable Max(IObservable source, Func selector);
        IObservable Max(IObservable source, Func selector, IComparer comparer);
        IObservable Max(IObservable source, Func selector);
        IObservable Max(IObservable source, Func selector);
        IObservable Max(IObservable source, Func selector);
        IObservable Max(IObservable source, Func selector);
        IObservable Max(IObservable source, Func selector);
        IObservable Max(IObservable source, Func selector);
        IObservable Max(IObservable source, Func selector);
        IObservable Max(IObservable source, Func selector);
        IObservable Max(IObservable source, Func selector);
        IObservable Max(IObservable source, Func selector);
        IObservable> MaxBy(IObservable source, Func keySelector);
        IObservable> MaxBy(IObservable source, Func keySelector, IComparer comparer);
        IObservable Min(IObservable source);
        IObservable Min(IObservable source, IComparer comparer);
        IObservable Min(IObservable source);
        IObservable Min(IObservable source);
        IObservable Min(IObservable source);
        IObservable Min(IObservable source);
        IObservable Min(IObservable source);
        IObservable Min(IObservable source);
        IObservable Min(IObservable source);
        IObservable Min(IObservable source);
        IObservable Min(IObservable source);
        IObservable Min(IObservable source);
        IObservable