CoolFace
Datasetpublic

basant307/AI_Governance_Project

sourceHugging Faceapache-2.0updated 2mo agoView on Hugging Face
0likes48downloads
degree.mjs120 linesDownload Raw Back to collection
1import * as util from '../util/index.mjs';2 3let elesfn = {};4 5function defineDegreeFunction( callback ){6  return function( includeLoops ){7    let self = this;8 9    if( includeLoops === undefined ){10      includeLoops = true;11    }12 13    if( self.length === 0 ){ return; }14 15    if( self.isNode() && !self.removed() ){16      let degree = 0;17      let node = self[0];18      let connectedEdges = node._private.edges;19 20      for( let i = 0; i < connectedEdges.length; i++ ){21        let edge = connectedEdges[ i ];22 23        if( !includeLoops && edge.isLoop() ){24          continue;25        }26 27        degree += callback( node, edge );28      }29 30      return degree;31    } else {32      return;33    }34  };35}36 37util.extend( elesfn, {38  degree: defineDegreeFunction( function( node, edge ){39    if( edge.source().same( edge.target() ) ){40      return 2;41    } else {42      return 1;43    }44  } ),45 46  indegree: defineDegreeFunction( function( node, edge ){47    if( edge.target().same( node ) ){48      return 1;49    } else {50      return 0;51    }52  } ),53 54  outdegree: defineDegreeFunction( function( node, edge ){55    if( edge.source().same( node ) ){56      return 1;57    } else {58      return 0;59    }60  } )61} );62 63function defineDegreeBoundsFunction( degreeFn, callback ){64  return function( includeLoops ){65    let ret;66    let nodes = this.nodes();67 68    for( let i = 0; i < nodes.length; i++ ){69      let ele = nodes[ i ];70      let degree = ele[ degreeFn ]( includeLoops );71      if( degree !== undefined && (ret === undefined || callback( degree, ret )) ){72        ret = degree;73      }74    }75 76    return ret;77  };78}79 80util.extend( elesfn, {81  minDegree: defineDegreeBoundsFunction( 'degree', function( degree, min ){82    return degree < min;83  } ),84 85  maxDegree: defineDegreeBoundsFunction( 'degree', function( degree, max ){86    return degree > max;87  } ),88 89  minIndegree: defineDegreeBoundsFunction( 'indegree', function( degree, min ){90    return degree < min;91  } ),92 93  maxIndegree: defineDegreeBoundsFunction( 'indegree', function( degree, max ){94    return degree > max;95  } ),96 97  minOutdegree: defineDegreeBoundsFunction( 'outdegree', function( degree, min ){98    return degree < min;99  } ),100 101  maxOutdegree: defineDegreeBoundsFunction( 'outdegree', function( degree, max ){102    return degree > max;103  } )104} );105 106util.extend( elesfn, {107  totalDegree: function( includeLoops ){108    let total = 0;109    let nodes = this.nodes();110 111    for( let i = 0; i < nodes.length; i++ ){112      total += nodes[ i ].degree( includeLoops );113    }114 115    return total;116  }117} );118 119export default elesfn;120 
basant307/AI_Governance_Project · CoolFace