anchor.diff:      height: String
       includeArtworksByFollowedArtists: Boolean
       includeMediumFilterInAggregation: Boolean
  +    input: FilterArtworksInput
       inquireableOnly: Boolean
       keyword: String
   
  
positive.code:     height: String
      includeArtworksByFollowedArtists: Boolean
      includeMediumFilterInAggregation: Boolean
      inquireableOnly: Boolean
      keyword: String
  
  
negative.code: 
    # The item at the end of the edge
    node: Artwork
  }
  
  input FilterArtworksInput {
    acquireable: Boolean
    additionalGeneIDs: [String]
    after: String
    aggregationPartnerCities: [String]
    aggregations: [ArtworkAggregation]
    artistID: String
    artistIDs: [String]
    artistNationalities: [String]
    artistSeriesID: String
    atAuction: Boolean
    attributionClass: [String]
    before: String
    color: String
    colors: [String]
    dimensionRange: String
    excludeArtworkIDs: [String]
    extraAggregationGeneIDs: [String]
    first: Int
    forSale: Boolean
    geneID: String
    geneIDs: [String]
    height: String
    includeArtworksByFollowedArtists: Boolean
    includeMediumFilterInAggregation: Boolean
    inquireableOnly: Boolean
    keyword: String
  
    # When true, will only return exact keyword match
    keywordMatchExact: Boolean
    last: Int
    locationCities: [String]
    majorPeriods: [String]
  
    # When true, will only return `marketable` works (not nude or provocative).
    marketable: Boolean
    materialsTerms: [String]
  
    # A string from the list of allocations, or * to denote all mediums
    medium: String
    offerable: Boolean
    page: Int
    partnerCities: [String]
    partnerID: ID
    partnerIDs: [String]
    period: String
    periods: [String]
    priceRange: String
    saleID: ID
    size: Int
  
    # Filter results by Artwork sizes
    sizes: [ArtworkSizes]
    sort: String
    tagID: String
    width: String
  }
  
  type FilterSaleArtworksCounts {
  