Team Ai
Datasetpublic

Brunobkr/llama.cpp_AlgMor24_github

ΩFFFΣLLIa • llama.cpp • AlgMor24 ██████╗ ███████╗███████╗███████╗██╗ ██╗ ██╗ █████╗ ██╔═══██╗██╔════╝██╔════╝██╔════╝██║ ██║ ██║██╔══██╗ ██║ ██║█████╗ █████╗ █████╗ ██║ ██║ ██║███████║ ██║ ██║██╔══╝ ██╔══╝ ██╔══╝ ██║ ██║ ██║██╔══██║ ╚██████╔╝██║ ██║ ███████╗███████╗███████╗██║██║ ██║ ╚═════╝ ╚═╝ ╚═╝ ╚══════╝╚══════╝╚══════╝╚═╝╚═╝ ╚═╝ High-Performance LLM / VLM Inference & Autonomous Agentic Ecosystem… See the full description on the dataset page: https://huggingface.co/datasets/Brunobkr/llama.cpp_AlgMor24_github.

sourceHugging Faceupdated 2mo agoView on Hugging Face
0likes3kdownloads
input.mjs815 linesDownload Raw Back to dist
1/*!2  Copyright 2013 Lovell Fuller and others.3  SPDX-License-Identifier: Apache-2.04*/5 6import is from './is.mjs';7import sharp from './sharp.mjs';8 9/**10 * Justification alignment11 * @member12 * @private13 */14const align = {15  left: 'low',16  top: 'low',17  low: 'low',18  center: 'centre',19  centre: 'centre',20  right: 'high',21  bottom: 'high',22  high: 'high'23};24 25const inputStreamParameters = [26  // Limits and error handling27  'failOn', 'limitInputPixels', 'limitInputChannels', 'unlimited',28  // Format-generic29  'animated', 'autoOrient', 'density', 'ignoreIcc', 'page', 'pages', 'sequentialRead',30  // Format-specific31  'jp2', 'openSlide', 'pdf', 'raw', 'svg', 'tiff',32  // Deprecated33  'openSlideLevel', 'pdfBackground', 'tiffSubifd'34];35 36/**37 * Extract input options, if any, from an object.38 * @private39 */40function _inputOptionsFromObject (obj) {41  const params = inputStreamParameters42    .filter(p => is.defined(obj[p]))43    .map(p => ([p, obj[p]]));44  return params.length45    ? Object.fromEntries(params)46    : undefined;47}48 49/**50 * Create Object containing input and input-related options.51 * @private52 */53function _createInputDescriptor (input, inputOptions, containerOptions) {54  const inputDescriptor = {55    autoOrient: false,56    failOn: 'warning',57    limitInputPixels: 0x3FFF ** 2,58    limitInputChannels: 5,59    ignoreIcc: false,60    unlimited: false,61    sequentialRead: true62  };63  if (is.string(input)) {64    // filesystem65    inputDescriptor.file = input;66  } else if (is.buffer(input)) {67    // Buffer68    if (input.length === 0) {69      throw Error('Input Buffer is empty');70    }71    inputDescriptor.buffer = input;72  } else if (is.arrayBuffer(input)) {73    if (input.byteLength === 0) {74      throw Error('Input bit Array is empty');75    }76    inputDescriptor.buffer = Buffer.from(input, 0, input.byteLength);77  } else if (is.typedArray(input)) {78    if (input.length === 0) {79      throw Error('Input Bit Array is empty');80    }81    inputDescriptor.buffer = Buffer.from(input.buffer, input.byteOffset, input.byteLength);82  } else if (is.plainObject(input) && !is.defined(inputOptions)) {83    // Plain Object descriptor, e.g. create84    inputOptions = input;85    if (_inputOptionsFromObject(inputOptions)) {86      // Stream with options87      inputDescriptor.buffer = [];88    }89  } else if (!is.defined(input) && !is.defined(inputOptions) && is.object(containerOptions) && containerOptions.allowStream) {90    // Stream without options91    inputDescriptor.buffer = [];92  } else if (Array.isArray(input)) {93    if (input.length > 1) {94      // Join images together95      if (!this.options.joining) {96        this.options.joining = true;97        this.options.join = input.map(i => this._createInputDescriptor(i));98      } else {99        throw new Error('Recursive join is unsupported');100      }101    } else {102      throw new Error('Expected at least two images to join');103    }104  } else {105    throw new Error(`Unsupported input '${input}' of type ${typeof input}${106      is.defined(inputOptions) ? ` when also providing options of type ${typeof inputOptions}` : ''107    }`);108  }109  if (is.object(inputOptions)) {110    // failOn111    if (is.defined(inputOptions.failOn)) {112      if (is.string(inputOptions.failOn) && is.inArray(inputOptions.failOn, ['none', 'truncated', 'error', 'warning'])) {113        inputDescriptor.failOn = inputOptions.failOn;114      } else {115        throw is.invalidParameterError('failOn', 'one of: none, truncated, error, warning', inputOptions.failOn);116      }117    }118    // autoOrient119    if (is.defined(inputOptions.autoOrient)) {120      if (is.bool(inputOptions.autoOrient)) {121        inputDescriptor.autoOrient = inputOptions.autoOrient;122      } else {123        throw is.invalidParameterError('autoOrient', 'boolean', inputOptions.autoOrient);124      }125    }126    // Density127    if (is.defined(inputOptions.density)) {128      if (is.number(inputOptions.density) && is.inRange(inputOptions.density, 1, 100000)) {129        inputDescriptor.density = inputOptions.density;130      } else {131        throw is.invalidParameterError('density', 'number between 1 and 100000', inputOptions.density);132      }133    }134    // Ignore embeddded ICC profile135    if (is.defined(inputOptions.ignoreIcc)) {136      if (is.bool(inputOptions.ignoreIcc)) {137        inputDescriptor.ignoreIcc = inputOptions.ignoreIcc;138      } else {139        throw is.invalidParameterError('ignoreIcc', 'boolean', inputOptions.ignoreIcc);140      }141    }142    // limitInputPixels143    if (is.defined(inputOptions.limitInputPixels)) {144      if (is.bool(inputOptions.limitInputPixels)) {145        inputDescriptor.limitInputPixels = inputOptions.limitInputPixels146          ? 0x3FFF ** 2147          : 0;148      } else if (is.integer(inputOptions.limitInputPixels) && is.inRange(inputOptions.limitInputPixels, 0, Number.MAX_SAFE_INTEGER)) {149        inputDescriptor.limitInputPixels = inputOptions.limitInputPixels;150      } else {151        throw is.invalidParameterError('limitInputPixels', 'positive integer', inputOptions.limitInputPixels);152      }153    }154    // limitInputChannels155    if (is.defined(inputOptions.limitInputChannels)) {156      if (is.bool(inputOptions.limitInputChannels)) {157        inputDescriptor.limitInputChannels = inputOptions.limitInputChannels ? 5 : 0;158      } else if (is.integer(inputOptions.limitInputChannels) && is.inRange(inputOptions.limitInputChannels, 0, Number.MAX_SAFE_INTEGER)) {159        inputDescriptor.limitInputChannels = inputOptions.limitInputChannels;160      } else {161        throw is.invalidParameterError('limitInputChannels', 'positive integer', inputOptions.limitInputChannels);162      }163    }164    // unlimited165    if (is.defined(inputOptions.unlimited)) {166      if (is.bool(inputOptions.unlimited)) {167        inputDescriptor.unlimited = inputOptions.unlimited;168      } else {169        throw is.invalidParameterError('unlimited', 'boolean', inputOptions.unlimited);170      }171    }172    // sequentialRead173    if (is.defined(inputOptions.sequentialRead)) {174      if (is.bool(inputOptions.sequentialRead)) {175        inputDescriptor.sequentialRead = inputOptions.sequentialRead;176      } else {177        throw is.invalidParameterError('sequentialRead', 'boolean', inputOptions.sequentialRead);178      }179    }180    // Raw pixel input181    if (is.defined(inputOptions.raw)) {182      if (183        is.object(inputOptions.raw) &&184        is.integer(inputOptions.raw.width) && is.inRange(inputOptions.raw.width, 1, 100000000) &&185        is.integer(inputOptions.raw.height) && is.inRange(inputOptions.raw.height, 1, 100000000) &&186        is.integer(inputOptions.raw.channels) && is.inRange(inputOptions.raw.channels, 1, 4)187      ) {188        inputDescriptor.rawWidth = inputOptions.raw.width;189        inputDescriptor.rawHeight = inputOptions.raw.height;190        inputDescriptor.rawChannels = inputOptions.raw.channels;191        switch (input.constructor) {192          case Uint8Array:193          case Uint8ClampedArray:194            inputDescriptor.rawDepth = 'uchar';195            break;196          case Int8Array:197            inputDescriptor.rawDepth = 'char';198            break;199          case Uint16Array:200            inputDescriptor.rawDepth = 'ushort';201            break;202          case Int16Array:203            inputDescriptor.rawDepth = 'short';204            break;205          case Uint32Array:206            inputDescriptor.rawDepth = 'uint';207            break;208          case Int32Array:209            inputDescriptor.rawDepth = 'int';210            break;211          case Float32Array:212            inputDescriptor.rawDepth = 'float';213            break;214          case Float64Array:215            inputDescriptor.rawDepth = 'double';216            break;217          default:218            inputDescriptor.rawDepth = 'uchar';219            break;220        }221      } else {222        throw new Error('Expected width, height and channels for raw pixel input');223      }224      inputDescriptor.rawPremultiplied = false;225      if (is.defined(inputOptions.raw.premultiplied)) {226        if (is.bool(inputOptions.raw.premultiplied)) {227          inputDescriptor.rawPremultiplied = inputOptions.raw.premultiplied;228        } else {229          throw is.invalidParameterError('raw.premultiplied', 'boolean', inputOptions.raw.premultiplied);230        }231      }232      inputDescriptor.rawPageHeight = 0;233      if (is.defined(inputOptions.raw.pageHeight)) {234        if (is.integer(inputOptions.raw.pageHeight) && inputOptions.raw.pageHeight > 0 && inputOptions.raw.pageHeight <= inputOptions.raw.height) {235          if (inputOptions.raw.height % inputOptions.raw.pageHeight !== 0) {236            throw new Error(`Expected raw.height ${inputOptions.raw.height} to be a multiple of raw.pageHeight ${inputOptions.raw.pageHeight}`);237          }238          inputDescriptor.rawPageHeight = inputOptions.raw.pageHeight;239        } else {240          throw is.invalidParameterError('raw.pageHeight', 'positive integer', inputOptions.raw.pageHeight);241        }242      }243    }244    // Multi-page input (GIF, TIFF, PDF)245    if (is.defined(inputOptions.animated)) {246      if (is.bool(inputOptions.animated)) {247        inputDescriptor.pages = inputOptions.animated ? -1 : 1;248      } else {249        throw is.invalidParameterError('animated', 'boolean', inputOptions.animated);250      }251    }252    if (is.defined(inputOptions.pages)) {253      if (is.integer(inputOptions.pages) && is.inRange(inputOptions.pages, -1, 100000)) {254        inputDescriptor.pages = inputOptions.pages;255      } else {256        throw is.invalidParameterError('pages', 'integer between -1 and 100000', inputOptions.pages);257      }258    }259    if (is.defined(inputOptions.page)) {260      if (is.integer(inputOptions.page) && is.inRange(inputOptions.page, 0, 100000)) {261        inputDescriptor.page = inputOptions.page;262      } else {263        throw is.invalidParameterError('page', 'integer between 0 and 100000', inputOptions.page);264      }265    }266    // OpenSlide specific options267    if (is.object(inputOptions.openSlide) && is.defined(inputOptions.openSlide.level)) {268      if (is.integer(inputOptions.openSlide.level) && is.inRange(inputOptions.openSlide.level, 0, 256)) {269        inputDescriptor.openSlideLevel = inputOptions.openSlide.level;270      } else {271        throw is.invalidParameterError('openSlide.level', 'integer between 0 and 256', inputOptions.openSlide.level);272      }273    } else if (is.defined(inputOptions.level)) {274      // Deprecated275      if (is.integer(inputOptions.level) && is.inRange(inputOptions.level, 0, 256)) {276        inputDescriptor.openSlideLevel = inputOptions.level;277      } else {278        throw is.invalidParameterError('level', 'integer between 0 and 256', inputOptions.level);279      }280    }281    // TIFF specific options282    if (is.object(inputOptions.tiff) && is.defined(inputOptions.tiff.subifd)) {283      if (is.integer(inputOptions.tiff.subifd) && is.inRange(inputOptions.tiff.subifd, -1, 100000)) {284        inputDescriptor.tiffSubifd = inputOptions.tiff.subifd;285      } else {286        throw is.invalidParameterError('tiff.subifd', 'integer between -1 and 100000', inputOptions.tiff.subifd);287      }288    } else if (is.defined(inputOptions.subifd)) {289      // Deprecated290      if (is.integer(inputOptions.subifd) && is.inRange(inputOptions.subifd, -1, 100000)) {291        inputDescriptor.tiffSubifd = inputOptions.subifd;292      } else {293        throw is.invalidParameterError('subifd', 'integer between -1 and 100000', inputOptions.subifd);294      }295    }296    // SVG specific options297    if (is.object(inputOptions.svg)) {298      if (is.defined(inputOptions.svg.stylesheet)) {299        if (is.string(inputOptions.svg.stylesheet)) {300          inputDescriptor.svgStylesheet = inputOptions.svg.stylesheet;301        } else {302          throw is.invalidParameterError('svg.stylesheet', 'string', inputOptions.svg.stylesheet);303        }304      }305      if (is.defined(inputOptions.svg.highBitdepth)) {306        if (is.bool(inputOptions.svg.highBitdepth)) {307          inputDescriptor.svgHighBitdepth = inputOptions.svg.highBitdepth;308        } else {309          throw is.invalidParameterError('svg.highBitdepth', 'boolean', inputOptions.svg.highBitdepth);310        }311      }312    }313    // PDF specific options314    if (is.object(inputOptions.pdf) && is.defined(inputOptions.pdf.background)) {315      inputDescriptor.pdfBackground = this._getBackgroundColourOption(inputOptions.pdf.background);316    } else if (is.defined(inputOptions.pdfBackground)) {317      // Deprecated318      inputDescriptor.pdfBackground = this._getBackgroundColourOption(inputOptions.pdfBackground);319    }320    // JPEG 2000 specific options321    if (is.object(inputOptions.jp2) && is.defined(inputOptions.jp2.oneshot)) {322      if (is.bool(inputOptions.jp2.oneshot)) {323        inputDescriptor.jp2Oneshot = inputOptions.jp2.oneshot;324      } else {325        throw is.invalidParameterError('jp2.oneshot', 'boolean', inputOptions.jp2.oneshot);326      }327    }328    // Create new image329    if (is.defined(inputOptions.create)) {330      if (331        is.object(inputOptions.create) &&332        is.integer(inputOptions.create.width) && is.inRange(inputOptions.create.width, 1, 100000000) &&333        is.integer(inputOptions.create.height) && is.inRange(inputOptions.create.height, 1, 100000000) &&334        is.integer(inputOptions.create.channels)335      ) {336        inputDescriptor.createWidth = inputOptions.create.width;337        inputDescriptor.createHeight = inputOptions.create.height;338        inputDescriptor.createChannels = inputOptions.create.channels;339        inputDescriptor.createPageHeight = 0;340        if (is.defined(inputOptions.create.pageHeight)) {341          if (is.integer(inputOptions.create.pageHeight) && inputOptions.create.pageHeight > 0 && inputOptions.create.pageHeight <= inputOptions.create.height) {342            if (inputOptions.create.height % inputOptions.create.pageHeight !== 0) {343              throw new Error(`Expected create.height ${inputOptions.create.height} to be a multiple of create.pageHeight ${inputOptions.create.pageHeight}`);344            }345            inputDescriptor.createPageHeight = inputOptions.create.pageHeight;346          } else {347            throw is.invalidParameterError('create.pageHeight', 'positive integer', inputOptions.create.pageHeight);348          }349        }350        // Noise351        if (is.defined(inputOptions.create.noise)) {352          if (!is.object(inputOptions.create.noise)) {353            throw new Error('Expected noise to be an object');354          }355          if (inputOptions.create.noise.type !== 'gaussian') {356            throw new Error('Only gaussian noise is supported at the moment');357          }358          inputDescriptor.createNoiseType = inputOptions.create.noise.type;359          if (!is.inRange(inputOptions.create.channels, 1, 4)) {360            throw is.invalidParameterError('create.channels', 'number between 1 and 4', inputOptions.create.channels);361          }362          inputDescriptor.createNoiseMean = 128;363          if (is.defined(inputOptions.create.noise.mean)) {364            if (is.number(inputOptions.create.noise.mean) && is.inRange(inputOptions.create.noise.mean, 0, 10000)) {365              inputDescriptor.createNoiseMean = inputOptions.create.noise.mean;366            } else {367              throw is.invalidParameterError('create.noise.mean', 'number between 0 and 10000', inputOptions.create.noise.mean);368            }369          }370          inputDescriptor.createNoiseSigma = 30;371          if (is.defined(inputOptions.create.noise.sigma)) {372            if (is.number(inputOptions.create.noise.sigma) && is.inRange(inputOptions.create.noise.sigma, 0, 10000)) {373              inputDescriptor.createNoiseSigma = inputOptions.create.noise.sigma;374            } else {375              throw is.invalidParameterError('create.noise.sigma', 'number between 0 and 10000', inputOptions.create.noise.sigma);376            }377          }378        } else if (is.defined(inputOptions.create.background)) {379          if (!is.inRange(inputOptions.create.channels, 3, 4)) {380            throw is.invalidParameterError('create.channels', 'number between 3 and 4', inputOptions.create.channels);381          }382          inputDescriptor.createBackground = this._getBackgroundColourOption(inputOptions.create.background);383        } else {384          throw new Error('Expected valid noise or background to create a new input image');385        }386        delete inputDescriptor.buffer;387      } else {388        throw new Error('Expected valid width, height and channels to create a new input image');389      }390    }391    // Create a new image with text392    if (is.defined(inputOptions.text)) {393      if (is.object(inputOptions.text) && is.string(inputOptions.text.text)) {394        inputDescriptor.textValue = inputOptions.text.text;395        if (is.defined(inputOptions.text.height) && is.defined(inputOptions.text.dpi)) {396          throw new Error('Expected only one of dpi or height');397        }398        if (is.defined(inputOptions.text.font)) {399          if (is.string(inputOptions.text.font)) {400            inputDescriptor.textFont = inputOptions.text.font;401          } else {402            throw is.invalidParameterError('text.font', 'string', inputOptions.text.font);403          }404        }405        if (is.defined(inputOptions.text.fontfile)) {406          if (is.string(inputOptions.text.fontfile)) {407            inputDescriptor.textFontfile = inputOptions.text.fontfile;408          } else {409            throw is.invalidParameterError('text.fontfile', 'string', inputOptions.text.fontfile);410          }411        }412        if (is.defined(inputOptions.text.width)) {413          if (is.integer(inputOptions.text.width) && is.inRange(inputOptions.text.width, 1, 1000000)) {414            inputDescriptor.textWidth = inputOptions.text.width;415          } else {416            throw is.invalidParameterError('text.width', 'integer between 1 and 1000000', inputOptions.text.width);417          }418        }419        if (is.defined(inputOptions.text.height)) {420          if (is.integer(inputOptions.text.height) && is.inRange(inputOptions.text.height, 1, 1000000)) {421            inputDescriptor.textHeight = inputOptions.text.height;422          } else {423            throw is.invalidParameterError('text.height', 'integer between 1 and 1000000', inputOptions.text.height);424          }425        }426        if (is.defined(inputOptions.text.align)) {427          if (is.string(inputOptions.text.align) && is.string(this.constructor.align[inputOptions.text.align])) {428            inputDescriptor.textAlign = this.constructor.align[inputOptions.text.align];429          } else {430            throw is.invalidParameterError('text.align', 'valid alignment', inputOptions.text.align);431          }432        }433        if (is.defined(inputOptions.text.justify)) {434          if (is.bool(inputOptions.text.justify)) {435            inputDescriptor.textJustify = inputOptions.text.justify;436          } else {437            throw is.invalidParameterError('text.justify', 'boolean', inputOptions.text.justify);438          }439        }440        if (is.defined(inputOptions.text.dpi)) {441          if (is.integer(inputOptions.text.dpi) && is.inRange(inputOptions.text.dpi, 1, 1000000)) {442            inputDescriptor.textDpi = inputOptions.text.dpi;443          } else {444            throw is.invalidParameterError('text.dpi', 'integer between 1 and 1000000', inputOptions.text.dpi);445          }446        }447        if (is.defined(inputOptions.text.rgba)) {448          if (is.bool(inputOptions.text.rgba)) {449            inputDescriptor.textRgba = inputOptions.text.rgba;450          } else {451            throw is.invalidParameterError('text.rgba', 'bool', inputOptions.text.rgba);452          }453        }454        if (is.defined(inputOptions.text.spacing)) {455          if (is.integer(inputOptions.text.spacing) && is.inRange(inputOptions.text.spacing, -1000000, 1000000)) {456            inputDescriptor.textSpacing = inputOptions.text.spacing;457          } else {458            throw is.invalidParameterError('text.spacing', 'integer between -1000000 and 1000000', inputOptions.text.spacing);459          }460        }461        if (is.defined(inputOptions.text.wrap)) {462          if (is.string(inputOptions.text.wrap) && is.inArray(inputOptions.text.wrap, ['word', 'char', 'word-char', 'none'])) {463            inputDescriptor.textWrap = inputOptions.text.wrap;464          } else {465            throw is.invalidParameterError('text.wrap', 'one of: word, char, word-char, none', inputOptions.text.wrap);466          }467        }468        delete inputDescriptor.buffer;469      } else {470        throw new Error('Expected a valid string to create an image with text.');471      }472    }473    // Join images together474    if (is.defined(inputOptions.join)) {475      if (is.defined(this.options.join)) {476        if (is.defined(inputOptions.join.animated)) {477          if (is.bool(inputOptions.join.animated)) {478            inputDescriptor.joinAnimated = inputOptions.join.animated;479          } else {480            throw is.invalidParameterError('join.animated', 'boolean', inputOptions.join.animated);481          }482        }483        if (is.defined(inputOptions.join.across)) {484          if (is.integer(inputOptions.join.across) && is.inRange(inputOptions.join.across, 1, 1000000)) {485            inputDescriptor.joinAcross = inputOptions.join.across;486          } else {487            throw is.invalidParameterError('join.across', 'integer between 1 and 100000', inputOptions.join.across);488          }489        }490        if (is.defined(inputOptions.join.shim)) {491          if (is.integer(inputOptions.join.shim) && is.inRange(inputOptions.join.shim, 0, 1000000)) {492            inputDescriptor.joinShim = inputOptions.join.shim;493          } else {494            throw is.invalidParameterError('join.shim', 'integer between 0 and 100000', inputOptions.join.shim);495          }496        }497        if (is.defined(inputOptions.join.background)) {498          inputDescriptor.joinBackground = this._getBackgroundColourOption(inputOptions.join.background);499        }500        if (is.defined(inputOptions.join.halign)) {501          if (is.string(inputOptions.join.halign) && is.string(this.constructor.align[inputOptions.join.halign])) {502            inputDescriptor.joinHalign = this.constructor.align[inputOptions.join.halign];503          } else {504            throw is.invalidParameterError('join.halign', 'valid alignment', inputOptions.join.halign);505          }506        }507        if (is.defined(inputOptions.join.valign)) {508          if (is.string(inputOptions.join.valign) && is.string(this.constructor.align[inputOptions.join.valign])) {509            inputDescriptor.joinValign = this.constructor.align[inputOptions.join.valign];510          } else {511            throw is.invalidParameterError('join.valign', 'valid alignment', inputOptions.join.valign);512          }513        }514      } else {515        throw new Error('Expected input to be an array of images to join');516      }517    }518  } else if (is.defined(inputOptions)) {519    throw new Error(`Invalid input options ${inputOptions}`);520  }521  return inputDescriptor;522}523 524/**525 * Handle incoming Buffer chunk on Writable Stream.526 * @private527 * @param {Buffer} chunk528 * @param {string} encoding - unused529 * @param {Function} callback530 */531function _write (chunk, _encoding, callback) {532  if (Array.isArray(this.options.input.buffer)) {533    if (is.buffer(chunk)) {534      if (this.options.input.buffer.length === 0) {535        this.on('finish', () => {536          this.streamInFinished = true;537        });538      }539      this.options.input.buffer.push(chunk);540      callback();541    } else {542      callback(new Error('Non-Buffer data on Writable Stream'));543    }544  } else {545    callback(new Error('Unexpected data on Writable Stream'));546  }547}548 549/**550 * Flattens the array of chunks accumulated in input.buffer.551 * @private552 */553function _flattenBufferIn () {554  if (this._isStreamInput()) {555    this.options.input.buffer = Buffer.concat(this.options.input.buffer);556  }557}558 559/**560 * Are we expecting Stream-based input?561 * @private562 * @returns {boolean}563 */564function _isStreamInput () {565  return Array.isArray(this.options.input.buffer);566}567 568/**569 * Fast access to (uncached) image metadata without decoding any compressed pixel data.570 *571 * This is read from the header of the input image.572 * It does not take into consideration any operations to be applied to the output image,573 * such as resize or rotate.574 *575 * Dimensions in the response will respect the `page` and `pages` properties of the576 * {@link /api-constructor/ constructor parameters}.577 *578 * A `Promise` is returned when `callback` is not provided.579 *580 * - `format`: Name of decoder used to parse image e.g. `jpeg`, `png`, `webp`, `gif`, `svg`, `heif`, `tiff`581 * - `mediaType`: Media Type (MIME Type) e.g. `image/jpeg`, `image/png`, `image/svg+xml`, `image/avif`582 * - `size`: Total size of image in bytes, for Stream and Buffer input only583 * - `width`: Number of pixels wide (EXIF orientation is not taken into consideration, see example below)584 * - `height`: Number of pixels high (EXIF orientation is not taken into consideration, see example below)585 * - `space`: Name of colour space interpretation e.g. `srgb`, `rgb`, `cmyk`, `lab`, `b-w` [...](https://www.libvips.org/API/current/enum.Interpretation.html)586 * - `channels`: Number of bands e.g. `3` for sRGB, `4` for CMYK587 * - `depth`: Name of pixel depth format e.g. `uchar`, `char`, `ushort`, `float` [...](https://www.libvips.org/API/current/enum.BandFormat.html)588 * - `density`: Number of pixels per inch (DPI), if present589 * - `chromaSubsampling`: String containing JPEG chroma subsampling, `4:2:0` or `4:4:4` for RGB, `4:2:0:4` or `4:4:4:4` for CMYK590 * - `isProgressive`: Boolean indicating whether the image is interlaced using a progressive scan591 * - `isPalette`: Boolean indicating whether the image is palette-based (GIF, PNG).592 * - `bitsPerSample`: Number of bits per sample for each channel (GIF, PNG, HEIF).593 * - `pages`: Number of pages/frames contained within the image, with support for TIFF, HEIF, PDF, animated GIF and animated WebP594 * - `pageHeight`: Number of pixels high each page in a multi-page image will be.595 * - `loop`: Number of times to loop an animated image, zero refers to a continuous loop.596 * - `delay`: Delay in ms between each page in an animated image, provided as an array of integers.597 * - `pagePrimary`: Number of the primary page in a HEIF image598 * - `levels`: Details of each level in a multi-level image provided as an array of objects, requires libvips compiled with support for OpenSlide599 * - `subifds`: Number of Sub Image File Directories in an OME-TIFF image600 * - `background`: Default background colour, if present, for PNG (bKGD) and GIF images601 * - `compression`: The encoder used to compress an HEIF file, `av1` (AVIF) or `hevc` (HEIC)602 * - `resolutionUnit`: The unit of resolution (density), either `inch` or `cm`, if present603 * - `hasProfile`: Boolean indicating the presence of an embedded ICC profile604 * - `hasAlpha`: Boolean indicating the presence of an alpha transparency channel605 * - `orientation`: Number value of the EXIF Orientation header, if present606 * - `exif`: Buffer containing raw EXIF data, if present607 * - `icc`: Buffer containing raw [ICC](https://www.npmjs.com/package/icc) profile data, if present608 * - `iptc`: Buffer containing raw IPTC data, if present609 * - `xmp`: Buffer containing raw XMP data, if present610 * - `xmpAsString`: String containing XMP data, if valid UTF-8.611 * - `tifftagPhotoshop`: Buffer containing raw TIFFTAG_PHOTOSHOP data, if present612 * - `formatMagick`: String containing format for images loaded via *magick613 * - `comments`: Array of keyword/text pairs representing PNG text blocks, if present.614 * - `gainMap.image`: HDR gain map, if present, as compressed JPEG image.615 *616 * @example617 * const metadata = await sharp(input).metadata();618 *619 * @example620 * const image = sharp(inputJpg);621 * image622 *   .metadata()623 *   .then(function(metadata) {624 *     return image625 *       .resize(Math.round(metadata.width / 2))626 *       .webp()627 *       .toBuffer();628 *   })629 *   .then(function(data) {630 *     // data contains a WebP image half the width and height of the original JPEG631 *   });632 *633 * @example634 * // Get dimensions taking EXIF Orientation into account.635 * const { autoOrient } = await sharp(input).metadata();636 * const { width, height } = autoOrient;637 *638 * @param {Function} [callback] - called with the arguments `(err, metadata)`639 * @returns {Promise<Object>|Sharp}640 */641function metadata (callback) {642  const stack = Error();643  if (is.fn(callback)) {644    if (this._isStreamInput()) {645      this.on('finish', () => {646        this._flattenBufferIn();647        sharp.metadata(this.options, (err, metadata) => {648          if (err) {649            callback(is.nativeError(err, stack));650          } else {651            callback(null, metadata);652          }653        });654      });655    } else {656      sharp.metadata(this.options, (err, metadata) => {657        if (err) {658          callback(is.nativeError(err, stack));659        } else {660          callback(null, metadata);661        }662      });663    }664    return this;665  } else {666    if (this._isStreamInput()) {667      return new Promise((resolve, reject) => {668        const finished = () => {669          this._flattenBufferIn();670          sharp.metadata(this.options, (err, metadata) => {671            if (err) {672              reject(is.nativeError(err, stack));673            } else {674              resolve(metadata);675            }676          });677        };678        if (this.writableFinished) {679          finished();680        } else {681          this.once('finish', finished);682        }683      });684    } else {685      return new Promise((resolve, reject) => {686        sharp.metadata(this.options, (err, metadata) => {687          if (err) {688            reject(is.nativeError(err, stack));689          } else {690            resolve(metadata);691          }692        });693      });694    }695  }696}697 698/**699 * Access to pixel-derived image statistics for every channel in the image.700 * A `Promise` is returned when `callback` is not provided.701 *702 * - `channels`: Array of channel statistics for each channel in the image. Each channel statistic contains703 *     - `min` (minimum value in the channel)704 *     - `max` (maximum value in the channel)705 *     - `sum` (sum of all values in a channel)706 *     - `squaresSum` (sum of squared values in a channel)707 *     - `mean` (mean of the values in a channel)708 *     - `stdev` (standard deviation for the values in a channel)709 *     - `minX` (x-coordinate of one of the pixel where the minimum lies)710 *     - `minY` (y-coordinate of one of the pixel where the minimum lies)711 *     - `maxX` (x-coordinate of one of the pixel where the maximum lies)712 *     - `maxY` (y-coordinate of one of the pixel where the maximum lies)713 * - `isOpaque`: Is the image fully opaque? Will be `true` if the image has no alpha channel or if every pixel is fully opaque.714 * - `entropy`: Histogram-based estimation of greyscale entropy, discarding alpha channel if any.715 * - `sharpness`: Estimation of greyscale sharpness based on the standard deviation of a Laplacian convolution, discarding alpha channel if any.716 * - `dominant`: Object containing most dominant sRGB colour based on a 4096-bin 3D histogram.717 *718 * **Note**: Statistics are derived from the original input image. Any operations performed on the image must first be719 * written to a buffer in order to run `stats` on the result (see third example).720 *721 * @example722 * const image = sharp(inputJpg);723 * image724 *   .stats()725 *   .then(function(stats) {726 *      // stats contains the channel-wise statistics array and the isOpaque value727 *   });728 *729 * @example730 * const { entropy, sharpness, dominant } = await sharp(input).stats();731 * const { r, g, b } = dominant;732 *733 * @example734 * const image = sharp(input);735 * // store intermediate result736 * const part = await image.extract(region).toBuffer();737 * // create new instance to obtain statistics of extracted region738 * const stats = await sharp(part).stats();739 *740 * @param {Function} [callback] - called with the arguments `(err, stats)`741 * @returns {Promise<Object>}742 */743function stats (callback) {744  const stack = Error();745  if (is.fn(callback)) {746    if (this._isStreamInput()) {747      this.on('finish', () => {748        this._flattenBufferIn();749        sharp.stats(this.options, (err, stats) => {750          if (err) {751            callback(is.nativeError(err, stack));752          } else {753            callback(null, stats);754          }755        });756      });757    } else {758      sharp.stats(this.options, (err, stats) => {759        if (err) {760          callback(is.nativeError(err, stack));761        } else {762          callback(null, stats);763        }764      });765    }766    return this;767  } else {768    if (this._isStreamInput()) {769      return new Promise((resolve, reject) => {770        this.on('finish', function () {771          this._flattenBufferIn();772          sharp.stats(this.options, (err, stats) => {773            if (err) {774              reject(is.nativeError(err, stack));775            } else {776              resolve(stats);777            }778          });779        });780      });781    } else {782      return new Promise((resolve, reject) => {783        sharp.stats(this.options, (err, stats) => {784          if (err) {785            reject(is.nativeError(err, stack));786          } else {787            resolve(stats);788          }789        });790      });791    }792  }793}794 795/**796 * Decorate the Sharp prototype with input-related functions.797 * @module Sharp798 * @private799 */800export default (Sharp) => {801  Object.assign(Sharp.prototype, {802    // Private803    _inputOptionsFromObject,804    _createInputDescriptor,805    _write,806    _flattenBufferIn,807    _isStreamInput,808    // Public809    metadata,810    stats811  });812  // Class attributes813  Sharp.align = align;814};815 
Brunobkr/llama.cpp_AlgMor24_github · Team Ai